diff --git a/modoboa/admin/forms.py b/modoboa/admin/forms.py index a4127713c..b36c603b5 100644 --- a/modoboa/admin/forms.py +++ b/modoboa/admin/forms.py @@ -432,11 +432,15 @@ class AccountFormGeneral(forms.ModelForm): class AccountFormMail(forms.Form, DynamicForm): email = forms.EmailField(label=ugettext_lazy("E-mail"), required=False) - quota = forms.IntegerField(label=ugettext_lazy("Quota"), required=False) + quota = forms.IntegerField( + label=ugettext_lazy("Quota"), + required=False, + help_text=_("Quota in MB for this mailbox. Leave empty to use the value defined at domain level.") + ) aliases = forms.EmailField( label=ugettext_lazy("Alias(es)"), required=False, - help_text=ugettext_lazy("Alias(es) of this mailbox") + help_text=ugettext_lazy("Alias(es) of this mailbox. Indicate only one address per input, press ENTER to add a new input.") ) def __init__(self, *args, **kwargs): diff --git a/modoboa/demo/__init__.py b/modoboa/demo/__init__.py index 31c008ddb..739076d53 100755 --- a/modoboa/demo/__init__.py +++ b/modoboa/demo/__init__.py @@ -8,8 +8,6 @@ from modoboa.lib.webutils import static_url @events.observe("UserMenuDisplay") def menu(target, user): - import views - if target != "top_menu_middle": return [] if not user.has_mailbox: @@ -22,12 +20,10 @@ def menu(target, user): "menu" : [ {"name" : "sendvirus", "label" : _("Send virus"), - "img" : static_url("pics/send-receive.png"), - "url" : reverse(views.send_virus)}, + "url" : reverse("modoboa.demo.views.send_virus")}, {"name" : "sendspam", "label" : _("Send spam"), - "img" : static_url("pics/send-receive.png"), - "url" : reverse(views.send_spam)} + "url" : reverse("modoboa.demo.views.send_spam")} ] } ] diff --git a/modoboa/extensions/amavis_quarantine/__init__.py b/modoboa/extensions/amavis/__init__.py similarity index 94% rename from modoboa/extensions/amavis_quarantine/__init__.py rename to modoboa/extensions/amavis/__init__.py index 4774ff1ec..9e1fba4c8 100644 --- a/modoboa/extensions/amavis_quarantine/__init__.py +++ b/modoboa/extensions/amavis/__init__.py @@ -10,10 +10,10 @@ from modoboa.lib import events, parameters from modoboa.extensions import ModoExtension, exts_pool class AmavisQuarantine(ModoExtension): - name = "amavis_quarantine" - label = "Amavis quarantine" + name = "amavis" + label = "Amavis frontend" version = "1.0" - description = ugettext_lazy("Simple amavis quarantine management tool") + description = ugettext_lazy("Simple amavis management frontend") url = "quarantine" def init(self): @@ -76,7 +76,7 @@ class AmavisQuarantine(ModoExtension): def destroy(self): events.unregister("UserMenuDisplay", menu) - parameters.unregister_app("amavis_quarantine") + parameters.unregister_app("amavis") exts_pool.register_extension(AmavisQuarantine) @@ -88,7 +88,7 @@ def menu(target, user): return [ {"name" : "quarantine", "label" : _("Quarantine"), - "url" : reverse('modoboa.extensions.amavis_quarantine.views.index')} + "url" : reverse('modoboa.extensions.amavis.views.index')} ] return [] @@ -161,7 +161,7 @@ $(document).ready(function() { }); }); """) - url = reverse("modoboa.extensions.amavis_quarantine.views.nbrequests") + url = reverse("modoboa.extensions.amavis.views.nbrequests") interval = int(parameters.get_admin("CHECK_REQUESTS_INTERVAL")) * 1000 return [tpl.render(Context(dict(url=url, interval=interval, text=_("pending requests"))))] @@ -174,7 +174,7 @@ def display_requests(user): return [] nbrequests = get_nb_requests(user) - url = reverse("modoboa.extensions.amavis_quarantine.views.index") + url = reverse("modoboa.extensions.amavis.views.index") url += "#listing/?viewrequests=1" tpl = Template('
{{ label }}
') css = "hidden" if nbrequests == 0 else "" diff --git a/modoboa/extensions/amavis_quarantine/cleanup.py b/modoboa/extensions/amavis/cleanup.py similarity index 82% rename from modoboa/extensions/amavis_quarantine/cleanup.py rename to modoboa/extensions/amavis/cleanup.py index 22b362999..e16b8b3ce 100755 --- a/modoboa/extensions/amavis_quarantine/cleanup.py +++ b/modoboa/extensions/amavis/cleanup.py @@ -2,10 +2,10 @@ # -*- coding: utf-8 -*- import time -from modoboa.extensions.amavis_quarantine.models import * +from modoboa.extensions.amavis.models import * if __name__ == "__main__": - from modoboa.extensions import amavis_quarantine + from modoboa.extensions import amavis from modoboa.lib import parameters from optparse import OptionParser @@ -20,14 +20,14 @@ if __name__ == "__main__": l.setLevel(logging.DEBUG) l.addHandler(logging.StreamHandler()) - amavis_quarantine.load() + amavis.load() max_messages_age = int(parameters.get_admin("MAX_MESSAGES_AGE", - app="amavis_quarantine")) + app="amavis")) flags = ['D'] if parameters.get_admin("RELEASED_MSGS_CLEANUP", - app="amavis_quarantine") == "yes": + app="amavis") == "yes": flags += ['R'] print "Deleting marked messages..." diff --git a/modoboa/extensions/amavis/dbrouter.py b/modoboa/extensions/amavis/dbrouter.py new file mode 100644 index 000000000..af582ef80 --- /dev/null +++ b/modoboa/extensions/amavis/dbrouter.py @@ -0,0 +1,30 @@ +class AmavisRouter(object): + """A router to control all database operations on models in + the amavis application""" + + def db_for_read(self, model, **hints): + "Point all operations on amavis models to 'amavis'" + if model._meta.app_label == 'amavis': + return 'amavis' + return None + + def db_for_write(self, model, **hints): + "Point all operations on amavis models to 'amavis'" + if model._meta.app_label == 'amavis': + return 'amavis' + return None + + def allow_relation(self, obj1, obj2, **hints): + "Allow any relation if a model in amavis is involved" + if obj1._meta.app_label == 'amavis' \ + or obj2._meta.app_label == 'amavis': + return True + return None + + def allow_syncdb(self, db, model): + "Make sure the amavis app only appears on the 'amavis' db" + if db == 'amavis': + return model._meta.app_label == 'amavis' + elif model._meta.app_label == 'amavis': + return False + return None diff --git a/modoboa/extensions/amavis_quarantine/forms.py b/modoboa/extensions/amavis/forms.py similarity index 100% rename from modoboa/extensions/amavis_quarantine/forms.py rename to modoboa/extensions/amavis/forms.py diff --git a/modoboa/extensions/amavis_quarantine/lib.py b/modoboa/extensions/amavis/lib.py similarity index 98% rename from modoboa/extensions/amavis_quarantine/lib.py rename to modoboa/extensions/amavis/lib.py index 6142060cd..3ec55b860 100644 --- a/modoboa/extensions/amavis_quarantine/lib.py +++ b/modoboa/extensions/amavis/lib.py @@ -27,7 +27,7 @@ def selfservice(ssfunc=None): return f(request, *args, **kwargs) if parameters.get_admin("SELF_SERVICE") == "no": from django.contrib.auth.views import redirect_to_login - return redirect_to_login(reverse("modoboa.extensions.amavis_quarantine.views.index")) + return redirect_to_login(reverse("modoboa.extensions.amavis.views.index")) return ssfunc(request, *args, **kwargs) return wrapped_f return decorator diff --git a/modoboa/extensions/amavis_quarantine/models.py b/modoboa/extensions/amavis/models.py similarity index 100% rename from modoboa/extensions/amavis_quarantine/models.py rename to modoboa/extensions/amavis/models.py diff --git a/modoboa/extensions/amavis_quarantine/sql_listing.py b/modoboa/extensions/amavis/sql_listing.py similarity index 97% rename from modoboa/extensions/amavis_quarantine/sql_listing.py rename to modoboa/extensions/amavis/sql_listing.py index 776d9269b..e567dfb7a 100644 --- a/modoboa/extensions/amavis_quarantine/sql_listing.py +++ b/modoboa/extensions/amavis/sql_listing.py @@ -81,7 +81,7 @@ class SQLconnector(MBconnector): return emails class SQLlisting(EmailListing): - tpl = "amavis_quarantine/index.html" + tpl = "amavis/index.html" tbltype = Qtable deflocation = "listing/" defcallback = "updatelisting" @@ -123,7 +123,7 @@ class SQLemail(Email): return "" def render_headers(self, **kwargs): - return render_to_string("amavis_quarantine/mailheaders.html", { + return render_to_string("amavis/mailheaders.html", { "qtype" : self.qtype, "qreason" : self.qreason, "headers" : self.headers, }) diff --git a/modoboa/extensions/amavis_quarantine/static/amavis_quarantine/css/quarantine.css b/modoboa/extensions/amavis/static/amavis/css/quarantine.css similarity index 100% rename from modoboa/extensions/amavis_quarantine/static/amavis_quarantine/css/quarantine.css rename to modoboa/extensions/amavis/static/amavis/css/quarantine.css diff --git a/modoboa/extensions/amavis_quarantine/static/amavis_quarantine/css/selfservice.css b/modoboa/extensions/amavis/static/amavis/css/selfservice.css similarity index 100% rename from modoboa/extensions/amavis_quarantine/static/amavis_quarantine/css/selfservice.css rename to modoboa/extensions/amavis/static/amavis/css/selfservice.css diff --git a/modoboa/extensions/amavis_quarantine/static/amavis_quarantine/js/quarantine.js b/modoboa/extensions/amavis/static/amavis/js/quarantine.js similarity index 100% rename from modoboa/extensions/amavis_quarantine/static/amavis_quarantine/js/quarantine.js rename to modoboa/extensions/amavis/static/amavis/js/quarantine.js diff --git a/modoboa/extensions/amavis_quarantine/static/amavis_quarantine/js/selfservice.js b/modoboa/extensions/amavis/static/amavis/js/selfservice.js similarity index 100% rename from modoboa/extensions/amavis_quarantine/static/amavis_quarantine/js/selfservice.js rename to modoboa/extensions/amavis/static/amavis/js/selfservice.js diff --git a/modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/getmailcontent.html b/modoboa/extensions/amavis/templates/amavis/getmailcontent.html similarity index 100% rename from modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/getmailcontent.html rename to modoboa/extensions/amavis/templates/amavis/getmailcontent.html diff --git a/modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/index.html b/modoboa/extensions/amavis/templates/amavis/index.html similarity index 84% rename from modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/index.html rename to modoboa/extensions/amavis/templates/amavis/index.html index f331a4c2f..fb2081389 100644 --- a/modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/index.html +++ b/modoboa/extensions/amavis/templates/amavis/index.html @@ -1,11 +1,11 @@ {% extends "fixed.html" %}{% load i18n %} {% block pagetitle %}{% trans "Quarantine management" %}{% endblock %} {% block html_head %} - + - + - + {% url django.views.i18n.javascript_catalog as catalog_url %}