src/ldt/ldt/security/forms.py
author veltr
Fri, 26 Oct 2012 18:38:28 +0200
branchnew_rest_api
changeset 878 4a5c54368447
parent 295 454449cd5e11
child 1190 129d45eec68c
permissions -rw-r--r--
Adapted Metadataplayer to send Title and Description
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
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     2
from django.contrib.auth.models import User, Group
293
4fd110c8fa26 Projects and contents can be shared or not during edition and creation
verrierj
parents: 274
diff changeset
     3
from django.forms.widgets import HiddenInput, MultipleHiddenInput
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     4
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     5
class LazyMultipleChoiceField(forms.MultipleChoiceField):
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     6
    
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     7
    def validate(self, value):
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
     8
        pass    
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
class ShareForm(forms.ModelForm):
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    11
    read_list = LazyMultipleChoiceField(required=False, widget=MultipleHiddenInput())
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    12
    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
    13
    share = forms.BooleanField(required=False, initial=False, widget=HiddenInput())
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    14
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    15
    def clean(self):
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    16
        super(ShareForm, self).clean()
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    17
        
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    18
        try: 
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    19
            read_list = self.data.getlist("read_list")
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    20
            write_list = self.data.getlist("write_list")
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    21
        except AttributeError:
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    22
            # 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
    23
            # is a dict and not a querydict, so getlist won't work
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    24
            read_list = self.data.get('read_list', [])
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    25
            write_list = self.data.get('write_list', [])
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    26
        
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    27
        elems = read_list + write_list
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    28
        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
    29
        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
    30
        
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    31
        users = User.objects.filter(id__in=users)
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    32
        groups = Group.objects.filter(id__in=groups)
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
        def create_real_lists(list, users, groups):
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    35
            new_list = []
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    36
            for e in list:
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    37
                id, cls_name = e.split('-')
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    38
                if cls_name == 'user':
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    39
                    new_list.append(users.get(id=id))
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    40
                elif cls_name == 'group':
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    41
                    new_list.append(groups.get(id=id))
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    42
            return new_list
295
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    43
        
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
    44
        new_read_list = create_real_lists(read_list, users, groups)        
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    45
        new_write_list = create_real_lists(write_list, users, groups)
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    46
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    47
        self.cleaned_data["read_list"] = new_read_list
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    48
        self.cleaned_data["write_list"] = new_write_list
295
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    49
        
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    50
        if self.data.get("share", False) == "True":
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    51
            self.cleaned_data["share"] = True
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    52
        else:
454449cd5e11 Fix bug in Shareform
verrierj
parents: 293
diff changeset
    53
            self.cleaned_data["share"] = False
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents:
diff changeset
    54
        return self.cleaned_data