# HG changeset patch # User verrierj # Date 1323956303 -3600 # Node ID 1cc364d7b298c11741e53e7f57873ac77a2dcc9f # Parent e34db010e45c982ac5d835d9254b5c60a5b3fdf0 Fix bug in project copy from group tab diff -r e34db010e45c -r 1cc364d7b298 src/ldt/ldt/ldt_utils/forms.py --- a/src/ldt/ldt/ldt_utils/forms.py Wed Dec 14 12:22:34 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/forms.py Thu Dec 15 14:38:23 2011 +0100 @@ -20,11 +20,6 @@ model = Project exclude = ("ldt_id", "ldt", "created_by", "changed_by", "creation_date", "modification_date", "state", "owner") -class PermissionForm(forms.Form): - share = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class':'checkbox_group'})) - perms = forms.CharField(required=False, widget=forms.HiddenInput(attrs={'class':'perm_field'})) - group = forms.IntegerField(required=False, widget=forms.HiddenInput()) - class ReindexForm(forms.Form): contents = forms.ModelMultipleChoiceField(Content.objects.all()) index_projects = forms.BooleanField(required=False, initial=False) @@ -44,7 +39,7 @@ class CopyProjectForm (forms.Form): title = forms.CharField() - group = forms.IntegerField() + group = forms.IntegerField(required=False) class ContentForm(ShareForm): iriurl = forms.CharField(max_length=1024, widget=forms.HiddenInput, required=False) diff -r e34db010e45c -r 1cc364d7b298 src/ldt/ldt/ldt_utils/models.py --- a/src/ldt/ldt/ldt_utils/models.py Wed Dec 14 12:22:34 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/models.py Thu Dec 15 14:38:23 2011 +0100 @@ -441,7 +441,7 @@ return False def save(self): - if self.ldt: + if self.pk and self.ldt: doc = lxml.etree.fromstring(self.ldt) new_contents = [] contents = doc.xpath("/iri/medias/media") diff -r e34db010e45c -r 1cc364d7b298 src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html Wed Dec 14 12:22:34 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html Thu Dec 15 14:38:23 2011 +0100 @@ -22,12 +22,14 @@ {% endfor %} + {% if not user.is_superuser %} {% trans "Projects shared with me only" %} + {% endif %} \ No newline at end of file diff -r e34db010e45c -r 1cc364d7b298 src/ldt/ldt/ldt_utils/views.py --- a/src/ldt/ldt/ldt_utils/views.py Wed Dec 14 12:22:34 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/views.py Thu Dec 15 14:38:23 2011 +0100 @@ -139,9 +139,10 @@ @login_required -def projects_filter(request, filter, is_owner=False, status=0, id_group=None): +def projects_filter(request, filter, is_owner=False, status=0, id_group=0): is_owner = boolean_convert(is_owner) status = int(status) + id_group = int(id_group) query = Q() if is_owner: @@ -161,14 +162,16 @@ query &= Q(title__icontains=filter) is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); - show_username = False + show_username = True - if id_group > 0: + if id_group > 0: # Search inside a group grp = Group.objects.get(id=id_group) project_list = get_objects_for_group(grp, 'ldt_utils.view_project').filter(query) - show_username = True + elif id_group == -1:# Search inside projects shared with a specific user + project_list = get_objects_for_user(request.user, 'ldt_utils.view_project', use_groups=False).exclude(owner=request.user) else: project_list = Project.safe_objects.filter(query) + show_username = False project_list = add_change_attr(request.user, project_list) @@ -260,7 +263,6 @@ results = get_results_with_context(field, search) complete_results = [] proj_list = Project.safe_objects.all() - results.sort(key=lambda k: k['iri_id']) for iri_id, item in groupby(results, itemgetter('iri_id')): try: @@ -268,23 +270,23 @@ except Content.DoesNotExist: continue segments = list(item) - i = 0 + to_delete = [] for s in segments: if not s['project_id']: s['project_id'] = '_' else: project = proj_list.filter(ldt_id=s['project_id']) - if not project: - segments.pop(i) - i += 1 + if len(project) == 0: + to_delete.append(s) + + for e in to_delete: + segments.remove(e) + if not segments: continue score = sum([seg['score'] for seg in segments]) - if content.description == None: - desc = '' - else: - desc = content.description + desc = content.description if content.description else '' complete_results.append({'list' : segments, 'score' : score, 'content_title' : content.title, 'content_id' : content.iri_id, 'content_description' : desc }) complete_results.sort(key=lambda k: k['score']) @@ -907,15 +909,16 @@ 'create_project_action':reverse("ldt.ldt_utils.views.update_project", args=[ldt_id])}, context_instance=RequestContext(request)) @login_required -def copy_project(request, ldt_id, group_id=None): +def copy_project(request, ldt_id, group_id=0): project = get_object_or_404(Project.safe_objects, ldt_id=ldt_id) if request.method == "POST" : form = CopyProjectForm(request.POST) + if form.is_valid(): user = request.user group_id = form.cleaned_data['group'] - group = Group.objects.get(id=group_id) if group_id else None + group = Group.objects.get(id=group_id) if group_id and group_id > 0 else None project = project.copy_project(title=form.cleaned_data['title'], user=user, group=group) is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); if is_gecko: @@ -923,7 +926,7 @@ else: return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id])) else: - form = CopyProjectForm + form = CopyProjectForm() # Modal window is not used with firefox, so we ask to submit the form in _parent in firefox case. target_parent = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project, 'group_id':group_id, 'target_parent':target_parent}, context_instance=RequestContext(request)) @@ -1096,7 +1099,7 @@ media.mimetype_field = mimetype cached_assign('view_media', request.user, media) cached_assign('change_media', request.user, media) - media.save() + media.save() if form_status != "error": content_defaults = {} @@ -1107,7 +1110,8 @@ del content_defaults[key] content, created = Content.safe_objects.get_or_create(iri_id=content_form.cleaned_data['iri_id'], defaults=content_defaults) #@UndefinedVariable - + if not created: + content.save() # Check if user is allowed to change object before assigning permissions. cached_assign('change_content', request.user, content) cached_assign('view_content', request.user, content) everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME) @@ -1266,12 +1270,13 @@ # Get group, user and project_list grp_id = request.POST["id_group"] if grp_id == "-1": - project_list = get_objects_for_user(request.user, 'ldt_utils.view_project', use_groups=False) + project_list = get_objects_for_user(request.user, 'ldt_utils.view_project', use_groups=False).exclude(owner=request.user) else: grp = Group.objects.get(id=grp_id) everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME) project_list = get_objects_for_group(grp, 'ldt_utils.view_project') | get_objects_for_group(everyone, 'ldt_utils.view_project').filter(owner__in=[grp]) - #project_list = add_change_attr(request.user, project_list) + + project_list = add_change_attr(request.user, project_list) is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); diff -r e34db010e45c -r 1cc364d7b298 src/ldt/ldt/security/cache.py --- a/src/ldt/ldt/security/cache.py Wed Dec 14 12:22:34 2011 +0100 +++ b/src/ldt/ldt/security/cache.py Thu Dec 15 14:38:23 2011 +0100 @@ -13,7 +13,7 @@ return checker checker = ObjectPermissionChecker(user) - cache.set(key_name, checker, 30) + cache.set(key_name, checker) return checker diff -r e34db010e45c -r 1cc364d7b298 src/ldt/ldt/security/utils.py --- a/src/ldt/ldt/security/utils.py Wed Dec 14 12:22:34 2011 +0100 +++ b/src/ldt/ldt/security/utils.py Thu Dec 15 14:38:23 2011 +0100 @@ -149,7 +149,7 @@ if hasattr(object, 'is_public') and object.is_public: return [None, None] - users = get_users_with_perms(object, attach_perms=True) + users = get_users_with_perms(object, attach_perms=True, with_group_users=False) groups = get_groups_with_perms(object, attach_perms=True) object_name = object.__class__.__name__.lower() @@ -179,7 +179,7 @@ groups_list, admin_groups = create_dict(groups, object_name, True) return [users_list + groups_list, admin_users + admin_groups] - + def get_userlist_group(group, user): members = group.user_set.all() admin = get_users_with_perms(group)