| author | ymh <ymh.work@gmail.com> |
| Tue, 22 Jan 2013 09:41:36 +0100 | |
| changeset 1074 | 36f657714851 |
| parent 1035 | 85322320d89c |
| child 1075 | 66c7a0826bd7 |
| 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 |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
4 |
from django.core.paginator import Paginator, InvalidPage, EmptyPage |
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
5 |
from django.core.urlresolvers import reverse #, resolve |
| 1074 | 6 |
from django.db import transaction |
7 |
from django.http import (HttpResponseForbidden, HttpResponseNotFound, |
|
8 |
HttpResponseRedirect) |
|
| 319 | 9 |
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
|
10 |
from django.template import RequestContext |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
11 |
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
|
12 |
from django.utils.html import escape |
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
13 |
from django.utils.safestring import mark_safe |
| 319 | 14 |
from django.utils.translation import ugettext as _ |
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
15 |
from itertools import groupby |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
16 |
from ldt.indexation import get_results_with_context, highlight_documents |
| 1074 | 17 |
from ldt.ldt_utils import contentindexer |
| 319 | 18 |
from ldt.ldt_utils.forms import SearchForm |
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
19 |
from ldt.ldt_utils.models import Content, Project, Segment |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
20 |
from ldt.ldt_utils.projectserializer import ProjectJsonSerializer |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
21 |
from ldt.ldt_utils.utils import boolean_convert |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
22 |
from ldt.ldt_utils.views.content import get_contents_page, get_content_tags |
| 1074 | 23 |
from ldt.ldt_utils.views.project import (get_projects_page, |
24 |
get_published_projects_page) |
|
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
25 |
from ldt.security.utils import add_change_attr, get_userlist |
|
1010
a8a42538ba0e
modification of get_web_url to have less dependances and be usable in ldt_utils->models
grandjoncl
parents:
1008
diff
changeset
|
26 |
from ldt.utils.url import absstatic, absurl |
|
a8a42538ba0e
modification of get_web_url to have less dependances and be usable in ldt_utils->models
grandjoncl
parents:
1008
diff
changeset
|
27 |
from ldt.utils.web_url_management import get_web_url |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
28 |
from operator import itemgetter |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
29 |
import base64 |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
30 |
import ldt.auth as ldt_auth |
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
31 |
import lxml.etree |
|
315
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 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
34 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
35 |
def home(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
36 |
|
|
644
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
37 |
num_page = 0 |
|
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
38 |
# Prepare contents pagination |
|
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
39 |
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
|
40 |
# 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
|
41 |
project_nb, nb_pj_pages, project_list = get_projects_page(num_page, request.user) |
| 710 | 42 |
# Get the all tags list |
43 |
tag_cloud = get_content_tags() |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
44 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
45 |
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
|
46 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
47 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
48 |
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
|
49 |
{'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
|
50 |
'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'project_nb': project_nb, 'current_project_page':float(num_page), |
| 710 | 51 |
'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
|
52 |
#'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
|
53 |
}, |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
54 |
context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
55 |
|
|
644
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
56 |
|
|
94429061bbfa
First step of pagination for contents and projet in workspace home.
cavaliet
parents:
602
diff
changeset
|
57 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
58 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
59 |
def groups(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
60 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
61 |
# get list of all published projects |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
62 |
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
|
63 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
64 |
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
|
65 |
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
|
66 |
|
|
342
17d615b49a91
Extend image fields size to 200 characters + minor bugs
verrierj
parents:
332
diff
changeset
|
67 |
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
|
68 |
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
|
69 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
70 |
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
|
71 |
{'groups': group_list, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
72 |
'is_gecko': is_gecko, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
73 |
'can_add_group': can_add_group}, |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
74 |
context_instance=RequestContext(request)) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
75 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
76 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
77 |
@login_required |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
78 |
def published_project(request): |
|
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 |
# get list of all published projects |
|
646
97f5db87d71c
Enhance pagination with public project and quick search.
cavaliet
parents:
644
diff
changeset
|
81 |
#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
|
82 |
num_page = 0 |
|
97f5db87d71c
Enhance pagination with public project and quick search.
cavaliet
parents:
644
diff
changeset
|
83 |
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
|
84 |
# Search form |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
85 |
form = SearchForm() |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
86 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
87 |
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
|
88 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
89 |
# render list |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
90 |
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
|
91 |
{'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
|
92 |
'form': form, 'is_gecko': is_gecko}, |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
93 |
context_instance=RequestContext(request)) |
|
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 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
96 |
def popup_embed(request): |
|
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 |
json_url = request.GET.get("json_url") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
99 |
player_id = request.GET.get("player_id") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
100 |
ldt_id = request.GET.get("ldt_id") |
| 817 | 101 |
rend_dict = get_datas_for_embed(request, json_url, player_id, ldt_id) |
102 |
||
103 |
embed_rendered = dict((typestr, |
|
104 |
(lambda s:escape(render_to_string("ldt/ldt_utils/partial/embed_%s.html" % (s), rend_dict, context_instance=RequestContext(request))))(typestr)) |
|
| 927 | 105 |
for typestr in ('seo_body', 'seo_meta', 'links')) |
|
893
bd5f9dea9791
Embed code popup modified in order to be abble to display html5 player
grandjoncl
parents:
886
diff
changeset
|
106 |
|
| 817 | 107 |
rend_dict['embed_rendered'] = embed_rendered |
108 |
return render_to_response("ldt/ldt_utils/embed_popup.html", rend_dict, context_instance=RequestContext(request)) |
|
109 |
||
110 |
||
111 |
def iframe_embed(request): |
|
112 |
||
113 |
project_id = request.GET.get("project_id") |
|
114 |
if not project_id: |
|
115 |
content_id = request.GET.get("content_id") |
|
| 821 | 116 |
try: |
117 |
content = Content.safe_objects.get(iri_id=content_id) |
|
118 |
except: |
|
119 |
return HttpResponseForbidden(_("The content does not exists or you are not allowed to access this content")) |
|
| 817 | 120 |
project = content.get_or_create_front_project() |
121 |
project_id = project.ldt_id |
|
122 |
if not project_id : |
|
| 821 | 123 |
return HttpResponseForbidden(_("Parameters project_id or content_id must be given in the url")) |
| 817 | 124 |
|
125 |
json_url = reverse("projectjson_id", args=[project_id]) |
|
126 |
player_id = "player_project_" + project_id |
|
127 |
ldt_id = project_id |
|
128 |
rend_dict = get_datas_for_embed(request, json_url, player_id, ldt_id) |
|
| 819 | 129 |
|
130 |
# Manage iframe options |
|
| 1021 | 131 |
if request.GET.has_key("player_height"): |
132 |
rend_dict["player_height"]=request.GET.get("player_height") |
|
133 |
else: |
|
134 |
rend_dict["player_height"]=300 |
|
135 |
if request.GET.has_key("player_width"): |
|
136 |
rend_dict["player_width"]=request.GET.get("player_width") |
|
137 |
else: |
|
138 |
rend_dict["player_width"]=550 |
|
| 819 | 139 |
if request.GET.has_key("polemic"): |
140 |
rend_dict["polemic"] = request.GET.get("polemic") |
|
| 1021 | 141 |
if request.GET.has_key("polemic_defaultColor"): |
142 |
rend_dict["polemic_defaultColor"] = request.GET.get("polemic_defaultColor") |
|
143 |
else: |
|
144 |
rend_dict["polemic_defaultColor"]="585858" |
|
145 |
if request.GET.has_key("polemic_foundColor"): |
|
146 |
rend_dict["polemic_foundColor"] = request.GET.get("polemic_foundColor") |
|
147 |
else: |
|
148 |
rend_dict["polemic_foundColor"]="fc00ff" |
|
149 |
if request.GET.has_key("polemic_okColor"): |
|
150 |
rend_dict["polemic_okColor"] = request.GET.get("polemic_okColor") |
|
151 |
else: |
|
152 |
rend_dict["polemic_okColor"] = "1d973d" |
|
153 |
if request.GET.has_key("polemic_koColor"): |
|
154 |
rend_dict["polemic_koColor"] = request.GET.get("polemic_koColor") |
|
155 |
else: |
|
156 |
rend_dict["polemic_koColor"]="ce0a15" |
|
157 |
if request.GET.has_key("polemic_refColor"): |
|
158 |
rend_dict["polemic_refColor"] = request.GET.get("polemic_refColor") |
|
159 |
else: |
|
160 |
rend_dict["polemic_refColor"] = "c5a62d" |
|
161 |
if request.GET.has_key("polemic_qColor"): |
|
162 |
rend_dict["polemic_qColor"] = request.GET.get("polemic_qColor") |
|
163 |
else: |
|
164 |
rend_dict["polemic_qColor"] = "036aae" |
|
165 |
||
| 929 | 166 |
|
| 1021 | 167 |
if request.GET.has_key("createannotation"): |
168 |
rend_dict["createannotation"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("createannotation").lower()) |
|
| 819 | 169 |
if request.GET.has_key("show_mic_record"): |
170 |
rend_dict["show_mic_record"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_mic_record").lower()) |
|
| 1021 | 171 |
if rend_dict["show_mic_record"]: |
172 |
rend_dict["createannotation"]=True |
|
| 821 | 173 |
if request.GET.has_key("annotations_list"): |
174 |
rend_dict["annotations_list"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("annotations_list").lower()) |
|
175 |
rend_dict["player_width"] = 550 |
|
| 930 | 176 |
if request.GET.has_key("tag_titles"): |
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
177 |
rend_dict["tag_titles"] = request.GET.get("tag_titles") |
| 927 | 178 |
if request.GET.has_key("sparkline"): |
| 929 | 179 |
rend_dict["sparkline"] = request.GET.get("sparkline") |
| 1021 | 180 |
if request.GET.has_key("sparkline_lineColor"): |
181 |
rend_dict["sparkline_lineColor"] = request.GET.get("sparkline_lineColor") |
|
182 |
else: |
|
183 |
rend_dict["sparkline_lineColor"] = "7492b4" |
|
184 |
if request.GET.has_key("sparkline_fillColor"): |
|
185 |
rend_dict["sparkline_fillColor"] = request.GET.get("sparkline_fillColor") |
|
186 |
else: |
|
187 |
rend_dict["sparkline_fillColor"] = "aeaeb8" |
|
| 927 | 188 |
if request.GET.has_key("slideshare"): |
| 928 | 189 |
rend_dict["slideshare"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("slideshare").lower()) |
| 927 | 190 |
if request.GET.has_key("social"): |
| 928 | 191 |
rend_dict["social"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("social").lower()) |
| 929 | 192 |
if request.GET.has_key("show_url"): |
| 1021 | 193 |
rend_dict["show_url"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_url").lower()) |
194 |
else: |
|
195 |
rend_dict["show_url"] = True |
|
| 929 | 196 |
if request.GET.has_key("show_twitter"): |
197 |
rend_dict["show_twitter"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_twitter").lower()) |
|
| 1021 | 198 |
else: |
199 |
rend_dict["show_twitter"] = True |
|
| 929 | 200 |
if request.GET.has_key("show_fb"): |
201 |
rend_dict["show_fb"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_fb").lower()) |
|
| 1021 | 202 |
else: |
203 |
rend_dict["show_fb"] = True |
|
| 929 | 204 |
if request.GET.has_key("show_gplus"): |
205 |
rend_dict["show_gplus"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_gplus").lower()) |
|
| 1021 | 206 |
else: |
207 |
rend_dict["show_gplus"] = True |
|
| 929 | 208 |
if request.GET.has_key("show_mail"): |
209 |
rend_dict["show_mail"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_mail").lower()) |
|
| 1021 | 210 |
else: |
211 |
rend_dict["show_mail"] = True |
|
| 927 | 212 |
if request.GET.has_key("annotation"): |
| 928 | 213 |
rend_dict["annotation"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("annotation").lower()) |
| 927 | 214 |
if request.GET.has_key("tweet"): |
| 928 | 215 |
rend_dict["tweet"] ={'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("tweet").lower()) |
| 927 | 216 |
if request.GET.has_key("segments"): |
| 1022 | 217 |
rend_dict["segments"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("segments").lower()) |
218 |
else: |
|
219 |
rend_dict["segments"] = True |
|
| 927 | 220 |
if request.GET.has_key("tagcloud"): |
| 928 | 221 |
rend_dict["tagcloud"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("tagcloud").lower()) |
| 817 | 222 |
return render_to_response("ldt/ldt_utils/embed_iframe.html", rend_dict, context_instance=RequestContext(request)) |
223 |
||
224 |
||
225 |
def get_datas_for_embed(request, json_url, player_id, ldt_id): |
|
226 |
||
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
227 |
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
|
228 |
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
|
229 |
content=project_contents[0] |
|
1007
a6d47caa7fc0
creation of a function in order to avoid using settings.WEB_URL + reverse in the views. Function to get the web_url using site domain
grandjoncl
parents:
997
diff
changeset
|
230 |
WEB_URL=get_web_url(request) |
| 1021 | 231 |
iframe_url = mark_safe(WEB_URL+settings.BASE_URL+"ldtplatform/ldt/embediframe/?content_id="+content.iri_id+"&project_id="+ldt_id) |
|
804
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
232 |
external_url = None |
|
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
233 |
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
|
234 |
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
|
235 |
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
|
236 |
external_url = content.src |
| 817 | 237 |
break |
|
804
2ed891cf8c44
Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents:
726
diff
changeset
|
238 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
239 |
stream_mode = project.stream_mode |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
240 |
if stream_mode != "video": |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
241 |
stream_mode = 'radio' |
|
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 |
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
|
244 |
return HttpResponseForbidden(_("You can not access this project")) |
| 927 | 245 |
LANGUAGE_CODE=settings.LANGUAGE_CODE |
| 886 | 246 |
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
|
247 |
annotations = ps.get_annotations(first_cutting=True) |
| 819 | 248 |
rend_dict = {'json_url':json_url, 'player_id':player_id, 'annotations':annotations, 'ldt_id': ldt_id, 'stream_mode': stream_mode, |
| 930 | 249 |
'external_url': external_url, |
| 927 | 250 |
'polemic':False, 'show_mic_record':False, 'annotations_list':False, 'iframe_url':iframe_url, 'WEB_URL':WEB_URL, |
|
995
94f9d36371f6
new template tag absstatic to have absolute url for static file and avoid using LDT_MEDIA_PREFIX
grandjoncl
parents:
937
diff
changeset
|
251 |
'LANGUAGE_CODE':LANGUAGE_CODE} |
| 817 | 252 |
return rend_dict |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
253 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
254 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
255 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
256 |
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
|
257 |
use_groups = boolean_convert(use_groups) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
258 |
if not filter or len(filter) == 0: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
259 |
raise AttributeError("filter should be a string") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
260 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
261 |
filter = filter[1:] |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
262 |
resp = get_userlist(request.user, filter=filter) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
263 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
264 |
if use_groups: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
265 |
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
|
266 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
267 |
for g in groups: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
268 |
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
|
269 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
270 |
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
|
271 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
272 |
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
|
273 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
274 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
275 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
276 |
def search_form(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
277 |
form = SearchForm() |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
278 |
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
|
279 |
|
| 563 | 280 |
@login_required |
281 |
def search_index(request): |
|
282 |
language_code = request.LANGUAGE_CODE[:2] |
|
| 570 | 283 |
nb = 0 |
284 |
results = [] |
|
285 |
search = '' |
|
286 |
field = 'all' |
|
|
997
947c8ad09bd6
change of method to have absolute url for static file in views
grandjoncl
parents:
995
diff
changeset
|
287 |
colorurl=absstatic(request, "ldt/swf/ldt/pkg/color.xml") |
|
947c8ad09bd6
change of method to have absolute url for static file in views
grandjoncl
parents:
995
diff
changeset
|
288 |
i18nurl=absstatic(request, "ldt/swf/ldt/pkg/i18n") |
|
947c8ad09bd6
change of method to have absolute url for static file in views
grandjoncl
parents:
995
diff
changeset
|
289 |
baseurl=absstatic(request, "ldt/swf/ldt/") |
| 570 | 290 |
sform = SearchForm(request.GET) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
291 |
if sform.is_valid(): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
292 |
search = sform.cleaned_data["search"] |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
293 |
queryStr = base64.urlsafe_b64encode(search.encode('utf8')) |
| 570 | 294 |
field = sform.cleaned_data["field"] |
295 |
page = sform.cleaned_data["page"] or 1 |
|
296 |
ldt_pres = sform.cleaned_data["ldt_pres"] |
|
297 |
if ldt_pres: |
|
|
1007
a6d47caa7fc0
creation of a function in order to avoid using settings.WEB_URL + reverse in the views. Function to get the web_url using site domain
grandjoncl
parents:
997
diff
changeset
|
298 |
url = absurl(request, "ldt.ldt_utils.views.lignesdetemps.search_init", args=[field, queryStr]) |
|
995
94f9d36371f6
new template tag absstatic to have absolute url for static file and avoid using LDT_MEDIA_PREFIX
grandjoncl
parents:
937
diff
changeset
|
299 |
return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'colorurl': colorurl, 'i18nurl': i18nurl , 'language': language_code, 'baseurl': baseurl, 'url': url}, context_instance=RequestContext(request)) |
|
94f9d36371f6
new template tag absstatic to have absolute url for static file and avoid using LDT_MEDIA_PREFIX
grandjoncl
parents:
937
diff
changeset
|
300 |
else: |
| 1021 | 301 |
results, nb, nb_segment = 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
|
302 |
|
| 1021 | 303 |
return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : nb, 'nb_segment' : nb_segment, 'search' : search, 'field': field, 'colorurl': colorurl, 'i18nurl': i18nurl , 'language': language_code, 'baseurl': baseurl}, context_instance=RequestContext(request)) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
304 |
|
| 570 | 305 |
|
| 599 | 306 |
def get_search_results(request, search, field, page, content_list=None): |
| 602 | 307 |
# 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" |
308 |
if u'author:' in search.lower() : |
|
309 |
sub = search[7:] |
|
310 |
sub = sub.upper() |
|
311 |
if sub[0] != u'"': |
|
312 |
sub = u'"' + sub |
|
313 |
if sub[-1] != u'"': |
|
314 |
sub = sub + u'"' |
|
315 |
search = u'author:' + sub |
|
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
316 |
results = get_results_with_context(field, search, content_list) |
| 563 | 317 |
all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results]) |
318 |
all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2) |
|
319 |
all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results]) |
|
320 |
viewable_projects_id = [p.ldt_id for p in all_projects] |
|
| 1021 | 321 |
nb_segment=0 |
| 563 | 322 |
complete_results = [] |
323 |
results.sort(key=lambda k: k['iri_id']) |
|
324 |
||
325 |
for iri_id, item in groupby(results, itemgetter('iri_id')): |
|
|
1020
f3205dfbeb4f
minor correction to avoid error when search result is empty (initialise var)
rougeronj
parents:
1019
diff
changeset
|
326 |
content=[] |
|
1019
d665c0b9dac0
minor correction to avoid error when search result is empty
rougeronj
parents:
1011
diff
changeset
|
327 |
content_filter = filter(lambda e: e.iri_id == iri_id, all_contents) |
|
d665c0b9dac0
minor correction to avoid error when search result is empty
rougeronj
parents:
1011
diff
changeset
|
328 |
if len(content_filter)>0: |
| 1074 | 329 |
content = content_filter[0] |
|
1019
d665c0b9dac0
minor correction to avoid error when search result is empty
rougeronj
parents:
1011
diff
changeset
|
330 |
if content.description is None: |
|
d665c0b9dac0
minor correction to avoid error when search result is empty
rougeronj
parents:
1011
diff
changeset
|
331 |
content.description = '' |
| 563 | 332 |
|
|
567
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
333 |
all_related_segments = list(item) |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
334 |
|
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
335 |
valid_segments = [] |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
336 |
for s in all_related_segments: |
| 915 | 337 |
array_of_segs = [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'] ] |
338 |
if len(array_of_segs)>0: |
|
339 |
segment = array_of_segs[0] |
|
340 |
||
341 |
segment.score = s['score'] |
|
342 |
segment.indexation_id = s['indexation_id'] |
|
343 |
segment.context = s['context'] |
|
344 |
segment.context_tags = s['tags'] |
|
345 |
segment.highlighted = s['highlighted'] |
|
346 |
||
347 |
if not s['project_id']: |
|
348 |
segment.project_id = '_' |
|
349 |
valid_segments.append(segment) |
|
| 1021 | 350 |
nb_segment+=1 |
| 915 | 351 |
elif s['project_id'] in viewable_projects_id: |
352 |
valid_segments.append(segment) |
|
| 1021 | 353 |
nb_segment+=1 |
|
567
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
354 |
|
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
355 |
# 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
|
356 |
# the current user is not allowed to see |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
357 |
if not valid_segments: |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
358 |
continue |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
359 |
|
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
360 |
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
|
361 |
complete_results.append({ |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
362 |
'list': valid_segments, |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
363 |
'score': score, |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
364 |
'content': content, |
|
715f117b0415
correct search function. change two default tags in embed player.
cavaliet
parents:
563
diff
changeset
|
365 |
}) |
| 563 | 366 |
|
367 |
complete_results.sort(key=lambda k: k['score']) |
|
368 |
||
369 |
paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE) |
|
370 |
||
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
371 |
try: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
372 |
results = paginator.page(page) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
373 |
except (EmptyPage, InvalidPage): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
374 |
results = paginator.page(paginator.num_pages) |
| 563 | 375 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
376 |
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
|
377 |
|
| 1021 | 378 |
return results, len(complete_results), nb_segment |
| 563 | 379 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
380 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
381 |
def loading(request): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
382 |
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
|
383 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
384 |
|
| 1074 | 385 |
@transaction.commit_on_success |
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
386 |
def delete_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id): |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
387 |
if project_id and project_id != "_" : |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
388 |
project = Project.safe_objects.get(ldt_id=project_id) #@UndefinedVariable |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
389 |
if project: |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
390 |
ldtdoc = lxml.etree.fromstring(project.ldt_encoded) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
391 |
xstr = "/iri/annotations/content[@id='%s']/ensemble[@id='%s']/decoupage[@id='%s']/elements/element[@id='%s']" % (content_id, ensemble_id, cutting_id, segment_id) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
392 |
element = None |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
393 |
try: |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
394 |
element = ldtdoc.xpath(xstr) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
395 |
except: |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
396 |
return HttpResponseNotFound(_("Annotation not found in the xml")) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
397 |
if element and len(element)>0: |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
398 |
# element[0] is the annotation to remove |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
399 |
el = element[0] |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
400 |
el.getparent().remove(el) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
401 |
project.ldt = lxml.etree.tostring(ldtdoc) |
| 1074 | 402 |
project.save(must_reindex=False) |
403 |
contentindexer.delete_segment(project, project_id, content_id, ensemble_id, cutting_id, segment_id) |
|
404 |
||
|
1035
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
405 |
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
406 |
else: |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
407 |
return HttpResponseNotFound(_("Annotation not found")) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
408 |
else: |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
409 |
return HttpResponseNotFound(_("Project not found")) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
410 |
else: |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
411 |
return HttpResponseNotFound(_("Project not found")) |
|
85322320d89c
delete annotation when you are admin, and import cleaning.
cavaliet
parents:
1022
diff
changeset
|
412 |