from django import forms
from django.utils.translation import ugettext as _
-from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, PasswordResetForm
+from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, \
+ PasswordResetForm, PasswordChangeForm
from django.core.mail import send_mail
from django.contrib.auth.tokens import default_token_generator
from django.template import Context, loader
except Invitation.DoesNotExist:
pass
return username
+
+class ExtendedPasswordChangeForm(PasswordChangeForm):
+ """
+ Extends PasswordChangeForm by enabling user
+ to optionally renew also the token.
+ """
+ renew = forms.BooleanField(label='Renew token', required=False)
+
+ def __init__(self, user, *args, **kwargs):
+ super(ExtendedPasswordChangeForm, self).__init__(user, *args, **kwargs)
+ print self.fields.keyOrder
+
+ def save(self, commit=True):
+ user = super(ExtendedPasswordChangeForm, self).save(commit=False)
+ if self.cleaned_data.get('renew'):
+ user.renew_token()
+ if commit:
+ user.save()
+ return user
\ No newline at end of file
from django.conf.urls.defaults import patterns, include, url
from django.contrib.auth.views import password_change
-from astakos.im.forms import ExtendedPasswordResetForm, LoginForm
+from astakos.im.forms import ExtendedPasswordResetForm, ExtendedPasswordChangeForm, LoginForm
from astakos.im.settings import IM_MODULES, INVITATIONS_ENABLED, EMAILCHANGE_ENABLED
urlpatterns = patterns('astakos.im.views',
url(r'^local/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/?$',
'password_reset_confirm'),
url(r'^local/password/reset/complete/?$', 'password_reset_complete'),
- url(r'^password_change/?$', 'password_change', {'post_change_redirect':'profile'})
+ url(r'^password_change/?$', 'password_change', {'post_change_redirect':'profile',
+ 'password_change_form':ExtendedPasswordChangeForm})
)
if INVITATIONS_ENABLED:
@signed_terms_required
def change_password(request):
- return password_change(request, post_change_redirect=reverse('astakos.im.views.edit_profile'))
+ return password_change(request,
+ post_change_redirect=reverse('astakos.im.views.edit_profile'),
+ password_change_form=ExtendedPasswordChangeForm)
@transaction.commit_manually
def change_email(request, activation_key=None,