src/p4l/views.py
author ymh <ymh.work@gmail.com>
Wed, 04 Sep 2013 10:01:38 +0200
changeset 26 a0e152dd1fad
parent 20 fa466993084a
child 27 d2a40f44cbb9
permissions -rw-r--r--
first version of angular intégration
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     2
'''
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     3
Created on Aug 27, 2013
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     4
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     5
@author: tc
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     6
'''
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     7
d184767fdd52 first list view
cavaliet
parents:
diff changeset
     8
from django.conf import settings
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
     9
from django.shortcuts import get_object_or_404
26
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    10
from django.views.generic import ListView, DetailView, TemplateView, UpdateView
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
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    14
import logging
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    15
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    16
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    17
logger = logging.getLogger(__name__)
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    18
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    19
class RecordListView(ListView):
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    20
    
5
62e97cd13730 debug query and enhance display
cavaliet
parents: 4
diff changeset
    21
    queryset = Record.objects.select_related("language").prefetch_related('titles').distinct()  # @UndefinedVariable
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    22
    paginate_by = settings.NB_RECORDS_BY_PAGE
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    23
    template_name = "p4l/p4l_home.html"
4
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    24
    form_class = RecordFilterForm
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    25
    
1
d184767fdd52 first list view
cavaliet
parents:
diff changeset
    26
    
4
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    27
    def get_context_data(self, **kwargs):
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    28
        context = ListView.get_context_data(self, **kwargs)
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    29
        context['filter_form'] = self.form_class()
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    30
        # Add filter params from GET params
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    31
        filter_params = {}
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    32
        if 'title' in self.request.GET:
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    33
            filter_params['title'] = self.request.GET['title']
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    34
        context['filter_params'] = filter_params
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    35
        return context
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    36
    
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    37
    def get_queryset(self):
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    38
        qs = super(RecordListView, self).get_queryset()
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    39
        filter_form = self.form_class(self.request.GET)
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    40
        if filter_form.is_valid():
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    41
            return filter_form.get_filter_qs(qs)
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    42
        else:
047675624f45 first step of title search in list of records
cavaliet
parents: 1
diff changeset
    43
            return qs
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    44
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    45
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    46
class RecordDetailView(DetailView):
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    47
    
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    48
    model = Record
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    49
    template_name = "p4l/p4l_record_view.html"
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    50
    slug_field = "uri" # Even if it is useless because we override get_objet
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    51
    
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    52
    def get_object(self, queryset=None):
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    53
        if "uri" not in self.request.GET:
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
    54
            raise AttributeError(u"Record view must be called uri GET parameter")
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    55
        return get_object_or_404(Record.objects.select_related("language"), uri=self.request.GET["uri"])
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    56
    
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    57
    def get_context_data(self, **kwargs):
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    58
        context = DetailView.get_context_data(self, **kwargs)
20
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    59
        # We get the language, "fr" by default
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    60
        lang = "fr"
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    61
        if "lang" in self.request.GET:
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    62
            lang = self.request.GET["lang"]
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    63
        elif hasattr(self.request, "LANGUAGE_CODE") and self.request.LANGUAGE_CODE in ["fr","en","es"]:
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    64
            lang = self.request.LANGUAGE_CODE
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    65
        # self.object is the record entry
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    66
        # We get the subjects'labels with the Thesaurus repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    67
        uri_list = [s.uri for s in self.object.subjects.all()]
20
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    68
        uris_labels = get_labels_for_uris(uri_list, "http://skos.um.es/unescothes/CS000", lang, False)
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    69
        context['subjects_labels'] = uris_labels
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    70
        # We get the themes'labels with the Themes repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    71
        uri_list = [s.uri for s in self.object.themes.all()]
20
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    72
        uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Themes", lang, False)
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    73
        context['themes_labels'] = uris_labels
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    74
        # We get the countries'labels with the Thesaurus repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    75
        uri_list = [s.uri for s in self.object.countries.all()]
20
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    76
        uris_labels = get_labels_for_uris(uri_list, "http://skos.um.es/unescothes/CS000/Countries", lang, False)
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    77
        context['countries_labels'] = uris_labels
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    78
        # We get the languages'labels with the Languages repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    79
        if self.object.language:
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    80
            uri_list = [self.object.language.uri]
20
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    81
            uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Languages", lang, False)
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    82
            context['language_label'] = uris_labels[self.object.language.uri]
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    83
        # We get the other languages'labels with the Languages repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    84
        uri_list = [s.uri for s in self.object.otherLanguages.all()]
20
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
    85
        uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Languages", lang, False)
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    86
        context['otherLanguages_labels'] = uris_labels
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    87
        # We get the project'labels with the Projects repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    88
        uri_list = [s.uri for s in self.object.projectNames.all()]
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    89
        uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Projects", None, True)
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    90
        context['projects_labels'] = uris_labels
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    91
        # We get the subjectCorporateBodies'labels with the Organizations repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    92
        uri_list = [s.uri for s in self.object.subjectCorporateBodies.all()]
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    93
        uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Organizations", None, True)
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    94
        context['subjectCorporateBodies_labels'] = uris_labels
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    95
        # We get the corporateAuthors'labels with the Organizations repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    96
        uri_list = [s.uri for s in self.object.corporateAuthors.all()]
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    97
        uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/Organizations", None, True)
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    98
        context['corporateAuthors_labels'] = uris_labels
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
    99
        # We get the recordType'labels with the DocumentType repository
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
   100
        if self.object.recordType:
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
   101
            uri_list = [self.object.recordType]
20
fa466993084a get language for sparql request
cavaliet
parents: 17
diff changeset
   102
            uris_labels = get_labels_for_uris(uri_list, "http://www.iiep.unesco.org/plan4learning/scheme/DocumentType", lang, False)
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
   103
            context['recordType_label'] = uris_labels[self.object.recordType]
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
   104
        
17
b31a67614f76 fill labels with sparql request on the go
cavaliet
parents: 8
diff changeset
   105
        return context
7
02008d61c3c8 record view + correct import
cavaliet
parents: 5
diff changeset
   106
26
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   107
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   108
# class RecordEditView(TemplateView):
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   109
#     http_method_names = ['get']
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   110
#     template_name = 'record_update_form.html'
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   111
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   112
class RecordEditView(View):
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   113
    model = Record
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   114
    template_name_suffix = '_update_form'
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   115
    slug_field = "identifier"
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   116
    slug_url_kwarg = "id"
a0e152dd1fad first version of angular intégration
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   117