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

# -*- 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())