mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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"));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user