1 # -*- coding: utf-8 -*-
2 # This file is part of PrawoKultury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 from django.http import Http404
6 from django.shortcuts import get_object_or_404, render, redirect
7 from django.utils.translation import get_language
8 from fnpdjango.utils.views import set_current_object
10 from migdal.forms import get_submit_form
11 from migdal.models import Category, Entry
12 from migdal import app_settings
13 from haystack.views import SearchView
17 if app_settings.MAIN_PAGE_ENTRY is not None:
18 main_entry = Entry.objects.get(**app_settings.MAIN_PAGE_ENTRY)
19 return entry(request, entry=main_entry)
21 return entry_list(request)
24 def entry_list(request, type_db=None, category_slug=None):
25 lang = request.LANGUAGE_CODE
26 templates = ["migdal/entry/entry_list.html"]
29 if app_settings.TYPES_ON_MAIN == (type_db,):
30 return redirect('migdal_main')
31 entry_type = app_settings.TYPES_DICT[type_db]
32 templates = ["migdal/entry/%s/entry_list.html" % type_db] + templates
33 submit = type_db == app_settings.TYPE_SUBMIT
35 submit = app_settings.TYPES_ON_MAIN == (app_settings.TYPE_SUBMIT,)
39 category = get_object_or_404(Category, **{'slug_%s' % lang: category_slug})
44 set_current_object(request, category)
46 promobox = 5 if entry_type is None and category is None else None
48 object_list = api.entry_list(entry_type=entry_type, category=category, promobox=promobox)
50 return render(request, templates, {
51 'object_list': object_list,
53 'entry_type': entry_type,
58 def entry(request, type_db=None, slug=None, entry=None):
60 lang = request.LANGUAGE_CODE
61 args = {'type': type_db, 'slug_%s' % lang: slug}
62 entry = get_object_or_404(Entry, **args)
63 if not entry.published and not request.user.has_perm('migdal.change_entry'):
65 set_current_object(request, entry, in_url=slug is not None)
67 templates = ["migdal/entry/entry_detail.html"]
68 if entry.type is not None:
69 templates = ["migdal/entry/%s/entry_detail.html" % type_db] + templates
70 return render(request, templates, {'entry': entry})
74 if request.method == 'POST':
75 submit_form = get_submit_form(request.POST)
76 if submit_form.is_valid():
78 return redirect('migdal_submit_thanks')
80 submit_form = get_submit_form()
82 return render(request, 'migdal/entry/submit.html', {
83 'submit_form': submit_form,
87 def submit_thanks(request):
88 return render(request, "migdal/entry/submit_thanks.html")
91 class SearchPublishedView(SearchView):
92 def __init__(self, *args, **kwargs):
93 super(SearchPublishedView, self).__init__(*args, **kwargs)
95 def get_results(self):
96 results = super(SearchPublishedView, self).get_results()
97 lang_code = get_language()
99 def is_published(entity):
100 if isinstance(entity, Entry):
101 return getattr(entity, "published_%s" % lang_code)
104 results = filter(lambda r: is_published(r.object), results)