From c550d62c7e6ef27635b31a8217819e0a966932a8 Mon Sep 17 00:00:00 2001 From: Yasin Date: Thu, 5 Sep 2013 11:55:51 +0200 Subject: [PATCH] models.py:Affiliation field removed. NOTE: DB MIGRATION or FLUSH needed --- portal/models.py | 475 +++++++++++++------------- portal/templates/register_4m_f4f.html | 5 +- portal/views.py | 12 +- 3 files changed, 247 insertions(+), 245 deletions(-) diff --git a/portal/models.py b/portal/models.py index 9a414ba5..06cfa547 100644 --- a/portal/models.py +++ b/portal/models.py @@ -56,255 +56,256 @@ class Institution(models.Model): # code borrowed from django-registration # https://bitbucket.org/ubernostrum/django-registration/ -class RegistrationManager(models.Manager): - """ - Custom manager for the ``RegistrationProfile`` model. - - The methods defined here provide shortcuts for account creation - and activation (including generation and emailing of activation - keys), and for cleaning out expired inactive accounts. - - """ - def activate_user(self, activation_key): - """ - Validate an activation key and activate the corresponding - ``User`` if valid. - - If the key is valid and has not expired, return the ``User`` - after activating. - - If the key is not valid or has expired, return ``False``. - - If the key is valid but the ``User`` is already active, - return ``False``. - - To prevent reactivation of an account which has been - deactivated by site administrators, the activation key is - reset to the string constant ``RegistrationProfile.ACTIVATED`` - after successful activation. - - """ - # Make sure the key we're trying conforms to the pattern of a - # SHA1 hash; if it doesn't, no point trying to look it up in - # the database. - if SHA1_RE.search(activation_key): - try: - profile = self.get(activation_key=activation_key) - except self.model.DoesNotExist: - return False - if not profile.activation_key_expired(): - user = profile.user - user.is_active = True - user.save() - profile.activation_key = self.model.ACTIVATED - profile.save() - return user - return False - - def create_user(self, first_name, last_name, email, password): - pending_user = self.create(first_name=first_name, last_name=last_name, email=email, password=password) - return pending_user - - def create_inactive_user(self, first_name, last_name, email, password, site, - send_email=True): - """ - Create a new, inactive ``User``, generate a - ``RegistrationProfile`` and email its activation key to the - ``User``, returning the new ``User``. - - By default, an activation email will be sent to the new - user. To disable this, pass ``send_email=False``. - - """ - salt = hashlib.sha1(str(random.random())).hexdigest()[:5] - if isinstance(email, unicode): - email = email.encode('utf-8') - activation_key = hashlib.sha1(salt+email).hexdigest() - - new_user = PendingUser.objects.create_user(first_name, last_name, email, password) - new_user.is_active = False - new_user.activation_key=activation_key - new_user.save() - - # We might not need this - #registration_profile = self.create_profile(new_user) - - if send_email: - new_user.send_activation_email(site) - #registration_profile.send_activation_email(site) - - return new_user - create_inactive_user = transaction.commit_on_success(create_inactive_user) - - def create_profile(self, user): - """ - Create a ``RegistrationProfile`` for a given - ``User``, and return the ``RegistrationProfile``. - - The activation key for the ``RegistrationProfile`` will be a - SHA1 hash, generated from a combination of the ``User``'s - username and a random salt. - - """ - salt = hashlib.sha1(str(random.random())).hexdigest()[:5] - username = user.username - if isinstance(username, unicode): - username = username.encode('utf-8') - activation_key = hashlib.sha1(salt+username).hexdigest() - return self.create(user=user, - activation_key=activation_key) - - def delete_expired_users(self): - """ - Remove expired instances of ``RegistrationProfile`` and their - associated ``User``s. - - Accounts to be deleted are identified by searching for - instances of ``RegistrationProfile`` with expired activation - keys, and then checking to see if their associated ``User`` - instances have the field ``is_active`` set to ``False``; any - ``User`` who is both inactive and has an expired activation - key will be deleted. - - It is recommended that this method be executed regularly as - part of your routine site maintenance; this application - provides a custom management command which will call this - method, accessible as ``manage.py cleanupregistration``. - - Regularly clearing out accounts which have never been - activated serves two useful purposes: - - 1. It alleviates the ocasional need to reset a - ``RegistrationProfile`` and/or re-send an activation email - when a user does not receive or does not act upon the - initial activation email; since the account will be - deleted, the user will be able to simply re-register and - receive a new activation key. - - 2. It prevents the possibility of a malicious user registering - one or more accounts and never activating them (thus - denying the use of those usernames to anyone else); since - those accounts will be deleted, the usernames will become - available for use again. - - If you have a troublesome ``User`` and wish to disable their - account while keeping it in the database, simply delete the - associated ``RegistrationProfile``; an inactive ``User`` which - does not have an associated ``RegistrationProfile`` will not - be deleted. - - """ - for profile in self.all(): - try: - if profile.activation_key_expired(): - user = profile.user - if not user.is_active: - user.delete() - profile.delete() - except User.DoesNotExist: - profile.delete() - +#DEPRECATED +#class RegistrationManager(models.Manager): +# """ +# Custom manager for the ``RegistrationProfile`` model. +# +# The methods defined here provide shortcuts for account creation +# and activation (including generation and emailing of activation +# keys), and for cleaning out expired inactive accounts. +# +# """ +# def activate_user(self, activation_key): +# """ +# Validate an activation key and activate the corresponding +# ``User`` if valid. +# +# If the key is valid and has not expired, return the ``User`` +# after activating. +# +# If the key is not valid or has expired, return ``False``. +# +# If the key is valid but the ``User`` is already active, +# return ``False``. +# +# To prevent reactivation of an account which has been +# deactivated by site administrators, the activation key is +# reset to the string constant ``RegistrationProfile.ACTIVATED`` +# after successful activation. +# +# """ +# # Make sure the key we're trying conforms to the pattern of a +# # SHA1 hash; if it doesn't, no point trying to look it up in +# # the database. +# if SHA1_RE.search(activation_key): +# try: +# profile = self.get(activation_key=activation_key) +# except self.model.DoesNotExist: +# return False +# if not profile.activation_key_expired(): +# user = profile.user +# user.is_active = True +# user.save() +# profile.activation_key = self.model.ACTIVATED +# profile.save() +# return user +# return False +# +# def create_user(self, first_name, last_name, email, password): +# pending_user = self.create(first_name=first_name, last_name=last_name, email=email, password=password) +# return pending_user +# +# def create_inactive_user(self, first_name, last_name, email, password, site, +# send_email=True): +# """ +# Create a new, inactive ``User``, generate a +# ``RegistrationProfile`` and email its activation key to the +# ``User``, returning the new ``User``. +# +# By default, an activation email will be sent to the new +# user. To disable this, pass ``send_email=False``. +# +# """ +# salt = hashlib.sha1(str(random.random())).hexdigest()[:5] +# if isinstance(email, unicode): +# email = email.encode('utf-8') +# activation_key = hashlib.sha1(salt+email).hexdigest() +# +# new_user = PendingUser.objects.create_user(first_name, last_name, email, password) +# new_user.is_active = False +# new_user.activation_key=activation_key +# new_user.save() +# +# # We might not need this +# #registration_profile = self.create_profile(new_user) +# +# if send_email: +# new_user.send_activation_email(site) +# #registration_profile.send_activation_email(site) +# +# return new_user +# create_inactive_user = transaction.commit_on_success(create_inactive_user) +# +# def create_profile(self, user): +# """ +# Create a ``RegistrationProfile`` for a given +# ``User``, and return the ``RegistrationProfile``. +# +# The activation key for the ``RegistrationProfile`` will be a +# SHA1 hash, generated from a combination of the ``User``'s +# username and a random salt. +# +# """ +# salt = hashlib.sha1(str(random.random())).hexdigest()[:5] +# username = user.username +# if isinstance(username, unicode): +# username = username.encode('utf-8') +# activation_key = hashlib.sha1(salt+username).hexdigest() +# return self.create(user=user, +# activation_key=activation_key) +# +# def delete_expired_users(self): +# """ +# Remove expired instances of ``RegistrationProfile`` and their +# associated ``User``s. +# +# Accounts to be deleted are identified by searching for +# instances of ``RegistrationProfile`` with expired activation +# keys, and then checking to see if their associated ``User`` +# instances have the field ``is_active`` set to ``False``; any +# ``User`` who is both inactive and has an expired activation +# key will be deleted. +# +# It is recommended that this method be executed regularly as +# part of your routine site maintenance; this application +# provides a custom management command which will call this +# method, accessible as ``manage.py cleanupregistration``. +# +# Regularly clearing out accounts which have never been +# activated serves two useful purposes: +# +# 1. It alleviates the ocasional need to reset a +# ``RegistrationProfile`` and/or re-send an activation email +# when a user does not receive or does not act upon the +# initial activation email; since the account will be +# deleted, the user will be able to simply re-register and +# receive a new activation key. +# +# 2. It prevents the possibility of a malicious user registering +# one or more accounts and never activating them (thus +# denying the use of those usernames to anyone else); since +# those accounts will be deleted, the usernames will become +# available for use again. +# +# If you have a troublesome ``User`` and wish to disable their +# account while keeping it in the database, simply delete the +# associated ``RegistrationProfile``; an inactive ``User`` which +# does not have an associated ``RegistrationProfile`` will not +# be deleted. +# +# """ +# for profile in self.all(): +# try: +# if profile.activation_key_expired(): +# user = profile.user +# if not user.is_active: +# user.delete() +# profile.delete() +# except User.DoesNotExist: +# profile.delete() +#DEPRECATED class PendingUser(models.Model): # NOTE We might consider migrating the fields to CharField, which would # simplify form creation in forms.py first_name = models.TextField() last_name = models.TextField() - affiliation = models.TextField() +# affiliation = models.TextField() email = models.EmailField() #validators=[validate_email]) password = models.TextField() keypair = models.TextField() # institution authority_hrn = models.TextField() # models.ForeignKey(Institution) - - objects = RegistrationManager() - - class Meta: - verbose_name = _('registration profile') - verbose_name_plural = _('registration profiles') - - def __unicode__(self): - return u"Registration information for %s" % self.email - - def activation_key_expired(self): - """ - Determine whether this ``RegistrationProfile``'s activation - key has expired, returning a boolean -- ``True`` if the key - has expired. - - Key expiration is determined by a two-step process: - - 1. If the user has already activated, the key will have been - reset to the string constant ``ACTIVATED``. Re-activating - is not permitted, and so this method returns ``True`` in - this case. - - 2. Otherwise, the date the user signed up is incremented by - the number of days specified in the setting - ``ACCOUNT_ACTIVATION_DAYS`` (which should be the number of - days after signup during which a user is allowed to - activate their account); if the result is less than or - equal to the current date, the key has expired and this - method returns ``True``. - - """ - expiration_date = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS) - return self.activation_key == self.ACTIVATED or \ - (self.user.date_joined + expiration_date <= datetime_now()) - activation_key_expired.boolean = True - - def send_activation_email(self, site): - """ - Send an activation email to the user associated with this - ``RegistrationProfile``. - - The activation email will make use of two templates: - - ``user_register_email_subject.txt`` - This template will be used for the subject line of the - email. Because it is used as the subject line of an email, - this template's output **must** be only a single line of - text; output longer than one line will be forcibly joined - into only a single line. - - ``user_register_email.txt`` - This template will be used for the body of the email. - - These templates will each receive the following context - variables: - - ``activation_key`` - The activation key for the new account. - - ``expiration_days`` - The number of days remaining during which the account may - be activated. - - ``site`` - An object representing the site on which the user - registered; depending on whether ``django.contrib.sites`` - is installed, this may be an instance of either - ``django.contrib.sites.models.Site`` (if the sites - application is installed) or - ``django.contrib.sites.models.RequestSite`` (if - not). Consult the documentation for the Django sites - framework for details regarding these objects' interfaces. - - """ - ctx_dict = {'activation_key': self.activation_key, - 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, - 'site': site} - subject = render_to_string('user_register_email_subject.txt', - ctx_dict) - # Email subject *must not* contain newlines - subject = ''.join(subject.splitlines()) - - message = render_to_string('user_register_email.txt', - ctx_dict) - - send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [self.email]) - +#DEPRECATED +# objects = RegistrationManager() +# +# class Meta: +# verbose_name = _('registration profile') +# verbose_name_plural = _('registration profiles') +# +# def __unicode__(self): +# return u"Registration information for %s" % self.email +# +# def activation_key_expired(self): +# """ +# Determine whether this ``RegistrationProfile``'s activation +# key has expired, returning a boolean -- ``True`` if the key +# has expired. +# +# Key expiration is determined by a two-step process: +# +# 1. If the user has already activated, the key will have been +# reset to the string constant ``ACTIVATED``. Re-activating +# is not permitted, and so this method returns ``True`` in +# this case. +# +# 2. Otherwise, the date the user signed up is incremented by +# the number of days specified in the setting +# ``ACCOUNT_ACTIVATION_DAYS`` (which should be the number of +# days after signup during which a user is allowed to +# activate their account); if the result is less than or +# equal to the current date, the key has expired and this +# method returns ``True``. +# +# """ +# expiration_date = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS) +# return self.activation_key == self.ACTIVATED or \ +# (self.user.date_joined + expiration_date <= datetime_now()) +# activation_key_expired.boolean = True +# +# def send_activation_email(self, site): +# """ +# Send an activation email to the user associated with this +# ``RegistrationProfile``. +# +# The activation email will make use of two templates: +# +# ``user_register_email_subject.txt`` +# This template will be used for the subject line of the +# email. Because it is used as the subject line of an email, +# this template's output **must** be only a single line of +# text; output longer than one line will be forcibly joined +# into only a single line. +# +# ``user_register_email.txt`` +# This template will be used for the body of the email. +# +# These templates will each receive the following context +# variables: +# +# ``activation_key`` +# The activation key for the new account. +# +# ``expiration_days`` +# The number of days remaining during which the account may +# be activated. +# +# ``site`` +# An object representing the site on which the user +# registered; depending on whether ``django.contrib.sites`` +# is installed, this may be an instance of either +# ``django.contrib.sites.models.Site`` (if the sites +# application is installed) or +# ``django.contrib.sites.models.RequestSite`` (if +# not). Consult the documentation for the Django sites +# framework for details regarding these objects' interfaces. +# +# """ +# ctx_dict = {'activation_key': self.activation_key, +# 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, +# 'site': site} +# subject = render_to_string('user_register_email_subject.txt', +# ctx_dict) +# # Email subject *must not* contain newlines +# subject = ''.join(subject.splitlines()) +# +# message = render_to_string('user_register_email.txt', +# ctx_dict) +# +# send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [self.email]) +#DEPRECATED diff --git a/portal/templates/register_4m_f4f.html b/portal/templates/register_4m_f4f.html index 46fe09e5..f40b831a 100644 --- a/portal/templates/register_4m_f4f.html +++ b/portal/templates/register_4m_f4f.html @@ -39,13 +39,14 @@

Enter your last name

-
+