Tickets #8 and #22.

Not finished yet...
This commit is contained in:
tonio
2010-05-07 18:45:50 +02:00
parent 7ad7c1f48e
commit b33fdb45d9
11 changed files with 81 additions and 23 deletions
+3
View File
@@ -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()
+1 -1
View File
@@ -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)
+24 -3
View File
@@ -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
+1 -1
View File
@@ -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)
@@ -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
@@ -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")
@@ -1,13 +1,33 @@
{% extends "userprefs/header.html" %}
{% extends "layout_simple.html" %}
{% load i18n %}
{% block html_head %}
<link rel="stylesheet" type="text/css" href="/static/stylesheets/box.css" />
<link rel="stylesheet" type="text/css" href="/static/stylesheets/datepicker/vista.css" />
<script src="/static/js/datepicker.js" type="text/javascript"></script>
<script src="/static/js/main.js" type="text/javascript"></script>
<script src="/static/js/form.js" type="text/javascript"></script>
<!--<link rel="stylesheet" type="text/css"
href="/static/stylesheets/datepicker/vista.css" />
<script src="/static/js/datepicker.js" type="text/javascript"></script>-->
<link rel="stylesheet" type="text/css"
href="/static/stylesheets/calendar.css" />
<script type="text/javascript" src="/static/js/calendar.js"></script>
<style type="text/css">
#id_subject {
width: 250px;
}
#id_content {
width: 250px;
}
</style>
<script type="text/javascript">
window.addEvent("domready", function() {
cal = new Calendar({id_untildate: "d/m/Y"});
});
</script>
{% endblock %}
{% block subcontent %}
<form action="" method="POST" id="armform" name="armform" class="simple">
{% block content %}
<div class="title"><h1>{% trans "Auto-reply message" %}</h1></div>
<form action="{% url extensions.postfix_autoreply.main.autoreply %}"
method="POST" id="armform" name="armform" class="simple">
{% include "common/genericform.html" %}
<div class="spacer"></div>
+7 -1
View File
@@ -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"));
}
});
+2 -2
View File
@@ -11,12 +11,12 @@
<script src="/static/js/SqueezeBox.js" type="text/javascript"></script>
{% url django.views.i18n.javascript_catalog as catalog_url %}
<script type="text/javascript" src="{{ catalog_url }}"></script>
{%block html_head %}{% endblock %}
{% block html_head %}{% endblock %}
</head>
<body>
<div id="content">
{%block content %}{% endblock %}
{% block content %}{% endblock %}
</div>
</body>
</html>
+7 -5
View File
@@ -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):