src/ldt/ldt/security/forms.py
author ymh <ymh.work@gmail.com>
Mon, 20 May 2013 18:02:37 +0200
changeset 1191 b6e0b1811723
parent 1190 129d45eec68c
permissions -rw-r--r--
Migrate to django 1.5 : - migrate the user profile - do sme cleaning
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     1
from django import forms
1191
b6e0b1811723 Migrate to django 1.5 :
ymh <ymh.work@gmail.com>
parents: 1190
diff changeset
     2
from django.contrib.auth import get_user_model
b6e0b1811723 Migrate to django 1.5 :
ymh <ymh.work@gmail.com>
parents: 1190
diff changeset
     3
from django.contrib.auth.models import Group
293
4fd110c8fa26 Projects and contents can be shared or not during edition and creation
verrierj
parents: 274
diff changeset
     4
from django.forms.widgets import HiddenInput, MultipleHiddenInput
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     5
1191
b6e0b1811723 Migrate to django 1.5 :
ymh <ymh.work@gmail.com>
parents: 1190
diff changeset
     6
User = get_user_model()
b6e0b1811723 Migrate to django 1.5 :
ymh <ymh.work@gmail.com>
parents: 1190
diff changeset
     7
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     8
class LazyMultipleChoiceField(forms.MultipleChoiceField):
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     9
    
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    10
    def validate(self, value):
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    11
        pass    
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    12
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    13
class ShareForm(forms.ModelForm):
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    14
    read_list = LazyMultipleChoiceField(required=False, widget=MultipleHiddenInput())
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    15
    write_list = LazyMultipleChoiceField(required=False, widget=MultipleHiddenInput()) 
293
4fd110c8fa26 Projects and contents can be shared or not during edition and creation
verrierj
parents: 274
diff changeset
    16
    share = forms.BooleanField(required=False, initial=False, widget=HiddenInput())
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    17
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    18
    def clean(self):
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    19
        super(ShareForm, self).clean()
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    20
        
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    21
        try: 
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    22
            read_list = self.data.getlist("read_list")
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    23
            write_list = self.data.getlist("write_list")
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    24
        except AttributeError:
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    25
            # This will be raised for content creation. As data is preprocessed, self.data
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    26
            # is a dict and not a querydict, so getlist won't work
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    27
            read_list = self.data.get('read_list', [])
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    28
            write_list = self.data.get('write_list', [])
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    29
        
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    30
        elems = read_list + write_list
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    31
        users = [e.split('-')[0] for e in elems if e.split('-')[1] == 'user' ]
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    32
        groups = [e.split('-')[0] for e in elems if e.split('-')[1] == 'group' ]
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    33
        
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    34
        users = User.objects.filter(id__in=users)
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    35
        groups = Group.objects.filter(id__in=groups)
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    36
        
1190
129d45eec68c Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents: 295
diff changeset
    37
        def create_real_lists(r_list, users, groups):
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    38
            new_list = []
1190
129d45eec68c Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents: 295
diff changeset
    39
            for e in r_list:
129d45eec68c Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents: 295
diff changeset
    40
                obj_id, cls_name = e.split('-')
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    41
                if cls_name == 'user':
1190
129d45eec68c Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents: 295
diff changeset
    42
                    new_list.append(users.get(id=obj_id))
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    43
                elif cls_name == 'group':
1190
129d45eec68c Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents: 295
diff changeset
    44
                    new_list.append(groups.get(id=obj_id))
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    45
            return new_list
295
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    46
        
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    47
        new_read_list = create_real_lists(read_list, users, groups)        
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    48
        new_write_list = create_real_lists(write_list, users, groups)
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    49
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    50
        self.cleaned_data["read_list"] = new_read_list
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    51
        self.cleaned_data["write_list"] = new_write_list
295
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    52
        
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    53
        if self.data.get("share", False) == "True":
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    54
            self.cleaned_data["share"] = True
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    55
        else:
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    56
            self.cleaned_data["share"] = False
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    57
        return self.cleaned_data