Code cleanup.

see #585
This commit is contained in:
Antoine Nguyen
2014-10-15 11:23:39 +02:00
parent e102ac0292
commit aee0e86838
10 changed files with 67 additions and 287 deletions
-1
View File
@@ -21,7 +21,6 @@ from modoboa.lib.webutils import (
from modoboa.lib.exceptions import (
PermDeniedException
)
from modoboa.lib.templatetags.lib_tags import pagination_bar
from modoboa.lib.listing import get_sort_order, get_listing_page
from modoboa.extensions.admin.models import Domain, Mailbox
from modoboa.extensions.admin.forms import (
+11 -8
View File
@@ -18,7 +18,6 @@ from modoboa.lib.exceptions import (
from modoboa.lib.webutils import (
_render_to_string, render_to_json_response
)
from modoboa.lib.templatetags.lib_tags import pagination_bar
from modoboa.core.models import User
from modoboa.extensions.admin.models import Mailbox, Domain
from modoboa.lib.listing import (
@@ -115,13 +114,17 @@ def list_quotas(request, tplname="admin/quotas.html"):
else:
raise BadRequest(_("Invalid request"))
page = get_listing_page(mboxes, request.GET.get("page", 1))
return render_to_json_response({
"page": page.number,
"paginbar": pagination_bar(page),
"table": _render_to_string(request, tplname, {
"mboxes": page
})
})
context = {}
if page is None:
context["length"] = 0
else:
context["rows"] = _render_to_string(
request, tplname, {
"mboxes": page
}
)
context["pages"] = [page.number]
return render_to_json_response(context)
@login_required
+55
View File
@@ -0,0 +1,55 @@
# coding: utf-8
"""
An email representation based on a database record.
"""
from django.template.loader import render_to_string
from modoboa.lib.emailutils import Email
from .sql_connector import get_connector
class SQLemail(Email):
"""The SQL version of the Email class."""
def __init__(self, *args, **kwargs):
super(SQLemail, self).__init__(*args, **kwargs)
fields = ["From", "To", "Cc", "Date", "Subject"]
for f in fields:
label = f
self.headers += [
{"name": label, "value": self.get_header(self.msg, f)}
]
setattr(self, label, self.msg[f])
qreason = self.get_header(self.msg, "X-Amavis-Alert")
self.qtype = ""
self.qreason = ""
if qreason != "":
if ',' in qreason:
self.qtype, self.qreason = qreason.split(',', 1)
elif qreason.startswith("BAD HEADER SECTION "):
# Workaround for amavis <= 2.8.0 :p
self.qtype = "BAD HEADER SECTION"
self.qreason = qreason[19:]
@property
def msg(self):
"""
"""
import email
if self._msg is None:
qmails = get_connector().get_mail_content(self.mailid)
self._msg = email.message_from_string(
"".join([qm.mail_text for qm in qmails])
)
self._parse(self._msg)
return self._msg
def render_headers(self, **kwargs):
return render_to_string("amavis/mailheaders.html", {
"qtype": self.qtype, "qreason": self.qreason,
"headers": self.headers,
})
-113
View File
@@ -1,113 +0,0 @@
# coding: utf-8
from datetime import datetime
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy
from modoboa.lib import tables
from modoboa.lib.email_listing import EmailListing
from modoboa.lib.emailutils import Email
from .sql_connector import get_connector
class Qtable(tables.Table):
tableid = "emails"
styles = "table-condensed"
idkey = "mailid"
selection = tables.SelectionColumn(
"selection", safe=True, width='5px', header=None, sortable=False
)
type = tables.Column(
"type", align="center", width="30px", sort_order="type", safe=True
)
rstatus = tables.ImgColumn(
"rstatus", width='25px', sortable=False
)
score = tables.Column(
"score", label=ugettext_lazy("Score"), limit=6,
sort_order="score", cssclass="openable"
)
to = tables.Column(
"to", label=ugettext_lazy("To"), sort_order="to", cssclass="openable"
)
from_ = tables.Column(
"from", label=ugettext_lazy("From"), limit=30,
sort_order="from", cssclass="openable"
)
subject = tables.Column(
"subject", label=ugettext_lazy("Subject"), limit=40,
sort_order="subject", cssclass="openable"
)
time = tables.Column(
"date", label=ugettext_lazy("Date"), sort_order="date",
cssclass="openable"
)
cols_order = [
'selection', 'type', 'rstatus', 'score', 'to', 'from_', 'subject',
'time'
]
def parse_type(self, value):
color = 'danger' if value in ['S', 'V'] else 'warning'
return '<span class="label label-%s">%s</span>' % (color, value)
def parse_date(self, value):
return datetime.fromtimestamp(value)
class SQLlisting(EmailListing):
tpl = "amavis/index.html"
tbltype = Qtable
deflocation = "listing/"
defcallback = "updatelisting"
reset_wm_url = True
def __init__(self, user, **kwargs):
self.mbc = get_connector(user=user, navparams=kwargs["navparams"])
super(SQLlisting, self).__init__(**kwargs)
self.show_listing_headers = True
class SQLemail(Email):
def __init__(self, *args, **kwargs):
super(SQLemail, self).__init__(*args, **kwargs)
fields = ["From", "To", "Cc", "Date", "Subject"]
for f in fields:
label = f
self.headers += [
{"name": label, "value": self.get_header(self.msg, f)}
]
setattr(self, label, self.msg[f])
qreason = self.get_header(self.msg, "X-Amavis-Alert")
self.qtype = ""
self.qreason = ""
if qreason != "":
if ',' in qreason:
self.qtype, self.qreason = qreason.split(',', 1)
elif qreason.startswith("BAD HEADER SECTION "):
# Workaround for amavis <= 2.8.0 :p
self.qtype = "BAD HEADER SECTION"
self.qreason = qreason[19:]
@property
def msg(self):
"""
"""
import email
if self._msg is None:
qmails = get_connector().get_mail_content(self.mailid)
self._msg = email.message_from_string(
"".join([qm.mail_text for qm in qmails])
)
self._parse(self._msg)
return self._msg
def render_headers(self, **kwargs):
return render_to_string("amavis/mailheaders.html", {
"qtype": self.qtype, "qreason": self.qreason,
"headers": self.headers,
})
+1 -1
View File
@@ -24,7 +24,7 @@ from modoboa.extensions.amavis.templatetags.amavis_tags import (
from .lib import selfservice, AMrelease, QuarantineNavigationParameters
from .models import Msgrcpt
from .sql_connector import get_connector
from .sql_listing import SQLemail
from .sql_email import SQLemail
def empty_quarantine():
-66
View File
@@ -1,66 +0,0 @@
# -*- coding: utf-8 -*-
from django.conf import settings
from django.template.loader import render_to_string
from django.template import Template, Context
from django.utils.translation import ugettext as _
from modoboa.lib.paginator import Paginator
class EmailListing(object):
def __init__(self, baseurl=None, folder=None, elems_per_page=40,
navparams={}, **kwargs):
self.folder = folder
self.elems_per_page = elems_per_page
self.navparams = navparams
self.extravars = {}
self.show_listing_headers = False
self.empty = "empty" in kwargs and kwargs["empty"] or False
if self.empty:
return
if "order" in kwargs:
order = kwargs["order"]
elif "order" in self.navparams:
order = self.navparams["order"]
else:
order = None
self.paginator = Paginator(
self.mbc.messages_count(folder=self.folder, order=order),
elems_per_page
)
self.baseurl = baseurl
@staticmethod
def render_navbar(page, baseurl=None):
if page is None:
return ""
context = {
"page": page, "STATIC_URL": settings.STATIC_URL, "baseurl": baseurl
}
return render_to_string("common/pagination_bar.html", context)
def fetch(self, request, id_start, id_stop):
table = self.tbltype(
request,
self.mbc.fetch(start=id_start, stop=id_stop,
mbox=self.folder,
nbelems=self.elems_per_page)
)
tpl = Template("""
<form method="POST" id="listingform">
{{ table }}
</form>""")
return tpl.render(
Context({
"table": table.render(withheader=self.show_listing_headers)
})
)
def render(self, request, pageid=1, **kwargs):
page = self.paginator.getpage(pageid)
if not page:
listing = "<div class='alert alert-info'>%s</div>" % _("Empty mailbox")
else:
listing = self.fetch(request, page.id_start, page.id_stop)
return dict(listing=listing, navbar=self.render_navbar(page, self.baseurl))
-7
View File
@@ -25,13 +25,6 @@ def tolist(values):
return "[%s]" % ",".join(['"%s"' % v for v in values])
@register.simple_tag
def pagination_bar(page):
return render_to_string("common/pagination_bar.html", dict(
page=page, baseurl="?"
))
@register.simple_tag
def alert(msg, typ):
t = Template("""<div class="alert alert-{{ type }}" role="alert">
-30
View File
@@ -14,9 +14,6 @@
@media (max-width: 768px) {
.navbar .navbar-header,
.navbar #pagination-responsive{
display: inline-block;
}
tr th#tags,
td[name="tags"] {
@@ -35,9 +32,6 @@
@media (max-width: 1198px) {
#pagination-responsive .display-less-1198{
display: inherit;
}
.display-up-1198{
display: none;
}
@@ -193,10 +187,6 @@ html body div.navbar div.container-fluid div#navigate-navbar-collapse.collapse u
color: white;
}
#pagination-responsive #pagination_bar {
display: none;
}
/* left sidebar */
/* Sidebar navigation */
@@ -261,26 +251,6 @@ html body div.navbar div.container-fluid div#navigate-navbar-collapse.collapse u
float:none;
}
.simplepagination ul {
margin-bottom: 0;
}
.simplepagination li {
display: inline;
cursor: pointer;
}
.simplepagination li span {
color: white;
margin-bottom: 15px;
margin-top: 15px;
}
.simplepagination .disabled a,
.simplepagination .disabled a:hover {
cursor: default;
}
/* --------- specific pages --------- */
/* identities tables */
-7
View File
@@ -12,9 +12,6 @@ Listing.prototype = {
constructor: Listing,
listing_defaults: {
presp_container: '#pagination-responsive',
pbar_container: '#bottom-bar-right',
pbar_id: '#pagination_bar',
sortable_selector: '.sortable',
with_searchform: true,
load_page_url: null,
@@ -28,10 +25,6 @@ Listing.prototype = {
this.options = $.extend({}, this.listing_defaults, options);
this.tag_handlers = {};
this.navobj = new History(this.options);
$(document).on("click", this.options.pbar_container + " a",
$.proxy(this.load_page, this));
$(document).on("click", this.options.presp_container + " a",
$.proxy(this.load_page, this));
$(document).on("click", "a.filter", $.proxy(this.filter_by_tag, this));
if (this.options.with_searchform) {
this.init_searchform();
@@ -1,54 +0,0 @@
<div id="pagination_bar" class="simplepagination">
<ul>
{% if page.has_previous %}
<li>
<a href="{{ baseurl }}page=1">
<span class="fa fa-fast-backward"></span></a>
</li>
<li>
<a href="{{ baseurl }}page={{ page.previous_page_number }}">
<span class="fa fa-step-backward"></span></a>
</li>
{% else %}
<li>
<span class="fa fa-fast-backward"></span>
</li>
<li>
<span class="fa fa-step-backward"></span>
</li>
{% endif %}
<li class="disabled navbar-text">
{{ page.number }}/{{ page.paginator.num_pages }}
</li>
{% if page.has_next %}
<li>
<a href="{{ baseurl }}page={{ page.next_page_number }}">
<span class="fa fa-step-forward"></span></a>
</li>
<li>
<a href="{{ baseurl }}page={{ page.paginator.num_pages }}">
<span class="fa fa-fast-forward"></span></a>
</li>
{% else %}
<li>
<span class="fa fa-step-forward"></span>
</li>
<li>
<span class="fa fa-fast-forward"></span>
</li>
{% endif %}
</ul>
</div>
<div class="display-less-1198 pull-right">
{% if page.has_previous %}
<a href="{{ baseurl }}page={{ page.previous_page_number }}" class="btn btn-lg btn-link fa fa-chevron-left" type="button"></a>
{% else %}
<a class="btn btn-lg btn-link fa fa-chevron-left" type="button"></a>
{% endif %}
{% if page.has_next %}
<a href="{{ baseurl }}page={{ page.next_page_number }}" class="btn btn-lg btn-link fa fa-chevron-right" type="button"></a>
{% else %}
<a class="btn btn-lg btn-link fa fa-chevron-right" type="button"></a>
{% endif %}
</div>