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