Files
modoboa/userprefs/views.py
T
Antoine Nguyen e9a8842a5d wip: global UI refactoring
* Templates cleanup (page titles for everyone)
* Fixed unicode issues
2012-04-20 12:59:55 +02:00

142 lines
4.9 KiB
Python

# coding: utf-8
import copy
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators \
import login_required, user_passes_test
from django.conf import settings
from django.utils.translation import ugettext as _
from modoboa.lib import parameters, events
from modoboa.lib.webutils import _render, _render_error, ajax_response, \
ajax_simple_response
from forms import *
from modoboa.admin.models import Mailbox, Alias
from modoboa.admin.lib import AdminError
from modoboa.auth.lib import encrypt
@login_required
def index(request):
return HttpResponseRedirect(reverse(preferences))
@login_required
def changepassword(request, tplname="common/generic_modal_form.html"):
res = events.raiseQueryEvent("PasswordChange", request.user)
if True in res:
ctx = dict(error=_("Password change is disabled for this user"))
return _render_error(request, user_context=ctx)
ctx = dict(
title=_("Change password"),
formid="chpasswordform",
action=reverse(changepassword),
action_label=_("Update"),
action_classes="submit",
)
error = None
if request.method == "POST":
form = ChangePasswordForm(request.user, request.POST)
if form.is_valid():
try:
request.user.set_password(form.cleaned_data["confirmation"],
form.cleaned_data["oldpassword"])
except AdminError, e:
error = str(e)
else:
request.session["password"] = encrypt(request.POST["confirmation"])
request.user.save()
if error is None:
return ajax_response(request, respmsg=_("Password changed"))
ctx.update(form=form, error=error)
return ajax_response(request, status="ko", template=tplname, **ctx)
ctx.update(form=ChangePasswordForm(request.user))
return _render(request, tplname, ctx)
@login_required
@user_passes_test(lambda u: u.belongs_to_group('SimpleUsers'))
def setforward(request, tplname="common/generic_modal_form.html"):
mb = request.user.mailbox_set.all()[0]
ctx = dict(
title=_("Define a forward"),
formid="forwardform",
action=reverse(setforward),
action_label=_("Update"),
action_classes="submit",
)
try:
al = Alias.objects.get(address=mb.address,
domain__name=mb.domain.name)
except Alias.DoesNotExist:
al = None
if request.method == "POST":
form = ForwardForm(request.POST)
error = None
if form.is_valid():
try:
if al is None:
al = Alias()
al.address = mb.address
al.domain = mb.domain
al.enabled = mb.user.is_active
intdests = []
if form.cleaned_data["keepcopies"]:
intdests += [mb]
form.parse_dest()
al.save(intdests, form.dests)
return ajax_response(request, respmsg=_("Forward updated"))
except BadDestination, e:
error = str(e)
ctx.update(form=form, error=error)
return ajax_response(request, status="ko", template=tplname, **ctx)
form = ForwardForm()
if al is not None:
form.fields["dest"].initial = al.extmboxes
try:
selfmb = al.mboxes.get(pk=mb.id)
except Mailbox.DoesNotExist:
pass
else:
form.fields["keepcopies"].initial = True
ctx.update(form=form)
return _render(request, tplname, ctx)
@login_required
def preferences(request):
apps = sorted(parameters._params.keys())
gparams = []
for app in apps:
if not len(parameters._params[app]['U']):
continue
if parameters.get_app_option('U', 'needs_mailbox', False, app=app) \
and not request.user.has_mailbox:
continue
tmp = {"name" : app, "params" : []}
for p in parameters._params_order[app]['U']:
param_def = parameters._params[app]['U'][p]
newdef = copy.deepcopy(param_def)
newdef["name"] = p
newdef["value"] = parameters.get_user(request.user, p, app=app)
tmp["params"] += [newdef]
gparams += [tmp]
return _render(request, 'userprefs/preferences.html', {
"selection" : "user",
"left_selection" : "preferences",
"gparams" : gparams
})
@login_required
def savepreferences(request):
for pname, v in request.POST.iteritems():
if pname == "update":
continue
app, name = pname.split('.')
parameters.save_user(request.user, name, v, app=app)
return ajax_simple_response(dict(
status="ok", message=_("Preferences saved")
))