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.
256 lines
9.4 KiB
256 lines
9.4 KiB
# -*- coding: utf-8 -*-
|
|
import json
|
|
from django.views.generic import DetailView
|
|
from django.conf import settings
|
|
from django.shortcuts import get_object_or_404
|
|
from django.utils.translation import ugettext as _
|
|
from functions.custom_views import ListView
|
|
from models import Article
|
|
from forms import BlogFilterForm, NewsFilterForm
|
|
from theme.models import Tag, ThemeBlog
|
|
from meta.views import MetadataMixin
|
|
|
|
|
|
class NewsList(MetadataMixin, ListView):
|
|
model = Article
|
|
template_name = 'client/article/news_list.html'
|
|
paginate_by = settings.CLIENT_PAGINATION
|
|
|
|
def get_queryset(self):
|
|
"""
|
|
filters queryset by get params if they exists
|
|
"""
|
|
if self.request.GET:
|
|
qs = self.model.objects.news()
|
|
themes = self.request.GET.getlist('theme')
|
|
if themes:
|
|
qs = qs.filter(theme__id__in=themes)
|
|
|
|
tags = self.request.GET.getlist('tag')
|
|
if u'' in tags:
|
|
tags.remove(u'')
|
|
if tags:
|
|
tags = tags[0].split(',')
|
|
qs = qs.filter(tag__id__in=tags)
|
|
|
|
return qs
|
|
else:
|
|
return self.model.objects.news().filter(publish_date__isnull=False)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
"""
|
|
add filter form to context
|
|
"""
|
|
context = super(NewsList, self).get_context_data(object_list=self.object_list)
|
|
if self.request.GET:
|
|
filter_form = NewsFilterForm(self.request.GET)
|
|
tags = self.request.GET.getlist('tag')
|
|
if u'' in tags:
|
|
tags.remove(u'')
|
|
if tags:
|
|
tags = tags[0].split(',')
|
|
tag_qs = Tag.objects.filter(id__in=tags)
|
|
tags = [{'id': str(tag.id), 'text': tag.name} for tag in tag_qs]
|
|
filter_form.fields['tag'].widget.attrs['data-predifined'] = json.dumps(tags)
|
|
filter_form.fields['tag'].widget.attrs['value'] = ''
|
|
else:
|
|
filter_form = NewsFilterForm()
|
|
|
|
context['article_filter_form'] = filter_form
|
|
return context
|
|
|
|
|
|
class EventNewsList(MetadataMixin, ListView):
|
|
model = Article
|
|
template_name = 'client/article/event_news_list.html'
|
|
paginate_by = settings.CLIENT_PAGINATION
|
|
|
|
def get_queryset(self):
|
|
"""
|
|
filters queryset by event if exists or 404
|
|
"""
|
|
slug = self.kwargs.get('slug')
|
|
event_model = self.kwargs.get('event_model')
|
|
self.event = get_object_or_404(event_model.enable, url=slug)
|
|
|
|
params = {event_model.__name__.lower(): self.event}
|
|
|
|
qs = self.model.objects.news()\
|
|
.filter(publish_date__isnull=False, **params).order_by('-publish_date')
|
|
return qs
|
|
|
|
def get_context_data(self, **kwargs):
|
|
"""
|
|
add filter form to context
|
|
"""
|
|
context = super(EventNewsList, self).get_context_data(object_list=self.object_list)
|
|
context['event'] = self.event
|
|
return context
|
|
|
|
|
|
class NewsDetail(MetadataMixin, DetailView):
|
|
model = Article
|
|
slug_field = 'slug'
|
|
template_name = 'client/article/news.html'
|
|
|
|
|
|
class BlogList(MetadataMixin, ListView):
|
|
model = Article
|
|
template_name = 'client/article/blog_list.html'
|
|
paginate_by = settings.CLIENT_PAGINATION
|
|
|
|
def get_queryset(self):
|
|
"""
|
|
filters queryset by get params if they exists
|
|
"""
|
|
if self.request.GET:
|
|
qs = self.model.objects.blogs()
|
|
|
|
themes = self.request.GET.getlist('theme')
|
|
if themes:
|
|
qs = qs.filter(blog_theme__id__in=themes)
|
|
|
|
tags = self.request.GET.getlist('tag')
|
|
if u'' in tags:
|
|
tags.remove(u'')
|
|
if tags:
|
|
tags = tags[0].split(',')
|
|
qs = qs.filter(tag__id__in=tags)
|
|
|
|
return qs
|
|
else:
|
|
return self.model.objects.blogs()
|
|
|
|
def get_context_data(self, **kwargs):
|
|
"""
|
|
add filter form to context
|
|
"""
|
|
context = super(BlogList, self).get_context_data(object_list=self.object_list)
|
|
if self.request.GET:
|
|
filter_form = BlogFilterForm(self.request.GET)
|
|
tags = self.request.GET.getlist('tag')
|
|
if u'' in tags:
|
|
tags.remove(u'')
|
|
if tags:
|
|
tags = tags[0].split(',')
|
|
tag_qs = Tag.objects.filter(id__in=tags)
|
|
tags = [{'id': str(tag.id), 'text': tag.name} for tag in tag_qs]
|
|
filter_form.fields['tag'].widget.attrs['data-predifined'] = json.dumps(tags)
|
|
filter_form.fields['tag'].widget.attrs['value'] = ''
|
|
else:
|
|
filter_form = BlogFilterForm()
|
|
|
|
context['article_filter_form'] = filter_form
|
|
return context
|
|
|
|
|
|
class BlogDetail(MetadataMixin, DetailView):
|
|
model = Article
|
|
slug_field = 'slug'
|
|
template_name = 'client/article/article.html'
|
|
|
|
def get_queryset(self):
|
|
qs = super(BlogDetail, self).get_queryset()
|
|
return qs.filter(draft=False)
|
|
|
|
|
|
class NewsTagCatalog(MetadataMixin, ListView):
|
|
"""
|
|
returns queryset filtered by filtered_object and dates
|
|
filtered_object can be theme or tag
|
|
"""
|
|
model = Article
|
|
template_name = 'client/article/catalog.html'
|
|
catalog_url = '/news/tag/'
|
|
filter_object = None
|
|
year = None
|
|
month = None
|
|
|
|
def get_queryset(self):
|
|
slug = self.kwargs.get('slug')
|
|
tag = get_object_or_404(Tag, url=slug)
|
|
self.kwargs['tag'] = tag
|
|
self.filter_object = tag
|
|
qs = Article.objects.news().filter(tag=tag)
|
|
year = self.kwargs.get('year')
|
|
|
|
if year:
|
|
qs = qs.filter(publish_date__year=year)
|
|
# info for breadscrumbs
|
|
self.year = {'text': year, 'link': '%s%s/%s/'%(self.catalog_url, self.filter_object.url, year)}
|
|
|
|
month = self.kwargs.get('month')
|
|
|
|
monthes = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')},
|
|
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')},
|
|
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')},
|
|
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')},
|
|
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')},
|
|
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}}
|
|
|
|
if month and monthes.get(month):
|
|
qs = qs.filter(publish_date__month=monthes[month]['value'])
|
|
|
|
self.month = {'text': monthes[month]['name'], 'link': '%s%s/%s/%s/'%(self.catalog_url, self.filter_object.url, year, month)}
|
|
return qs
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(NewsTagCatalog, self).get_context_data(**kwargs)
|
|
context['filter_object'] = self.filter_object
|
|
context['year'] = self.year
|
|
context['month'] = self.month
|
|
context['catalog_url'] = self.catalog_url
|
|
return context
|
|
|
|
|
|
class BlogsFilterCatalog(MetadataMixin, ListView):
|
|
model = Article
|
|
template_name = 'client/article/catalog.html'
|
|
catalog_url = '/blogs/tag/'
|
|
filter_object = None
|
|
year = None
|
|
month = None
|
|
|
|
def get_queryset(self, **kwargs):
|
|
slug = self.kwargs.get('slug')
|
|
filter_slug = self.kwargs['filter']
|
|
if filter_slug == 'tag':
|
|
tag = get_object_or_404(Tag, url=slug)
|
|
self.kwargs['tag'] = tag
|
|
self.filter_object = tag
|
|
qs = Article.objects.blogs().filter(tag=tag)
|
|
else:
|
|
theme = get_object_or_404(ThemeBlog, url=slug)
|
|
self.kwargs['theme'] = theme
|
|
self.filter_object = theme
|
|
qs = Article.objects.blogs().filter(blog_theme = theme)
|
|
year = self.kwargs.get('year')
|
|
|
|
if year:
|
|
qs = qs.filter(publish_date__year=year)
|
|
# info for breadscrumbs
|
|
self.year = {'text': year, 'link': '%s%s/%s/' % (self.catalog_url, self.filter_object.url, year)}
|
|
|
|
month = self.kwargs.get('month')
|
|
|
|
monthes = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')},
|
|
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')},
|
|
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')},
|
|
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')},
|
|
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')},
|
|
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}}
|
|
|
|
if month and monthes.get(month):
|
|
qs = qs.filter(publish_date__month=monthes[month]['value'])
|
|
|
|
self.month = {'text': monthes[month]['name'], 'link': '%s%s/%s/%s/'%(self.catalog_url, self.filter_object.url, year, month)}
|
|
return qs
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(BlogsFilterCatalog, self).get_context_data(**kwargs)
|
|
context['filter_object'] = self.filter_object
|
|
context['type'] = 'article'
|
|
context['year'] = self.year
|
|
context['month'] = self.month
|
|
context['catalog_url'] = self.catalog_url
|
|
return context
|
|
|