diff options
-rw-r--r-- | demo/settings.py | 2 | ||||
-rw-r--r-- | demo/urls.py | 7 | ||||
-rw-r--r-- | gstudio/forms.py | 100 | ||||
-rw-r--r-- | gstudio/regbackend.py | 115 |
4 files changed, 224 insertions, 0 deletions
diff --git a/demo/settings.py b/demo/settings.py index f184257f..a325258b 100644 --- a/demo/settings.py +++ b/demo/settings.py @@ -178,6 +178,8 @@ INSTALLED_APPS = ( ) +if DEBUG: + EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' from gstudio.xmlrpc import GSTUDIO_XMLRPC_METHODS diff --git a/demo/urls.py b/demo/urls.py index fba068c2..ee0bd7f8 100644 --- a/demo/urls.py +++ b/demo/urls.py @@ -75,6 +75,10 @@ from gstudio.sitemaps import MetatypeSitemap from gstudio.sitemaps import AuthorSitemap from objectapp.sitemaps import GbobjectSitemap +# import gstudio.regbackend +from gstudio.forms import * +from registration.views import register + admin.autodiscover() @@ -96,7 +100,10 @@ urlpatterns = patterns( url(r'^objects/admin/', include(admin.site.urls)), url(r'^nodetypes/admin/', include(admin.site.urls)), url(r'^grappelli/', include('grappelli.urls')), + url(r'^accounts/register/$', register, {'backend': 'gstudio.regbackend.MyBackend','form_class': UserRegistrationForm}, name='registration_register'), + url(r'^accounts/', include('registration.urls')), + url(r'^$', 'django.views.generic.simple.redirect_to', { 'template': 'index.html' }, 'index'), ) diff --git a/gstudio/forms.py b/gstudio/forms.py new file mode 100644 index 00000000..eee5ec17 --- /dev/null +++ b/gstudio/forms.py @@ -0,0 +1,100 @@ +# Copyright (c) 2011, 2012 Free Software Foundation + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + + +from gstudio.models import * +from django.forms import ModelForm +from django.forms import * +from django.contrib.admin import widgets +from registration.forms import * + +class UserRegistrationForm(RegistrationForm): + first_name = forms.CharField() + last_name = forms.CharField() + +class MetatypeForm(ModelForm): + + class Meta: + model = Metatype + +class ObjecttypeForm(ModelForm): + + + + + + + class Meta: + model = Objecttype + fields = ('title', 'altnames','plural','parent','slug','metatypes','tags', + 'status','content','prior_nodes','posterior_nodes','password','login_required','sites') + +class AttributetypeForm(ModelForm): + + class Meta: + model = Attributetype + fields =('title','altnames','subjecttype','applicable_nodetypes','dataType', + 'slug','status','content','prior_nodes','posterior_nodes','password','login_required','sites') + +class RelationtypeForm(ModelForm): + + class Meta: + model = Relationtype + fields =('title','altnames','slug','inverse','left_subjecttype','left_applicable_nodetypes','right_subjecttype', + 'right_applicable_nodetypes','content','prior_nodes','posterior_nodes','sites') +class SystemtypeForm(ModelForm): + + class Meta: + model =Systemtype + fields =('title','altnames','content','parent','slug','status','nodetype_set','relationtype_set','attributetype_set','metatype_set','processtype_set', + 'prior_nodes','posterior_nodes','sites') + + +class ProcesstypeForm(ModelForm): + + class Meta: + model =Processtype + fields =('title','altnames','content','parent','slug','status','changing_attributetype_set','changing_relationtype_set', + 'prior_nodes','posterior_nodes','sites') + + +class RelationForm(ModelForm): + class Meta: + model = Relation + +class AttributeForm(ModelForm): + def __init__(self, *args, **kwargs): + super(AttributeForm, self).__init__(*args, **kwargs) + self.fields['last_update'].widget = widgets.AdminSplitDateTime() + self.fields['creation_date'].widget = widgets.AdminSplitDateTime() + + class Meta: + model = Attribute + + +class ComplementForm(ModelForm): + class Meta: + model = Complement + +class UnionForm(ModelForm): + class Meta: + model = Union + +class IntersectionForm(ModelForm): + class Meta: + model = Intersection + + diff --git a/gstudio/regbackend.py b/gstudio/regbackend.py new file mode 100644 index 00000000..d7ed5661 --- /dev/null +++ b/gstudio/regbackend.py @@ -0,0 +1,115 @@ +from django.conf import settings +from django.contrib.sites.models import RequestSite +from django.contrib.sites.models import Site +from django.contrib.auth.models import User,Group + +from registration import signals +from registration.forms import RegistrationForm +from registration.models import RegistrationProfile +from django.contrib.auth.models import Group +from gstudio.models import * + + +class MyBackend(object): + def register(self, request, **kwargs): + """ + Given a username, email address and password, register a new + user account, which will initially be inactive. + + Along with the new ``User`` object, a new + ``registration.models.RegistrationProfile`` will be created, + tied to that ``User``, containing the activation key which + will be used for this account. + + An email will be sent to the supplied email address; this + email should contain an activation link. The email will be + rendered using two templates. See the documentation for + ``RegistrationProfile.send_activation_email()`` for + information about these templates and the contexts provided to + them. + + After the ``User`` and ``RegistrationProfile`` are created and + the activation email is sent, the signal + ``registration.signals.user_registered`` will be sent, with + the new ``User`` as the keyword argument ``user`` and the + class of this backend as the sender. + + """ + username, email, password, first_name, last_name = kwargs['username'], kwargs['email'], kwargs['password1'], kwargs['first_name'], kwargs['last_name'] + if Site._meta.installed: + site = Site.objects.get_current() + else: + site = RequestSite(request) + new_user = RegistrationProfile.objects.create_inactive_user(username,email,password,site) + + + signals.user_registered.send(sender=self.__class__, + user=new_user, + request=request) + user = User.objects.get(username=username) + user.first_name=kwargs['first_name'] + user.last_name=kwargs['last_name'] + + user.is_staff = True + # Add new user to 'non admin' group + nonadmin = Group.objects.get(name = 'non_admin_user') + user.groups.add(nonadmin) + user.save() + + return new_user + + def activate(self, request, activation_key): + """ + Given an an activation key, look up and activate the user + account corresponding to that key (if possible). + + After successful activation, the signal + ``registration.signals.user_activated`` will be sent, with the + newly activated ``User`` as the keyword argument ``user`` and + the class of this backend as the sender. + + """ + activated = RegistrationProfile.objects.activate_user(activation_key) + if activated: + signals.user_activated.send(sender=self.__class__, + user=activated, + request=request) + return activated + + def registration_allowed(self, request): + """ + Indicate whether account registration is currently permitted, + based on the value of the setting ``REGISTRATION_OPEN``. This + is determined as follows: + + * If ``REGISTRATION_OPEN`` is not specified in settings, or is + set to ``True``, registration is permitted. + + * If ``REGISTRATION_OPEN`` is both specified and set to + ``False``, registration is not permitted. + + """ + return getattr(settings, 'REGISTRATION_OPEN', True) + + def get_form_class(self, request): + """ + Return the default form class used for user registration. + + """ + return RegistrationForm + + def post_registration_redirect(self, request, user): + """ + Return the name of the URL to redirect to after successful + user registration. + + """ + return ('registration_complete', (), {}) + + def post_activation_redirect(self, request, user): + """ + Return the name of the URL to redirect to after successful + account activation. + + """ + return ('registration_activation_complete', (), {}) |