-def get_pending_ops(userdesc, perms, vhost, listname):
- try:
- mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
- except:
- return 0
- try:
- if not is_admin_on(userdesc, perms, mlist):
- return 0
-
- mlist.Lock()
-
- subs = []
- seen = []
- dosave = False
- for id in mlist.GetSubscriptionIds():
- time, addr, fullname, passwd, digest, lang = mlist.GetRecord(id)
- if addr in seen:
- mlist.HandleRequest(id, mm_cfg.DISCARD)
- dosave = True
- continue
- seen.append(addr)
- try:
- login = re.match("^[^.]*\.[^.]*\.\d\d\d\d$", addr.split('@')[0]).group()
- subs.append({'id': id, 'name': quote(fullname), 'addr': addr, 'login': login })
- except:
- subs.append({'id': id, 'name': quote(fullname), 'addr': addr })
-
- helds = []
- for id in mlist.GetHeldMessageIds():
- ptime, sender, subject, reason, filename, msgdata = mlist.GetRecord(id)
- fpath = os.path.join(mm_cfg.DATA_DIR, filename)
- try:
- size = os.path.getsize(fpath)
- except OSError, e:
- if e.errno <> errno.ENOENT: raise
- continue
- try:
- msg = readMessage(fpath)
- fromX = msg.has_key("X-Org-Mail")
- except:
- pass
- helds.append({
- 'id' : id,
- 'sender': quote(sender, True),
- 'size' : size,
- 'subj' : quote(subject, True),
- 'stamp' : ptime,
- 'fromx' : fromX
- })
- if dosave: mlist.Save()
- mlist.Unlock()
- except:
- mlist.Unlock()
- return 0
- return (subs, helds)
-
-def handle_request(userdesc, perms, vhost, listname, id, value, comment):
- try:
- mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
- except:
- return 0
- try:
- if not is_admin_on(userdesc, perms, mlist):
- return 0
- mlist.Lock()
- mlist.HandleRequest(int(id), int(value), comment)
- mlist.Save()
- mlist.Unlock()
- return 1
- except:
- mlist.Unlock()
- return 0
-
-def get_pending_sub(userdesc, perms, vhost, listname, id):
- try:
- mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
- except:
- return 0
- try:
- if not is_admin_on(userdesc, perms, mlist):
- return 0
-
- mlist.Lock()
- 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 }
- mlist.Unlock()
- except:
- mlist.Unlock()
- return 0
- return sub
+def get_pending_ops(userdesc, perms, mlist):
+ """ Get the list of operation waiting for an action from the owners.
+ @mlist
+ @lock
+ @admin
+ """
+ subs = []
+ seen = []
+ dosave = False
+ for id in mlist.GetSubscriptionIds():
+ time, addr, fullname, passwd, digest, lang = mlist.GetRecord(id)
+ if addr in seen:
+ mlist.HandleRequest(id, mm_cfg.DISCARD)
+ dosave = True
+ continue
+ seen.append(addr)
+ try:
+ login = re.match("^[^.]*\.[^.]*\.\d\d\d\d$", addr.split('@')[0]).group()
+ subs.append({'id': id, 'name': quote(fullname), 'addr': addr, 'login': login })
+ except:
+ subs.append({'id': id, 'name': quote(fullname), 'addr': addr })