+
FILTRER
diff -r bc700c2cd9f3 -r 1f24f33b41e1 src/spel/templatetags/spel_tags.py
--- a/src/spel/templatetags/spel_tags.py Thu May 15 15:29:21 2014 +0200
+++ b/src/spel/templatetags/spel_tags.py Thu May 15 17:55:50 2014 +0200
@@ -38,7 +38,7 @@
continue
if t[:t.index(":")]=="modalites_sceniques" or t[:t.index(":")]=="personnages":
val.append(t[t.index(":")+2:])
- elif arg in ["type_inter", "personnages", "ref_text"]:
+ elif arg in ["type_inter", "personnages", "ref_text", "opera_modalites_sceniques", "opera_personnages", "opera_type_travail", "opera_acte", "opera_scene", "opera_mesure"]:
for t in a:
try:
t.index(":")
@@ -83,3 +83,16 @@
return value[value.index(":")+2:]
remove_tag_key.is_safe = True
+@register.filter
+def remove_opera(value):
+ """ Takes a string as 'opera_key: value' and returns the 'key: value' """
+ # Error management
+ if value is None :
+ return ""
+ if not isinstance(value, (str,unicode)) :
+ raise TemplateSyntaxError('remove_tag_key value error : string is required')
+ if value[:6]=="opera_":
+ return value[6:]
+ return value
+remove_tag_key.is_safe = True
+
diff -r bc700c2cd9f3 -r 1f24f33b41e1 src/spel/urls.py
--- a/src/spel/urls.py Thu May 15 15:29:21 2014 +0200
+++ b/src/spel/urls.py Thu May 15 17:55:50 2014 +0200
@@ -6,7 +6,7 @@
from django.views.generic import RedirectView, TemplateView
from ldt.auth.views import login as pf_login
from ldt.text import VERSION_STR
-from .views import AnnotationRequest, ChapterRequest, Theatre, Opera
+from .views import AnnotationRequest, ChapterRequest, Theatre, Opera, OperaRequest
#from django.conf import settings
@@ -45,12 +45,13 @@
(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
url(r'^$', TemplateView.as_view(template_name="spel_home.html"), name='spel_home'),
url(r'^theatre$', Theatre.as_view(), name='spel_theatre'),
- url(r'^opera$', Opera.as_view(), name='spel_opera'),
url(r'^chapters$', ChapterRequest.as_view(), name='spel_chapters'),
url(r'^annotations', AnnotationRequest.as_view(), name='spel_annotations'),
url(r'^ctb', TemplateView.as_view(template_name="ctb.html"), name='spel_ctb'),
url(r'^corpus', TemplateView.as_view(template_name="spel_corpus.html"), name='spel_corpus'),
url(r'^player', TemplateView.as_view(template_name="spel_player.html"), name='spel_player'),
+ url(r'^opera$', Opera.as_view(), name='spel_opera'),
+ url(r'^operaannotations$', OperaRequest.as_view(), name='spel_opera_annotations'),
)
urlpatterns += staticfiles_urlpatterns()
diff -r bc700c2cd9f3 -r 1f24f33b41e1 src/spel/views.py
--- a/src/spel/views.py Thu May 15 15:29:21 2014 +0200
+++ b/src/spel/views.py Thu May 15 17:55:50 2014 +0200
@@ -337,7 +337,79 @@
return self.render_to_response(context)
-
+class OperaRequest(TemplateView):
+
+ template_name = "partial/spel_opera_annotations.html"
+
+ def get(self, request):
+ # Filter content by date if necessary
+ content_qs = Content.objects.filter(tags__name__in=["content_opera"])
+ start_date_param = request.GET.get("start_date", "")
+ if start_date_param!="":
+ content_qs = content_qs.filter(content_creation_date__gt=start_date_param)
+ end_date_param = request.GET.get("end_date", "")
+ if end_date_param!="":
+ content_qs = content_qs.filter(content_creation_date__lt=end_date_param + " 23:59:59")
+ iri_ids = content_qs.values_list("iri_id", flat=True)
+ #logger.debug("iri_ids")
+ #logger.debug(iri_ids)
+ # Filter segment if necessary
+ annot_types_param = request.GET.get("annotation_types", "")
+ seg_queryset = Segment.objects.filter(iri_id__in=iri_ids).select_related("content__title")
+ annot_types = []
+ if annot_types_param!="":
+ annot_types = annot_types_param.split(",")
+ seg_queryset = seg_queryset.filter(cutting_id__in=annot_types)
+
+ # First we look at modalites_sceniques and personnages tags.
+ mod_scen_param = request.GET.get("modalites_sceniques", "")
+ mod_scen = []
+ if mod_scen_param!="":
+ mod_scen = mod_scen_param.split(",")
+ perso_param = request.GET.get("personnages", "")
+ perso = []
+ if perso_param!="":
+ perso = perso_param.split(",")
+ type_travail_param = request.GET.get("type_travail", "")
+ type_travail = []
+ if type_travail_param!="":
+ type_travail = type_travail_param.split(",")
+ acte_param = request.GET.get("acte", "")
+ acte = []
+ if acte_param!="":
+ acte = acte_param.split(",")
+ scene_param = request.GET.get("scene", "")
+ scene = []
+ if scene_param!="":
+ scene = scene_param.split(",")
+ mesure_param = request.GET.get("mesure", "")
+ mesure = []
+ if mesure_param!="":
+ mesure = mesure_param.split(",")
+
+
+
+ # Get tags from orm
+ all_tags = mod_scen + perso + type_travail + acte + scene + mesure
+ tags = Tag.objects.filter(name__in=all_tags)
+ # seg_queryset.filter(tags__in=tags) doesn't work because taggit finds segments with one of the tags and not ALL tags
+ # So we make a correct request through TaggedItem first
+ # Get segments from tagged items
+ #s = TaggedItem.objects.get_by_model(seg_queryset, tags)
+ tags = list(tags)
+ seg_ids = list(TaggedItem.objects\
+ .values_list("object_id", flat=True)\
+ .filter(content_type=ContentType.objects.get_for_model(Segment))\
+ .filter(tag__in=tags)\
+ .annotate(count_status=Count('object_id'))\
+ .filter(count_status=len(tags)))
+ s = list(seg_queryset.filter(pk__in=seg_ids))
+
+ context = {"annot_types":annot_types, "start_date":start_date_param, "end_date":end_date_param,
+ "mod_scen":mod_scen, "perso":perso, "type_travail":type_travail, "acte":acte,
+ "scene":scene, "mesure":mesure, "segments": s}
+
+ return self.render_to_response(context)