summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demo/settings.py2
-rw-r--r--demo/urls.py7
-rw-r--r--gstudio/forms.py100
-rw-r--r--gstudio/regbackend.py115
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', (), {})