From 89da4b040d43764367b60fbe811524957a3b3984 Mon Sep 17 00:00:00 2001 From: Louis-Dominique Dubeau Date: Sat, 10 Aug 2013 18:32:35 -0400 Subject: [PATCH] Added everything needed to get the spam score out of the database and be able to sort on it (or any other data presented to the user). --- modoboa/extensions/amavis/sql_listing.py | 77 ++++++++++++------------ 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/modoboa/extensions/amavis/sql_listing.py b/modoboa/extensions/amavis/sql_listing.py index 4fb2e91a7..d8abdcb29 100644 --- a/modoboa/extensions/amavis/sql_listing.py +++ b/modoboa/extensions/amavis/sql_listing.py @@ -19,10 +19,14 @@ class Qtable(tables.Table): type = tables.Column( "type", align="center", width="30px", ) - rstatus = tables.ImgColumn("rstatus", width='25px') - from_ = tables.Column("from", label=ugettext_lazy("From"), limit=30) - subject = tables.Column("subject", label=ugettext_lazy("Subject"), limit=40) - time = tables.Column("date", label=ugettext_lazy("Date")) + score = tables.Column("score", label=ugettext_lazy("Score"), limit=6, + sort_order="score") + rstatus = tables.ImgColumn("rstatus", width='25px', sortable=False) + from_ = tables.Column("from", label=ugettext_lazy("From"), limit=30, + sortable=False) + subject = tables.Column("subject", label=ugettext_lazy("Subject"), limit=40, + sortable=False) + time = tables.Column("date", label=ugettext_lazy("Date"), sort_order="date") to = tables.Column("to", label=ugettext_lazy("To"), sortable=False) cols_order = [] @@ -32,14 +36,9 @@ class Qtable(tables.Table): class SQLconnector(MBconnector): - orders = { - "from": "mail__from_addr", - "subject": "mail__subject", - "date": "mail__time_num" - } - def __init__(self, mail_ids=None, filter=None): self.count = None + self.emails = None self.mail_ids = mail_ids self.filter = filter @@ -50,36 +49,38 @@ class SQLconnector(MBconnector): filter &= Q(mail__in=self.mail_ids) if self.filter: filter &= self.filter - self.messages = Quarantine.objects.filter(filter) + messages = Quarantine.objects.filter(filter) + self.emails = [] + for qm in messages: + for rcpt in qm.mail.msgrcpt_set.all(): + m = {"from": qm.mail.from_addr, + "to": rcpt.rid.email, + "subject": qm.mail.subject, + "mailid": qm.mail_id, + "date": qm.mail.time_num, + "type": rcpt.content, + "score": rcpt.bspam_level} + if rcpt.rs == '': + m["class"] = "unseen" + elif rcpt.rs == 'R': + m["img_rstatus"] = static_url("pics/release.png") + elif rcpt.rs == 'p': + m["class"] = "pending" + self.emails.append(m) + if "order" in kwargs: - totranslate = kwargs["order"][1:] - sign = kwargs["order"][:1] - if sign == " ": - sign = "" - order = sign + self.orders[totranslate] - self.messages = self.messages.order_by(order) - self.count = self.messages.count() + order = kwargs["order"] + reverse = False + if order[0] == "-": + reverse = True + order = order[1:] + self.emails.sort(None, lambda x:x[order], reverse) + + self.count = len(self.emails) return self.count def fetch(self, start=None, stop=None, **kwargs): - messages = self.messages[start - 1:stop] - emails = [] - for qm in messages: - for rcpt in qm.mail.msgrcpt_set.all(): - m = {"from": qm.mail.from_addr, - "to": rcpt.rid.email, - "subject": qm.mail.subject, - "mailid": qm.mail_id, - "date": qm.mail.time_num, - "type": rcpt.content} - if rcpt.rs == '': - m["class"] = "unseen" - elif rcpt.rs == 'R': - m["img_rstatus"] = static_url("pics/release.png") - elif rcpt.rs == 'p': - m["class"] = "pending" - emails.append(m) - return emails + return self.emails[start - 1:stop] class SQLWrapper(object): @@ -228,9 +229,9 @@ class SQLlisting(EmailListing): def __init__(self, user, msgs, filter, **kwargs): if user.group == 'SimpleUsers': - Qtable.cols_order = ['type', 'rstatus', 'from_', 'subject', 'time'] + Qtable.cols_order = ['type', 'score', 'rstatus', 'from_', 'subject', 'time'] else: - Qtable.cols_order = ['type', 'rstatus', 'to', 'from_', 'subject', 'time'] + Qtable.cols_order = ['type', 'score', 'rstatus', 'to', 'from_', 'subject', 'time'] self.mbc = SQLconnector(msgs, filter) super(SQLlisting, self).__init__(**kwargs) self.show_listing_headers = True