src/egonomy/views.py
changeset 213 6655617f3d92
parent 212 2cca82dd0e79
child 214 58dcbe86cbe0
equal deleted inserted replaced
212:2cca82dd0e79 213:6655617f3d92
    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