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):
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)
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
app_label = "organization-pages"
elif classname == "Playlist":
verbose_name = "Media"
-
if classname in filter_dict:
filter_dict[classname]['count'] += 1
else:
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()
# 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'):
</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>