diff --git a/article/managers.py b/article/managers.py new file mode 100644 index 00000000..17026786 --- /dev/null +++ b/article/managers.py @@ -0,0 +1,49 @@ +from django.utils import translation +from django.core.cache import cache +from hvad.models import TranslatableModel, TranslatedFields, TranslationManager + + +class ArticleManager(TranslationManager): + cache_time = 60 + def safe_get(self, **kwargs): + model = self.model + try: + return model.objects.get(**kwargs) + except: + return None + + def news(self): + """ + return queryset of news + """ + model = self.model + return self.language().filter(type=model.news) + + def blogs(self): + """ + return queryset of blogs + """ + model = self.model + return self.language().filter(type=model.blog) + + def main_page_news(self): + lang = translation.get_language() + key = 'main_page_news_%s'%lang + cached_news = cache.get(key) + if cached_news: + return cached_news + else: + news = list(self.news().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date', '-modified')[:3]) + cache.set(key, news, self.cache_time) + return news + + def main_page_blogs(self): + lang = translation.get_language() + key = 'main_page_blogs_%s'%lang + cached_blogs = cache.get(key) + if cached_blogs: + return cached_blogs + else: + blogs = list(self.blogs().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date')[:3]) + cache.set(key, blogs, self.cache_time) + return blogs diff --git a/article/models.py b/article/models.py index f2cf06dc..7eb0153a 100644 --- a/article/models.py +++ b/article/models.py @@ -1,63 +1,16 @@ # -*- coding: utf-8 -*- -import copy from django.db import models from django.contrib.contenttypes import generic from django.utils.translation import ugettext_lazy as _ -from django.utils import translation from django.utils.timezone import now +from django.db.models.signals import post_save +from functions.signal_handlers import post_save_handler from hvad.models import TranslatableModel, TranslatedFields, TranslationManager -from django.utils.html import strip_tags from sorl.thumbnail import ImageField from functions.url_utils import slugify, unique_slug from functions.model_utils import base_concrete_model from functions.form_check import translit_with_separator -from django.core.cache import cache - - -class ArticleManager(TranslationManager): - cache_time = 60 - def safe_get(self, **kwargs): - model = self.model - try: - return model.objects.get(**kwargs) - except: - return None - - def news(self): - """ - return queryset of news - """ - model = self.model - return self.language().filter(type=model.news) - - def blogs(self): - """ - return queryset of blogs - """ - model = self.model - return self.language().filter(type=model.blog) - - def main_page_news(self): - lang = translation.get_language() - key = 'main_page_news_%s'%lang - cached_news = cache.get(key) - if cached_news: - return cached_news - else: - news = list(self.news().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date', '-modified')[:3]) - cache.set(key, news, self.cache_time) - return news - - def main_page_blogs(self): - lang = translation.get_language() - key = 'main_page_blogs_%s'%lang - cached_blogs = cache.get(key) - if cached_blogs: - return cached_blogs - else: - blogs = list(self.blogs().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date')[:3]) - cache.set(key, blogs, self.cache_time) - return blogs +from article.managers import ArticleManager class Article(TranslatableModel): @@ -67,36 +20,36 @@ class Article(TranslatableModel): Uses hvad.TranslatableModel which is child of django.db.models class """ - MAX_ON_MAIN_PAGE = 3 # types of article blog = 1 news = 2 - #set manager of this model objects = ArticleManager() - slug = models.SlugField(unique=True, max_length=255) - old_id = models.IntegerField(blank=True, null=True) - logo = ImageField(upload_to='articles_preview', blank=True) - theme = models.ManyToManyField('theme.Theme') - blog_theme = models.ManyToManyField('theme.ThemeBlog') - tag = models.ManyToManyField('theme.Tag', blank=True, null=True) - author = models.ForeignKey('accounts.User', verbose_name='Автор', + slug = models.SlugField(verbose_name=_(u'Url'), unique=True, max_length=255) + # fields provides importing and reindexing new articles from previous site + old_id = models.IntegerField(verbose_name=_(u'Id из старой базы'), blank=True, null=True) + logo = ImageField(verbose_name=_(u'Логотип'), upload_to='articles_preview', blank=True) + theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тематики')) + blog_theme = models.ManyToManyField('theme.ThemeBlog', verbose_name=_(u'Тематики для блогов'), ) + tag = models.ManyToManyField('theme.Tag', blank=True, null=True, verbose_name=_(u'Теги'), ) + author = models.ForeignKey('accounts.User', verbose_name=_(u'Автор'), on_delete=models.PROTECT, related_name='articles') - exposition = models.ForeignKey('exposition.Exposition', blank=True, null=True) - conference = models.ForeignKey('conference.Conference', blank=True, null=True) - type = models.PositiveSmallIntegerField(default=1) - allow_comments = models.BooleanField(default=True) - + exposition = models.ForeignKey('exposition.Exposition', blank=True, null=True, verbose_name=_(u'Выставка')) + conference = models.ForeignKey('conference.Conference', blank=True, null=True, verbose_name=_(u'Конференция')) + # type can be blog or news + type = models.PositiveSmallIntegerField(verbose_name=_(u'Тип'), default=1, db_index=True) + # do not use anywhere now + allow_comments = models.BooleanField(verbose_name=_(u'Позволить коментарии'), default=True) # fields that provides features of a visible page on the website - publish_date = models.DateTimeField(blank=True, null=True) + publish_date = models.DateTimeField(verbose_name=_(u'Дата публикации'), blank=True, null=True, db_index=True) expiry_date = models.DateTimeField(_("Expires on"), help_text=_("With Published chosen, won't be shown after this time"), blank=True, null=True) in_sitemap = models.BooleanField(_("Show in sitemap"), default=False) # fields that provides features of a visible on main page - main_page = models.BooleanField(default=False) + main_page = models.BooleanField(verbose_name=_(u'Показывать на главной'), default=False, db_index=True) main_page_time = models.DateTimeField(blank=True, null=True) # field that check if need generate description @@ -104,23 +57,22 @@ class Article(TranslatableModel): help_text=_("If checked, the description will be automatically " "generated from content. Uncheck if you want to manually " "set a custom description."), default=False) - -# published = models. created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) #translated fields translations = TranslatedFields( - main_title = models.CharField(max_length=255), - preview = models.TextField(), - description = models.TextField(blank=False), + main_title=models.CharField(verbose_name=_(u'Заголовок'), max_length=255), + preview=models.TextField(verbose_name=_(u'Превью'), ), + description=models.TextField(verbose_name=_(u'Основной текст'), blank=False), #-----meta - title = models.CharField(max_length=255, blank=True), - descriptions = models.CharField(max_length=255, blank=True), - keywords = models.CharField(max_length=255, blank=True), + title=models.CharField(max_length=255, blank=True), + descriptions=models.CharField(max_length=255, blank=True), + keywords=models.CharField(max_length=255, blank=True), ) files = generic.GenericRelation('file.FileModel', content_type_field='content_type', object_id_field='object_id') + class Meta: ordering = ['-publish_date'] @@ -130,8 +82,10 @@ class Article(TranslatableModel): def translation_model(self): return self._meta.translations_model - def publish(self): + """ + set publish date. uses when publish date is none + """ self.in_sitemap = True if not self.publish_date: # save time only first time @@ -141,6 +95,10 @@ class Article(TranslatableModel): return self def get_event(self): + """ + get event connected to article + exposition has priority + """ if self.exposition: return self.exposition elif self.conference: @@ -182,8 +140,10 @@ class Article(TranslatableModel): return slugify(self.get_available_title()) def get_available_title(self): - #print self.lazy_translation_getter('main_title', self.pk) - return u'%s'%self.lazy_translation_getter('main_title', self.pk) + """ + get title from current language + """ + return u'%s' % self.lazy_translation_getter('main_title', self.pk) def _get_next_or_previous_by_publish_date(self, is_next, **kwargs): """ @@ -216,21 +176,19 @@ class Article(TranslatableModel): """ return self._get_next_or_previous_by_publish_date(False, **kwargs) - def admin_url(self): if self.type == 1: - return '/admin/article/blog/%s'%self.slug + return '/admin/article/blog/%s' % self.slug elif self.type == 2: - return '/admin/article/news/%s'%self.slug + return '/admin/article/news/%s' % self.slug def get_permanent_url(self): if self.type == 1: - return '/blogs/%s/'%self.slug + return '/blogs/%s/' % self.slug elif self.type == 2: - return '/news/%s/'%self.slug + return '/news/%s/' % self.slug def get_blog_preview(self): - preview = self.files.filter(purpose='preview') if preview: return preview[0] @@ -238,7 +196,6 @@ class Article(TranslatableModel): return None def get_blog_preview2(self): - preview = self.files.filter(purpose='preview2') if preview: return preview[0] @@ -252,12 +209,8 @@ class Article(TranslatableModel): return '/news/' def similar(self): - themes = [item ['id'] for item in self.theme.all().values('id')] + themes = [item['id'] for item in self.theme.all().values('id')] return list(Article.objects.language().exclude(id=self.id).filter(type=self.type, publish_date__isnull=False, theme__in=themes).distinct().order_by('-publish_date')[:3]) -from django.db.models.signals import post_save -from functions.signal_handlers import post_save_handler - - post_save.connect(post_save_handler, sender=Article) \ No newline at end of file diff --git a/article/urls.py b/article/urls.py index 482a9e76..073f7735 100644 --- a/article/urls.py +++ b/article/urls.py @@ -3,7 +3,7 @@ from django.conf.urls import patterns, url from views import BlogList, NewsList, BlogDetail, NewsDetail, NewsTagCatalog, BlogsFilterCatalog urlpatterns = patterns('', - url(r'^blogs/tag/(?P.*)/page/(?P\d+)/$', BlogsFilterCatalog.as_view(), {'meta_id':75, 'filter':'tag'}), + url(r'^blogs/tag/(?P.*)/page/(?P\d+)/$', BlogsFilterCatalog.as_view(), {'meta_id': 75, 'filter':'tag'}), url(r'^blogs/theme/(?P.*)/page/(?P\d+)/$', BlogsFilterCatalog.as_view(), {'filter':'theme'}), url(r'^blogs/page/(?P\d+)/$', BlogList.as_view(), {'meta_id':79}), url(r'^blogs/tag/(?P.*)/$', BlogsFilterCatalog.as_view(), {'meta_id':75, 'filter':'tag'}), diff --git a/banners/__init__.py b/banners/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/banners/models.py b/banners/models.py deleted file mode 100644 index 8cd34977..00000000 --- a/banners/models.py +++ /dev/null @@ -1,15 +0,0 @@ -from django.db import models - -# Create your models here. - -class Redirect(models.Model): - redirect = models.URLField() - count = models.PositiveIntegerField(default=0) - views = models.PositiveIntegerField(default=0) - - - def __unicode__(self): - return self.redirect - - def get_object_url(self): - return '/redirect/redirect/%d/'%self.id diff --git a/banners/tests.py b/banners/tests.py deleted file mode 100644 index 501deb77..00000000 --- a/banners/tests.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -This file demonstrates writing tests using the unittest module. These will pass -when you run "manage.py test". - -Replace this with more appropriate tests for your application. -""" - -from django.test import TestCase - - -class SimpleTest(TestCase): - def test_basic_addition(self): - """ - Tests that 1 + 1 always equals 2. - """ - self.assertEqual(1 + 1, 2) diff --git a/banners/urls.py b/banners/urls.py deleted file mode 100644 index a0ce0988..00000000 --- a/banners/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -from django.conf.urls import patterns, url - -urlpatterns = patterns('', - url(r'redirect/(?P.*)/$', 'banners.views.redirect'), -) - diff --git a/banners/views.py b/banners/views.py deleted file mode 100644 index 22eb6ca5..00000000 --- a/banners/views.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.http import HttpResponseRedirect -from django.shortcuts import get_object_or_404 -from banners.models import Redirect -from django.db.models import F - -def redirect(request, id): - redirect = get_object_or_404(Redirect, id=id) - Redirect.objects.filter(id=id).update(count=F('count')+1) - return HttpResponseRedirect(redirect.redirect) - diff --git a/exposition/admin.py b/exposition/admin.py index 0345864a..f6e751ed 100644 --- a/exposition/admin.py +++ b/exposition/admin.py @@ -387,23 +387,6 @@ def search_expo(request): return HttpResponse(json.dumps(result), content_type='application/json') -from django.views.generic import FormView -from forms import PaidForm -class PaidView(FormView): - form_class = PaidForm - success_url = '/admin/exposition/all/' - template_name = 'admin/exposition/paid.html' - - def form_valid(self, form): - expo = Exposition.objects.get(url=self.kwargs.get('url')) - paid = form.save(commit=False) - paid.expo = expo - paid.save() - - return HttpResponseRedirect(self.success_url) - - - def expo_copy(request): response = {'redirect': ''} expo = Exposition.objects.get(id=request.GET['id']) diff --git a/exposition/admin_urls.py b/exposition/admin_urls.py index 7b521cb3..9adda27b 100644 --- a/exposition/admin_urls.py +++ b/exposition/admin_urls.py @@ -1,11 +1,10 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -from admin import ExpositionListView, ExpositionView, PaidView +from admin import ExpositionListView, ExpositionView urlpatterns = patterns('exposition.admin', url(r'^upload-photo/(?P.*)/$', 'upload_exposition_photo'), url(r'^copy/$', 'expo_copy'), - url(r'^(?P.*)/paid/$', PaidView.as_view()), #url(r'^add.*/$', 'exposition_add'), url(r'^delete/(?P.*)/$', 'exposition_delete'), diff --git a/exposition/forms.py b/exposition/forms.py index 8b431736..6d5b5538 100644 --- a/exposition/forms.py +++ b/exposition/forms.py @@ -615,12 +615,4 @@ class ExpositionFilterForm(AdminFilterForm): if month: qs = qs.filter(data_begin__month=month) - return qs - -from exposition.models import Paid - -class PaidForm(forms.ModelForm): - class Meta: - model = Paid - exclude = ('expo',) - + return qs \ No newline at end of file diff --git a/exposition/models.py b/exposition/models.py index 0ba5874a..eb21de6d 100644 --- a/exposition/models.py +++ b/exposition/models.py @@ -386,14 +386,6 @@ def logo_name(instance, filename): url = instance.expo.url return '/'.join(['exposition', url, url+'_org_logo.jpg']) -class Paid(models.Model): - expo = models.OneToOneField(Exposition) - org_logo = models.ImageField(upload_to=logo_name, blank=True, max_length=255) - oficial_link = models.ForeignKey('banners.Redirect', null=True, blank=True, related_name='expo_oficial') - participation_link = models.ForeignKey('banners.Redirect', null=True, blank=True, related_name='expo_participation') - tickets_link = models.ForeignKey('banners.Redirect', null=True, blank=True, related_name='expo_tickets') - organiser = models.EmailField(blank=True) - pre_save.connect(pre_save_handler, sender=Exposition) post_save.connect(post_save_handler, sender=Exposition) diff --git a/proj/settings.py b/proj/settings.py index 35b25d31..1d0dbd95 100644 --- a/proj/settings.py +++ b/proj/settings.py @@ -338,7 +338,6 @@ INSTALLED_APPS = ( 'translator', 'webinar', 'meta', - 'banners', #django modules 'sorl.thumbnail', # for logos 'photologue', # photogallery diff --git a/proj/urls.py b/proj/urls.py index f6c375fe..859159f2 100644 --- a/proj/urls.py +++ b/proj/urls.py @@ -72,7 +72,6 @@ urlpatterns = patterns('', url(r'^accounts/', include('registration.backends.default.urls')), url(r'^', include('password_reset.urls')), url(r'^i18n/', include('django.conf.urls.i18n')), - url(r'^redirect/', include('banners.urls')), url(r'^', include('settings.old_urls')), url(r'^', include('service.urls')), ) diff --git a/templates/admin/exposition/paid.html b/templates/admin/exposition/paid.html deleted file mode 100644 index 2345c4df..00000000 --- a/templates/admin/exposition/paid.html +++ /dev/null @@ -1,59 +0,0 @@ -{% extends 'base.html' %} -{% load static %} -{% load thumbnail %} - -{% block scripts %} - - - - -{% endblock %} - -{% block body %} -
{% csrf_token %} -
- {% if object %} Изменить {% else %} Добавить {% endif %}выставку{% if object %}(на сайте){% endif %} - -
-
-

Основная информация

-
-
-
- -
{{ form.org_logo }} - {{ form.org_logo.errors }} -
-
- -
- -
{{ form.oficial_link }} - {{ form.oficial_link.errors }} -
-
- -
- -
{{ form.participation_link }} - {{ form.participation_link.errors }} -
-
- -
- -
{{ form.tickets_link }} - {{ form.tickets_link.errors }} -
-
-
-
- -
- - -
-
-
- -{% endblock %} \ No newline at end of file diff --git a/templates/client/base_page.html b/templates/client/base_page.html index a76f1c26..e5dc5588 100644 --- a/templates/client/base_page.html +++ b/templates/client/base_page.html @@ -37,19 +37,7 @@ {% block asside_banner2 %} - - {% comment %} -
-
- - - -
-
- {% endcomment %} - - - {% endblock %} + {% endblock %} {% include 'client/includes/side_confs.html' %}
diff --git a/templates/client/popups/auto_banner.html b/templates/client/popups/auto_banner.html deleted file mode 100644 index 8f8a7e69..00000000 --- a/templates/client/popups/auto_banner.html +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/templates/client/popups/auto_modal.html b/templates/client/popups/auto_modal.html deleted file mode 100644 index efc38881..00000000 --- a/templates/client/popups/auto_modal.html +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/templates/client/popups/cemat_banner1.html b/templates/client/popups/cemat_banner1.html deleted file mode 100644 index 5afc9aed..00000000 --- a/templates/client/popups/cemat_banner1.html +++ /dev/null @@ -1,8 +0,0 @@ - \ No newline at end of file diff --git a/templates/client/popups/cemat_banner2.html b/templates/client/popups/cemat_banner2.html deleted file mode 100644 index e80c0ce2..00000000 --- a/templates/client/popups/cemat_banner2.html +++ /dev/null @@ -1,8 +0,0 @@ - \ No newline at end of file diff --git a/templates/client/popups/cemat_modal.html b/templates/client/popups/cemat_modal.html deleted file mode 100644 index d6c437d9..00000000 --- a/templates/client/popups/cemat_modal.html +++ /dev/null @@ -1,24 +0,0 @@ - -