--- 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)
--- 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")
--- 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 @@
</tr>
{% endfor %}
+ {% if not user.is_superuser %}
<tr class="imageline {% cycle color_cycle %} update_group_projects" id="-1">
<td class="cellimg"></td>
<td>{% trans "Projects shared with me only" %}</td>
<td class="align_right"><img src="{{LDT_MEDIA_PREFIX}}/img/control_play.png" class="next_icon"/></td>
</tr>
+ {% endif %}
</tbody>
</table>
\ No newline at end of file
--- 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);
--- 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
--- 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)