]> git.parisson.com Git - mezzo.git/commitdiff
Search : rewrite filters
authorEmilie <zawadzki@ircam.fr>
Thu, 20 Oct 2016 17:31:30 +0000 (19:31 +0200)
committerEmilie <zawadzki@ircam.fr>
Thu, 20 Oct 2016 17:31:30 +0000 (19:31 +0200)
app/organization/core/views.py
app/templates/pages/includes/page_search.html
app/templates/search_results.html

index 08084b292dec8d5bb972c6228613ebf06e5ecc1b..4d18e3a96b4206900942064da15e58a706380af9 100644 (file)
@@ -10,7 +10,9 @@ from mezzanine.utils.views import paginate
 from organization.core.models import *
 from functools import reduce
 from operator import ior, iand
-
+from organization.media.models import Playlist
+from mezzanine_agenda.models import Event
+from organization.pages.models import CustomPage
 
 class SlugMixin(object):
 
@@ -33,6 +35,7 @@ class CustomSearchView(TemplateView):
         page = request.GET.get("page", 1)
         per_page = settings.SEARCH_PER_PAGE
         max_paging_links = settings.MAX_PAGING_LINKS
+        is_searching_all = False
         try:
             parts = request.GET.get("type", "").split(".", 1)
             search_model = apps.get_model(*parts)
@@ -40,15 +43,20 @@ class CustomSearchView(TemplateView):
         except (ValueError, TypeError, LookupError, AttributeError):
             search_model = Displayable
             search_type = _("Everything")
+            is_searching_all = True
         else:
             search_type = search_model._meta.verbose_name_plural.capitalize()
 
+        # @Todo : rewrite SearchableManager
         results = search_model.objects.search(query, for_user=request.user)
+        results_media_count = len(Playlist.objects.search(query, for_user=request.user))
+        results_page_count = len(CustomPage.objects.search(query, for_user=request.user))
+        results_event_count = len(Event.objects.search(query, for_user=request.user))
 
         # count objects
         filter_dict = dict()
-        for result in results:
 
+        for result in results:
             classname = result.__class__.__name__
             app_label = result._meta.app_label
             full_classname = app_label+"."+classname
@@ -62,7 +70,6 @@ class CustomSearchView(TemplateView):
                     app_label = "organization-pages"
             elif classname == "Playlist":
                 verbose_name = "Media"
-
             if classname in filter_dict:
                 filter_dict[classname]['count'] += 1
             else:
@@ -70,6 +77,25 @@ class CustomSearchView(TemplateView):
                 filter_dict[classname].update({'verbose_name' : verbose_name})
                 filter_dict[classname].update({'app_label' : app_label})
 
+        # temporarily overriding filter_dict to get all filters manually
+        filter_dict = {
+            'CustomPage': {
+                'count' : results_page_count,
+                'verbose_name' : 'Page',
+                'app_label' : 'organization-pages'
+            },
+            'Event': {
+                'count' : results_event_count,
+                'verbose_name' : 'Event',
+                'app_label' : 'mezzanine_agenda'
+            },
+            'Playlist': {
+                'count' : results_media_count,
+                'verbose_name' : 'Media',
+                'app_label' : 'organization-media'
+            },
+        }
+
         # get url param
         current_query = QueryDict(mutable=True)
         current_query = request.GET.copy()
@@ -82,9 +108,13 @@ class CustomSearchView(TemplateView):
         # pagination
         paginated = paginate(results, page, per_page, max_paging_links)
 
+        # count all results
+        all_results_count = results_media_count + results_page_count + results_event_count
+
         # context
         context = {"query": query, "results": paginated,
-                   "search_type": search_type}
+                   "search_type": search_type.__class__.__name__, "search_model": search_model.__name__,
+                   "all_results_count" : all_results_count, 'is_searching_all': is_searching_all}
 
         # cancel filter url
         if request.GET.__contains__('type'):
index e578d78755d2dea102ebb1c8d66bee7193959d36..0a5389d35b86a047049cc8704ca928078f26312a 100644 (file)
@@ -2,7 +2,7 @@
 {% load i18n mezzanine_tags organization_tags %}
 
 {% block title %}
-    {{ result }}
+    {{ result.title }}
 {% endblock %}
 
 {% block icon %}files-o{% endblock %}
index 7e8a0e75255eaeb684c685bdabe31fa0ce63fe43..89a9bc1f6cbe5b5a419764ac581bfc4b60ac6c8d 100644 (file)
                         </button>
                     </form>
 
-                    <div class="mt2 mb2">
-                        <p>
-                            {% if results.paginator.count == 0 %}
-                            {% blocktrans %}
-                            No results were found in {{ search_type }} matching your query: {{ query }}
-                            {% endblocktrans %}
-                            {% else %}
-                            {% blocktrans with start=results.start_index end=results.end_index total=results.paginator.count %}
-                            Showing {{ start }} to {{ end }} of {{ total }} results in {{ search_type }} matching your query: {{ query }}
-                            {% endblocktrans %}
-                            {% endif %}
-                        </p>
-                    </div>
 
                 </div>
             </div>
 
             <div class="row">
-
                 <div class="col-sm-3 col-lg-2 page__sidebar">
-
                     <div style="position: relative;">
                         <ul class="nav-tree nav-tree--level-0" data-sticky data-sticky-parent="row" data-sticky-offset="100" data-sticky-detach-at="971">
+                            <li class="nav-tree__item">
+                                <a class="nav-tree__link nav-tree__link--filter {% if is_searching_all %} active {% endif %}" href="{{ cancel_filter_url }}" title="">{% trans 'All results' %} ({{ all_results_count }})</a>
+                            </li>
                             {% for key,value in filter_dict.items %}
                                 <li class="nav-tree__item">
-                                    <a class="nav-tree__link nav-tree__link--filter" href="{{ value.url }}">
+                                    <a class="nav-tree__link nav-tree__link--filter {% if search_model == key %} active {% endif %}" href="{{ value.url }}">
                                         {{ value.verbose_name }} ({{ value.count }})
                                     </a>
                                 </li>
                             {% endfor %}
-                            {% if cancel_filter_url %}
-                                <li class="nav-tree__item">
-                                    <a class="nav-tree__link nav-tree__link--filter active" href="{{ cancel_filter_url }}" title="">Cancel filter</a>
-                                </li>
-                            {% endif %}
                         </ul>
                     </div>
-
-
                 </div>
 
                 <div class="mb2 col-sm-9 col-lg-8 white-bg page__content">
                             {% endwith %}
                         {% endif %}
                     {% endfor %}
-
+                    <p>
+                        {% if results.paginator.count == 0 %}
+                        {% blocktrans %}
+                        No results were found matching your query: {{ query }}
+                        {% endblocktrans %}
+                        {% endif %}
+                    </p>
                 </div>
             </div>