src/egonomy/views.py
changeset 71 14c40542dfbb
parent 68 dc6f8802c08a
child 78 67d3fb0e54a6
equal deleted inserted replaced
70:6b49096afdc2 71:14c40542dfbb
     1 from django.conf import settings
     1 from django.conf import settings
     2 from django.contrib.auth.decorators import login_required
     2 from django.contrib.auth.decorators import login_required
       
     3 from django.contrib.auth.models import User
     3 from django.core.paginator import Paginator, InvalidPage, EmptyPage
     4 from django.core.paginator import Paginator, InvalidPage, EmptyPage
     4 from django.core.urlresolvers import reverse
     5 from django.core.urlresolvers import reverse
     5 from django.db.models.aggregates import Max
     6 from django.db.models.aggregates import Max
       
     7 from django.http.response import HttpResponseForbidden
     6 from django.shortcuts import get_object_or_404, render_to_response, redirect
     8 from django.shortcuts import get_object_or_404, render_to_response, redirect
     7 from django.template import RequestContext
     9 from django.template import RequestContext
       
    10 from django.utils.translation import ugettext as _
     8 from egonomy.models import ImageMetadata, Image, Fragment
    11 from egonomy.models import ImageMetadata, Image, Fragment
     9 from egonomy.search_indexes import QueryParser
    12 from egonomy.search_indexes import QueryParser
    10 from egonomy.search_indexes.paginator import SearchPaginator
    13 from egonomy.search_indexes.paginator import SearchPaginator
    11 from egonomy.search_indexes.query import ModelRelatedSearchQuerySet
    14 from egonomy.search_indexes.query import ModelRelatedSearchQuerySet
    12 from haystack.query import RelatedSearchQuerySet
    15 from haystack.query import RelatedSearchQuerySet
    13 import logging
    16 import logging
    14 from django.contrib.auth.models import User
       
    15 
    17 
    16 logger = logging.getLogger(__name__)
    18 logger = logging.getLogger(__name__)
    17 
    19 
    18 
    20 
    19 def home(request):
    21 def home(request):
    52     return render_to_response("egonomy_view_fragment.html",
    54     return render_to_response("egonomy_view_fragment.html",
    53                               {'fragment': frg, 'fragment_list': frg_list},
    55                               {'fragment': frg, 'fragment_list': frg_list},
    54                               context_instance=RequestContext(request))
    56                               context_instance=RequestContext(request))
    55 
    57 
    56 @login_required
    58 @login_required
    57 def create_fragment(request, image_id):
    59 def create_fragment(request, image_id, fragment_pk=None):
    58     
    60     
    59     img = get_object_or_404(Image.objects.select_related('info', 'metadata'), id=image_id)
    61     img = get_object_or_404(Image.objects.select_related('info', 'metadata'), id=image_id)
    60     frg_list = Fragment.objects.filter(image=img).order_by('-date_saved').select_related('image', 'image__info', 'image__metadata','author')
    62     frg_list = Fragment.objects.filter(image=img).order_by('-date_saved').select_related('image', 'image__info', 'image__metadata','author')
       
    63     frg_to_modify = None
       
    64     if fragment_pk:
       
    65         frg_to_modify = get_object_or_404(Fragment.objects.select_related('author'), pk=fragment_pk)
       
    66         # We check if the current user is the fragment's author
       
    67         if frg_to_modify.author != request.user:
       
    68             return HttpResponseForbidden(_("You are not allowed to modify this fragment."))
    61     
    69     
    62     return render_to_response("egonomy_create_fragment.html",
    70     return render_to_response("egonomy_create_fragment.html",
    63                               {'img': img, 'fragment_list': frg_list},
    71                               {'img': img, 'frg_to_modify': frg_to_modify, 'fragment_list': frg_list},
    64                               context_instance=RequestContext(request))
    72                               context_instance=RequestContext(request))
    65 
    73 
    66 @login_required
    74 @login_required
    67 def save_fragment(request):
    75 def save_fragment(request):
    68     
    76     
    69     frg_title = request.POST["fragment_title"]
    77     frg_title = request.POST["fragment_title"]
    70     frg_desc = request.POST["fragment_description"]
    78     frg_desc = request.POST["fragment_description"]
    71     frg_kw = request.POST["user_keywords"]
    79     frg_kw = request.POST["user_keywords"]
    72     frg_path = request.POST["fragment_path"]
    80     frg_path = request.POST["fragment_path"]
    73     frg_image_id = request.POST["image_id"]
    81     frg_image_id = request.POST["image_id"]
    74     img = get_object_or_404(Image, id=frg_image_id)
    82     if "fragment_pk" in request.POST:
    75     
    83         frg_pk = request.POST["fragment_pk"]
    76     frg = Fragment()
    84         frg = get_object_or_404(Fragment.objects.select_related('author'), pk=frg_pk)
    77     frg.image = img
    85         # We check if the current user is the fragment's author
       
    86         if frg.author != request.user:
       
    87             return HttpResponseForbidden(_("You are not allowed to modify this fragment."))
       
    88     else :
       
    89         img = get_object_or_404(Image, id=frg_image_id)
       
    90         frg = Fragment()
       
    91         frg.image = img
       
    92         frg.author = request.user
       
    93     
    78     frg.coordinates = frg_path
    94     frg.coordinates = frg_path
    79     frg.title = frg_title
    95     frg.title = frg_title
    80     frg.description = frg_desc
    96     frg.description = frg_desc
    81     frg.tags = frg_kw
    97     frg.tags = frg_kw
    82     frg.author = request.user
       
    83     
       
    84     frg.save()
    98     frg.save()
    85     
    99     
    86     return redirect("view_fragment", fragment_pk=frg.pk)
   100     return redirect("view_fragment", fragment_pk=frg.pk)
    87 
   101 
    88 
   102