From b33fdb45d98d2bc380a677175068dd37b6a6f0da Mon Sep 17 00:00:00 2001 From: tonio Date: Fri, 7 May 2010 18:45:50 +0200 Subject: [PATCH] Tickets #8 and #22. Not finished yet... --- admin/models.py | 3 ++ extensions/postfix_autoreply/forms.py | 2 +- extensions/postfix_autoreply/main.py | 27 +++++++++++++-- extensions/postfix_autoreply/models.py | 2 +- .../postfix_autoreply/scripts}/autoreply | 4 +-- .../postfix_autoreply/scripts}/autoreply.py | 8 ++++- .../scripts}/upgrade_autoreply.py | 0 .../templates/autoreply.html | 34 +++++++++++++++---- static/js/form.js | 8 ++++- templates/layout_simple.html | 4 +-- userprefs/views.py | 12 ++++--- 11 files changed, 81 insertions(+), 23 deletions(-) rename {scripts => extensions/postfix_autoreply/scripts}/autoreply (54%) rename {scripts => extensions/postfix_autoreply/scripts}/autoreply.py (86%) rename {scripts => extensions/postfix_autoreply/scripts}/upgrade_autoreply.py (100%) diff --git a/admin/models.py b/admin/models.py index 13bd53160..50dc8c140 100644 --- a/admin/models.py +++ b/admin/models.py @@ -148,6 +148,9 @@ class Extension(models.Model): if self.has_templates: code, output = exec_cmd("ln -s ../extensions/%s/templates templates/%s" \ % (self.name, self.name)) + if os.path.exists("extensions/%s/scripts" % self.name): + code, output = exec_cmd("ln -s ../extensions/%s/scripts scripts/%s" \ + % (self.name, self.name)) module.main.init() self.enabled = True self.save() diff --git a/extensions/postfix_autoreply/forms.py b/extensions/postfix_autoreply/forms.py index 7c5639bc1..2b5cb3b7d 100644 --- a/extensions/postfix_autoreply/forms.py +++ b/extensions/postfix_autoreply/forms.py @@ -5,7 +5,7 @@ from django.utils.translation import ugettext as _ class ARmessageForm(forms.ModelForm): class Meta: model = ARmessage - fields = ('subject', 'content', 'enabled') + fields = ('subject', 'content', 'enabled', 'untildate') def __init__(self, *args, **kwargs): super(ARmessageForm, self).__init__(*args, **kwargs) diff --git a/extensions/postfix_autoreply/main.py b/extensions/postfix_autoreply/main.py index e2a3c15a1..894d05257 100644 --- a/extensions/postfix_autoreply/main.py +++ b/extensions/postfix_autoreply/main.py @@ -7,12 +7,14 @@ This module provides a way to integrate MailNG auto-reply functionality into Postfix. """ +from django.http import HttpResponse +from django.utils import simplejson from django.contrib.auth.decorators \ import login_required from django.conf.urls.defaults import include from django.core.urlresolvers import reverse from django.utils.translation import ugettext as _ -from mailng.lib import _render, events, parameters +from mailng.lib import _render, events, parameters, _ctx_ok, _ctx_ko from forms import * from models import * @@ -29,12 +31,20 @@ def init(): events.register("CreateMailbox", onCreateMailbox) events.register("DeleteMailbox", onDeleteMailbox) events.register("ModifyMailbox", onModifyMailbox) - events.register("UserMenuDisplay", menu) parameters.register("postfix_autoreply", "AUTOREPLIES_TIMEOUT", "int", 86400, help=_("Timeout in seconds between two auto-replies to the same recipient")) +def destroy(): + events.unregister("CreateDomain", onCreateDomain) + events.unregister("DeleteDomain", onDeleteDomain) + events.unregister("CreateMailbox", onCreateMailbox) + events.unregister("DeleteMailbox", onDeleteMailbox) + events.unregister("ModifyMailbox", onModifyMailbox) + events.unregister("UserMenuDisplay", menu) + parameters.unregister_app("postfix_autoreply") + def urls(): return (r'^mailng/postfix_autoreply/', include('mailng.extensions.postfix_autoreply.urls')) @@ -46,6 +56,8 @@ def menu(**kwargs): {"name" : "autoreply", "url" : reverse(autoreply), "img" : "/static/pics/auto-reply.png", + "class" : "boxed", + "rel" : "{handler:'iframe',size:{x:440,y:370}}", "label" : _("Auto-reply message")} ] @@ -102,13 +114,22 @@ def autoreply(request): form = ARmessageForm(request.POST) error = None if form.is_valid(): + from mailng import userprefs + arm = form.save(commit=False) arm.mbox = mb arm.save() request.user.message_set.create( message=_("Auto reply message updated successfully.") ) - + ctx = _ctx_ok(reverse(userprefs.views.index)) + else: + ctx = _ctx_ko("postfix_autoreply/autoreply.html", { + "form" : form, "error" : error + }) + return HttpResponse(simplejson.dumps(ctx), + mimetype="application/json") + form = ARmessageForm(instance=arm) return _render(request, "postfix_autoreply/autoreply.html", { "form" : form diff --git a/extensions/postfix_autoreply/models.py b/extensions/postfix_autoreply/models.py index ce21f5210..3ad3ddbb5 100644 --- a/extensions/postfix_autoreply/models.py +++ b/extensions/postfix_autoreply/models.py @@ -15,7 +15,7 @@ class ARmessage(models.Model): subject = models.CharField(_('subject'), max_length=255) content = models.TextField(_('content')) enabled = models.BooleanField(_('enabled')) -# untildate = models.DateTimeField(_('until')) + untildate = models.DateTimeField(_('until')) class ARhistoric(models.Model): armessage = models.ForeignKey(ARmessage) diff --git a/scripts/autoreply b/extensions/postfix_autoreply/scripts/autoreply similarity index 54% rename from scripts/autoreply rename to extensions/postfix_autoreply/scripts/autoreply index 559dbfe6c..f599c0912 100755 --- a/scripts/autoreply +++ b/extensions/postfix_autoreply/scripts/autoreply @@ -1,8 +1,8 @@ #!/bin/sh -BASEDIR=/var/www +BASEDIR=/home/tonio/projets/devel export PYTHONPATH=$BASEDIR export DJANGO_SETTINGS_MODULE=mailng.settings #export PYTHON_EGG_CACHE=/tmp -$BASEDIR/mailng/scripts/autoreply.py $1 $2 +$BASEDIR/mailng/scripts/postfix_autoreply/autoreply.py $1 $2 diff --git a/scripts/autoreply.py b/extensions/postfix_autoreply/scripts/autoreply.py similarity index 86% rename from scripts/autoreply.py rename to extensions/postfix_autoreply/scripts/autoreply.py index 8e234aaea..cb6d346d0 100755 --- a/scripts/autoreply.py +++ b/extensions/postfix_autoreply/scripts/autoreply.py @@ -7,7 +7,7 @@ from email.mime.text import MIMEText import datetime from mailng.lib import parameters from mailng.admin.models import Mailbox -from mailng.main.models import ARmessage, ARhistoric +from mailng.extensions.postfix_autoreply.models import ARmessage, ARhistoric if __name__ == "__main__": if len(sys.argv) != 3: @@ -21,6 +21,12 @@ if __name__ == "__main__": armessage = ARmessage.objects.get(mbox=mbox.id, enabled=True) except ARmessage.DoesNotExist: sys.exit(0) + + if armessage.untildate < datetime.datetime.now(): + armessage.enabled = False + armessage.save() + sys.exit(0) + try: lastar = ARhistoric.objects.get(armessage=armessage.id, sender=sender) parameters.get("postfix_autoreply", "AUTOREPLIES_TIMEOUT") diff --git a/scripts/upgrade_autoreply.py b/extensions/postfix_autoreply/scripts/upgrade_autoreply.py similarity index 100% rename from scripts/upgrade_autoreply.py rename to extensions/postfix_autoreply/scripts/upgrade_autoreply.py diff --git a/extensions/postfix_autoreply/templates/autoreply.html b/extensions/postfix_autoreply/templates/autoreply.html index 958b4ad4a..f282c21e8 100644 --- a/extensions/postfix_autoreply/templates/autoreply.html +++ b/extensions/postfix_autoreply/templates/autoreply.html @@ -1,13 +1,33 @@ -{% extends "userprefs/header.html" %} +{% extends "layout_simple.html" %} {% load i18n %} {% block html_head %} - - - - + + + + + + {% endblock %} -{% block subcontent %} -
+ +{% block content %} +

{% trans "Auto-reply message" %}

+ + {% include "common/genericform.html" %}
diff --git a/static/js/form.js b/static/js/form.js index 4392d63ed..9a6fee9f9 100644 --- a/static/js/form.js +++ b/static/js/form.js @@ -35,6 +35,9 @@ window.addEvent("domready", function() { chpassword_submit = function(event) { generic_submit(this, event, "chpwdform", chpassword_submit); } + arm_submit = function(event) { + generic_submit(this, event, "armform", arm_submit); + } if ($("domform")) $("domform").addEvent("submit", domain_submit); @@ -51,9 +54,12 @@ window.addEvent("domready", function() { if ($("chpwdform")) $("chpwdform").addEvent("submit", chpassword_submit); + if ($("armform")) + $("armform").addEvent("submit", arm_submit); + $$("input[type!=submit]", "select").each(function(elt) { - elt.store("tip:title", gettext("Help")); if ($(elt.name + "_helptext")) { + elt.store("tip:title", gettext("Help")); elt.store("tip:text", $(elt.name + "_helptext").get("html")); } }); diff --git a/templates/layout_simple.html b/templates/layout_simple.html index a8c47ed08..f516beb3d 100644 --- a/templates/layout_simple.html +++ b/templates/layout_simple.html @@ -11,12 +11,12 @@ {% url django.views.i18n.javascript_catalog as catalog_url %} - {%block html_head %}{% endblock %} + {% block html_head %}{% endblock %}
- {%block content %}{% endblock %} + {% block content %}{% endblock %}
diff --git a/userprefs/views.py b/userprefs/views.py index 04b5ad56e..ff343717e 100644 --- a/userprefs/views.py +++ b/userprefs/views.py @@ -16,11 +16,13 @@ from mailng.admin.models import Mailbox @login_required def index(request): mb = Mailbox.objects.get(user=request.user.id) - try: - arm = ARmessage.objects.filter(mbox=mb.id, enabled=True) - except ARmessage.DoesNotExist: - arm = None - return _render(request, "userprefs/index.html", {"arm" : arm}) + return _render(request, "userprefs/index.html", {}) + # try: + # arm = ARmessage.objects.filter(mbox=mb.id, enabled=True) + # except ARmessage.DoesNotExist: + # arm = None + # return _render(request, "userprefs/index.html", {"arm" : arm}) + @login_required def changepassword(request):