views.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from datetime import timedelta
  2. from django.core.urlresolvers import reverse
  3. from django.shortcuts import redirect
  4. from django.utils import timezone
  5. from django.utils.translation import ugettext as _
  6. from misago.authn.decorators import block_guest
  7. from misago.forms import FormLayout
  8. from misago.messages import Message
  9. from misago.usercp.template import RequestContext
  10. from misago.usercp.models import UsernameChange
  11. from misago.usercp.username.forms import UsernameChangeForm
  12. from misago.views import error404
  13. @block_guest
  14. def username(request):
  15. if not request.acl.usercp.show_username_change():
  16. return error404(request)
  17. changes_left = request.acl.usercp.changes_left(request.user)
  18. next_change = None
  19. if request.acl.usercp.changes_expire() and not changes_left:
  20. next_change = request.user.namechanges.filter(
  21. date__gte=timezone.now() - timedelta(days=request.acl.usercp.acl['changes_expire']),
  22. ).order_by('-date')[0]
  23. next_change = next_change.date + timedelta(days=request.acl.usercp.acl['changes_expire'])
  24. message = request.messages.get_message('usercp_username')
  25. if request.method == 'POST':
  26. org_username = request.user.username
  27. form = UsernameChangeForm(request.POST, request=request)
  28. if form.is_valid():
  29. request.user.set_username(form.cleaned_data['username'])
  30. request.user.save(force_update=True)
  31. request.user.namechanges.create(date=timezone.now(), old_username=org_username)
  32. request.messages.set_flash(Message(_("Your username has been changed.")), 'success', 'usercp_username')
  33. return redirect(reverse('usercp_username'))
  34. message = Message(form.non_field_errors()[0], 'error')
  35. else:
  36. form = UsernameChangeForm(request=request)
  37. return request.theme.render_to_response('usercp/username.html',
  38. context_instance=RequestContext(request, {
  39. 'message': message,
  40. 'changes_left': changes_left,
  41. 'form': FormLayout(form),
  42. 'next_change': next_change,
  43. 'changes_history': request.user.namechanges.order_by('-date')[:10],
  44. 'tab': 'username',
  45. }));