# HG changeset patch # User verrierj # Date 1321353624 -3600 # Node ID b738eb0717de5aa6d0617d32abdbb41762d48954 # Parent 2c37496369dbf02971d5e253d970abe743dc0066 Improved forms about group management diff -r 2c37496369db -r b738eb0717de src/ldt/ldt/ldt_utils/forms.py --- a/src/ldt/ldt/ldt_utils/forms.py Thu Nov 10 14:47:16 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/forms.py Tue Nov 15 11:40:24 2011 +0100 @@ -23,7 +23,7 @@ class PermissionForm(forms.Form): share = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class':'checkbox_group'})) - perms = forms.CharField(widget=forms.HiddenInput(attrs={'class':'perm_field'})) + perms = forms.CharField(required=False, widget=forms.HiddenInput(attrs={'class':'perm_field'})) group = forms.IntegerField(required=False, widget=forms.HiddenInput()) class ReindexForm(forms.Form): @@ -76,8 +76,7 @@ 'all' : ('admin/css/forms.css', 'admin/css/base.css', 'admin/css/widgets.css') } -class MediaForm(forms.ModelForm): - +class MediaForm(forms.ModelForm): media_creation_date = forms.SplitDateTimeField(widget=ldt_widgets.LdtSplitDateTime, required=False) media_file = forms.FileField(required=False); src = forms.CharField(required=False, max_length=1024) diff -r 2c37496369db -r b738eb0717de src/ldt/ldt/ldt_utils/middleware/security.py --- a/src/ldt/ldt/ldt_utils/middleware/security.py Thu Nov 10 14:47:16 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/middleware/security.py Tue Nov 15 11:40:24 2011 +0100 @@ -10,9 +10,9 @@ # !! Will not work with concurrent requests def process_request(self, request): - protect_models(request.user) + protect_models(request) def process_response(self, request, response): - unprotect_models() + unprotect_models(request) return response \ No newline at end of file diff -r 2c37496369db -r b738eb0717de src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html Thu Nov 10 14:47:16 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html Tue Nov 15 11:40:24 2011 +0100 @@ -1,3 +1,4 @@ + {% extends "ldt/ldt_raw_base.html" %} {% load i18n %} @@ -70,7 +71,7 @@ {% block body %}
| c | + + {% if group.can_change %} +c | {{ group.name }} | {% else %} -l | +l | {{ group.name }} | {% endif %}![]() |
diff -r 2c37496369db -r b738eb0717de src/ldt/ldt/ldt_utils/views.py
--- a/src/ldt/ldt/ldt_utils/views.py Thu Nov 10 14:47:16 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/views.py Tue Nov 15 11:40:24 2011 +0100
@@ -20,6 +20,7 @@
from forms import (LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm,
ContentForm, MediaForm, GroupAddForm, PermissionForm)
from guardian.shortcuts import assign, remove_perm, get_perms, get_objects_for_group
+from guardian.core import ObjectPermissionChecker
from ldt.ldt_utils.models import Content
from ldt.ldt_utils.utils import boolean_convert, LdtUtils, LdtSearch
from ldt.ldt_utils.security import assign_project_to_groups
@@ -60,12 +61,17 @@
'is_gecko': is_gecko},
context_instance=RequestContext(request))
-
@login_required
def groups(request):
# get list of all published projects
group_list = request.user.groups #@UndefinedVariable
+ checker = ObjectPermissionChecker(request.user)
+
+ group_list = list(group_list.all())
+ for group in group_list:
+ if checker.has_perm('change_group', group):
+ group.can_change = True
is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
@@ -789,15 +795,10 @@
permission_formset = formset_factory(PermissionForm, extra=0)
project = get_object_or_404(Project, ldt_id=ldt_id)
contents = project.contents.all()
- groups = request.user.groups.all()
+ groups = request.user.groups.all()
- for g in groups:
- list_perms = get_perms(g, project)
- if 'view_project' in list_perms:
- g.member = True
- if 'change_project' in list_perms:
- g.change = True
-
+ management_form = None
+
if request.method == "POST" :
submit_action = request.REQUEST.get("submit_button", False)
if submit_action == "prepare_delete":
@@ -817,11 +818,12 @@
form = AddProjectForm()
group_form = permission_formset()
else:
- form_status = 'saved'
+ form_status = 'saved'
form = AddProjectForm(request.POST)
group_form = permission_formset(request.POST)
if form.is_valid() and group_form.is_valid():
+
if project.title != form.cleaned_data['title'] or project.description != form.cleaned_data['description']:
project.title = form.cleaned_data['title']
project.description = form.cleaned_data['description']
@@ -830,7 +832,7 @@
res[0].set("title", project.title)
res[0].set("abstract", project.description)
project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
- project.save()
+ project.save()
assign_project_to_groups(project, group_form.cleaned_data)
else:
@@ -838,18 +840,22 @@
perm_list = []
for group in groups:
- perm_list.append({'share': False, 'perms': 'read', 'group': group.id })
+ group_perms = get_perms(group, project)
+ share = False
+ perm = None
+ if 'view_project' in group_perms:
+ share = True
+ perm = 'read'
+ if 'change_project' in group_perms:
+ perm = 'write'
+
+ perm_list.append({'share': share, 'perms': perm, 'group': group.id })
permission = permission_formset(initial=perm_list)
management_form = permission.management_form
+ group_form = zip(permission, groups)
form_status = 'none'
-
- if form_status == 'none':
- group_form = zip(permission, groups)
- else:
- management_form = None
-
-
+
return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'groups': groups,
'ldt_id': ldt_id, 'contents':contents, 'group_form': group_form, 'management_form': management_form,
'create_project_action':reverse("ldt.ldt_utils.views.update_project", args=[ldt_id])}, context_instance=RequestContext(request))
@@ -1259,23 +1265,23 @@
admin_list = form.cleaned_data['admin_list']
group.name = name
- for user in User.objects.all():
+ for user in User.objects.all().exclude(username=request.user.username):
if user in members_list:
group.user_set.add(user)
if user in admin_list:
- assign('change_group', request.user, group)
+ assign('change_group', user, group)
else:
- remove_perm('change_group', request.user, group)
+ remove_perm('change_group', user, group)
else:
group.user_set.remove(user)
- group.user_set.add(user)
+ remove_perm('change_group', user, group)
+
group.save()
form_status = 'saved'
else:
form = GroupAddForm(initial={'name':unicode(group.name), 'members_list':members_list})
-
return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status, 'user_list' : user_list}, context_instance=RequestContext(request))
@login_required