X-Git-Url: https://git.mdrn.pl/prawokultury.git/blobdiff_plain/8e82784fa2fe21d9c3828adbf43178a39c7cdea6..a84463e418ebe210f8c0ae2f466ad268d31e4c36:/migdal/views.py diff --git a/migdal/views.py b/migdal/views.py index 07eeb50..1f769a9 100644 --- a/migdal/views.py +++ b/migdal/views.py @@ -2,11 +2,23 @@ # This file is part of PrawoKultury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from django.http import Http404 from django.shortcuts import get_object_or_404, render, redirect +from django.utils.translation import get_language +from fnpdjango.utils.views import set_current_object from migdal import api from migdal.forms import get_submit_form from migdal.models import Category, Entry -from migdal.settings import TYPES_DICT, TYPES_ON_MAIN, TYPE_SUBMIT +from migdal import app_settings +from haystack.views import SearchView + + +def main(request): + if app_settings.MAIN_PAGE_ENTRY is not None: + main_entry = Entry.objects.get(**app_settings.MAIN_PAGE_ENTRY) + return entry(request, entry=main_entry) + else: + return entry_list(request) def entry_list(request, type_db=None, category_slug=None): @@ -14,13 +26,13 @@ def entry_list(request, type_db=None, category_slug=None): templates = ["migdal/entry/entry_list.html"] if type_db: - if TYPES_ON_MAIN == (type_db,): + if app_settings.TYPES_ON_MAIN == (type_db,): return redirect('migdal_main') - entry_type = TYPES_DICT[type_db] + entry_type = app_settings.TYPES_DICT[type_db] templates = ["migdal/entry/%s/entry_list.html" % type_db] + templates - submit = type_db == TYPE_SUBMIT + submit = type_db == app_settings.TYPE_SUBMIT else: - submit = TYPES_ON_MAIN == (TYPE_SUBMIT,) + submit = app_settings.TYPES_ON_MAIN == (app_settings.TYPE_SUBMIT,) entry_type = None if category_slug: @@ -28,6 +40,9 @@ def entry_list(request, type_db=None, category_slug=None): else: category = None + if category: + set_current_object(request, category) + promobox = 5 if entry_type is None and category is None else None object_list = api.entry_list(entry_type=entry_type, category=category, @@ -41,14 +56,17 @@ def entry_list(request, type_db=None, category_slug=None): }) -def entry(request, type_db, slug): - lang = request.LANGUAGE_CODE - args = {'type': type_db, 'slug_%s' % lang: slug, 'published_%s' % lang: True} - # TODO: preview for admins - entry = get_object_or_404(Entry, **args) +def entry(request, type_db=None, slug=None, entry=None): + if entry is None: + lang = request.LANGUAGE_CODE + args = {'type': type_db, 'slug_%s' % lang: slug} + entry = get_object_or_404(Entry, **args) + if not entry.published and not request.user.has_perm('migdal.change_entry'): + raise Http404 + set_current_object(request, entry, in_url=slug is not None) templates = ["migdal/entry/entry_detail.html"] - if type_db is not None: + if entry.type is not None: templates = ["migdal/entry/%s/entry_detail.html" % type_db] + templates return render(request, templates, {'entry': entry}) @@ -67,4 +85,21 @@ def submit(request): }) def submit_thanks(request): - return render(request, "migdal/entry/submit_thanks.html") \ No newline at end of file + return render(request, "migdal/entry/submit_thanks.html") + + +class SearchPublishedView(SearchView): + def __init__(self, *args, **kwargs): + super(SearchPublishedView, self).__init__(*args, **kwargs) + + def get_results(self): + results = super(SearchPublishedView, self).get_results() + lang_code = get_language() + def is_published(entity): + if isinstance(entity, Entry): + return getattr(entity, "published_%s" % lang_code) == True + else: + return True + results = filter(lambda r: is_published(r.object), results) + print results + return results