summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbwarsaw2002-01-03 05:06:24 +0000
committerbwarsaw2002-01-03 05:06:24 +0000
commit76e4ca28c083ebebd334a2cf8891258f2ec66d5a (patch)
treeb009890f90bc0b789875827df103219fc1082d6e
parentbda5560c2fe1611f1621bd3e43bf1cf3a2f47dcf (diff)
downloadmailman-76e4ca28c083ebebd334a2cf8891258f2ec66d5a.tar.gz
mailman-76e4ca28c083ebebd334a2cf8891258f2ec66d5a.tar.zst
mailman-76e4ca28c083ebebd334a2cf8891258f2ec66d5a.zip
-rw-r--r--Mailman/Cgi/admindb.py39
1 files changed, 30 insertions, 9 deletions
diff --git a/Mailman/Cgi/admindb.py b/Mailman/Cgi/admindb.py
index d45671cf2..97c58e242 100644
--- a/Mailman/Cgi/admindb.py
+++ b/Mailman/Cgi/admindb.py
@@ -31,6 +31,7 @@ from Mailman import MailList
from Mailman import Errors
from Mailman import Message
from Mailman import i18n
+from Mailman.Handlers.Moderate import ModeratedMemberPost
from Mailman.ListAdmin import readMessage
from Mailman.Cgi import Auth
from Mailman.htmlformat import *
@@ -156,8 +157,8 @@ def main():
# This is a form submission
doc.SetTitle(_('%(realname)s Administrative Database Results'))
process_form(mlist, doc, cgidata)
- # Now print the results and we're done
- # Short circuit for when there are no pending requests
+ # Now print the results and we're done. Short circuit for when there
+ # are no pending requests, but be sure to save the results!
if not mlist.NumRequestsPending():
title = _('%(realname)s Administrative Database')
doc.SetTitle(title)
@@ -165,6 +166,7 @@ def main():
doc.AddItem(_('There are no pending requests.'))
doc.AddItem(mlist.GetMailmanFooter())
print doc.Format()
+ mlist.Save()
return
admindburl = mlist.GetScriptURL('admindb', absolute=1)
@@ -355,12 +357,23 @@ def show_helds_overview(mlist, form):
value=mlist.GetOwnerEmail())
])
left.AddCellInfo(left.GetCurrentRowIndex(), 0, colspan=2)
- # Ask if this address should be added to one of the sender filters,
- # but only if it isn't already in one of the filters.
- if sender not in (mlist.accept_these_nonmembers +
- mlist.hold_these_nonmembers +
- mlist.reject_these_nonmembers +
- mlist.discard_these_nonmembers):
+ # If the sender is a member and the message is being held due to a
+ # moderation bit, give the admin a chance to clear the member's mod
+ # bit. If this sender is not a member and is not already on one of
+ # the sender filters, then give the admin a chance to add this sender
+ # to one of the filters.
+ if mlist.isMember(sender):
+ if mlist.getMemberOption(sender, mm_cfg.Moderate):
+ left.AddRow([
+ CheckBox('senderclearmodp-' + qsender, 1).Format() +
+ ' ' +
+ _("Clear this member's <em>moderate</em> flag")
+ ])
+ left.AddCellInfo(left.GetCurrentRowIndex(), 0, colspan=2)
+ elif sender not in (mlist.accept_these_nonmembers +
+ mlist.hold_these_nonmembers +
+ mlist.reject_these_nonmembers +
+ mlist.discard_these_nonmembers):
left.AddRow([
CheckBox('senderfilterp-' + qsender, 1).Format() +
'&nbsp;' +
@@ -572,7 +585,8 @@ def process_form(mlist, doc, cgidata):
# Sender-centric actions
for k in cgidata.keys():
for prefix in ('senderaction-', 'senderpreserve-', 'senderforward-',
- 'senderforwardto-', 'senderfilterp-', 'senderfilter-'):
+ 'senderforwardto-', 'senderfilterp-', 'senderfilter-',
+ 'senderclearmodp-'):
if k.startswith(prefix):
action = k[:len(prefix)-1]
sender = unquote_plus(k[len(prefix):])
@@ -618,6 +632,13 @@ def process_form(mlist, doc, cgidata):
elif which == mm_cfg.DISCARD:
mlist.discard_these_nonmembers.append(sender)
# Otherwise, it's a bogus form, so ignore it
+ # And now see if we're to clear the member's moderation flag.
+ if actions.get('senderclearmodp', 0):
+ try:
+ mlist.setMemberOption(sender, mm_cfg.Moderate, 0)
+ except Errors.NotAMemberError:
+ # This person's not a member any more. Oh well.
+ pass
# Now, do message specific actions
erroraddrs = []
for k in cgidata.keys():