src/cm/views/user.py
changeset 0 40c8f766c9b8
child 38 be1807d390d4
equal deleted inserted replaced
-1:000000000000 0:40c8f766c9b8
       
     1 from django.forms.models import inlineformset_factory
       
     2 from cm.models import *
       
     3 from cm.message import *
       
     4 from django.contrib.auth import authenticate
       
     5 from django.contrib.auth import login as django_login  
       
     6 from django.forms import ModelForm
       
     7 from django.contrib.auth.models import User
       
     8 from django.forms.formsets import formset_factory
       
     9 from django.shortcuts import render_to_response
       
    10 from django.template import RequestContext
       
    11 from django.utils.translation import ugettext as _, ugettext_lazy, ungettext
       
    12 from django.http import HttpResponse, HttpResponseRedirect, Http404
       
    13 from django.forms.util import ErrorList
       
    14 from django.shortcuts import get_object_or_404
       
    15 from cm.activity import register_activity
       
    16 from cm.views import get_text_by_keys_or_404
       
    17 from cm.message import display_message
       
    18 from cm.utils import get_among, get_int
       
    19 from cm.models import ApplicationConfiguration
       
    20 from django.views.generic.list_detail import object_list
       
    21 from django.contrib.auth.decorators import login_required
       
    22 from cm.views import get_keys_from_dict
       
    23 from cm.security import has_global_perm
       
    24 from cm.exception import UnauthorizedException
       
    25 import sys
       
    26 import re
       
    27 
       
    28 USER_PAGINATION = 10
       
    29 
       
    30 @has_global_perm('can_manage_workspace')
       
    31 def user_list(request):    
       
    32     display_suspended_users = get_int(request.GET, 'display', 0)
       
    33     paginate_by = get_int(request.GET, 'paginate', USER_PAGINATION)
       
    34     order_by = get_among(request.GET, 'order', ('user__username',
       
    35                                               'user__email',
       
    36                                               '-user__username',
       
    37                                               '-user__email',
       
    38                                               'role__name',
       
    39                                               '-role__name',
       
    40                                               'user__date_joined',
       
    41                                               '-user__date_joined',
       
    42                                               ),
       
    43                           'user__username')
       
    44     
       
    45     UserRole.objects.create_userroles_text(None)
       
    46     
       
    47     if request.method == 'POST':
       
    48         # bulk apply
       
    49         if 'apply' in request.POST:
       
    50             action = request.POST.get('action', None)
       
    51             user_profile_keys = get_keys_from_dict(request.POST, 'check-').keys()
       
    52             if action == 'disable':
       
    53                 for user_profile_key in user_profile_keys:
       
    54                     profile = UserProfile.objects.get(key=user_profile_key)
       
    55                     if profile != request.user.get_profile():
       
    56                         profile.is_suspended = True
       
    57                         profile.save()             
       
    58                 display_message(request, _(u"%(count)i User's access suspended") % {'count':len(user_profile_keys)})
       
    59 
       
    60             if action == 'enable':
       
    61                 for user_profile_key in user_profile_keys:
       
    62                     profile = UserProfile.objects.get(key=user_profile_key)
       
    63                     profile.is_suspended = False
       
    64                     profile.save()             
       
    65                 display_message(request, _(u"%(count)i User's access enabled") % {'count':len(user_profile_keys)})
       
    66             
       
    67             ROLE_RE = re.compile('role_(\d*)')
       
    68             match = ROLE_RE.match(action)
       
    69               
       
    70             if match:
       
    71                 role_id = match.group(1)
       
    72                 for user_profile_key in user_profile_keys:
       
    73                     user_role = UserRole.objects.get(user__userprofile__key=user_profile_key, text=None)
       
    74                     user_role.role_id = role_id
       
    75                     user_role.save()
       
    76                 display_message(request, _(u"%(count)i user(s) role modified") % {'count':len(user_profile_keys)})
       
    77                 
       
    78             return HttpResponseRedirect(reverse('user'))
       
    79         
       
    80         if 'save' in request.POST:
       
    81             user_profile_keys_roles = get_keys_from_dict(request.POST, 'user-role-')
       
    82             count = 0
       
    83             for user_profile_key in user_profile_keys_roles:
       
    84                 role_id = user_profile_keys_roles[user_profile_key]
       
    85                 if not user_profile_key:
       
    86                     user_role = UserRole.objects.get(user=None, text=None)
       
    87                 else:                    
       
    88                     user_role = UserRole.objects.get(user__userprofile__key=user_profile_key, text=None)
       
    89                 if (role_id != u'' or user_role.role_id != None) and role_id != unicode(user_role.role_id):
       
    90                     if role_id:
       
    91                         user_role.role_id = int(role_id)
       
    92                     else:
       
    93                         user_role.role_id = None
       
    94                     user_role.save()
       
    95                     count += 1
       
    96             display_message(request, _(u"%(count)i user(s) role modified") % {'count':count})                
       
    97             return HttpResponseRedirect(reverse('user'))
       
    98     try:
       
    99         anon_role = UserRole.objects.get(user=None, text=None).role
       
   100     except UserRole.DoesNotExist:
       
   101         anon_role = None
       
   102         
       
   103     context = {
       
   104                'anon_role' : anon_role,
       
   105                'all_roles' : Role.objects.all(),
       
   106                'anon_roles' : Role.objects.filter(anon=True),
       
   107                'display_suspended_users' : display_suspended_users,
       
   108                }
       
   109     
       
   110     query = UserRole.objects.filter(text=None).filter(~Q(user=None)).order_by(order_by)
       
   111     if not display_suspended_users:
       
   112         query = query.exclude(Q(user__userprofile__is_suspended=True) & Q(user__is_active=True))
       
   113         
       
   114     return object_list(request, query,
       
   115                        template_name='site/user_list.html',
       
   116                        paginate_by=paginate_by,
       
   117                        extra_context=context,
       
   118                        )
       
   119 
       
   120 class UserForm(ModelForm):
       
   121     email = forms.EmailField(label=ugettext_lazy(u'E-mail address'), required=True)
       
   122     
       
   123     class Meta:
       
   124         model = User
       
   125         fields = ('email', 'first_name', 'last_name')
       
   126         
       
   127 
       
   128     def clean_email(self):
       
   129         """
       
   130         Validates that the supplied email is new to the site
       
   131         """
       
   132         if 'email' in self.cleaned_data:
       
   133             email = self.cleaned_data['email']
       
   134             try:
       
   135                 if self.instance:
       
   136                     user = User.objects.exclude(email__iexact=self.instance.email).get(email__iexact=email)
       
   137                 else:
       
   138                     user = User.objects.get(email__iexact=email)
       
   139             except User.DoesNotExist:
       
   140                 return email
       
   141             raise forms.ValidationError(_(u'This user is already a member.'))
       
   142         
       
   143 class MassUserForm(forms.Form):
       
   144     email = forms.CharField(label=ugettext_lazy(u'Emails'),
       
   145                            help_text=ugettext_lazy(u'Add multiples emails one per line (or separated by "," or ";")'),
       
   146                            widget=forms.Textarea,
       
   147                            required=True)
       
   148     
       
   149 class UserRoleForm(ModelForm):
       
   150     class Meta:
       
   151         model = UserRole
       
   152         fields = ('role',)
       
   153 
       
   154     def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
       
   155                  initial=None, error_class=ErrorList, label_suffix=':',
       
   156                  empty_permitted=False, instance=None):
       
   157         ModelForm.__init__(self, data, files, auto_id, prefix, initial, error_class, label_suffix, empty_permitted, instance)
       
   158 
       
   159         # override manually
       
   160         role_field = self.fields['role']
       
   161         #role_field.required = True
       
   162         role_field.label = _(u'Workspace level role')
       
   163         role_field.help_text = _(u'This role will apply to every text in the workspace. To share only a (few) texts with this user, you can leave this blank and delegate roles on texts once the user is created.')
       
   164         self.fields['role'] = role_field
       
   165         
       
   166 class UserRoleTextForm(ModelForm):
       
   167     class Meta:
       
   168         model = UserRole
       
   169         fields = ('role',)
       
   170 
       
   171     def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
       
   172                  initial=None, error_class=ErrorList, label_suffix=':',
       
   173                  empty_permitted=False, instance=None):
       
   174         ModelForm.__init__(self, data, files, auto_id, prefix, initial, error_class, label_suffix, empty_permitted, instance)
       
   175 
       
   176         # override manually
       
   177         role_field = self.fields['role']
       
   178         #role_field.required = True
       
   179         role_field.label = _(u'Text level role')
       
   180         role_field.help_text = _(u'This role will apply only to this text.')
       
   181         self.fields['role'] = role_field
       
   182         
       
   183 class UserProfileForm(ModelForm):
       
   184     class Meta:
       
   185         model = UserProfile
       
   186         fields = ('allow_contact', 'preferred_language', 'is_suspended')
       
   187 
       
   188 class MyUserProfileForm(ModelForm):
       
   189     class Meta:
       
   190         model = UserProfile
       
   191         fields = ('allow_contact', 'preferred_language')
       
   192 
       
   193 class UserProfileAddForm(ModelForm):
       
   194     class Meta:
       
   195         model = UserProfile
       
   196         fields = ('preferred_language',)
       
   197 
       
   198 class UserAddForm(forms.Form):
       
   199     note = forms.CharField(label=ugettext_lazy(u'Note'),
       
   200                            help_text=ugettext_lazy(u'Optional text to add to invitation email'),
       
   201                            widget=forms.Textarea,
       
   202                            required=False)
       
   203 
       
   204 
       
   205 SEPARATORS_RE = re.compile('[;,\n]+')
       
   206 
       
   207 @has_global_perm('can_manage_workspace')
       
   208 def user_mass_add(request, key=None):
       
   209     return user_add(request, key=key, mass=True)
       
   210 
       
   211 @has_global_perm('can_manage_workspace')
       
   212 def user_add(request, key=None, mass=False):
       
   213     text = get_text_by_keys_or_404(key) if key else None
       
   214     if request.method == 'POST':
       
   215         userform = UserForm(request.POST) if not mass else MassUserForm(request.POST)
       
   216         userroleform = UserRoleForm(request.POST)
       
   217         noteform = UserAddForm(request.POST)
       
   218         userprofileform = UserProfileAddForm(request.POST)
       
   219         localroleform = UserRoleTextForm(request.POST, prefix="local") if key else None
       
   220         if userform.is_valid() and userroleform.is_valid() and noteform.is_valid() and userprofileform.is_valid() and (not localroleform or localroleform.is_valid()):
       
   221             data = userform.cleaned_data
       
   222             data.update(userprofileform.cleaned_data)
       
   223             data.update(noteform.cleaned_data)
       
   224             emails = data['email']
       
   225             del data['email']
       
   226             email_created = set()
       
   227             for email in [s.strip() for s in SEPARATORS_RE.split(emails)]:
       
   228                 if email and not User.objects.filter(email__iexact=email) and email not in email_created:
       
   229                     user = UserProfile.objects.create_inactive_user(email, True, **data)
       
   230                     userrole = UserRole.objects.create(user=user, role=userroleform.cleaned_data['role'], text=None)
       
   231                     if key:
       
   232                         localuserrole = UserRole.objects.create(user=user, role=localroleform.cleaned_data['role'], text=text)
       
   233                     email_created.add(email)
       
   234                 register_activity(request, "user_created", user=user)
       
   235             display_message(request, ungettext(u'%(nb_users)d user added', u'%(nb_users)d users added', len(email_created)) % {'nb_users': len(email_created)})
       
   236             if key:
       
   237                 return HttpResponseRedirect(reverse('text-share', args=[text.key]))
       
   238             else:
       
   239                 return HttpResponseRedirect(reverse('user'))
       
   240     else:
       
   241         userform = UserForm() if not mass else MassUserForm()
       
   242         userroleform = UserRoleForm()
       
   243         userprofileform = UserProfileAddForm()
       
   244         noteform = UserAddForm()
       
   245         localroleform = UserRoleTextForm(prefix="local") if key else None
       
   246     
       
   247     if key:
       
   248         template = 'site/user_mass_add_text.html' if mass else 'site/user_add_text.html'
       
   249     else:
       
   250         template = 'site/user_mass_add.html' if mass else 'site/user_add.html'
       
   251 
       
   252     return render_to_response(template, {'forms' : [userform, userprofileform , userroleform, noteform, localroleform],
       
   253                                                                'save_name' : ungettext(u'Save user', u'Save users', 2 if mass else 1),
       
   254                                                                'mass' : mass,
       
   255                                                                'text' : text,
       
   256                                                                 }, context_instance=RequestContext(request))
       
   257 
       
   258 class UserValidateForm(ModelForm):
       
   259     email = forms.EmailField(label=ugettext_lazy(u'Email'), required=True)
       
   260     
       
   261     class Meta:
       
   262         model = User
       
   263         fields = ('email', 'username', 'first_name', 'last_name')
       
   264 
       
   265     def clean_username(self):
       
   266         """
       
   267         Validates that the supplied username is unique for the site.
       
   268         """
       
   269         if 'username' in self.cleaned_data:
       
   270             username = self.cleaned_data['username']
       
   271             try:
       
   272                 user = User.objects.get(username__exact=username)
       
   273             except User.DoesNotExist:
       
   274                 return username
       
   275             raise forms.ValidationError(_(u'This username is already in use. Please supply a different username.'))
       
   276         
       
   277 from django.contrib.auth.forms import SetPasswordForm
       
   278 
       
   279 def user_activate(request, key):
       
   280     try:
       
   281         profile = UserProfile.objects.get(adminkey=key)
       
   282         user = profile.user
       
   283         if not user.is_active:
       
   284             if request.method == 'POST':
       
   285                 userform = UserValidateForm(request.POST, instance=user)
       
   286                 pwform = SetPasswordForm(profile.user, request.POST)
       
   287                 if userform.is_valid() and pwform.is_valid():
       
   288                     userform.save()
       
   289                     pwform.save()
       
   290                     user.is_active = True
       
   291                     user.save()
       
   292                     # login
       
   293                     user.backend = 'django.contrib.auth.backends.ModelBackend'
       
   294                     django_login(request, user)
       
   295                     register_activity(request, "user_activated", user=user)
       
   296                     display_message(request, _(u"Your account has been activated. You're now logged-in."))
       
   297                     
       
   298                     return HttpResponseRedirect(reverse('index'))
       
   299             else:
       
   300                 user.username = ''
       
   301                 userform = UserValidateForm(instance=user)
       
   302                 pwform = SetPasswordForm(user)
       
   303             
       
   304             return render_to_response('site/activate.html', {
       
   305                                                                   'forms' : [userform, pwform],
       
   306                                                                   'title': _(u'Activate your account'),
       
   307                                                                   'save_name' : _(u'activate account'),
       
   308                                                                   }, context_instance=RequestContext(request))
       
   309         else:
       
   310             user.backend = 'django.contrib.auth.backends.ModelBackend'
       
   311             django_login(request, user)
       
   312             display_message(request, _(u"Your account has been activated. You're now logged-in."))
       
   313             
       
   314             return HttpResponseRedirect(reverse('index'))
       
   315                         
       
   316     except UserProfile.DoesNotExist:
       
   317         raise UnauthorizedException('No profile')
       
   318 
       
   319 #@has_global_perm('can_manage_workspace')
       
   320 #def user_delete(request, key):
       
   321 #    try:
       
   322 #        if request.method == 'POST':
       
   323 #            profile = UserProfile.objects.get(key=key)
       
   324 #            profile.delete()
       
   325 #            display_message(request, "User %s has been deleted." %(profile.simple_print()))
       
   326 #            return HttpResponse('') # no redirect because this is called by js
       
   327 #    except UserProfile.DoesNotExist:
       
   328 #        raise UnauthorizedException('No profile')
       
   329 
       
   330 @has_global_perm('can_manage_workspace')
       
   331 def user_suspend(request, key):
       
   332     if request.method == 'POST':
       
   333         profile = get_object_or_404(UserProfile, key=key)
       
   334         profile = UserProfile.objects.get(key=key)
       
   335         profile.is_suspended = True
       
   336         profile.save()
       
   337         if profile.user.is_active:            
       
   338             display_message(request, _(u"User's access %(prof)s has been suspended.") % {'prof':profile.simple_print()})
       
   339             register_activity(request, "user_suspended", user=profile.user)
       
   340         else:
       
   341             # make use active but disabled
       
   342             profile.user.is_active = True 
       
   343             profile.user.save()
       
   344             display_message(request, _(u"User's access %(prof)s has been refused.") % {'prof':profile.simple_print()})
       
   345             register_activity(request, "user_refused", user=profile.user)                
       
   346         return HttpResponse('') # no redirect because this is called by js
       
   347     raise UnauthorizedException('')
       
   348     
       
   349 @has_global_perm('can_manage_workspace')
       
   350 def user_enable(request, key):
       
   351     if request.method == 'POST':
       
   352         profile = get_object_or_404(UserProfile, key=key)
       
   353         profile = UserProfile.objects.get(key=key)
       
   354         profile.is_suspended = False
       
   355         profile.save()
       
   356         if profile.user.is_active:
       
   357             display_message(request, _(u"User's access %(prof)s has been restored.") % {'prof':profile.simple_print()})
       
   358             register_activity(request, "user_enabled", user=profile.user)
       
   359         else: # new member approval
       
   360             profile.send_activation_email()
       
   361             display_message(request, _(u"User's access %(prof)s has been approved.") % {'prof':profile.simple_print()})
       
   362             register_activity(request, "user_approved", user=profile.user)                
       
   363         return HttpResponse('') # no redirect because this is called by js
       
   364     raise UnauthorizedException('')
       
   365     
       
   366 def user_send_invitation(request, key):
       
   367     if request.method == 'POST':
       
   368         profile = get_object_or_404(UserProfile, key=key)
       
   369         profile.send_invitation_email()
       
   370         
       
   371         display_message(request, _(u"A new invitation has been sent to user %(prof)s.") % {'prof':profile.simple_print()})
       
   372         return HttpResponse('') # no redirect because this is called by js
       
   373     raise UnauthorizedException('')
       
   374 
       
   375 @login_required()
       
   376 def profile(request):
       
   377     user = request.user
       
   378     profile = user.get_profile()
       
   379     if request.method == 'POST':
       
   380         userform = UserForm(request.POST, instance=user)
       
   381         userprofileform = MyUserProfileForm(request.POST, instance=profile)
       
   382         if userform.is_valid() and userprofileform.is_valid():
       
   383             userform.save()
       
   384             userprofileform.save()
       
   385             display_message(request, _(u'Profile updated'))
       
   386             return HttpResponseRedirect(reverse('index'))
       
   387     else:
       
   388         userform = UserForm(instance=user)
       
   389         userprofileform = MyUserProfileForm(instance=profile)
       
   390     
       
   391     return render_to_response('site/profile.html', {'forms' : [userform, userprofileform],
       
   392                                                                'title' : 'Profile',
       
   393                                                                 }, context_instance=RequestContext(request))
       
   394 
       
   395 class AnonUserRoleForm(UserRoleForm):
       
   396     def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
       
   397                  initial=None, error_class=ErrorList, label_suffix=':',
       
   398                  empty_permitted=False, instance=None):
       
   399         ModelForm.__init__(self, data, files, auto_id, prefix, initial, error_class, label_suffix, empty_permitted, instance)
       
   400 
       
   401         # override manually
       
   402         role_field = self.fields['role']
       
   403         role_field.required = False
       
   404         role_field.choices = [(u'', u'---------')] + [(r.id, str(r)) for r in Role.objects.filter(anon=True)] # limit anon choices
       
   405         for c in role_field.choices:
       
   406             print c
       
   407         
       
   408         self.fields['role'] = role_field
       
   409 
       
   410 @has_global_perm('can_manage_workspace')    
       
   411 def user_anon_edit(request):
       
   412     userrole, created = UserRole.objects.get_or_create(user=None, text=None)
       
   413     if request.method == 'POST':
       
   414         userroleform = AnonUserRoleForm(request.POST, instance=userrole)
       
   415         if userroleform.is_valid():
       
   416             userroleform.save()
       
   417             display_message(request, _(u'Anonymous user role modified.'))
       
   418             return HttpResponseRedirect(reverse('user'))
       
   419     else:
       
   420         userroleform = AnonUserRoleForm(instance=userrole)
       
   421     
       
   422     return render_to_response('site/user_edit.html', {'form' : userroleform,
       
   423                                                                'title' : 'Edit anonymous user',
       
   424                                                                 }, context_instance=RequestContext(request))
       
   425 
       
   426 @has_global_perm('can_manage_workspace')    
       
   427 def user_edit(request, key):
       
   428     profile = UserProfile.objects.get(key=key)
       
   429     user = profile.user
       
   430     userrole = profile.global_userrole()
       
   431     if request.method == 'POST':
       
   432         userform = UserForm(request.POST, instance=user)
       
   433         userprofileform = UserProfileForm(request.POST, instance=profile)
       
   434         userroleform = UserRoleForm(request.POST, instance=userrole)
       
   435         if userform.is_valid() and userroleform.is_valid() and userprofileform.is_valid():
       
   436             userform.save()
       
   437             userroleform.save()
       
   438             userprofileform.save()
       
   439             display_message(request, _(u'User modified'))
       
   440             return HttpResponseRedirect(reverse('user'))
       
   441     else:
       
   442         userform = UserForm(instance=user)
       
   443         userprofileform = UserProfileForm(instance=profile)
       
   444         userroleform = UserRoleForm(instance=userrole)
       
   445     
       
   446     return render_to_response('site/user_edit.html', {'forms' : [userform , userprofileform, userroleform],
       
   447                                                                'title' : 'Edit user',
       
   448                                                                'user_edit' : user,
       
   449                                                                 }, context_instance=RequestContext(request))
       
   450 
       
   451 # user contact form (for logged-in users only
       
   452 
       
   453 class UserContactForm(forms.Form):
       
   454     subject = forms.CharField(label=ugettext_lazy(u'Subject'),
       
   455                            help_text=ugettext_lazy(u'Subject of the email'),
       
   456                            required=True)
       
   457 
       
   458     body = forms.CharField(label=ugettext_lazy(u'Body'),
       
   459                            help_text=ugettext_lazy(u'Body of the email'),
       
   460                            widget=forms.Textarea,
       
   461                            required=True)
       
   462 
       
   463 @login_required
       
   464 def user_contact(request, key):
       
   465     recipient_profile = UserProfile.objects.get(key=key)
       
   466 
       
   467     if request.method == 'POST':
       
   468         contact_form = UserContactForm(request.POST)
       
   469         if contact_form.is_valid():
       
   470             data = contact_form.cleaned_data
       
   471             message = render_to_string('email/user_contact_email.txt',
       
   472                                        { 
       
   473                                          'body' : data['body'],
       
   474                                          'CONF': ApplicationConfiguration
       
   475                                           })
       
   476         
       
   477             send_mail(data['subject'], message, request.user.email, [recipient_profile.user.email])
       
   478             
       
   479             display_message(request, _(u'Email sent.'))
       
   480             return HttpResponseRedirect(reverse('index'))
       
   481     else:
       
   482         contact_form = UserContactForm()
       
   483     
       
   484     return render_to_response('site/user_contact.html', {'form' : contact_form,
       
   485                                                          'save_name' : 'send',
       
   486                                                                 }, context_instance=RequestContext(request))
       
   487 
       
   488 
       
   489 from django.contrib.auth.forms import AuthenticationForm
       
   490 
       
   491 def cm_login(request, user):
       
   492     # make sure user has a profile
       
   493     try:
       
   494         user.get_profile()
       
   495     except UserProfile.DoesNotExist :
       
   496         UserProfile.objects.create(user=user)
       
   497         
       
   498     if user.get_profile().is_suspended:
       
   499         display_message(request, _(u"This account is suspended, contact the workspace administrator."))
       
   500         return HttpResponseRedirect(reverse('index'))
       
   501                 
       
   502     user.backend = 'django.contrib.auth.backends.ModelBackend'
       
   503     django_login(request, user)
       
   504     
       
   505     display_message(request, _(u"You're logged in!"))
       
   506     next = request.POST.get('next', None)
       
   507     if next and next.startswith('/'):
       
   508         return HttpResponseRedirect(next)
       
   509     else:
       
   510         return HttpResponseRedirect(reverse('index'))
       
   511 
       
   512 def login(request): 
       
   513     request.session.set_test_cookie()
       
   514     
       
   515     if request.method == 'POST':
       
   516         form = AuthenticationForm(request, request.POST)
       
   517         if form.is_valid():
       
   518             user = form.get_user()
       
   519             
       
   520             return cm_login(request, user)            
       
   521     else:    
       
   522         form = AuthenticationForm()        
       
   523     
       
   524     return render_to_response('site/login.html', {'form':form}, context_instance=RequestContext(request))
       
   525 
       
   526 from django.contrib.auth import logout as django_logout
       
   527 
       
   528 def logout(request):
       
   529     django_logout(request)
       
   530     display_message(request, _(u"You've been logged out."))
       
   531     return HttpResponseRedirect(reverse('index'))
       
   532 
       
   533 def register(request):
       
   534     if request.method == 'POST':
       
   535         userform = UserForm(request.POST)
       
   536         userprofileaddform = UserProfileAddForm(request.POST)
       
   537         
       
   538         if userform.is_valid() and userprofileaddform.is_valid():
       
   539             data = userform.cleaned_data
       
   540             data.update(userprofileaddform.cleaned_data)
       
   541             user = UserProfile.objects.create_inactive_user(userform.cleaned_data['email'], False, **userprofileaddform.cleaned_data)
       
   542             profile = user.get_profile()
       
   543             if ApplicationConfiguration.get_key('workspace_registration_moderation', False): # need moderation
       
   544                 profile.is_suspended = True
       
   545                 profile.save()
       
   546                 display_message(request, _(u"You've been registered, you will receive a confirmation mail once a moderator has approved your membership."))                
       
   547             else:
       
   548                 profile.send_activation_email()
       
   549                 display_message(request, _(u"You've been registered, please check your email for the confirm message."))                
       
   550             return HttpResponseRedirect(reverse('index'))
       
   551     else:    
       
   552         userform = UserForm()
       
   553         userprofileaddform = UserProfileAddForm()
       
   554     
       
   555     return render_to_response('site/register.html', {'forms':[userform, userprofileaddform]}, context_instance=RequestContext(request))