You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
4.5 KiB
129 lines
4.5 KiB
# -*- 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())
|
|
|