| author | ymh <ymh.work@gmail.com> |
| Thu, 26 Sep 2013 15:24:41 +0200 | |
| changeset 119 | ece69ca3ac24 |
| parent 117 | 0a4e7d6ebe80 |
| child 126 | a345f1a67bf1 |
| permissions | -rw-r--r-- |
| 1 | 1 |
# -*- coding: utf-8 -*- |
2 |
''' |
|
3 |
Created on Aug 27, 2013 |
|
4 |
||
5 |
@author: tc |
|
6 |
''' |
|
|
113
c05567404888
First version of indexation. Replace the list view by a search view
ymh <ymh.work@gmail.com>
parents:
99
diff
changeset
|
7 |
import json |
|
c05567404888
First version of indexation. Replace the list view by a search view
ymh <ymh.work@gmail.com>
parents:
99
diff
changeset
|
8 |
import logging |
| 117 | 9 |
import time |
|
113
c05567404888
First version of indexation. Replace the list view by a search view
ymh <ymh.work@gmail.com>
parents:
99
diff
changeset
|
10 |
|
| 1 | 11 |
from django.conf import settings |
| 92 | 12 |
from django.shortcuts import redirect, get_object_or_404 |
|
113
c05567404888
First version of indexation. Replace the list view by a search view
ymh <ymh.work@gmail.com>
parents:
99
diff
changeset
|
13 |
from django.views.generic import DetailView, View |
| 117 | 14 |
from rest_framework.renderers import UnicodeJSONRenderer |
|
113
c05567404888
First version of indexation. Replace the list view by a search view
ymh <ymh.work@gmail.com>
parents:
99
diff
changeset
|
15 |
|
| 117 | 16 |
from p4l.api.serializers import RecordSerializer |
|
26
a0e152dd1fad
first version of angular intégration
ymh <ymh.work@gmail.com>
parents:
20
diff
changeset
|
17 |
from p4l.models import Record |
|
a0e152dd1fad
first version of angular intégration
ymh <ymh.work@gmail.com>
parents:
20
diff
changeset
|
18 |
from p4l.utils import get_labels_for_uris |
| 1 | 19 |
|
| 7 | 20 |
|
| 1 | 21 |
logger = logging.getLogger(__name__) |
22 |
||
| 117 | 23 |
QUERY_FIELDS_TRANSLATION = { |
24 |
'url': 'dataurl', |
|
25 |
'filter': 'dataquery', |
|
26 |
'root': 'datarootquery', |
|
27 |
'childs': 'datachildsquery', |
|
28 |
'child-count': 'datachildcountquery' |
|
29 |
} |
|
30 |
||
31 |
||
32 |
def get_record_uri_labels(record, lang): |
|
33 |
uri_labels = get_labels_for_uris([s.uri for s in record.subjects.all()], settings.RDF_SCHEMES['subjects'], lang, False) |
|
34 |
uri_labels.update(get_labels_for_uris([s.uri for s in record.themes.all()], settings.RDF_SCHEMES['themes'], lang, False)) |
|
35 |
uri_labels.update(get_labels_for_uris([s.uri for s in record.countries.all()], settings.RDF_SCHEMES['countries'], lang, False)) |
|
36 |
uri_labels.update(get_labels_for_uris([record.language.uri] if record.language else [], settings.RDF_SCHEMES['languages'], lang, False)) |
|
37 |
uri_labels.update(get_labels_for_uris([s.uri for s in record.otherLanguages.all()], settings.RDF_SCHEMES['languages'], lang, False)) |
|
38 |
uri_labels.update(get_labels_for_uris([s.uri for s in record.projectNames.all()], settings.RDF_SCHEMES['projects'], None, True)) |
|
39 |
uri_labels.update(get_labels_for_uris([s.uri for s in record.subjectCorporateBodies.all()], settings.RDF_SCHEMES['organizations'], None, True)) |
|
40 |
uri_labels.update(get_labels_for_uris([s.uri for s in record.corporateAuthors.all()], settings.RDF_SCHEMES['organizations'], None, True)) |
|
41 |
uri_labels.update(get_labels_for_uris([record.recordType] if record.recordType else [], settings.RDF_SCHEMES['types'], lang, False)) |
|
42 |
uri_labels.update(get_labels_for_uris([s.uri for s in record.audiences.all()], settings.RDF_SCHEMES['audiences'], None, True)) |
|
43 |
return uri_labels |
|
44 |
||
| 7 | 45 |
|
46 |
class RecordDetailView(DetailView): |
|
47 |
||
48 |
model = Record |
|
| 117 | 49 |
template_name = "p4l/record_view.html" |
| 30 | 50 |
slug_field = "identifier" |
| 7 | 51 |
|
| 17 | 52 |
def get_context_data(self, **kwargs): |
53 |
context = DetailView.get_context_data(self, **kwargs) |
|
| 20 | 54 |
# We get the language, "fr" by default |
55 |
lang = "fr" |
|
56 |
if "lang" in self.request.GET: |
|
57 |
lang = self.request.GET["lang"] |
|
58 |
elif hasattr(self.request, "LANGUAGE_CODE") and self.request.LANGUAGE_CODE in ["fr","en","es"]: |
|
59 |
lang = self.request.LANGUAGE_CODE |
|
| 117 | 60 |
|
61 |
context['uri_labels'] = get_record_uri_labels(self.object,lang) |
|
62 |
||
| 7 | 63 |
|
| 17 | 64 |
return context |
| 7 | 65 |
|
| 34 | 66 |
class RecordEditView(DetailView): |
| 29 | 67 |
http_method_names = ['get'] |
68 |
template_name = 'p4l/record_update_form.html' |
|
| 34 | 69 |
model = Record |
70 |
slug_field = "identifier" |
|
| 117 | 71 |
is_create_view = False |
72 |
||
73 |
def get_empty_object(self): |
|
74 |
||
75 |
obj = Record() |
|
76 |
obj.id = -1 |
|
77 |
obj.identifier = "T" + str(int(time.time())) |
|
78 |
obj.uri = "http://www.iiep.unesco.org/plan4learning/record/" + obj.identifier |
|
79 |
||
80 |
return obj |
|
81 |
||
82 |
||
83 |
def get_object(self, *args, **kwargs): |
|
84 |
""" |
|
85 |
Returns the object the view is displaying. |
|
86 |
||
87 |
By default this requires `self.queryset` and a `pk` or `slug` argument |
|
88 |
in the URLconf, but subclasses can override this to return any object. |
|
89 |
""" |
|
90 |
if self.is_create_view: |
|
91 |
return self.get_empty_object() |
|
92 |
||
93 |
return super(RecordEditView, self).get_object(*args, **kwargs) |
|
94 |
||
|
26
a0e152dd1fad
first version of angular intégration
ymh <ymh.work@gmail.com>
parents:
20
diff
changeset
|
95 |
|
| 34 | 96 |
def get_context_data(self, **kwargs): |
| 117 | 97 |
|
98 |
context = super(RecordEditView, self).get_context_data(**kwargs) |
|
99 |
||
100 |
if self.object: |
|
101 |
serializer = RecordSerializer(self.object) |
|
102 |
context['object_json'] = UnicodeJSONRenderer().render(serializer.data) |
|
103 |
else: |
|
104 |
context['object_json'] = "null" |
|
105 |
||
| 34 | 106 |
# We get the language, "fr" by default |
107 |
lang = "fr" |
|
108 |
if "lang" in self.request.GET: |
|
109 |
lang = self.request.GET["lang"] |
|
110 |
elif hasattr(self.request, "LANGUAGE_CODE") and self.request.LANGUAGE_CODE in ["fr","en","es"]: |
|
111 |
lang = self.request.LANGUAGE_CODE |
|
112 |
||
| 117 | 113 |
context['uri_labels'] = json.dumps(get_record_uri_labels(self.object,lang)) |
| 34 | 114 |
|
| 60 | 115 |
# lang must be like "XX" in the sparql request |
116 |
lang = '"' + lang + '"' |
|
| 117 | 117 |
|
118 |
query_dicts = dict([(k , dict([ (QUERY_FIELDS_TRANSLATION[key],value.format(lang=lang)) for key,value in v.items() ])) for k,v in settings.SPARQL_REF_QUERIES.items()]) |
|
| 57 | 119 |
context['query_dicts'] = json.dumps(query_dicts) |
| 38 | 120 |
|
| 70 | 121 |
# Languages list used in drop down list |
122 |
context['languages_list'] = json.dumps(settings.LANGUAGES_LIST) |
|
| 119 | 123 |
|
124 |
context['is_create_view'] = json.dumps(self.is_create_view) |
|
| 74 | 125 |
|
| 34 | 126 |
return context |
| 92 | 127 |
|
128 |
||
129 |
class RecordDeleteView(View): |
|
130 |
def get(self, request, slug, **kwargs): |
|
131 |
rec = get_object_or_404(Record, identifier=slug) |
|
132 |
rec.delete() |
|
133 |
return redirect('p4l_home') |
|
| 34 | 134 |