| author | cavaliet |
| Mon, 16 Sep 2013 16:18:30 +0200 | |
| changeset 93 | c675183a9325 |
| parent 92 | 57633a3acc4f |
| child 99 | 0d54489e8b26 |
| permissions | -rw-r--r-- |
| 1 | 1 |
# -*- coding: utf-8 -*- |
2 |
''' |
|
3 |
Created on Aug 27, 2013 |
|
4 |
||
5 |
@author: tc |
|
6 |
''' |
|
| 93 | 7 |
from datetime import datetime |
| 1 | 8 |
from django.conf import settings |
| 92 | 9 |
from django.views.generic import ListView, DetailView, View |
10 |
from django.shortcuts import redirect, get_object_or_404 |
|
|
26
a0e152dd1fad
first version of angular intégration
ymh <ymh.work@gmail.com>
parents:
20
diff
changeset
|
11 |
from p4l.forms import RecordFilterForm |
|
a0e152dd1fad
first version of angular intégration
ymh <ymh.work@gmail.com>
parents:
20
diff
changeset
|
12 |
from p4l.models import Record |
|
a0e152dd1fad
first version of angular intégration
ymh <ymh.work@gmail.com>
parents:
20
diff
changeset
|
13 |
from p4l.utils import get_labels_for_uris |
| 34 | 14 |
import json |
| 1 | 15 |
import logging |
16 |
||
| 7 | 17 |
|
| 1 | 18 |
logger = logging.getLogger(__name__) |
19 |
||
20 |
class RecordListView(ListView): |
|
21 |
||
|
78
1d45a564a398
Order by identifier to have stable order of list
ymh <ymh.work@gmail.com>
parents:
75
diff
changeset
|
22 |
queryset = Record.objects.select_related("language").prefetch_related('titles', 'imprints').order_by('identifier') # @UndefinedVariable |
| 1 | 23 |
paginate_by = settings.NB_RECORDS_BY_PAGE |
24 |
template_name = "p4l/p4l_home.html" |
|
| 4 | 25 |
form_class = RecordFilterForm |
26 |
||
27 |
def get_context_data(self, **kwargs): |
|
28 |
context = ListView.get_context_data(self, **kwargs) |
|
29 |
context['filter_form'] = self.form_class() |
|
30 |
# Add filter params from GET params |
|
31 |
filter_params = {} |
|
32 |
if 'title' in self.request.GET: |
|
33 |
filter_params['title'] = self.request.GET['title'] |
|
34 |
context['filter_params'] = filter_params |
|
35 |
return context |
|
36 |
||
37 |
def get_queryset(self): |
|
38 |
qs = super(RecordListView, self).get_queryset() |
|
39 |
filter_form = self.form_class(self.request.GET) |
|
40 |
if filter_form.is_valid(): |
|
41 |
return filter_form.get_filter_qs(qs) |
|
42 |
else: |
|
43 |
return qs |
|
| 7 | 44 |
|
45 |
||
46 |
class RecordDetailView(DetailView): |
|
47 |
||
48 |
model = Record |
|
49 |
template_name = "p4l/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 |
|
| 17 | 60 |
# self.object is the record entry |
61 |
# We get the subjects'labels with the Thesaurus repository |
|
62 |
uri_list = [s.uri for s in self.object.subjects.all()] |
|
| 20 | 63 |
uris_labels = get_labels_for_uris(uri_list, "http://skos.um.es/unescothes/CS000", lang, False) |
| 17 | 64 |
context['subjects_labels'] = uris_labels |
65 |
# We get the themes'labels with the Themes repository |
|
66 |
uri_list = [s.uri for s in self.object.themes.all()] |
|
| 20 | 67 |
uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Themes", lang, False) |
| 17 | 68 |
context['themes_labels'] = uris_labels |
69 |
# We get the countries'labels with the Thesaurus repository |
|
70 |
uri_list = [s.uri for s in self.object.countries.all()] |
|
| 20 | 71 |
uris_labels = get_labels_for_uris(uri_list, "http://skos.um.es/unescothes/CS000/Countries", lang, False) |
| 17 | 72 |
context['countries_labels'] = uris_labels |
73 |
# We get the languages'labels with the Languages repository |
|
74 |
if self.object.language: |
|
75 |
uri_list = [self.object.language.uri] |
|
| 20 | 76 |
uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Languages", lang, False) |
| 17 | 77 |
context['language_label'] = uris_labels[self.object.language.uri] |
78 |
# We get the other languages'labels with the Languages repository |
|
79 |
uri_list = [s.uri for s in self.object.otherLanguages.all()] |
|
| 20 | 80 |
uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Languages", lang, False) |
| 17 | 81 |
context['otherLanguages_labels'] = uris_labels |
82 |
# We get the project'labels with the Projects repository |
|
83 |
uri_list = [s.uri for s in self.object.projectNames.all()] |
|
84 |
uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Projects", None, True) |
|
85 |
context['projects_labels'] = uris_labels |
|
86 |
# We get the subjectCorporateBodies'labels with the Organizations repository |
|
87 |
uri_list = [s.uri for s in self.object.subjectCorporateBodies.all()] |
|
88 |
uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Organizations", None, True) |
|
89 |
context['subjectCorporateBodies_labels'] = uris_labels |
|
90 |
# We get the corporateAuthors'labels with the Organizations repository |
|
91 |
uri_list = [s.uri for s in self.object.corporateAuthors.all()] |
|
92 |
uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Organizations", None, True) |
|
93 |
context['corporateAuthors_labels'] = uris_labels |
|
94 |
# We get the recordType'labels with the DocumentType repository |
|
95 |
if self.object.recordType: |
|
96 |
uri_list = [self.object.recordType] |
|
| 20 | 97 |
uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/DocumentType", lang, False) |
| 17 | 98 |
context['recordType_label'] = uris_labels[self.object.recordType] |
| 7 | 99 |
|
| 17 | 100 |
return context |
| 7 | 101 |
|
| 34 | 102 |
class RecordEditView(DetailView): |
| 29 | 103 |
http_method_names = ['get'] |
104 |
template_name = 'p4l/record_update_form.html' |
|
| 34 | 105 |
model = Record |
106 |
slug_field = "identifier" |
|
|
26
a0e152dd1fad
first version of angular intégration
ymh <ymh.work@gmail.com>
parents:
20
diff
changeset
|
107 |
|
| 34 | 108 |
def get_context_data(self, **kwargs): |
109 |
context = DetailView.get_context_data(self, **kwargs) |
|
110 |
# We get the language, "fr" by default |
|
111 |
lang = "fr" |
|
112 |
if "lang" in self.request.GET: |
|
113 |
lang = self.request.GET["lang"] |
|
114 |
elif hasattr(self.request, "LANGUAGE_CODE") and self.request.LANGUAGE_CODE in ["fr","en","es"]: |
|
115 |
lang = self.request.LANGUAGE_CODE |
|
116 |
||
117 |
uri_labels = get_labels_for_uris([s.uri for s in self.object.subjects.all()], "http://skos.um.es/unescothes/CS000", lang, False) |
|
118 |
uri_labels.update(get_labels_for_uris([s.uri for s in self.object.themes.all()], "http://www.iiep.unesco.org/plan4learning/scheme/Themes", lang, False)) |
|
119 |
uri_labels.update(get_labels_for_uris([s.uri for s in self.object.countries.all()], "http://skos.um.es/unescothes/CS000/Countries", lang, False)) |
|
120 |
uri_labels.update(get_labels_for_uris([self.object.language.uri] if self.object.language else [], "http://www.iiep.unesco.org/plan4learning/scheme/Languages", lang, False)) |
|
121 |
uri_labels.update(get_labels_for_uris([s.uri for s in self.object.otherLanguages.all()], "http://www.iiep.unesco.org/plan4learning/scheme/Languages", lang, False)) |
|
122 |
uri_labels.update(get_labels_for_uris([s.uri for s in self.object.projectNames.all()], "http://www.iiep.unesco.org/plan4learning/scheme/Projects", None, True)) |
|
123 |
uri_labels.update(get_labels_for_uris([s.uri for s in self.object.subjectCorporateBodies.all()], "http://www.iiep.unesco.org/plan4learning/scheme/Organizations", None, True)) |
|
124 |
uri_labels.update(get_labels_for_uris([s.uri for s in self.object.corporateAuthors.all()], "http://www.iiep.unesco.org/plan4learning/scheme/Organizations", None, True)) |
|
125 |
uri_labels.update(get_labels_for_uris([self.object.recordType] if self.object.recordType else [], "http://www.iiep.unesco.org/plan4learning/scheme/DocumentType", lang, False)) |
|
126 |
context['uri_labels'] = json.dumps(uri_labels) |
|
127 |
||
| 60 | 128 |
# lang must be like "XX" in the sparql request |
129 |
lang = '"' + lang + '"' |
|
| 57 | 130 |
query_dicts = { |
131 |
'subjects': { |
|
132 |
'dataurl': settings.SPARQL_QUERY_ENDPOINT, |
|
| 60 | 133 |
'dataquery': settings.SPARQL_SUBJECT_QUERIES["filter"] % (lang, lang), |
134 |
'datarootquery': settings.SPARQL_SUBJECT_QUERIES["root"] % lang, |
|
135 |
'datachildsquery': settings.SPARQL_SUBJECT_QUERIES["childs"] % lang, |
|
| 57 | 136 |
'datachildcountquery': settings.SPARQL_SUBJECT_QUERIES["child-count"] |
137 |
}, |
|
138 |
'themes' : { |
|
139 |
'dataurl': settings.SPARQL_QUERY_ENDPOINT, |
|
| 60 | 140 |
'dataquery': settings.SPARQL_THEME_QUERIES["filter"] % (lang, lang), |
141 |
'datarootquery': settings.SPARQL_THEME_QUERIES["root"] % lang, |
|
142 |
'datachildsquery': settings.SPARQL_THEME_QUERIES["childs"] % lang, |
|
| 57 | 143 |
'datachildcountquery': settings.SPARQL_THEME_QUERIES["child-count"] |
| 61 | 144 |
}, |
145 |
'countries' : { |
|
146 |
'dataurl': settings.SPARQL_QUERY_ENDPOINT, |
|
147 |
'dataquery': settings.SPARQL_COUNTRY_QUERIES["filter"] % (lang, lang), |
|
148 |
'datarootquery': settings.SPARQL_COUNTRY_QUERIES["root"] % lang, |
|
149 |
'datachildsquery': settings.SPARQL_COUNTRY_QUERIES["childs"] % lang, |
|
150 |
'datachildcountquery': settings.SPARQL_COUNTRY_QUERIES["child-count"] |
|
151 |
}, |
|
152 |
'languages' : { |
|
153 |
'dataurl': settings.SPARQL_QUERY_ENDPOINT, |
|
154 |
'dataquery': settings.SPARQL_LANGUAGE_QUERIES["filter"] % (lang, lang), |
|
155 |
'datarootquery': settings.SPARQL_LANGUAGE_QUERIES["root"] % lang, |
|
156 |
'datachildsquery': "", |
|
157 |
'datachildcountquery': "" |
|
158 |
}, |
|
159 |
'projects' : { |
|
160 |
'dataurl': settings.SPARQL_QUERY_ENDPOINT, |
|
161 |
'dataquery': settings.SPARQL_PROJECT_QUERIES["filter"], |
|
162 |
'datarootquery': settings.SPARQL_PROJECT_QUERIES["root"], |
|
163 |
'datachildsquery': "", |
|
164 |
'datachildcountquery': "" |
|
165 |
}, |
|
166 |
'organizations' : { |
|
167 |
'dataurl': settings.SPARQL_QUERY_ENDPOINT, |
|
168 |
'dataquery': settings.SPARQL_ORGANIZATION_QUERIES["filter"], |
|
169 |
'datarootquery': settings.SPARQL_ORGANIZATION_QUERIES["root"], |
|
170 |
'datachildsquery': "", |
|
171 |
'datachildcountquery': "" |
|
|
62
8433e12362e0
angular for simple sparql and checkbox. Languages updated
cavaliet
parents:
61
diff
changeset
|
172 |
}, |
|
8433e12362e0
angular for simple sparql and checkbox. Languages updated
cavaliet
parents:
61
diff
changeset
|
173 |
'types' : { |
|
8433e12362e0
angular for simple sparql and checkbox. Languages updated
cavaliet
parents:
61
diff
changeset
|
174 |
'dataurl': settings.SPARQL_QUERY_ENDPOINT, |
|
8433e12362e0
angular for simple sparql and checkbox. Languages updated
cavaliet
parents:
61
diff
changeset
|
175 |
'dataquery': settings.SPARQL_TYPE_QUERIES["filter"] % (lang, lang), |
|
8433e12362e0
angular for simple sparql and checkbox. Languages updated
cavaliet
parents:
61
diff
changeset
|
176 |
'datarootquery': settings.SPARQL_TYPE_QUERIES["root"] % lang, |
|
8433e12362e0
angular for simple sparql and checkbox. Languages updated
cavaliet
parents:
61
diff
changeset
|
177 |
'datachildsquery': "", |
|
8433e12362e0
angular for simple sparql and checkbox. Languages updated
cavaliet
parents:
61
diff
changeset
|
178 |
'datachildcountquery': "" |
| 57 | 179 |
} |
180 |
} |
|
181 |
context['query_dicts'] = json.dumps(query_dicts) |
|
| 38 | 182 |
|
| 70 | 183 |
# Languages list used in drop down list |
184 |
context['languages_list'] = json.dumps(settings.LANGUAGES_LIST) |
|
| 74 | 185 |
|
| 34 | 186 |
return context |
| 92 | 187 |
|
188 |
||
| 93 | 189 |
class RecordNewView(View): |
190 |
def get(self, request, *args, **kwargs): |
|
191 |
rec = Record() |
|
192 |
rec.identifier = "T" + datetime.now().strftime("%Y%m%d%H%M%S") |
|
193 |
rec.uri = "http://www.iiep.unesco.org/plan4learning/record/" + rec.identifier |
|
194 |
rec.save() |
|
195 |
return redirect('p4l_record_edit', rec.identifier) |
|
196 |
||
197 |
||
| 92 | 198 |
class RecordDeleteView(View): |
199 |
def get(self, request, slug, **kwargs): |
|
200 |
rec = get_object_or_404(Record, identifier=slug) |
|
201 |
rec.delete() |
|
202 |
return redirect('p4l_home') |
|
| 34 | 203 |