diff options
| author | bwarsaw | 2001-08-03 05:02:32 +0000 |
|---|---|---|
| committer | bwarsaw | 2001-08-03 05:02:32 +0000 |
| commit | 6e20ba9e3973473a7759d72a22d10ea07f00b82f (patch) | |
| tree | d6f44183f1fa49913744b74ea621143dbb93a182 | |
| parent | 6b00102d35069191416add712007f757c86d7d20 (diff) | |
| download | mailman-6e20ba9e3973473a7759d72a22d10ea07f00b82f.tar.gz mailman-6e20ba9e3973473a7759d72a22d10ea07f00b82f.tar.zst mailman-6e20ba9e3973473a7759d72a22d10ea07f00b82f.zip | |
| -rw-r--r-- | Mailman/Cgi/admin.py | 199 |
1 files changed, 111 insertions, 88 deletions
diff --git a/Mailman/Cgi/admin.py b/Mailman/Cgi/admin.py index 9035fcba9..eefed0b6a 100644 --- a/Mailman/Cgi/admin.py +++ b/Mailman/Cgi/admin.py @@ -361,7 +361,6 @@ def show_results(mlist, doc, category, category_suffix, cgidata): linktable = Table(valign='top') linktable.AddRow([Center(Bold(_("Configuration Categories"))), Center(Bold(_("Other Administrative Activities")))]) - # The `other links' are stuff in the right column. otherlinks = UnorderedList() otherlinks.AddItem(Link(mlist.GetScriptURL('admindb'), @@ -429,39 +428,51 @@ def show_results(mlist, doc, category, category_suffix, cgidata): form = Form('%s/%s' % (adminurl, category_suffix), encoding=encoding) else: form = Form(adminurl) - # And add the form - doc.AddItem(form) # The general category supports changing the password. if category == 'general': andpassmsg = _(' (You can change your password there, too.)') else: andpassmsg = '' form.AddItem( - _('''Make your changes below, and then submit them - using the button at the bottom.''') + - andpassmsg + - '<p>') - - form.AddItem(show_variables(mlist, category, cgidata, doc, form)) + _('''Make your changes in the following section, then submit them + using the <em>Submit Your Changes</em> button below.''') + + andpassmsg + + '<p>') - if category == 'general': - form.AddItem(Center(password_inputs())) + if category == 'members': + # Figure out which subcategory we should display + subcat = Utils.GetPathPieces()[-1] + if subcat not in ('list', 'add', 'remove'): + subcat = 'list' + # Add member category specific tables + form.AddItem(membership_options(mlist, subcat, cgidata, doc, form)) + form.AddItem(Center(submit_button())) + form.AddItem('<hr>') + # In "list" subcategory, we can also search for members + if subcat == 'list': + form.AddItem(_('''Find members by + <a href="http://www.python.org/doc/current/lib/re-syntax.html">Python + regular expression</a>:''')) + form.AddItem(TextBox('findmember', + value=cgidata.getvalue('findmember', ''), + size='50%')) + form.AddItem(SubmitButton('findmember_btn', _('Search...'))) + form.AddItem('<hr>') + else: + form.AddItem(show_variables(mlist, category, cgidata, doc)) + if category == 'general': + form.AddItem(Center(password_inputs())) + form.AddItem(Center(submit_button())) + form.AddItem('<hr>') - form.AddItem('<p>') - form.AddItem(Center(submit_button())) - form.AddItem('<hr>') - form.AddItem(linktable) - form.AddItem(mlist.GetMailmanFooter()) - # main() formats and prints the document + # And add the form + doc.AddItem(form) + doc.AddItem(linktable) + doc.AddItem(mlist.GetMailmanFooter()) -def show_variables(mlist, category, cgidata, doc, form): - # Produce the category specific variable options table - if category == 'members': - # Special case for members section. - return membership_options(mlist, cgidata, doc, form) - +def show_variables(mlist, category, cgidata, doc): options = mlist.GetConfigInfo()[category] # The table containing the results @@ -678,11 +689,7 @@ def get_item_gui_description(mlist, category, varname, descr, detailsp): -def membership_options(mlist, cgidata, doc, form): - # Figure out which subcategory we should display - subcat = Utils.GetPathPieces()[-1] - if subcat not in ('list', 'add', 'remove'): - subcat = 'list' +def membership_options(mlist, subcat, cgidata, doc, form): # Show the main stuff container = Container() header = Table(width="100%") @@ -713,9 +720,8 @@ def membership_options(mlist, cgidata, doc, form): all = mlist.getMembers() all.sort(lambda x, y: cmp(x.lower(), y.lower())) # See if the query has a regular expression - regexp = '' - if cgidata.has_key('findmember'): - regexp = cgidata['findmember'].value + regexp = cgidata.getvalue('findmember') + if regexp: try: cre = re.compile(regexp, re.IGNORECASE) except re.error: @@ -796,8 +802,9 @@ def membership_options(mlist, cgidata, doc, form): usertable.GetCurrentCellIndex(), colspan=9, bgcolor=mm_cfg.WEB_ADMINITEM_COLOR) - usertable.AddRow([Center(h) for h in (_('member address<br>member name'), - _('subscr'), _('hide'), _('nomail'), + usertable.AddRow([Center(h) for h in (_('unsub'), + _('member address<br>member name'), + _('hide'), _('nomail'), _('ack'), _('not metoo'), _('digest'), _('plain'), _('language'))]) @@ -818,10 +825,10 @@ def membership_options(mlist, cgidata, doc, form): if fullname is None: fullname = '' name = TextBox(addr + '_realname', fullname, size=longest).Format() - cells = [link.Format() + '<br>' + + cells = [Center(CheckBox(addr + '_unsub', 'off', 0).Format()), + link.Format() + '<br>' + name + Hidden('user', urllib.quote(addr)).Format(), - Center(CheckBox(addr + '_subscribed', 'on', 1).Format()), ] for opt in ('hide', 'nomail', 'ack', 'notmetoo'): if mlist.getMemberOption(addr, @@ -860,7 +867,8 @@ def membership_options(mlist, cgidata, doc, form): # Add the usertable and a legend container.AddItem(Center(usertable)) legend = UnorderedList() - legend.AddItem(_('<b>subscr</b> -- Is the member subscribed?')) + legend.AddItem( + _('<b>unsub</b> -- Click on this to unsubscribe the member.')) legend.AddItem( _("""<b>hide</b> -- Is the member's address concealed on the list of subscribers?""")) @@ -897,63 +905,78 @@ def membership_options(mlist, cgidata, doc, form): buttons.append(link) buttons = UnorderedList(*buttons) container.AddItem(footer + buttons.Format() + '<p>') - # Search for member - container.AddItem( - _('Find members by regular expression:') + - TextBox('findmember', value=regexp, size='50%').Format() + - SubmitButton('findmember_btn', _('Search...')).Format()) return container + def mass_subscribe(mlist, container): # MASS SUBSCRIBE - t = Table(width='90%') + table = Table(width='90%') # Ask whether to send a welcome message and/or to notify the admin - t.AddRow([_('Send welcome message to this batch? ') - + RadioButton('send_welcome_msg_to_this_batch', 0, - not mlist.send_welcome_msg).Format() - + _(' no ') - + RadioButton('send_welcome_msg_to_this_batch', 1, - mlist.send_welcome_msg).Format() - + _(' yes ')]) - t.AddRow([_('Send notifications to the list owner? ') - + RadioButton('send_notifications_to_list_owner', 0, - not mlist.admin_notify_mchanges).Format() - + _(' no ') - + RadioButton('send_notifications_to_list_owner', 1, - mlist.admin_notify_mchanges).Format() - + _(' yes ')]) - t.AddRow([Italic(_('Enter one address per line below...')).Format() - + '<br>']) - t.AddRow([Center(TextArea(name='subscribees', - rows=10, cols='100%', wrap=None))]) - t.AddRow([Italic(_('...or specify a file to upload:'))]) - t.AddRow([FileUpload('subscribees_upload', cols='50').Format()]) - container.AddItem(Center(t)) + table.AddRow([ + # td 1 + Label(_('Send welcome message to this batch?')), + # td 2 + RadioButton('send_welcome_msg_to_this_batch', 0, + not mlist.send_welcome_msg).Format() + + _(' no ') + + RadioButton('send_welcome_msg_to_this_batch', 1, + mlist.send_welcome_msg).Format() + + _(' yes ') + ]) + table.AddRow([ + # td 1 + Label(_('Send notifications to the list owner? ')), + # td 2 + RadioButton('send_notifications_to_list_owner', 0, + not mlist.admin_notify_mchanges).Format() + + _(' no ') + + RadioButton('send_notifications_to_list_owner', 1, + mlist.admin_notify_mchanges).Format() + + _(' yes ') + ]) + table.AddRow([Italic(_('Enter one address per line below...'))]) + table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2) + table.AddRow([Center(TextArea(name='subscribees', + rows=10, cols='70%', wrap=None))]) + table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2) + table.AddRow([Italic(Label(_('...or specify a file to upload:'))), + FileUpload('subscribees_upload', cols='50')]) + container.AddItem(Center(table)) + def mass_remove(mlist, container): # MASS UNSUBSCRIBE - t = Table(width='90%') - t.AddRow([_('Send unsubscription acknowledgement to the user? ') - + RadioButton('send_unsub_ack_to_this_batch', 0, 1).Format() - + _(' no ') - + RadioButton('send_unsub_ack_to_this_batch', 1, 0).Format() - +_(' yes ')]) - t.AddRow([_('Send notifications to the list owner? ') - + RadioButton('send_unsub_notifications_to_list_owner', 0, - not mlist.admin_notify_mchanges).Format() - + _(' no ') - + RadioButton('send_unsub_notifications_to_list_owner', 1, - mlist.admin_notify_mchanges).Format() - + _(' yes ')]) - t.AddRow([Italic(_('Enter one address per line below...')).Format() - + '<br>']) - t.AddRow([Center(TextArea(name='unsubscribees', - rows=10, cols='100%', wrap=None))]) - t.AddRow([Italic(_('...or specify a file to upload:'))]) - t.AddRow([FileUpload('unsubscribees_upload', cols='50').Format()]) - container.AddItem(Center(t)) + table = Table(width='90%') + table.AddRow([ + # td 1 + Label(_('Send unsubscription acknowledgement to the user?')), + # td 2 + RadioButton('send_unsub_ack_to_this_batch', 0, 1).Format() + + _(' no ') + + RadioButton('send_unsub_ack_to_this_batch', 1, 0).Format() + + _(' yes ') + ]) + table.AddRow([ + # td 1 + Label(_('Send notifications to the list owner?')), + # td 2 + RadioButton('send_unsub_notifications_to_list_owner', 0, + not mlist.admin_notify_mchanges).Format() + + _(' no ') + + RadioButton('send_unsub_notifications_to_list_owner', 1, + mlist.admin_notify_mchanges).Format() + + _(' yes ') + ]) + table.AddRow([Italic(_('Enter one address per line below...'))]) + table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2) + table.AddRow([Center(TextArea(name='unsubscribees', + rows=10, cols='70%', wrap=None))]) + table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2) + table.AddRow([Italic(Label(_('...or specify a file to upload:'))), + FileUpload('unsubscribees_upload', cols='50')]) + container.AddItem(Center(table)) @@ -999,10 +1022,10 @@ above.""")]) def submit_button(): - submit = Table(border=0, cellspacing=0, cellpadding=2) - submit.AddRow([Bold(SubmitButton('submit', _('Submit Your Changes')))]) - submit.AddCellInfo(submit.GetCurrentRowIndex(), 0, align="middle") - return submit + table = Table(border=0, cellspacing=0, cellpadding=2) + table.AddRow([Bold(SubmitButton('submit', _('Submit Your Changes')))]) + table.AddCellInfo(table.GetCurrentRowIndex(), 0, align='middle') + return table @@ -1257,7 +1280,7 @@ def change_options(mlist, category, cgidata, doc): users = [urllib.unquote(user.value)] errors = [] for user in users: - if not cgidata.has_key('%s_subscribed' % (user)): + if cgidata.has_key('%s_unsub' % user): try: mlist.ApprovedDeleteMember(user) except Errors.MMNoSuchUserError: |
