# HG changeset patch # User verrierj # Date 1322052923 -3600 # Node ID f98f1a6e15f160f13f8baafd347ba8dd47112a84 # Parent f76edbe6d06b96aa548c01e5bf476c0bb7f4a604 Add a group to contain published projects diff -r f76edbe6d06b -r f98f1a6e15f1 src/ldt/ldt/ldt_utils/models.py --- a/src/ldt/ldt/ldt_utils/models.py Wed Nov 23 11:01:47 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/models.py Wed Nov 23 13:55:23 2011 +0100 @@ -1,10 +1,10 @@ from django.conf import settings -from django.contrib.auth.models import User +from django.contrib.auth.models import User, Group from django.db import models from django.utils.translation import ugettext_lazy as _ #from ldt.core.models import Document, Owner from ldt.core.models import Document -from guardian.shortcuts import assign +from guardian.shortcuts import assign, remove_perm import ldt.indexation from ldt.security.models import SafeModel from ldt.security.manager import SafeManager @@ -402,6 +402,18 @@ project.save() return project + def publish(self): + self.state = 2 + everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME) + assign('ldt_utils.view_project', everyone, self) + self.save() + + def unpublish(self): + self.state = 1 + everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME) + remove_perm('ldt_utils.view_project', everyone, self) + self.save() + def check_access(self, user): if (user and user.is_staff) or self.state == 2: return True diff -r f76edbe6d06b -r f98f1a6e15f1 src/ldt/ldt/ldt_utils/views.py --- a/src/ldt/ldt/ldt_utils/views.py Wed Nov 23 11:01:47 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/views.py Wed Nov 23 13:55:23 2011 +0100 @@ -65,7 +65,7 @@ def groups(request): # get list of all published projects - group_list = request.user.groups #@UndefinedVariable + group_list = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME) #@UndefinedVariable checker = ObjectPermissionChecker(request.user) group_list = list(group_list.all()) @@ -86,7 +86,7 @@ def published_project(request): # get list of all published projects - project_list = Project.objects.filter(state=2) #@UndefinedVariable + project_list = Project.safe_objects.filter(state=2) #@UndefinedVariable # Search form form = SearchForm() @@ -218,7 +218,7 @@ else: results = get_results_with_context(field, search) complete_results = [] - checker = ObjectPermissionChecker(request.user) + proj_list = Project.safe_objects.all() results.sort(key=lambda k: k['iri_id']) for iri_id, item in groupby(results, itemgetter('iri_id')): @@ -232,19 +232,20 @@ if not s['project_id']: s['project_id'] = '_' else: - project = Project.objects.get(ldt_id=s['project_id']) - if not checker.has_perm('view_project', project): + project = proj_list.filter(ldt_id=s['project_id']) + if not project: segments.pop(i) i += 1 if not segments: continue - + score = sum([seg['score'] for seg in segments]) if content.description == None: desc = '' else: desc = content.description 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']) request.session['complete_results'] = complete_results @@ -333,7 +334,7 @@ # id_list = filter(lambda id: id in id_list, ids_editions) contentList = Content.objects.filter(iri_id__in=id_list) #@UndefinedVariable - projectList = Project.safe_objects.filter(ldt_id__in=projId_list); + projectList = Project.safe_objects.filter(ldt_id__in=projId_list) ldtgen = LdtUtils() @@ -373,7 +374,7 @@ seg.set('idseg', resultMap['element_id']) seg.set('idvue', "") seg.set('crit', "") - + #return doc return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8") @@ -409,7 +410,7 @@ form = LdtAddForm(request.POST) form_status = "none" contents = Content.safe_objects.all() - groups = request.user.groups.all() + groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME) group_form = permission_formset(request.POST) management_form = None @@ -456,6 +457,7 @@ def init_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id): if project_id != u"_": + assert False, project_id get_object_or_404(Project.safe_objects, ldt_id=project_id) ldtgen = LdtUtils() @@ -739,8 +741,7 @@ @login_required def publish(request, id, redirect=True): ldt = get_object_or_404(Project.safe_objects, ldt_id=id) - ldt.state = 2 - ldt.save() + ldt.publish() redirect = boolean_convert(redirect) if redirect: return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt")) @@ -750,8 +751,7 @@ @login_required def unpublish(request, id, redirect=True): ldt = get_object_or_404(Project.safe_objects, ldt_id=id) - ldt.state = 1 - ldt.save() + ldt.unpublish() redirect = boolean_convert(redirect) if redirect: return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt")) @@ -791,7 +791,7 @@ content = get_object_or_404(Content.safe_objects, iri_id=iri_id) contents = [ content, ] - groups = request.user.groups.all() + groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME) if request.method == "POST" : form = AddProjectForm(request.POST) if form.is_valid(): @@ -814,7 +814,7 @@ permission_formset = formset_factory(PermissionForm, extra=0) project = get_object_or_404(Project.safe_objects, ldt_id=ldt_id) contents = project.contents.all() - groups = request.user.groups.all() + groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME) management_form = None @@ -1211,7 +1211,8 @@ # Get group, user and project_list grp = Group.objects.get(id=request.POST["id_group"]) #@UndefinedVariable - project_list = get_objects_for_group(grp, 'ldt_utils.view_project') | Project.objects.filter(state=2).filter(owner__in=[grp]) + 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') is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); diff -r f76edbe6d06b -r f98f1a6e15f1 src/ldt/ldt/settings.py --- a/src/ldt/ldt/settings.py Wed Nov 23 11:01:47 2011 +0100 +++ b/src/ldt/ldt/settings.py Wed Nov 23 13:55:23 2011 +0100 @@ -83,5 +83,6 @@ WEB_VERSION = getattr(settings, 'WEB_VERSION', '') ANONYOUS_USER_ID = -1 USE_GROUP_PERMISSIONS = ['Project', 'Content'] +PUBLIC_GROUP_NAME = 'everyone' diff -r f76edbe6d06b -r f98f1a6e15f1 src/ldt/ldt/user/models.py --- a/src/ldt/ldt/user/models.py Wed Nov 23 11:01:47 2011 +0100 +++ b/src/ldt/ldt/user/models.py Wed Nov 23 13:55:23 2011 +0100 @@ -27,7 +27,8 @@ else: new_user.set_unusable_password() new_user.save() - return new_user + new_user.groups.add(Group.objects.get(name=settings.PUBLIC_GROUP_NAME)) + return new_user class UserProfile (models.Model): diff -r f76edbe6d06b -r f98f1a6e15f1 web/ldtplatform/config.py.tmpl --- a/web/ldtplatform/config.py.tmpl Wed Nov 23 11:01:47 2011 +0100 +++ b/web/ldtplatform/config.py.tmpl Wed Nov 23 13:55:23 2011 +0100 @@ -84,4 +84,5 @@ AUTO_INDEX_AFTER_SAVE = True USE_GROUP_PERMISSIONS = ['Project', 'Content'] -FORBIDDEN_STREAM_URL = "rtmp://" +FORBIDDEN_STREAM_URL = "empty-video" +PUBLIC_GROUP_NAME = 'everyone'