Aside subscribtion. Start filling settings sub

remotes/origin/1203
Nazar Kotjuk 10 years ago
parent 32564d0d44
commit e0a23bdae9
  1. 16
      accounts/views.py
  2. 25
      city/views.py
  3. 20
      emencia/django/newsletter/admin_forms.py
  4. 90
      emencia/django/newsletter/forms.py
  5. 9
      emencia/django/newsletter/managers.py
  6. 6
      emencia/django/newsletter/models.py
  7. 2
      emencia/django/newsletter/urls/__init__.py
  8. 8
      emencia/django/newsletter/views/admin_views.py
  9. 49
      emencia/django/newsletter/views/expo_views.py
  10. 10
      functions/search_forms.py
  11. 8
      proj/views.py
  12. 41
      templates/admin/newsletters/contact.html
  13. 648
      templates/client/accounts/settings.html
  14. 4
      templates/client/base_catalog.html
  15. 5
      templates/client/includes/announces.html
  16. 6
      templates/client/includes/banners/expo_list_baner.html
  17. 8
      templates/client/includes/footer.html
  18. 2
      templates/client/newsletters/activation_template.html
  19. 16
      templates/client/newsletters/subcribe.html
  20. 56
      templates/client/popups/announces.html
  21. 44
      templates/client/static_client/js/_modules/block.common.js
  22. 2
      templates/client/static_client/js_min/_modules/block.common.min.js

@ -6,7 +6,6 @@ from django.shortcuts import get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _, get_language
from django.utils import timezone
from django_messages.forms import SendForm
from django.views.generic import TemplateView, FormView
from functions.custom_views import ListView
@ -16,6 +15,8 @@ from company.forms import CreateCompanyForm
from .models import User
from .edit_forms import AvatarForm, NameForm, HomeForm, WorkForm, AboutCompanyForm, PhoneForm, EmailForm,\
WebPageForm, SocialForm, AboutForm
from emencia.django.newsletter.forms import SubscribeSettingsForm
from emencia.django.newsletter.models import Contact
@ -25,11 +26,20 @@ class SettingsView(TemplateView):
password, email notifications, social settings, subscription
"""
template_name = 'accounts/settings.html'
template_name = 'client/accounts/settings.html'
def get_context_data(self, **kwargs):
context = super(SettingsView, self).get_context_data(**kwargs)
context['change_password_form'] = ChangePasswordForm()
context['email_announcement_form'] = EmailAnnouncementForm()
user = self.request.user
try:
contact = user.contact_set.get(email=user.username)
except Contact.DoesNotExist:
contact = None
if contact:
context['subscribe'] = SubscribeSettingsForm(instance=contact.contactsettings)
else:
context['subscribe'] = SubscribeSettingsForm()
return context
def dates_range(date1, date2):

@ -1,7 +1,10 @@
import json
from django.views.generic import DetailView
from django.http import HttpResponse
from django.utils import translation
from haystack.query import SearchQuerySet
from models import City
from settings.views import get_by_lang
class CityView(DetailView):
@ -12,14 +15,22 @@ class CityView(DetailView):
def get_city(request):
if request.is_ajax():
country = request.GET['country']
term = request.GET['term'].capitalize()
if not term:
qs = City.objects.language().filter(country=country).order_by('translations__name').distinct()[:100]
country = request.GET.get('country')
term = request.GET.get('term', '').capitalize()
lang = translation.get_language()
if country:
if not term:
qs = City.objects.language().filter(country=country).order_by('translations__name').distinct()[:100]
else:
qs = City.objects.language().filter(country=country, translations__name__contains=term).distinct()
result = [{'id': city.id, 'label': city.name} for city in qs]
else:
qs = City.objects.language().filter(country=country, translations__name__contains=term).distinct()
result = [{'id': city.id, 'label': city.name} for city in qs]
if not term:
qs = SearchQuerySet().models(City).all().order_by('name_%s'%lang)[:30]
else:
qs = SearchQuerySet().models(City).autocomplete(content_auto=term).order_by('name_%s'%lang)[:30]
result = [{'id': city.pk, 'label': get_by_lang(city, 'name', lang)} for city in qs]
return HttpResponse(json.dumps(result), content_type='application/json')
return HttpResponse(json.dumps(result, indent=4), content_type='application/json')
else:
return HttpResponse('not ajax')

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils import translation
from ckeditor.widgets import CKEditorWidget
from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter, Attachment
from city.models import City
@ -18,6 +19,13 @@ class ContactSettingsForm(forms.ModelForm):
country = forms.MultipleChoiceField(choices=[(c.id,c.name) for c in list(set(Country.objects.language().all()))], required=False)
area = forms.MultipleChoiceField(choices=[(a.id, a.name) for a in list(set(Area.objects.language().all()))], required=False)
def __init__(self, *args, **kwargs):
super(ContactSettingsForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance:
lang = translation.get_language()
self.fields['city'].widget.attrs['data-init-text'] = [(item.id, item.name) for item in list(instance.city.filter(translations__language_code=lang))]
class Meta:
model = ContactSettings
fields = ('periodic', 'exponent_practicum', 'organiser_practicum', 'theme', 'area', 'country', 'city', )
@ -39,7 +47,17 @@ class ContactSettingsForm(forms.ModelForm):
return int(self.cleaned_data['periodic'])
def clean_city(self):
return City.objects.none()
cities = self.cleaned_data.get('city')
if cities:
res = []
for id in cities.split(','):
try:
res.append(int(id))
except ValueError:
continue
return City.objects.filter(id__in=res)
else:
return City.objects.none()
class MailingListForm(forms.ModelForm):

@ -2,12 +2,16 @@
"""Forms for emencia.django.newsletter"""
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
from django.utils import translation
from haystack.query import SearchQuerySet
from functions.search_forms import get_by_lang
from emencia.django.newsletter.models import Contact, ContactSettings
from emencia.django.newsletter.models import MailingList
from functions.form_check import translit_with_separator as tr
from theme.models import Theme
from country.models import Country, Area
from city.models import City
class MailingListSubscriptionForm(forms.ModelForm):
@ -85,8 +89,7 @@ class ContactSettingsForm(forms.ModelForm):
class ContactFilterForm(forms.Form):
email = forms.EmailField(label="Email", max_length=255, required=False,
widget=forms.TextInput(attrs={'class':'input-xlarge search-query','placeholder':'Email'}))
theme = forms.MultipleChoiceField(label="Тематика", choices = [(t.id, t.name) for t in Theme.objects.language()],
required=False)
theme = forms.MultipleChoiceField(label="Тематика", choices = [(t.id, t.name) for t in Theme.objects.language()])
country = forms.MultipleChoiceField(label="Страна",
choices = [(c.id, c.name) for c in list(set(Country.objects.language('ru').all()))],
required=False)
@ -117,3 +120,84 @@ class ContactFilterForm(forms.Form):
qs = qs.filter(valid=True)
return qs, title
class AbstractSubscribeForm(forms.ModelForm):
email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'Email'}))
class Meta:
model = ContactSettings
fields = ('periodic', 'exponent_practicum', 'organiser_practicum', 'theme', 'country', 'city')
def clean_email(self):
email = self.cleaned_data['email']
try:
Contact.objects.get(email=email)
except Contact.DoesNotExist:
return email
raise ValidationError(_(u'Такой email уже есть в базе даных'))
def clean_city(self):
cities = self.cleaned_data.get('city')
if cities:
res = []
for id in cities.split(','):
try:
res.append(int(id))
except ValueError:
continue
return City.objects.filter(id__in=res)
else:
return City.objects.none()
def clean_country(self):
countries = self.cleaned_data['country']
return Country.objects.filter(id__in=countries)
def clean_theme(self):
themes = self.cleaned_data['theme']
return Theme.objects.filter(id__in=themes)
class SubsribeAssideForm(AbstractSubscribeForm):
city = forms.CharField(
widget=forms.HiddenInput(attrs={'id': 'id_subscription_city', 'placeholder': _(u'Город')}),
required=False)
periodic = forms.ChoiceField(
choices=ContactSettings.PERIODIC_CHOICES, required=False,
widget=forms.Select(attrs={'placeholder': _(u'Периодичность'), 'id': 'id_subscription_periodic'}))
def __init__(self, *args, **kwargs):
super(SubsribeAssideForm, self).__init__(*args, **kwargs)
lang = translation.get_language()
self.fields['theme'] = forms.MultipleChoiceField(
choices=[(item.pk, get_by_lang(item, 'name', lang)) for item in SearchQuerySet().models(Theme).all()],
widget=forms.SelectMultiple(attrs={'placeholder': _(u'Тематики'), 'id': 'id_subscription_theme'}))
self.fields['country'] = forms.MultipleChoiceField(
choices=[(item.pk, get_by_lang(item, 'name', lang)) for item in SearchQuerySet().models(Country).all()],
required=False,
widget=forms.SelectMultiple(attrs={'placeholder': _(u'Страны'), 'id': 'id_subscription_country'}))
class SubscribeSettingsForm(AbstractSubscribeForm):
city = forms.CharField(
widget=forms.HiddenInput(attrs={'id': 'id_sub_set_city', 'placeholder': _(u'Город')}),
required=False)
get_announce = forms.BooleanField(required=False, label=_(u'Получать анонсы'))
moscow_expo = forms.BooleanField(required=False, label=_(u'Выставки Москвы'))
saint_expo = forms.BooleanField(required=False, label=_(u'Выставки Санкт-Петербурга'))
europe_expo = forms.BooleanField(required=False, label=_(u'Выставки Европы'))
def __init__(self, *args, **kwargs):
super(SubscribeSettingsForm, self).__init__(*args, **kwargs)
lang = translation.get_language()
self.fields['theme'] = forms.MultipleChoiceField(
choices=[(item.pk, get_by_lang(item, 'name', lang)) for item in SearchQuerySet().models(Theme).all()],
widget=forms.SelectMultiple(attrs={'placeholder': _(u'Тематики'), 'id': 'id_sub_set_theme'}))
self.fields['country'] = forms.MultipleChoiceField(
choices=[(item.pk, get_by_lang(item, 'name', lang)) for item in SearchQuerySet().models(Country).all()],
required=False,
widget=forms.SelectMultiple(attrs={'placeholder': _(u'Страны'), 'id': 'id_sub_set_country'}))

@ -37,4 +37,13 @@ class ContactManager(models.Manager):
contact.user = user
contact.save()
return contact
def create_contact(self, email, user=None):
contact = self.model(user=user, email=email)
if user:
contact.first_name = user.first_name
contact.last_name = user.last_name
contact.save()
contact.send_activation()
return contact

@ -237,9 +237,9 @@ class ContactSettings(models.Model):
WEEK_2 = 2 # every 2 weeks
MONTH = 3 # every 4 weeks
PERIODIC_CHOICES = [(WEEK, 'Раз в неделю'),
(WEEK_2, 'Раз в 2 недели'),
(MONTH, 'Разв месяц')
PERIODIC_CHOICES = [(WEEK, _(u'Раз в неделю')),
(WEEK_2, _(u'Раз в 2 недели')),
(MONTH, _(u'Раз в месяц'))
]
contact = models.OneToOneField(Contact)

@ -16,5 +16,7 @@ urlpatterns = patterns('',
url(r'^activation/complete/', TemplateView.as_view(template_name='client/newsletters/activation_complete.html'),
name='subscription_activation_complete'),
url(r'^activate/(?P<activation_key>.*)/$', ActivationView.as_view(), name='subscription_activation'),
url(r'^subsribe/aside/$', 'emencia.django.newsletter.views.expo_views.subscribe_aside',
name='newsletter_subscription_aside'),
url(r'^$', SubscribeView.as_view(), name='newsletter_subscription'),
)

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from django.views.generic import CreateView, ListView, UpdateView, DeleteView, FormView
from django.conf import settings
from django.utils import translation
from django.utils.translation import ugettext_lazy as _
from django.forms.formsets import formset_factory
from django.http import HttpResponseRedirect, HttpResponse
@ -70,14 +71,19 @@ class UpdateContact(UpdateView):
self.object.theme = form.cleaned_data['theme']
self.object.country = form.cleaned_data['country']
self.object.area = form.cleaned_data['area']
self.object.city = form.cleaned_data['city']
self.object.save()
return HttpResponseRedirect(self.get_success_url())
def get_initial(self):
lang = translation.get_language()
obj = self.object.contact
data = self.initial.copy()
city = ','.join(['%s:%s'%(item.id, item.name) for item in self.object.city.filter(translations__language_code=lang)])
data.update({'first_name': obj.first_name, 'subscriber': obj.subscriber,
'valid': obj.valid, 'tester': obj.tester})
'valid': obj.valid, 'tester': obj.tester, 'city':city})
return data

@ -1,8 +1,13 @@
from django.views.generic import TemplateView, View, FormView
from django.http import HttpResponseRedirect
# -*- coding: utf-8 -*-
import json
from django.views.generic import TemplateView, FormView
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import redirect
from emencia.django.newsletter.forms import ContactForm, ContactSettingsForm
from emencia.django.newsletter.models import Contact, ContactSettings
from emencia.django.newsletter.forms import SubsribeAssideForm
from accounts.models import User
from country.models import Country
class SubscribeView(FormView):
form_class = ContactForm
@ -32,13 +37,22 @@ class SubscribeView(FormView):
else:
form2 = ContactSettingsForm(self.request.POST)
ccc = self.request.POST
if form2.is_valid():
contact_setting = form2.save(commit=False)
if not contact_setting.contact_id:
contact_setting.contact = contact
contact_setting.save()
form2.save_m2m()
# get country from request
country_code = self.request.META.get('HTTP_GEOIP_COUNTRY_CODE')
try:
country = Country.objects.get(country_code=country_code)
contact_setting.country.add(country)
contact_setting.area.add(country.area)
except Country.DoesNotExist:
pass
contact.send_activation()
return HttpResponseRedirect(self.success_url)
@ -87,7 +101,6 @@ class ActivationView(TemplateView):
Implement account-activation logic here.
"""
# todo: add country and city from geoip
activated_contact = Contact.objects.activate(activation_key)
return activated_contact
@ -96,3 +109,31 @@ class ActivationView(TemplateView):
return ('subscription_activation_complete', (), {})
def subscribe_aside(request):
if request.POST:
response = {'success': False}
form = SubsribeAssideForm(request.POST)
if form.is_valid():
email = form.cleaned_data['email']
try:
user = User.objects.get(username=email)
except User.DoesNotExist:
user = None
contact = Contact.objects.create_contact(email, user)
contact_setting = form.save(commit=False)
contact_setting.contact = contact
contact_setting.exponent_practicum = True
contact_setting.organiser_practicum = True
contact_setting.save()
form.save_m2m()
response['success'] = True
else:
errors = form.errors
if 'theme' in errors:
errors['id_subscription_theme'] = errors['theme']
response['errors'] = errors
return HttpResponse(json.dumps(response, indent=2), content_type='application/json')
else:
return HttpResponse('not form request')

@ -8,7 +8,6 @@ from django.utils import translation
from django.utils.translation import ugettext_lazy as _
from haystack.query import EmptySearchQuerySet, SearchQuerySet
from country.models import Area
from theme.models import Theme
from exposition.models import Exposition
from conference.models import Conference
from seminar.models import Seminar
@ -20,6 +19,15 @@ from city.models import City
from place_exposition.models import PlaceExposition
from place_conference.models import PlaceConference
def get_by_lang(item, field, lang='ru'):
"""
:param item: searchresult object
field: translated field
:return:
"""
return getattr(item, field+'_'+lang)
class AbstactSearchForm(forms.Form):
q = forms.CharField(label=_(u'Я ищу'), required=False, widget=forms.TextInput(attrs={'placeholder':_(u'Тематика, слово или название')}))

@ -13,6 +13,7 @@ from theme.models import Theme
from article.models import Article
from exposition.models import Exposition
from conference.models import Conference
from emencia.django.newsletter.forms import SubsribeAssideForm
def clear_slashes(str_):
@ -35,15 +36,10 @@ def add_seo(request):
return seo_text
def expo_context(request):
banners_themes = [24, 34, 4]
banner_tags = [141, 142, 143, 156, 206, 231, 232, 390, 391, 400, 457, 500, 536, 537, 539, 457, 500, 686, 715, 765,
766, 857, 927, 964, 971, 972, 987, 1009, 1010, 1021, 2508, 2509, 2516, 2518, 2536, 2568, 2583, 2585,
3811, 3940, 4130, 4192, 4236, 4512, 4841, 5353, 5532, 5854, 106, 107, 195, 380, 930, 931, 932, 3845,
3846, 3863, 3873, 4141, 4142, 4343, 4344, 4347, 211, 212, 277, 631]
cont = {'theme_search_form': ThemeSearch(), 'expo_catalog': Exposition.catalog,
'book_aid': settings.BOOKING_AID, 'blogs': Article.objects.main_page_blogs(),
'news_list': Article.objects.main_page_news(), 'sng_countries': settings.SNG_COUNTRIES,
'banner_themes': banners_themes, 'banner_tags': banner_tags, 'seo_text': add_seo(request)
'seo_text': add_seo(request), 'announce_subscribe': SubsribeAssideForm()
}
user = request.user

@ -11,6 +11,47 @@
$('#id_theme').select2({width: "element"});
$('#id_country').select2({width: "element"});
$('#id_area').select2({width:'element'});
$("#id_city").select2('destroy');
$('#id_city').select2({
placeholder: $(this).attr('города'),
multiple: true,
width: 'element',
ajax: {
url: "/city/get-city/",
dataType: "json",
quietMillis: 200,
data: function(term, page){
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);
}
});
})
</script>

@ -55,28 +55,7 @@
</div>
</div>
{% endif %}
<!--
<div class="set-sect">
<header>{% trans 'настройка e-mail уведомлений' %}</header>
<div class="set-sect-body">
<form method="post" action="#">{% csrf_token %}
{% for choice in email_announcement_form.announcement.field.choices %}
<div class="mf-line">
<label class="check">
<input type="checkbox" name="sType" value="{{ choice.0 }}" />
{{ choice.1 }}
</label>
</div>
{% endfor %}
<div class="mf-buttons-line">
<button type="submit" class="icon-save">{% trans 'сохранить' %}</button>
</div>
</form>
</div>
</div>
-->
<!--
<div class="set-sect">
<header>{% trans 'социализация и sharing' %}</header>
@ -134,550 +113,87 @@
</div>
-->
<div class="set-sect subscribe">
<header>{% trans 'настройка подписки' %}</header>
<div class="set-sect-body">
<form action="#">
<ul class="tabs clearfix">
<li class="active"><a class="icon-big-email" href="#">{% trans 'по e-mail' %}</a></li>
<li><a class="icon-big-rss" href="#">{% trans 'через RSS' %}</a></li>
<li><a class="icon-big-twitter" href="#">{% trans 'на twitter' %}</a></li>
<li><a class="icon-big-ical" href="#">{% trans 'в iCal' %}</a></li>
</ul>
<ul class="tabs-content">
<li class="active">
<div class="mf-announces clearfix">
<div class="mf-subj-checks-title">
<label class="check">
<input type="checkbox" class="annoncesFlag" name="annoncesFlag" />
Получать анонсы</label>
</div>
<div class="mf-announces-body">
<div class="mf-line subj-checks">
<label class="check"><input type="checkbox" name="sType" value="exhb" />выставок</label>
<label class="check"><input type="checkbox" name="sType" value="smnr" />семинаров</label>
<label class="check"><input type="checkbox" name="sType" value="conf" />конференций</label>
<label class="check"><input type="checkbox" name="sType" value="webn" />вебинаров</label>
</div>
<!--<div class="mf-line mail">
<div class="mf-field"><input type="text" name="umail" placeholder="Введите e-mail" /></div>
<div class="mf-msg"></div>
</div>-->
<div class="mf-line country">
<label>Cтрана</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="country" value="1" />Россия</label></li>
<li><label><input type="checkbox" name="country" value="2" />Украина</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line city">
<label>Город</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="city" value="1" />Москва</label></li>
<li><label><input type="checkbox" name="city" value="2" />Санкт-Петербург</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line subj">
<label>Тематика</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="subj" value="1" />Бизнес, инвестиции, финансы</label></li>
<li><label><input type="checkbox" name="subj" value="2" />Индустрия развлечений, шоу, СМИ</label></li>
<li><label><input type="checkbox" name="subj" value="3" />Косметика и парфюмерия</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line period">
<div class="mf-field">
<select name="period">
<option value="">Периодичность</option>
<option value="1">Еженедельно</option>
<option value="2">2 раза в месяц</option>
<option value="3">Ежемесячно</option>
</select>
</div>
<div class="mf-msg"></div>
</div>
</div>
</div>
<hr />
<div class="mf-line">
<label class="check"><input type="checkbox" name="sType" value="exhb" />Выставки Москвы</label>
<label class="check"><input type="checkbox" name="sType" value="exhb" />Выставки Санкт-Петербурга</label>
<label class="check"><input type="checkbox" name="sType" value="exhb" />Выставки Европы</label>
</div>
<hr />
<div class="mf-line">
<label class="check"><input type="checkbox" name="sType" value="exhb" />Новости и фотообзоры выставок</label>
</div>
<div class="mf-line">
<label class="check"><input type="checkbox" name="sType" value="exhb" />Рубрика «Экспо профессионал» <i>(аналитически материалы, практические кейсы для маркетологов)</i></label>
</div>
<div class="mf-line">
<label class="check"><input type="checkbox" name="sType" value="exhb" />Рубрика «Секреты успеха» <i>(материалы по личной эффективности)</i></label>
</div>
</li>
<li>
<div class="mf-announces clearfix">
<div class="mf-subj-checks-title">
<label class="check"><input type="checkbox" class="annoncesFlag" name="annoncesFlag" />Получать анонсы</label>
</div>
<div class="mf-announces-body">
<div class="mf-line subj-checks">
<label class="check"><input type="checkbox" name="sType" value="exhb" />выставок</label>
<label class="check"><input type="checkbox" name="sType" value="smnr" />семинаров</label>
<label class="check"><input type="checkbox" name="sType" value="conf" />конференций</label>
<label class="check"><input type="checkbox" name="sType" value="webn" />вебинаров</label>
</div>
<!--<div class="mf-line mail">
<div class="mf-field"><input type="text" name="umail" placeholder="Введите e-mail" /></div>
<div class="mf-msg"></div>
</div>-->
<div class="mf-line country">
<label>Cтрана</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="country" value="1" />Россия</label></li>
<li><label><input type="checkbox" name="country" value="2" />Украина</label></li>
<li><label><input type="checkbox" name="country" value="3" />Беларусь</label></li>
<li><label><input type="checkbox" name="country" value="4" />Бельгия</label></li>
<li><label><input type="checkbox" name="country" value="5" />Германия</label></li>
<li><label><input type="checkbox" name="country" value="6" />Франция</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line city">
<label>Город</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="city" value="1" />Москва</label></li>
<li><label><input type="checkbox" name="city" value="2" />Санкт-Петербург</label></li>
<li><label><input type="checkbox" name="city" value="3" />Владивосток</label></li>
<li><label><input type="checkbox" name="city" value="4" />Краснодар</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line subj">
<label>Тематика</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="subj" value="1" />Бизнес, инвестиции, финансы</label></li>
<li><label><input type="checkbox" name="subj" value="2" />Индустрия развлечений, шоу, СМИ</label></li>
<li><label><input type="checkbox" name="subj" value="3" />Косметика и парфюмерия</label></li>
<li><label><input type="checkbox" name="subj" value="4" />Маркетинг, реклама, PR</label></li>
<li><label><input type="checkbox" name="subj" value="5" />Мебель, интерьер, декор</label></li>
<li><label><input type="checkbox" name="subj" value="6" />Наука и инновации</label></li>
<li><label><input type="checkbox" name="subj" value="7" />Анализ, измерение и контроль</label></li>
<li><label><input type="checkbox" name="subj" value="8" />Здравоохранение</label></li>
<li><label><input type="checkbox" name="subj" value="9" />Культура, искусство, церковь</label></li>
<li><label><input type="checkbox" name="subj" value="10" />Менеджмент, HR</label></li>
<li><label><input type="checkbox" name="subj" value="11" />Транспорт, склад, логистика</label></li>
<li><label><input type="checkbox" name="subj" value="12" />Экология, очистка, утилизация</label></li>
<li><label><input type="checkbox" name="subj" value="13" />Безопасность</label></li>
<li><label><input type="checkbox" name="subj" value="14" />Городское хозяйство</label></li>
<li><label><input type="checkbox" name="subj" value="15" />Гостиничное, ресторанное дело</label></li>
<li><label><input type="checkbox" name="subj" value="16" />Нефть, газ, горное дело</label></li>
<li><label><input type="checkbox" name="subj" value="17" />Строительство</label></li>
<li><label><input type="checkbox" name="subj" value="18" />Телекоммуникации</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line">
<div class="mf-field">
<select name="period">
<option value="">Периодичность</option>
<option value="1">Еженедельно</option>
<option value="2">2 раза в месяц</option>
<option value="3">Ежемесячно</option>
</select>
</div>
<div class="mf-msg"></div>
</div>
</div>
</div>
<hr />
<div class="mf-line">
<label class="check"><input type="checkbox" name="sType" value="exhb" />Выставки Москвы</label>
<label class="check"><input type="checkbox" name="sType" value="exhb" />Выставки Санкт-Петербурга</label>
<label class="check"><input type="checkbox" name="sType" value="exhb" />Выставки Европы</label>
</div>
<hr />
<div class="mf-line">
<label class="check"><input type="checkbox" name="sType" value="exhb" />Новости и фотообзоры выставок</label>
</div>
<div class="mf-line">
<label class="check"><input type="checkbox" name="sType" value="exhb" />Рубрика «Экспо профессионал» <i>(аналитически материалы, практические кейсы для маркетологов)</i></label>
</div>
<div class="mf-line">
<label class="check"><input type="checkbox" name="sType" value="exhb" />Рубрика «Секреты успеха» <i>(материалы по личной эффективности)</i></label>
</div>
</li>
<li>
<div class="mf-announces clearfix">
<div class="mf-subj-checks-title">
<label class="check"><input type="checkbox" class="annoncesFlag" name="annoncesFlag" />Получать анонсы</label>
</div>
<div class="mf-announces-body">
<div class="mf-line subj-checks">
<label class="check"><input type="checkbox" name="sType" value="exhb" />выставок</label>
<label class="check"><input type="checkbox" name="sType" value="smnr" />семинаров</label>
<label class="check"><input type="checkbox" name="sType" value="conf" />конференций</label>
<label class="check"><input type="checkbox" name="sType" value="webn" />вебинаров</label>
</div>
<!--<div class="mf-line mail">
<div class="mf-field"><input type="text" name="umail" placeholder="Введите e-mail" /></div>
<div class="mf-msg"></div>
</div>-->
<div class="mf-line country">
<label>Cтрана</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="country" value="1" />Россия</label></li>
<li><label><input type="checkbox" name="country" value="2" />Украина</label></li>
<li><label><input type="checkbox" name="country" value="3" />Беларусь</label></li>
<li><label><input type="checkbox" name="country" value="4" />Бельгия</label></li>
<li><label><input type="checkbox" name="country" value="5" />Германия</label></li>
<li><label><input type="checkbox" name="country" value="6" />Франция</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line city">
<label>Город</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="city" value="1" />Москва</label></li>
<li><label><input type="checkbox" name="city" value="2" />Санкт-Петербург</label></li>
<li><label><input type="checkbox" name="city" value="3" />Владивосток</label></li>
<li><label><input type="checkbox" name="city" value="4" />Краснодар</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line subj">
<label>Тематика</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="subj" value="1" />Бизнес, инвестиции, финансы</label></li>
<li><label><input type="checkbox" name="subj" value="2" />Индустрия развлечений, шоу, СМИ</label></li>
<li><label><input type="checkbox" name="subj" value="3" />Косметика и парфюмерия</label></li>
<li><label><input type="checkbox" name="subj" value="4" />Маркетинг, реклама, PR</label></li>
<li><label><input type="checkbox" name="subj" value="5" />Мебель, интерьер, декор</label></li>
<li><label><input type="checkbox" name="subj" value="6" />Наука и инновации</label></li>
<li><label><input type="checkbox" name="subj" value="7" />Анализ, измерение и контроль</label></li>
<li><label><input type="checkbox" name="subj" value="8" />Здравоохранение</label></li>
<li><label><input type="checkbox" name="subj" value="9" />Культура, искусство, церковь</label></li>
<li><label><input type="checkbox" name="subj" value="10" />Менеджмент, HR</label></li>
<li><label><input type="checkbox" name="subj" value="11" />Транспорт, склад, логистика</label></li>
<li><label><input type="checkbox" name="subj" value="12" />Экология, очистка, утилизация</label></li>
<li><label><input type="checkbox" name="subj" value="13" />Безопасность</label></li>
<li><label><input type="checkbox" name="subj" value="14" />Городское хозяйство</label></li>
<li><label><input type="checkbox" name="subj" value="15" />Гостиничное, ресторанное дело</label></li>
<li><label><input type="checkbox" name="subj" value="16" />Нефть, газ, горное дело</label></li>
<li><label><input type="checkbox" name="subj" value="17" />Строительство</label></li>
<li><label><input type="checkbox" name="subj" value="18" />Телекоммуникации</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line">
<div class="mf-field">
<select name="period">
<option value="">Периодичность</option>
<option value="1">Еженедельно</option>
<option value="2">2 раза в месяц</option>
<option value="3">Ежемесячно</option>
</select>
</div>
<div class="mf-msg"></div>
</div>
</div>
</div>
</li>
<li>
<div class="mf-announces clearfix">
<div class="mf-subj-checks-title">
<label class="check"><input type="checkbox" class="annoncesFlag" name="annoncesFlag" />Получать анонсы</label>
</div>
<div class="mf-announces-body">
<div class="mf-line subj-checks">
<label class="check"><input type="checkbox" name="sType" value="exhb" />выставок</label>
<label class="check"><input type="checkbox" name="sType" value="smnr" />семинаров</label>
<label class="check"><input type="checkbox" name="sType" value="conf" />конференций</label>
<label class="check"><input type="checkbox" name="sType" value="webn" />вебинаров</label>
</div>
<!--<div class="mf-line mail">
<div class="mf-field"><input type="text" name="umail" placeholder="Введите e-mail" /></div>
<div class="mf-msg"></div>
</div>-->
<div class="mf-line country">
<label>Cтрана</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="country" value="1" />Россия</label></li>
<li><label><input type="checkbox" name="country" value="2" />Украина</label></li>
<li><label><input type="checkbox" name="country" value="3" />Беларусь</label></li>
<li><label><input type="checkbox" name="country" value="4" />Бельгия</label></li>
<li><label><input type="checkbox" name="country" value="5" />Германия</label></li>
<li><label><input type="checkbox" name="country" value="6" />Франция</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line city">
<label>Город</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="city" value="1" />Москва</label></li>
<li><label><input type="checkbox" name="city" value="2" />Санкт-Петербург</label></li>
<li><label><input type="checkbox" name="city" value="3" />Владивосток</label></li>
<li><label><input type="checkbox" name="city" value="4" />Краснодар</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line subj">
<label>Тематика</label>
<div class="mf-field">
<div class="c-select-box select">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
<li><label><input type="checkbox" name="subj" value="1" />Бизнес, инвестиции, финансы</label></li>
<li><label><input type="checkbox" name="subj" value="2" />Индустрия развлечений, шоу, СМИ</label></li>
<li><label><input type="checkbox" name="subj" value="3" />Косметика и парфюмерия</label></li>
<li><label><input type="checkbox" name="subj" value="4" />Маркетинг, реклама, PR</label></li>
<li><label><input type="checkbox" name="subj" value="5" />Мебель, интерьер, декор</label></li>
<li><label><input type="checkbox" name="subj" value="6" />Наука и инновации</label></li>
<li><label><input type="checkbox" name="subj" value="7" />Анализ, измерение и контроль</label></li>
<li><label><input type="checkbox" name="subj" value="8" />Здравоохранение</label></li>
<li><label><input type="checkbox" name="subj" value="9" />Культура, искусство, церковь</label></li>
<li><label><input type="checkbox" name="subj" value="10" />Менеджмент, HR</label></li>
<li><label><input type="checkbox" name="subj" value="11" />Транспорт, склад, логистика</label></li>
<li><label><input type="checkbox" name="subj" value="12" />Экология, очистка, утилизация</label></li>
<li><label><input type="checkbox" name="subj" value="13" />Безопасность</label></li>
<li><label><input type="checkbox" name="subj" value="14" />Городское хозяйство</label></li>
<li><label><input type="checkbox" name="subj" value="15" />Гостиничное, ресторанное дело</label></li>
<li><label><input type="checkbox" name="subj" value="16" />Нефть, газ, горное дело</label></li>
<li><label><input type="checkbox" name="subj" value="17" />Строительство</label></li>
<li><label><input type="checkbox" name="subj" value="18" />Телекоммуникации</label></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line">
<div class="mf-field">
<select name="period">
<option value="">Периодичность</option>
<option value="1">Еженедельно</option>
<option value="2">2 раза в месяц</option>
<option value="3">Ежемесячно</option>
</select>
</div>
<div class="mf-msg"></div>
</div>
</div>
</div>
</li>
</ul>
<div class="mf-buttons-line">
<button type="submit" class="icon-save">{% trans 'сохранить' %}</button>
</div>
</form>
</div>
</div>
<header>{% trans 'настройка подписки' %}</header>
<div class="set-sect-body">
<form action="#">
<ul class="tabs clearfix">
<li class="active"><a class="icon-big-email" href="#">{% trans 'по e-mail' %}</a></li>
</ul>
<ul class="tabs-content">
<li class="active">
<div class="mf-announces clearfix">
<div class="mf-subj-checks-title">
<label class="check">
<input type="checkbox" class="annoncesFlag" name="annoncesFlag" />
Получать анонсы</label>
</div>
<div class="mf-announces-body">
<div class="mf-line mail">
<div class="mf-field">{{ subscribe.email }}</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line country">
<div class="mf-field">
{{ subscribe.country }}
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line city">
<div class="mf-field">
{{ subscribe.city }}
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line subj">
<div class="mf-field">
{{ subscribe.theme }}
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line period">
<div class="mf-field">
{{ subscribe.periodic }}
</div>
<div class="mf-msg"></div>
</div>
</div>
</div>
<hr />
<div class="mf-line">
<label class="check">{{ subscribe.moscow_expo }}{{ subscribe.moscow_expo.label }}</label>
<label class="check">{{ subscribe.saint_expo }}{{ subscribe.saint_expo.label }}</label>
<label class="check">{{ subscribe.europe_expo }}{{ subscribe.europe_expo.label }}</label>
</div>
<hr />
<div class="mf-line">
<label class="check">{{ subscribe.exponent_practicum }}«Практикум экспонента»<i>(учимся эффективно участвовать в выставках и грамотно пиарить свою компанию на событиях)</i></label>
</div>
<div class="mf-line">
<label class="check">{{ subscribe.organiser_practicum }}«Практикум организатора событий» <i>(Создаем, наполняем и продвигаем собственные ивэнты)</i></label>
</div>
</li>
</ul>
<div class="mf-buttons-line">
<button type="submit" class="icon-save">{% trans 'сохранить' %}</button>
</div>
</form>
</div>
</div>
{% endblock %}

@ -93,3 +93,7 @@
</div>
</section>
{% endblock %}
{% block popup %}
{% include 'client/popups/announces.html' %}
{% endblock %}

@ -1,9 +1,12 @@
{% load i18n %}
<div id="subscribe-sm" class="subscribe-sm">
<header>{% trans 'получать анонсЫ' %}</header>
<header><a href="#" style="text-decoration: none">{% trans 'получать анонсЫ' %}</a></header>
{% comment %}
<ul>
<li><a class="icon-big-email" href="#">{% trans 'по e-mail' %}</a></li>
</ul>
{% endcomment %}
</div>
<hr>

@ -1,6 +0,0 @@
{% load static %}
<div class="abn">
{% if theme_for_filter.id in banner_themes or tag_for_filter.id in banner_tags %}
<a target="_blank" href="/redirect/redirect/24/"><img src="{% static 'client/img/partners/unnamed_2.gif' %}" alt="" /></a>
{% endif %}
</div>

@ -36,14 +36,8 @@
<li><a href="/about/">{% trans 'о нас' %}</a></li>
<li><a href="/partners/">{% trans 'партнеры' %}</a></li>
<li><a href="/advertising/">{% trans 'реклама' %}</a></li>
{% comment %}
<!-- task EXPO-145-->
<li><a href="#">{% trans 'сервис' %}</a></li>
<li><a href="#">{% trans 'для партнеров' %}</a></li>
{% endcomment %}
<li><a href="/contacts/">{% trans 'контакты' %}</a></li>
<li><a href="/newsletters/{% if themes %}?{% for th in themes %}theme={{ th }}&{% endfor %}{% endif %}">{% trans 'подписаться' %}</a></li>
</ul>
</nav>

@ -39,7 +39,7 @@
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<tr>
<td style="padding: 20px 0 0;"><p style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px; margin-bottom: 0;" >Ваша регистрация на портале <a href="http://expomap.ru/" style="color: #ffffff;text-decoration: none;border-bottom: 1px dashed #ee3824;">Expomap</a></p></td>
<td style="padding: 20px 0 0;"><p style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px; margin-bottom: 0;" >Ваша подписка на портале <a href="http://expomap.ru/" style="color: #ffffff;text-decoration: none;border-bottom: 1px dashed #ee3824;">Expomap</a></p></td>
</tr>
<tr>
<td style="padding: 10px 30px 15px; background: #faf9f7;">

@ -31,15 +31,15 @@
<div class="pr-header-box">
<a class="pr-phone" href="tel:+7 (499) 999-12-07">+7 (499) 999-12-07</a>
<ul class="pr-social">
<li><a href="#"><img src="{% static 'subscribe_lending/images/sm-icon-inst.png' %}" /></a></li>
<li><a href="#"><img src="{% static 'subscribe_lending/images/sm-icon-youtube.png' %}" /></a></li>
<li><a href="#"><img src="{% static 'subscribe_lending/images/sm-icon-fb.png' %}" /></a></li>
<li><a href="#"><img src="{% static 'subscribe_lending/images/sm-icon-lin.png' %}" /></a></li>
<li><a href="#"><img src="{% static 'subscribe_lending/images/sm-icon-vk.png' %}" /></a></li>
<li><a href="#"><img src="{% static 'subscribe_lending/images/sm-icon-twit.png' %}" /></a></li>
<li><a href="https://instagram.com/expomap/"><img src="{% static 'subscribe_lending/images/sm-icon-inst.png' %}" /></a></li>
<li><a href="https://www.youtube.com/user/expomaptv"><img src="{% static 'subscribe_lending/images/sm-icon-youtube.png' %}" /></a></li>
<li><a href="https://www.facebook.com/Expomap"><img src="{% static 'subscribe_lending/images/sm-icon-fb.png' %}" /></a></li>
<li><a href="http://www.linkedin.com/company/expomap-ru/"><img src="{% static 'subscribe_lending/images/sm-icon-lin.png' %}" /></a></li>
<li><a href="http://vk.com/expomap"><img src="{% static 'subscribe_lending/images/sm-icon-vk.png' %}" /></a></li>
<li><a href="https://twitter.com/expomap_ru"><img src="{% static 'subscribe_lending/images/sm-icon-twit.png' %}" /></a></li>
</ul>
</div>
<strong class="pr-logo"><a href="#">Expomap</a></strong>
<strong class="pr-logo"><a href="/">Expomap</a></strong>
<span class="pr-slogan">{% blocktrans %}П<span class="pr-search-icon"></span>исковик деловых событий{% endblocktrans %}</span>
</div>
</header>
@ -120,7 +120,6 @@
</div>
<div class="pr-title">
<p>{% trans 'Учимся эффективно участвовать в выставках и грамотно пиарить свою компанию на событиях.' %}</p>
<a href="#">{% trans 'Пример письма' %}</a>
</div>
</li>
<li>
@ -130,7 +129,6 @@
</div>
<div class="pr-title">
<p>{% trans 'Создаем, наполняем и продвигаем собственные ивэнты.' %}</p>
<a href="#">{% trans 'Пример письма' %}</a>
</div>
</li>
</ul>

@ -0,0 +1,56 @@
<div id="pw-subscribe" class="popup-window pw-subscribe">
<header class="clearfix">
<div class="pw-title">Получать анонсы </div>
<ul class="tabs">
<li class="active"><a class="icon-big-email" href="#">по e-mail</a></li>
</ul>
</header>
<div class="pw-body clearfix">
<ul class="tabs-content">
<li class="active">
<form id="id_subscription_aside_form" class="pw-form simple-validate" action="/newsletters/subsribe/aside/" method="post">{% csrf_token %}
<div class="pwf-line mail">
<div class="pwf-field">{{ announce_subscribe.email }}</div>
<div class="pwf-msg"><a href="#">Пример рассылки</a></div>
</div>
<div class="pwf-line country">
<div class="pwf-field">
{{ announce_subscribe.country }}
</div>
<div class="pwf-msg"></div>
</div>
<div class="pwf-line city">
<div class="pwf-field">
{{ announce_subscribe.city }}
</div>
<div class="pwf-msg"></div>
</div>
<div class="pwf-line subj">
<div class="pwf-field">
{{ announce_subscribe.theme }}
</div>
<div class="mf-msg"></div>
</div>
<div class="pwf-line subj">
<div class="pwf-field">
{{ announce_subscribe.periodic }}
</div>
<div class="mf-msg"></div>
</div>
<div class="pwf-buttons-line">
<button type="submit" class="icon-check">подписаться</button>
</div>
</form>
</li>
</ul>
</div>
</div>

@ -166,13 +166,55 @@ if (EXPO.common){
}
};
},
subscriptionInput = function (width) {
$('#id_subscription_country, #id_subscription_theme')
.select2({
placeholder: $(this).attr('placeholder'),
width: width
});
$('#id_subscription_city').select2({
placeholder: $(this).attr('placeholder'),
multiple: true,
width: width,
ajax: {
url: "/city/get-city/",
dataType: "json",
quietMillis: 200,
data: function(term, page){
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 id= $(element).val();
var text = $(element).attr('data-init-text');
callback({id: id, text:text});
}
});
};
//dependences
that.forms = [];
$(function () {
/**
* registration and login form validation
*/
subscriptionInput('100%');
$('form.validate').each(function () {
that.forms.push(new Validation(this));
});

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save