diff --git a/emencia/django/newsletter/models.py b/emencia/django/newsletter/models.py index f52c4237..4efb81a8 100644 --- a/emencia/django/newsletter/models.py +++ b/emencia/django/newsletter/models.py @@ -558,7 +558,7 @@ from theme.models import Theme class PopupCount(models.Model): - theme = models.ForeignKey(Theme) + theme = models.ForeignKey(Theme, null=True) date = models.DateField(auto_created=True) cnt = models.PositiveIntegerField(default=0) diff --git a/emencia/django/newsletter/views/admin_views.py b/emencia/django/newsletter/views/admin_views.py index e920ac9b..3ca100ca 100644 --- a/emencia/django/newsletter/views/admin_views.py +++ b/emencia/django/newsletter/views/admin_views.py @@ -332,9 +332,9 @@ from ..models import PopupCount from theme.models import Theme def count_popups(request): - if not request.is_ajax(): - return HttpResponse("request is not ajax") - else: + #if not request.is_ajax(): + # return HttpResponse("request is not ajax") + #else: themes = request.GET.getlist('theme') if themes: for theme_id in themes: diff --git a/expobanner/admin.py b/expobanner/admin.py index 30c528be..22d0663a 100644 --- a/expobanner/admin.py +++ b/expobanner/admin.py @@ -9,6 +9,8 @@ from expobanner.forms import UrlCreateForm, BannerCreateGroupForm, BannerCreateF PaidCreateForm, PaidUpdateForm, TopCreateForm, BannerLinkCreateForm, MainCreateForm, MainConfCreateForm, MainUpdateForm, TopUpdateForm from exposition.models import Exposition from conference.models import Conference +from settings.models import Html +from settings.forms import HtmlForm class BannersControl(TemplateView): template_name = 'admin/expobanner/banners_control.html' @@ -344,9 +346,22 @@ class TopUpdate(UpdateView): template_name = 'admin/expobanner/top_create.html' success_url = '/admin/expobanners/top/list/' - def get_context_data(self, **kwargs): context = super(TopUpdate, self).get_context_data(**kwargs) obj = self.object context['exposition'] = obj.get_event() return context + + +class MainPageBlock(UpdateView): + model = Html + form_class = HtmlForm + template_name = 'admin/expobanner/main_page_block.html' + + def get_context_data(self, **kwargs): + context = super(MainPageBlock, self).get_context_data(**kwargs) + context['languages'] = settings.LANGUAGES + return context + + def get_success_url(self): + return '/admin/' \ No newline at end of file diff --git a/expobanner/admin_urls.py b/expobanner/admin_urls.py index 0c46fcd8..d67167eb 100644 --- a/expobanner/admin_urls.py +++ b/expobanner/admin_urls.py @@ -42,4 +42,5 @@ urlpatterns = patterns('expobanner.admin', url(r'^main/conf/$', MainConfCreate.as_view(), name='expobanner-conf-create_main'), url(r'^main/conf/turn/(?P\d+)/(?P.*)/$', main_turn, name='expobanner-conf-main-turn'), #url(r'^main/conf/(?P\d+)/stat/$', MainStat.as_view(), name='expobanner_stat_main'), + url(r'^main/block/(?P\d+)/$', MainPageBlock.as_view()), ) \ No newline at end of file diff --git a/expobanner/management/commands/banner_log_update.py b/expobanner/management/commands/banner_log_update.py index 9b795176..be596e38 100644 --- a/expobanner/management/commands/banner_log_update.py +++ b/expobanner/management/commands/banner_log_update.py @@ -1,12 +1,14 @@ # -*- coding: utf-8 -*- from datetime import date from django.core.management.base import BaseCommand -from expobanner.models import Log, LogStat, Banner, PaidStat -from exposition.models import Exposition + + class Command(BaseCommand): def handle(self, *args, **options): + from exposition.models import Exposition + from expobanner.models import Log, LogStat, Banner, PaidStat today = date.today() # banners for banner in Banner.objects.select_related('group').filter(public=True): diff --git a/expobanner/views.py b/expobanner/views.py index a9517d05..beb3f1ec 100644 --- a/expobanner/views.py +++ b/expobanner/views.py @@ -87,6 +87,7 @@ def get_banners(request): return response + def get_top(request): params = {'theme': request.GET.getlist('theme', []), 'tag': request.GET.get('tag'), diff --git a/functions/forms.py b/functions/forms.py index cb19d3f5..d5abbe91 100644 --- a/functions/forms.py +++ b/functions/forms.py @@ -69,7 +69,7 @@ from django.conf import settings from django.utils.translation import get_language from django.forms.models import save_instance -class TranslatableModelForm(forms.ModelForm): +class ExpoTranslatableModelForm(forms.ModelForm): translatable_fields = [] @@ -88,7 +88,7 @@ class TranslatableModelForm(forms.ModelForm): else: kwargs.update({'initial': init_tr_data}) - super(TranslatableModelForm, self).__init__(*args, **kwargs) + super(ExpoTranslatableModelForm, self).__init__(*args, **kwargs) if not self.translatable_fields: self.translatable_fields = self._all_tr_field_names @@ -113,7 +113,7 @@ class TranslatableModelForm(forms.ModelForm): # todo: fix commit False error init_lang = get_language()[:2] is_new = not self.instance.pk - inst = super(TranslatableModelForm, self).save() + inst = super(ExpoTranslatableModelForm, self).save() if is_new: for lang in self.data_by_lang: diff --git a/functions/signal_additional_func.py b/functions/signal_additional_func.py index 9e5162ed..20b83d15 100644 --- a/functions/signal_additional_func.py +++ b/functions/signal_additional_func.py @@ -1,10 +1,8 @@ # -*- coding: utf-8 -*- -from settings.models import settings_dict, Setting - - from django.conf import settings from functions.translate import get_translated_fields + def fill_missing_languages(obj): """ looking for missing languages @@ -30,39 +28,4 @@ def fill_missing_languages(obj): for field in fields: setattr(obj, field, getattr(translation, field)) - obj.save() - -def fill_meta_information(obj): - """ - looking for available settings for this object - and fill empty field with settings rules - """ - # return list of settings for this object - s_list = settings_dict.get(obj.__class__.__name__) - if s_list: - - for s in s_list: - # get Setting model object - setting = Setting.objects.get(key=s.get('key')) - field = s.get('field_name') - - if setting.type != 'transl': - # simple field - if getattr(obj, field)=="": - setattr(obj, field, setting.get_value()) - obj.save() - else: - # translated field - for code, lang in settings.LANGUAGES: - # get translation object - tr = obj._meta.translations_model.objects.get(language_code=code, master__id=getattr(obj, 'id')) - - if getattr(tr, field)=="": - value = setting.get_value(code) - try: - value = value%tr.__dict__ - except KeyError: - pass - # ! charfield -> textfield - setattr(tr, field, value[:250]) - tr.save() \ No newline at end of file + obj.save() \ No newline at end of file diff --git a/functions/signal_handlers.py b/functions/signal_handlers.py index 6c170a1e..df7321e8 100644 --- a/functions/signal_handlers.py +++ b/functions/signal_handlers.py @@ -1,7 +1,7 @@ import random import string from django.db.models.fields.files import FieldFile -from signal_additional_func import fill_missing_languages, fill_meta_information +from signal_additional_func import fill_missing_languages from functions.form_check import translit_with_separator @@ -34,7 +34,6 @@ def post_save_handler(sender, **kwargs): """ obj = kwargs['instance'] fill_missing_languages(obj) - fill_meta_information(obj) def file_cleanup(sender, instance, *args, **kwargs): diff --git a/proj/views.py b/proj/views.py index 68d93090..1801b84a 100644 --- a/proj/views.py +++ b/proj/views.py @@ -16,6 +16,8 @@ from conference.models import Conference from emencia.django.newsletter.forms import SubscribeAssideForm +from django.db.models.loading import get_model + def clear_slashes(str_): if str_[0] == r'/': str_ = str_[1:] @@ -73,6 +75,12 @@ class MainPageView(JitterCacheMixin, TemplateView): conf = Conference.objects.conf_main() ev = ex + conf events = sorted(ev, key=lambda x: x.main.position) + + Html = get_model('settings', 'Html') + try: + main_page_block = Html.objects.language().get(id=22) + except Html.DoesNotExist: + main_page_block = None # update main_page counter for event in events: event.main.link.log(self.request, 1) @@ -80,7 +88,8 @@ class MainPageView(JitterCacheMixin, TemplateView): conference_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.conference)[:6] args = {'events': events, 'exposition_themes': exposition_themes, 'conference_themes': conference_themes, - 'search_form': ExpositionSearchForm, 'search_action': '/expo/search/'} + 'search_form': ExpositionSearchForm, 'search_action': '/expo/search/', + 'main_page_block': main_page_block} context.update(args) diff --git a/settings/admin.py b/settings/admin.py index 5c0c3f39..10ea63bf 100644 --- a/settings/admin.py +++ b/settings/admin.py @@ -1,27 +1,9 @@ # -*- coding: utf-8 -*- import json from django.shortcuts import render_to_response -from django.http import HttpResponseRedirect, HttpResponse +from django.http import HttpResponseRedirect from django.core.context_processors import csrf -from django.conf import settings -from django.contrib.auth.decorators import login_required -# -from forms import SettingsForm - - - -@login_required -def change_settings(request): - if request.POST: - pass - else: - form = SettingsForm() - args = {'form': form, 'languages': settings.LANGUAGES} - args.update(csrf(request)) - return render_to_response('settings.html', args) - -from forms import MainPageEvent, MainPagePhotoreport, MainPageArticle, MainPageNews, MainPageThemes - +from forms import MainPageArticle, MainPageNews, MainPageThemes def handle_form(request, Form): @@ -36,21 +18,18 @@ def handle_form(request, Form): return HttpResponseRedirect('/admin/settings/main-page/') -def handle_events(request): - return handle_form(request, MainPageEvent) 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) -def handle_photoreports(request): - return handle_form(request, MainPagePhotoreport) - from exposition.models import Exposition from conference.models import Conference @@ -60,6 +39,7 @@ from theme.models import Theme from article.models import Article import datetime + def main_page(request): now = datetime.datetime.now() expositions = Exposition.objects.filter(main_page=1) @@ -83,10 +63,8 @@ def main_page(request): news_form.fields['main_page_news'].widget.attrs['data-init-text'] = json.dumps(a) article_form = MainPageArticle(initial={'article' : blogs}) - event_data = {'expositions': ','.join(['%s:%s'%(item.id, item.name) for item in expositions])} - event_form = MainPageEvent(initial=event_data) - args = {'event_form' : event_form, 'theme_form' : MainPageThemes(initial=themes), + args = { 'theme_form' : MainPageThemes(initial=themes), 'article_form' : article_form, - 'news_form' : news_form, 'photoreport_form' : MainPagePhotoreport(),} + 'news_form' : news_form} args.update(csrf(request)) return render_to_response('admin/settings/main_page.html', args) \ No newline at end of file diff --git a/settings/admin_urls.py b/settings/admin_urls.py index fb38fbeb..8a90c5a2 100644 --- a/settings/admin_urls.py +++ b/settings/admin_urls.py @@ -3,10 +3,7 @@ from django.conf.urls import patterns, include, url urlpatterns = patterns('settings.admin', url(r'^main-page/$', 'main_page'), - url(r'^main-page/events/$', 'handle_events'), - url(r'^main-page/photoreports/$', 'handle_photoreports'), url(r'^main-page/themes/$', 'handle_themes'), url(r'^main-page/news/$', 'handle_news'), url(r'^main-page/blogs/$', 'handle_articles'), - url(r'^$', 'change_settings'), ) diff --git a/settings/forms.py b/settings/forms.py index e0aed057..87d73c1d 100644 --- a/settings/forms.py +++ b/settings/forms.py @@ -1,146 +1,19 @@ # -*- coding: utf-8 -*- from django import forms -from models import Setting, settings_dict -from django.conf import settings -from functions.translate import fill_trans_fields, populate, ZERO_LANGUAGE, populate_all, fill_trans_fields_all - - -class SettingsForm(forms.Form): - """ - Create Settings form for creating settings - - __init__ uses for dynamic creates fields - - save function saves data in Settings object. If it doesnt exist create new object - """ - - def __init__(self, *args, **kwargs): - super(SettingsForm, self).__init__(*args, **kwargs) - # creates translated form fields, example: name_ru, name_en - # len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs - for model_name in settings_dict.values(): - for setting in model_name: - item = Setting.objects.get(key=setting['key']) - if setting['type'] != 'transl': - self.fields[setting['key']] = forms.CharField(label=setting['verbose_name'], initial=item.get_value(), - required=False) - else: - if len(settings.LANGUAGES) in range(10): - for lid, (code, name) in enumerate(settings.LANGUAGES): - # using enumerate for detect iteration number - # first iteration is a default lang so it required fields - required = True if lid == 0 else False - self.fields['%s_%s' %(setting['key'], code)] = forms.CharField(label=setting['verbose_name'], - initial=item.get_value(code), - required=required, - widget=forms.TextInput( - attrs={'style':'width: 450px'})) - - """ - settings_list = Setting.objects.all() - for item in settings_list: - if item.type != 'transl': - self.fields['%s'%item.key] = forms.CharField(label='%s'%item.key, initial=item.get_value(), - required=False) - else: - if len(settings.LANGUAGES) in range(10): - for lid, (code, name) in enumerate(settings.LANGUAGES): - # using enumerate for detect iteration number - # first iteration is a default lang so it required fields - required = True if lid == 0 else False - self.fields['%s_%s' %(item.key, code)] = forms.CharField(label=getattr(item, 'key'), - initial=item.get_value(code), - required=required, - widget=forms.TextInput( - attrs={'style':'width: 450px'})) - """ - - - def save(self): - """ - changes Settings model - """ - data = self.cleaned_data - capacity_tmpl = Setting.objects.get(key='hall_template') - for code, name in settings.LANGUAGES: - capacity_tmpl.set_value(data['hall_capacity_tmpl_%s'%code], code) - - -from exposition.models import Exposition -from conference.models import Conference -from seminar.models import Seminar -from webinar.models import Webinar -from photoreport.models import Photoreport -from news.models import News +from ckeditor.widgets import CKEditorWidget from theme.models import Theme +from .models import Html from article.models import Article +from functions.forms import ExpoTranslatableModelForm -import datetime - -class MainPageEvent(forms.Form): - expositions = forms.CharField(label=u'Выставки', widget=forms.HiddenInput(), required=False) - conferences = forms.CharField(label=u'Конференции', widget=forms.HiddenInput(), required=False) - - def save(self): - data = self.cleaned_data - expositions = data['expositions'] - conferences = data['conferences'] - Exposition.objects.filter(main_page=1).update(main_page=0) - Exposition.objects.filter(id__in=expositions).update(main_page=1) - #Conference.objects.filter(main_page=1).update(main_page=0) - #Conference.update(main_page=1) +class HtmlForm(ExpoTranslatableModelForm): + class Meta: + model = Html + widgets = { + 'text': CKEditorWidget, + } - def clean_expositions(self): - expositions = self.cleaned_data.get('expositions') - if expositions: - res = [] - for id in expositions.split(','): - try: - res.append(int(id)) - except: - continue - return res - else: - return [] - -""" -class MainPageEvent(forms.Form): - def __init__(self, *args, **kwargs): - super(MainPageEvent, self).__init__(*args, **kwargs) - now = datetime.datetime.now - self.fields['expositions' ] = forms.ModelMultipleChoiceField( - queryset=Exposition.objects.all(), - required=False - ) - - self.fields['conferences' ] = forms.ModelMultipleChoiceField( - queryset=Conference.objects.all(), - required=False - ) - self.fields['seminars' ] = forms.ModelMultipleChoiceField( - queryset=Seminar.objects.all(), - required=False - ) - self.fields['webinars' ] = forms.ModelMultipleChoiceField( - queryset=Webinar.objects.all(), - required=False - ) - def save(self): - data = self.cleaned_data - expositions = data['expositions'] - conferences = data['conferences'] - seminars = data['seminars'] - webinars = data['webinars'] - Exposition.objects.all().update(main_page=0) - expositions.update(main_page=1) - Conference.objects.all().update(main_page=0) - conferences.update(main_page=1) - Seminar.objects.all().update(main_page=0) - seminars.update(main_page=1) - Webinar.objects.all().update(main_page=0) - webinars.update(main_page=1) -""" class MainPageThemes(forms.Form): exposition_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.exposition), @@ -163,17 +36,6 @@ class MainPageThemes(forms.Form): #seminar_themes.update(main_page=1) - - -class MainPagePhotoreport(forms.Form): - photoreports = forms.ModelMultipleChoiceField(queryset=Photoreport.objects.all()) - - def save(self): - data = self.cleaned_data - photoreports = data['photoreports'] - photoreports.update(main_page=1) - - class MainPageNews(forms.Form): main_page_news = forms.CharField(label=u'Новости', widget=forms.HiddenInput(), required=False,) diff --git a/settings/models.py b/settings/models.py index ec623778..8bb734bf 100644 --- a/settings/models.py +++ b/settings/models.py @@ -4,95 +4,11 @@ from hvad.models import TranslatableModel, TranslatedFields from functions.custom_fields import EnumField -class Setting(TranslatableModel): - """ - Create Settings model, which stores different settings of project - - Uses hvad.TranslatableModel which is child of django.db.models class - - Setting create only by admin - """ - VALUES = ('int', 'text', 'transl', 'date') - - key = models.CharField(max_length=50) - type = EnumField(values=VALUES) - int = models.IntegerField(blank=True, null=True) - text = models.CharField(max_length=255, blank=True) - date = models.DateTimeField(blank=True, null=True) - +class Html(TranslatableModel): + name = models.CharField(max_length=100, blank=True) translations = TranslatedFields( - transl = models.CharField(max_length=255, blank=True,default='111'), - name = models.CharField(max_length=50), + text=models.TextField() ) def __unicode__(self): - return self.key - - def get_value(self, code=None): - """ - returns value of setting - value can be - int, text, date or translated field - - """ - if self.type == 'transl': - obj = Setting._meta.translations_model.objects.get(language_code = code,master__id=getattr(self, 'id')) - return getattr(obj, self.type) - else: - return getattr(self,self.type) - - def set_value(self, value, code=None): - """ - sets value of setting - """ - if self.type == 'transl': - obj = Setting._meta.translations_model.objects.get(language_code = code,master__id=getattr(self, 'id')) - setattr(obj, self.type, value) - obj.save() - else: - setattr(self, self.type, value) - -# dictionaty of models settings -# every model have list of settings -# key: setting in db, field_name: field in model -settings_dict = dict(#City=[{'key': 'city_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title Городов'}, - # {'key': 'city_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords'}, - # {'key': 'city_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'description'}], - #Exposition=[{'key': 'exposition_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title Выставок'}, - # {'key': 'exposition_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords Выставок'}], -# Country=[{'key': 'country_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title'}, -# {'key': 'country_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords'}, -# {'key': 'country_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'description'}] -# Exposition=[{'key': 'exposition_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'Exposition title'}, -# {'key': 'exposition_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'Exposition keywords'}, -# {'key': 'exposition_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'Exposition description'}] -) - -#from settings.models import settings, Setting -#country_set = settings.get('country') -#for s in country_set: -# set = Setting(key=s['key'], type=s['type']) -# set.save() - - - - -from django.db.models.signals import post_save -from django.dispatch import receiver - - -#@receiver(post_save, sender=Setting) -def create_transl_fields(sender, **kw): - """ - - """ - setting = kw['instance'] - setting.text = '111' - setting.save() - #if kwargs['created'] and setting.type == 'transl': - # setting.int = 1 - #if len(setting.LANGUAGES) in range(10): - # for lid, (code, name) in enumerate(settings.LANGUAGES): - # using enumerate for detect iteration number - # first iteration is a default lang so it required fields - -#post_save.connect(create_transl_fields, sender=Setting) \ No newline at end of file + return self.name \ No newline at end of file diff --git a/templates/admin/expobanner/main_page_block.html b/templates/admin/expobanner/main_page_block.html new file mode 100644 index 00000000..050e0656 --- /dev/null +++ b/templates/admin/expobanner/main_page_block.html @@ -0,0 +1,26 @@ +{% extends 'admin/base.html' %} +{% load static %} +{% load i18n %} + + +{% block body %} +
{% csrf_token %} +
+ +
+
+

Блок на главной

+
+
+ {% include 'admin/forms/multilang.html' with field='text' form=form languages=languages %} +
+
+
+ +
+ + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/templates/admin/includes/admin_nav.html b/templates/admin/includes/admin_nav.html index ad358b63..2ada523d 100644 --- a/templates/admin/includes/admin_nav.html +++ b/templates/admin/includes/admin_nav.html @@ -105,6 +105,7 @@
  • Выставки в топе
  • Выставки на главной
  • Конференции на главной
  • +
  • Блок на главной
  • diff --git a/templates/client/includes/main_page_video_block.html b/templates/client/includes/main_page_video_block.html new file mode 100644 index 00000000..c4252f67 --- /dev/null +++ b/templates/client/includes/main_page_video_block.html @@ -0,0 +1,8 @@ +{% load i18n %} + +
    + +
    + \ No newline at end of file diff --git a/templates/client/index.html b/templates/client/index.html index a887eb2a..69fa98fe 100644 --- a/templates/client/index.html +++ b/templates/client/index.html @@ -72,15 +72,9 @@