]> git.0d.be Git - panikweb.git/commitdiff
listen archives page
authorFrédéric Péters <fpeters@0d.be>
Sun, 15 Sep 2013 16:04:33 +0000 (18:04 +0200)
committerFrédéric Péters <fpeters@0d.be>
Mon, 16 Sep 2013 08:58:12 +0000 (10:58 +0200)
panikweb/paniktags/templatetags/paniktags.py
panikweb/search.py
panikweb/urls.py
panikweb/views.py
panikweb_templates/templates/listen.html
panikweb_templates/templates/listen/archives.html
panikweb_templates/templates/listen/nav.html
panikweb_templates/templates/soundfiles/resume.html

index ec5d7a05d57603d44d3a22ba75e8e3893054aea6..f836f10564f04ac35d8f03dc0d2bb0ca6c9d426d 100644 (file)
@@ -11,6 +11,7 @@ from django.db.models.query import QuerySet
 from django.utils import simplejson
 from datetime import datetime, timedelta
 
+from emissions.models import Emission, Episode, NewsItem
 from emissions.utils import period_program
 
 from panikweb import utils
@@ -94,8 +95,9 @@ def emission_inline(context, date=None):
     }
 
 @register.inclusion_tag('soundfiles/resume.html')
-def soundfile_resume(soundfile):
-    return {'soundfile': soundfile}
+def soundfile_resume(soundfile, date=None):
+    return {'soundfile': soundfile,
+            'date': date}
 
 @register.inclusion_tag('includes/player.html', takes_context=False)
 def player():
@@ -225,5 +227,5 @@ def rfc822(datetime):
 
 @register.inclusion_tag('includes/related.html', takes_context=False)
 def related_objects(object):
-    sqs = search.MoreLikeThisSearchQuerySet()
+    sqs = search.MoreLikeThisSearchQuerySet().models(Emission, Episode, NewsItem)
     return {'more_like_this': sqs.more_like_this(object)[:12]}
index 76d0f2512c765fe7b77b4bc08a6012c95dbb904c..39f33712f715f51b3fb17ef8a25fb67d802e0e08 100644 (file)
@@ -1,14 +1,15 @@
 import haystack.backends.solr_backend
-from haystack.query import SearchQuerySet
+from haystack.query import SearchQuerySet, RelatedSearchQuerySet
 from haystack.constants import ID, DJANGO_CT, DJANGO_ID
 from haystack.utils import get_identifier
 from haystack.backends import EmptyResults
 
 from pysolr import SolrError
 
-
 from django.conf import settings
 
+from emissions.models import Emission, Episode, NewsItem, SoundFile
+
 
 class MoreLikeThisSearchQuerySet(SearchQuerySet):
     def more_like_this(self, model_instance, **kwargs):
@@ -110,8 +111,9 @@ class CustomSolrSearchBackend(haystack.backends.solr_backend.SolrSearchBackend):
 haystack.backends.solr_backend.SolrEngine.query = CustomSolrSearchQuery
 haystack.backends.solr_backend.SolrEngine.backend = CustomSolrSearchBackend
 
+import haystack.views
 from haystack.views import search_view_factory, FacetedSearchView
-from haystack.forms import FacetedSearchForm
+from haystack.forms import FacetedSearchForm, SearchForm
 
 
 class SearchView(FacetedSearchView):
@@ -126,8 +128,34 @@ class SearchView(FacetedSearchView):
                 if x.startswith('tags_exact')]
         return context
 
-sqs = SearchQuerySet().facet('categories').facet('tags')
+sqs = SearchQuerySet().models(Emission, Episode, NewsItem).facet('categories').facet('tags')
 
 view = search_view_factory(SearchView,
         form_class=FacetedSearchForm,
         searchqueryset=sqs)
+
+
+
+class ListenArchivesForm(SearchForm):
+    def no_query_found(self):
+        return self.searchqueryset.all()
+
+    def search(self):
+        sqs = super(ListenArchivesForm, self).search()
+        return sqs.load_all()
+
+
+class ListenArchivesView(haystack.views.SearchView):
+    template = 'listen/archives.html'
+
+    def __init__(self):
+        sqs = RelatedSearchQuerySet().filter(django_ct='emissions.soundfile').order_by('-date')
+        super(ListenArchivesView, self).__init__(searchqueryset=sqs,
+                form_class=ListenArchivesForm, results_per_page=20)
+
+    def extra_context(self):
+        context = super(ListenArchivesView, self).extra_context()
+        context['sectionName'] = "Listen"
+        return context
+
+listenArchives = search_view_factory(ListenArchivesView)
index 51b5278d3a6bb5d1476f566bce95c3cf4ef1df16..64d27806078242053b299de26017510dce27f87a 100644 (file)
@@ -20,7 +20,7 @@ urlpatterns = patterns('',
     url(r'^ckeditor/', include('ckeditor.urls')),
     url(r'^emissions/archives$', 'panikweb.views.emissionsArchives', name='emissionsArchives'),
     url(r'^listen/$', 'panikweb.views.listen', name='listen'),
-    url(r'^listen/archives/$', 'panikweb.views.listenArchives', name='listenArchives'),
+    url(r'^listen/archives/$', 'panikweb.search.listenArchives', name='listenArchives'),
     url(r'^news/$', 'panikweb.views.news', name='news'),
     url(r'^news/archives/$', 'panikweb.views.newsArchives', name='newsArchives'),
     url(r'^news/(?P<slug>[\w,-]+)$', 'panikweb.views.newsitemview', name='news-view'),
index 70615531fe89fa31b27450dd7bda3e185ce85779..29f407f313a1a10a451d26e31e661450f980cd06 100644 (file)
@@ -519,7 +519,7 @@ class Listen(TemplateView):
                     where=['''datetime = (SELECT MIN(datetime)
                                             FROM emissions_diffusion
                                         WHERE episode_id = emissions_episode.id)'''],
-                    tables=['emissions_diffusion'],).order_by('-first_diffusion') [:20]
+                    tables=['emissions_diffusion'],).order_by('-first_diffusion') [:10]
 
         context['categories'] = Category.objects.all()
 
@@ -527,38 +527,6 @@ class Listen(TemplateView):
 
 listen = Listen.as_view()
 
-class ListenArchives(TemplateView):
-    template_name = 'listen/archives.html'
-    def get_context_data(self, **kwargs):
-
-        context = super(ListenArchives, self).get_context_data(**kwargs)
-        context['sectionName'] = "Listen"
-        context['episodes'] = Episode.objects.filter(
-                soundfile__podcastable=True, soundfile__fragment=False) \
-                .select_related().extra(select={
-                    'first_diffusion': 'emissions_diffusion.datetime', },
-                    select_params=(False, True),
-                    where=['''datetime = (SELECT MIN(datetime)
-                                            FROM emissions_diffusion
-                                        WHERE episode_id = emissions_episode.id)'''],
-                    tables=['emissions_diffusion'],).order_by('-first_diffusion') [:60]
-
-        # get all related soundfiles in a single query
-        soundfiles = {}
-        for soundfile in SoundFile.objects.select_related().filter(podcastable=True,
-                fragment=False, episode__in=[x.id for x in context['episodes']]):
-            soundfiles[soundfile.episode_id] = soundfile
-
-        # replace dynamic property by a static attribute, to avoid database
-        # lookups
-        for episode in context['episodes']:
-            episode.main_sound = soundfiles.get(episode.id)
-        context['categories'] = Category.objects.all()
-
-        return context
-
-listenArchives = ListenArchives.as_view()
-
 @cache_control(max_age=25)
 @csrf_exempt
 @to_json('api')
index fbd41c99d7fa59daf1fbfa94a157dcc7184afefd..4c79b3c6581b3912cf7899bee2776fcb75ed335d 100644 (file)
@@ -6,10 +6,10 @@
 {% block main %}
 <div class="">
        <div class="wrapper">
-               <ul class="padded custom columns list">
+               <ul class="padded custom list">
                {% for soundfile in soundfiles %}
                        <li class="item {% if soundfile.episode.emission.categories.all.count = 0 %}nocat{% endif %} {% for category in soundfile.episode.emission.categories.all %} {{ category|slugify }}{% endfor %}">
-                         {% soundfile_resume soundfile=soundfile %}
+                         {% soundfile_resume soundfile=soundfile date=soundfile.first_diffusion %}
                        </li>
                {% endfor %}
                </ul>
index d4c785bf850772bed71a3bb4f99eaf272953bf68..68eea80890e83e90f6c7d1db2019254bacea8b74 100644 (file)
@@ -3,14 +3,41 @@
 {% block title %}Listen - Archives{% endblock %}
 {% block nav %}
        {% listen_nav with klass="archives" %}
-
-       <form method="get" action="." class="padded center" id="search-form">
-               <div class="big ">
-                       <label for="id_q">Rechercher:</label>
-                       <input id="id_q" name="q" type="text" {% if search_query %}value="{{ search_query }}{% endif %}">
-                       <button class="icon-search"></button>
-               </div>
-       </form>
 {% endblock %}
+
 {% block main %}
+    <form method="get" action="." class="padded center" id="search-form">
+      <div class="big">
+            {{ form.as_table }}<button class="icon-search"></button>
+      </div>
+    </form>
+
+<div class="wrapper">
+
+{% if not page.object_list %}
+       <div class="big error padded center">Sorry, no result with your query!</div>
+{% else %}
+
+{% if page.has_previous %}
+       <div class="previous-page cf">
+               <a class="button big left" href="?q={{ query }}&amp;page={{ page.previous_page_number }}">&laquo; Résultats précédénts</a>
+       </div>
+{% endif %}
+
+       <ul class="padded custom columns list">
+               {% for result in page.object_list %}
+               <li>{% soundfile_resume soundfile=result.object date=result.date %}</li>
+               {% endfor %}
+       </ul>
+
+{% if page.has_next %}
+       <div class="next-page cf">
+               <a class="button big right" href="?q={{ query }}&amp;page={{ page.next_page_number }}">Résultats suivants &raquo;</a>
+       </div>
+{% endif %}
+
+{% endif %}
+
+</div>
+
 {% endblock %}
index 14e1e5c4a8b1783f5c77ca0e7365df378dbf0305..dc1305bf811e4f37ff7b1a36cfe0bd6ce3d93ae3 100644 (file)
@@ -4,7 +4,7 @@
                <ul class="inline padded">
                        <li><a href="{% url 'listen' %}" class="{% if class != "archives" %}active{% endif %}">
                                <span class="icon-bolt" ></span>
-                               <span class="iconLabel">Dernières</span> 
+                               <span class="iconLabel">Derniers</span>
                        </a></li>
                        <li><a href="{% url 'listenArchives' %}" class="{% if class = "archives" %}active{% endif %}">
                                <span class="icon-archive" ></span>
index cd2af1bec5abf806dec1937c60278dd78c32292b..2724ccdd2b0aaccbdb871234a0363f58a664c458 100644 (file)
@@ -4,9 +4,9 @@
 <div class="episode inline cf">
        <div class="dateBloc">
                <div class="date">
-                       <div class="day">{{ soundfile.first_diffusion|date:"D"|slice:":2"}}</div>
-                       <div class="number">{{ soundfile.first_diffusion|date:"d" }}</div>
-                       <div class="month">{{ soundfile.first_diffusion|date:"M y" }}</div>
+                       <div class="day">{{ date|date:"D"|slice:":2"}}</div>
+                       <div class="number">{{ date|date:"d" }}</div>
+                       <div class="month">{{ date|date:"M y" }}</div>
                </div>
        </div>
        <div class="logo">