| author | cavaliet |
| Mon, 05 Nov 2012 15:19:24 +0100 | |
| changeset 886 | 3ccedd271e36 |
| parent 876 | 8fd46e270e23 |
| child 893 | bd5f9dea9791 |
| 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 |
| 873 | 6 |
from django.http import 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 |
| 886 | 16 |
from ldt.ldt_utils.projectserializer import ProjectJsonSerializer |
| 710 | 17 |
from ldt.ldt_utils.views.content import get_contents_page, get_content_tags |
|
646
97f5db87d71c
Enhance pagination with public project and quick search.
cavaliet
parents:
644
diff
changeset
|
18 |
from ldt.ldt_utils.views.project import get_projects_page, get_published_projects_page |
| 319 | 19 |
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
|
20 |
from operator import itemgetter |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
21 |
from itertools import groupby |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
22 |
import base64 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
23 |
import django.core.urlresolvers |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
24 |
import ldt.auth as ldt_auth |
| 873 | 25 |
from django.utils.safestring import mark_safe |
|
839
e5b5e9d56eec
Radio button to choose between div and iframe embed code.
grandjoncl
parents:
833
diff
changeset
|
26 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
27 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
28 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
29 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
30 |
def home(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
31 |
|
|
644
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
32 |
num_page = 0 |
|
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
33 |
# Prepare contents pagination |
|
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
34 |
content_nb, nb_ct_pages, content_list = get_contents_page(num_page, request.user) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
35 |
# get list of projects owned by the current user |
|
644
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
36 |
project_nb, nb_pj_pages, project_list = get_projects_page(num_page, request.user) |
| 710 | 37 |
# Get the all tags list |
38 |
tag_cloud = get_content_tags() |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
39 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
40 |
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
|
41 |
|
|
332
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
42 |
# Resolve a URL |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
43 |
#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
|
44 |
#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
|
45 |
|
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
46 |
# 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
|
47 |
#print match.url_name |
|
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
48 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
49 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
50 |
return render_to_response("ldt/ldt_utils/workspace.html", |
|
644
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
51 |
{'contents': content_list, 'nb_ct_pages': nb_ct_pages, 'content_nb': content_nb, 'current_content_page':float(num_page), |
|
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
52 |
'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'project_nb': project_nb, 'current_project_page':float(num_page), |
| 710 | 53 |
'tag_cloud': tag_cloud, 'is_gecko': is_gecko, #'project_api_url':"match.url_name", |
|
332
c28d4dc49a50
add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents:
321
diff
changeset
|
54 |
#'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
|
55 |
}, |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
56 |
context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
57 |
|
|
644
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
58 |
|
|
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
59 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
60 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
61 |
def groups(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
62 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
63 |
# get list of all published projects |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
64 |
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
|
65 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
66 |
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
|
67 |
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
|
68 |
|
|
342
17d615b49a91
Extend image fields size to 200 characters + minor bugs
verrierj
parents:
332
diff
changeset
|
69 |
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
|
70 |
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
|
71 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
72 |
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
|
73 |
{'groups': group_list, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
74 |
'is_gecko': is_gecko, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
75 |
'can_add_group': can_add_group}, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
76 |
context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
77 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
78 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
79 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
80 |
def published_project(request): |
|
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 |
# get list of all published projects |
|
646
97f5db87d71c
Enhance pagination with public project and quick search.
cavaliet
parents:
644
diff
changeset
|
83 |
#project_list = Project.safe_objects.filter(state=2).exclude(title__startswith='front') #@UndefinedVariable |
|
97f5db87d71c
Enhance pagination with public project and quick search.
cavaliet
parents:
644
diff
changeset
|
84 |
num_page = 0 |
|
97f5db87d71c
Enhance pagination with public project and quick search.
cavaliet
parents:
644
diff
changeset
|
85 |
project_nb, nb_pj_pages, project_list = get_published_projects_page(num_page) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
86 |
# Search form |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
87 |
form = SearchForm() |
|
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 |
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
|
90 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
91 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
92 |
return render_to_response("ldt/ldt_utils/published_projects.html", |
|
646
97f5db87d71c
Enhance pagination with public project and quick search.
cavaliet
parents:
644
diff
changeset
|
93 |
{'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'project_nb': project_nb, 'current_project_page':float(num_page), |
|
97f5db87d71c
Enhance pagination with public project and quick search.
cavaliet
parents:
644
diff
changeset
|
94 |
'form': form, 'is_gecko': is_gecko}, |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
95 |
context_instance=RequestContext(request)) |
|
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 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
98 |
def popup_embed(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
99 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
100 |
json_url = request.GET.get("json_url") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
101 |
player_id = request.GET.get("player_id") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
102 |
ldt_id = request.GET.get("ldt_id") |
|
804
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
103 |
|
| 817 | 104 |
rend_dict = get_datas_for_embed(request, json_url, player_id, ldt_id) |
105 |
||
106 |
embed_rendered = dict((typestr, |
|
107 |
(lambda s:escape(render_to_string("ldt/ldt_utils/partial/embed_%s.html" % (s), rend_dict, context_instance=RequestContext(request))))(typestr)) |
|
108 |
for typestr in ('player', 'seo_body', 'seo_meta', 'links')) |
|
109 |
rend_dict['embed_rendered'] = embed_rendered |
|
110 |
return render_to_response("ldt/ldt_utils/embed_popup.html", rend_dict, context_instance=RequestContext(request)) |
|
111 |
||
112 |
||
113 |
def iframe_embed(request): |
|
114 |
||
115 |
project_id = request.GET.get("project_id") |
|
116 |
if not project_id: |
|
117 |
content_id = request.GET.get("content_id") |
|
| 821 | 118 |
try: |
119 |
content = Content.safe_objects.get(iri_id=content_id) |
|
120 |
except: |
|
121 |
return HttpResponseForbidden(_("The content does not exists or you are not allowed to access this content")) |
|
| 817 | 122 |
project = content.get_or_create_front_project() |
123 |
project_id = project.ldt_id |
|
124 |
if not project_id : |
|
| 821 | 125 |
return HttpResponseForbidden(_("Parameters project_id or content_id must be given in the url")) |
| 817 | 126 |
|
127 |
json_url = reverse("projectjson_id", args=[project_id]) |
|
128 |
player_id = "player_project_" + project_id |
|
129 |
ldt_id = project_id |
|
130 |
rend_dict = get_datas_for_embed(request, json_url, player_id, ldt_id) |
|
| 819 | 131 |
|
132 |
# Manage iframe options |
|
133 |
if request.GET.has_key("polemic"): |
|
134 |
rend_dict["polemic"] = request.GET.get("polemic") |
|
135 |
if request.GET.has_key("show_mic_record"): |
|
136 |
rend_dict["show_mic_record"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_mic_record").lower()) |
|
| 821 | 137 |
if request.GET.has_key("annotations_list"): |
138 |
rend_dict["annotations_list"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("annotations_list").lower()) |
|
139 |
rend_dict["player_width"] = 550 |
|
| 819 | 140 |
|
|
833
20acf3b3b2f0
Embed code corrections : jsonp problem solved, complete adresses in embed_player, display metadataplayer on click when needed, select code on button click, iframe code available in the embed popup
grandjoncl
parents:
821
diff
changeset
|
141 |
rend_dict["annotation_block"]= True |
|
20acf3b3b2f0
Embed code corrections : jsonp problem solved, complete adresses in embed_player, display metadataplayer on click when needed, select code on button click, iframe code available in the embed popup
grandjoncl
parents:
821
diff
changeset
|
142 |
|
| 817 | 143 |
|
144 |
return render_to_response("ldt/ldt_utils/embed_iframe.html", rend_dict, context_instance=RequestContext(request)) |
|
145 |
||
146 |
||
147 |
def get_datas_for_embed(request, json_url, player_id, ldt_id): |
|
148 |
||
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
149 |
project = Project.safe_objects.get(ldt_id=ldt_id); #@UndefinedVariable |
|
804
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
150 |
project_contents = project.contents.all() |
|
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
151 |
content=project_contents[0] |
|
839
e5b5e9d56eec
Radio button to choose between div and iframe embed code.
grandjoncl
parents:
833
diff
changeset
|
152 |
iframe_url = mark_safe(settings.WEB_URL+settings.BASE_URL+"ldtplatform/ldt/embediframe/?content_id="+content.iri_id) |
|
804
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
153 |
external_url = None |
|
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
154 |
if content.src is not None: |
|
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
155 |
for external_src in settings.EXTERNAL_STREAM_SRC: |
|
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
156 |
if external_src in content.src: |
|
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
157 |
external_url = content.src |
| 817 | 158 |
break |
|
804
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
159 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
160 |
stream_mode = project.stream_mode |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
161 |
if stream_mode != "video": |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
162 |
stream_mode = 'radio' |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
163 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
164 |
player_width = 650 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
165 |
player_height = 480 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
166 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
167 |
if stream_mode == 'radio': |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
168 |
player_height = 1 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
169 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
170 |
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
|
171 |
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
|
172 |
|
| 886 | 173 |
ps = ProjectJsonSerializer(project, from_contents=True, from_display=True) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
174 |
annotations = ps.get_annotations(first_cutting=True) |
| 819 | 175 |
rend_dict = {'json_url':json_url, 'player_id':player_id, 'annotations':annotations, 'ldt_id': ldt_id, 'stream_mode': stream_mode, |
176 |
'player_width': player_width, 'player_height': player_height, 'external_url': external_url, |
|
|
839
e5b5e9d56eec
Radio button to choose between div and iframe embed code.
grandjoncl
parents:
833
diff
changeset
|
177 |
'polemic':False, 'show_mic_record':False, 'annotations_list':False, 'iframe_url':iframe_url} |
|
804
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
178 |
|
| 817 | 179 |
return rend_dict |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
180 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
181 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
182 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
183 |
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
|
184 |
use_groups = boolean_convert(use_groups) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
185 |
if not filter or len(filter) == 0: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
186 |
raise AttributeError("filter should be a string") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
187 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
188 |
filter = filter[1:] |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
189 |
resp = get_userlist(request.user, filter=filter) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
190 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
191 |
if use_groups: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
192 |
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
|
193 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
194 |
for g in groups: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
195 |
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
|
196 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
197 |
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
|
198 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
199 |
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
|
200 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
201 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
202 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
203 |
def search_form(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
204 |
form = SearchForm() |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
205 |
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
|
206 |
|
| 563 | 207 |
@login_required |
208 |
def search_index(request): |
|
209 |
language_code = request.LANGUAGE_CODE[:2] |
|
| 570 | 210 |
nb = 0 |
211 |
results = [] |
|
212 |
search = '' |
|
213 |
field = 'all' |
|
| 563 | 214 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
215 |
|
| 570 | 216 |
sform = SearchForm(request.GET) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
217 |
if sform.is_valid(): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
218 |
search = sform.cleaned_data["search"] |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
219 |
queryStr = base64.urlsafe_b64encode(search.encode('utf8')) |
| 570 | 220 |
field = sform.cleaned_data["field"] |
221 |
page = sform.cleaned_data["page"] or 1 |
|
222 |
ldt_pres = sform.cleaned_data["ldt_pres"] |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
223 |
|
| 570 | 224 |
if ldt_pres: |
|
321
c68744402249
Change urls used in reverse to be compatible with the new organization
verrierj
parents:
319
diff
changeset
|
225 |
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
|
226 |
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 | 227 |
else: |
| 570 | 228 |
results, nb = get_search_results(request, search, field, page) |
|
452
8e9494006e7b
segment abstracts + content images can be retrieved directly from search results page
verrierj
parents:
392
diff
changeset
|
229 |
|
| 570 | 230 |
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
|
231 |
|
| 570 | 232 |
|
| 599 | 233 |
def get_search_results(request, search, field, page, content_list=None): |
| 602 | 234 |
# We parse the author if necessary. For author search to work in every case, we have to transform the query author:cheese shop into author:"CHEESE SHOP" |
235 |
if u'author:' in search.lower() : |
|
236 |
sub = search[7:] |
|
237 |
sub = sub.upper() |
|
238 |
if sub[0] != u'"': |
|
239 |
sub = u'"' + sub |
|
240 |
if sub[-1] != u'"': |
|
241 |
sub = sub + u'"' |
|
242 |
search = u'author:' + sub |
|
| 599 | 243 |
results = get_results_with_context(field, search, content_list) |
| 563 | 244 |
|
245 |
all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results]) |
|
246 |
all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2) |
|
247 |
all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results]) |
|
248 |
viewable_projects_id = [p.ldt_id for p in all_projects] |
|
249 |
||
250 |
complete_results = [] |
|
251 |
results.sort(key=lambda k: k['iri_id']) |
|
252 |
||
253 |
for iri_id, item in groupby(results, itemgetter('iri_id')): |
|
254 |
content = filter(lambda e: e.iri_id == iri_id, all_contents)[0] |
|
255 |
if content.description is None: |
|
256 |
content.description = '' |
|
257 |
||
|
567
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
258 |
all_related_segments = list(item) |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
259 |
|
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
260 |
valid_segments = [] |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
261 |
for s in all_related_segments: |
|
718
5e27a39d3742
replace lucene by haystack, remove references to lucene
ymh <ymh.work@gmail.com>
parents:
716
diff
changeset
|
262 |
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['cutting_id'] and seg.ensemble_id == s['ensemble_id'] ][0] |
| 563 | 263 |
|
|
567
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
264 |
segment.score = s['score'] |
| 716 | 265 |
segment.indexation_id = s['indexation_id'] |
|
567
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
266 |
segment.context = s['context'] |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
267 |
segment.context_tags = s['tags'] |
| 726 | 268 |
segment.highlighted = s['highlighted'] |
|
567
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
269 |
|
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
270 |
if not s['project_id']: |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
271 |
segment.project_id = '_' |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
272 |
valid_segments.append(segment) |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
273 |
elif s['project_id'] in viewable_projects_id: |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
274 |
valid_segments.append(segment) |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
275 |
|
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
276 |
# If all segments found belong to unpublished projects or projects |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
277 |
# the current user is not allowed to see |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
278 |
if not valid_segments: |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
279 |
continue |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
280 |
|
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
281 |
score = sum([seg.score for seg in valid_segments]) |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
282 |
complete_results.append({ |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
283 |
'list': valid_segments, |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
284 |
'score': score, |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
285 |
'content': content, |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
286 |
}) |
| 563 | 287 |
|
288 |
complete_results.sort(key=lambda k: k['score']) |
|
289 |
||
290 |
paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE) |
|
291 |
||
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
292 |
try: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
293 |
results = paginator.page(page) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
294 |
except (EmptyPage, InvalidPage): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
295 |
results = paginator.page(paginator.num_pages) |
| 563 | 296 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
297 |
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
|
298 |
|
| 563 | 299 |
return results, len(complete_results) |
300 |
||
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
301 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
302 |
def loading(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
303 |
return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request)) |
|
644
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
304 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
305 |