Browse Source

Reordered imports.

Rafał Pitoń 12 years ago
parent
commit
27fa777d2c

+ 8 - 8
misago/acl/permissions/threads.py

@@ -1,7 +1,7 @@
-import floppyforms as forms
 from django.db import models
 from django.db import models
 from django.db.models import Q
 from django.db.models import Q
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.acl.builder import BaseACL
 from misago.acl.builder import BaseACL
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.forms import YesNoSwitch
 from misago.forms import YesNoSwitch
@@ -443,7 +443,7 @@ class ThreadsACL(BaseACL):
             if post.protected and not forum_role['can_protect_posts'] and not forum_role['can_delete_threads']:
             if post.protected and not forum_role['can_protect_posts'] and not forum_role['can_delete_threads']:
                 raise ACLError403(_("This post is protected, you cannot delete it."))
                 raise ACLError403(_("This post is protected, you cannot delete it."))
             if not (forum_role['can_delete_threads'] == 2 or
             if not (forum_role['can_delete_threads'] == 2 or
-                    (not delete and (forum_role['can_delete_threads'] == 1 or 
+                    (not delete and (forum_role['can_delete_threads'] == 1 or
                     (thread.start_poster_id == user.pk and forum_role['can_soft_delete_own_threads'])))):
                     (thread.start_poster_id == user.pk and forum_role['can_soft_delete_own_threads'])))):
                 raise ACLError403(_("You don't have permission to delete this thread."))
                 raise ACLError403(_("You don't have permission to delete this thread."))
             if thread.deleted and not delete:
             if thread.deleted and not delete:
@@ -479,7 +479,7 @@ class ThreadsACL(BaseACL):
             if post.protected and not forum_role['can_protect_posts'] and not forum_role['can_delete_posts']:
             if post.protected and not forum_role['can_protect_posts'] and not forum_role['can_delete_posts']:
                 raise ACLError403(_("This post is protected, you cannot delete it."))
                 raise ACLError403(_("This post is protected, you cannot delete it."))
             if not (forum_role['can_delete_posts'] == 2 or
             if not (forum_role['can_delete_posts'] == 2 or
-                    (not delete and (forum_role['can_delete_posts'] == 1 or 
+                    (not delete and (forum_role['can_delete_posts'] == 1 or
                     (post.user_id == user.pk and forum_role['can_soft_delete_own_posts'])))):
                     (post.user_id == user.pk and forum_role['can_soft_delete_own_posts'])))):
                 raise ACLError403(_("You don't have permission to delete this post."))
                 raise ACLError403(_("You don't have permission to delete this post."))
             if post.deleted and not delete:
             if post.deleted and not delete:
@@ -508,28 +508,28 @@ class ThreadsACL(BaseACL):
                 raise ACLError404()
                 raise ACLError404()
         except KeyError:
         except KeyError:
             raise ACLError404()
             raise ACLError404()
-        
+
     def can_upvote_posts(self, forum):
     def can_upvote_posts(self, forum):
         try:
         try:
             forum_role = self.acl[forum.pk]
             forum_role = self.acl[forum.pk]
             return forum_role['can_upvote_posts']
             return forum_role['can_upvote_posts']
         except KeyError:
         except KeyError:
             return False
             return False
-        
+
     def can_downvote_posts(self, forum):
     def can_downvote_posts(self, forum):
         try:
         try:
             forum_role = self.acl[forum.pk]
             forum_role = self.acl[forum.pk]
             return forum_role['can_downvote_posts']
             return forum_role['can_downvote_posts']
         except KeyError:
         except KeyError:
             return False
             return False
-        
+
     def can_see_post_score(self, forum):
     def can_see_post_score(self, forum):
         try:
         try:
             forum_role = self.acl[forum.pk]
             forum_role = self.acl[forum.pk]
             return forum_role['can_see_posts_scores']
             return forum_role['can_see_posts_scores']
         except KeyError:
         except KeyError:
             return False
             return False
-        
+
     def can_see_post_votes(self, forum):
     def can_see_post_votes(self, forum):
         try:
         try:
             forum_role = self.acl[forum.pk]
             forum_role = self.acl[forum.pk]
@@ -552,7 +552,7 @@ class ThreadsACL(BaseACL):
                 raise ACLError403(_("You cannot downvote posts in this forum."))
                 raise ACLError403(_("You cannot downvote posts in this forum."))
         except KeyError:
         except KeyError:
             raise ACLError403(_("You cannot downvote posts in this forum."))
             raise ACLError403(_("You cannot downvote posts in this forum."))
-        
+
     def allow_post_votes_view(self, forum):
     def allow_post_votes_view(self, forum):
         try:
         try:
             forum_role = self.acl[forum.pk]
             forum_role = self.acl[forum.pk]

+ 2 - 2
misago/acl/permissions/usercp.py

@@ -1,7 +1,7 @@
 from datetime import timedelta
 from datetime import timedelta
-import floppyforms as forms
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
 from django.utils import timezone
 from django.utils import timezone
+import floppyforms as forms
 from misago.acl.builder import BaseACL
 from misago.acl.builder import BaseACL
 from misago.forms import YesNoSwitch
 from misago.forms import YesNoSwitch
 
 
@@ -19,7 +19,7 @@ def make_form(request, role, form):
                                                                        widget=YesNoSwitch, initial=False, required=False)
                                                                        widget=YesNoSwitch, initial=False, required=False)
         form.base_fields['allow_signature_images'] = forms.BooleanField(label=_("Can put images in signature"),
         form.base_fields['allow_signature_images'] = forms.BooleanField(label=_("Can put images in signature"),
                                                                         widget=YesNoSwitch, initial=False, required=False)
                                                                         widget=YesNoSwitch, initial=False, required=False)
-        
+
         form.fieldset.append((
         form.fieldset.append((
                               _("Profile Settings"),
                               _("Profile Settings"),
                               ('name_changes_allowed', 'changes_expire', 'can_use_signature', 'allow_signature_links', 'allow_signature_images')
                               ('name_changes_allowed', 'changes_expire', 'can_use_signature', 'allow_signature_links', 'allow_signature_images')

+ 4 - 4
misago/acl/permissions/users.py

@@ -1,5 +1,5 @@
-import floppyforms as forms
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.acl.builder import BaseACL
 from misago.acl.builder import BaseACL
 from misago.acl.exceptions import ACLError404
 from misago.acl.exceptions import ACLError404
 from misago.forms import YesNoSwitch
 from misago.forms import YesNoSwitch
@@ -13,7 +13,7 @@ def make_form(request, role, form):
                                                                   widget=YesNoSwitch, initial=False, required=False)
                                                                   widget=YesNoSwitch, initial=False, required=False)
     form.base_fields['can_see_hidden_users'] = forms.BooleanField(label=_("Can see mebers that hide their presence"),
     form.base_fields['can_see_hidden_users'] = forms.BooleanField(label=_("Can see mebers that hide their presence"),
                                                                   widget=YesNoSwitch, initial=False, required=False)
                                                                   widget=YesNoSwitch, initial=False, required=False)
-    
+
     form.fieldsets.append((
     form.fieldsets.append((
                            _("User Profiles"),
                            _("User Profiles"),
                            ('can_search_users', 'can_see_users_emails', 'can_see_users_trails', 'can_see_hidden_users')
                            ('can_search_users', 'can_see_users_emails', 'can_see_users_trails', 'can_see_hidden_users')
@@ -23,7 +23,7 @@ def make_form(request, role, form):
 class UsersACL(BaseACL):
 class UsersACL(BaseACL):
     def can_search_users(self):
     def can_search_users(self):
         return self.acl['can_search_users']
         return self.acl['can_search_users']
-    
+
     def can_see_users_emails(self):
     def can_see_users_emails(self):
         return self.acl['can_see_users_emails']
         return self.acl['can_see_users_emails']
 
 
@@ -32,7 +32,7 @@ class UsersACL(BaseACL):
 
 
     def can_see_hidden_users(self):
     def can_see_hidden_users(self):
         return self.acl['can_see_hidden_users']
         return self.acl['can_see_hidden_users']
-    
+
     def allow_details_view(self):
     def allow_details_view(self):
         if not self.acl['can_see_users_trails']:
         if not self.acl['can_see_users_trails']:
             raise ACLError404()
             raise ACLError404()

+ 23 - 23
misago/apps/activation/forms.py

@@ -1,23 +1,23 @@
-import hashlib
-import floppyforms as forms
-from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from misago.forms import Form, QACaptchaField, ReCaptchaField
-from misago.models import User
-
-class UserSendActivationMailForm(Form):
-    email = forms.EmailField(label=_("Your E-mail Address"),
-                             help_text=_("Enter email address send activation e-mail to. It must be valid e-mail you used to register on forums."),
-                             max_length=255)
-    captcha_qa = QACaptchaField()
-    recaptcha = ReCaptchaField()
-    error_source = 'email'
-
-    def clean_email(self):
-        try:
-            email = self.cleaned_data['email'].lower()
-            email_hash = hashlib.md5(email).hexdigest()
-            self.found_user = User.objects.get(email_hash=email_hash)
-        except User.DoesNotExist:
-            raise ValidationError(_("There is no user with such e-mail address."))
-        return email
+import hashlib
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.forms import Form, QACaptchaField, ReCaptchaField
+from misago.models import User
+
+class UserSendActivationMailForm(Form):
+    email = forms.EmailField(label=_("Your E-mail Address"),
+                             help_text=_("Enter email address send activation e-mail to. It must be valid e-mail you used to register on forums."),
+                             max_length=255)
+    captcha_qa = QACaptchaField()
+    recaptcha = ReCaptchaField()
+    error_source = 'email'
+
+    def clean_email(self):
+        try:
+            email = self.cleaned_data['email'].lower()
+            email_hash = hashlib.md5(email).hexdigest()
+            self.found_user = User.objects.get(email_hash=email_hash)
+        except User.DoesNotExist:
+            raise ValidationError(_("There is no user with such e-mail address."))
+        return email

+ 2 - 2
misago/apps/admin/forums/views.py

@@ -1,11 +1,11 @@
 import copy
 import copy
-import floppyforms as forms
 from urlparse import urlparse
 from urlparse import urlparse
 from django.core.urlresolvers import resolve, reverse as django_reverse
 from django.core.urlresolvers import resolve, reverse as django_reverse
 from django.db.models import Q
 from django.db.models import Q
 from django.http import Http404
 from django.http import Http404
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
+import floppyforms as forms
 from mptt.forms import TreeNodeChoiceField
 from mptt.forms import TreeNodeChoiceField
 from misago.admin import site
 from misago.admin import site
 from misago.apps.admin.widgets import *
 from misago.apps.admin.widgets import *
@@ -325,7 +325,7 @@ class Edit(FormWidget):
 
 
             if form.cleaned_data['parent'].pk != target.parent.pk or form.cleaned_data['perms']:
             if form.cleaned_data['parent'].pk != target.parent.pk or form.cleaned_data['perms']:
                 monitor.increase('acl_version')
                 monitor.increase('acl_version')
-                
+
         if self.original_name != target.name:
         if self.original_name != target.name:
             target.sync_name()
             target.sync_name()
 
 

+ 1 - 1
misago/apps/admin/online/forms.py

@@ -1,5 +1,5 @@
-import floppyforms as forms
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.forms import Form
 from misago.forms import Form
 
 
 class SearchSessionsForm(Form):
 class SearchSessionsForm(Form):

+ 1 - 1
misago/apps/admin/pruneusers/views.py

@@ -1,6 +1,6 @@
 from django.core.urlresolvers import reverse as django_reverse
 from django.core.urlresolvers import reverse as django_reverse
-import floppyforms as forms
 from django.utils.translation import ungettext, ugettext as _
 from django.utils.translation import ungettext, ugettext as _
+import floppyforms as forms
 from misago.admin import site
 from misago.admin import site
 from misago.apps.admin.widgets import *
 from misago.apps.admin.widgets import *
 from misago.forms import Form
 from misago.forms import Form

+ 2 - 2
misago/apps/admin/ranks/views.py

@@ -1,6 +1,6 @@
 from django.core.urlresolvers import reverse as django_reverse
 from django.core.urlresolvers import reverse as django_reverse
-import floppyforms as forms
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
+import floppyforms as forms
 from misago.admin import site
 from misago.admin import site
 from misago.apps.admin.widgets import *
 from misago.apps.admin.widgets import *
 from misago.forms import Form
 from misago.forms import Form
@@ -93,7 +93,7 @@ class New(FormWidget):
                         on_index=form.cleaned_data['on_index'],
                         on_index=form.cleaned_data['on_index'],
                         order=(last_rank.order + 1 if last_rank else 0),
                         order=(last_rank.order + 1 if last_rank else 0),
                         criteria=form.cleaned_data['criteria']
                         criteria=form.cleaned_data['criteria']
-                        )  
+                        )
         new_rank.save(force_insert=True)
         new_rank.save(force_insert=True)
         for role in form.cleaned_data['roles']:
         for role in form.cleaned_data['roles']:
             new_rank.roles.add(role)
             new_rank.roles.add(role)

+ 1 - 1
misago/apps/admin/stats/forms.py

@@ -1,7 +1,7 @@
 from datetime import timedelta
 from datetime import timedelta
-import floppyforms as forms
 from django.utils import timezone as tz
 from django.utils import timezone as tz
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.forms import Form
 from misago.forms import Form
 
 
 class GenerateStatisticsForm(Form):
 class GenerateStatisticsForm(Form):

+ 0 - 37
misago/apps/admin/users/forms.py

@@ -55,43 +55,6 @@ class UserForm(Form):
         super(UserForm, self).__init__(*args, **kwargs)
         super(UserForm, self).__init__(*args, **kwargs)
 
 
     def finalize_form(self):
     def finalize_form(self):
-        self.layout = [
-                       [
-                        _("Basic Account Settings"),
-                        [
-                         ('username', {'label': _("Username"), 'help_text': _("Username is name under which user is known to other users. Between 3 and 15 characters, only letters and digits are allowed.")}),
-                         ('title', {'label': _("User Title"), 'help_text': _("To override user title with custom one, enter it here.")}),
-                         ('rank', {'label': _("User Rank"), 'help_text': _("This user rank.")}),
-                         ('roles', {'label': _("User Roles"), 'help_text': _("This user roles. Roles are sets of user permissions")}),
-                         ],
-                        ],
-                       [
-                        _("Sign-in Credentials"),
-                        [
-                         ('email', {'label': _("E-mail Address"), 'help_text': _("Member e-mail address.")}),
-                         ('new_password', {'label': _("Change User Password"), 'help_text': _("If you wish to change user password, enter here new password. Otherwhise leave this field blank."), 'has_value': False}),
-                         ],
-                        ],
-                       [
-                        _("User Avatar"),
-                        [
-                         ('avatar_custom', {'label': _("Set Non-Standard Avatar"), 'help_text': _("You can make this member use special avatar by entering name of image file located in avatars directory here.")}),
-                         ('avatar_ban', {'label': _("Lock Member's Avatar"), 'help_text': _("If you set this field to yes, this member's avatar will be deleted and replaced with random one selected from _removed gallery and member will not be able to change his avatar.")}),
-                         ('avatar_ban_reason_user', {'label': _("User-visible reason for lock"), 'help_text': _("You can leave message to member explaining why he or she is unable to change his avatar anymore. This message will be displayed to member in his control panel.")}),
-                         ('avatar_ban_reason_admin', {'label': _("Forum Team-visible reason for lock"), 'help_text': _("You can leave message to other forum team members exmplaining why this member's avatar has been locked.")}),
-                         ],
-                        ],
-                       [
-                        _("User Signature"),
-                        [
-                         ('signature', {'label': _("Signature"), 'help_text': _("Signature is short message attached at end of member's messages.")}),
-                         ('signature_ban', {'label': _("Lock Member's Signature"), 'help_text': _("If you set this field to yes, this member will not be able to change his signature.")}),
-                         ('signature_ban_reason_user', {'label': _("User-visible reason for lock"), 'help_text': _("You can leave message to member explaining why he or she is unable to edit his signature anymore. This message will be displayed to member in his control panel.")}),
-                         ('signature_ban_reason_admin', {'label': _("Forum Team-visible reason for lock"), 'help_text': _("You can leave message to other forum team members exmplaining why this member's signature has been locked.")}),
-                         ],
-                        ],
-                       ]
-
         # Roles list
         # Roles list
         if self.request.user.is_god():
         if self.request.user.is_god():
             self.add_field('roles', forms.ModelMultipleChoiceField(label=_("User Roles"),
             self.add_field('roles', forms.ModelMultipleChoiceField(label=_("User Roles"),

+ 3 - 3
misago/apps/admin/widgets.py

@@ -1,11 +1,11 @@
 import math
 import math
-import floppyforms as forms
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.http import Http404
 from django.http import Http404
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from django.template import RequestContext
 from django.template import RequestContext
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from jinja2 import TemplateNotFound
 from jinja2 import TemplateNotFound
 from misago.forms import Form
 from misago.forms import Form
 from misago.messages import Message
 from misago.messages import Message
@@ -347,7 +347,7 @@ class ListWidget(BaseWidget):
             else:
             else:
                 list_form = ListForm(request=request)
                 list_form = ListForm(request=request)
 
 
-        # Little hax to keep counters correct 
+        # Little hax to keep counters correct
         items_shown = len(items)
         items_shown = len(items)
         if items_total < items_shown:
         if items_total < items_shown:
             items_total = items_shown
             items_total = items_shown
@@ -515,6 +515,6 @@ class ButtonWidget(BaseWidget):
         """
         """
         Action to be executed when button is pressed
         Action to be executed when button is pressed
         Define custom one in your Admin action.
         Define custom one in your Admin action.
-        It should return response and message objects 
+        It should return response and message objects
         """
         """
         pass
         pass

+ 1 - 1
misago/apps/privatethreads/forms.py

@@ -1,5 +1,5 @@
-import floppyforms as forms
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.apps.threadtype.posting.forms import (NewThreadForm as NewThreadBaseForm,
 from misago.apps.threadtype.posting.forms import (NewThreadForm as NewThreadBaseForm,
                                                   EditThreadForm as EditThreadBaseForm,
                                                   EditThreadForm as EditThreadBaseForm,
                                                   NewReplyForm as NewReplyBaseForm,
                                                   NewReplyForm as NewReplyBaseForm,

+ 66 - 66
misago/apps/register/forms.py

@@ -1,67 +1,67 @@
-import floppyforms as forms
-from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from misago.conf import settings
-from misago.forms import Form, QACaptchaField, ReCaptchaField, ForumTOS
-from misago.models import User
-from misago.utils.timezones import tzlist
-from misago.validators import validate_username, validate_password, validate_email
-
-class UserRegisterForm(Form):
-    username = forms.CharField(label=_('Username'),
-                               help_text=_("Your displayed username. Between %(min)s and %(max)s characters, only letters and digits are allowed.") % {'min': settings.username_length_min, 'max': settings.username_length_max},
-                               max_length=15)
-    email = forms.EmailField(label=_('E-mail address'),
-                             help_text=_("Working e-mail inbox is required to maintain control over your forum account."),
-                             max_length=255)
-    email_rep = forms.EmailField(max_length=255)
-    password = forms.CharField(label=_('Password'),
-                               help_text=_("Password you will be using to sign in to your account. Make sure it's strong."),
-                               max_length=255,widget=forms.PasswordInput)
-    password_rep = forms.CharField(max_length=255,widget=forms.PasswordInput)
-    captcha_qa = QACaptchaField()
-    recaptcha = ReCaptchaField()
-    accept_tos = forms.BooleanField(label=_("Forum Terms of Service"),
-                                    required=True, widget=ForumTOS,
-                                    error_messages={'required': _("Acceptation of board ToS is mandatory for membership.")})
-    
-    validate_repeats = (('email', 'email_rep'), ('password', 'password_rep'))
-    repeats_errors = [{
-                       'different': _("Entered addresses do not match."), 
-                       },
-                      {
-                       'different': _("Entered passwords do not match."),
-                       }]
-      
-    def finalize_form(self):        
-        if not settings.tos_url and not settings.tos_content:
-            del self.fields['accept_tos']
-        
-    def clean_username(self):
-        validate_username(self.cleaned_data['username'])
-        new_user = User.objects.get_blank_user()
-        new_user.set_username(self.cleaned_data['username'])
-        try:
-            new_user.full_clean()
-        except ValidationError as e:
-            new_user.is_username_valid(e)
-        return self.cleaned_data['username']
-        
-    def clean_email(self):
-        new_user = User.objects.get_blank_user()
-        new_user.set_email(self.cleaned_data['email'])
-        try:
-            new_user.full_clean()
-        except ValidationError as e:
-            new_user.is_email_valid(e)
-        return self.cleaned_data['email']
-        
-    def clean_password(self):
-        validate_password(self.cleaned_data['password'])
-        new_user = User.objects.get_blank_user()
-        new_user.set_password(self.cleaned_data['password'])
-        try:
-            new_user.full_clean()
-        except ValidationError as e:
-            new_user.is_password_valid(e)
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.conf import settings
+from misago.forms import Form, QACaptchaField, ReCaptchaField, ForumTOS
+from misago.models import User
+from misago.utils.timezones import tzlist
+from misago.validators import validate_username, validate_password, validate_email
+
+class UserRegisterForm(Form):
+    username = forms.CharField(label=_('Username'),
+                               help_text=_("Your displayed username. Between %(min)s and %(max)s characters, only letters and digits are allowed.") % {'min': settings.username_length_min, 'max': settings.username_length_max},
+                               max_length=15)
+    email = forms.EmailField(label=_('E-mail address'),
+                             help_text=_("Working e-mail inbox is required to maintain control over your forum account."),
+                             max_length=255)
+    email_rep = forms.EmailField(max_length=255)
+    password = forms.CharField(label=_('Password'),
+                               help_text=_("Password you will be using to sign in to your account. Make sure it's strong."),
+                               max_length=255,widget=forms.PasswordInput)
+    password_rep = forms.CharField(max_length=255,widget=forms.PasswordInput)
+    captcha_qa = QACaptchaField()
+    recaptcha = ReCaptchaField()
+    accept_tos = forms.BooleanField(label=_("Forum Terms of Service"),
+                                    required=True, widget=ForumTOS,
+                                    error_messages={'required': _("Acceptation of board ToS is mandatory for membership.")})
+
+    validate_repeats = (('email', 'email_rep'), ('password', 'password_rep'))
+    repeats_errors = [{
+                       'different': _("Entered addresses do not match."),
+                       },
+                      {
+                       'different': _("Entered passwords do not match."),
+                       }]
+
+    def finalize_form(self):
+        if not settings.tos_url and not settings.tos_content:
+            del self.fields['accept_tos']
+
+    def clean_username(self):
+        validate_username(self.cleaned_data['username'])
+        new_user = User.objects.get_blank_user()
+        new_user.set_username(self.cleaned_data['username'])
+        try:
+            new_user.full_clean()
+        except ValidationError as e:
+            new_user.is_username_valid(e)
+        return self.cleaned_data['username']
+
+    def clean_email(self):
+        new_user = User.objects.get_blank_user()
+        new_user.set_email(self.cleaned_data['email'])
+        try:
+            new_user.full_clean()
+        except ValidationError as e:
+            new_user.is_email_valid(e)
+        return self.cleaned_data['email']
+
+    def clean_password(self):
+        validate_password(self.cleaned_data['password'])
+        new_user = User.objects.get_blank_user()
+        new_user.set_password(self.cleaned_data['password'])
+        try:
+            new_user.full_clean()
+        except ValidationError as e:
+            new_user.is_password_valid(e)
         return self.cleaned_data['password']
         return self.cleaned_data['password']

+ 1 - 1
misago/apps/reports/forms.py

@@ -1,5 +1,5 @@
-import floppyforms as forms
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.apps.threadtype.posting.forms import (EditThreadForm as EditThreadBaseForm,
 from misago.apps.threadtype.posting.forms import (EditThreadForm as EditThreadBaseForm,
                                                   NewReplyForm as NewReplyBaseForm,
                                                   NewReplyForm as NewReplyBaseForm,
                                                   EditReplyForm as EditReplyBaseForm)
                                                   EditReplyForm as EditReplyBaseForm)

+ 22 - 22
misago/apps/resetpswd/forms.py

@@ -1,23 +1,23 @@
-import hashlib
-import floppyforms as forms
-from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from misago.forms import Form, QACaptchaField, ReCaptchaField
-from misago.models import User
-    
-class UserResetPasswordForm(Form):
-    email = forms.EmailField(label=_("Your E-mail Address"),
-                             help_text=_("Enter email address password reset confirmation e-mail will be sent to. It must be valid e-mail you used to register on forums."),
-                             max_length=255)
-    captcha_qa = QACaptchaField()
-    recaptcha = ReCaptchaField()
-    error_source = 'email'
-        
-    def clean_email(self):
-        try:
-            email = self.cleaned_data['email'].lower()
-            email_hash = hashlib.md5(email).hexdigest()
-            self.found_user = User.objects.get(email_hash=email_hash)
-        except User.DoesNotExist:
-            raise ValidationError(_("There is no user with such e-mail address."))
+import hashlib
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.forms import Form, QACaptchaField, ReCaptchaField
+from misago.models import User
+
+class UserResetPasswordForm(Form):
+    email = forms.EmailField(label=_("Your E-mail Address"),
+                             help_text=_("Enter email address password reset confirmation e-mail will be sent to. It must be valid e-mail you used to register on forums."),
+                             max_length=255)
+    captcha_qa = QACaptchaField()
+    recaptcha = ReCaptchaField()
+    error_source = 'email'
+
+    def clean_email(self):
+        try:
+            email = self.cleaned_data['email'].lower()
+            email_hash = hashlib.md5(email).hexdigest()
+            self.found_user = User.objects.get(email_hash=email_hash)
+        except User.DoesNotExist:
+            raise ValidationError(_("There is no user with such e-mail address."))
         return email
         return email

+ 2 - 2
misago/apps/search/forms.py

@@ -1,6 +1,6 @@
-import floppyforms as forms
 from django.utils import timezone
 from django.utils import timezone
 from django.utils.translation import ungettext_lazy, ugettext_lazy as _
 from django.utils.translation import ungettext_lazy, ugettext_lazy as _
+import floppyforms as forms
 from misago.forms import Form
 from misago.forms import Form
 
 
 class QuickSearchForm(Form):
 class QuickSearchForm(Form):
@@ -57,7 +57,7 @@ class QuickSearchForm(Form):
     def check_flood_guest(self):
     def check_flood_guest(self):
         if not self.request.session.matched:
         if not self.request.session.matched:
             raise forms.ValidationError(_("Search requires enabled cookies in order to work."))
             raise forms.ValidationError(_("Search requires enabled cookies in order to work."))
-        
+
         if self.request.session.get('last_search'):
         if self.request.session.get('last_search'):
             diff = timezone.now() - self.request.session.get('last_search')
             diff = timezone.now() - self.request.session.get('last_search')
             diff = diff.seconds + (diff.days * 86400)
             diff = diff.seconds + (diff.days * 86400)

+ 15 - 15
misago/apps/signin/forms.py

@@ -1,15 +1,15 @@
-import floppyforms as forms
-from django.utils.translation import ugettext_lazy as _
-from misago.forms import Form
-
-class SignInForm(Form):
-    user_email = forms.EmailField(max_length=255, label=_("Your email"))
-    user_password = forms.CharField(widget=forms.PasswordInput, max_length=255, label=_("Your password"))
-    user_remember_me = forms.BooleanField(label=_("Stay Signed In"), help_text=_("Sign me In automatically next time"), required=False)
-
-    def __init__(self, *args, **kwargs):
-        show_remember_me = kwargs.pop('show_remember_me')
-
-        super(SignInForm, self).__init__(*args, **kwargs)
-        if not show_remember_me:
-            del self.fields['user_remember_me']
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.forms import Form
+
+class SignInForm(Form):
+    user_email = forms.EmailField(max_length=255, label=_("Your email"))
+    user_password = forms.CharField(widget=forms.PasswordInput, max_length=255, label=_("Your password"))
+    user_remember_me = forms.BooleanField(label=_("Stay Signed In"), help_text=_("Sign me In automatically next time"), required=False)
+
+    def __init__(self, *args, **kwargs):
+        show_remember_me = kwargs.pop('show_remember_me')
+
+        super(SignInForm, self).__init__(*args, **kwargs)
+        if not show_remember_me:
+            del self.fields['user_remember_me']

+ 1 - 1
misago/apps/threadtype/list/forms.py

@@ -1,5 +1,5 @@
-import floppyforms as forms
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.conf import settings
 from misago.conf import settings
 from misago.forms import Form, ForumChoiceField
 from misago.forms import Form, ForumChoiceField
 from misago.models import Forum
 from misago.models import Forum

+ 1 - 1
misago/apps/threadtype/list/views.py

@@ -1,9 +1,9 @@
-import floppyforms as forms
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.forms import ValidationError
 from django.forms import ValidationError
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from django.template import RequestContext
 from django.template import RequestContext
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
+import floppyforms as forms
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.apps.errors import error403, error404
 from misago.apps.errors import error403, error404
 from misago.forms import Form
 from misago.forms import Form

+ 1 - 1
misago/apps/threadtype/mixins.py

@@ -1,6 +1,6 @@
-import floppyforms as forms
 from django.utils import timezone
 from django.utils import timezone
 from django.utils.translation import ungettext_lazy, ugettext_lazy as _
 from django.utils.translation import ungettext_lazy, ugettext_lazy as _
+import floppyforms as forms
 from misago.conf import settings
 from misago.conf import settings
 from misago.utils.strings import slugify
 from misago.utils.strings import slugify
 
 

+ 1 - 1
misago/apps/threadtype/posting/forms.py

@@ -1,6 +1,6 @@
-import floppyforms as forms
 from django.utils import timezone
 from django.utils import timezone
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.apps.threadtype.mixins import (FloodProtectionMixin,
 from misago.apps.threadtype.mixins import (FloodProtectionMixin,
                                            ValidateThreadNameMixin,
                                            ValidateThreadNameMixin,
                                            ValidatePostLengthMixin)
                                            ValidatePostLengthMixin)

+ 1 - 1
misago/apps/threadtype/thread/moderation/forms.py

@@ -1,6 +1,6 @@
-import floppyforms as forms
 from django.http import Http404
 from django.http import Http404
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.conf import settings
 from misago.conf import settings
 from misago.forms import Form, ForumChoiceField
 from misago.forms import Form, ForumChoiceField

+ 1 - 1
misago/apps/threadtype/thread/moderation/posts.py

@@ -1,9 +1,9 @@
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
-import floppyforms as forms
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from django.template import RequestContext
 from django.template import RequestContext
 from django.utils import timezone
 from django.utils import timezone
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
+import floppyforms as forms
 from misago.markdown import post_markdown
 from misago.markdown import post_markdown
 from misago.messages import Message
 from misago.messages import Message
 from misago.shortcuts import render_to_response
 from misago.shortcuts import render_to_response

+ 3 - 3
misago/apps/threadtype/thread/views.py

@@ -1,4 +1,3 @@
-import floppyforms as forms
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.forms import ValidationError
 from django.forms import ValidationError
 from django.http import Http404
 from django.http import Http404
@@ -6,6 +5,7 @@ from django.shortcuts import redirect
 from django.template import RequestContext
 from django.template import RequestContext
 from django.utils import timezone
 from django.utils import timezone
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
+import floppyforms as forms
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.acl.exceptions import ACLError403, ACLError404
 from misago.apps.errors import error403, error404
 from misago.apps.errors import error403, error404
 from misago.conf import settings
 from misago.conf import settings
@@ -40,7 +40,7 @@ class ThreadBaseView(ViewBase):
     def fetch_posts(self):
     def fetch_posts(self):
         self.count = self.request.acl.threads.filter_posts(self.request, self.thread, Post.objects.filter(thread=self.thread)).count()
         self.count = self.request.acl.threads.filter_posts(self.request, self.thread, Post.objects.filter(thread=self.thread)).count()
         self.posts = self.request.acl.threads.filter_posts(self.request, self.thread, Post.objects.filter(thread=self.thread)).prefetch_related('user', 'user__rank')
         self.posts = self.request.acl.threads.filter_posts(self.request, self.thread, Post.objects.filter(thread=self.thread)).prefetch_related('user', 'user__rank')
-        
+
         self.posts = self.posts.order_by('id')
         self.posts = self.posts.order_by('id')
 
 
         try:
         try:
@@ -147,7 +147,7 @@ class ThreadBaseView(ViewBase):
             return
             return
         form_fields['list_items'] = forms.MultipleChoiceField(choices=list_choices, widget=forms.CheckboxSelectMultiple)
         form_fields['list_items'] = forms.MultipleChoiceField(choices=list_choices, widget=forms.CheckboxSelectMultiple)
         self.posts_form = type('PostsViewForm', (Form,), form_fields)
         self.posts_form = type('PostsViewForm', (Form,), form_fields)
-    
+
     def handle_posts_form(self):
     def handle_posts_form(self):
         if self.request.method == 'POST' and self.request.POST.get('origin') == 'posts_form':
         if self.request.method == 'POST' and self.request.POST.get('origin') == 'posts_form':
             self.posts_form = self.posts_form(self.request.POST, request=self.request)
             self.posts_form = self.posts_form(self.request.POST, request=self.request)

+ 25 - 25
misago/apps/usercp/avatar/forms.py

@@ -1,25 +1,25 @@
-from PIL import Image
-import floppyforms as forms
-from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from misago.conf import settings
-from misago.forms import Form
-
-class UploadAvatarForm(Form):
-    avatar_upload = forms.ImageField(label= _("Upload Image File"),
-                                     help_text= _("Select image file on your computer you wish to use as forum avatar. You will be able to crop image after upload. Animations will be stripped."),
-                                     error_messages={'invalid_image': _("Uploaded file is not correct image.")})
-    error_source = 'avatar_upload'
-
-    def clean_avatar_upload(self):
-        image = self.cleaned_data.get('avatar_upload', False)
-        if image:
-            if image._size > settings.upload_limit * 1024:
-                if settings.upload_limit > 1024:
-                    limit = '%s Mb' % "{:10.2f}".format(float(settings.upload_limit / 1024.0))
-                else:
-                    limit = '%s Kb' % settings.upload_limit
-                raise ValidationError(_("Avatar image cannot be larger than %(limit)s.") % {'limit': limit})
-        else:
-            raise ValidationError(_("Couldn't read uploaded image"))
-        return image
+from PIL import Image
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.conf import settings
+from misago.forms import Form
+
+class UploadAvatarForm(Form):
+    avatar_upload = forms.ImageField(label= _("Upload Image File"),
+                                     help_text= _("Select image file on your computer you wish to use as forum avatar. You will be able to crop image after upload. Animations will be stripped."),
+                                     error_messages={'invalid_image': _("Uploaded file is not correct image.")})
+    error_source = 'avatar_upload'
+
+    def clean_avatar_upload(self):
+        image = self.cleaned_data.get('avatar_upload', False)
+        if image:
+            if image._size > settings.upload_limit * 1024:
+                if settings.upload_limit > 1024:
+                    limit = '%s Mb' % "{:10.2f}".format(float(settings.upload_limit / 1024.0))
+                else:
+                    limit = '%s Kb' % settings.upload_limit
+                raise ValidationError(_("Avatar image cannot be larger than %(limit)s.") % {'limit': limit})
+        else:
+            raise ValidationError(_("Couldn't read uploaded image"))
+        return image

+ 47 - 47
misago/apps/usercp/credentials/forms.py

@@ -1,47 +1,47 @@
-import hashlib
-import floppyforms as forms
-from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from misago.forms import Form
-from misago.models import User
-from misago.validators import validate_password, validate_email
-
-class CredentialsChangeForm(Form):
-    new_email = forms.EmailField(label=_('New E-mail'),
-                                 help_text=_("Enter new e-mail address or leave this field empty if you want only to change your password."),
-                                 max_length=255, required=False)
-    new_password = forms.CharField(label=_('New Password'),
-                                   help_text=_("Enter new password or leave this empty if you only want to change your e-mail address."),
-                                   max_length=255, widget=forms.PasswordInput, required=False)
-    current_password = forms.CharField(label= _('Current Password'),
-                                       help_text=_("Confirm changes by entering your current password."),
-                                       max_length=255, widget=forms.PasswordInput)
-
-    def clean_new_email(self):
-        if self.cleaned_data['new_email']:
-            new_hash = hashlib.md5(self.cleaned_data['new_email'].lower()).hexdigest()
-            if new_hash == self.request.user.email_hash:
-                raise ValidationError(_("New e-mail is same as your current e-mail."))
-            try:
-                User.objects.get(email_hash=new_hash)
-                raise ValidationError(_("New e-mail address is already in use by other member."))
-            except User.DoesNotExist:
-                pass
-            validate_email(self.cleaned_data['new_email'])
-        return self.cleaned_data['new_email'].lower()
-
-    def clean_new_password(self):
-        if self.cleaned_data['new_password']:
-            validate_password(self.cleaned_data['new_password'])
-        return self.cleaned_data['new_password']
-
-    def clean_current_password(self):
-        if not self.request.user.check_password(self.cleaned_data['current_password']):
-            raise ValidationError(_("You have entered wrong password."))
-        return ''
-
-    def clean(self):
-        cleaned_data = super(CredentialsChangeForm, self).clean()
-        if not cleaned_data['new_email'] and not cleaned_data['new_password']:
-            raise ValidationError(_("You have to enter either new e-mail address or new password."))
-        return cleaned_data
+import hashlib
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.forms import Form
+from misago.models import User
+from misago.validators import validate_password, validate_email
+
+class CredentialsChangeForm(Form):
+    new_email = forms.EmailField(label=_('New E-mail'),
+                                 help_text=_("Enter new e-mail address or leave this field empty if you want only to change your password."),
+                                 max_length=255, required=False)
+    new_password = forms.CharField(label=_('New Password'),
+                                   help_text=_("Enter new password or leave this empty if you only want to change your e-mail address."),
+                                   max_length=255, widget=forms.PasswordInput, required=False)
+    current_password = forms.CharField(label= _('Current Password'),
+                                       help_text=_("Confirm changes by entering your current password."),
+                                       max_length=255, widget=forms.PasswordInput)
+
+    def clean_new_email(self):
+        if self.cleaned_data['new_email']:
+            new_hash = hashlib.md5(self.cleaned_data['new_email'].lower()).hexdigest()
+            if new_hash == self.request.user.email_hash:
+                raise ValidationError(_("New e-mail is same as your current e-mail."))
+            try:
+                User.objects.get(email_hash=new_hash)
+                raise ValidationError(_("New e-mail address is already in use by other member."))
+            except User.DoesNotExist:
+                pass
+            validate_email(self.cleaned_data['new_email'])
+        return self.cleaned_data['new_email'].lower()
+
+    def clean_new_password(self):
+        if self.cleaned_data['new_password']:
+            validate_password(self.cleaned_data['new_password'])
+        return self.cleaned_data['new_password']
+
+    def clean_current_password(self):
+        if not self.request.user.check_password(self.cleaned_data['current_password']):
+            raise ValidationError(_("You have entered wrong password."))
+        return ''
+
+    def clean(self):
+        cleaned_data = super(CredentialsChangeForm, self).clean()
+        if not cleaned_data['new_email'] and not cleaned_data['new_password']:
+            raise ValidationError(_("You have to enter either new e-mail address or new password."))
+        return cleaned_data

+ 39 - 39
misago/apps/usercp/options/forms.py

@@ -1,39 +1,39 @@
-import floppyforms as forms
-from django.utils.translation import ugettext_lazy as _
-from misago.forms import Form
-from misago.utils.timezones import tzlist
-
-class UserForumOptionsForm(Form):
-    newsletters = forms.BooleanField(label=_("Newsletters"),
-                                     help_text=_("On occasion board administrator may want to send e-mail message to multiple members."),
-                                     required=False)
-    timezone = forms.ChoiceField(label=_("Your Current Timezone"),
-                                 help_text=_("If dates and hours displayed by forums are inaccurate, you can fix it by adjusting timezone setting."),
-                                 choices=tzlist())
-    hide_activity = forms.TypedChoiceField(label=_("Your Visibility"),
-                                           help_text=_("If you want to, you can limit other members ability to track your presence on forums."),
-                                           choices=(
-                                                    (0, _("Show my presence to everyone")),
-                                                    (1, _("Show my presence to people I follow")),
-                                                    (2, _("Show my presence to nobody")),
-                                                    ), coerce=int)
-    subscribe_start = forms.TypedChoiceField(label=_("Threads I start"),
-                                             choices=(
-                                                      (0, _("Don't watch")),
-                                                      (1, _("Put on watched threads list")),
-                                                      (2, _("Put on watched threads list and e-mail me when somebody replies")),
-                                                      ), coerce=int)
-    subscribe_reply = forms.TypedChoiceField(label=_("Threads I reply to"),
-                                             choices=(
-                                                      (0, _("Don't watch")),
-                                                      (1, _("Put on watched threads list")),
-                                                      (2, _("Put on watched threads list and e-mail me when somebody replies")),
-                                                      ), coerce=int)
-    allow_pds = forms.TypedChoiceField(label=_("Allow Private Threads Invitations"),
-                                       help_text=_("If you wish, you can restrict who can invite you to private threads. Keep in mind some groups or members may be allowed to override this preference."),
-                                       choices=(
-                                                (0, _("From everyone")),
-                                                (1, _("From everyone but not members I ignore")),
-                                                (2, _("From members I follow")),
-                                                (2, _("From nobody")),
-                                                ), coerce=int)
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.forms import Form
+from misago.utils.timezones import tzlist
+
+class UserForumOptionsForm(Form):
+    newsletters = forms.BooleanField(label=_("Newsletters"),
+                                     help_text=_("On occasion board administrator may want to send e-mail message to multiple members."),
+                                     required=False)
+    timezone = forms.ChoiceField(label=_("Your Current Timezone"),
+                                 help_text=_("If dates and hours displayed by forums are inaccurate, you can fix it by adjusting timezone setting."),
+                                 choices=tzlist())
+    hide_activity = forms.TypedChoiceField(label=_("Your Visibility"),
+                                           help_text=_("If you want to, you can limit other members ability to track your presence on forums."),
+                                           choices=(
+                                                    (0, _("Show my presence to everyone")),
+                                                    (1, _("Show my presence to people I follow")),
+                                                    (2, _("Show my presence to nobody")),
+                                                    ), coerce=int)
+    subscribe_start = forms.TypedChoiceField(label=_("Threads I start"),
+                                             choices=(
+                                                      (0, _("Don't watch")),
+                                                      (1, _("Put on watched threads list")),
+                                                      (2, _("Put on watched threads list and e-mail me when somebody replies")),
+                                                      ), coerce=int)
+    subscribe_reply = forms.TypedChoiceField(label=_("Threads I reply to"),
+                                             choices=(
+                                                      (0, _("Don't watch")),
+                                                      (1, _("Put on watched threads list")),
+                                                      (2, _("Put on watched threads list and e-mail me when somebody replies")),
+                                                      ), coerce=int)
+    allow_pds = forms.TypedChoiceField(label=_("Allow Private Threads Invitations"),
+                                       help_text=_("If you wish, you can restrict who can invite you to private threads. Keep in mind some groups or members may be allowed to override this preference."),
+                                       choices=(
+                                                (0, _("From everyone")),
+                                                (1, _("From everyone but not members I ignore")),
+                                                (2, _("From members I follow")),
+                                                (2, _("From nobody")),
+                                                ), coerce=int)

+ 6 - 6
misago/apps/usercp/signature/forms.py

@@ -1,6 +1,6 @@
-import floppyforms as forms
-from django.utils.translation import ugettext_lazy as _
-from misago.forms import Form
-
-class SignatureForm(Form):
-    signature = forms.CharField(widget=forms.Textarea, required=False)
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.forms import Form
+
+class SignatureForm(Form):
+    signature = forms.CharField(widget=forms.Textarea, required=False)

+ 24 - 24
misago/apps/usercp/username/forms.py

@@ -1,24 +1,24 @@
-import floppyforms as forms
-from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from misago.forms import Form
-from misago.validators import validate_username
-
-class UsernameChangeForm(Form):
-    username = forms.CharField(label=_("Change Username to"),
-                               help_text=_("Enter new desired username."),
-                               max_length=255)
-    error_source = 'username'
-
-    def clean_username(self):
-        org_username = self.request.user.username
-        if org_username == self.cleaned_data['username']:
-            raise ValidationError(_("Your new username is same as current one."))
-        validate_username(self.cleaned_data['username'])
-        self.request.user.set_username(self.cleaned_data['username'])
-        try:
-            self.request.user.full_clean()
-        except ValidationError as e:
-            self.request.user.is_username_valid(e)
-            self.request.user.set_username(org_username)
-        return self.cleaned_data['username']
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
+from misago.forms import Form
+from misago.validators import validate_username
+
+class UsernameChangeForm(Form):
+    username = forms.CharField(label=_("Change Username to"),
+                               help_text=_("Enter new desired username."),
+                               max_length=255)
+    error_source = 'username'
+
+    def clean_username(self):
+        org_username = self.request.user.username
+        if org_username == self.cleaned_data['username']:
+            raise ValidationError(_("Your new username is same as current one."))
+        validate_username(self.cleaned_data['username'])
+        self.request.user.set_username(self.cleaned_data['username'])
+        try:
+            self.request.user.full_clean()
+        except ValidationError as e:
+            self.request.user.is_username_valid(e)
+            self.request.user.set_username(org_username)
+        return self.cleaned_data['username']

+ 3 - 3
misago/forms/forms.py

@@ -1,7 +1,7 @@
-from django.forms.forms import BoundField
 from recaptcha.client.captcha import submit as recaptcha_submit
 from recaptcha.client.captcha import submit as recaptcha_submit
-import floppyforms as forms
+from django.forms.forms import BoundField
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.conf import settings
 from misago.conf import settings
 
 
 class Form(forms.Form):
 class Form(forms.Form):
@@ -167,7 +167,7 @@ class Form(forms.Form):
                 field_error, self.errors[self.error_source] = self.errors[self.error_source][0], []
                 field_error, self.errors[self.error_source] = self.errors[self.error_source][0], []
                 raise forms.ValidationError(field_error)
                 raise forms.ValidationError(field_error)
             raise forms.ValidationError(_("Form contains errors."))
             raise forms.ValidationError(_("Form contains errors."))
-        
+
     def empty_errors(self):
     def empty_errors(self):
         for i in self.errors:
         for i in self.errors:
             self.errors[i] = []
             self.errors[i] = []

+ 16 - 16
misago/forms/widgets.py

@@ -1,16 +1,16 @@
-import floppyforms as forms
-from recaptcha.client.captcha import displayhtml
-from misago.conf import settings
-
-class ReCaptchaWidget(forms.TextInput):
-    def render(self):
-        return displayhtml(settings.recaptcha_public,
-                           settings.recaptcha_ssl)
-
-
-class YesNoSwitch(forms.CheckboxInput):
-    pass
-
-
-class ForumTOS(forms.CheckboxInput):
-    pass
+from recaptcha.client.captcha import displayhtml
+import floppyforms as forms
+from misago.conf import settings
+
+class ReCaptchaWidget(forms.TextInput):
+    def render(self):
+        return displayhtml(settings.recaptcha_public,
+                           settings.recaptcha_ssl)
+
+
+class YesNoSwitch(forms.CheckboxInput):
+    pass
+
+
+class ForumTOS(forms.CheckboxInput):
+    pass

+ 2 - 2
misago/models/settingmodel.py

@@ -1,8 +1,8 @@
 import base64
 import base64
-import floppyforms as forms
 from django.core import validators
 from django.core import validators
 from django.db import models
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
+import floppyforms as forms
 from misago.utils.timezones import tzlist
 from misago.utils.timezones import tzlist
 try:
 try:
     import cPickle as pickle
     import cPickle as pickle
@@ -58,7 +58,7 @@ class Setting(models.Model):
 
 
     def get_field(self):
     def get_field(self):
         from misago.forms import YesNoSwitch
         from misago.forms import YesNoSwitch
-        
+
         extra = self.get_extra()
         extra = self.get_extra()
 
 
         # Set validators
         # Set validators