53 last_frg = frg_list[0] |
53 last_frg = frg_list[0] |
54 |
54 |
55 # If we display the picture after a search, we propose the previous and next picture |
55 # If we display the picture after a search, we propose the previous and next picture |
56 search = request.GET.get("search") or None |
56 search = request.GET.get("search") or None |
57 index_search = request.GET.get("index_search") or None |
57 index_search = request.GET.get("index_search") or None |
|
58 if index_search: |
|
59 index_search = int(index_search) |
|
60 nb_results = request.GET.get("nb_results") or None |
|
61 if nb_results: |
|
62 nb_results = int(nb_results) |
58 |
63 |
59 return render_to_response("egonomy_annotate_picture.html", |
64 return render_to_response("egonomy_annotate_picture.html", |
60 {'img': img, 'fragment_list': frg_list, 'last_frg':last_frg, |
65 {'img': img, 'fragment_list': frg_list, 'last_frg':last_frg, |
61 'search': search, 'index_search': index_search, |
66 'search': search, 'index_search': index_search, 'nb_results': nb_results, |
62 'current_user_collection_list':current_user_collection_list(request)}, |
67 'current_user_collection_list':current_user_collection_list(request)}, |
63 context_instance=RequestContext(request)) |
68 context_instance=RequestContext(request)) |
64 |
69 |
65 |
70 |
66 def view_fragment(request, fragment_pk): |
71 def view_fragment(request, fragment_pk): |
68 frg = get_object_or_404(Fragment.objects.select_related('image', 'image__info', 'image__metadata','author'), pk=fragment_pk) |
73 frg = get_object_or_404(Fragment.objects.select_related('image', 'image__info', 'image__metadata','author'), pk=fragment_pk) |
69 frg_list = Fragment.objects.filter(image=frg.image).select_related('image', 'image__info', 'image__metadata','author') |
74 frg_list = Fragment.objects.filter(image=frg.image).select_related('image', 'image__info', 'image__metadata','author') |
70 |
75 |
71 fragment_only = {'true': True, 'false': False, "0": False, "1": True}.get((request.GET.get("fragment_only") or "1").lower()) |
76 fragment_only = {'true': True, 'false': False, "0": False, "1": True}.get((request.GET.get("fragment_only") or "1").lower()) |
72 |
77 |
|
78 # If we display the after after a search, we propose the previous and next fragment |
|
79 search = request.GET.get("search") or None |
|
80 index_search = request.GET.get("index_search") or None |
|
81 if index_search: |
|
82 index_search = int(index_search) |
|
83 nb_results = request.GET.get("nb_results") or None |
|
84 if nb_results: |
|
85 nb_results = int(nb_results) |
|
86 |
73 return render_to_response("egonomy_view_fragment.html", |
87 return render_to_response("egonomy_view_fragment.html", |
74 {'fragment': frg, 'fragment_list': frg_list, 'fragment_only':fragment_only, |
88 {'fragment': frg, 'fragment_list': frg_list, 'fragment_only':fragment_only, |
|
89 'search': search, 'index_search': index_search, 'nb_results': nb_results, |
75 'current_user_collection_list':current_user_collection_list(request)}, |
90 'current_user_collection_list':current_user_collection_list(request)}, |
76 context_instance=RequestContext(request)) |
91 context_instance=RequestContext(request)) |
77 |
92 |
78 @login_required |
93 @login_required |
79 def create_fragment(request, image_id, fragment_pk=None): |
94 def create_fragment(request, image_id, fragment_pk=None): |
146 if not field or field == 'all': |
161 if not field or field == 'all': |
147 field = 'text' |
162 field = 'text' |
148 qp = QueryParser(field) |
163 qp = QueryParser(field) |
149 res = ModelRelatedSearchQuerySet(model=Image).filter(qp.parse(search)).models(ImageMetadata).load_all_queryset(Image, img_list).load_all() |
164 res = ModelRelatedSearchQuerySet(model=Image).filter(qp.parse(search)).models(ImageMetadata).load_all_queryset(Image, img_list).load_all() |
150 paginator = SearchPaginator(res, nb) |
165 paginator = SearchPaginator(res, nb) |
|
166 nb_results = paginator.count |
151 else: |
167 else: |
152 img_list = img_list.order_by('pk').all() |
168 img_list = img_list.order_by('pk').all() |
153 paginator = Paginator(img_list, nb) |
169 paginator = Paginator(img_list, nb) |
154 |
170 |
155 try: |
171 try: |
184 search = request.GET["search"] |
200 search = request.GET["search"] |
185 field = "all" |
201 field = "all" |
186 if "field" in request.GET: |
202 if "field" in request.GET: |
187 field = request.GET["field"] |
203 field = request.GET["field"] |
188 |
204 |
189 img_list = Image.objects.select_related('info', 'metadata') |
|
190 if search: |
205 if search: |
191 if not field or field == 'all': |
206 if not field or field == 'all': |
192 field = 'text' |
207 field = 'text' |
193 qp = QueryParser(field) |
208 qp = QueryParser(field) |
194 res = ModelRelatedSearchQuerySet(model=Image).filter(qp.parse(search)).models(ImageMetadata).load_all_queryset(Image, img_list).load_all() |
209 # We don't need to do .load_all_queryset(Image, img_list).load_all() |
|
210 # because all we need the image's id/pk |
|
211 res = ModelRelatedSearchQuerySet(model=Image).filter(qp.parse(search)).models(ImageMetadata) |
195 img = res[index_search] |
212 img = res[index_search] |
196 return redirect(reverse("annotate_picture", args=[img.pk]) + "?search=" + search + "&index_search=" + str(index_search)) |
213 nb_results = len(res) |
|
214 return redirect(reverse("annotate_picture", args=[img.pk]) + "?search=" + search + "&index_search=" + str(index_search) + "&nb_results=" + str(nb_results)) |
197 else: |
215 else: |
198 redirect("home") |
216 redirect("home") |
199 |
217 |
200 |
218 |
201 |
219 |
219 if not field or field == 'all': |
237 if not field or field == 'all': |
220 field = 'text' |
238 field = 'text' |
221 qp = QueryParser(field) |
239 qp = QueryParser(field) |
222 res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment).load_all_queryset(Fragment, frg_list).load_all().highlight() |
240 res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment).load_all_queryset(Fragment, frg_list).load_all().highlight() |
223 paginator = Paginator(res, nb) |
241 paginator = Paginator(res, nb) |
|
242 nb_results = paginator.count |
224 else: |
243 else: |
225 frg_list = frg_list.order_by('pk').all() |
244 frg_list = frg_list.order_by('pk').all() |
226 paginator = Paginator(frg_list, nb) |
245 paginator = Paginator(frg_list, nb) |
227 |
246 |
228 try: |
247 try: |
229 results = paginator.page(cur_page_nb) |
248 results = paginator.page(cur_page_nb) |
230 except (EmptyPage, InvalidPage): |
249 except (EmptyPage, InvalidPage): |
231 results = paginator.page(paginator.num_pages) |
250 results = paginator.page(paginator.num_pages) |
232 |
251 |
233 url_pagination = reverse("all_fragments") + "?limit=" + str(nb) |
252 url_pagination = reverse("all_fragments") + "?limit=" + str(nb) |
|
253 offset_search = None |
234 if search: |
254 if search: |
235 url_pagination = url_pagination + "&search=" + search |
255 url_pagination = url_pagination + "&search=" + search |
|
256 offset_search = int(nb) * (cur_page_nb-1) |
236 |
257 |
237 return render_to_response("egonomy_all_fragments.html", |
258 return render_to_response("egonomy_all_fragments.html", |
238 {"search_fragment":True, 'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb, "search":search, "nb_results":nb_results, "url_pagination":url_pagination, |
259 {"search_fragment":True, 'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb, |
|
260 "search":search, "nb_results":nb_results, "url_pagination":url_pagination, |
|
261 "offset_search":offset_search, "offset_search":offset_search, |
239 'current_user_collection_list':current_user_collection_list(request)}, |
262 'current_user_collection_list':current_user_collection_list(request)}, |
240 context_instance=RequestContext(request)) |
263 context_instance=RequestContext(request)) |
|
264 |
|
265 |
|
266 |
|
267 def fragment_by_search(request): |
|
268 |
|
269 # We get the picture in the context of a search |
|
270 index_search = request.GET.get("index_search") or None |
|
271 if not index_search: |
|
272 redirect("home") |
|
273 else: |
|
274 index_search = int(index_search) |
|
275 |
|
276 search = None |
|
277 if "search" in request.GET: |
|
278 search = request.GET["search"] |
|
279 field = "all" |
|
280 if "field" in request.GET: |
|
281 field = request.GET["field"] |
|
282 |
|
283 if search: |
|
284 if not field or field == 'all': |
|
285 field = 'text' |
|
286 qp = QueryParser(field) |
|
287 # We don't need to do .load_all_queryset(Fragment, frg_list).load_all().highlight() |
|
288 # because all we need the fragment's pk |
|
289 res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment) |
|
290 frg = res[index_search] |
|
291 nb_results = len(res) |
|
292 return redirect(reverse("view_fragment", args=[frg.pk]) + "?search=" + search + "&index_search=" + str(index_search) + "&nb_results=" + str(nb_results)) |
|
293 else: |
|
294 redirect("home") |
|
295 |
241 |
296 |
242 |
297 |
243 def user_fragments(request, username): |
298 def user_fragments(request, username): |
244 |
299 |
245 # Get the cur_page_nb number parameter if possible |
300 # Get the cur_page_nb number parameter if possible |