mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-23 06:38:40 +02:00
@@ -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):
|
||||
|
||||
@@ -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")}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
+7
-7
@@ -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() {
|
||||
});
|
||||
});
|
||||
</script>""")
|
||||
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('<div class="btn-group {{ css }}"><a id="nbrequests" href="{{ url }}" class="btn btn-danger">{{ label }}</a></div>')
|
||||
css = "hidden" if nbrequests == 0 else ""
|
||||
+5
-5
@@ -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..."
|
||||
@@ -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
|
||||
@@ -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
|
||||
+2
-2
@@ -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,
|
||||
})
|
||||
+2
-2
@@ -1,11 +1,11 @@
|
||||
{% extends "fixed.html" %}{% load i18n %}
|
||||
{% block pagetitle %}{% trans "Quarantine management" %}{% endblock %}
|
||||
{% block html_head %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}amavis_quarantine/css/quarantine.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}amavis/css/quarantine.css" />
|
||||
<script type="text/javascript" src="{{ STATIC_URL }}js/jquery.htmltable.js"></script>
|
||||
<script type="text/javascript" src="{{ STATIC_URL }}js/history.js"></script>
|
||||
<script type="text/javascript" src="{{ STATIC_URL }}js/searchbar.js"></script>
|
||||
<script type="text/javascript" src="{{ STATIC_URL }}amavis_quarantine/js/quarantine.js"></script>
|
||||
<script type="text/javascript" src="{{ STATIC_URL }}amavis/js/quarantine.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
var qm = new Quarantine({
|
||||
+2
-2
@@ -6,12 +6,12 @@
|
||||
<link rel="icon" type="image/png" href="{{ STATIC_URL }}css/logo-icon.png" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap-responsive.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}amavis_quarantine/css/selfservice.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}amavis/css/selfservice.css" />
|
||||
<script src="{{ STATIC_URL }}js/jquery.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}js/bootstrap.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}js/global.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}js/notify.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}amavis_quarantine/js/selfservice.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}amavis/js/selfservice.js" type="text/javascript"></script>
|
||||
{% url django.views.i18n.javascript_catalog as catalog_url %}
|
||||
<script type="text/javascript" src="{{ catalog_url }}"></script>
|
||||
<script type="text/javascript">
|
||||
+8
-8
@@ -5,7 +5,7 @@ from django.utils.translation import ugettext as _
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.conf import settings
|
||||
from modoboa.lib.webutils import static_url
|
||||
from modoboa.extensions import amavis_quarantine
|
||||
from modoboa.extensions import amavis
|
||||
|
||||
register = template.Library()
|
||||
|
||||
@@ -15,17 +15,17 @@ def viewm_menu(user, mail_id, rcpt):
|
||||
{"name" : "release",
|
||||
"img" : "icon-white icon-ok",
|
||||
"class" : "btn-success",
|
||||
"url" : reverse(amavis_quarantine.views.release, args=[mail_id]) \
|
||||
"url" : reverse(amavis.views.release, args=[mail_id]) \
|
||||
+ ("?rcpt=%s" % rcpt if rcpt else ""),
|
||||
"label" : _("Release")},
|
||||
{"name" : "delete",
|
||||
"class" : "btn-danger",
|
||||
"img" : "icon-white icon-trash",
|
||||
"url" : reverse(amavis_quarantine.views.delete, args=[mail_id]) \
|
||||
"url" : reverse(amavis.views.delete, args=[mail_id]) \
|
||||
+ ("?rcpt=%s" % rcpt if rcpt else ""),
|
||||
"label" : _("Delete")},
|
||||
{"name" : "headers",
|
||||
"url" : reverse(amavis_quarantine.views.viewheaders, args=[mail_id]),
|
||||
"url" : reverse(amavis.views.viewheaders, args=[mail_id]),
|
||||
"label" : _("View full headers")},
|
||||
]
|
||||
|
||||
@@ -46,14 +46,14 @@ def viewm_menu_simple(user, mail_id, rcpt, secret_id=""):
|
||||
{"name" : "release",
|
||||
"img" : "icon-white icon-ok",
|
||||
"class" : "btn-success",
|
||||
"url" : reverse(amavis_quarantine.views.release, args=[mail_id]) \
|
||||
"url" : reverse(amavis.views.release, args=[mail_id]) \
|
||||
+ ("?rcpt=%s" % rcpt \
|
||||
+ (("&secret_id=%s" % secret_id) if secret_id != "" else "")),
|
||||
"label" : _("Release")},
|
||||
{"name" : "delete",
|
||||
"img" : "icon-white icon-trash",
|
||||
"class" : "btn-danger",
|
||||
"url" : reverse(amavis_quarantine.views.delete, args=[mail_id]) \
|
||||
"url" : reverse(amavis.views.delete, args=[mail_id]) \
|
||||
+ "?rcpt=%s" % rcpt \
|
||||
+ ("&secret_id=%s" % secret_id if secret_id != "" else ""),
|
||||
"label" : _("Delete")},
|
||||
@@ -66,14 +66,14 @@ def viewm_menu_simple(user, mail_id, rcpt, secret_id=""):
|
||||
def quar_menu(user):
|
||||
entries = [
|
||||
{"name" : "release-multi",
|
||||
"url" : reverse(amavis_quarantine.views.process),
|
||||
"url" : reverse(amavis.views.process),
|
||||
"img" : "icon-white icon-ok",
|
||||
"class" : "btn-success",
|
||||
"label" : _("Release")},
|
||||
{"name" : "delete-multi",
|
||||
"img" : "icon-white icon-trash",
|
||||
"class" : "btn-danger",
|
||||
"url" : reverse(amavis_quarantine.views.process),
|
||||
"url" : reverse(amavis.views.process),
|
||||
"label" : _("Delete")},
|
||||
{"name" : "select",
|
||||
"url" : "",
|
||||
@@ -1,7 +1,7 @@
|
||||
from django.conf.urls.defaults import *
|
||||
|
||||
urlpatterns = patterns(
|
||||
'modoboa.extensions.amavis_quarantine.views',
|
||||
'modoboa.extensions.amavis.views',
|
||||
(r'^$', 'index'),
|
||||
(r'^listing/$', '_listing'),
|
||||
(r'^getmailcontent/(?P<mail_id>[\w\-\+]+)/$', 'getmailcontent'),
|
||||
@@ -107,7 +107,7 @@ def _listing(request):
|
||||
|
||||
@login_required
|
||||
def index(request):
|
||||
return _render(request, "amavis_quarantine/index.html", dict(
|
||||
return _render(request, "amavis/index.html", dict(
|
||||
deflocation="listing/", defcallback="listing_cb", selection="quarantine"
|
||||
))
|
||||
|
||||
@@ -141,13 +141,13 @@ def getmailcontent(request, mail_id):
|
||||
})
|
||||
|
||||
def viewmail_selfservice(request, mail_id,
|
||||
tplname="amavis_quarantine/viewmail_selfservice.html"):
|
||||
tplname="amavis/viewmail_selfservice.html"):
|
||||
rcpt = request.GET.get("rcpt", None)
|
||||
secret_id = request.GET.get("secret_id", "")
|
||||
if rcpt is None:
|
||||
raise Http404
|
||||
content = Template("""
|
||||
<iframe src="{% url modoboa.extensions.amavis_quarantine.views.getmailcontent mail_id %}" id="mailcontent"></iframe>
|
||||
<iframe src="{% url modoboa.extensions.amavis.views.getmailcontent mail_id %}" id="mailcontent"></iframe>
|
||||
""").render(Context(dict(mail_id=mail_id)))
|
||||
|
||||
return _render(request, tplname, dict(
|
||||
@@ -181,7 +181,7 @@ def viewheaders(request, mail_id):
|
||||
for qm in Quarantine.objects.filter(mail=mail_id):
|
||||
content += qm.mail_text
|
||||
msg = email.message_from_string(content)
|
||||
return _render(request, 'amavis_quarantine/viewheader.html', {
|
||||
return _render(request, 'amavis/viewheader.html', {
|
||||
"headers" : msg.items()
|
||||
})
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
class AmavisRouter(object):
|
||||
"""A router to control all database operations on models in
|
||||
the amavis_quarantine application"""
|
||||
|
||||
def db_for_read(self, model, **hints):
|
||||
"Point all operations on amavis_quarantine models to 'amavis'"
|
||||
if model._meta.app_label == 'amavis_quarantine':
|
||||
return 'amavis'
|
||||
return None
|
||||
|
||||
def db_for_write(self, model, **hints):
|
||||
"Point all operations on amavis_quarantine models to 'amavis'"
|
||||
if model._meta.app_label == 'amavis_quarantine':
|
||||
return 'amavis'
|
||||
return None
|
||||
|
||||
def allow_relation(self, obj1, obj2, **hints):
|
||||
"Allow any relation if a model in amavis_quarantine is involved"
|
||||
if obj1._meta.app_label == 'amavis_quarantine' \
|
||||
or obj2._meta.app_label == 'amavis_quarantine':
|
||||
return True
|
||||
return None
|
||||
|
||||
def allow_syncdb(self, db, model):
|
||||
"Make sure the amavis_quarantine app only appears on the 'amavis' db"
|
||||
if db == 'amavis':
|
||||
return model._meta.app_label == 'amavis_quarantine'
|
||||
elif model._meta.app_label == 'amavis_quarantine':
|
||||
return False
|
||||
return None
|
||||
Reference in New Issue
Block a user