Commit ccf2d18dc368c2070042842ca1d3d7fb30037a91
1 parent
79e8a63d
Exists in
master
and in
39 other branches
Fixing home and removing old search
Showing
7 changed files
with
108 additions
and
26 deletions
Show diff stats
src/colab/deprecated/views/other.py
| ... | ... | @@ -6,12 +6,16 @@ other.py |
| 6 | 6 | Created by Sergio Campos on 2012-01-10. |
| 7 | 7 | """ |
| 8 | 8 | |
| 9 | +import datetime | |
| 10 | + | |
| 9 | 11 | from django.template import RequestContext |
| 10 | 12 | from django.http import HttpResponseNotAllowed |
| 11 | 13 | from django.shortcuts import render_to_response |
| 14 | +from django.utils import timezone | |
| 12 | 15 | from django.utils.translation import ugettext as _ |
| 13 | 16 | |
| 14 | -from colab.deprecated import solrutils | |
| 17 | +from haystack.query import SearchQuerySet | |
| 18 | + | |
| 15 | 19 | from super_archives import queries |
| 16 | 20 | |
| 17 | 21 | |
| ... | ... | @@ -21,11 +25,21 @@ def home(request): |
| 21 | 25 | latest_threads = queries.get_latest_threads() |
| 22 | 26 | hottest_threads = queries.get_hottest_threads() |
| 23 | 27 | |
| 28 | + count_types = {} | |
| 29 | + six_months = timezone.now() - datetime.timedelta(days=180) | |
| 30 | + for type in ['wiki', 'thread', 'changeset', 'ticket']: | |
| 31 | + count_types[type] = SearchQuerySet().filter( | |
| 32 | + type=type, | |
| 33 | + modified__gte=six_months, | |
| 34 | + ).count() | |
| 35 | + | |
| 24 | 36 | template_data = { |
| 25 | 37 | 'hottest_threads': hottest_threads[:6], |
| 26 | 38 | 'latest_threads': latest_threads[:6], |
| 27 | - 'type_count': solrutils.count_types(sample=1000), | |
| 28 | - 'latest_docs': solrutils.get_latest_collaborations(6), | |
| 39 | + 'type_count': count_types, | |
| 40 | + 'latest_results': SearchQuerySet().all().order_by( | |
| 41 | + '-modified', '-created' | |
| 42 | + )[:6], | |
| 29 | 43 | } |
| 30 | 44 | return render_to_response('home.html', template_data, |
| 31 | 45 | context_instance=RequestContext(request)) |
| ... | ... | @@ -34,7 +48,7 @@ def home(request): |
| 34 | 48 | def search(request): |
| 35 | 49 | if request.method != 'GET': |
| 36 | 50 | return HttpResponseNotAllowed(['GET']) |
| 37 | - | |
| 51 | + | |
| 38 | 52 | query = request.GET.get('q') |
| 39 | 53 | sort = request.GET.get('o') |
| 40 | 54 | type_ = request.GET.get('type') |
| ... | ... | @@ -42,7 +56,7 @@ def search(request): |
| 42 | 56 | page_number = int(request.GET.get('p', '1')) |
| 43 | 57 | except ValueError: |
| 44 | 58 | page_number = 1 |
| 45 | - | |
| 59 | + | |
| 46 | 60 | try: |
| 47 | 61 | results_per_page = int(request.GET.get('per_page', 16)) |
| 48 | 62 | except ValueError: | ... | ... |
src/colab/urls.py
| 1 | - | |
| 2 | 1 | from django.conf.urls import patterns, include, url |
| 3 | 2 | from django.conf import settings |
| 4 | 3 | from django.views.generic import TemplateView |
| 5 | 4 | from django.contrib import admin |
| 6 | -from haystack.forms import ModelSearchForm | |
| 7 | -from haystack.query import SearchQuerySet | |
| 8 | -from haystack.views import SearchView | |
| 9 | 5 | |
| 10 | 6 | from accounts.models import User |
| 11 | 7 | from search.forms import ColabSearchForm |
| ... | ... | @@ -17,14 +13,7 @@ admin.autodiscover() |
| 17 | 13 | urlpatterns = patterns('', |
| 18 | 14 | url(r'^$', 'colab.deprecated.views.other.home', name='home'), |
| 19 | 15 | |
| 20 | - # TODO change search to full_search with haystack | |
| 21 | - url(r'^search/$', 'colab.deprecated.views.other.search', name='search'), | |
| 22 | - url(r'^full_search/', SearchView( | |
| 23 | - template='search/search.html', | |
| 24 | - searchqueryset=SearchQuerySet(), | |
| 25 | - form_class=ColabSearchForm, | |
| 26 | - ), name='haystack_search'), | |
| 27 | - | |
| 16 | + url(r'^search/', include('search.urls')), | |
| 28 | 17 | url(r'open-data/$', TemplateView.as_view(template_name='open-data.html'), |
| 29 | 18 | name='opendata'), |
| 30 | 19 | ... | ... |
src/search/forms.py
| ... | ... | @@ -12,7 +12,7 @@ from super_archives.models import Message |
| 12 | 12 | |
| 13 | 13 | |
| 14 | 14 | class ColabSearchForm(SearchForm): |
| 15 | - q = forms.CharField(label=_('Search')) | |
| 15 | + q = forms.CharField(label=_('Search'), required=False) | |
| 16 | 16 | order = forms.CharField(widget=forms.HiddenInput(), required=False) |
| 17 | 17 | type = forms.CharField(required=False, label=_(u'Type')) |
| 18 | 18 | ... | ... |
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +from django.conf.urls import patterns, include, url | |
| 2 | +from haystack.query import SearchQuerySet | |
| 3 | + | |
| 4 | +from .forms import ColabSearchForm | |
| 5 | +from .views import ColabSearchView | |
| 6 | + | |
| 7 | + | |
| 8 | +urlpatterns = patterns('', | |
| 9 | + url(r'^$', ColabSearchView( | |
| 10 | + template='search/search.html', | |
| 11 | + searchqueryset=SearchQuerySet(), | |
| 12 | + form_class=ColabSearchForm, | |
| 13 | + ), name='haystack_search'), | |
| 14 | +) | ... | ... |
src/search/views.py
| 1 | -from django.shortcuts import render | |
| 1 | +# -*- coding:utf-8 -*- | |
| 2 | 2 | |
| 3 | -# Create your views here. | |
| 3 | +from django.conf import settings | |
| 4 | +from haystack.views import SearchView | |
| 5 | + | |
| 6 | + | |
| 7 | +class ColabSearchView(SearchView): | |
| 8 | + def extra_context(self, *args, **kwargs): | |
| 9 | + # Retornar todos os campos de cada tipo a serem filtrados | |
| 10 | + # retornar os nomes dos campos | |
| 11 | + # retornar os ícones dos tipos | |
| 12 | + | |
| 13 | + # a critical point on the system | |
| 14 | + types = { | |
| 15 | + 'wiki': { | |
| 16 | + 'icon': 'file', | |
| 17 | + 'fields': [ | |
| 18 | + 'title', 'description', 'author', 'collaborators', | |
| 19 | + 'created', 'modified', | |
| 20 | + ], | |
| 21 | + }, | |
| 22 | + 'discussion': { | |
| 23 | + 'icon': 'thread', | |
| 24 | + 'fields': [ | |
| 25 | + 'title', 'description', 'created', 'modified', 'author', | |
| 26 | + 'tag', | |
| 27 | + ], | |
| 28 | + }, | |
| 29 | + 'ticket': { | |
| 30 | + 'icon': 'ticket', | |
| 31 | + 'fields': [ | |
| 32 | + 'title', 'description', 'milestone', 'priority', | |
| 33 | + 'component', 'version', 'severity', 'reporter', 'author', | |
| 34 | + 'status', 'keywords', 'collaborators', 'created', | |
| 35 | + 'modified', | |
| 36 | + ], | |
| 37 | + }, | |
| 38 | + 'changeset': { | |
| 39 | + 'icon': 'changeset', | |
| 40 | + 'fields': [ | |
| 41 | + 'title', 'author', 'description', 'repository_name', | |
| 42 | + 'created', 'modified', | |
| 43 | + ], | |
| 44 | + }, | |
| 45 | + 'user': { | |
| 46 | + 'icon': 'user', | |
| 47 | + 'fields': [ | |
| 48 | + 'title', 'description', 'username', 'name', | |
| 49 | + 'email', 'institution', 'role', 'google_talk', 'webpage', | |
| 50 | + ], | |
| 51 | + }, | |
| 52 | + } | |
| 53 | + types = self.form.cleaned_data['type'] | |
| 54 | + return dict( | |
| 55 | + types=types.split(), | |
| 56 | + types_str=types, | |
| 57 | + order_data=settings.ORDERING_DATA | |
| 58 | + ) | ... | ... |
src/templates/home.html
| ... | ... | @@ -27,12 +27,12 @@ |
| 27 | 27 | title="{% trans 'RSS - Latest collaborations' %}"> |
| 28 | 28 | </a> |
| 29 | 29 | <ul class="message-list"> |
| 30 | - {% for doc in latest_docs %} | |
| 31 | - {% include "message-preview.html" %} | |
| 30 | + {% for result in latest_results %} | |
| 31 | + {% include "search/preview-search.html" %} | |
| 32 | 32 | {% endfor %} |
| 33 | 33 | </ul> |
| 34 | 34 | <a class="column-align" |
| 35 | - href="{% url 'search' %}?o=modified+desc"> | |
| 35 | + href="{% url 'haystack_search' %}?order=latest"> | |
| 36 | 36 | {% trans "View more collaborations..." %} |
| 37 | 37 | </a> |
| 38 | 38 | <div> </div> | ... | ... |
src/templates/search/preview-search.html
| ... | ... | @@ -14,14 +14,18 @@ |
| 14 | 14 | <a href="{{ result.url }}" {% if result.description %}title="{{ result.description|escape|truncatechars:200 }}"{% endif %}> |
| 15 | 15 | <span class="subject"> |
| 16 | 16 | <!-- a striptags filter was raising an error here because using with highlight --> |
| 17 | - {% highlight result.title with query max_length "1000" %} | |
| 17 | + {% if query %} | |
| 18 | + {% highlight result.title with query max_length "1000" %} | |
| 19 | + {% else %} | |
| 20 | + {{ result.title }} | |
| 21 | + {% endif %} | |
| 18 | 22 | </span> |
| 19 | 23 | </a> |
| 20 | 24 | {% endif %} |
| 21 | 25 | |
| 22 | 26 | {% if result.description %} |
| 23 | 27 | <!-- a striptags filter was raising an error here because using with highlight --> |
| 24 | - <span class="quiet">- {% highlight result.description with query max_length "150" %}</span> | |
| 28 | + <span class="quiet">- {% if query %}{% highlight result.description with query max_length "150" %}{% else %}{{ result.description }}{% endif %}</span> | |
| 25 | 29 | {% endif %} |
| 26 | 30 | |
| 27 | 31 | {% if result.author or result.modified %} |
| ... | ... | @@ -29,7 +33,13 @@ |
| 29 | 33 | {% if result.author %} |
| 30 | 34 | <span class="pull-left">{% trans "by" %} |
| 31 | 35 | {% if result.author and result.author_url %} |
| 32 | - <a href="{{ result.author_url }}">{% highlight result.author with query %}</a> | |
| 36 | + <a href="{{ result.author_url }}"> | |
| 37 | + {% if query %} | |
| 38 | + {% highlight result.author with query %} | |
| 39 | + {% else %} | |
| 40 | + {{ result.author }} | |
| 41 | + {% endif %} | |
| 42 | + </a> | |
| 33 | 43 | {% else %} |
| 34 | 44 | <span>{{ result.author }}</span> |
| 35 | 45 | {% endif %} | ... | ... |