--- a/src/ldt/ldt/ldt_utils/templates/front/front_search_results.html Mon Feb 13 12:12:04 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/front/front_search_results.html Mon Feb 13 15:47:26 2012 +0100
@@ -123,7 +123,7 @@
<li id="result_pagination">
<p>
{% if results.has_previous %}
- <a class="blue under" href="{% url ldt.ldt_utils.views.front.search_listing %}?page={{ results.previous_page_number }}" title="{% trans 'previous' %}">{% trans "previous" %}</a>
+ <a class="blue under" href="{% url ldt.ldt_utils.views.front.search_index %}?page={{ results.previous_page_number }}&search={{search}}&field={{field}}" title="{% trans 'previous' %}">{% trans "previous" %}</a>
.
{% endif %}
{% if results.paginator.num_pages > 1 %}
@@ -133,7 +133,7 @@
{% if i|add:'1' == results.number %}
<span class="pink">{{i|add:'1'}}</span>
{% else %}
- <a class="blue under" href="{% url ldt.ldt_utils.views.front.search_listing %}?page={{i|add:'1'}}">{{i|add:'1'}}</a>
+ <a class="blue under" href="{% url ldt.ldt_utils.views.front.search_index %}?page={{i|add:'1'}}&search={{search}}&field={{field}}">{{i|add:'1'}}</a>
{% endif %}
{% if i|add:'1' < results.paginator.num_pages and 1 < results.paginator.num_pages %}
{% endif %}
@@ -143,7 +143,7 @@
{% endif %}
{% if results.has_next %}
- <a class="blue under" href="{% url ldt.ldt_utils.views.front.search_listing %}?page={{ results.next_page_number }}" title="{% trans 'next' %}">{% trans "next" %}</a>
+ <a class="blue under" href="{% url ldt.ldt_utils.views.front.search_index %}?page={{ results.next_page_number }}&search={{search}}&field={{field}}" title="{% trans 'next' %}">{% trans "next" %}</a>
{% endif %}
</p>
</li>
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html Mon Feb 13 12:12:04 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html Mon Feb 13 15:47:26 2012 +0100
@@ -97,7 +97,7 @@
<div class="pagination">
<span class="step-links">
{% if results.has_previous %}
- <a href="{% url ldt.ldt_utils.views.workspace.search_listing %}?page={{ results.previous_page_number }}">{% trans "previous" %}</a>
+ <a href="{% url ldt.ldt_utils.views.workspace.search_index %}?page={{ results.previous_page_number }}&search={{search}}&field={{field}}">{% trans "previous" %}</a>
{% endif %}
{% if results.paginator.num_pages > 1 %}
@@ -107,7 +107,7 @@
{% endif %}
{% if results.has_next %}
- <a href="{% url ldt.ldt_utils.views.workspace.search_listing %}?page={{ results.next_page_number }}">{% trans "next" %}</a>
+ <a href="{% url ldt.ldt_utils.views.workspace.search_index %}?page={{ results.next_page_number }}&search={{search}}&field={{field}}">{% trans "next" %}</a>
{% endif %}
</span>
</div>
--- a/src/ldt/ldt/ldt_utils/urls.py Mon Feb 13 12:12:04 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/urls.py Mon Feb 13 15:47:26 2012 +0100
@@ -12,7 +12,6 @@
url(r'^groups/$', 'views.workspace.groups'),
url(r'^get_group_projects/$', 'views.group.get_group_projects'),
url(r'^search/$', 'views.workspace.search_index'),
- url(r'^searchListing', 'views.workspace.search_listing'),
url(r'^search/(?P<field>.*)/(?P<query>.*)$', 'views.lignesdetemps.search_index_get'),
url(r'^searchLdt/(?P<field>.*)/(?P<query>.*)$', 'views.lignesdetemps.search_ldt'),
url(r'^searchSeg/(?P<field>.*)/(?P<query>.*)$', 'views.lignesdetemps.search_segments'),
@@ -46,7 +45,6 @@
url(r'^front/player/(?P<content_iri_id>.*)/$', 'views.front.annot_content'),
url(r'^front/player/(?P<content_iri_id>.*)/(?P<project_id>.*)/(?P<cutting_id>.*)$', 'views.front.annot_content'),
url(r'^front/search/$', 'views.front.search_index'),
- url(r'^front/searchListing', 'views.front.search_listing'),
url(r'^front/medias', 'views.front.all_contents'),
)
--- a/src/ldt/ldt/ldt_utils/views/front.py Mon Feb 13 12:12:04 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/views/front.py Mon Feb 13 15:47:26 2012 +0100
@@ -1,13 +1,16 @@
from django.conf import settings
-from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Group, User
+from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response
from django.template import RequestContext
from guardian.shortcuts import get_objects_for_group
from ldt.ldt_utils.models import Content, Project
-from ldt.ldt_utils.views.workspace import search_index as ws_search_index, search_listing as ws_search_listing
+from ldt.ldt_utils.forms import SearchForm
+from ldt.ldt_utils.views.workspace import get_search_results
from tagging.models import Tag, TaggedItem
+import base64
+
def front_home(request):
@@ -119,11 +122,29 @@
def search_index(request):
- return ws_search_index(request, front_template=True)
-
+ language_code = request.LANGUAGE_CODE[:2]
+
+ page = int(request.GET.get('page', '-1'))
+ search = request.GET.get('search', '')
+ field = request.GET.get('field', 'all')
+
+ if page >= 0 and search != '':
+ results, nb = get_search_results(request, search, field, page)
+
+ return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
+
+ sform = SearchForm(request.POST)
+ if sform.is_valid():
+ search = sform.cleaned_data["search"]
+ queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
+ field = request.POST["field"]
+
+ results, nb = get_search_results(request, search, field, 1)
+
+ return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
+ return HttpResponseRedirect('ldt.ldt_utils.views.front.home')
+
-def search_listing(request):
- return ws_search_listing(request, front_template=True)
def get_content_tags(limit=None, steps=10):
--- a/src/ldt/ldt/ldt_utils/views/workspace.py Mon Feb 13 12:12:04 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/views/workspace.py Mon Feb 13 15:47:26 2012 +0100
@@ -1,7 +1,6 @@
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Group
-from django.core.cache import cache
from django.core.urlresolvers import reverse#, resolve
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.http import (HttpResponseRedirect, HttpResponseForbidden )
@@ -150,130 +149,96 @@
form = SearchForm()
return render_to_response('ldt/ldt_utils/search_form.html', {'form': form} , context_instance=RequestContext(request))
-
-def search_index(request, front_template=False):
+@login_required
+def search_index(request):
+ language_code = request.LANGUAGE_CODE[:2]
+
+ page = int(request.GET.get('page', '-1'))
+ search = request.GET.get('search', '')
+ field = request.GET.get('field', 'all')
+
+ if page >= 0 and search != '':
+ results, nb = get_search_results(request, search, field, page)
+
+ return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
+
sform = SearchForm(request.POST)
if sform.is_valid():
search = sform.cleaned_data["search"]
queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
field = request.POST["field"]
- language_code = request.LANGUAGE_CODE[:2]
if request.POST.has_key("ldt_pres"):
url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.lignesdetemps.search_init", args=[field, queryStr])
return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
- else:
- results = get_results_with_context(field, search)
-
- # Search results come from published project
- # We do not apply permissions here since it has to be reached from unlogged users.
- all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results])
- all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2)
- all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results])
- viewable_projects_id = [p.ldt_id for p in all_projects]
-
- complete_results = []
- results.sort(key=lambda k: k['iri_id'])
+ else:
+ results, nb = get_search_results(request, search, field, 1)
- for iri_id, item in groupby(results, itemgetter('iri_id')):
- content = filter(lambda e: e.iri_id == iri_id, all_contents)[0]
- if content.description is None:
- content.description = ''
-
- all_related_segments = list(item)
-
- valid_segments = []
- for s in all_related_segments:
- segment = [seg for seg in all_segments if seg.element_id == s['element_id'] and seg.project_id == s['project_id'] and seg.iri_id == s['iri_id'] and seg.cutting_id == s['decoupage_id'] and seg.ensemble_id == s['ensemble_id'] ][0]
-
- segment.score = s['score']
- segment.lucene_id = s['lucene_id']
- segment.context = s['context']
- segment.context_tags = s['tags']
-
- if not s['project_id']:
- segment.project_id = '_'
- valid_segments.append(segment)
- elif s['project_id'] in viewable_projects_id:
- valid_segments.append(segment)
-
- # If all segments found belong to unpublished projects or projects
- # the current user is not allowed to see
- if not valid_segments:
- continue
-
- score = sum([seg.score for seg in valid_segments])
- complete_results.append({
- 'list': valid_segments,
- 'score': score,
- 'content': content,
- })
-
-
- complete_results.sort(key=lambda k: k['score'])
-
- cache.set('complete_results_%s' % request.user.username, complete_results)
- cache.set('search_%s' % request.user.username, search)
- cache.set('field_%s' % request.user.username, field)
-
- paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE)
- page = 1
-
- try:
- results = paginator.page(page)
- except (EmptyPage, InvalidPage):
- results = paginator.page(paginator.num_pages)
-
- results.object_list = highlight_documents(results.object_list, search, field)
-
- if front_template :
- return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
- else :
- return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
+ return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
else:
- if front_template :
- return HttpResponseRedirect(reverse('ldt.ldt_utils.views.front.front_home'))
- else :
- return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project'))
-
+ return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project'))
-def search_listing(request, front_template=False):
- if not cache.get('complete_results_%s' % request.user.username):
- if front_template :
- return HttpResponseRedirect(reverse('ldt.ldt_utils.views.front.front_home'))
- else :
- return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project'))
-
- complete_results = cache.get('complete_results_%s' % request.user.username)
- search = cache.get('search_%s' % request.user.username)
- field = cache.get('field_%s' % request.user.username)
- paginator = Paginator(complete_results, settings.LDT_RESULTS_PER_PAGE)
- language_code = request.LANGUAGE_CODE[:2]
-
- try:
- page = int(request.GET.get('page', '1'))
- except ValueError:
- page = 1
-
+
+def get_search_results(request, search, field, page):
+ results = get_results_with_context(field, search)
+
+ all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results])
+ all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2)
+ all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results])
+ viewable_projects_id = [p.ldt_id for p in all_projects]
+
+ complete_results = []
+ results.sort(key=lambda k: k['iri_id'])
+
+ for iri_id, item in groupby(results, itemgetter('iri_id')):
+ content = filter(lambda e: e.iri_id == iri_id, all_contents)[0]
+ if content.description is None:
+ content.description = ''
+
+ all_related_segments = list(item)
+
+ valid_segments = []
+ for s in all_related_segments:
+ segment = [seg for seg in all_segments if seg.element_id == s['element_id'] and seg.project_id == s['project_id'] and seg.iri_id == s['iri_id'] and seg.cutting_id == s['decoupage_id'] and seg.ensemble_id == s['ensemble_id'] ][0]
+
+ segment.score = s['score']
+ segment.lucene_id = s['lucene_id']
+ segment.context = s['context']
+ segment.context_tags = s['tags']
+
+ if not s['project_id']:
+ segment.project_id = '_'
+ valid_segments.append(segment)
+ elif s['project_id'] in viewable_projects_id:
+ valid_segments.append(segment)
+
+ # If all segments found belong to unpublished projects or projects
+ # the current user is not allowed to see
+ if not valid_segments:
+ continue
+
+ score = sum([seg.score for seg in valid_segments])
+ complete_results.append({
+ 'list': valid_segments,
+ 'score': score,
+ 'content': content,
+ })
+
+ complete_results.sort(key=lambda k: k['score'])
+
+ paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE)
+
try:
results = paginator.page(page)
except (EmptyPage, InvalidPage):
results = paginator.page(paginator.num_pages)
-
+
results.object_list = highlight_documents(results.object_list, search, field)
-
- if front_template :
- return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
- else :
- return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
-
-
-
-
-
+ return results, len(complete_results)
+
def loading(request):
return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request))