Add a group to contain published projects
authorverrierj
Wed, 23 Nov 2011 13:55:23 +0100
changeset 247 f98f1a6e15f1
parent 246 f76edbe6d06b
child 248 bc86d130b834
Add a group to contain published projects
src/ldt/ldt/ldt_utils/models.py
src/ldt/ldt/ldt_utils/views.py
src/ldt/ldt/settings.py
src/ldt/ldt/user/models.py
web/ldtplatform/config.py.tmpl
--- 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
--- 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);
     
--- 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'
 
 
--- 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): 
--- 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'