示例#1
0
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))
示例#2
0
文件: create.py 项目: ovnicraft/comt
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))
示例#3
0
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))
示例#4
0
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))
示例#5
0
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))
示例#6
0
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))
示例#7
0
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))
示例#8
0
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'))
示例#9
0
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))
示例#10
0
文件: user.py 项目: ovnicraft/comt
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))
示例#11
0
文件: user.py 项目: debon/comt
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('')
示例#12
0
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('')
示例#13
0
文件: user.py 项目: debon/comt
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))
示例#14
0
文件: user.py 项目: debon/comt
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('')
示例#15
0
文件: user.py 项目: debon/comt
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))
示例#16
0
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))
示例#17
0
文件: create.py 项目: ovnicraft/comt
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))
示例#18
0
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))
示例#19
0
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))
示例#20
0
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('')
示例#21
0
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))
示例#22
0
文件: user.py 项目: debon/comt
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))
示例#23
0
文件: user.py 项目: ovnicraft/comt
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')
示例#24
0
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))
示例#25
0
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))
示例#26
0
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))
示例#27
0
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))
示例#28
0
文件: user.py 项目: debon/comt
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))
示例#29
0
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))
示例#30
0
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('')
示例#31
0
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))
示例#32
0
文件: user.py 项目: debon/comt
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')
示例#33
0
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('')
示例#34
0
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))
示例#35
0
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))
示例#36
0
文件: user.py 项目: debon/comt
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))
示例#37
0
文件: user.py 项目: debon/comt
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))
示例#38
0
文件: user.py 项目: debon/comt
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))
示例#39
0
文件: user.py 项目: debon/comt
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'))
示例#40
0
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'))
示例#41
0
def password_reset_complete(request):
    display_message(request, _(u'Password changed'))
    return HttpResponseRedirect(reverse('index'))
示例#42
0
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))
示例#43
0
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))
示例#44
0
文件: user.py 项目: debon/comt
def logout(request):
    django_logout(request)
    display_message(request, _(u"You've been logged out."))
    return HttpResponseRedirect(reverse('index'))
示例#45
0
def password_reset_complete(request):
    display_message(request, _(u'Password changed'))
    return HttpResponseRedirect(reverse('index'))
示例#46
0
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,
    )
示例#47
0
def logout(request):
    django_logout(request)
    display_message(request, _(u"You've been logged out."))
    return HttpResponseRedirect(reverse('index'))
示例#48
0
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))
示例#49
0
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'))
示例#50
0
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))
示例#51
0
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))
示例#52
0
文件: user.py 项目: debon/comt
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,
                       )