src/cm/views/user.py
changeset 546 9bac72438057
parent 544 18ac07f35974
child 580 f634a302c45e
equal deleted inserted replaced
545:f7bb1f72b85c 546:9bac72438057
    18 from cm.utils import get_among, get_int
    18 from cm.utils import get_among, get_int
    19 from cm.models import ApplicationConfiguration
    19 from cm.models import ApplicationConfiguration
    20 from django.views.generic.list_detail import object_list
    20 from django.views.generic.list_detail import object_list
    21 from django.contrib.auth.decorators import login_required
    21 from django.contrib.auth.decorators import login_required
    22 from cm.views import get_keys_from_dict
    22 from cm.views import get_keys_from_dict
    23 from cm.security import has_global_perm
    23 from cm.security import has_global_perm, has_global_perm_or_perm_on_text
    24 from cm.exception import UnauthorizedException
    24 from cm.exception import UnauthorizedException
    25 from cm.cm_settings import SHOW_EMAILS_IN_ADMIN
    25 from cm.cm_settings import SHOW_EMAILS_IN_ADMIN
    26 from tagging.models import Tag
    26 from tagging.models import Tag
    27 import sys
    27 import sys
    28 import re
    28 import re
   200         self.fields['role'] = role_field
   200         self.fields['role'] = role_field
   201         
   201         
   202 class UserProfileForm(ModelForm):
   202 class UserProfileForm(ModelForm):
   203     class Meta:
   203     class Meta:
   204         model = UserProfile
   204         model = UserProfile
   205         fields = ('allow_contact', 'preferred_language', 'is_suspended', 'tags')
   205         fields = ('is_suspended', 'tags')
   206 
   206 
   207 class MyUserProfileForm(ModelForm):
   207 class MyUserProfileForm(ModelForm):
   208     class Meta:
   208     class Meta:
   209         model = UserProfile
   209         model = UserProfile
   210         fields = ('allow_contact', 'preferred_language', 'tags')
   210         fields = ('tags',)
   211 
   211 
   212 class UserProfileAddForm(ModelForm):
   212 class UserProfileAddForm(ModelForm):
   213     class Meta:
   213     class Meta:
   214         model = UserProfile
   214         model = UserProfile
   215         fields = ('preferred_language', 'tags')
   215         fields = ('tags',)
   216         
   216         
   217 class UserProfileRegisterForm(ModelForm):
   217 class UserProfileRegisterForm(ModelForm):
   218     class Meta:
   218     class Meta:
   219         model = UserProfile
   219         model = UserProfile
   220         fields = ('preferred_language', )        
       
   221 
   220 
   222 class UserAddForm(forms.Form):
   221 class UserAddForm(forms.Form):
   223     note = forms.CharField(label=ugettext_lazy(u'Note'),
   222     note = forms.CharField(label=ugettext_lazy(u'Note'),
   224                            help_text=ugettext_lazy(u'Optional text to add to invitation email'),
   223                            help_text=ugettext_lazy(u'Optional text to add to invitation email'),
   225                            widget=forms.Textarea,
   224                            widget=forms.Textarea,
   226                            required=False)
   225                            required=False)
   227 
   226 
   228 
   227 
   229 SEPARATORS_RE = re.compile('[;,\n]+')
   228 SEPARATORS_RE = re.compile('[;,\n]+')
   230 
   229 
   231 @has_global_perm('can_manage_workspace')
   230 @has_global_perm_or_perm_on_text('can_manage_workspace', 'can_manage_text')
   232 def user_mass_add(request, key=None):
   231 def user_mass_add(request, key=None):
   233     return user_add(request, key=key, mass=True)
   232     return user_add(request, key=key, mass=True)
   234 
   233 
   235 @has_global_perm('can_manage_workspace')
   234 @has_global_perm_or_perm_on_text('can_manage_workspace', 'can_manage_text')
   236 def user_add(request, key=None, mass=False):
   235 def user_add(request, key=None, mass=False):
   237     text = get_text_by_keys_or_404(key) if key else None
   236     text = get_text_by_keys_or_404(key) if key else None
   238     if request.method == 'POST':
   237     if request.method == 'POST':
   239         userform = UserForm(request.POST) if not mass else MassUserForm(request.POST)
   238         userform = UserForm(request.POST) if not mass else MassUserForm(request.POST)
   240         userroleform = UserRoleForm(request.POST)
   239         userroleform = UserRoleForm(request.POST) if not(key) else None
   241         noteform = UserAddForm(request.POST)
   240         noteform = UserAddForm(request.POST)
   242         userprofileform = UserProfileAddForm(request.POST)
   241         userprofileform = UserProfileAddForm(request.POST)
   243         localroleform = UserRoleTextForm(request.POST, prefix="local") if key else None
   242         localroleform = UserRoleTextForm(request.POST, prefix="local") if key else None
   244         if userform.is_valid() and userroleform.is_valid() and noteform.is_valid() and userprofileform.is_valid() and (not localroleform or localroleform.is_valid()):
   243         if userform.is_valid() and (not userroleform or userroleform.is_valid()) and noteform.is_valid() and userprofileform.is_valid() and (not localroleform or localroleform.is_valid()):
   245             data = userform.cleaned_data
   244             data = userform.cleaned_data
   246             data.update(userprofileform.cleaned_data)
   245             data.update(userprofileform.cleaned_data)
   247             data.update(noteform.cleaned_data)
   246             data.update(noteform.cleaned_data)
   248             emails = data['email']
   247             emails = data['email']
   249             del data['email']
   248             del data['email']
   250             email_created = set()
   249             email_created = set()
   251             for email in [s.strip() for s in SEPARATORS_RE.split(emails)]:
   250             for email in [s.strip() for s in SEPARATORS_RE.split(emails)]:
   252                 if email and not User.objects.filter(email__iexact=email) and email not in email_created:
   251                 if email and not User.objects.filter(email__iexact=email) and email not in email_created:
   253                     user = UserProfile.objects.create_inactive_user(email, True, **data)
   252                     user = UserProfile.objects.create_inactive_user(email, True, **data)
   254                     userrole = UserRole.objects.create(user=user, role=userroleform.cleaned_data['role'], text=None)
       
   255                     if key:
   253                     if key:
   256                         localuserrole = UserRole.objects.create(user=user, role=localroleform.cleaned_data['role'], text=text)
   254                         localuserrole = UserRole.objects.create(user=user, role=localroleform.cleaned_data['role'], text=text)
       
   255                     else:
       
   256                         userrole = UserRole.objects.create(user=user, role=userroleform.cleaned_data['role'], text=None)
   257                     email_created.add(email)
   257                     email_created.add(email)
   258                     register_activity(request, "user_created", user=user)
   258                     register_activity(request, "user_created", user=user)
   259             display_message(request, ungettext(u'%(nb_users)d user added', u'%(nb_users)d users added', len(email_created)) % {'nb_users': len(email_created)})
   259             display_message(request, ungettext(u'%(nb_users)d user added', u'%(nb_users)d users added', len(email_created)) % {'nb_users': len(email_created)})
   260             if key:
   260             if key:
   261                 return HttpResponseRedirect(reverse('text-share', args=[text.key]))
   261                 return HttpResponseRedirect(reverse('text-share', args=[text.key]))
   262             else:
   262             else:
   263                 return HttpResponseRedirect(reverse('user'))
   263                 return HttpResponseRedirect(reverse('user'))
   264     else:
   264     else:
   265         userform = UserForm() if not mass else MassUserForm()
   265         userform = UserForm() if not mass else MassUserForm()
   266         userroleform = UserRoleForm()
   266         userroleform = UserRoleForm() if not(key) else None
   267         userprofileform = UserProfileAddForm({'preferred_language' : request.LANGUAGE_CODE})
   267         userprofileform = UserProfileAddForm()
   268         noteform = UserAddForm()
   268         noteform = UserAddForm()
   269         localroleform = UserRoleTextForm(prefix="local") if key else None
   269         localroleform = UserRoleTextForm(prefix="local") if key else None
   270     
   270     
   271     if key:
   271     if key:
   272         template = 'site/user_mass_add_text.html' if mass else 'site/user_add_text.html'
   272         template = 'site/user_mass_add_text.html' if mass else 'site/user_add_text.html'
   592                 profile.send_activation_email()
   592                 profile.send_activation_email()
   593                 display_message(request, _(u"You've been registered, please check your email for the confirm message."))                
   593                 display_message(request, _(u"You've been registered, please check your email for the confirm message."))                
   594             return HttpResponseRedirect(reverse('index'))
   594             return HttpResponseRedirect(reverse('index'))
   595     else:    
   595     else:    
   596         userform = UserForm()
   596         userform = UserForm()
   597         userprofileaddform = UserProfileRegisterForm({'preferred_language' : request.LANGUAGE_CODE})
   597         userprofileaddform = UserProfileRegisterForm()
   598     
   598     
   599     return render_to_response('site/register.html', {'forms':[userform, userprofileaddform]}, context_instance=RequestContext(request))
   599     return render_to_response('site/register.html', {'forms':[userform, userprofileaddform]}, context_instance=RequestContext(request))