diff --git a/apps/emencia/django/newsletter/forms.py b/apps/emencia/django/newsletter/forms.py index 635062fc..87e665d7 100644 --- a/apps/emencia/django/newsletter/forms.py +++ b/apps/emencia/django/newsletter/forms.py @@ -81,6 +81,11 @@ class MailingListSubscriptionForm(forms.ModelForm): class MailingSettingsForm(forms.ModelForm): + email = forms.EmailField( + error_messages={ + 'required': _(u'Поле e-mail обязательно для заполнения') + } + ) r_cities = ML_ModelMultipleChoiceField( label=_(u'Города России'), required=False, queryset=City.objects.all()) @@ -186,6 +191,15 @@ class MailingSettingsForm(forms.ModelForm): obj.save() return obj + def clean(self): + cleaned_data = super(MailingSettingsForm, self).clean() + if not cleaned_data.get('tg') and not cleaned_data.get('th'): + raise forms.ValidationError(_(u'Необходимо выбрать тему или тег')) + if not cleaned_data.get('moscow') or not cleaned_data.get('russia'): + raise forms.ValidationError(_(u'Необходимо выбрать минимум ' + u'1 вариант в гео-фильтрах')) + return cleaned_data + class AllMailingListSubscriptionForm(MailingListSubscriptionForm): """Form for subscribing to all mailing list""" diff --git a/apps/emencia/django/newsletter/models.py b/apps/emencia/django/newsletter/models.py index 87572e49..b88b4224 100644 --- a/apps/emencia/django/newsletter/models.py +++ b/apps/emencia/django/newsletter/models.py @@ -157,10 +157,10 @@ class Contact(models.Model): from_users = models.BooleanField(default=False) dailymailing = models.BooleanField(default=False) - moscow = models.BooleanField(_(u'Москва'), blank=True, default=True) - russia = models.BooleanField(_(u'Россия'), blank=True, default=True) + moscow = models.BooleanField(_(u'Москва'), blank=True, default=False) + russia = models.BooleanField(_(u'Россия'), blank=True, default=False) r_cities = models.ManyToManyField('city.City', blank=True, null=True, verbose_name=_(u'Города России')) - foreign = models.BooleanField(_(u'Зарубеж'), blank=True, default=True) + foreign = models.BooleanField(_(u'Зарубеж'), blank=True, default=False) f_countries = models.ManyToManyField('country.Country', blank=True, null=True, verbose_name=_(u'Зарубежные страны')) area = models.ManyToManyField('country.Area', blank=True, null=True, verbose_name=_(u'Географическая зона')) periodic = models.PositiveSmallIntegerField(_(u'Периодичность отправки'), diff --git a/apps/emencia/django/newsletter/views/expo_views.py b/apps/emencia/django/newsletter/views/expo_views.py index f08d6762..b9868aad 100644 --- a/apps/emencia/django/newsletter/views/expo_views.py +++ b/apps/emencia/django/newsletter/views/expo_views.py @@ -36,12 +36,16 @@ class SubscribeView(GetUserMixin, FormView): return super(SubscribeView, self).post(request, *args, **kwargs) def form_valid(self, form): - contact = form.save() - if not self.request.user.is_authenticated(): - contact.send_activation() + if self.request.GET.get('save'): + contact = form.save() + if not self.request.user.is_authenticated(): + contact.send_activation() if self.request.is_ajax(): - data = {'success': True} + data = { + 'success': True, + 'redirect_url': str(self.get_success_url()) + } return JsonResponse(data) return redirect(self.get_success_url()) @@ -50,7 +54,6 @@ class SubscribeView(GetUserMixin, FormView): if self.request.is_ajax(): data = { 'form_errors': form.errors, - 'form_non_fields_errors': form.non_field_errors(), } return JsonResponse(data, status=400) return self.render_to_response(self.get_context_data(form=form)) diff --git a/static/mailing_settings/css/main.css b/static/mailing_settings/css/main.css index e20e4706..7d8ab736 100644 --- a/static/mailing_settings/css/main.css +++ b/static/mailing_settings/css/main.css @@ -868,7 +868,7 @@ a.themes_trigger{ color: #bd2626; padding-bottom: 3px; } -.pr-input.field_error input{ +.pr-input input.field_error{ box-shadow: 0 0 0 2px #f00; } .pr-input:first-child{ @@ -941,3 +941,7 @@ a.themes_trigger{ -o-transition: all 100ms linear; transition: all 100ms linear; } + +.error_messages .errorlist{ + list-style: decimal inside; +} diff --git a/static/mailing_settings/js/main.js b/static/mailing_settings/js/main.js index 98ea408d..249e0ca6 100644 --- a/static/mailing_settings/js/main.js +++ b/static/mailing_settings/js/main.js @@ -1,25 +1,52 @@ 'use strict'; -function sendForm () { - var $form = $('#mailing_settings_form'); +function sendForm (show_modal) { + var show_modal = show_modal || false, + $form = $('#mailing_settings_form'); $form.find('.field_error').removeClass('field_error'); $form.find('.text_error').remove(); + var form_data = $form.serializeArray(); + if (show_modal) { + form_data.push({ + name: 'save', + value: true + }) + } + $.ajax({ url: $form.attr('action'), type: $form.attr('method'), - data: $form.serializeArray(), - // success: function(response){ - // console.log(response); - // }, + data: form_data, + success: function(response){ + console.log(response); + if (response.hasOwnProperty('redirect_url')){ + window.location.pathname = response.redirect_url; + } + }, error: function (error) { var form_errors = error.responseJSON.form_errors; - $.each(form_errors, function (field, err) { - var $field = $form.find('#id_' + field); - $field.addClass('field_error'); - $field.parent('.pr-input').prepend('' + err + ''); - }) + + if (show_modal){ + var $error_list = $('
    ', {class: 'errorlist'}); + + $.each(form_errors, function (field, err) { + $error_list.append('
  1. ' + err + '
  2. '); + }); + + $('#error_messages').html($error_list); + + $.fancybox.open({ + href: '#error_modal' + }) + } else { + $.each(form_errors, function (field, err) { + var $field = $form.find('#id_' + field); + $field.addClass('field_error'); + $field.parent('.pr-input').prepend('' + err + ''); + }); + } } }); } @@ -135,7 +162,6 @@ function sendForm () { }); } - function isAllTagsChecked (theme_id) { return themes_data[theme_id].tags.every(function (obj) { return obj.checked; @@ -373,6 +399,13 @@ function sendForm () { $themes_modal.on('click', '.modal-approve', function () { var $selected = $selected_themes.find('li').removeClass('unsaved').clone(); + if ($('#pr-promo').length){ + if (!$('#id_moscow').is(':checked') && !$('#id_russia').is(':checked') && $selected_themes.children().length && !$('#selected_themes').children().length){ + $('#id_moscow').prop('checked', true); + $('#id_russia').prop('checked', true); + } + } + $('#selected_themes').html($selected); sendForm(); @@ -383,6 +416,12 @@ function sendForm () { $selected_themes.find('a').trigger('click'); }); + $('#mailing_settings_form button').on('click', function (event) { + event.preventDefault(); + var show_modal = true; + sendForm(show_modal); + }); + })(); diff --git a/templates/c_admin/newsletters/contact_list.html b/templates/c_admin/newsletters/contact_list.html index 2b4c5103..6ffa8266 100644 --- a/templates/c_admin/newsletters/contact_list.html +++ b/templates/c_admin/newsletters/contact_list.html @@ -152,8 +152,8 @@
    Экспорт - Создать список рассылки из фильтра - Создать список рассылки + Создать список рассылки из фильтра + Создать список рассылки
    diff --git a/templates/client/newsletters/mailing_settings.html b/templates/client/newsletters/mailing_settings.html index 62c82af6..3564ce77 100644 --- a/templates/client/newsletters/mailing_settings.html +++ b/templates/client/newsletters/mailing_settings.html @@ -236,6 +236,16 @@ {% include 'client/popups/unsubscribed.html' %} {% endif %} + +
    + +