summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbwarsaw2001-10-15 20:53:46 +0000
committerbwarsaw2001-10-15 20:53:46 +0000
commit33e83ee21ddc441fc27ffc328291a023e9e8557d (patch)
tree069ff04f2fa1254fca0f2f24d87e2bbe1a158c32
parent2b8f5686a4780a45022c2ad5c3ce7adf3af33b70 (diff)
downloadmailman-33e83ee21ddc441fc27ffc328291a023e9e8557d.tar.gz
mailman-33e83ee21ddc441fc27ffc328291a023e9e8557d.tar.zst
mailman-33e83ee21ddc441fc27ffc328291a023e9e8557d.zip
main(): category_suffix -> category, and get subcat from parts[0]
Pass subcat to change_options() and show_results() calls. option_help(): Get both category and subcat from varhelp. Include the standard footer when no valid variable name is found. Be sure the form action url includes any subcat. Pass subcat to add_options_table_item() call. show_results(): category_suffix -> subcat. Be sure to include the subcat in the form action url. Pass subcat to the show_variables() call. show_variables(): Accept subcat, and pass it along to the add_options_table_item() call. add_options_table_item(): Accept subcat and pass it along to the get_item_gui_description() call. get_item_gui_description(): Accept subcat, and make sure that the VARHELP query url extension includes any subcat, otherwise the variable lookup will fail. member_options(): Include another column which contains the mod user-specific moderation bit. change_options(): Accept subcat, and be sure to pass that into the GetConfigInfo() calls. Also, set the user's Moderate flag based on the value of the user_mod key.
-rw-r--r--Mailman/Cgi/admin.py117
1 files changed, 77 insertions, 40 deletions
diff --git a/Mailman/Cgi/admin.py b/Mailman/Cgi/admin.py
index 91523a167..185a361e4 100644
--- a/Mailman/Cgi/admin.py
+++ b/Mailman/Cgi/admin.py
@@ -85,10 +85,13 @@ def main():
# Which subcategory was requested? Default is `general'
if len(parts) == 1:
category = 'general'
- category_suffix = ''
+ subcat = None
+ elif len(parts) == 2:
+ category = parts[1]
+ subcat = None
else:
category = parts[1]
- category_suffix = category
+ subcat = parts[2]
# Is this a log-out request?
if category == 'logout':
@@ -153,7 +156,7 @@ def main():
if cgidata.keys():
# There are options to change
- change_options(mlist, category, cgidata, doc)
+ change_options(mlist, category, subcat, cgidata, doc)
# Let the list sanity check the changed values
mlist.CheckValues()
# Additional sanity checks
@@ -178,7 +181,7 @@ def main():
turned off. They will receive mail until you fix this
problem.'''))
# Glom up the results page and print it out
- show_results(mlist, doc, category, category_suffix, cgidata)
+ show_results(mlist, doc, category, subcat, cgidata)
print doc.Format()
mlist.Save()
finally:
@@ -297,9 +300,13 @@ def option_help(mlist, varhelp):
# Find out which category and variable help is being requested for.
item = None
reflist = varhelp.split('/')
- if len(reflist) == 2:
- category, varname = reflist
- options = mlist.GetConfigInfo()[category]
+ if len(reflist) >= 2:
+ category = subcat = None
+ if len(reflist) == 2:
+ category, varname = reflist
+ elif len(reflist) == 3:
+ category, subcat, varname = reflist
+ options = mlist.GetConfigInfo(category, subcat)
for i in options:
if i and i[0] == varname:
item = i
@@ -308,6 +315,7 @@ def option_help(mlist, varhelp):
if not item:
bad = _('No valid variable name found.')
add_error_message(doc, bad)
+ doc.AddItem(mlist.GetMailmanFooter())
print doc.Format()
return
# Get the details about the variable
@@ -330,9 +338,13 @@ def option_help(mlist, varhelp):
doc.AddItem("<b>%s</b> (%s): %s<p>" % (varname, category, description))
doc.AddItem("%s<p>" % elaboration)
- form = Form("%s/%s" % (mlist.GetScriptURL('admin'), category))
+ if subcat:
+ url = '%s/%s/%s' % (mlist.GetScriptURL('admin'), category, subcat)
+ else:
+ url = '%s/%s' % (mlist.GetScriptURL('admin'), category)
+ form = Form(url)
valtab = Table(cellspacing=3, cellpadding=4, width='100%')
- add_options_table_item(mlist, category, valtab, item, detailsp=0)
+ add_options_table_item(mlist, category, subcat, valtab, item, detailsp=0)
form.AddItem(valtab)
form.AddItem('<p>')
form.AddItem(Center(submit_button()))
@@ -343,15 +355,19 @@ def option_help(mlist, varhelp):
pages that are displaying this option for this mailing list. You can also
"""))
- doc.AddItem(Link('%s/%s' % (mlist.GetScriptURL('admin'), category),
- _('return to the %(category)s options page.')))
+ adminurl = mlist.GetScriptURL('admin')
+ if subcat:
+ url = '%s/%s/%s' % (adminurl, category, subcat)
+ else:
+ url = '%s/%s' % (adminurl, category)
+ doc.AddItem(Link(url, _('return to the %(category)s options page.')))
doc.AddItem('</em>')
doc.AddItem(mlist.GetMailmanFooter())
print doc.Format()
-def show_results(mlist, doc, category, category_suffix, cgidata):
+def show_results(mlist, doc, category, subcat, cgidata):
# Produce the results page
adminurl = mlist.GetScriptURL('admin')
categories = mlist.GetConfigCategories()
@@ -395,6 +411,7 @@ def show_results(mlist, doc, category, category_suffix, cgidata):
categorykeys = categories.keys()
half = len(categorykeys) / 2
counter = 0
+ subcat = None
for k in categorykeys:
label = _(categories[k][0])
url = '%s/%s' % (adminurl, k)
@@ -434,14 +451,14 @@ def show_results(mlist, doc, category, category_suffix, cgidata):
# Now we need to craft the form that will be submitted, which will contain
# all the variable settings, etc. This is a bit of a kludge because we
# know that the autoreply and members categories supports file uploads.
- if category_suffix:
- encoding = None
- if category_suffix in ('autoreply', 'members'):
- # These have file uploads
- encoding = 'multipart/form-data'
- form = Form('%s/%s' % (adminurl, category_suffix), encoding=encoding)
+ encoding = None
+ if category in ('autoreply', 'members'):
+ encoding = 'multipart/form-data'
+ if subcat:
+ form = Form('%s/%s/%s' % (adminurl, category, subcat),
+ encoding=encoding)
else:
- form = Form(adminurl)
+ form = Form('%s/%s' % (adminurl, category), encoding=encoding)
form.AddItem(
_('''Make your changes in the following section, then submit them
using the <em>Submit Your Changes</em> button below.''')
@@ -470,7 +487,7 @@ def show_results(mlist, doc, category, category_suffix, cgidata):
form.AddItem(Center(password_inputs()))
form.AddItem(Center(submit_button()))
else:
- form.AddItem(show_variables(mlist, category, cgidata, doc))
+ form.AddItem(show_variables(mlist, category, subcat, cgidata, doc))
form.AddItem(Center(submit_button()))
# Add the separator
form.AddItem('<hr>')
@@ -481,8 +498,8 @@ def show_results(mlist, doc, category, category_suffix, cgidata):
-def show_variables(mlist, category, cgidata, doc):
- options = mlist.GetConfigInfo()[category]
+def show_variables(mlist, category, subcat, cgidata, doc):
+ options = mlist.GetConfigInfo(category, subcat)
# The table containing the results
table = Table(cellspacing=3, cellpadding=4, width='100%')
@@ -522,20 +539,21 @@ def show_variables(mlist, category, cgidata, doc):
table.AddRow([Center(Italic(item))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2)
else:
- add_options_table_item(mlist, category, table, item)
+ add_options_table_item(mlist, category, subcat, table, item)
table.AddRow(['<br>'])
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2)
return table
-def add_options_table_item(mlist, category, table, item, detailsp=1):
+def add_options_table_item(mlist, category, subcat, table, item, detailsp=1):
# Add a row to an options table with the item description and value.
varname, kind, params, dependancies, descr, elaboration = \
get_item_characteristics(item)
if elaboration is None:
elaboration = descr
- descr = get_item_gui_description(mlist, category, varname, descr, detailsp)
+ descr = get_item_gui_description(mlist, category, subcat,
+ varname, descr, detailsp)
val = get_item_gui_value(mlist, kind, varname, params)
table.AddRow([descr, val])
table.AddCellInfo(table.GetCurrentRowIndex(), 1,
@@ -679,21 +697,24 @@ def get_item_gui_value(mlist, kind, varname, params):
-def get_item_gui_description(mlist, category, varname, descr, detailsp):
+def get_item_gui_description(mlist, category, subcat,
+ varname, descr, detailsp):
# Return the item's description, with link to details.
#
# Details are not included if this is a VARHELP page, because that /is/
# the details page!
if detailsp:
- text = Label(descr + ' ',
- Link(mlist.GetScriptURL('admin') +
- '/?VARHELP=' + category + '/' + varname,
- _('(Details)')))
-
+ if subcat:
+ varhelp = '/?VARHELP=%s/%s/%s' % (category, subcat, varname)
+ else:
+ varhelp = '/?VARHELP=%s/%s' % (category, varname)
+ link = Link(mlist.GetScriptURL('admin') + varhelp,
+ _('<br>(Details for <b>%s</b>)' % varname)).Format()
+ text = Label('%s %s' % (descr, link)).Format()
else:
- text = Label(descr)
+ text = Label(descr).Format()
if varname[0] == '_':
- text = text.Format() + Label(_('''<br><em><strong>Note:</strong>
+ text += Label(_('''<br><em><strong>Note:</strong>
setting this value performs an immediate action but does not modify
permanent state.</em>''')).Format()
return text
@@ -793,7 +814,7 @@ def membership_options(mlist, subcat, cgidata, doc, form):
usertable.AddRow([Center(Italic(_('%(allcnt)s members total')))])
usertable.AddCellInfo(usertable.GetCurrentRowIndex(),
usertable.GetCurrentCellIndex(),
- colspan=9,
+ colspan=10,
bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
# Add the alphabetical links
if bucket:
@@ -811,16 +832,16 @@ def membership_options(mlist, subcat, cgidata, doc, form):
usertable.AddRow([Center(joiner.join(cells))])
usertable.AddCellInfo(usertable.GetCurrentRowIndex(),
usertable.GetCurrentCellIndex(),
- colspan=9,
+ colspan=10,
bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
usertable.AddRow([Center(h) for h in (_('unsub'),
_('member address<br>member name'),
- _('hide'), _('nomail'),
+ _('mod'), _('hide'), _('nomail'),
_('ack'), _('not metoo'),
_('digest'), _('plain'),
_('language'))])
rowindex = usertable.GetCurrentRowIndex()
- for i in range(9):
+ for i in range(10):
usertable.AddCellInfo(rowindex, i, bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
# Find the longest name in the list
longest = 0
@@ -841,6 +862,15 @@ def membership_options(mlist, subcat, cgidata, doc, form):
name +
Hidden('user', urllib.quote(addr)).Format(),
]
+ # Do the `mod' option
+ if mlist.getMemberOption(addr, mm_cfg.Moderate):
+ value = 'on'
+ checked = 1
+ else:
+ value = 'off'
+ checked = 0
+ box = CheckBox('%s_mod' % addr, value, checked)
+ cells.append(Center(box).Format())
for opt in ('hide', 'nomail', 'ack', 'notmetoo'):
if mlist.getMemberOption(addr,
MailCommandHandler.option_info[opt]):
@@ -881,6 +911,10 @@ def membership_options(mlist, subcat, cgidata, doc, form):
legend.AddItem(
_('<b>unsub</b> -- Click on this to unsubscribe the member.'))
legend.AddItem(
+ _("""<b>mod</b> -- The user's personal moderation flag. If this is
+ set, postings from them will be moderated, otherwise they will be
+ approved."""))
+ legend.AddItem(
_("""<b>hide</b> -- Is the member's address concealed on
the list of subscribers?"""))
legend.AddItem(_('<b>nomail</b> -- Is delivery to the member disabled?'))
@@ -1097,7 +1131,7 @@ def get_valid_value(mlist, prop, wtype, val, dependant):
-def change_options(mlist, category, cgidata, doc):
+def change_options(mlist, category, subcat, cgidata, doc):
confirmed = 0
# Handle changes to the list moderator password. Do this before checking
# the new admin password, since the latter will force a reauthentication.
@@ -1137,7 +1171,7 @@ def change_options(mlist, category, cgidata, doc):
# is not "members" and the request is not from the login page
# -scott 19980515
#
- if category != 'members' and \
+ if category <> 'members' and \
not cgidata.has_key("request_login") and \
len(cgidata.keys()) > 1:
# then
@@ -1149,7 +1183,7 @@ def change_options(mlist, category, cgidata, doc):
#
page_setting = int(cgidata["subscribe_policy"].value)
cgidata["subscribe_policy"].value = str(page_setting + 1)
- opt_list = mlist.GetConfigInfo()[category]
+ opt_list = mlist.GetConfigInfo(category, subcat)
for item in opt_list:
if type(item) <> TupleType or len(item) < 5:
continue
@@ -1322,6 +1356,9 @@ def change_options(mlist, category, cgidata, doc):
if newlang and newlang <> oldlang:
mlist.setMemberLanguage(user, newlang)
+ moderate = not not cgidata.getvalue(user+'_mod')
+ mlist.setMemberOption(user, mm_cfg.Moderate, moderate)
+
for opt in ('hide', 'nomail', 'ack', 'notmetoo', 'plain'):
opt_code = MailCommandHandler.option_info[opt]
if cgidata.has_key('%s_%s' % (user, opt)):