diff --git a/accounts/models.py b/accounts/models.py index 5dee4e48..43125dcc 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -204,6 +204,11 @@ class User(AbstractBaseUser, PermissionsMixin): return '/%d/'%self.id #return self.catalog+str(self.id)+'/' + def get_translator_url(self): + if self.url: + return '/translators/%s/'%self.url + return '/translators/%d/'%self.id + def get_expos(self): """ return information about expos and them related data by 1 query diff --git a/banners/models.py b/banners/models.py index b9779288..8cd34977 100644 --- a/banners/models.py +++ b/banners/models.py @@ -5,6 +5,8 @@ from django.db import models class Redirect(models.Model): redirect = models.URLField() count = models.PositiveIntegerField(default=0) + views = models.PositiveIntegerField(default=0) + def __unicode__(self): return self.redirect diff --git a/city/admin.py b/city/admin.py index adf383e3..b2642e36 100644 --- a/city/admin.py +++ b/city/admin.py @@ -49,14 +49,14 @@ def city_change(request, url): return HttpResponseRedirect('/admin/city/all') if request.POST: - form = CityForm(request.POST) + form = CityForm(request.POST, request.FILES) if form.is_valid(): form.save(city_id) return HttpResponseRedirect('/admin/city/all') else: #fill form with data from database data = {'population' : c.population, 'phone_code' : c.phone_code, - 'city_id' : city_id, 'inflect':c.inflect} + 'city_id' : city_id, 'inflect':c.inflect, 'logo': c.logo} if c.country: data['country'] = c.country.id diff --git a/city/forms.py b/city/forms.py index 98cc5ce5..8843c223 100644 --- a/city/forms.py +++ b/city/forms.py @@ -34,6 +34,7 @@ class CityForm(forms.Form): widget=forms.TextInput(attrs={'placeholder':'Код города'})) code_IATA = forms.ModelChoiceField(label='Код IATA', queryset=Iata.objects.all(), empty_label=None, required=False) inflect = forms.CharField(label='Inflect', required=False) + logo = forms.ImageField(label='Logo', required=False) #field for comparing tmp files key = forms.CharField(required=False, widget=forms.HiddenInput()) # @@ -91,6 +92,11 @@ class CityForm(forms.Form): city.population = data.get('population') city.inflect = data['inflect'] + if data.get('logo'): + city.logo = data['logo'] + else: + city.logo = '' + if data.get('code_IATA'): city.code_IATA = Iata.objects.get(id=data['code_IATA'].id)# .id cause select uses queryset @@ -161,4 +167,17 @@ class CityDeleteForm(forms.ModelForm): class CityFilterForm(AdminFilterForm): - model = City \ No newline at end of file + country = forms.ChoiceField(choices=[('', '')]+[(item.id, item.name) for item in Country.objects.all()], required=False, + label='Страна') + model = City + + def filter(self): + qs = super(CityFilterForm, self).filter() + + data = self.cleaned_data + country_id = data['country'] + + + if country_id: + qs = qs.filter(country__id=country_id) + return qs diff --git a/city/models.py b/city/models.py index 73d3cbf5..e02547f6 100644 --- a/city/models.py +++ b/city/models.py @@ -62,6 +62,7 @@ class City(TranslatableModel): # fields saves information about creating and changing model created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) + logo = models.ImageField(verbose_name='Logo', upload_to='city/logo/', blank=True, max_length=255) class Meta: ordering = ['translations__name'] diff --git a/conference/admin.py b/conference/admin.py index d5d063b5..c1bfa2b1 100644 --- a/conference/admin.py +++ b/conference/admin.py @@ -295,4 +295,21 @@ class ConferenceListView(AdminListView): model = Conference def upload_conference_photo(request, conf_id): - return upload_photo(request, conf_id, Conference) \ No newline at end of file + return upload_photo(request, conf_id, Conference) + + +from django.utils import translation +from haystack.query import SearchQuerySet +import json +from exposition.admin import get_by_lang + +def search_conf(request): + term = request.GET['term'].capitalize() + lang = translation.get_language() + if not term: + qs = SearchQuerySet().models(Conference).order_by('text')[:30] + else: + qs = SearchQuerySet().models(Conference).autocomplete(content_auto=term).order_by('text')[:30] + result = [{'id': item.pk, 'label': get_by_lang(item, 'name', lang)} for item in qs] + + return HttpResponse(json.dumps(result), content_type='application/json') diff --git a/conference/admin_urls.py b/conference/admin_urls.py index 9a206a58..2b8cc0df 100644 --- a/conference/admin_urls.py +++ b/conference/admin_urls.py @@ -9,6 +9,7 @@ urlpatterns = patterns('conference.admin', #url(r'^change/(?P.*)/$', 'conference_change'), url(r'^switch/(?P.*)/(?P.*)$', 'conference_switch'), + url(r'^search/$', 'search_conf'), url(r'^(?P.*)/$', ConferenceView.as_view()), url(r'^$', ConferenceView.as_view()), diff --git a/conference/forms.py b/conference/forms.py index 05f8a0e1..98c08645 100644 --- a/conference/forms.py +++ b/conference/forms.py @@ -375,4 +375,16 @@ class TimeTableForm(forms.Form): class ConferenceFilterForm(AdminFilterForm): - model = Conference \ No newline at end of file + created = forms.DateField(required=False, label='Дата создания') + model = Conference + + def filter(self): + qs = super(ConferenceFilterForm, self).filter() + + data = self.cleaned_data + created = data['created'] + + if created: + + qs = qs.filter(created__startswith=created) + return qs diff --git a/conference/models.py b/conference/models.py index b79b5875..067371db 100644 --- a/conference/models.py +++ b/conference/models.py @@ -5,6 +5,7 @@ from django.db import models from django.db.models import Q from django.db.models.signals import post_save, pre_save from django.contrib.contenttypes import generic +from django.utils import translation from exposition.manager import ClientManager from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from functions.translate import fill_with_signal @@ -53,6 +54,7 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin): related_name='conference_city') place = models.ForeignKey('place_conference.PlaceConference', verbose_name='Место проведения', blank=True, null=True, on_delete=models.PROTECT, related_name='conference_place') + place_alt = models.CharField(blank=True, null=True, max_length=255) # alternative for object place theme = models.ManyToManyField('theme.Theme', verbose_name='Тематики', related_name='conference_themes') tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', @@ -171,6 +173,15 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin): def tags(self): return self.tag.language().all() + def get_index_text(self): + translation.activate('ru') + translations = self.translations.all() + names = ' '.join([tr.name for tr in translations]) + titles = ' '.join([tr.main_title for tr in translations]) + themes = ' '.join([' '.join(theme.get_all_names()) for theme in self.theme.all()]) + tags = ' '.join([' '.join(tag.get_all_names()) for tag in self.tag.all()]) + return names + ' ' + titles + ' ' + themes + ' ' + tags + def get_gallery(self): if self.photogallery: return self.photogallery diff --git a/core/models.py b/core/models.py index 71a83623..dad86ae2 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,88 @@ -from django.db import models +# -*- coding: utf-8 -*- +from django.contrib.syndication.views import Feed +from django.shortcuts import get_object_or_404 -# Create your models here. +from exposition.models import Exposition +from theme.models import Theme +from country.models import Country +from city.models import City + +EXPO_ON_PAGE = 10 + +# nearest expositions at all + +class LatestExpositions(Feed): + title = u"Ближайшие выставки на expomap.ru" + link = '/rss/latest/' + description = u'Подписывайтесь на наш RSS-канал' + + def items(self): + return Exposition.enable.upcoming()[:EXPO_ON_PAGE] + + def item_title(self, item): + return item.name + + def item_description(self, item): + return item.main_title + + def item_link(self, item): + return '/expo/%s/'%item.url + +NUM_ITEMS_ON_PAGE = 20 + + +class CountryFeeds(Feed): + description_template = '/rss/country_feeds/' + + def get_object(self, request, slug): + return get_object_or_404(Country, url=slug) + + def title(self, obj): + return u"Ближайшие выставки %s:" % obj.inflect + + def link(self,obj): + return obj.get_permanent_url() + + def item_description(self, obj): + return obj.main_title + + def items(self, obj): + return Exposition.enable.upcoming().filter(country=obj)[:NUM_ITEMS_ON_PAGE] + + +class CityFeeds(Feed): + description_template = '/rss/city_feeds/' + + def get_object(self, request, slug): + return get_object_or_404(City, url=slug) + + def title(self, obj): + return u"Ближайшие выставки в %s: " % obj.inflect + + def link(self,obj): + return obj.get_permanent_url() + + def item_description(self, obj): + return obj.main_title + + def items(self, obj): + return Exposition.enable.upcoming().filter(city = obj)[:NUM_ITEMS_ON_PAGE] + + +class ThemeFeeds(Feed): + description_template = '/rss/theme_feeds/' + + def get_object(self, request, slug): + return get_object_or_404(Theme, url=slug) + + def title(self, obj): + return u"Ближайшие выставки %s: " % obj.inflect + + def link(self,obj): + return obj.url + + def item_description(self, obj): + return obj.main_title + + def items(self, obj): + return Exposition.enable.upcoming().filter(theme = obj)[:NUM_ITEMS_ON_PAGE] \ No newline at end of file diff --git a/core/simple_views.py b/core/simple_views.py index d6fe480c..5f556f4a 100644 --- a/core/simple_views.py +++ b/core/simple_views.py @@ -13,26 +13,32 @@ class SeminarLendingView(TemplateView): def send_to_organiser(request): - mail_send = 'kotzilla@ukr.net' + mail_send = 'expomap@mail.ru' fname = request.POST.get('name') lname = request.POST.get('surname') email = request.POST.get('email', '') company = request.POST.get('company', '') office = request.POST.get('office', '') + phone = request.POST.get('phone', '') title = request.POST.get('type', '') text = u"""Имя: %s; Фамилия:%s; Email: %s; + Телефон: %s; компния:%s; - должность: %s"""%(fname, lname, email, company, office) + должность: %s"""%(fname, lname, email, phone, company, office) msg = EmailMessage(title, text, settings.DEFAULT_FROM_EMAIL, [mail_send]) msg.content_subtype = "html" msg.send() redirect_to = '/service/thanks/' - message = u"""Мы получили Ваш запрос и очень рады, что Вам интересно участие в семинаре Expomap. Если места еще есть, мы пришлем Вам приглашение на указанную Вами электронную почту. -Увидимся на welcome-coffee ☺""" + if title.endswith(u'семинар'): + message = u"""Мы получили Ваш запрос и очень рады, что Вам интересно участие в семинаре Expomap. Если места еще есть, мы пришлем Вам приглашение на указанную Вами электронную почту. + Увидимся на welcome-coffee ☺""" + else: + message = u"""Благодарим за интерес к нашему семинару! За несколько дней до мероприятия мы пришлем Вам ссылку для подключения к онлайн-трансляции!""" + return HttpResponse(json.dumps({'success':True, 'redirect_to': redirect_to, 'message': message}), content_type='application/json') diff --git a/core/urls.py b/core/urls.py new file mode 100644 index 00000000..88f2e7c0 --- /dev/null +++ b/core/urls.py @@ -0,0 +1,11 @@ +from django.conf.urls import url, patterns +from models import LatestExpositions, CountryFeeds, CityFeeds, ThemeFeeds + + +urlpatterns = patterns('', + url(r'^latest/$', LatestExpositions()), + url(r'^country/(?P.*)/$', CountryFeeds()), + url(r'^city/(?P.*)/$', CityFeeds()), + url(r'^theme/(?P.*)/$', ThemeFeeds()), + +) diff --git a/country/admin.py b/country/admin.py index ede3a8cf..1ad06c86 100644 --- a/country/admin.py +++ b/country/admin.py @@ -63,7 +63,7 @@ def country_change(request, url): if request.POST: #country_id sending for saving capital field in __init__ - form = CountryForm(request.POST, country_id=country_id) + form = CountryForm(request.POST, request.FILES, country_id=country_id) if form.is_valid(): form.save(country_id) @@ -71,8 +71,9 @@ def country_change(request, url): else: #fill form with data from database data = {'population' : c.population, 'teritory' : c.teritory, #data from NOT translated fields - 'timezone' : c.timezone, 'country_id' : country_id, - 'phone_code' : c.phone_code, 'time_delivery' : c.time_delivery} + 'timezone' : c.timezone, 'country_id' : country_id, + 'phone_code' : c.phone_code, 'time_delivery' : c.time_delivery, + 'logo': c.logo} if c.capital: data['capital'] = c.capital.id diff --git a/country/forms.py b/country/forms.py index cdc0be8d..67193e43 100644 --- a/country/forms.py +++ b/country/forms.py @@ -55,6 +55,8 @@ class CountryForm(forms.Form): time_delivery = forms.CharField(label='Срок выдачи', required=False, widget=forms.TextInput(attrs={'placeholder':'Срок выдачи'})) + logo = forms.ImageField(label='Logo', required=False) + #services = forms.MultipleChoiceField(label='Сервисы', required=False, choices=); #field for comparing tmp files key = forms.CharField(required=False, widget=forms.HiddenInput()) @@ -136,6 +138,12 @@ class CountryForm(forms.Form): country.phone_code = data['phone_code'] country.time_delivery = data['time_delivery'] + if data.get('logo'): + country.logo = data['logo'] + else: + country.logo = '' + + if data.get('capital'): country.capital = City.objects.get(id=data['capital']) diff --git a/country/models.py b/country/models.py index 548d54c7..738db7e7 100644 --- a/country/models.py +++ b/country/models.py @@ -102,6 +102,7 @@ class Country(TranslatableModel): descriptions = models.CharField(max_length=255), keywords = models.CharField(max_length=255), ) + logo = models.ImageField(verbose_name='Logo', upload_to='country/logo/', blank=True, max_length=255) class Meta: ordering = ['translations__name'] @@ -145,8 +146,9 @@ class Country(TranslatableModel): return Webinar.objects.filter(country=self.id).count() def active_cities(self): - - return City.used.active_qs().filter(country=self) + result = list(set(City.used.active_qs().filter(country=self))) + result.sort(key=lambda x:x.name) + return result lang = translation.get_language() #return City.objects.select_related('exposition_city')\ # .filter(exposition_city__city__isnull=False, translations__language_code=lang, country=self).distinct().order_by('translations__name') diff --git a/exposition/management/commands/test.py b/exposition/management/commands/test.py index 271b6d8d..022c3e6d 100644 --- a/exposition/management/commands/test.py +++ b/exposition/management/commands/test.py @@ -1,20 +1,141 @@ # -*- coding: utf-8 -*- +import MySQLdb +import os.path +from MySQLdb.cursors import DictCursor +from django.utils.translation import activate from django.core.management.base import BaseCommand -from meta.models import MetaSetting +from django.conf import settings +from exposition.models import Exposition +from theme.models import Theme +from theme.models import Theme, Tag class Command(BaseCommand): def handle(self, *args, **options): - a = MetaSetting.objects.filter(translations__h1__contains='«').count() - qs = MetaSetting.objects.language('ru').all() - for item in qs: - item.title = item.title.replace(u'«', u'').replace(u'»', u'') - item.description = item.title.replace(u'«', u'').replace(u'»', u'') - item.h1 = item.h1.replace(u'«', u'').replace(u'»', u'') - #item.save() + #expos = Exposition.objects.filter(theme__isnull=True, old_url__isnull=False) + db = MySQLdb.connect(host="localhost", + user="expomap", + passwd="7FbLtAGjse", + db="old_db", + charset='utf8', + cursorclass=DictCursor) + cursor = db.cursor() + activate('ru') + #expos = Exposition.enable.upcoming().filter(logo='') + expos = Exposition.objects.filter(tag__isnull=True).order_by('-data_end') + #expo = Exposition.objects.get(old_url='salon-du-livre-2015') + #handle_expo_tag(expo, cursor) + for expo in expos: + handle_expo_tag(expo, cursor) + + ''' + find_old_id = """ + SELECT products.products_id + from products + LEFT JOIN `products_description` ON products.products_id=products_description.products_id + WHERE url='%s' + """ + + find_themes = "SELECT categories_id FROM `products_to_categories` WHERE `products_id` =%d" + ''' + """ + for expo in expos: + cursor.execute(find_old_id%expo.old_url) + old_ids = [item['products_id'] for item in cursor.fetchall()] + print expo.old_url + for id in old_ids: + cursor.execute(find_themes%id) + themes_ids = [item['categories_id'] for item in cursor.fetchall()] + print themes_ids + #if not themes_ids: + # continue + + + theme_qs = Theme.objects.filter(id__in=themes_ids) + #expo.theme.add(*theme_qs) + break + + print('----------------------') + """ + + +def handle_expo_tag(expo, cursor): + old_url = expo.old_url + if not old_url: + return None + print(old_url) + find_old = """ + SELECT products.products_id, url + from products + LEFT JOIN `products_description` ON products.products_id=products_description.products_id + WHERE url='%s' + """ + cursor.execute(find_old%old_url) + result = cursor.fetchone() + expo_id = result.get('products_id') + if not expo_id: + return + + find_tag_id = """ + SELECT tag_id + FROM `products_tags` + WHERE `product_id` =%d + """ + cursor.execute(find_tag_id%expo_id) + tags_ids = [str(item['tag_id']) for item in cursor.fetchall()] + if not tags_ids: + return None + find_tag = """ + SELECT title + FROM `tags` + WHERE id in(%s) + """ + cursor.execute(find_tag%', '.join(tags_ids)) + tag_names = [item['title'] for item in cursor.fetchall()] + if not tag_names: + return None + + themes = [item['id'] for item in expo.theme.all().values('id')] + qs = Tag.objects.filter(translations__name__in=tag_names, theme__in=themes) + expo.tag.add(*qs) + + + +def handle_expo(expo, cursor): + """ + fixing logos + + """ + if expo.logo: + return + + find_old = """ + SELECT products.products_id, url, products_img1 as logo + from products + LEFT JOIN `products_description` ON products.products_id=products_description.products_id + WHERE url='%s' + """ + cursor.execute(find_old%expo.old_url) + result = cursor.fetchall() + if not result: + return + logo = result[0]['logo'] + + + if logo: + logo = logo.replace('..', '') + + print(logo) + print(os.path.isfile(settings.MEDIA_ROOT[:-1]+logo)) + if (os.path.isfile(settings.MEDIA_ROOT[:-1]+logo)): + + expo.logo = logo + expo.save() + + diff --git a/exposition/models.py b/exposition/models.py index 77fb9c4d..286c4481 100644 --- a/exposition/models.py +++ b/exposition/models.py @@ -299,6 +299,9 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin): return code return cur + def theme_ids(self): + return [item['id'] for item in self.theme.all().values('id')] + class Statistic(TranslatableModel): exposition = models.ForeignKey(Exposition, related_name='statistic') diff --git a/functions/form_check.py b/functions/form_check.py index e8c0954e..cfbe998f 100644 --- a/functions/form_check.py +++ b/functions/form_check.py @@ -31,10 +31,15 @@ def translit_with_separator(string, separator='-'): #make string unicode string = string.strip() string = u'%s'%string - string = string.replace(u'\u200e', '') #make string translit - st = pytils.translit.translify(string) + try: + st = pytils.translit.translify(string) + except ValueError: + # remove exception symbs(hack) + string = string.replace(u'\u200e', '') + string = string.replace(u'\u200b', '') + st = pytils.translit.translify(string) #replace "bad" symbols for '-'symbol st = st.replace('.', '') diff --git a/import_xls/excel_settings.py b/import_xls/excel_settings.py index 4a905ada..182c7482 100644 --- a/import_xls/excel_settings.py +++ b/import_xls/excel_settings.py @@ -45,11 +45,6 @@ def get_periodic(value): return periodic.get(value, '') return '' -def get_date(value): - if value: - return str(value) - return '' - def get_quality(value, field): flags = {u'UFI': 'ufi', u'РСВЯ': 'rsva', u'EXPORATING': 'exporating'} v = flags.get(field) @@ -326,19 +321,27 @@ article_sett = { u'Создана':{u'field': u'created', u'func': to_datetime} } +def get_date(value): + try: + return value.strftime('%d.%m.%Y') + except AttributeError: + return '' + + event_export_sett = [ {'name': 'id', 'verbose_name': u'ID', 'type': get_int, 'width':1500}, {'name': 'url', 'verbose_name': u'Url', 'type': unicode}, {'name': 'name', 'verbose_name': u'Название', 'type': unicode}, {'name': 'main_title', 'verbose_name': u'Краткое описание', 'type': unicode}, - {'name': 'data_begin', 'verbose_name': u'Дата начала:(YYYY-MM-DD)', 'type': unicode}, - {'name': 'data_end', 'verbose_name': u'Дата окончания:(YYYY-MM-DD)', 'type': unicode}, + {'name': 'data_begin', 'verbose_name': u'Дата начала:(YYYY-MM-DD)', 'type': get_date}, + {'name': 'data_end', 'verbose_name': u'Дата окончания:(YYYY-MM-DD)', 'type': get_date}, {'name': 'country', 'verbose_name': u'Страна', 'type': unicode}, {'name': 'city', 'verbose_name': u'Город', 'type': unicode}, {'name': 'place', 'verbose_name': u'Место проведения', 'type': get_place}, {'name': 'theme', 'verbose_name': u'ID Тематики', 'type': get_theme, 'width':8000}, {'name': 'tag', 'verbose_name': u'Теги', 'type': get_tag, 'width':8000}, {'name': 'description', 'verbose_name': u'Описание события', 'type': unicode}, + {'name': 'org', 'verbose_name': u'Организатор №1', 'type': get_int}, {'name': 'periodic', 'verbose_name': 'Периодичность', 'type': get_periodic}, {'name': 'audience', 'verbose_name': u'Аудитория', 'type': get_audience}, {'name': 'web_page', 'verbose_name': u'Официальный веб-сайт', 'type': unicode}, @@ -500,6 +503,8 @@ event_sett = { u'Участники':{u'field': u'members', u'func': to_int}, u'Страны':{u'field': u'stat_countries', u'func': unicode}, u'Площадь':{u'field': u'area', u'func': to_int}, + u'Мин стоимость':{u'field': u'min_price', u'func': to_int}, + u'Макс стоимость':{u'field': u'max_price', u'func': to_int}, u'Min_Raw кв.м.':{u'field': u'min_closed_area', u'func': to_int}, u'Max_Raw кв.м.':{u'field': u'max_closed_area', u'func': to_int}, u'Min_Pack кв.м.':{u'field': u'min_closed_equipped_area', u'func': to_int}, diff --git a/import_xls/import_forms.py b/import_xls/import_forms.py index 674c30fa..9ed993a7 100644 --- a/import_xls/import_forms.py +++ b/import_xls/import_forms.py @@ -330,13 +330,25 @@ class ImportEventForm(ImportForm): value = func(obj, cell, setting['label']) else: + value = func(cell) - try: - setattr(obj, field_name, value) - except ValueError: - continue + if field_name != 'place': + + try: + setattr(obj, field_name, value) + except ValueError: + continue + else: + if value is None: + setattr(obj, 'place_alt', cell) + else: + try: + setattr(obj, field_name, value) + except Exception: + setattr(obj, 'place_alt', cell) if not obj.url: obj.url = translit_with_separator(obj.name) + obj.is_published = True try: obj.save() diff --git a/import_xls/utils.py b/import_xls/utils.py index b664fc16..1951086d 100644 --- a/import_xls/utils.py +++ b/import_xls/utils.py @@ -30,6 +30,7 @@ def to_date(value): return None if isinstance(value, unicode) or isinstance(value, str): + try: t = time.strptime(value, "%d.%m.%Y") except ValueError: diff --git a/proj/urls.py b/proj/urls.py index 60b5784c..c73029c6 100644 --- a/proj/urls.py +++ b/proj/urls.py @@ -11,6 +11,9 @@ class Robot(TemplateView): template_name = 'robots.txt' content_type = 'text/plain' +class YandexCheck(TemplateView): + template_name = 'client/simple_pages/yandex_check.html' + from sitemaps import ExpoCard, ExpoCity, ExpoCountry, ExpoTheme, ExpoTag, ConfCard, ConfCity, ConfCountry, ConfTheme,\ ConfTag, NewsSiteMap, BlogsSiteMap, Additional, Important @@ -26,6 +29,7 @@ sitemaps = { handler404 = 'proj.views.error404' urlpatterns = patterns('', + 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')), @@ -33,6 +37,7 @@ urlpatterns = patterns('', url(r'^sitemap\.xml$', views.index, {'sitemaps': sitemaps}), url(r'^sitemap-(?P
.+)\.xml$', views.sitemap, {'sitemaps': sitemaps}), url(r'^robots.txt$', Robot.as_view()), + url(r'^yandex_4c326c16c916403e.html$', YandexCheck.as_view()), url(r'^$', MainPageView.as_view()), url(r'^page/', include('core.simple_urls')), url(r'^theme/', include('theme.urls')), @@ -74,6 +79,7 @@ urlpatterns = patterns('', # ajax urls urlpatterns += patterns('', + url(r'^ajax/get_popover/$', 'settings.views.get_popover_info'), url(r'^registration/reply/$', 'registration.backends.default.views.RegisterReply'), url(r'^register/', 'registration.backends.default.views.RegisterAjaxView'), url(r'^register-complete/', 'registration.backends.default.views.complete_registration'), diff --git a/proj/views.py b/proj/views.py index b307f98e..c5cb918d 100644 --- a/proj/views.py +++ b/proj/views.py @@ -37,7 +37,9 @@ def error404(request): expo_themes = Theme.active.expo_themes_with_count() conf_themes = Theme.active.conference_themes_with_count() context.update({'expo_themes': expo_themes, 'conf_themes': conf_themes}) - return render_to_response('client/404.html', context, context_instance=RequestContext(request)) + response = render_to_response('client/404.html', context, context_instance=RequestContext(request)) + response.status_code = 404 + return response class MainPageView(JitterCacheMixin,TemplateView): cache_range = settings.CACHE_RANGE @@ -46,7 +48,7 @@ class MainPageView(JitterCacheMixin,TemplateView): def get_context_data(self, **kwargs): context = super(MainPageView, self).get_context_data(**kwargs) - events = Exposition.objects.language().select_related('country', 'city', 'place').filter(main_page=1) + events = Exposition.objects.language().select_related('country', 'city', 'place').filter(main_page__gte=1).order_by('-main_page') exposition_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.exposition)[:6] conference_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.conference)[:6] diff --git a/service/admin.py b/service/admin.py index 584ec09e..91ae029d 100644 --- a/service/admin.py +++ b/service/admin.py @@ -4,6 +4,7 @@ from django.http import HttpResponseRedirect, HttpResponse from django.core.context_processors import csrf from django.conf import settings from django.contrib.auth.decorators import login_required +from django.views.generic import ListView, FormView #models and forms from models import Service from forms import ServiceForm, ServiceDeleteForm @@ -114,3 +115,30 @@ def get_city(request): return render_to_response('checkbox_option.html', {'options': cities}) else: return HttpResponse('error') + + +class ServiceControlList(ListView): + model = Service + template_name = 'admin/service/control_list.html' + paginate_by = 20 + +from django.views.generic.detail import SingleObjectMixin +from django.views.generic.edit import FormMixin +from django.views.generic import DetailView +from service.forms import ServiceControlForm +class ServiceControl(FormMixin, DetailView): + form_class = ServiceControlForm + template_name = 'admin/service/control.html' + model = Service + + + def get_form(self, form_class): + obj = self.object + data = obj.get_current_state() + + return form_class(data) + + def get_context_data(self, **kwargs): + context = super(ServiceControl, self).get_context_data(**kwargs) + context['form'] = self.get_form(self.form_class) + return context \ No newline at end of file diff --git a/service/admin_urls.py b/service/admin_urls.py index 682785fc..4dda045f 100644 --- a/service/admin_urls.py +++ b/service/admin_urls.py @@ -2,8 +2,11 @@ from django.conf.urls import patterns, include, url from views import CallBackListView, VisitListView, TranslationListView, AdvertisingListView, \ ParticipationListView, RemoteListView,TicketsListView +from service.admin import ServiceControlList, ServiceControl urlpatterns = patterns('service.admin', + url(r'^control/list/$', ServiceControlList.as_view()), + url(r'^control/(?P.*)/$', ServiceControl.as_view()), url(r'^add.*/$', 'service_add'), url(r'^delete/(?P.*)/$', 'service_delete'), url(r'^change/(?P.*)/$', 'service_change'), @@ -17,6 +20,6 @@ urlpatterns = patterns('service.admin', url(r'order/tickets/$', TicketsListView.as_view()), #ajax url(r'^get_city/$', 'get_city'), - #url(r'^get_country/$', 'get_country'), +#url(r'^get_country/$', 'get_country'), ) diff --git a/service/forms.py b/service/forms.py index 1431a76e..16664611 100644 --- a/service/forms.py +++ b/service/forms.py @@ -121,4 +121,29 @@ class ServiceDeleteForm(forms.ModelForm): class Meta: model = Service - fields = ('url',) \ No newline at end of file + fields = ('url',) + + +from country.models import Area, Country +from exposition.models import Exposition +from conference.models import Conference + +class ServiceControlForm(forms.Form): + event = [{'verbose': 'Выставки', 'model': Exposition, 'id': 1}, + {'verbose': 'Конференции', 'model': Conference, 'id': 2}] + region = forms.ChoiceField(required=False, label='Регион', + choices=[('', '')]+[(item.id, item.name) + for item in list(Area.objects.all())]) + country = forms.MultipleChoiceField(required=False, label='Страны', + choices=[('', '')]+[(item.id, item.name) + for item in list(Country.objects.all())]) + country_all = forms.BooleanField() + expositions = forms.CharField(label=u'Выставки', widget=forms.HiddenInput(), required=False) + conferences = forms.CharField(label=u'Конференции', widget=forms.HiddenInput(), required=False) + + def __init__(self, *args, **kwargs): + super(ServiceControlForm, self).__init__(*args, **kwargs) + self.fields['event_type'] = forms.MultipleChoiceField(required=False, label = 'Тип события', + widget=forms.CheckboxSelectMultiple(), + choices=[(item['id'], item['verbose']) + for item in self.event]) \ No newline at end of file diff --git a/service/models.py b/service/models.py index e490e574..ae9d8196 100644 --- a/service/models.py +++ b/service/models.py @@ -47,6 +47,19 @@ class Service(TranslatableModel): def get_price(self): pr = self.price + def get_current_state(self): + """ + uses for control form + :return: + """ + state = {'event_type':[1, 2], + 'region': [], + 'country':[], + 'country_all': True, + 'expositions': [], + 'conferences': []} + return state + diff --git a/settings/templatetags/template_filters.py b/settings/templatetags/template_filters.py index 10c11444..b013912e 100644 --- a/settings/templatetags/template_filters.py +++ b/settings/templatetags/template_filters.py @@ -156,6 +156,14 @@ def timetable_by_day(qs, day): def random_social(value): return bool(random.getrandbits(1)) +@register.filter +def random3(value): + return random.randrange(0,3) + +@register.filter +def random5(value): + return random.randrange(0,5) + @register.filter def fourth(value): # return almost in 75% cases True in 25% False @@ -224,7 +232,10 @@ def without_page(value): @register.filter def note_by_user(obj, user): - return obj.get_note_by_user(user.id) + if obj: + + return obj.get_note_by_user(user.id) + return '' @register.filter def isdigit(value): @@ -282,4 +293,13 @@ def generate_countries_list(value): - return ul1+ul2+ul3 \ No newline at end of file + return ul1+ul2+ul3 + +@register.filter +def how_many_years(value): + if not isinstance(value, datetime.date): + return '' + now = datetime.date.today() + delta = now - value + + return delta.days/365 diff --git a/settings/views.py b/settings/views.py index 8c2e72cc..a2d22475 100644 --- a/settings/views.py +++ b/settings/views.py @@ -124,4 +124,52 @@ def company_autosearch(request): result = sorted(result, key=lambda x:x['cat']) return HttpResponse(json.dumps(result), content_type='application/json') else: - raise Http404 \ No newline at end of file + raise Http404 + +#------------------------------------------------------ +# POPOVERS +#------------------------------------------------------ +import random +from django.shortcuts import render +from django.template.loader import render_to_string +def get_popover(request): + response = {'success': True} + theme_id = request.GET.get('theme_id') + themes = {'2': ['client/popups/auto_modal.html', 'client/popups/auto_banner.html'], + '32': ['client/popups/auto_modal.html', 'client/popups/auto_banner.html', 'client/popups/cemat_modal.html', 'client/popups/cemat_banner1.html', 'client/popups/cemat_banner2.html'], + '54': ['client/popups/cemat_modal.html', 'client/popups/cemat_banner1.html', 'client/popups/cemat_banner2.html'], + '26': ['client/popups/cemat_modal.html', 'client/popups/cemat_banner1.html', 'client/popups/cemat_banner2.html'], + '22': ['client/popups/cemat_modal.html', 'client/popups/cemat_banner1.html', 'client/popups/cemat_banner2.html'], + '15': ['client/popups/cemat_modal.html', 'client/popups/cemat_banner1.html', 'client/popups/cemat_banner2.html'], + '44': ['client/popups/cemat_modal.html', 'client/popups/cemat_banner1.html', 'client/popups/cemat_banner2.html'], + '30': ['client/popups/cemat_modal.html', 'client/popups/cemat_banner1.html', 'client/popups/cemat_banner2.html']} + popovers = themes.get(theme_id) + if not popovers: + popovers = ['fail'] + response['success'] = False + + popover = random.choice(popovers) + html = render_to_string(popover) + + response['html'] = html + return HttpResponse(json.dumps(response), content_type='application/json') + +from banners.models import Redirect +from django.db.models import F +import datetime + +def set_cookie(response, key, value, days_expire = 7): + if days_expire is None: + max_age = 365 * 24 * 60 * 60 #one year + else: + max_age = days_expire * 24 * 60 * 60 + expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT") + response.set_cookie(key, value, max_age=max_age, expires=expires) + +def get_popover_info(request): + id = request.GET.get('rdr') + if id: + Redirect.objects.filter(id=id).update(views = F('views') + 1) + response = HttpResponse('success') + set_cookie(response, 'popover_test1', '1') + return response \ No newline at end of file diff --git a/static/custom_js/find_events.js b/static/custom_js/find_events.js new file mode 100644 index 00000000..a92cb126 --- /dev/null +++ b/static/custom_js/find_events.js @@ -0,0 +1,47 @@ +function make_event_select(id, url, placeholder){ + $(id).select2({ + placeholder: placeholder, + multiple: true, + ajax: { + + url: url, + width: '550px', + dataType: "json", + quietMillis: 200, + multiple: true, + + data: function(term, page, theme){ + return {term: term, + page: page}; + }, + + results: function (data) { + var results = []; + $.each(data, function(index, item){ + results.push({ + id: item.id, + text: item.label + }); + }); + return {results: results}; + } + }, + initSelection : function(element, callback) { + var data = []; + $(element.val().split(",")).each(function(i) { + var item = this.split(':'); + data.push({ + id: item[0], + text: item[1] + }); + }); + callback(data); + } + }); +} + + +$(document).ready(function(){ + make_event_select('#id_expositions', '/admin/exposition/search/', 'Выставки'); + make_event_select('#id_conferences', '/admin/conference/search/', 'Конференции'); +}); diff --git a/static/custom_js/main.js b/static/custom_js/main.js index 3c301189..a4ae5a0a 100644 --- a/static/custom_js/main.js +++ b/static/custom_js/main.js @@ -113,6 +113,12 @@ function postStat(data, textStatus){ $(document).ready(function(){ + $('#id_created').datetimepicker({ + todayHighlight: true, + format : 'yyyy-mm-dd', + minView:2 + }); + $('#photo_form').on('submit', function(e){ e.preventDefault(); var url = $(this).attr('action'); @@ -230,11 +236,7 @@ $(document).ready(function(){ }); // end on-of events - $('select').select2({ - width: 'element', - allowClear: true - });//end select @@ -485,5 +487,11 @@ $(document).ready(function(){ }); }); + $('select').select2({ + width: 'element', + allowClear: true + + });//end select + }); diff --git a/static/img/expob/cemat15.gif b/static/img/expob/cemat15.gif new file mode 100644 index 00000000..9493a63b Binary files /dev/null and b/static/img/expob/cemat15.gif differ diff --git a/static/img/expob/cemat15_v2.gif b/static/img/expob/cemat15_v2.gif new file mode 100644 index 00000000..6434be8f Binary files /dev/null and b/static/img/expob/cemat15_v2.gif differ diff --git a/static/img/expob/mims15.gif b/static/img/expob/mims15.gif new file mode 100644 index 00000000..7557051e Binary files /dev/null and b/static/img/expob/mims15.gif differ diff --git a/templates/admin/base.html b/templates/admin/base.html index 9861275b..f2e998d3 100644 --- a/templates/admin/base.html +++ b/templates/admin/base.html @@ -72,6 +72,9 @@ +{# datetimepicker #} + + {% block bot_scripts %} {% endblock %} diff --git a/templates/admin/city/city_add.html b/templates/admin/city/city_add.html index ff7aaec1..da12c2cc 100644 --- a/templates/admin/city/city_add.html +++ b/templates/admin/city/city_add.html @@ -17,7 +17,7 @@ {% block body %} {# Uses multilang.html template for translated fields #} -
{% csrf_token %} + {% csrf_token %}
{% if obj_id %} Изменить {% else %} Добавить {% endif %}город @@ -47,6 +47,13 @@
{{ form.country}}
+ +
+ +
{{ form.logo }} + {{ form.logo.errors }} +
+
{# region #} {% with field='region' form=form languages=languages %} {% include 'admin/forms/multilang.html' %} diff --git a/templates/admin/country/country_add.html b/templates/admin/country/country_add.html index 0e48444a..6b06e613 100644 --- a/templates/admin/country/country_add.html +++ b/templates/admin/country/country_add.html @@ -41,6 +41,13 @@ {% with field='description' form=form languages=languages %} {% include 'admin/forms/multilang.html' %} {% endwith %} + +
+ +
{{ form.logo }} + {{ form.logo.errors }} +
+
{# capital #}
diff --git a/templates/admin/exposition/exposition.html b/templates/admin/exposition/exposition.html index 4ef1496b..573c4950 100644 --- a/templates/admin/exposition/exposition.html +++ b/templates/admin/exposition/exposition.html @@ -39,9 +39,6 @@ --> - {# datetimepicker #} - - + +{% endblock %} + +{% block body %} + + {% csrf_token %} +
+ Управление услугой {{ object.name }} + +
+
+

+
+
+ {# event_type #} +
+ +
+ {{ form.event_type }} +
+
+ + {# region #} +
+ +
{{ form.region }} + {{ form.region.errors }} +
+
+ + {# country #} +
+ +
{{ form.country }} + {{ form.country.errors }} +
+
+ {# expositions #} +
+ +
{{ form.expositions }} + {{ form.expositions.errors }} +
+
+ {# conferences #} +
+ +
{{ form.conferences }} + {{ form.conferences.errors }} +
+
+ +
+
+
+ +{% endblock %} + +{% block bot_scripts %} + +{% endblock %} \ No newline at end of file diff --git a/templates/admin/service/control_list.html b/templates/admin/service/control_list.html new file mode 100644 index 00000000..38bf41b8 --- /dev/null +++ b/templates/admin/service/control_list.html @@ -0,0 +1,39 @@ +{% extends 'admin_list.html' %} + +{% block body %} +
+
+

Список услуг

+
+
+ + + + + + + + + + + {% for item in object_list %} + + + + + + + + + {% endfor %} + +
idНазвание 
{{ item.id }}{{ item.name }} + + Управлять + +
+
+ {# pagination #} + {% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} +
+{% endblock %} \ No newline at end of file diff --git a/templates/admin/settings/main_page.html b/templates/admin/settings/main_page.html index 5018c3f7..cd51e77f 100644 --- a/templates/admin/settings/main_page.html +++ b/templates/admin/settings/main_page.html @@ -89,48 +89,5 @@ {% endblock %} {% block bot_scripts %} - + {% endblock %} \ No newline at end of file diff --git a/templates/admin/translator/translator.html b/templates/admin/translator/translator.html new file mode 100644 index 00000000..261f67ad --- /dev/null +++ b/templates/admin/translator/translator.html @@ -0,0 +1,133 @@ +{% extends 'base.html' %} +{% load static %} +{# Displays translator form and file form in modal window #} + + +{% block scripts %} + + + {# selects #} + + + + {# ajax #} + + {# datetimepicker #} + + + + + +{% endblock %} + +{% block body %} +
{% csrf_token %} +
+ Изменить переводчика(на сайте) + +
+
+

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

+
+
+ {# name #} +
+ +
{{ form_user.first_name }} + {{ form_user.first_name.errors }} +
+
+ + {# surname #} +
+ +
{{ form_user.last_name }} + {{ form_user.last_name.errors }} +
+
+ + {# country #} +
+ +
{{ form_profile.country }} + {{ form_profile.country.errors }} +
+
+ + {# city #} +
+ +
{{ form_profile.city }} + {{ form_profile.city.errors }} +
+
+ + {# logo #} +
+ +
{{ form_profile.avatar }} + {{ form_profile.avatar.errors }} +
+
+ + +
+ +
+ +
+
+

Информация по переводчику

+
+
+ + {# car #} +
+ +
{{ form.car }} + {{ form.car.errors }} +
+
+ + {# birth #} +
+ +
{{ form.birth }} + {{ form.birth.errors }} +
+
+ + {# gender #} +
+ +
{{ form.gender }} + {{ form.gender.errors }} +
+
+ {# time #} + + {% include 'admin/forms/multilang.html' with field='education' form=form languages=languages%} + {% include 'admin/forms/multilang.html' with field='specialization' form=form languages=languages%} + {% include 'admin/forms/multilang.html' with field='languages' form=form languages=languages%} + {% include 'admin/forms/multilang.html' with field='native_language' form=form languages=languages%} + {% include 'admin/forms/multilang.html' with field='prices' form=form languages=languages%} + {% include 'admin/forms/multilang.html' with field='discounts' form=form languages=languages%} + + +
+
+
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/templates/admin/translator/translator_all.html b/templates/admin/translator/translator_all.html index 180e0289..7b6abfb5 100644 --- a/templates/admin/translator/translator_all.html +++ b/templates/admin/translator/translator_all.html @@ -21,10 +21,9 @@ {{ item.id }} - {% for u in item.user.all %} - {{ u }} - {{ u.country }} - {% endfor %} + {{ item.get_full_name }} + {{ item.profile.country.name }} + diff --git a/templates/admin/translator/translator_list.html b/templates/admin/translator/translator_list.html index d64ec743..54e2a8e5 100644 --- a/templates/admin/translator/translator_list.html +++ b/templates/admin/translator/translator_list.html @@ -36,19 +36,14 @@ {{ item.id }} - {% for u in item.user.all %} - {{ u }} - {{ u.country }} - {% endfor %} + {{ item.get_full_name }} + {{ item.profile.country.name }} - + Изменить - - Удалить - diff --git a/templates/client/accounts/translators/translator_city.html b/templates/client/accounts/translators/translator_city.html new file mode 100644 index 00000000..7084eacd --- /dev/null +++ b/templates/client/accounts/translators/translator_city.html @@ -0,0 +1,108 @@ +{% extends 'base_catalog.html' %} +{% load i18n %} + + +{% block bread_scrumbs %} + +{% endblock %} + +{% block page_title %} + +{% endblock %} + +{% block content_list %} +
+
+ + +
+
+
{{ object.name }}
+
+ +
+

Компания Serve Businesses Worldwide предлагает Вам возможность заказать услуги русскоговорящих переводчиков со знанием английского языка практически непосредственно в Великобритании.

+
+ +
+
+ +
+ +
+
+

Коротко о наших преимуществах:

+
    +
  • Эффективная цена
  • +
  • Опыт и профессионализм специалистов
  • +
  • Знание разных менталитетов и психологических аспектов проведения переговоров с зарубежными бизнесменами
  • +
  • Ориентированность в мировых выставочных комплексах
  • +
  • Гарантии, отчетность по договору, прозрачные безналичные расчеты в России
  • +
+ +
+
+ +
+ +
+
+
+
+
от 80 € / день
+ +
+
+
+
+
+ +
+ + + + +
+{% endblock %} + diff --git a/templates/client/accounts/translators/translator_country.html b/templates/client/accounts/translators/translator_country.html new file mode 100644 index 00000000..121e297b --- /dev/null +++ b/templates/client/accounts/translators/translator_country.html @@ -0,0 +1,137 @@ +{% extends 'base_catalog.html' %} +{% load i18n %} + + +{% block bread_scrumbs %} + +{% endblock %} + +{% block page_title %} + +{% endblock %} + +{% block content_list %} +
+
+ + +
+
+
Переводчики {{ object.inflect }}
+
+ +
+

Компания Serve Businesses Worldwide предлагает Вам возможность заказать услуги русскоговорящих переводчиков со знанием английского языка практически непосредственно в Великобритании.

+

Ниже приведен список наиболее часто востребованных территориальных направлений для оказания услуг перевода в Великобритании. Приведенный перечень не является исчерпывающим, поэтому, если Вы не нашли нужный Вам город, обратитесь к нашим консультантам.

+
+
+ {% if object.latitude and object.longitude %} + + {% endif %} + +
+
+ +
+ + {% if object.big_cities.exists %} + {% with cities=object.big_cities.all %} +
+

Крупные города:

+ + + + + + +
+ +  
+
+ +
+ {% endwith %} + {% endif %} + +
+
+

Коротко о наших преимуществах:

+
    +
  • Эффективная цена
  • +
  • Опыт и профессионализм специалистов
  • +
  • Знание разных менталитетов и психологических аспектов проведения переговоров с зарубежными бизнесменами
  • +
  • Ориентированность в мировых выставочных комплексах
  • +
  • Гарантии, отчетность по договору, прозрачные безналичные расчеты в России
  • +
+ +
+
+ +
+ +
+
+
+
+
от 80 € / день
+ +
+
+
+
+
+ + +
+ + + +
+{% endblock %} \ No newline at end of file diff --git a/templates/client/accounts/translators/translator_profile.html b/templates/client/accounts/translators/translator_profile.html new file mode 100644 index 00000000..0c714b5f --- /dev/null +++ b/templates/client/accounts/translators/translator_profile.html @@ -0,0 +1,59 @@ +{% extends 'base_catalog.html' %} +{% load static %} +{% load i18n %} +{% load thumbnail %} +{% load template_filters %} + + +{% block bread_scrumbs %} + +{% endblock %} + +{% block content_list %} +
+
+
+ {% if object.profile.avatar %} + {% thumbnail object.profile.avatar "100x100" format="PNG" as im %} + + {% endthumbnail %} + {% else %} + + {% endif %} +
+
+

{{ object.get_full_name }}

+

{{ object.translator.languages }}

+ +

{% ifequal object.translator.gender 'female' %}{% endifequal %}{{ object.translator.birth|how_many_years }} лет{% if object.translator.car %}Есть личный автомобиль

{% endif %} +
+
+ {% if object.profile.country %} +

{{ object.profile.country.name }} + {% if object.profile.city %}, {{ object.profile.city.name }}{% endif %}

+ {% endif %} + {% if object.translator.native_language %} +

{% trans 'Родной язык' %} — {{ object.translator.native_language }}

+ {% endif %} +
+
+ +
+ {% if object.translator.education %} +

{% trans 'Образование' %}:

+ {{ object.translator.education }} +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/client/accounts/translators/translators_by.html b/templates/client/accounts/translators/translators_by.html new file mode 100644 index 00000000..e3586b48 --- /dev/null +++ b/templates/client/accounts/translators/translators_by.html @@ -0,0 +1,33 @@ +{% extends 'base_catalog.html' %} +{% load i18n %} +{% load template_filters %} + +{% block bread_scrumbs %} + +{% endblock %} + +{% block page_title %} + +{% endblock %} + +{% block content_list %} + {% with objects=object_list %} + {% for obj in objects %} + {% set cur_word = obj.name %} + {% if cur_word|slice:":1"|lower != prev_word|slice:":1"|lower and forloop.counter != 1 %} + + {% endif %} + {% if cur_word|slice:":1"|lower != prev_word|slice:":1"|lower %} +
    +
    {{ cur_word|slice:":1"|upper }}
    + {% endif %} +
  • + {{ obj.name }} ({{ obj.translators_count }}) +
  • + {% set prev_word = obj.name %} + {% endfor %} + {% endwith %} +{% endblock %} \ No newline at end of file diff --git a/templates/client/blank.html b/templates/client/blank.html index 2755ecc6..8ff32e89 100644 --- a/templates/client/blank.html +++ b/templates/client/blank.html @@ -1,6 +1,8 @@ {% load static %} {% load i18n %} +{% load template_filters %} {% get_current_language as LANGUAGE_CODE %} + {% comment %} This template include basic anf main styles and js files, block with header and footer, which same in all pages, @@ -147,7 +149,7 @@ This template include basic anf main styles and js files, {% include 'client/includes/footer.html' %} {% endblock %}
-
+
{% if not user.is_authenticated %} {% include 'client/popups/login.html' %} {% include 'client/popups/register.html' %} @@ -156,7 +158,92 @@ This template include basic anf main styles and js files, {% endif %} {% include 'client/popups/callback.html' %} + {% block popup_banner %} + {% if not request.COOKIES.popover_test2 %} + {% if theme_for_filter %} + + + {% if theme_for_filter.id == 2 %} + {% if False|random_social %} + {% include 'client/popups/auto_modal.html' %} + {% else %} + {% include 'client/popups/auto_banner.html' %} + {% endif %} + {% endif %} + {% if theme_for_filter.id == 54 or theme_for_filter.id == 26 or theme_for_filter.id == 22 or theme_for_filter.id == 15 or theme_for_filter.id == 44 or theme_for_filter.id == 30 %} + {% with r=False|random3 %} + {% if r == 1 %} + {% include 'client/popups/cemat_modal.html' %} + {% else %} + {% if r == 2 %} + {% include 'client/popups/cemat_banner1.html' %} + {% else %} + {% include 'client/popups/cemat_banner2.html' %} + {% endif %} + {% endif %} + {% endwith %} + {% endif %} + + {% if theme_for_filter.id == 32 %} + {% with r=False|random5 %} + {% if r == 1 %} + {% include 'client/popups/auto_modal.html' %} + {% endif %} + + {% if r == 2 %} + {% include 'client/popups/auto_banner.html' %} + {% endif %} + {% if r == 3 %} + {% include 'client/popups/cemat_modal.html' %} + {% endif %} + {% if r == 4 %} + {% include 'client/popups/cemat_banner1.html' %} + {% endif %} + {% if r == 5 %} + {% include 'client/popups/cemat_banner2.html' %} + {% endif %} + {% endwith %} + {% endif %} + + + + {% endif %} + {% endif %} + {% endblock %} {# if user doesnt have url- show form #} {% if not request.user.is_anonymous %} diff --git a/templates/client/exposition/exposition_detail.html b/templates/client/exposition/exposition_detail.html index aa55fdaf..1bf2df02 100644 --- a/templates/client/exposition/exposition_detail.html +++ b/templates/client/exposition/exposition_detail.html @@ -1,5 +1,6 @@ {% extends 'base_catalog.html' %} {% load i18n %} +{% load template_filters %} {% block bread_scrumbs %} @@ -88,7 +94,7 @@ {% comment %}