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 |