| author | verrierj |
| Mon, 13 Feb 2012 15:47:26 +0100 | |
| changeset 563 | 9beab46d99d3 |
| parent 511 | 2edec83f1bd8 |
| child 567 | 715f117b0415 |
| permissions | -rw-r--r-- |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
1 |
from django.conf import settings |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
2 |
from django.contrib.auth.decorators import login_required |
| 319 | 3 |
from django.contrib.auth.models import Group |
|
332
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
4 |
from django.core.urlresolvers import reverse#, resolve |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
5 |
from django.core.paginator import Paginator, InvalidPage, EmptyPage |
| 319 | 6 |
from django.http import (HttpResponseRedirect, HttpResponseForbidden ) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
7 |
from ldt.indexation import get_results_with_context, highlight_documents |
| 319 | 8 |
from django.shortcuts import render_to_response |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
9 |
from django.template import RequestContext |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
10 |
from django.template.loader import render_to_string |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
11 |
from django.utils.html import escape |
| 319 | 12 |
from django.utils.translation import ugettext as _ |
13 |
from ldt.ldt_utils.forms import SearchForm |
|
|
452
8e9494006e7b
segment abstracts + content images can be retrieved directly from search results page
verrierj
parents:
392
diff
changeset
|
14 |
from ldt.ldt_utils.models import Content, Project, Segment |
| 319 | 15 |
from ldt.ldt_utils.utils import boolean_convert |
16 |
from ldt.security.utils import add_change_attr, get_userlist |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
17 |
from lxml.html import fragment_fromstring |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
18 |
from ldt.ldt_utils.projectserializer import ProjectSerializer |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
19 |
from operator import itemgetter |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
20 |
from itertools import groupby |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
21 |
import base64 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
22 |
import django.core.urlresolvers |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
23 |
import ldt.auth as ldt_auth |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
24 |
import lxml.etree |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
25 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
26 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
27 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
28 |
def home(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
29 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
30 |
# list of contents |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
31 |
content_list = add_change_attr(request.user, Content.safe_objects.all()) #@UndefinedVariable |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
32 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
33 |
# get list of projects owned by the current user |
| 392 | 34 |
project_list = add_change_attr(request.user, Project.safe_objects.filter(owner=request.user)) #@UndefinedVariable |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
35 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
36 |
is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
37 |
|
|
332
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
38 |
# Resolve a URL |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
39 |
#project_api_view, project_api_args, project_api_kwargs = resolve('/api/ldt/projects/c8448f21-272d-11e1-876b-c8bcc896c290.json') |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
40 |
#match = resolve('/api/ldt/projects/c8448f21-272d-11e1-876b-c8bcc896c290.json') |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
41 |
|
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
42 |
# Print the URL pattern that matches the URL |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
43 |
#print match.url_name |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
44 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
45 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
46 |
return render_to_response("ldt/ldt_utils/workspace.html", |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
47 |
{'contents': content_list, 'projects': project_list, |
|
332
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
48 |
'is_gecko': is_gecko, #'project_api_url':"match.url_name", |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
49 |
#'project_api_view':match.url_name,'project_api_args':"project_api_args",'project_api_kwargs':"project_api_kwargs" |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
50 |
}, |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
51 |
context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
52 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
53 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
54 |
def groups(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
55 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
56 |
# get list of all published projects |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
57 |
group_list = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
58 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
59 |
group_list = sorted(group_list.all(), key=lambda group: group.name.lower()) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
60 |
group_list = add_change_attr(request.user, group_list) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
61 |
|
|
342
17d615b49a91
Extend image fields size to 200 characters + minor bugs
verrierj
parents:
332
diff
changeset
|
62 |
can_add_group = request.user.has_perm('auth.add_group') |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
63 |
is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
64 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
65 |
return render_to_response("ldt/ldt_utils/groups.html", |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
66 |
{'groups': group_list, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
67 |
'is_gecko': is_gecko, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
68 |
'can_add_group': can_add_group}, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
69 |
context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
70 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
71 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
72 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
73 |
def published_project(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
74 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
75 |
# get list of all published projects |
| 384 | 76 |
project_list = Project.safe_objects.filter(state=2).exclude(title__startswith='front') #@UndefinedVariable |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
77 |
# Search form |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
78 |
form = SearchForm() |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
79 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
80 |
is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
81 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
82 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
83 |
return render_to_response("ldt/ldt_utils/published_projects.html", |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
84 |
{'projects': project_list, 'form': form, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
85 |
'is_gecko': is_gecko}, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
86 |
context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
87 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
88 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
89 |
def popup_embed(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
90 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
91 |
json_url = request.GET.get("json_url") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
92 |
player_id = request.GET.get("player_id") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
93 |
ldt_id = request.GET.get("ldt_id") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
94 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
95 |
project = Project.safe_objects.get(ldt_id=ldt_id); #@UndefinedVariable |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
96 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
97 |
stream_mode = project.stream_mode |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
98 |
if stream_mode != "video": |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
99 |
stream_mode = 'radio' |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
100 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
101 |
player_width = 650 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
102 |
player_height = 480 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
103 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
104 |
if stream_mode == 'radio': |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
105 |
player_height = 1 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
106 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
107 |
if not ldt_auth.check_access(request.user, project): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
108 |
return HttpResponseForbidden(_("You can not access this project")) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
109 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
110 |
ps = ProjectSerializer(project, from_contents=False, from_display=True) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
111 |
annotations = ps.get_annotations(first_cutting=True) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
112 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
113 |
rend_dict = {'json_url':json_url, 'player_id':player_id, 'annotations':annotations, 'ldt_id': ldt_id, 'stream_mode': stream_mode, 'player_width': player_width, 'player_height': player_height} |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
114 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
115 |
embed_rendered = dict((typestr, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
116 |
(lambda s:escape(lxml.etree.tostring(fragment_fromstring(render_to_string("ldt/ldt_utils/partial/embed_%s.html" % (s), rend_dict, context_instance=RequestContext(request))), pretty_print=True)))(typestr)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
117 |
for typestr in ('player', 'seo_body', 'seo_meta', 'links')) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
118 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
119 |
rend_dict['embed_rendered'] = embed_rendered |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
120 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
121 |
return render_to_response("ldt/ldt_utils/embed_popup.html", |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
122 |
rend_dict, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
123 |
context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
124 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
125 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
126 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
127 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
128 |
def share_filter(request, filter, use_groups=False): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
129 |
use_groups = boolean_convert(use_groups) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
130 |
if not filter or len(filter) == 0: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
131 |
raise AttributeError("filter should be a string") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
132 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
133 |
filter = filter[1:] |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
134 |
resp = get_userlist(request.user, filter=filter) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
135 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
136 |
if use_groups: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
137 |
groups = Group.objects.filter(name__icontains=filter).exclude(name=settings.PUBLIC_GROUP_NAME)[0:20] |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
138 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
139 |
for g in groups: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
140 |
resp.append({'name': g.name, 'id': g.id, 'type': 'group'}) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
141 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
142 |
resp = sorted(resp, key=lambda elem: elem['name'].lower()) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
143 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
144 |
return render_to_response("ldt/ldt_utils/partial/sharewith.html", {'elem_list' : resp}, context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
145 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
146 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
147 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
148 |
def search_form(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
149 |
form = SearchForm() |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
150 |
return render_to_response('ldt/ldt_utils/search_form.html', {'form': form} , context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
151 |
|
| 563 | 152 |
@login_required |
153 |
def search_index(request): |
|
154 |
language_code = request.LANGUAGE_CODE[:2] |
|
155 |
||
156 |
page = int(request.GET.get('page', '-1')) |
|
157 |
search = request.GET.get('search', '') |
|
158 |
field = request.GET.get('field', 'all') |
|
159 |
||
160 |
if page >= 0 and search != '': |
|
161 |
results, nb = get_search_results(request, search, field, page) |
|
162 |
||
163 |
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)) |
|
164 |
||
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
165 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
166 |
sform = SearchForm(request.POST) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
167 |
if sform.is_valid(): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
168 |
search = sform.cleaned_data["search"] |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
169 |
queryStr = base64.urlsafe_b64encode(search.encode('utf8')) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
170 |
field = request.POST["field"] |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
171 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
172 |
if request.POST.has_key("ldt_pres"): |
|
321
c68744402249
Change urls used in reverse to be compatible with the new organization
verrierj
parents:
319
diff
changeset
|
173 |
url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.lignesdetemps.search_init", args=[field, queryStr]) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
174 |
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)) |
| 563 | 175 |
else: |
176 |
results, nb = get_search_results(request, search, field, 1) |
|
|
452
8e9494006e7b
segment abstracts + content images can be retrieved directly from search results page
verrierj
parents:
392
diff
changeset
|
177 |
|
| 563 | 178 |
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)) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
179 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
180 |
else: |
| 563 | 181 |
return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project')) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
182 |
|
| 563 | 183 |
|
184 |
def get_search_results(request, search, field, page): |
|
185 |
results = get_results_with_context(field, search) |
|
186 |
||
187 |
all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results]) |
|
188 |
all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2) |
|
189 |
all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results]) |
|
190 |
viewable_projects_id = [p.ldt_id for p in all_projects] |
|
191 |
||
192 |
complete_results = [] |
|
193 |
results.sort(key=lambda k: k['iri_id']) |
|
194 |
||
195 |
for iri_id, item in groupby(results, itemgetter('iri_id')): |
|
196 |
content = filter(lambda e: e.iri_id == iri_id, all_contents)[0] |
|
197 |
if content.description is None: |
|
198 |
content.description = '' |
|
199 |
||
200 |
all_related_segments = list(item) |
|
201 |
||
202 |
valid_segments = [] |
|
203 |
for s in all_related_segments: |
|
204 |
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] |
|
205 |
||
206 |
segment.score = s['score'] |
|
207 |
segment.lucene_id = s['lucene_id'] |
|
208 |
segment.context = s['context'] |
|
209 |
segment.context_tags = s['tags'] |
|
210 |
||
211 |
if not s['project_id']: |
|
212 |
segment.project_id = '_' |
|
213 |
valid_segments.append(segment) |
|
214 |
elif s['project_id'] in viewable_projects_id: |
|
215 |
valid_segments.append(segment) |
|
216 |
||
217 |
# If all segments found belong to unpublished projects or projects |
|
218 |
# the current user is not allowed to see |
|
219 |
if not valid_segments: |
|
220 |
continue |
|
221 |
||
222 |
score = sum([seg.score for seg in valid_segments]) |
|
223 |
complete_results.append({ |
|
224 |
'list': valid_segments, |
|
225 |
'score': score, |
|
226 |
'content': content, |
|
227 |
}) |
|
228 |
||
229 |
complete_results.sort(key=lambda k: k['score']) |
|
230 |
||
231 |
paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE) |
|
232 |
||
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
233 |
try: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
234 |
results = paginator.page(page) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
235 |
except (EmptyPage, InvalidPage): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
236 |
results = paginator.page(paginator.num_pages) |
| 563 | 237 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
238 |
results.object_list = highlight_documents(results.object_list, search, field) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
239 |
|
| 563 | 240 |
return results, len(complete_results) |
241 |
||
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
242 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
243 |
def loading(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
244 |
return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
245 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
246 |