diff --git a/admin/forms.py b/admin/forms.py index 3fde9708a..3b67a4333 100644 --- a/admin/forms.py +++ b/admin/forms.py @@ -6,6 +6,11 @@ from mailng.admin.templatetags.admin_extras import gender class DomainForm(forms.ModelForm): class Meta: model = Domain + + def __init__(self, *args, **kwargs): + super(DomainForm, self).__init__(*args, **kwargs) + for f in ['name', 'quota']: + self.fields[f].widget.attrs['size'] = 14 class MailboxForm(forms.ModelForm): quota = forms.IntegerField(label=_("Quota"), required=False) @@ -17,6 +22,11 @@ class MailboxForm(forms.ModelForm): model = Mailbox fields = ('name', 'address') + def __init__(self, *args, **kwargs): + super(MailboxForm, self).__init__(*args, **kwargs) + for f in ['name', 'address', 'quota', 'password1', 'password2']: + self.fields[f].widget.attrs['size'] = 14 + def clean_password2(self): if self.cleaned_data["password1"] != self.cleaned_data["password2"]: raise forms.ValidationError(_("Passwords mismatch")) @@ -29,6 +39,7 @@ class AliasForm(forms.ModelForm): domain = kwargs["domain"] del kwargs["domain"] super(AliasForm, self).__init__(*args, **kwargs) + self.fields['address'].widget.attrs['size'] = 14 if domain: self.fields['mbox'].queryset = Mailbox.objects.filter(domain=domain.id) diff --git a/main/forms.py b/main/forms.py index 589c1e04d..d3614f582 100644 --- a/main/forms.py +++ b/main/forms.py @@ -1,8 +1,13 @@ from django import forms from mailng.main.models import ARmessage +from django.utils.translation import ugettext as _ class ARmessageForm(forms.ModelForm): class Meta: model = ARmessage fields = ('subject', 'content', 'enabled') + def __init__(self, *args, **kwargs): + super(ARmessageForm, self).__init__(*args, **kwargs) + self.fields['subject'].widget.attrs['size'] = 40 + self.fields['content'].widget.attrs['cols'] = 50 diff --git a/main/models.py b/main/models.py index 2ebc947f9..054c814e4 100644 --- a/main/models.py +++ b/main/models.py @@ -3,7 +3,11 @@ from mailng.admin.models import Mailbox class ARmessage(models.Model): mbox = models.ForeignKey(Mailbox) - last_sent = models.DateField(auto_now=True) subject = models.CharField(max_length=255) content = models.TextField() enabled = models.BooleanField() + +class ARhistoric(models.Model): + armessage = models.ForeignKey(ARmessage) + last_sent = models.DateTimeField(auto_now=True) + sender = models.TextField() diff --git a/main/views.py b/main/views.py index 75d17a798..73219ac82 100644 --- a/main/views.py +++ b/main/views.py @@ -29,6 +29,9 @@ def autoreply(request): arm = form.save(commit=False) arm.mbox = mb arm.save() + request.user.message_set.create( + message="Auto reply message updated successfully." + ) form = ARmessageForm(instance=arm) return _render(request, "main/autoreply.html", { diff --git a/scripts/autoreply.py b/scripts/autoreply.py new file mode 100755 index 000000000..a9d261172 --- /dev/null +++ b/scripts/autoreply.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import sys +from email.mime.text import MIMEText +import datetime +from django.conf import settings +from mailng.admin.models import Mailbox +from mailng.main.models import ARmessage, ARhistoric + +if __name__ == "__main__": + if len(sys.argv) != 3: + print "Not enough arguments, aborting." + sys.exit(1) + + sender = sys.argv[1] + mailbox = sys.argv[2] + mbox = Mailbox.objects.get(full_address=mailbox) + try: + armessage = ARmessage.objects.get(mbox=mbox.id, enabled=True) + except ARmessage.DoesNotExist: + sys.exit(0) + try: + lastar = ARhistoric.objects.get(armessage=armessage.id, sender=sender) + try: + timeout = getattr(settings, "AUTOREPLIES_TIMEOUT") + except AttributeError: + timeout = 86400 # 24h + delta = datetime.timedelta(seconds=timeout) + if lastar.last_sent + delta > datetime.datetime.now(): + sys.exit(0) + except ARhistoric.DoesNotExist: + lastar = ARhistoric() + lastar.armessage = armessage + lastar.sender = sender + + msg = MIMEText(armessage.content.encode('utf-8'), _charset='utf-8') + msg['Subject'] = armessage.subject + msg['From'] = mailbox + msg['To'] = sender + print msg + lastar.last_sent = datetime.datetime.now() + lastar.save() + sys.exit(0) diff --git a/settings_sample.py b/settings_sample.py index 443a3a7a2..dd5c35d4a 100644 --- a/settings_sample.py +++ b/settings_sample.py @@ -94,3 +94,6 @@ VIRTUAL_GID = "vmail" # Mailboxes format: maildir (default) or mbox # MAILBOX_TYPE = "" + +# Autoreplies sending timeout (default: 86400s) +# AUTOREPLIES_TIMEOUT = diff --git a/static/pics/user.png b/static/pics/user.png new file mode 100644 index 000000000..46573fff6 Binary files /dev/null and b/static/pics/user.png differ diff --git a/static/stylesheets/basic.css b/static/stylesheets/basic.css index 778c0b43d..d4847cd8b 100644 --- a/static/stylesheets/basic.css +++ b/static/stylesheets/basic.css @@ -136,6 +136,11 @@ body { margin: 0 0 0 15px; } +#content2 { + + +} + #menubar { margin-left: 20px; display: table; @@ -285,4 +290,11 @@ body { #setcontent h4 { margin-top: 0; +} + +#infos { + float: right; + color: green; + font-weight: bold; + margin-right: 10px; } \ No newline at end of file diff --git a/static/stylesheets/box.css b/static/stylesheets/box.css index 2c54b2f20..620a20e21 100644 --- a/static/stylesheets/box.css +++ b/static/stylesheets/box.css @@ -23,7 +23,6 @@ form input { color: inherit; /*background-color: #e9e9e9;*/ background-color: #eee; - width: 120px; padding: 2px; } @@ -71,4 +70,12 @@ form input:hover { color: red; font-size: small; font-weight: bold; +} + +#id_username { + width: 120px; +} + +#id_password { + width: 120px; } \ No newline at end of file diff --git a/templates/layout.html b/templates/layout.html index 6e883d538..04ab3c7fb 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -33,6 +33,20 @@
{% trans "Admin" %}
+
{% trans "Preferences" %}
+