From: afilsaime Date: Mon, 20 Apr 2015 08:43:46 +0000 (+0200) Subject: -Ajout de nouveaux filtres sur les resultats X-Git-Tag: 1.6a^2~15^2~94 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=78ee209d3411db4eb69a1f108b349336eccc7a39;p=telemeta.git -Ajout de nouveaux filtres sur les resultats -Implementation du moteur elasticsearch sur Telemeta --- diff --git a/telemeta/models/query.py b/telemeta/models/query.py index d91a21ca..07f62338 100644 --- a/telemeta/models/query.py +++ b/telemeta/models/query.py @@ -69,6 +69,7 @@ class MediaItemQuerySet(CoreQuerySet): return self.filter(q) + def without_collection(self): "Find items which do not belong to any collection" return self.extra( diff --git a/telemeta/search_indexes.py b/telemeta/search_indexes.py index ff34d4a3..f73988bb 100644 --- a/telemeta/search_indexes.py +++ b/telemeta/search_indexes.py @@ -4,7 +4,8 @@ from telemeta.models import * class MediaItemIndex(indexes.SearchIndex, indexes.Indexable): - text = indexes.CharField(document=True) + text = indexes.NgramField(document=True, use_template=True) + #rec_date = indexes.DateTimeField(use_template=True, null=True) def get_model(self): return MediaItem diff --git a/telemeta/static/telemeta/css/telemeta.css b/telemeta/static/telemeta/css/telemeta.css index 7af24b54..4a46b7fd 100644 --- a/telemeta/static/telemeta/css/telemeta.css +++ b/telemeta/static/telemeta/css/telemeta.css @@ -1222,6 +1222,22 @@ a.image-link { text-decoration: none; } +#btn{ + font-weight: bold; + color:#ffffff; + background-color:#6a0307; + border-color:#6a0307; + box-shadow: 5px 5px 5px #888888; +} + +#btn:hover{ + font-weight: bold; + color:#6a0307; + background-color:#ffffff; + border-color:#6a0307; + box-shadow: 5px 5px 5px #888888; +} + .list_item, .list_item:visited, .list_item:hover{ display:block; color:#6A0307; diff --git a/telemeta/templates/search/indexes/telemeta/mediaitem_text.txt b/telemeta/templates/search/indexes/telemeta/mediaitem_text.txt index 4665cb55..5f044c0a 100644 --- a/telemeta/templates/search/indexes/telemeta/mediaitem_text.txt +++ b/telemeta/templates/search/indexes/telemeta/mediaitem_text.txt @@ -1,2 +1,6 @@ {{ object.title }} +{{ object.recorded_from_date }} +{{ object.recorded_to_date }} +{{ object.code }} +{{ object.location }} {{ object.body }} diff --git a/telemeta/templates/search/search.html b/telemeta/templates/search/search.html index 64cbb476..f3d1cc59 100644 --- a/telemeta/templates/search/search.html +++ b/telemeta/templates/search/search.html @@ -21,15 +21,10 @@ {% if query %} -

Results

- - {% for result in page.object_list %} -

- {{ result.object.title }} -

- {% empty %} -

No results found.

- {% endfor %} +

{% trans "Results" %}

+
+ {% include "search/mediaitem_listhaystack.html" %} +
{% if page.has_previous or page.has_next %}
@@ -42,4 +37,4 @@ {# Show some example queries to run, maybe query syntax, something else? #} {% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/telemeta/templates/telemeta/home.html b/telemeta/templates/telemeta/home.html index 0bd40085..2ccc13d6 100644 --- a/telemeta/templates/telemeta/home.html +++ b/telemeta/templates/telemeta/home.html @@ -57,7 +57,8 @@
vox -{{ page_content|render_flatpage }} +
{% if sound_pub_items %} @@ -66,10 +67,10 @@

playlists {% trans "Musical selection" %}

-{% for item in sound_pub_items %} +{% for item in sound_pub_items %}
{{ item }}{% if item.alt_title %} ({{ item.alt_title }}){% endif %}
{{ item.location.fullnames|to_string }}
-{% endfor %} +{% endfor %} {% endif %} diff --git a/telemeta/templates/telemeta/search_results.html b/telemeta/templates/telemeta/search_results.html index 7289824a..68e1c433 100644 --- a/telemeta/templates/telemeta/search_results.html +++ b/telemeta/templates/telemeta/search_results.html @@ -26,6 +26,10 @@ {% endifequal %} {% ifequal type 'collections' %} @@ -35,6 +39,10 @@ {% endifequal %} @@ -85,22 +93,98 @@ {% endif %} {% ifequal type 'items' %} -

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}})

- {% with object_list as items %} -
- {% include "telemeta/inc/mediaitem_list.html" %} -
- {% endwith %} + {% ifequal result_filter "published"%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}})

+ {% with object_list as items %} +
+ {% include "telemeta/inc/mediaitem_list.html" %} +
+ {% endwith %} + {% else%} + {% ifequal result_filter "unpublished"%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}})

+ {% with object_list as items %} +
+ {% include "telemeta/inc/mediaitem_list.html" %} +
+ {% endwith %} + {% else%} + {% ifequal result_filter "full"%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}})

+ {% with object_list as items %} +
+ {% include "telemeta/inc/mediaitem_list.html" %} +
+ {% endwith %} + {% else%} + {% ifequal result_filter "none"%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}})

+ {% with object_list as items %} +
+ {% include "telemeta/inc/mediaitem_list.html" %} +
+ {% endwith %} + {% else%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}})

+ {% with object_list as items %} +
+ {% include "telemeta/inc/mediaitem_list.html" %} +
+ {% endwith %} + {%endifequal%} + {%endifequal%} + {%endifequal%} + {% endifequal %} {% endifequal %} {% ifequal type 'collections' %} -

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}}) -

- {% with object_list as collections %} -
- {% include "telemeta/inc/collection_list.html" %} -
- {% endwith %} + {% ifequal result_filter "published"%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}}) +

+ {% with object_list as collections %} +
+ {% include "telemeta/inc/collection_list.html" %} +
+ {% endwith %} + {% else %} + {%ifequal result_filter "unpublished"%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}}) +

+ {% with object_list as collections %} +
+ {% include "telemeta/inc/collection_list.html" %} +
+ {% endwith %} + {%else%} + {%ifequal result_filter "full"%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}}) +

+ {% with object_list as collections %} +
+ {% include "telemeta/inc/collection_list.html" %} +
+ {% endwith %} + {%else%} + {%ifequal result_filter "none"%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}}) +

+ {% with object_list as collections %} +
+ {% include "telemeta/inc/collection_list.html" %} +
+ {% endwith %} + {%else%} +

Items ({{items_num}}) | Collections ({{collections_num}}) | Corpus ({{corpus_num}}) | Fonds ({{fonds_num}}) +

+ {% with object_list as collections %} +
+ {% include "telemeta/inc/collection_list.html" %} +
+ {% endwith %} + {%endifequal%} + {%endifequal%} + {%endifequal%} + {%endifequal%} {% endifequal %} {% if type == 'corpus' %} diff --git a/telemeta/templatetags/__init__.py b/telemeta/templatetags/__init__.py index e69de29b..40a96afc 100644 --- a/telemeta/templatetags/__init__.py +++ b/telemeta/templatetags/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/telemeta/templatetags/telemeta_utils.py b/telemeta/templatetags/telemeta_utils.py index 7cf3488f..b872ddc6 100644 --- a/telemeta/templatetags/telemeta_utils.py +++ b/telemeta/templatetags/telemeta_utils.py @@ -112,6 +112,7 @@ def with_sound(vars): _vars['sound'] = True return _vars + @register.filter def code_or_id(resource): if resource.code: diff --git a/telemeta/urls.py b/telemeta/urls.py index 6a1a25ea..d9da9532 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -36,7 +36,7 @@ from django.conf.urls import patterns, url, include from django.conf import settings -from django.views.generic.base import RedirectView +from django.views.generic.base import RedirectView, TemplateView from django.views.generic.list import ListView from telemeta.models import MediaItem, MediaCollection, MediaItemMarker, MediaCorpus, MediaFonds from telemeta.views import * @@ -67,9 +67,10 @@ export_extensions = "|".join(item_view.list_export_extensions()) urlpatterns = patterns('', url(r'^$', home_view.home, name="telemeta-home"), - + url(r'^test', TemplateView.as_view(template_name = "telemeta/hello_world.html")), # items url(r'^archives/items/$', ItemListView.as_view(), name="telemeta-items"), + url(r'^archives/full_access_items/$', ItemListViewFullAccess.as_view(), name="telemeta-fullaccess-items"), url(r'^archives/items_sound/$', ItemSoundListView.as_view(), name="telemeta-items-sound"), url(r'^archives/items_unpublished/$', ItemUnpublishedListView.as_view(), name="telemeta-items-unpublished"), url(r'^archives/items_published/$', ItemPublishedListView.as_view(), name="telemeta-items-published"), @@ -139,10 +140,14 @@ urlpatterns = patterns('', # search # url(r'^archives/$', home_view.search, name="telemeta-archives"), url(r'^search/$', SearchView.as_view(), name="telemeta-search"), + url(r'^search_published/(?P[A-Za-z0-9._-]+)/$', SearchViewPublished.as_view(), name="telemeta-search-published"), + url(r'^search_unpublished/(?P[A-Za-z0-9._-]+)/$', SearchViewUnpublished.as_view(), name="telemeta-search-unpublished"), + url(r'^search_full/(?P[A-Za-z0-9._-]+)/$', SearchViewFullAccess.as_view(), name="telemeta-search-full"), + url(r'^search_none/(?P[A-Za-z0-9._-]+)/$', SearchViewRestrictedAccess.as_view(), name="telemeta-search-none"), url(r'^search/(?P[A-Za-z0-9._-]+)/$', SearchView.as_view(), name="telemeta-search-type"), url(r'^search_criteria/$', home_view.edit_search, name="telemeta-search-criteria"), url(r'^complete_location/$', home_view.complete_location, name="telemeta-complete-location"), - url(r'^haystack/', include('haystack.urls')), + url(r'^haystack/', include('telemeta.haystack_urls')), # administration url(r'^admin/$', admin_view.admin_index, name="telemeta-admin"), diff --git a/telemeta/views/home.py b/telemeta/views/home.py index 48d33b06..7574307c 100644 --- a/telemeta/views/home.py +++ b/telemeta/views/home.py @@ -278,7 +278,6 @@ class HomeView(object): users = User.objects.all().order_by('last_name') return render(request, 'telemeta/users.html', {'users': users}) - class SearchView(ListView): """Perform a search through resources""" @@ -417,3 +416,115 @@ class SearchView(ListView): context['type'] = self.type context['count'] = self.object_list.count() return context + + + +class SearchViewPublished(SearchView): + """Perform a search through published resources""" + + template_name='telemeta/search_results.html' + paginate_by = 20 + + def get_queryset(self): + self.type = None + if 'type' in self.kwargs: + self.type = self.kwargs['type'] + if(self.type=='items'): + return SearchView.get_queryset(self).filter(collection__code__contains="_E_") + else: + return SearchView.get_queryset(self).filter(code__contains="_E_") + + def get_context_data(self, *args, **kwargs): + context = super(SearchView, self).get_context_data(*args, **kwargs) + context['criteria'] = self.criteria + context['collections_num'] = self.collections.filter(code__contains="_E_").count() + context['items_num'] = self.items.filter(collection__code__contains="_E_").count() + context['corpus_num'] = self.corpus.filter(code__contains="_E_").count() + context['fonds_num'] = self.fonds.filter(code__contains="_E_").count() + context['type'] = self.type + context['count'] = self.object_list.count() + context['result_filter'] = "published" + return context + +class SearchViewUnpublished(SearchView): + """Perform a search through published resources""" + + template_name='telemeta/search_results.html' + paginate_by = 20 + + def get_queryset(self): + self.type = None + if 'type' in self.kwargs: + self.type = self.kwargs['type'] + if(self.type=='items'): + return SearchView.get_queryset(self).filter(collection__code__contains="_I_") + else: + return SearchView.get_queryset(self).filter(code__contains="_I_") + + def get_context_data(self, *args, **kwargs): + context = super(SearchView, self).get_context_data(*args, **kwargs) + context['criteria'] = self.criteria + context['collections_num'] = self.collections.filter(code__contains="_I_").count() + context['items_num'] = self.items.filter(collection__code__contains="_I_").count() + context['corpus_num'] = self.corpus.filter(code__contains="_I_").count() + context['fonds_num'] = self.fonds.filter(code__contains="_I_").count() + context['type'] = self.type + context['count'] = self.object_list.count() + context['result_filter'] = "unpublished" + return context + +class SearchViewFullAccess(SearchView): + """Perform a search through published resources""" + + template_name='telemeta/search_results.html' + paginate_by = 20 + + def get_queryset(self): + self.type = None + if 'type' in self.kwargs: + self.type = self.kwargs['type'] + if(self.type=='items'): + search = SearchView.get_queryset(self).filter(Q(collection__public_access="full")|Q(public_access="full")).exclude(collection__public_access="none") + return search; + else : + return SearchView.get_queryset(self).filter(public_access="full") + + def get_context_data(self, *args, **kwargs): + context = super(SearchView, self).get_context_data(*args, **kwargs) + context['criteria'] = self.criteria + context['collections_num'] = self.collections.filter(public_access="full").count() + context['items_num'] = self.items.filter(Q(collection__public_access="full")|Q(public_access="full")).exclude(collection__public_access="none").count() + context['corpus_num'] = self.corpus.filter(public_access="full").count() + context['fonds_num'] = self.fonds.filter(public_access="full").count() + context['type'] = self.type + context['count'] = self.object_list.count() + context['result_filter'] = "full" + return context + +class SearchViewRestrictedAccess(SearchView): + """Perform a search through published resources""" + + template_name='telemeta/search_results.html' + paginate_by = 20 + + def get_queryset(self): + self.type = None + if 'type' in self.kwargs: + self.type = self.kwargs['type'] + if(self.type=='items'): + search = SearchView.get_queryset(self).filter(Q(collection__public_access="none")|Q(public_access="none")).exclude(collection__public_access="full") + return search; + else : + return SearchView.get_queryset(self).filter(public_access="none") + + def get_context_data(self, *args, **kwargs): + context = super(SearchView, self).get_context_data(*args, **kwargs) + context['criteria'] = self.criteria + context['collections_num'] = self.collections.filter(public_access="none").count() + context['items_num'] = self.items.filter(Q(collection__public_access="none")|Q(public_access="none")).exclude(collection__public_access="full").count() + context['corpus_num'] = self.corpus.filter(public_access="none").count() + context['fonds_num'] = self.fonds.filter(public_access="none").count() + context['type'] = self.type + context['count'] = self.object_list.count() + context['result_filter'] = "none" + return context \ No newline at end of file diff --git a/telemeta/views/item.py b/telemeta/views/item.py index bc3c9cc1..97fef0d7 100644 --- a/telemeta/views/item.py +++ b/telemeta/views/item.py @@ -370,6 +370,18 @@ class ItemListView(ListView): context['count'] = self.object_list.count() return context +class ItemListViewFullAccess(ListView): + + model = MediaItem + template_name = "telemeta/mediaitem_list.html" + paginate_by = 20 + queryset = MediaItem.objects.enriched().filter(Q(collection__public_access="full")|Q(public_access="full")).exclude(collection__public_access="none").order_by('code', 'old_code') + + def get_context_data(self, **kwargs): + context = super(ItemListViewFullAccess, self).get_context_data(**kwargs) + context['count'] = self.object_list.count() + return context + class ItemUnpublishedListView(ItemListView):