| author | ymh <ymh.work@gmail.com> |
| Mon, 20 May 2013 18:02:37 +0200 | |
| changeset 1191 | b6e0b1811723 |
| parent 1190 | 129d45eec68c |
| permissions | -rw-r--r-- |
| 269 | 1 |
from django import forms |
| 1191 | 2 |
from django.contrib.auth import get_user_model |
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 | 5 |
|
| 1191 | 6 |
User = get_user_model() |
7 |
||
| 269 | 8 |
class LazyMultipleChoiceField(forms.MultipleChoiceField): |
9 |
||
10 |
def validate(self, value): |
|
11 |
pass |
|
12 |
||
13 |
class ShareForm(forms.ModelForm): |
|
14 |
read_list = LazyMultipleChoiceField(required=False, widget=MultipleHiddenInput()) |
|
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 | 17 |
|
18 |
def clean(self): |
|
| 271 | 19 |
super(ShareForm, self).clean() |
20 |
||
21 |
try: |
|
22 |
read_list = self.data.getlist("read_list") |
|
23 |
write_list = self.data.getlist("write_list") |
|
24 |
except AttributeError: |
|
25 |
# This will be raised for content creation. As data is preprocessed, self.data |
|
26 |
# is a dict and not a querydict, so getlist won't work |
|
27 |
read_list = self.data.get('read_list', []) |
|
28 |
write_list = self.data.get('write_list', []) |
|
| 269 | 29 |
|
30 |
elems = read_list + write_list |
|
31 |
users = [e.split('-')[0] for e in elems if e.split('-')[1] == 'user' ] |
|
32 |
groups = [e.split('-')[0] for e in elems if e.split('-')[1] == 'group' ] |
|
33 |
||
34 |
users = User.objects.filter(id__in=users) |
|
35 |
groups = Group.objects.filter(id__in=groups) |
|
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 | 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 | 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 | 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 | 45 |
return new_list |
| 295 | 46 |
|
| 271 | 47 |
new_read_list = create_real_lists(read_list, users, groups) |
| 269 | 48 |
new_write_list = create_real_lists(write_list, users, groups) |
49 |
||
50 |
self.cleaned_data["read_list"] = new_read_list |
|
51 |
self.cleaned_data["write_list"] = new_write_list |
|
| 295 | 52 |
|
53 |
if self.data.get("share", False) == "True": |
|
54 |
self.cleaned_data["share"] = True |
|
55 |
else: |
|
56 |
self.cleaned_data["share"] = False |
|
| 269 | 57 |
return self.cleaned_data |