from django.utils.translation import ugettext as _
from django.utils.safestring import mark_safe
from forum import settings
-from django.http import str_to_unicode
from forum.models import User
-from forum_modules.recaptcha.formfield import ReCaptchaField
+from forum.modules import call_all_handlers
import urllib
+import logging
-DEFAULT_NEXT = '/' + getattr(settings, 'FORUM_SCRIPT_ALIAS')
+DEFAULT_NEXT = getattr(settings, 'APP_BASE_URL')
def clean_next(next):
if next is None:
return DEFAULT_NEXT
- next = str_to_unicode(urllib.unquote(next), 'utf-8')
+ next = urllib.unquote(next)
+ if not isinstance(next, unicode):
+ next = unicode(next, 'utf-8')
next = next.strip()
if next.startswith('/'):
return next
return clean_next(value)
login_form_widget_attrs = { 'class': 'required login' }
-username_re = re.compile(r'^[\w\s ]+$', re.UNICODE)
+username_re = re.compile(r'^[\-\w\s ]+$', re.UNICODE)
class UserNameField(StrippedNonEmptyCharField):
def __init__(self,db_model=User, db_field='username', must_exist=False,skip_clean=False,label=_('choose a username'),**kw):
'forbidden':_('sorry, this name is not allowed, please choose another'),
'missing':_('sorry, there is no user with this name'),
'multiple-taken':_('sorry, we have a serious error - user name is taken by several users'),
- 'invalid':_('user name can only consist of letters, empty space and underscore'),
+ 'invalid':_('user name can only consist of letters, empty space, hyphens and underscore'),
'toshort':_('user name is to short, please use at least %d characters') % settings.MIN_USERNAME_LENGTH
}
if 'error_messages' in kw:
else:
return email
+class UserRealNameField(StrippedNonEmptyCharField):
+ def __init__(self, db_model=User, db_field='real_name', must_exist=True, skip_clean=False, label=_('Your real name'),**kw):
+ self.must_exist = must_exist
+ self.skip_clean = skip_clean
+ self.db_model = db_model
+ self.db_field = db_field
+ error_messages={'required':_('Real name is required')
+ }
+ if 'error_messages' in kw:
+ error_messages.update(kw['error_messages'])
+ del kw['error_messages']
+ super(UserRealNameField,self).__init__(max_length=100,
+ widget=forms.TextInput(attrs=login_form_widget_attrs),
+ label=label,
+ error_messages=error_messages,
+ **kw
+ )
+
+ def clean(self, real_name):
+ if self.skip_clean == True:
+ return real_name
+ try:
+ return super(UserRealNameField, self).clean(real_name)
+ except forms.ValidationError:
+ raise forms.ValidationError(self.error_messages['required'])
+
class SetPasswordForm(forms.Form):
password1 = forms.CharField(widget=forms.PasswordInput(attrs=login_form_widget_attrs),
label=_('choose password'),
return self.cleaned_data['password2']
class SimpleCaptchaForm(forms.Form):
- captcha = ReCaptchaField()
+ fields = {}
+
+ def __init__(self, *args, **kwargs):
+ super(SimpleCaptchaForm, self).__init__(*args, **kwargs)
+
+ spam_fields = call_all_handlers('create_anti_spam_field')
+ if spam_fields:
+ spam_fields = dict(spam_fields)
+ for name, field in spam_fields.items():
+ self.fields[name] = field
+
+ self._anti_spam_fields = spam_fields.keys()
+ else:
+ self._anti_spam_fields = []