--- 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'