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 |
226 required=False) |
226 required=False) |
227 |
227 |
228 |
228 |
229 SEPARATORS_RE = re.compile('[;,\n]+') |
229 SEPARATORS_RE = re.compile('[;,\n]+') |
230 |
230 |
231 @has_global_perm('can_manage_workspace') |
231 @has_global_perm_or_perm_on_text('can_manage_workspace', 'can_manage_text') |
232 def user_mass_add(request, key=None): |
232 def user_mass_add(request, key=None): |
233 return user_add(request, key=key, mass=True) |
233 return user_add(request, key=key, mass=True) |
234 |
234 |
235 @has_global_perm('can_manage_workspace') |
235 @has_global_perm_or_perm_on_text('can_manage_workspace', 'can_manage_text') |
236 def user_add(request, key=None, mass=False): |
236 def user_add(request, key=None, mass=False): |
237 text = get_text_by_keys_or_404(key) if key else None |
237 text = get_text_by_keys_or_404(key) if key else None |
238 if request.method == 'POST': |
238 if request.method == 'POST': |
239 userform = UserForm(request.POST) if not mass else MassUserForm(request.POST) |
239 userform = UserForm(request.POST) if not mass else MassUserForm(request.POST) |
240 userroleform = UserRoleForm(request.POST) |
240 userroleform = UserRoleForm(request.POST) if not(key) else None |
241 noteform = UserAddForm(request.POST) |
241 noteform = UserAddForm(request.POST) |
242 userprofileform = UserProfileAddForm(request.POST) |
242 userprofileform = UserProfileAddForm(request.POST) |
243 localroleform = UserRoleTextForm(request.POST, prefix="local") if key else None |
243 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()): |
244 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 |
245 data = userform.cleaned_data |
246 data.update(userprofileform.cleaned_data) |
246 data.update(userprofileform.cleaned_data) |
247 data.update(noteform.cleaned_data) |
247 data.update(noteform.cleaned_data) |
248 emails = data['email'] |
248 emails = data['email'] |
249 del data['email'] |
249 del data['email'] |
250 email_created = set() |
250 email_created = set() |
251 for email in [s.strip() for s in SEPARATORS_RE.split(emails)]: |
251 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: |
252 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) |
253 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: |
254 if key: |
256 localuserrole = UserRole.objects.create(user=user, role=localroleform.cleaned_data['role'], text=text) |
255 localuserrole = UserRole.objects.create(user=user, role=localroleform.cleaned_data['role'], text=text) |
|
256 else: |
|
257 userrole = UserRole.objects.create(user=user, role=userroleform.cleaned_data['role'], text=None) |
257 email_created.add(email) |
258 email_created.add(email) |
258 register_activity(request, "user_created", user=user) |
259 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)}) |
260 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: |
261 if key: |
261 return HttpResponseRedirect(reverse('text-share', args=[text.key])) |
262 return HttpResponseRedirect(reverse('text-share', args=[text.key])) |
262 else: |
263 else: |
263 return HttpResponseRedirect(reverse('user')) |
264 return HttpResponseRedirect(reverse('user')) |
264 else: |
265 else: |
265 userform = UserForm() if not mass else MassUserForm() |
266 userform = UserForm() if not mass else MassUserForm() |
266 userroleform = UserRoleForm() |
267 userroleform = UserRoleForm() if not(key) else None |
267 userprofileform = UserProfileAddForm({'preferred_language' : request.LANGUAGE_CODE}) |
268 userprofileform = UserProfileAddForm({'preferred_language' : request.LANGUAGE_CODE}) |
268 noteform = UserAddForm() |
269 noteform = UserAddForm() |
269 localroleform = UserRoleTextForm(prefix="local") if key else None |
270 localroleform = UserRoleTextForm(prefix="local") if key else None |
270 |
271 |
271 if key: |
272 if key: |