--- a/src/ldt/ldt/ldt_utils/views/workspace.py Wed Jan 25 15:47:19 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/views/workspace.py Wed Jan 25 17:57:01 2012 +0100
@@ -12,7 +12,7 @@
from django.utils.html import escape
from django.utils.translation import ugettext as _
from ldt.ldt_utils.forms import SearchForm
-from ldt.ldt_utils.models import Content, Project
+from ldt.ldt_utils.models import Content, Project, Segment
from ldt.ldt_utils.utils import boolean_convert
from ldt.security.utils import add_change_attr, get_userlist
from lxml.html import fragment_fromstring
@@ -165,36 +165,51 @@
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)
- complete_results = []
- # the search is made only on the published project
- proj_list = Project.safe_objects.filter(state=2)
+ results = get_results_with_context(field, search)
+
+ all_segments = Segment.safe_objects.filter(element_id__in=[e['element_id'] for e in results])
+ all_projects = Project.safe_objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2)
+ all_contents = Content.safe_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')):
- try:
- content = Content.objects.get(iri_id=iri_id)
- except Content.DoesNotExist:
- continue
- segments = list(item)
- to_delete = []
- for s in segments:
+
+ 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 = filter(lambda e: e.element_id == s['element_id'] , all_segments)[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']:
s['project_id'] = '_'
- else:
- project = proj_list.filter(ldt_id=s['project_id'])
- if len(project) == 0:
- to_delete.append(s)
-
- for e in to_delete:
- segments.remove(e)
-
- if not segments:
- continue
+ 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 segments])
- desc = content.description if content.description else ''
- complete_results.append({'list' : segments, 'score' : score, 'content_title' : content.title, 'content_id' : content.iri_id, 'content_description' : desc, 'content':content })
-
+ 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)
@@ -208,9 +223,8 @@
results = paginator.page(page)
except (EmptyPage, InvalidPage):
results = paginator.page(paginator.num_pages)
-
- results.object_list = highlight_documents(results.object_list, search, field)
+ 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))