mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
wip: Big refactoring
autoreply extension OK.
This commit is contained in:
@@ -1,13 +1,31 @@
|
||||
# coding: utf-8
|
||||
from functools import wraps
|
||||
from django.db.models import Q
|
||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from modoboa.core.models import User
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib.exceptions import ModoboaException
|
||||
from modoboa.lib.emailutils import split_mailbox
|
||||
from modoboa.extensions.admin.models import Alias
|
||||
|
||||
|
||||
def needs_mailbox():
|
||||
"""Check if the current user owns at least one mailbox
|
||||
|
||||
Some applications (the webmail for example) need a mailbox to
|
||||
work.
|
||||
"""
|
||||
def decorator(f):
|
||||
@wraps(f)
|
||||
def wrapped_f(request, *args, **kwargs):
|
||||
if request.user.mailbox_set.count():
|
||||
return f(request, *args, **kwargs)
|
||||
raise ModoboaException()
|
||||
return wrapped_f
|
||||
return decorator
|
||||
|
||||
|
||||
def get_sort_order(qdict, default, allowed_values=None):
|
||||
"""Return a sort order from a querydict object
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@ functionality into Postfix.
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from modoboa.lib import events, parameters
|
||||
from modoboa.extensions import ModoExtension, exts_pool
|
||||
from models import *
|
||||
from modoboa.core.extensions import ModoExtension, exts_pool
|
||||
from .models import Transport, Alias
|
||||
|
||||
|
||||
class PostfixAutoreply(ModoExtension):
|
||||
@@ -20,7 +20,7 @@ class PostfixAutoreply(ModoExtension):
|
||||
description = ugettext_lazy("Auto-reply (vacation) functionality using Postfix")
|
||||
|
||||
def init(self):
|
||||
from modoboa.admin.models import Domain
|
||||
from modoboa.extensions.admin.models import Domain
|
||||
|
||||
for dom in Domain.objects.all():
|
||||
try:
|
||||
@@ -37,7 +37,7 @@ class PostfixAutoreply(ModoExtension):
|
||||
onCreateMailbox(None, mb)
|
||||
|
||||
def load(self):
|
||||
from app_settings import ParametersForm
|
||||
from modoboa.extensions.postfix_autoreply.app_settings import ParametersForm
|
||||
parameters.register(ParametersForm, ugettext_lazy("Automatic replies"))
|
||||
|
||||
def destroy(self):
|
||||
@@ -54,7 +54,8 @@ exts_pool.register_extension(PostfixAutoreply)
|
||||
|
||||
@events.observe("ExtraUprefsRoutes")
|
||||
def extra_routes():
|
||||
return [(r'^autoreply/$', 'modoboa.extensions.postfix_autoreply.views.autoreply'),]
|
||||
return [(r'^user/autoreply/$',
|
||||
'modoboa.extensions.postfix_autoreply.views.autoreply'), ]
|
||||
|
||||
|
||||
@events.observe("ExtraUprefsJS")
|
||||
@@ -62,7 +63,7 @@ def extra_js(user):
|
||||
return ["""function autoreply_cb() {
|
||||
$('#id_untildate').datepicker({format: 'yyyy-mm-dd', language: '%s'});
|
||||
}
|
||||
""" % parameters.get_user(user, "LANG", app="general")
|
||||
""" % parameters.get_user(user, "LANG", app="core")
|
||||
]
|
||||
|
||||
|
||||
@@ -70,7 +71,7 @@ def extra_js(user):
|
||||
def menu(target, user):
|
||||
if target != "uprefs_menu":
|
||||
return []
|
||||
if not user.has_mailbox:
|
||||
if not user.mailbox_set.count():
|
||||
return []
|
||||
return [
|
||||
{"name": "autoreply",
|
||||
@@ -105,7 +106,7 @@ def onCreateMailbox(user, mailbox):
|
||||
|
||||
@events.observe("DeleteMailbox")
|
||||
def onDeleteMailbox(mailboxes):
|
||||
from modoboa.admin.models import Mailbox
|
||||
from modoboa.extensions.admin.models import Mailbox
|
||||
|
||||
if isinstance(mailboxes, Mailbox):
|
||||
mailboxes = [mailboxes]
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
# coding: utf-8
|
||||
from django import forms
|
||||
from models import ARmessage
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
import datetime
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from .models import ARmessage
|
||||
|
||||
|
||||
class ARmessageForm(forms.ModelForm):
|
||||
untildate = forms.DateField(
|
||||
label=ugettext_lazy('Until'),
|
||||
label=ugettext_lazy('Until'),
|
||||
required=False,
|
||||
help_text=ugettext_lazy("Activate your auto reply until this date")
|
||||
)
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = ARmessage
|
||||
fields = ('subject', 'content', 'enabled')
|
||||
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ARmessageForm, self).__init__(*args, **kwargs)
|
||||
self.fields.keyOrder = ['subject', 'content', 'untildate', 'enabled']
|
||||
|
||||
@@ -6,10 +6,11 @@ from django.core.management.base import BaseCommand, CommandError
|
||||
from django.utils import timezone
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib.emailutils import split_mailbox, sendmail_simple
|
||||
from modoboa.admin.models import Mailbox
|
||||
from modoboa.extensions.admin.models import Mailbox
|
||||
from modoboa.extensions.postfix_autoreply import PostfixAutoreply
|
||||
from modoboa.extensions.postfix_autoreply.models import ARmessage, ARhistoric
|
||||
|
||||
|
||||
def send_autoreply(sender, mailbox, armessage):
|
||||
if armessage.untildate is not None \
|
||||
and armessage.untildate < datetime.date.today():
|
||||
@@ -20,10 +21,10 @@ def send_autoreply(sender, mailbox, armessage):
|
||||
try:
|
||||
lastar = ARhistoric.objects.get(armessage=armessage.id, sender=sender)
|
||||
PostfixAutoreply().load()
|
||||
timeout = parameters.get_admin("AUTOREPLIES_TIMEOUT",
|
||||
timeout = parameters.get_admin("AUTOREPLIES_TIMEOUT",
|
||||
app="postfix_autoreply")
|
||||
delta = datetime.timedelta(seconds=int(timeout))
|
||||
now = timezone.make_aware(datetime.datetime.now(),
|
||||
now = timezone.make_aware(datetime.datetime.now(),
|
||||
timezone.get_default_timezone())
|
||||
if lastar.last_sent + delta > now:
|
||||
sys.exit(0)
|
||||
@@ -34,7 +35,7 @@ def send_autoreply(sender, mailbox, armessage):
|
||||
|
||||
sendmail_simple(mailbox.user.encoded_address, sender, armessage.subject,
|
||||
armessage.content.encode('utf-8'))
|
||||
|
||||
|
||||
lastar.last_sent = datetime.datetime.now()
|
||||
lastar.save()
|
||||
|
||||
|
||||
@@ -1,25 +1,35 @@
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from modoboa.admin.models import Domain, Mailbox
|
||||
from modoboa.extensions.admin.models import Domain, Mailbox
|
||||
|
||||
|
||||
class Transport(models.Model):
|
||||
domain = models.CharField(max_length=300)
|
||||
method = models.CharField(max_length=255)
|
||||
|
||||
|
||||
class Alias(models.Model):
|
||||
full_address = models.CharField(max_length=255)
|
||||
autoreply_address = models.CharField(max_length=255)
|
||||
|
||||
|
||||
class ARmessage(models.Model):
|
||||
mbox = models.ForeignKey(Mailbox)
|
||||
subject = models.CharField(_('subject'), max_length=255,
|
||||
help_text=_("The subject that will appear in sent emails"))
|
||||
content = models.TextField(_('content'),
|
||||
help_text=_("The content that will appear in sent emails"))
|
||||
enabled = models.BooleanField(_('enabled'),
|
||||
help_text=_("Activate/Deactivate your auto reply"))
|
||||
subject = models.CharField(
|
||||
_('subject'), max_length=255,
|
||||
help_text=_("The subject that will appear in sent emails")
|
||||
)
|
||||
content = models.TextField(
|
||||
_('content'),
|
||||
help_text=_("The content that will appear in sent emails")
|
||||
)
|
||||
enabled = models.BooleanField(
|
||||
_('enabled'),
|
||||
help_text=_("Activate/Deactivate your auto reply")
|
||||
)
|
||||
untildate = models.DateField()
|
||||
|
||||
|
||||
class ARhistoric(models.Model):
|
||||
armessage = models.ForeignKey(ARmessage)
|
||||
last_sent = models.DateTimeField(auto_now=True)
|
||||
|
||||
@@ -1,17 +1,14 @@
|
||||
# coding: utf-8
|
||||
from datetime import date
|
||||
from django.http import HttpResponse
|
||||
from django.contrib.auth.decorators \
|
||||
import login_required
|
||||
from django.contrib import messages
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.utils.translation import ugettext as _
|
||||
from modoboa.lib.webutils import (
|
||||
ajax_simple_response, ajax_response, _render_to_string
|
||||
ajax_simple_response, _render_to_string
|
||||
)
|
||||
from modoboa.lib.decorators import needs_mailbox
|
||||
from forms import *
|
||||
from models import *
|
||||
from modoboa.extensions.admin.lib import needs_mailbox
|
||||
from modoboa.extensions.admin.models import Mailbox
|
||||
from .forms import ARmessageForm
|
||||
from .models import ARmessage
|
||||
|
||||
|
||||
@login_required
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
# coding: utf-8
|
||||
"""
|
||||
:mod:`decorators` --- common decorators
|
||||
---------------------------------------
|
||||
"""
|
||||
from functools import wraps
|
||||
from exceptions import NeedsMailboxException
|
||||
|
||||
def needs_mailbox():
|
||||
"""Check if the current user owns at least one mailbox
|
||||
|
||||
Some applications (the webmail for example) need a mailbox to
|
||||
work.
|
||||
"""
|
||||
def decorator(f):
|
||||
@wraps(f)
|
||||
def wrapped_f(request, *args, **kwargs):
|
||||
if request.user.has_mailbox:
|
||||
return f(request, *args, **kwargs)
|
||||
raise NeedsMailboxException()
|
||||
return wrapped_f
|
||||
return decorator
|
||||
@@ -6,9 +6,11 @@
|
||||
"""
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
|
||||
class ModoboaException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class PermDeniedException(ModoboaException):
|
||||
def __init__(self, msg=None):
|
||||
self.msg = msg
|
||||
@@ -17,7 +19,3 @@ class PermDeniedException(ModoboaException):
|
||||
if self.msg:
|
||||
return _("Permission denied: %s" % self.msg)
|
||||
return _("Permission denied")
|
||||
|
||||
class NeedsMailboxException(ModoboaException):
|
||||
pass
|
||||
|
||||
|
||||
+7
-1
@@ -1,7 +1,7 @@
|
||||
from django.conf.urls import patterns, include, url
|
||||
from django.conf import settings
|
||||
from modoboa.core.extensions import exts_pool
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib import parameters, events
|
||||
from modoboa.core import load_settings
|
||||
|
||||
load_settings()
|
||||
@@ -25,7 +25,13 @@ urlpatterns = patterns('',
|
||||
(r'^user/$', 'modoboa.core.views.user.index'),
|
||||
(r'^user/preferences/$', 'modoboa.core.views.user.preferences'),
|
||||
(r'^user/profile/$', 'modoboa.core.views.user.profile'),
|
||||
)
|
||||
|
||||
urlpatterns += patterns('',
|
||||
*events.raiseQueryEvent("ExtraUprefsRoutes")
|
||||
)
|
||||
|
||||
urlpatterns += patterns('',
|
||||
*exts_pool.load_all()
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user