def contact(request): if request.method == 'POST': form = BodyContactForm( request.POST) if request.user.is_authenticated() else ContactForm( request.POST) if form.is_valid(): name = form.cleaned_data.get('name', None) or request.user.username email = form.cleaned_data.get('email', None) or request.user.email message = render_to_string( 'email/site_contact_email.txt', { 'body': form.cleaned_data['body'], 'name': name, 'email': email, 'referer': request.META.get('HTTP_REFERER', None), }, context_instance=RequestContext(request)) subject = form.cleaned_data['title'] # Email subject *must not* contain newlines subject = ''.join(subject.splitlines()) dest = settings.CONTACT_DEST send_mail(subject, message, email, [dest]) if form.cleaned_data['copy']: my_subject = _(u"Copy of message:") + u" " + subject send_mail(my_subject, message, email, [email]) display_message( request, _(u"Email sent. We will get back to you as quickly as possible." )) redirect_url = reverse('index') return HttpResponseRedirect(redirect_url) else: form = BodyContactForm() if request.user.is_authenticated( ) else ContactForm() return render_to_response('site/contact.html', {'form': form}, context_instance=RequestContext(request))
def _text_create_upload(request, createForm): if request.method == 'POST': form = createForm(request.POST, request.FILES) if form.is_valid(): # should convert? if form.cleaned_data['file']: try: uploaded_file = form.cleaned_data['file'] content, attachs = convert_from_mimetype(uploaded_file.temporary_file_path(), uploaded_file.content_type, format=form.cleaned_data['format'], ) form.cleaned_data['content'] = content form.cleaned_data['attachs'] = attachs # set title if not present if not form.cleaned_data.get('title', None): form.cleaned_data['title'] = remove_extension(uploaded_file.name) del form.cleaned_data['file'] except: raise text = create_text(request.user, form.cleaned_data) register_activity(request, "text_created", text) display_message(request, _(u'Text "%(text_title)s" has been created')%{"text_title":text.get_latest_version().title}) return text, redirect_post_create(text) else: form = createForm() return None, render_to_response('site/text_create_upload.html', {'form' : form}, context_instance=RequestContext(request))
def user_edit(request, key): profile = get_object_or_404(UserProfile, key=key) user = profile.user userrole = profile.global_userrole() if request.method == 'POST': userform = UserForm(request.POST, instance=user) userprofileform = UserProfileForm(request.POST, instance=profile) userroleform = UserRoleForm(request.POST, instance=userrole) if userform.is_valid() and userroleform.is_valid( ) and userprofileform.is_valid(): userform.save() userroleform.save() userprofileform.save() display_message(request, _(u'User modified')) return HttpResponseRedirect(reverse('user')) else: userform = UserForm(instance=user) userprofileform = UserProfileForm(instance=profile) userroleform = UserRoleForm(instance=userrole) return render_to_response( 'site/user_edit.html', { 'forms': [userform, userprofileform, userroleform], 'title': 'Edit user', 'user_edit': user, }, context_instance=RequestContext(request))
def followup(request): user = get_request_user(request) workspace_notify_check = Notification.objects.filter(text=None, type='workspace', user=user, active=True).count() own_notify_check = Notification.objects.filter(text=None, type='own', user=user, active=True).count() if request.method == 'POST': if 'activate' in request.POST: Configuration.objects.set_key('private_feed_key', generate_key()) display_message(request, _(u"Private feed activated.")) if 'reset' in request.POST: Configuration.objects.set_key('private_feed_key', generate_key()) display_message(request, _(u"Private feed reseted.")) if request.POST.get('notif_id', None): notif_id = request.POST.get('notif_id') notif_type = 'own' if notif_id == 'own_notify_check' else 'workspace' notif_val = request.POST.get(notif_id, None) if notif_val != None: Notification.objects.set_notification( text=None, type=notif_type, active=(notif_val == 'true'), email_or_user=user) return render_to_response('site/followup.html', { 'workspace_notify_check': workspace_notify_check, 'own_notify_check': own_notify_check, }, context_instance=RequestContext(request))
def user_contact(request, key): recipient_profile = get_object_or_404(UserProfile, key=key) if request.method == 'POST': contact_form = UserContactForm(request.POST) if contact_form.is_valid(): data = contact_form.cleaned_data message = render_to_string('email/user_contact_email.txt', { 'body': data['body'], 'CONF': ApplicationConfiguration }) send_mail(data['subject'], message, request.user.email, [recipient_profile.user.email]) display_message(request, _(u'Email sent.')) return HttpResponseRedirect(reverse('index')) else: contact_form = UserContactForm() return render_to_response('site/user_contact.html', { 'form': contact_form, 'save_name': 'send', 'recipient_profile': recipient_profile, }, context_instance=RequestContext(request))
def text_followup(request, key): text = get_text_by_keys_or_404(key) user = request.user if request.user.is_authenticated() else None from cm.security import user_has_perm # import here! anonymous_can_view_text = user_has_perm(None, 'can_view_text', text=text) text_notify_check = Notification.objects.filter(text=text,type='text',user=user, active=True).count() workspace_notify_check = Notification.objects.filter(text=None,type='workspace',user=user, active=True).count() if request.method == 'POST': if 'activate' in request.POST: text.private_feed_key = generate_key() text.save() display_message(request, _(u"Private feed activated.")) if 'reset' in request.POST: text.private_feed_key = generate_key() text.save() display_message(request, _(u"Private notifications feed reseted.")) if request.POST.get('notif_id',None): notif_id = request.POST.get('notif_id') notif_val = request.POST.get(notif_id,None) if notif_val != None : Notification.objects.set_notification(text=text, type='text', active=(notif_val == 'true'), email_or_user=request.user) template_dict = { 'text' : text, 'workspace_notify_check' : workspace_notify_check, 'text_notify_check' : text_notify_check, 'anonymous_can_view_text' : anonymous_can_view_text, } return render_to_response('site/text_followup.html', template_dict , context_instance=RequestContext(request))
def cm_login(request, user): # make sure user has a profile try: user.get_profile() except UserProfile.DoesNotExist: UserProfile.objects.create(user=user) if user.get_profile().is_suspended: display_message( request, _(u"This account is suspended, contact the workspace administrator." )) return HttpResponseRedirect(reverse('index')) user.backend = 'django.contrib.auth.backends.ModelBackend' django_login(request, user) display_message(request, _(u"You're logged in!")) next = request.POST.get('next', None) q = request.POST.get('q', None) if next and next.startswith('/'): if q: return HttpResponseRedirect(next + '?' + q) else: return HttpResponseRedirect(next) else: return HttpResponseRedirect(reverse('index'))
def contact(request): if request.method == 'POST': form = BodyContactForm(request.POST) if request.user.is_authenticated() else ContactForm(request.POST) if form.is_valid(): name = form.cleaned_data.get('name', None) or request.user.username email = form.cleaned_data.get('email', None) or request.user.email message = render_to_string('email/site_contact_email.txt', { 'body' : form.cleaned_data['body'], 'name' : name, 'email' : email, 'referer' : request.META.get('HTTP_REFERER', None), }, context_instance=RequestContext(request)) subject = form.cleaned_data['title'] # Email subject *must not* contain newlines subject = ''.join(subject.splitlines()) dest = settings.CONTACT_DEST send_mail(subject, message, email, [dest]) if form.cleaned_data['copy']: my_subject = _(u"Copy of message:") + u" " + subject send_mail(my_subject, message, email, [email]) display_message(request, _(u"Email sent. We will get back to you as quickly as possible.")) redirect_url = reverse('index') return HttpResponseRedirect(redirect_url) else: form = BodyContactForm() if request.user.is_authenticated() else ContactForm() return render_to_response('site/contact.html', {'form': form}, context_instance=RequestContext(request))
def register(request): if request.method == 'POST': userform = UserForm(request.POST) userprofileaddform = UserProfileRegisterForm(request.POST) if userform.is_valid() and userprofileaddform.is_valid(): data = userform.cleaned_data data.update(userprofileaddform.cleaned_data) user = UserProfile.objects.create_inactive_user( userform.cleaned_data['email'], False, **userprofileaddform.cleaned_data) profile = user.get_profile() if ApplicationConfiguration.get_key( 'workspace_registration_moderation', False): # need moderation profile.is_suspended = True profile.save() display_message( request, _(u"You've been registered, you will receive a confirmation mail once a moderator has approved your membership." )) else: profile.send_activation_email() display_message( request, _(u"You've been registered, please check your email for the confirm message." )) return HttpResponseRedirect(reverse('index')) else: userform = UserForm() userprofileaddform = UserProfileRegisterForm() return render_to_response('site/register.html', {'forms': [userform, userprofileaddform]}, context_instance=RequestContext(request))
def user_send_invitation(request, key): if request.method == 'POST': profile = get_object_or_404(UserProfile, key=key) profile.send_invitation_email() display_message(request, _(u"A new invitation has been sent to user %(prof)s.") % {'prof':profile.simple_print()}) return HttpResponse('') # no redirect because this is called by js raise UnauthorizedException('')
def user_send_invitation(request, key): if request.method == 'POST': profile = get_object_or_404(UserProfile, key=key) profile.send_invitation_email() display_message( request, _(u"A new invitation has been sent to user %(prof)s.") % {'prof': profile.simple_print()}) return HttpResponse('') # no redirect because this is called by js raise UnauthorizedException('')
def profile_pw(request): user = request.user profile = user.get_profile() if request.method == 'POST': pwform = PasswordChangeForm(profile.user, data = request.POST) if pwform.is_valid(): pwform.save() display_message(request, _(u'Password changed')) return HttpResponseRedirect(reverse('profile')) else: pwform = PasswordChangeForm(profile.user) return render_to_response('site/profile_pw.html', {'forms' : [pwform], 'title' : 'Password', }, context_instance=RequestContext(request))
def user_enable(request, key): if request.method == 'POST': profile = get_object_or_404(UserProfile, key=key) profile.is_suspended = False profile.save() if profile.user.is_active: display_message(request, _(u"User's access %(prof)s has been restored.") % {'prof':profile.simple_print()}) register_activity(request, "user_enabled", user=profile.user) else: # new member approval profile.send_activation_email() display_message(request, _(u"User's access %(prof)s has been approved.") % {'prof':profile.simple_print()}) register_activity(request, "user_approved", user=profile.user) return HttpResponse('') # no redirect because this is called by js raise UnauthorizedException('')
def user_anon_edit(request): userrole, created = UserRole.objects.get_or_create(user=None, text=None) if request.method == 'POST': userroleform = AnonUserRoleForm(request.POST, instance=userrole) if userroleform.is_valid(): userroleform.save() display_message(request, _(u'Anonymous user role modified.')) return HttpResponseRedirect(reverse('user')) else: userroleform = AnonUserRoleForm(instance=userrole) return render_to_response('site/user_edit.html', {'form' : userroleform, 'title' : 'Edit anonymous user', }, context_instance=RequestContext(request))
def _text_create_content(request, createForm): document = "" if request.method == 'POST': form = createForm(request.POST) if form.is_valid(): text = create_text(request.user, form.cleaned_data) register_activity(request, "text_created", text) display_message(request, _(u'Text "%(text_title)s" has been created') %{"text_title":text.get_latest_version().title}) return text, redirect_post_create(text) else: form = createForm() return None, render_to_response('site/text_create_content.html', {'document':document, 'form' : form}, context_instance=RequestContext(request))
def profile_pw(request): user = request.user profile = user.get_profile() if request.method == 'POST': pwform = PasswordChangeForm(profile.user, data=request.POST) if pwform.is_valid(): pwform.save() display_message(request, _(u'Password changed')) return HttpResponseRedirect(reverse('profile')) else: pwform = PasswordChangeForm(profile.user) return render_to_response('site/profile_pw.html', { 'forms': [pwform], 'title': 'Password', }, context_instance=RequestContext(request))
def user_anon_edit(request): userrole, created = UserRole.objects.get_or_create(user=None, text=None) if request.method == 'POST': userroleform = AnonUserRoleForm(request.POST, instance=userrole) if userroleform.is_valid(): userroleform.save() display_message(request, _(u'Anonymous user role modified.')) return HttpResponseRedirect(reverse('user')) else: userroleform = AnonUserRoleForm(instance=userrole) return render_to_response('site/user_edit.html', { 'form': userroleform, 'title': 'Edit anonymous user', }, context_instance=RequestContext(request))
def user_suspend(request, key): if request.method == 'POST': profile = get_object_or_404(UserProfile, key=key) profile.is_suspended = True profile.save() if profile.user.is_active: display_message(request, _(u"User's access %(prof)s has been suspended.") % {'prof':profile.simple_print()}) register_activity(request, "user_suspended", user=profile.user) else: # make use active but disabled profile.user.is_active = True profile.user.save() display_message(request, _(u"User's access %(prof)s has been refused.") % {'prof':profile.simple_print()}) register_activity(request, "user_refused", user=profile.user) return HttpResponse('') # no redirect because this is called by js raise UnauthorizedException('')
def settingss(request): if request.method == 'POST': if 'delete_logo' in request.POST: Configuration.objects.del_key('workspace_logo_file_key') display_message(request, _(u'Settings saved')) return HttpResponseRedirect(reverse('settings')) else: form = SettingsForm(data=request.POST) if form.is_valid() : form.save() display_message(request, _(u'Settings saved')) return HttpResponseRedirect(reverse('settings')) else: form = SettingsForm() return render_to_response('site/settings.html', {'form' : form, 'help_links' : {'workspace_role_model':'role_model'}}, context_instance=RequestContext(request))
def user_add(request, key=None, mass=False): text = get_text_by_keys_or_404(key) if key else None if request.method == 'POST': userform = UserForm(request.POST) if not mass else MassUserForm(request.POST) userroleform = UserRoleForm(request.POST) if not(key) else None noteform = UserAddForm(request.POST) userprofileform = UserProfileAddForm(request.POST) localroleform = UserRoleTextForm(request.POST, prefix="local") if key else None 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()): data = userform.cleaned_data data.update(userprofileform.cleaned_data) data.update(noteform.cleaned_data) emails = data['email'] del data['email'] email_created = set() for email in [s.strip() for s in SEPARATORS_RE.split(emails)]: if email and not User.objects.filter(email__iexact=email) and email not in email_created: user = UserProfile.objects.create_inactive_user(email, True, **data) if key: localuserrole = UserRole.objects.create(user=user, role=localroleform.cleaned_data['role'], text=text) else: userrole = UserRole.objects.create(user=user, role=userroleform.cleaned_data['role'], text=None) email_created.add(email) register_activity(request, "user_created", user=user) display_message(request, ungettext(u'%(nb_users)d user added', u'%(nb_users)d users added', len(email_created)) % {'nb_users': len(email_created)}) if key: return HttpResponseRedirect(reverse('text-share', args=[text.key])) else: return HttpResponseRedirect(reverse('user')) else: userform = UserForm() if not mass else MassUserForm() userroleform = UserRoleForm() if not(key) else None userprofileform = UserProfileAddForm() noteform = UserAddForm() localroleform = UserRoleTextForm(prefix="local") if key else None if key: template = 'site/user_mass_add_text.html' if mass else 'site/user_add_text.html' else: template = 'site/user_mass_add.html' if mass else 'site/user_add.html' return render_to_response(template, {'forms' : [userform, userprofileform , userroleform, noteform, localroleform], 'save_name' : ungettext(u'Add user', u'Add users', 2 if mass else 1), 'mass' : mass, 'text' : text, }, context_instance=RequestContext(request))
def user_activate(request, key): try: profile = UserProfile.objects.get(adminkey=key) user = profile.user if not user.is_active: if request.method == 'POST': userform = UserValidateForm(request.POST, instance=user) pwform = SetPasswordForm(profile.user, request.POST) if userform.is_valid() and pwform.is_valid(): userform.save() pwform.save() user.is_active = True user.save() # login user.backend = 'django.contrib.auth.backends.ModelBackend' django_login(request, user) register_activity(request, "user_activated", user=user) display_message( request, _(u"Your account has been activated. You're now logged-in." )) return HttpResponseRedirect(reverse('index')) else: user.username = '' userform = UserValidateForm(instance=user) pwform = SetPasswordForm(user) cache.clear() return render_to_response('site/activate.html', { 'forms': [userform, pwform], 'title': _(u'Activate your account'), 'save_name': _(u'activate account'), }, context_instance=RequestContext(request)) else: user.backend = 'django.contrib.auth.backends.ModelBackend' django_login(request, user) display_message( request, _(u"Your account has been activated. You're now logged-in.")) return HttpResponseRedirect(reverse('index')) except UserProfile.DoesNotExist: raise UnauthorizedException('No profile')
def desactivate_notification(request, adminkey): try: notification = Notification.objects.get(adminkey=adminkey) except Notification.DoesNotExist: display_message(request, _(u"This notification has already been deactivated.")) return HttpResponseRedirect(reverse('index')) if request.method == 'POST': if request.POST['adminkey'] == adminkey: notification.desactivate() display_message(request, _(u"Notification deactivated.")) return HttpResponseRedirect(reverse('index')) return render_to_response('site/notifications_desactivate.html', {'notification' : notification, 'title' : _(u'Deactivate notification?'), }, context_instance=RequestContext(request))
def desactivate_notification(request, adminkey): try: notification = Notification.objects.get(adminkey=adminkey) except Notification.DoesNotExist: display_message(request, _(u"This notification has already been deactivated.")) return HttpResponseRedirect(reverse('index')) if request.method == 'POST': if request.POST['adminkey'] == adminkey: notification.desactivate() display_message(request, _(u"Notification deactivated.")) return HttpResponseRedirect(reverse('index')) return render_to_response('site/notifications_desactivate.html', { 'notification': notification, 'title': _(u'Deactivate notification?'), }, context_instance=RequestContext(request))
def text_followup(request, key): text = get_text_by_keys_or_404(key) user = request.user if request.user.is_authenticated() else None from cm.security import user_has_perm # import here! anonymous_can_view_text = user_has_perm(None, 'can_view_text', text=text) text_notify_check = Notification.objects.filter(text=text, type='text', user=user, active=True).count() workspace_notify_check = Notification.objects.filter(text=None, type='workspace', user=user, active=True).count() if request.method == 'POST': if 'activate' in request.POST: text.private_feed_key = generate_key() text.save() display_message(request, _(u"Private feed activated.")) if 'reset' in request.POST: text.private_feed_key = generate_key() text.save() display_message(request, _(u"Private notifications feed reseted.")) if request.POST.get('notif_id', None): notif_id = request.POST.get('notif_id') notif_val = request.POST.get(notif_id, None) if notif_val != None: Notification.objects.set_notification( text=text, type='text', active=(notif_val == 'true'), email_or_user=request.user) template_dict = { 'text': text, 'workspace_notify_check': workspace_notify_check, 'text_notify_check': text_notify_check, 'anonymous_can_view_text': anonymous_can_view_text, } return render_to_response('site/text_followup.html', template_dict, context_instance=RequestContext(request))
def settings_design(request): if request.method == 'POST': if 'delete_logo' in request.POST: Configuration.objects.del_key('workspace_logo_file_key') display_message(request, _(u'Settings saved')) return HttpResponseRedirect(reverse('settings-design')) else: form = SettingsDesignForm(data=request.POST) if form.is_valid(): form.save() logo_file = request.FILES.get('workspace_logo_file', None) if logo_file: form.save_file(logo_file) display_message(request, _(u'Settings saved')) return HttpResponseRedirect(reverse('settings-design')) else: from cm.models import ApplicationConfiguration custom_css = ApplicationConfiguration.get_key('custom_css') if custom_css: default_css = custom_css else: default_css = ''' .voted { color: #008000; } .rejected, .fallen, .withdrawn { color: #ff0000; } div.frame { border: 1px solid #000; padding: 5px; } div.frame .title { font-weight: bold; text-align: center; }''' form = SettingsDesignForm(initial={'custom_css': default_css}) return render_to_response('site/settings_design.html', {'form': form}, context_instance=RequestContext(request))
def profile(request): user = request.user profile = user.get_profile() if request.method == 'POST': userform = UserForm(request.POST, instance=user) userprofileform = MyUserProfileForm(request.POST, instance=profile) if userform.is_valid() and userprofileform.is_valid(): userform.save() userprofileform.save() display_message(request, _(u'Profile updated')) return HttpResponseRedirect(reverse('index')) else: userform = UserForm(instance=user) userprofileform = MyUserProfileForm(instance=profile) return render_to_response('site/profile.html', {'forms' : [userform, userprofileform], 'title' : 'Profile', }, context_instance=RequestContext(request))
def settings_design(request): if request.method == 'POST': if 'delete_logo' in request.POST: Configuration.objects.del_key('workspace_logo_file_key') display_message(request, _(u'Settings saved')) return HttpResponseRedirect(reverse('settings-design')) else: form = SettingsDesignForm(data=request.POST) if form.is_valid() : form.save() logo_file = request.FILES.get('workspace_logo_file',None) if logo_file: form.save_file(logo_file) display_message(request, _(u'Settings saved')) return HttpResponseRedirect(reverse('settings-design')) else: from cm.models import ApplicationConfiguration custom_css = ApplicationConfiguration.get_key('custom_css') if custom_css: default_css = custom_css else: default_css = ''' .voted { color: #008000; } .rejected, .fallen, .withdrawn { color: #ff0000; } div.frame { border: 1px solid #000; padding: 5px; } div.frame .title { font-weight: bold; text-align: center; }''' form = SettingsDesignForm(initial={'custom_css': default_css}) return render_to_response('site/settings_design.html', {'form' : form}, context_instance=RequestContext(request))
def user_enable(request, key): if request.method == 'POST': profile = get_object_or_404(UserProfile, key=key) profile.is_suspended = False profile.save() if profile.user.is_active: display_message( request, _(u"User's access %(prof)s has been restored.") % {'prof': profile.simple_print()}) register_activity(request, "user_enabled", user=profile.user) else: # new member approval profile.send_activation_email() display_message( request, _(u"User's access %(prof)s has been approved.") % {'prof': profile.simple_print()}) register_activity(request, "user_approved", user=profile.user) return HttpResponse('') # no redirect because this is called by js raise UnauthorizedException('')
def profile(request): user = request.user profile = user.get_profile() if request.method == 'POST': userform = UserForm(request.POST, instance=user) userprofileform = MyUserProfileForm(request.POST, instance=profile) if userform.is_valid() and userprofileform.is_valid(): userform.save() userprofileform.save() display_message(request, _(u'Profile updated')) return HttpResponseRedirect(reverse('index')) else: userform = UserForm(instance=user) userprofileform = MyUserProfileForm(instance=profile) return render_to_response('site/profile.html', { 'forms': [userform, userprofileform], 'title': 'Profile', }, context_instance=RequestContext(request))
def user_activate(request, key): try: profile = UserProfile.objects.get(adminkey=key) user = profile.user if not user.is_active: if request.method == 'POST': userform = UserValidateForm(request.POST, instance=user) pwform = SetPasswordForm(profile.user, request.POST) if userform.is_valid() and pwform.is_valid(): userform.save() pwform.save() user.is_active = True user.save() # login user.backend = 'django.contrib.auth.backends.ModelBackend' django_login(request, user) register_activity(request, "user_activated", user=user) display_message(request, _(u"Your account has been activated. You're now logged-in.")) return HttpResponseRedirect(reverse('index')) else: user.username = '' userform = UserValidateForm(instance=user) pwform = SetPasswordForm(user) cache.clear() return render_to_response('site/activate.html', { 'forms' : [userform, pwform], 'title': _(u'Activate your account'), 'save_name' : _(u'activate account'), }, context_instance=RequestContext(request)) else: user.backend = 'django.contrib.auth.backends.ModelBackend' django_login(request, user) display_message(request, _(u"Your account has been activated. You're now logged-in.")) return HttpResponseRedirect(reverse('index')) except UserProfile.DoesNotExist: raise UnauthorizedException('No profile')
def user_suspend(request, key): if request.method == 'POST': profile = get_object_or_404(UserProfile, key=key) profile.is_suspended = True profile.save() if profile.user.is_active: display_message( request, _(u"User's access %(prof)s has been suspended.") % {'prof': profile.simple_print()}) register_activity(request, "user_suspended", user=profile.user) else: # make use active but disabled profile.user.is_active = True profile.user.save() display_message( request, _(u"User's access %(prof)s has been refused.") % {'prof': profile.simple_print()}) register_activity(request, "user_refused", user=profile.user) return HttpResponse('') # no redirect because this is called by js raise UnauthorizedException('')
def followup(request): user = get_request_user(request) workspace_notify_check = Notification.objects.filter(text=None,type='workspace',user=user, active=True).count() own_notify_check = Notification.objects.filter(text=None,type='own',user=user, active=True).count() if request.method == 'POST': if 'activate' in request.POST: Configuration.objects.set_key('private_feed_key', generate_key()) display_message(request, _(u"Private feed activated.")) if 'reset' in request.POST: Configuration.objects.set_key('private_feed_key', generate_key()) display_message(request, _(u"Private feed reseted.")) if request.POST.get('notif_id',None): notif_id = request.POST.get('notif_id') notif_type = 'own' if notif_id == 'own_notify_check' else 'workspace' notif_val = request.POST.get(notif_id,None) if notif_val != None : Notification.objects.set_notification(text=None, type=notif_type, active=(notif_val == 'true'), email_or_user=user) return render_to_response('site/followup.html', {'workspace_notify_check':workspace_notify_check, 'own_notify_check' :own_notify_check, }, context_instance=RequestContext(request))
def settingss(request): if request.method == 'POST': if 'delete_logo' in request.POST: Configuration.objects.del_key('workspace_logo_file_key') display_message(request, _(u'Settings saved')) return HttpResponseRedirect(reverse('settings')) else: form = SettingsForm(data=request.POST) if form.is_valid(): form.save() display_message(request, _(u'Settings saved')) return HttpResponseRedirect(reverse('settings')) else: form = SettingsForm() return render_to_response('site/settings.html', { 'form': form, 'help_links': { 'workspace_role_model': 'role_model' } }, context_instance=RequestContext(request))
def user_edit(request, key): profile = get_object_or_404(UserProfile, key=key) user = profile.user userrole = profile.global_userrole() if request.method == 'POST': userform = UserForm(request.POST, instance=user) userprofileform = UserProfileForm(request.POST, instance=profile) userroleform = UserRoleForm(request.POST, instance=userrole) if userform.is_valid() and userroleform.is_valid() and userprofileform.is_valid(): userform.save() userroleform.save() userprofileform.save() display_message(request, _(u'User modified')) return HttpResponseRedirect(reverse('user')) else: userform = UserForm(instance=user) userprofileform = UserProfileForm(instance=profile) userroleform = UserRoleForm(instance=userrole) return render_to_response('site/user_edit.html', {'forms' : [userform , userprofileform, userroleform], 'title' : 'Edit user', 'user_edit' : user, }, context_instance=RequestContext(request))
def register(request): if request.method == 'POST': userform = UserForm(request.POST) userprofileaddform = UserProfileRegisterForm(request.POST) if userform.is_valid() and userprofileaddform.is_valid(): data = userform.cleaned_data data.update(userprofileaddform.cleaned_data) user = UserProfile.objects.create_inactive_user(userform.cleaned_data['email'], False, **userprofileaddform.cleaned_data) profile = user.get_profile() if ApplicationConfiguration.get_key('workspace_registration_moderation', False): # need moderation profile.is_suspended = True profile.save() display_message(request, _(u"You've been registered, you will receive a confirmation mail once a moderator has approved your membership.")) else: profile.send_activation_email() display_message(request, _(u"You've been registered, please check your email for the confirm message.")) return HttpResponseRedirect(reverse('index')) else: userform = UserForm() userprofileaddform = UserProfileRegisterForm() return render_to_response('site/register.html', {'forms':[userform, userprofileaddform]}, context_instance=RequestContext(request))
def user_contact(request, key): recipient_profile = get_object_or_404(UserProfile, key=key) if request.method == 'POST': contact_form = UserContactForm(request.POST) if contact_form.is_valid(): data = contact_form.cleaned_data message = render_to_string('email/user_contact_email.txt', { 'body' : data['body'], 'CONF': ApplicationConfiguration }) send_mail(data['subject'], message, request.user.email, [recipient_profile.user.email]) display_message(request, _(u'Email sent.')) return HttpResponseRedirect(reverse('index')) else: contact_form = UserContactForm() return render_to_response('site/user_contact.html', {'form' : contact_form, 'save_name' : 'send', 'recipient_profile' : recipient_profile, }, context_instance=RequestContext(request))
def cm_login(request, user): # make sure user has a profile try: user.get_profile() except UserProfile.DoesNotExist : UserProfile.objects.create(user=user) if user.get_profile().is_suspended: display_message(request, _(u"This account is suspended, contact the workspace administrator.")) return HttpResponseRedirect(reverse('index')) user.backend = 'django.contrib.auth.backends.ModelBackend' django_login(request, user) display_message(request, _(u"You're logged in!")) next = request.POST.get('next', None) q = request.POST.get('q', None) if next and next.startswith('/'): if q: return HttpResponseRedirect(next + '?' + q) else: return HttpResponseRedirect(next) else: return HttpResponseRedirect(reverse('index'))
def password_reset_done(request): display_message(request, _(u'A link to reset your password has been sent to the profile email. Please check your email.')) return HttpResponseRedirect(reverse('index'))
def password_reset_complete(request): display_message(request, _(u'Password changed')) return HttpResponseRedirect(reverse('index'))
def dashboard(request): request.session.set_test_cookie() if request.user.is_authenticated(): act_view = { 'view_texts' : get_int(request.GET, 'view_texts', 1), 'view_comments' : get_int(request.GET, 'view_comments', 1), 'view_users' : get_int(request.GET, 'view_users', 1), } paginate_by = get_int(request.GET, 'paginate', ACTIVITY_PAGINATION) # texts with can_view_unapproved_comment perms moderator_texts = get_texts_with_perm(request, 'can_view_unapproved_comment') viewer_texts = get_texts_with_perm(request, 'can_view_approved_comment') all_texts_ids = [t.id for t in moderator_texts] + [t.id for t in viewer_texts] span = get_among(request.GET, 'span', ('day', 'month', 'week',), 'week') template_dict = { 'span' : span, 'last_texts' : get_texts_with_perm(request, 'can_view_text').order_by('-modified')[:RECENT_TEXT_NB], 'last_comments' : Comment.objects.filter(text_version__text__in=all_texts_ids).order_by('-created')[:RECENT_COMMENT_NB], # TODO: useful? #'last_users' : User.objects.all().order_by('-date_joined')[:5], } template_dict.update(act_view) #selected_activities = [] #[selected_activities.extend(Activity.VIEWABLE_ACTIVITIES[k]) for k in act_view.keys() if act_view[k]] activities = get_viewable_activities(request, act_view) if not has_perm(request, 'can_manage_workspace'): template_dict['to_mod_profiles'] = [] else: template_dict['to_mod_profiles'] = UserProfile.objects.filter(user__is_active=False).filter(is_suspended=True).order_by('-user__date_joined')[:MODERATE_NB] template_dict['to_mod_comments'] = Comment.objects.filter(state='pending').filter(text_version__text__in=moderator_texts).order_by('-modified')[:MODERATE_NB - len(template_dict['to_mod_profiles'])] activities = activities.order_by('-created') return object_list(request, activities, template_name='site/dashboard.html', paginate_by=paginate_by, extra_context=template_dict, ) else: if request.method == 'POST': form = AuthenticationForm(request, request.POST) if form.is_valid(): user = form.get_user() user.backend = 'django.contrib.auth.backends.ModelBackend' cm_login(request, user) display_message(request, _(u"You're logged in!")) return HttpResponseRedirect(reverse('index')) else: form = AuthenticationForm() public_texts = get_texts_with_perm(request, 'can_view_text').order_by('-modified') template_dict = { 'form' : form, 'public_texts' : public_texts, } return render_to_response('site/non_authenticated_index.html', template_dict, context_instance=RequestContext(request))
def user_add(request, key=None, mass=False): text = get_text_by_keys_or_404(key) if key else None if request.method == 'POST': userform = UserForm(request.POST) if not mass else MassUserForm( request.POST) userroleform = UserRoleForm(request.POST) noteform = UserAddForm(request.POST) userprofileform = UserProfileAddForm(request.POST) localroleform = UserRoleTextForm(request.POST, prefix="local") if key else None if userform.is_valid() and userroleform.is_valid( ) and noteform.is_valid() and userprofileform.is_valid() and ( not localroleform or localroleform.is_valid()): data = userform.cleaned_data data.update(userprofileform.cleaned_data) data.update(noteform.cleaned_data) emails = data['email'] del data['email'] email_created = set() for email in [s.strip() for s in SEPARATORS_RE.split(emails)]: if email and not User.objects.filter( email__iexact=email) and email not in email_created: user = UserProfile.objects.create_inactive_user( email, True, **data) userrole = UserRole.objects.create( user=user, role=userroleform.cleaned_data['role'], text=None) if key: localuserrole = UserRole.objects.create( user=user, role=localroleform.cleaned_data['role'], text=text) email_created.add(email) register_activity(request, "user_created", user=user) display_message( request, ungettext(u'%(nb_users)d user added', u'%(nb_users)d users added', len(email_created)) % {'nb_users': len(email_created)}) if key: return HttpResponseRedirect( reverse('text-share', args=[text.key])) else: return HttpResponseRedirect(reverse('user')) else: userform = UserForm() if not mass else MassUserForm() userroleform = UserRoleForm() userprofileform = UserProfileAddForm( {'preferred_language': request.LANGUAGE_CODE}) noteform = UserAddForm() localroleform = UserRoleTextForm(prefix="local") if key else None if key: template = 'site/user_mass_add_text.html' if mass else 'site/user_add_text.html' else: template = 'site/user_mass_add.html' if mass else 'site/user_add.html' return render_to_response(template, { 'forms': [userform, userprofileform, userroleform, noteform, localroleform], 'save_name': ungettext(u'Add user', u'Add users', 2 if mass else 1), 'mass': mass, 'text': text, }, context_instance=RequestContext(request))
def logout(request): django_logout(request) display_message(request, _(u"You've been logged out.")) return HttpResponseRedirect(reverse('index'))
def user_list(request): display_suspended_users = get_int(request.GET, 'display', 0) tag_selected = request.GET.get('tag_selected', 0) paginate_by = get_int(request.GET, 'paginate', USER_PAGINATION) order_by = get_among(request.GET, 'order', ( 'user__username', 'user__email', '-user__username', '-user__email', 'role__name', '-role__name', 'user__date_joined', '-user__date_joined', ), 'user__username') UserRole.objects.create_userroles_text(None) if request.method == 'POST': # bulk apply if 'apply' in request.POST and not 'save' in request.POST: action = request.POST.get('action', None) user_profile_keys = get_keys_from_dict(request.POST, 'check-').keys() if action == 'disable': for user_profile_key in user_profile_keys: profile = UserProfile.objects.get(key=user_profile_key) if profile != request.user.get_profile(): profile.is_suspended = True profile.save() display_message( request, _(u"%(count)i User's access suspended") % {'count': len(user_profile_keys)}) if action == 'enable': for user_profile_key in user_profile_keys: profile = UserProfile.objects.get(key=user_profile_key) profile.is_suspended = False profile.save() display_message( request, _(u"%(count)i User's access enabled") % {'count': len(user_profile_keys)}) ROLE_RE = re.compile('role_(\d*)') match = ROLE_RE.match(action) if match: role_id = match.group(1) for user_profile_key in user_profile_keys: user_role = UserRole.objects.get( user__userprofile__key=user_profile_key, text=None) user_role.role_id = role_id user_role.save() display_message( request, _(u"%(count)i user(s) role modified") % {'count': len(user_profile_keys)}) return HttpResponseRedirect(reverse('user')) if 'save' in request.POST: user_profile_keys_roles = get_keys_from_dict( request.POST, 'user-role-') count = 0 for user_profile_key in user_profile_keys_roles: role_id = user_profile_keys_roles[user_profile_key] if not user_profile_key: user_role = UserRole.objects.get(user=None, text=None) else: user_role = UserRole.objects.get( user__userprofile__key=user_profile_key, text=None) if (role_id != u'' or user_role.role_id != None ) and role_id != unicode(user_role.role_id): if role_id: user_role.role_id = int(role_id) else: user_role.role_id = None user_role.save() count += 1 display_message( request, _(u"%(count)i user(s) role modified") % {'count': count}) return HttpResponseRedirect(reverse('user')) try: anon_role = UserRole.objects.get(user=None, text=None).role except UserRole.DoesNotExist: anon_role = None context = { 'anon_role': anon_role, 'all_roles': Role.objects.all(), 'anon_roles': Role.objects.filter(anon=True), 'display_suspended_users': display_suspended_users, 'tag_list': Tag.objects.usage_for_model(UserProfile), 'tag_selected': tag_selected, 'SHOW_EMAILS_IN_ADMIN': SHOW_EMAILS_IN_ADMIN, } query = UserRole.objects.select_related().filter( text=None).filter(~Q(user=None)).order_by(order_by) if not display_suspended_users: query = query.exclude( Q(user__userprofile__is_suspended=True) & Q(user__is_active=True)) else: # trick to include userprofile table anyway (to filter by tags) query = query.filter( Q(user__userprofile__is_suspended=True) | Q(user__userprofile__is_suspended=False)) if tag_selected: tag_ids = Tag.objects.filter(name=tag_selected) if tag_ids: content_type_id = ContentType.objects.get_for_model(UserProfile).pk query = query.extra( where=[ 'tagging_taggeditem.object_id = cm_userprofile.id', 'tagging_taggeditem.content_type_id = %i' % content_type_id, 'tagging_taggeditem.tag_id = %i' % tag_ids[0].id ], tables=['tagging_taggeditem'], ) return object_list( request, query, template_name='site/user_list.html', paginate_by=paginate_by, extra_context=context, )
def dashboard(request): request.session.set_test_cookie() if request.user.is_authenticated(): act_view = { 'view_texts': get_int(request.GET, 'view_texts', 1), 'view_comments': get_int(request.GET, 'view_comments', 1), 'view_users': get_int(request.GET, 'view_users', 1), } paginate_by = get_int(request.GET, 'paginate', ACTIVITY_PAGINATION) # texts with can_view_unapproved_comment perms moderator_texts = get_texts_with_perm(request, 'can_view_unapproved_comment') viewer_texts = get_texts_with_perm(request, 'can_view_approved_comment') all_texts_ids = [t.id for t in moderator_texts ] + [t.id for t in viewer_texts] span = get_among(request.GET, 'span', ( 'day', 'month', 'week', ), 'week') template_dict = { 'span': span, 'last_texts': get_texts_with_perm( request, 'can_view_text').order_by('-modified')[:RECENT_TEXT_NB], 'last_comments': Comment.objects.filter(text_version__text__in=all_texts_ids). order_by('-created')[:RECENT_COMMENT_NB], # TODO: useful? #'last_users' : User.objects.all().order_by('-date_joined')[:5], } template_dict.update(act_view) #selected_activities = [] #[selected_activities.extend(Activity.VIEWABLE_ACTIVITIES[k]) for k in act_view.keys() if act_view[k]] activities = get_viewable_activities(request, act_view) if not has_perm(request, 'can_manage_workspace'): template_dict['to_mod_profiles'] = [] else: template_dict['to_mod_profiles'] = UserProfile.objects.filter( user__is_active=False).filter(is_suspended=True).order_by( '-user__date_joined')[:MODERATE_NB] template_dict['to_mod_comments'] = Comment.objects.filter( state='pending').filter( text_version__text__in=moderator_texts).order_by( '-modified')[:MODERATE_NB - len(template_dict['to_mod_profiles'])] activities = activities.order_by('-created') return object_list( request, activities, template_name='site/dashboard.html', paginate_by=paginate_by, extra_context=template_dict, ) else: if request.method == 'POST': form = AuthenticationForm(request, request.POST) if form.is_valid(): user = form.get_user() user.backend = 'django.contrib.auth.backends.ModelBackend' cm_login(request, user) display_message(request, _(u"You're logged in!")) return HttpResponseRedirect(reverse('index')) else: form = AuthenticationForm() public_texts = get_texts_with_perm( request, 'can_view_text').order_by('-modified') template_dict = { 'form': form, 'public_texts': public_texts, } return render_to_response('site/non_authenticated_index.html', template_dict, context_instance=RequestContext(request))
def password_reset_done(request): display_message( request, _(u'A link to reset your password has been sent to the profile email. Please check your email.' )) return HttpResponseRedirect(reverse('index'))
def _text_create_import(request, createForm): if request.method == 'POST': form = createForm(request.POST, request.FILES) if form.is_valid(): soup = form.cleaned_data['soup'] if not soup.co_ment_text: raise Exception('Bad Soup') # Process attachments first to create new keys. attachments_keys_map = {} if soup.co_ment_text.attachments: for imported_attachement in soup.co_ment_text.attachments.findAll('attachment'): # Creates attachment object. filename = 'imported_attachment' attachment = Attachment.objects.create_attachment(filename=filename, data=b64decode(imported_attachement.data.renderContents()), text_version=None) # Stores key mapping. attachments_keys_map[imported_attachement.key.renderContents()] = attachment.key # Process text. form.cleaned_data['title'] = soup.co_ment_text.title.renderContents() form.cleaned_data['format'] = soup.co_ment_text.format.renderContents() form.cleaned_data['content'] = re.sub(r'^<!\[CDATA\[|\]\]>$', '', soup.co_ment_text.content.renderContents()) form.cleaned_data['name'] = soup.co_ment_text.find('name').renderContents() form.cleaned_data['email'] = soup.co_ment_text.email.renderContents() if soup.co_ment_text.tags: form.cleaned_data['tags'] = soup.co_ment_text.tags.renderContents() # Replaces attachements keys in content. for old_key in attachments_keys_map.keys(): form.cleaned_data['content'] = re.sub(old_key, attachments_keys_map[old_key], form.cleaned_data['content']) form.cleaned_data['content'] = re.sub(r'src="/attach/', 'src="' + settings.SITE_URL + '/attach/', form.cleaned_data['content']) # Creates text. text = create_text(request.user, form.cleaned_data) # Brute updates of dates (cannot do it through django models since fields are set with auto_now or auto_now_add). created = soup.co_ment_text.created.renderContents() modified = soup.co_ment_text.modified.renderContents() cursor = connection.cursor() cursor.execute("UPDATE cm_textversion SET created = %s, modified = %s WHERE id = %s", [created, modified, text.last_text_version_id]) cursor.execute("UPDATE cm_text SET created = %s, modified = %s WHERE id = %s", [created, modified, text.id]) transaction.commit_unless_managed() # Process comments. if soup.co_ment_text.comments: comments_ids_map = {} all_comments = soup.co_ment_text.comments.findAll('comment') # Sort by id in order to have parent processed before reply_to for imported_comment in sorted(all_comments, key=lambda cid: cid.id.renderContents()): # Creates each comment. comment = Comment.objects.create( text_version=text.get_latest_version(), title=imported_comment.title.renderContents(), state=imported_comment.state.renderContents(), name=imported_comment.find('name').renderContents(), email=imported_comment.email.renderContents(), format=imported_comment.format.renderContents(), content=re.sub(r'^<!\[CDATA\[|\]\]>$', '', imported_comment.content.renderContents()), content_html=re.sub(r'^<!\[CDATA\[|\]\]>$', '', imported_comment.content_html.renderContents()), ) # Stores id for reply_to mapping. comments_ids_map[imported_comment.id.renderContents()] = comment # Process boolean and potentially null integer/foreign key attributes. save = False if imported_comment.deleted.renderContents() == 'True': comment.deleted = True save = True if imported_comment.start_wrapper.renderContents() != 'None': comment.start_wrapper = imported_comment.start_wrapper.renderContents() save = True if imported_comment.end_wrapper.renderContents() != 'None': comment.end_wrapper = imported_comment.end_wrapper.renderContents() save = True if imported_comment.start_offset.renderContents() != 'None': comment.start_offset = imported_comment.start_offset.renderContents() save = True if imported_comment.end_offset.renderContents() != 'None': comment.end_offset = imported_comment.end_offset.renderContents() save = True if imported_comment.find('parent'): comment.reply_to = comments_ids_map.get(imported_comment.find('parent').renderContents()) save = True if save: comment.save() # Brute updates of dates (cannot do it through django models since fields are set with auto_now or auto_now_add). created=imported_comment.created.renderContents(), modified=imported_comment.modified.renderContents(), cursor.execute("UPDATE cm_comment SET created = %s, modified = %s WHERE id = %s", [created, modified, comment.id]) transaction.commit_unless_managed() # Logs on activity. register_activity(request, "text_imported", text) display_message(request, _(u'Text "%(text_title)s" has been imported')%{"text_title":text.get_latest_version().title}) return text, HttpResponseRedirect(reverse('text-view', args=[text.key])) else: form = createForm() return None, render_to_response('site/text_create_import.html', {'form' : form}, context_instance=RequestContext(request))
def _text_create_import(request, createForm): if request.method == 'POST': form = createForm(request.POST, request.FILES) if form.is_valid(): soup = form.cleaned_data['soup'] if not soup.co_ment_text: raise Exception('Bad Soup') # Process attachments first to create new keys. attachments_keys_map = {} if soup.co_ment_text.attachments: for imported_attachement in soup.co_ment_text.attachments.findAll( 'attachment'): # Creates attachment object. filename = 'imported_attachment' attachment = Attachment.objects.create_attachment( filename=filename, data=b64decode( imported_attachement.data.renderContents()), text_version=None) # Stores key mapping. attachments_keys_map[imported_attachement.key. renderContents()] = attachment.key # Process text. form.cleaned_data[ 'title'] = soup.co_ment_text.title.renderContents() form.cleaned_data[ 'format'] = soup.co_ment_text.format.renderContents() form.cleaned_data['content'] = re.sub( r'^<!\[CDATA\[|\]\]>$', '', soup.co_ment_text.content.renderContents()) form.cleaned_data['name'] = soup.co_ment_text.find( 'name').renderContents() form.cleaned_data[ 'email'] = soup.co_ment_text.email.renderContents() if soup.co_ment_text.tags: form.cleaned_data[ 'tags'] = soup.co_ment_text.tags.renderContents() # Replaces attachements keys in content. for old_key in attachments_keys_map.keys(): form.cleaned_data['content'] = re.sub( old_key, attachments_keys_map[old_key], form.cleaned_data['content']) form.cleaned_data['content'] = re.sub( r'src="/attach/', 'src="' + settings.SITE_URL + '/attach/', form.cleaned_data['content']) # Creates text. text = create_text(request.user, form.cleaned_data) # Brute updates of dates (cannot do it through django models since fields are set with auto_now or auto_now_add). created = soup.co_ment_text.created.renderContents() modified = soup.co_ment_text.modified.renderContents() cursor = connection.cursor() cursor.execute( "UPDATE cm_textversion SET created = %s, modified = %s WHERE id = %s", [created, modified, text.last_text_version_id]) cursor.execute( "UPDATE cm_text SET created = %s, modified = %s WHERE id = %s", [created, modified, text.id]) transaction.commit_unless_managed() # Process comments. if soup.co_ment_text.comments: comments_ids_map = {} all_comments = soup.co_ment_text.comments.findAll('comment') # Sort by id in order to have parent processed before reply_to for imported_comment in sorted( all_comments, key=lambda cid: cid.id.renderContents()): # Creates each comment. comment = Comment.objects.create( text_version=text.get_latest_version(), title=imported_comment.title.renderContents(), state=imported_comment.state.renderContents(), name=imported_comment.find('name').renderContents(), email=imported_comment.email.renderContents(), format=imported_comment.format.renderContents(), content=re.sub( r'^<!\[CDATA\[|\]\]>$', '', imported_comment.content.renderContents()), content_html=re.sub( r'^<!\[CDATA\[|\]\]>$', '', imported_comment.content_html.renderContents()), ) # Stores id for reply_to mapping. comments_ids_map[ imported_comment.id.renderContents()] = comment # Process boolean and potentially null integer/foreign key attributes. save = False if imported_comment.deleted.renderContents() == 'True': comment.deleted = True save = True if imported_comment.start_wrapper.renderContents( ) != 'None': comment.start_wrapper = imported_comment.start_wrapper.renderContents( ) save = True if imported_comment.end_wrapper.renderContents() != 'None': comment.end_wrapper = imported_comment.end_wrapper.renderContents( ) save = True if imported_comment.start_offset.renderContents( ) != 'None': comment.start_offset = imported_comment.start_offset.renderContents( ) save = True if imported_comment.end_offset.renderContents() != 'None': comment.end_offset = imported_comment.end_offset.renderContents( ) save = True if imported_comment.find('parent'): comment.reply_to = comments_ids_map.get( imported_comment.find('parent').renderContents()) save = True if save: comment.save() # Brute updates of dates (cannot do it through django models since fields are set with auto_now or auto_now_add). created = imported_comment.created.renderContents(), modified = imported_comment.modified.renderContents(), cursor.execute( "UPDATE cm_comment SET created = %s, modified = %s WHERE id = %s", [created, modified, comment.id]) transaction.commit_unless_managed() # Logs on activity. register_activity(request, "text_imported", text) display_message( request, _(u'Text "%(text_title)s" has been imported') % {"text_title": text.get_latest_version().title}) return text, HttpResponseRedirect( reverse('text-view', args=[text.key])) else: form = createForm() return None, render_to_response('site/text_create_import.html', {'form': form}, context_instance=RequestContext(request))
def user_list(request): display_suspended_users = get_int(request.GET, 'display', 0) tag_selected = request.GET.get('tag_selected', 0) paginate_by = get_int(request.GET, 'paginate', USER_PAGINATION) order_by = get_among(request.GET, 'order', ('user__username', 'user__email', '-user__username', '-user__email', 'role__name', '-role__name', 'user__date_joined', '-user__date_joined', ), 'user__username') UserRole.objects.create_userroles_text(None) if request.method == 'POST': # bulk apply if 'apply' in request.POST and not 'save' in request.POST: action = request.POST.get('action', None) user_profile_keys = get_keys_from_dict(request.POST, 'check-').keys() if action == 'disable': for user_profile_key in user_profile_keys: profile = UserProfile.objects.get(key=user_profile_key) if profile != request.user.get_profile(): profile.is_suspended = True profile.save() display_message(request, _(u"%(count)i User's access suspended") % {'count':len(user_profile_keys)}) if action == 'enable': for user_profile_key in user_profile_keys: profile = UserProfile.objects.get(key=user_profile_key) profile.is_suspended = False profile.save() display_message(request, _(u"%(count)i User's access enabled") % {'count':len(user_profile_keys)}) ROLE_RE = re.compile('role_(\d*)') match = ROLE_RE.match(action) if match: role_id = match.group(1) for user_profile_key in user_profile_keys: user_role = UserRole.objects.get(user__userprofile__key=user_profile_key, text=None) user_role.role_id = role_id user_role.save() display_message(request, _(u"%(count)i user(s) role modified") % {'count':len(user_profile_keys)}) return HttpResponseRedirect(reverse('user')) if 'save' in request.POST: user_profile_keys_roles = get_keys_from_dict(request.POST, 'user-role-') count = 0 for user_profile_key in user_profile_keys_roles: role_id = user_profile_keys_roles[user_profile_key] if not user_profile_key: user_role = UserRole.objects.get(user=None, text=None) else: user_role = UserRole.objects.get(user__userprofile__key=user_profile_key, text=None) if (role_id != u'' or user_role.role_id != None) and role_id != unicode(user_role.role_id): if role_id: user_role.role_id = int(role_id) else: user_role.role_id = None user_role.save() count += 1 display_message(request, _(u"%(count)i user(s) role modified") % {'count':count}) return HttpResponseRedirect(reverse('user')) try: anon_role = UserRole.objects.get(user=None, text=None).role except UserRole.DoesNotExist: anon_role = None context = { 'anon_role' : anon_role, 'all_roles' : Role.objects.all(), 'anon_roles' : Role.objects.filter(anon=True), 'display_suspended_users' : display_suspended_users, 'tag_list' : Tag.objects.usage_for_model(UserProfile), 'tag_selected': tag_selected, 'SHOW_EMAILS_IN_ADMIN': SHOW_EMAILS_IN_ADMIN, } query = UserRole.objects.select_related().filter(text=None).filter(~Q(user=None)).order_by(order_by) if not display_suspended_users: query = query.exclude(Q(user__userprofile__is_suspended=True) & Q(user__is_active=True)) else: # trick to include userprofile table anyway (to filter by tags) query = query.filter(Q(user__userprofile__is_suspended=True) | Q(user__userprofile__is_suspended=False)) if tag_selected: tag_ids = Tag.objects.filter(name=tag_selected) if tag_ids: content_type_id = ContentType.objects.get_for_model(UserProfile).pk query = query.extra(where=['tagging_taggeditem.object_id = cm_userprofile.id', 'tagging_taggeditem.content_type_id = %i' %content_type_id, 'tagging_taggeditem.tag_id = %i' %tag_ids[0].id], tables=['tagging_taggeditem'], ) return object_list(request, query, template_name='site/user_list.html', paginate_by=paginate_by, extra_context=context, )