From 28190156b52813a300ca392e205339dadb4afd10 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 21 May 2013 19:22:50 +0200 Subject: [PATCH] Allowing every mailbox owner to define a forward. fixes #369 --- modoboa/admin/models.py | 5 +- .../userprefs/templatetags/uprefs_extras.py | 78 ++++++++++--------- modoboa/userprefs/views.py | 33 +++++--- 3 files changed, 65 insertions(+), 51 deletions(-) diff --git a/modoboa/admin/models.py b/modoboa/admin/models.py index a7564d990..fedf98369 100644 --- a/modoboa/admin/models.py +++ b/modoboa/admin/models.py @@ -60,9 +60,6 @@ class User(AbstractBaseUser, PermissionsMixin): password_expr = re.compile(r'(\{(\w+)\}|(\$1\$))(.+)') - def __unicode__(self): - return self.fullname - def delete(self, fromuser, keep_mb_dir, *args, **kwargs): """Custom delete method @@ -201,7 +198,7 @@ class User(AbstractBaseUser, PermissionsMixin): @property def fullname(self): - if self.first_name != "": + if self.first_name != u"": return u"%s %s" % (self.first_name, self.last_name) return self.username diff --git a/modoboa/userprefs/templatetags/uprefs_extras.py b/modoboa/userprefs/templatetags/uprefs_extras.py index f0151fccb..8a73ad118 100644 --- a/modoboa/userprefs/templatetags/uprefs_extras.py +++ b/modoboa/userprefs/templatetags/uprefs_extras.py @@ -7,60 +7,64 @@ from modoboa.lib import events register = template.Library() + @register.simple_tag def uprefs_menu(selection, user): entries = [ - {"name" : "profile", - "class" : "ajaxlink", - "url" : "profile/", - "label" : _("Profile")}, - {"name" : "preferences", - "class" : "ajaxlink", - "url" : "preferences/", - "label" : _("Preferences")}, - ] - if user.group == 'SimpleUsers' and user.has_mailbox: - entries.insert(0, {"name" : "forward", - "class" : "ajaxlink", - "url" : "forward/", - "label" : _("Forward")}) + {"name": "profile", + "class": "ajaxlink", + "url": "profile/", + "label": _("Profile")}, + {"name": "preferences", + "class": "ajaxlink", + "url": "preferences/", + "label": _("Preferences")}, + ] + if user.has_mailbox: + entries.insert(0, {"name": "forward", + "class": "ajaxlink", + "url": "forward/", + "label": _("Forward")}) entries += events.raiseQueryEvent("UserMenuDisplay", "uprefs_menu", user) entries = sorted(entries, key=lambda e: e["label"]) return render_to_string('common/menu.html', { - "entries" : entries, - "css" : "nav nav-list", - "selection" : selection, - "user" : user - }) + "entries": entries, + "css": "nav nav-list", + "selection": selection, + "user": user + }) @register.simple_tag def user_menu(user, selection): entries = [ - {"name" : "user", - "img" : "icon-user icon-white", - "label" : user.fullname, - "menu" : [ - {"name" : "settings", - "img" : "icon-list", - "label" : _("Settings"), - "url" : reverse("modoboa.userprefs.views.index")} - ]} - ] + {"name": "user", + "img": "icon-user icon-white", + "label": user.fullname, + "menu": [ + {"name": "settings", + "img": "icon-list", + "label": _("Settings"), + "url": reverse("modoboa.userprefs.views.index")} + ]} + ] entries[0]["menu"] += \ events.raiseQueryEvent("UserMenuDisplay", "options_menu", user) \ - + [{"name" : "logout", - "url" : reverse("modoboa.auth.views.dologout"), - "label" : _("Logout"), - "img" : "icon-off"}] + + [{"name": "logout", + "url": reverse("modoboa.auth.views.dologout"), + "label": _("Logout"), + "img": "icon-off"}] + + return render_to_string("common/menulist.html", { + "selection": selection, "entries": entries, "user": user + }) - return render_to_string("common/menulist.html", - {"selection" : selection, "entries" : entries, "user" : user}) @register.simple_tag def loadextmenu(selection, user): menu = events.raiseQueryEvent("UserMenuDisplay", "top_menu", user) - return render_to_string('common/menulist.html', - {"selection" : selection, "entries" : menu, "user" : user}) + return render_to_string('common/menulist.html', { + "selection": selection, "entries": menu, "user": user + }) diff --git a/modoboa/userprefs/views.py b/modoboa/userprefs/views.py index 9ecbf7533..907925d38 100644 --- a/modoboa/userprefs/views.py +++ b/modoboa/userprefs/views.py @@ -3,27 +3,34 @@ from django.shortcuts import render from django.contrib.auth.decorators import login_required, user_passes_test from django.utils.translation import ugettext as _ from modoboa.lib import parameters, events +from modoboa.lib.decorators import needs_mailbox from modoboa.lib.exceptions import ModoboaException -from modoboa.lib.webutils import ajax_response, ajax_simple_response, _render_to_string +from modoboa.lib.webutils import ( + ajax_response, ajax_simple_response, _render_to_string +) from modoboa.admin.models import Mailbox, Alias from modoboa.auth.lib import encrypt from forms import ForwardForm, BadDestination, ProfileForm + @login_required def index(request, tplname="userprefs/index.html"): extrajs = events.raiseQueryEvent("ExtraUprefsJS", request.user) return render(request, tplname, { - "selection" : "user", - "extrajs" : "".join(extrajs) - }) + "selection": "user", + "extrajs": "".join(extrajs) + }) + @login_required -@user_passes_test(lambda u: u.belongs_to_group('SimpleUsers')) +@needs_mailbox() def forward(request, tplname='userprefs/forward.html'): try: mb = request.user.mailbox_set.all()[0] except IndexError: - raise ModoboaException(_("You need a mailbox in order to define a forward")) + raise ModoboaException( + _("You need a mailbox in order to define a forward") + ) try: al = Alias.objects.get(address=mb.address, domain__name=mb.domain.name) @@ -44,6 +51,8 @@ def forward(request, tplname='userprefs/forward.html'): intdests += [mb] form.parse_dest() al.save(intdests, form.dests) + if request.user.group != "SimpleUsers": + al.post_create(request.user) return ajax_response(request, respmsg=_("Forward updated")) except BadDestination, e: error = str(e) @@ -70,6 +79,7 @@ def forward(request, tplname='userprefs/forward.html'): }) }) + @login_required def profile(request, tplname='userprefs/profile.html'): update_password = True @@ -77,7 +87,9 @@ def profile(request, tplname='userprefs/profile.html'): update_password = False if request.method == "POST": - form = ProfileForm(update_password, request.POST, instance=request.user) + form = ProfileForm( + update_password, request.POST, instance=request.user + ) if form.is_valid(): form.save() if update_password: @@ -98,6 +110,7 @@ def profile(request, tplname='userprefs/profile.html'): }) }) + @login_required def preferences(request): if request.method == "POST": @@ -115,8 +128,8 @@ def preferences(request): }) return ajax_simple_response({ - "status" : "ok", - "content" : _render_to_string(request, "userprefs/preferences.html", { - "forms" : parameters.get_user_forms(request.user) + "status": "ok", + "content": _render_to_string(request, "userprefs/preferences.html", { + "forms": parameters.get_user_forms(request.user) }) })