# -*- coding: utf-8 -*- import json from django.shortcuts import render_to_response, redirect from django.views.generic import FormView, UpdateView from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse, reverse_lazy from django.core.context_processors import csrf from django.conf import settings from django.core.cache import cache from functions.custom_views import ContextMixin from .forms import MainPageArticle from .forms import MainPageNews from .forms import MainPageThemes from .forms import EventSectionSettingsForm from .forms import EventDefaultDescriptionEditForm from .models import EventDefaultDescription from hvad.views import TranslatableModelFormMixin def handle_form(request, form): if request.POST: f = form(request.POST) if f.is_valid(): f.save() return HttpResponseRedirect(reverse('settings_main_page')) def handle_news(request): return handle_form(request, MainPageNews) def handle_articles(request): return handle_form(request, MainPageArticle) def handle_themes(request): return handle_form(request, MainPageThemes) from theme.models import Theme from article.models import Article def main_page(request): exposition_themes = Theme.objects.filter(main_page_expo__gt=0, types=Theme.types.exposition).order_by('main_page_expo') confrence_themes = Theme.objects.filter(main_page_conf__gt=0, types=Theme.types.conference).order_by('main_page_conf') news = Article.objects.news().filter(main_page=1) blogs = Article.objects.blogs().filter(main_page=1) themes = {'exposition_themes': exposition_themes, 'conference_themes': confrence_themes} news_form = MainPageNews(initial={'main_page_news':','.join(['%d'%item.id for item in news])}) a = [{'id': int(item.id), 'text': item.main_title} for item in news] news_form.fields['main_page_news'].widget.attrs['data-init-text'] = json.dumps(a) article_form = MainPageArticle(initial={'article' : blogs}) args = {'theme_form' : MainPageThemes(initial=themes), 'article_form' : article_form, 'news_form' : news_form, 'exposition_themes': list(map(str, exposition_themes.values_list('pk', flat=True))), 'confrence_themes': list(map(str, confrence_themes.values_list('pk', flat=True))), } args.update(csrf(request)) return render_to_response('c_admin/settings/main_page.html', args) class EventSectionSettings(ContextMixin, FormView): form_class = EventSectionSettingsForm template_name = 'c_admin/settings/sections.html' success_url = reverse_lazy('settings_sections') def get_initial(self): INI_CONFIG = settings.INI_CONFIG if not INI_CONFIG.has_section('sections'): return {} initial = {} for option, value in INI_CONFIG.items('sections'): try: initial[option] = json.loads(value) except: pass return initial def form_valid(self, form): form.save() keys = [ 'expo_city_catalog_ru', 'expo_city_catalog_en', 'expo_country_catalog_en', 'expo_country_catalog_ru', 'conf_country_catalog_ru', 'conf_country_catalog_en', 'conf_city_catalog_en', 'conf_city_catalog_ru', ] for key in keys: cache.delete(key) return super(EventSectionSettings, self).form_valid(form) class EventDefaultDescriptionView(ContextMixin, FormView): form_class = EventDefaultDescriptionEditForm template_name = 'c_admin/settings/default_description.html' success_url = reverse_lazy('settings_default_description') def get_object(self): try: return EventDefaultDescription.objects.language().all()[0] except IndexError: return None def get_initial(self): data = super(EventDefaultDescriptionView, self).get_initial() self.object = self.get_object() if self.object is not None and self.request.method != 'POST': for code, name in settings.LANGUAGES: obj = EventDefaultDescription._meta.translations_model.objects.get(language_code=code, master_id=self.object.pk) data['expo_description_%s' % code] = obj.expo_description data['conf_description_%s' % code] = obj.conf_description return data def form_valid(self, form): form.save(obj=self.get_object()) return redirect(self.get_success_url())