Files
modoboa/userprefs/views.py
T
tonio c01d6de7d8 fix: return receipts are now displayed correctly.
new: parameters module refactored. The API is more simple now, there is no need to provide a module name anymore, this last is automatically guessed. Also, a new 'label' field can be provide when declaring a new parameter. It will be used instead of the name.

new: email parsing refactored. My first attempt was really ugly. I did not really studied the various RFC describing how messages are formatted or what IMAP fetch queries can do. Now, I hope this new code will face better unknown types. At least, It will be simpler to update.
2010-09-17 09:23:35 +02:00

86 lines
2.9 KiB
Python

import copy
from django.shortcuts import get_object_or_404, render_to_response
from django.template.loader import render_to_string
from django.template import RequestContext
from django.core.urlresolvers import reverse
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth.decorators \
import login_required
from django.utils import simplejson
from django.utils.translation import ugettext as _
from modoboa.lib import _render, _ctx_ok, _ctx_ko, getctx, parameters
from modoboa.lib.authbackends import crypt_password
from forms import ChangePasswordForm
from modoboa.admin.models import Mailbox
@login_required
def index(request):
return HttpResponseRedirect(reverse(preferences))
@login_required
def changepassword(request):
if request.user.id == 1:
target = request.user
else:
target = Mailbox.objects.get(user=request.user.id)
error = None
if request.method == "POST":
form = ChangePasswordForm(target, request.POST)
if form.is_valid():
if request.user.id != 1:
target.password = crypt_password(request.POST["confirmation"])
else:
target.set_password(request.POST["confirmation"])
target.save()
ctx = _ctx_ok("")
return HttpResponse(simplejson.dumps(ctx),
mimetype="application/json")
ctx = _ctx_ko("userprefs/chpassword.html", {
"form" : form, "error" : error
})
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
form = ChangePasswordForm(target)
return render_to_response('userprefs/chpassword.html', {
"form" : form
})
@login_required
def preferences(request):
apps = sorted(parameters._params.keys())
gparams = []
for app in apps:
if not len(parameters._params[app]['U']):
continue
tmp = {"name" : app, "params" : []}
for p in sorted(parameters._params[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', {
"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)
ctx = getctx("ok")
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
@login_required
def confirm(request):
return render_to_response('userprefs/confirm.html', {
"msg" : request.GET["question"]
})