+ 'fromx' : fromX
+ })
+ if dosave:
+ mlist.Save()
+ return (subs, helds)
+
+def handle_request(userdesc, perms, mlist, id, value, comment):
+ """ Handle a moderation request.
+ @mlist
+ @edit
+ @admin
+ """
+ mlist.HandleRequest(int(id), int(value), comment)
+ return 1
+
+def get_pending_sub(userdesc, perms, mlist, id):
+ """ Get informations about a given subscription moderation.
+ @mlist
+ @lock
+ @admin
+ """
+ sub = 0
+ id = int(id)
+ if id in mlist.GetSubscriptionIds():
+ time, addr, fullname, passwd, digest, lang = mlist.GetRecord(id)
+ try:
+ login = re.match("^[^.]*\.[^.]*\.\d\d\d\d$", addr.split('@')[0]).group()
+ sub = {'id': id, 'name': quote(fullname), 'addr': addr, 'login': login }
+ except:
+ sub = {'id': id, 'name': quote(fullname), 'addr': addr }
+ return sub
+
+def get_pending_mail(userdesc, perms, mlist, id, raw=0):
+ """ Get informations about a given mail moderation.
+ @mlist
+ @lock
+ @admin
+ """
+ ptime, sender, subject, reason, filename, msgdata = mlist.GetRecord(int(id))
+ fpath = os.path.join(mm_cfg.DATA_DIR, filename)
+ size = os.path.getsize(fpath)
+ msg = readMessage(fpath)
+
+ if raw:
+ return quote(str(msg))
+ results_plain = []
+ results_html = []
+ for part in typed_subpart_iterator(msg, 'text', 'plain'):
+ c = part.get_payload()
+ if c is not None: results_plain.append (c)
+ results_plain = map(lambda x: quote(x), results_plain)
+ for part in typed_subpart_iterator(msg, 'text', 'html'):
+ c = part.get_payload()
+ if c is not None: results_html.append (c)
+ results_html = map(lambda x: quote(x), results_html)
+ return {'id' : id,
+ 'sender': quote(sender, True),
+ 'size' : size,
+ 'subj' : quote(subject, True),
+ 'stamp' : ptime,
+ 'parts_plain' : results_plain,
+ 'parts_html': results_html }