diff --git a/.gitignore b/.gitignore index 48f1c69c..2808adfe 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ media logs/ Thumbs.db /proj/local.py +static/client diff --git a/accounts/models.py b/accounts/models.py index f2dbdc87..60134fa9 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -294,22 +294,22 @@ class EventFilter(models.Model): areas = self.area.all() cities = self.city.all() - if themes.count(): - qs = qs.filter(theme__in=list(themes)) + if themes.exists(): + qs = qs.filter(theme__in=set(themes)) - if tags.count(): - qs = qs.filter(tag__in=list(tags)) + if tags.exists(): + qs = qs.filter(tag__in=set(tags)) - if cities.count(): - qs = qs.filter(city__in=list(cities)) + if cities.exists(): + qs = qs.filter(city__in=set(cities)) - if areas.count(): - qs = qs.filter(country__area__in=list(areas)) + if areas.exists(): + qs = qs.filter(country__area__in=set(areas)) - if countries.count(): - qs = qs.filter(country__in=list(countries)) + if countries.exists(): + qs = qs.filter(country__in=set(countries)) - return qs.order_by('data_begin') + return qs.order_by('data_begin').distinct() def calculate_rating(user): diff --git a/accounts/views.py b/accounts/views.py index 8b3b149b..c3b1249d 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -2,6 +2,7 @@ import dateutil.relativedelta as rdelta import json import datetime +from django.core.urlresolvers import reverse import calendar as python_calendar from django.shortcuts import get_object_or_404 from django.http import HttpResponseRedirect, HttpResponse, Http404 diff --git a/exposition/forms.py b/exposition/forms.py index d93d0da2..b05ef8f7 100644 --- a/exposition/forms.py +++ b/exposition/forms.py @@ -550,9 +550,9 @@ class TimeTableForm(forms.Form): required = True if lid == 0 else False self.fields['name_%s' % code] = forms.CharField(label='Название программы', required=required, widget=forms.TextInput(attrs={'style':'width: 550px'})) - self.fields['programe_%s' % code] = forms.CharField(label='Программа', required=required, + self.fields['programe_%s' % code] = forms.CharField(label='Программа', required=False, widget=CKEditorWidget) - self.fields['speaker_%s' % code] = forms.CharField(label='Спикеры', required=False, + self.fields['speaker_%s' % code] = forms.CharField(label='Организатор', required=False, widget=forms.TextInput(attrs={'style':'width: 550px'})) self.fields['place_%s' % code] = forms.CharField(label='Место проведения', required=False, widget=forms.TextInput(attrs={'style':'width: 550px'})) diff --git a/exposition/models.py b/exposition/models.py index f8a82622..5b191871 100644 --- a/exposition/models.py +++ b/exposition/models.py @@ -261,7 +261,7 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin): return '/expo/add-note/%s/'%self.url def get_timetables_days(self): - tables = self.business_program.all() + tables = list(self.business_program.all()) days = [] for t in tables: d = t.begin.replace(hour = 0, minute = 0, second = 0, microsecond = 0) @@ -312,7 +312,7 @@ class TimeTable(TranslatableModel): TimeTable for business program """ - exposition = models.ForeignKey(Exposition, related_name='TimeTable') + exposition = models.ForeignKey(Exposition, related_name='business_program') begin = models.DateTimeField(verbose_name='Начало') end = models.DateTimeField(verbose_name='Конец') timetable_organiser = models.ForeignKey(Organiser, null=True, blank=True) @@ -322,8 +322,8 @@ class TimeTable(TranslatableModel): #translated fields translations = TranslatedFields( name = models.CharField(verbose_name='Название программы', max_length=255, blank=True), - programe = models.TextField(verbose_name='Программа'), - speaker = models.CharField(verbose_name='Спикеры', max_length=255, blank=True), + programe = models.TextField(verbose_name='Программа', blank=True), + speaker = models.CharField(verbose_name='Организатор', max_length=255, blank=True), place = models.CharField(verbose_name='Место проведения', max_length=255, blank=True) ) diff --git a/proj/admin_urls.py b/proj/admin_urls.py index 04fcb0ea..f566e642 100644 --- a/proj/admin_urls.py +++ b/proj/admin_urls.py @@ -12,7 +12,7 @@ urlpatterns = required( url(r'^$', AdminIndex.as_view()), url(r'^', include('import_xls.admin_urls')), url(r'^accounts/', include('accounts.admin_urls')), - url(r'page/', include('core.admin_urls')), + #url(r'page/', include('core.admin_urls')), url(r'^article/', include('article.admin_urls')), url(r'^photogallery/', include('photologue.admin_urls')), url(r'^city/', include('city.admin_urls')), diff --git a/proj/urls.py b/proj/urls.py index 0afc06d7..bd2e90cb 100644 --- a/proj/urls.py +++ b/proj/urls.py @@ -31,10 +31,8 @@ handler404 = 'proj.views.error404' urlpatterns = patterns('', url(r'^acquire_email/$', 'registration.backends.default.views.acquire_email', name = 'acquire_email'), url(r'^rss/', include('core.urls')), - #url(r'^__debug__/', include(debug_toolbar.urls)), url(r'^sitemap-(?P
.+)\.xml$', views.sitemap, {'sitemaps': sitemaps}), url(r'^admin/', include('proj.admin_urls')), - #url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), url(r'^sitemap\.xml$', views.index, {'sitemaps': sitemaps}), url(r'^sitemap-(?P
.+)\.xml$', views.sitemap, {'sitemaps': sitemaps}), url(r'^robots.txt$', Robot.as_view()), diff --git a/settings/admin.py b/settings/admin.py index 10ea63bf..9414d003 100644 --- a/settings/admin.py +++ b/settings/admin.py @@ -2,21 +2,19 @@ import json from django.shortcuts import render_to_response from django.http import HttpResponseRedirect +from django.core.urlresolvers import reverse from django.core.context_processors import csrf from forms import MainPageArticle, MainPageNews, MainPageThemes -def handle_form(request, Form): +def handle_form(request, form): if request.POST: - form = Form(request.POST) - if form.is_valid(): - form.save() - return HttpResponseRedirect('/admin/settings/main-page/') - else: + f = form(request.POST) - return HttpResponseRedirect('/admin/settings/main-page/') + if f.is_valid(): + f.save() - return HttpResponseRedirect('/admin/settings/main-page/') + return HttpResponseRedirect(reverse('settings_main_page')) def handle_news(request): @@ -31,32 +29,17 @@ def handle_themes(request): return handle_form(request, MainPageThemes) -from exposition.models import Exposition -from conference.models import Conference -from seminar.models import Seminar -from webinar.models import Webinar 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) - conferences = Conference.objects.filter(main_page=1) - seminars = Seminar.objects.filter(main_page=1) - webinars = Webinar.objects.filter(main_page=1) - events = {'expositions':expositions, 'conferences': conferences, - 'seminars':seminars, 'webinars': webinars} - exposition_themes = Theme.objects.filter(main_page__gt=0, types=Theme.types.exposition) confrence_themes = Theme.objects.filter(main_page__gt=0, types=Theme.types.conference) - seminar_themes = Theme.objects.filter(main_page__gt=0, types=Theme.types.seminar) 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, - 'seminar_themes':seminar_themes} + 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] diff --git a/settings/admin_urls.py b/settings/admin_urls.py index 8a90c5a2..76a13c2a 100644 --- a/settings/admin_urls.py +++ b/settings/admin_urls.py @@ -1,9 +1,12 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url +from .admin import handle_themes, handle_news, handle_articles, main_page + +urlpatterns = patterns('', + url(r'^main-page/themes/', handle_themes, name='settings_main_page_themes'), + url(r'^main-page/news/$', handle_news, name='settings_main_page_news'), + url(r'^main-page/blogs/$', handle_articles, name='settings_main_page_articles'), + + url(r'^main-page/$', main_page, name='settings_main_page'), -urlpatterns = patterns('settings.admin', - url(r'^main-page/$', 'main_page'), - url(r'^main-page/themes/$', 'handle_themes'), - url(r'^main-page/news/$', 'handle_news'), - url(r'^main-page/blogs/$', 'handle_articles'), ) diff --git a/settings/forms.py b/settings/forms.py index 87d73c1d..d30f1b69 100644 --- a/settings/forms.py +++ b/settings/forms.py @@ -20,20 +20,16 @@ class MainPageThemes(forms.Form): required=False) conference_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.conference), required=False) - #seminar_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.seminar), - # required=False) def save(self): data = self.cleaned_data exposition_themes = data['exposition_themes'] conference_themes = data['conference_themes'] - #seminar_themes = data['seminar_themes'] - Theme.objects.filter(types=Theme.types.exposition).update(main_page=0) - Theme.objects.filter(types=Theme.types.conference).update(main_page=0) - #Theme.objects.filter(types=Theme.types.seminar).update(main_page=0) + + Theme.objects.filter().update(main_page=0) exposition_themes.update(main_page=1) conference_themes.update(main_page=1) - #seminar_themes.update(main_page=1) + class MainPageNews(forms.Form): diff --git a/static/client b/static/client deleted file mode 100644 index 52754f3f..00000000 --- a/static/client +++ /dev/null @@ -1 +0,0 @@ -/home/www/proj/templates/client/static_client \ No newline at end of file diff --git a/templates/admin/exposition/exposition.html b/templates/admin/exposition/exposition.html index 3b2be57b..3002ae48 100644 --- a/templates/admin/exposition/exposition.html +++ b/templates/admin/exposition/exposition.html @@ -386,8 +386,8 @@ Программа Начало Конец - Спикеры Организатор + Место   @@ -395,12 +395,12 @@ {% for timetable in timetables %} - {{ timetable.programe|safe }} + {{ timetable.name|safe }} {{ timetable.begin|date:"o-m-d H:i" }} {{ timetable.end|date:"o-m-d H:i" }} {{ timetable.speaker }} - {{ timetable.timetable_organiser }} + {{ timetable.place }} - - - - - -
-
-
-

Новости

-
-
-
{% csrf_token %} - {{ news_form }} -
- -
-
-
-

Обзоры

-
{% csrf_token %} + {% csrf_token %} {{ article_form }}
@@ -61,31 +25,33 @@
-
+

Тематики

- {% csrf_token %} - {{ theme_form }} -
- - -
-
-
-
-

Фоторепортажи

-
-
-
{% csrf_token %} - {{ photoreport_form }} + {% csrf_token %} + +
+ +
+ {{ theme_form.exposition_themes }} +
+
+
+ +
+ {{ theme_form.conference_themes }} +
+
+
+ {% endblock %} {% block bot_scripts %} diff --git a/templates/admin/timetable_list.html b/templates/admin/timetable_list.html index 53366ddc..00ed6203 100644 --- a/templates/admin/timetable_list.html +++ b/templates/admin/timetable_list.html @@ -1,6 +1,6 @@ {% for obj in objects %} - {{ obj.programe|safe }} + {{ obj.name|safe }} {{ obj.begin|date:"Y-m-d H:i" }} {{ obj.end|date:"Y-m-d H:i" }} {{ obj.speaker }} diff --git a/templates/client/exposition/search.html b/templates/client/exposition/search.html index 6aa7d985..c2eb3d6b 100644 --- a/templates/client/exposition/search.html +++ b/templates/client/exposition/search.html @@ -35,7 +35,7 @@ {% block paginator %} {% with page_obj=page_obj queries=queries %} - {% include 'includes/search_paginator.html' %} + {% include 'client/includes/search_paginator.html' %} {% endwith %} {% endblock %} \ No newline at end of file diff --git a/templates/client/includes/accounts/simple_user.html b/templates/client/includes/accounts/simple_user.html index df898890..39c8cfe5 100644 --- a/templates/client/includes/accounts/simple_user.html +++ b/templates/client/includes/accounts/simple_user.html @@ -92,14 +92,17 @@

- -
-
{% trans 'О себе' %}:
- {{ member.profile.about|safe|linebreaks }} -
+ {% if member.profile.about %} +
+
{% trans 'О себе' %}:
+ {{ member.profile.about|safe|linebreaks }} +
+ {% endif %}
- {% if member.get_expositions_number > 0 or member.get_conferences_number > 0 or member.get_seminars_number > 0 %} + + {% if member.get_expositions_number > 0 or member.get_conferences_number > 0 %} +
{% trans 'Участие в событиях' %}
@@ -117,6 +120,6 @@
- {% endif %} - + {% endif %} + \ No newline at end of file diff --git a/templates/client/includes/exposition/search_result.html b/templates/client/includes/exposition/search_result.html index 5f791b9d..962b9c61 100644 --- a/templates/client/includes/exposition/search_result.html +++ b/templates/client/includes/exposition/search_result.html @@ -5,7 +5,7 @@ {% for result in query %}
  • {% endif %}
    - +
    {{ result.object.main_title|safe }} diff --git a/templates/client/static_client/client b/templates/client/static_client/client new file mode 120000 index 00000000..2a11f8b9 --- /dev/null +++ b/templates/client/static_client/client @@ -0,0 +1 @@ +client \ No newline at end of file diff --git a/theme/manager.py b/theme/manager.py index 832a2c61..20fd2266 100644 --- a/theme/manager.py +++ b/theme/manager.py @@ -1,4 +1,5 @@ import datetime +from operator import attrgetter from django.utils import translation from django.core.cache import cache from hvad.models import TranslationManager @@ -36,6 +37,7 @@ class ThemeActiveManager(TranslationManager): from exposition.models import Exposition themes_id = [item['theme'] for item in Exposition.objects.values('theme').distinct()] themes = list(self.language().filter(id__in=themes_id)) + themes = sorted(themes, key=attrgetter('name')) cache.set(key, themes, 300) return themes @@ -53,7 +55,7 @@ class ThemeActiveManager(TranslationManager): themes_id = [item['theme'] for item in Exposition.objects.filter(is_published=True, data_end__gte=now).values('theme').distinct()] #themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql))) themes = set(list(self.language().filter(id__in=themes_id))) - themes = sorted(themes, key=lambda x: x.name) + themes = sorted(themes, key=attrgetter('name')) cache.set(key, themes, self.cache_time) return themes @@ -70,7 +72,7 @@ class ThemeActiveManager(TranslationManager): themes_id = [item['theme'] for item in Conference.objects.filter(is_published=True, data_end__gte=now).values('theme').distinct()] #themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql))) themes = set(list(self.language().filter(id__in=themes_id))) - themes = sorted(themes, key=lambda x: x.name) + themes = sorted(themes, key=attrgetter('name')) cache.set(key, themes, self.cache_time) return themes @@ -115,7 +117,7 @@ class TagActiveManager(TranslationManager): tag_id = [item['tag'] for item in Conference.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()] #themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql))) tags = set(list(self.language().filter(id__in=tag_id))) - tags = sorted(tags, key=lambda x: x.name) + tags = sorted(tags, key=attrgetter('name')) cache.set(key, tags, self.cache_time) return tags @@ -133,7 +135,7 @@ class TagActiveManager(TranslationManager): tags_id = [item['tag'] for item in Exposition.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()] #themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql))) tags = set(list(self.language().filter(id__in=tags_id))) - tags = sorted(tags, key=lambda x: x.name) + tags = sorted(tags, key=attrgetter('name')) cache.set(key, tags, self.cache_time) return tags @@ -150,6 +152,6 @@ class TagActiveManager(TranslationManager): tags_id = [item['tag'] for item in Conference.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()] #themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql))) tags = set(list(self.language().filter(id__in=tags_id))) - tags = sorted(tags, key=lambda x: x.name) + tags = sorted(tags, key=attrgetter('name')) cache.set(key, tags, self.cache_time) return tags