Allowing every mailbox owner to define a forward.

fixes #369
This commit is contained in:
Antoine Nguyen
2013-05-21 19:22:50 +02:00
parent 6683bdd959
commit 28190156b5
3 changed files with 65 additions and 51 deletions
+1 -4
View File
@@ -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
+41 -37
View File
@@ -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
})
+23 -10
View File
@@ -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)
})
})