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 = $('