Merge branch 'stage6' of bitbucket.org:Bonus_05/expomap into stage6

remotes/origin/stage6
ya_dim4ik 9 years ago
commit bde9deecbb
  1. 34
      accounts/views.py
  2. 10
      emencia/django/newsletter/forms.py
  3. 47
      emencia/django/newsletter/models.py
  4. 59
      emencia/django/newsletter/urls/mailing_list.py
  5. 11
      emencia/django/newsletter/views/mailing_list.py
  6. 4
      templates/client/popups/mailing_settings_countries.html

@ -7,7 +7,7 @@ from sorl.thumbnail import get_thumbnail
from django.core.urlresolvers import reverse, reverse_lazy
from django.shortcuts import get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponseBadRequest
from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponseBadRequest, HttpResponseForbidden
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _, get_language
from django_messages.forms import SendForm
@ -112,6 +112,12 @@ class MailingSettings(ContextMixin, AjaxableResponseMixin, CreateUpdateView):
instance = Contact.objects.get(email=self.request.user.email)
except Contact.DoesNotExist:
pass
elif 'ml_contact_pk' in self.request.session:
try:
instance = Contact.objects.get(pk=self.request.session['ml_contact_pk'])
except Contact.DoesNotExist:
pass
if instance is not None:
self.extra_ctx.update({
'checked_f_countries': list(instance.f_countries.values_list('pk', flat=True)),
@ -119,20 +125,22 @@ class MailingSettings(ContextMixin, AjaxableResponseMixin, CreateUpdateView):
'checked_tg': list(instance.tags.values_list('pk', flat=True)),
'checked_th': list(instance.themes.values_list('pk', flat=True)),
})
elif not self.request.user.is_authenticated():
raise HttpResponseForbidden()
return instance
def form_valid(self, form):
print(form.cleaned_data)
print(form.errors)
print(self.request.POST)
# import pdb; pdb.set_trace()
return super(MailingSettings, self).form_valid(form)
def form_invalid(self, form):
print(form.cleaned_data)
print(form.errors)
print(self.request.POST)
return super(MailingSettings, self).form_invalid(form)
# def form_valid(self, form):
# print(form.cleaned_data)
# print(form.errors)
# print(self.request.POST)
# # import pdb; pdb.set_trace()
# return super(MailingSettings, self).form_valid(form)
# def form_invalid(self, form):
# print(form.cleaned_data)
# print(form.errors)
# print(self.request.POST)
# return super(MailingSettings, self).form_invalid(form)
class CalendarView(TemplateView):

@ -11,6 +11,7 @@ from django.forms.models import ModelChoiceIterator
from django.http import Http404
from django.utils import translation
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import get_language
from django.utils.encoding import smart_text, force_text
from haystack.query import SearchQuerySet
@ -158,6 +159,13 @@ class MailingSettingsForm(forms.ModelForm):
if self.instance and self.instance.pk:
# area
self.initial['area'] = set(self.instance.f_countries.values_list('area_id', flat=True))
area_q = Area.objects.language().all().order_by('name')
where = " `{db_table}_translation`.`language_code` = '{lang}' "\
.format(
db_table=Area._meta.db_table,
lang=get_language())
area_q = area_q.extra(where=[where])
self.fields['area'].queryset = area_q
# foreign countries
self.fields['f_countries'].c_queryset = self.instance.f_countries.distinct()
@ -203,7 +211,7 @@ class MailingSettingsForm(forms.ModelForm):
if countries_add:
obj.f_countries.add(*countries_add)
obj.r_cities = self.cleaned_data['r_cities'] or []
obj.r_cities = self.cleaned_data.get('r_cities') or []
obj.tags = self.cleaned_data.get('tg') or []
obj.themes = self.cleaned_data.get('th') or []
obj.save()

@ -6,6 +6,8 @@ from datetime import date
from datetime import timedelta
from dateutil import relativedelta
from email.MIMEImage import MIMEImage
from random import choice
from itertools import chain
import copy
import operator
@ -25,7 +27,7 @@ from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Group
from django.template.loader import render_to_string, get_template
from django.template import Context
from django.http import QueryDict
from emencia.django.newsletter.managers import ContactManager
from emencia.django.newsletter.settings import BASE_PATH
@ -198,15 +200,19 @@ class Contact(models.Model):
return reverse('admin:newsletter_contact_change', args=(self.pk,))
def get_announce_context_v2(self, date=None):
# import error
from emencia.django.newsletter.utils.tokens import tokenize
date = date or datetime.today().date()
activate('ru')
ctx = {
'recomended': [],
'recommended': [],
'moscow': [],
'russia': [],
'foreign': [],
'news': [],
'blog': [],
'mailing_settings_url': reverse('newsletter-authmailingsettings', args=tokenize(self)),
}
th_tg_filter_params = []
th_tg_structure = {}
@ -223,14 +229,22 @@ class Contact(models.Model):
th_tg_filter_params.append(SQ(**p))
th_tg_filter = reduce(operator.or_, th_tg_filter_params)
# recomended
recomended = RelatedSearchQuerySet().models(Exposition, Conference)
# recommended
paid_recommend = NewsletterRecommend.objects.filter(
fr__gte=date,
to__lte=date)
recommended = RelatedSearchQuerySet().models(Exposition, Conference)\
.filter(expohit=True)
if th_tg_filter:
recomended = recomended.filter(th_tg_filter)
paid_recommend = list(paid_recommend.filter(theme__in=th_tg_structure.keys()))
recommended = recommended.filter(th_tg_filter)
try:
ctx['recomended'] = recomended[0]
ctx['recommended'] = choice(paid_recommend)
except:
pass
try:
ctx['recommended'] = recommended[0]
except:
pass
# moscow
if self.moscow:
@ -239,6 +253,12 @@ class Contact(models.Model):
if th_tg_filter is not None:
moscow_sqs = moscow_sqs.filter(th_tg_filter)
ctx['moscow'] = moscow_sqs.order_by('data_begin')[:4]
moscow_filter_url = QueryDict('', mutable=True)
moscow_filter_url.setlist('theme', th_tg_structure.keys())
moscow_filter_url.setlist('tag', list(chain(th_tg_structure.values())))
moscow_filter_url['city'] = settings.MOSCOW_PK
moscow_filter_url['date_from'] = date.strftime('%d.%m.%Y')
ctx['moscow_filter_url'] = moscow_filter_url.urlencode()
# russia
if self.russia:
@ -252,7 +272,12 @@ class Contact(models.Model):
if th_tg_filter is not None:
russia_sqs = russia_sqs.filter(th_tg_filter)
ctx['russia'] = russia_sqs.order_by('data_begin')[:3]
russia_filter_url = QueryDict('', mutable=True)
russia_filter_url.setlist('theme', th_tg_structure.keys())
russia_filter_url.setlist('tag', list(chain(th_tg_structure.values())))
russia_filter_url['country'] = settings.RUSSIA_PK
russia_filter_url['date_from'] = r_date.strftime('%d.%m.%Y')
ctx['russia_filter_url'] = russia_filter_url.urlencode()
# foreign
if self.foreign:
@ -262,6 +287,12 @@ class Contact(models.Model):
if th_tg_filter is not None:
foreign_sqs = foreign_sqs.filter(th_tg_filter)
ctx['foreign'] = foreign_sqs.order_by('data_begin')[:4]
foreign_filter_url = QueryDict('', mutable=True)
foreign_filter_url.setlist('theme', th_tg_structure.keys())
foreign_filter_url.setlist('tag', list(chain(th_tg_structure.values())))
foreign_filter_url.setlist('country', f_countries)
foreign_filter_url['date_from'] = date.strftime('%d.%m.%Y')
ctx['foreign_filter_url'] = foreign_filter_url.urlencode()
# news
if self.content_news:

@ -1,35 +1,42 @@
"""Urls for the emencia.django.newsletter Mailing List"""
from django.conf.urls import url
from django.conf.urls import patterns
from emencia.django.newsletter.views.mailing_list import UnsubscribeView, UnsubscriptionSuccess
from emencia.django.newsletter.views.mailing_list import UnsubscribeView
from emencia.django.newsletter.views.mailing_list import UnsubscriptionSuccess
from emencia.django.newsletter.views.mailing_list import AuthMailingSettings
from emencia.django.newsletter.forms import MailingListSubscriptionForm
from emencia.django.newsletter.forms import AllMailingListSubscriptionForm
urlpatterns = patterns('emencia.django.newsletter.views.mailing_list',
url(r'^unsubscribe/hard/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
'view_mailinglist_unsubscribe',
name='newsletter_mailinglist_unsubscribe_hard'),
url(r'^unsubscribe/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
UnsubscribeView.as_view(),
name='newsletter_mailinglist_unsubscribe'),
url(r'^unsubscribe/handle/$',
'unsubscription_handle',
name='newsletter_mailinglist_unsubscribe_handle'),
url(r'^unsubscribe/success/$',
UnsubscriptionSuccess.as_view(),
name='newsletter_mailinglist_unsubscribe_success'),
url(r'^subscribe/(?P<mailing_list_id>\d+)/',
'view_mailinglist_subscribe',
{'form_class': MailingListSubscriptionForm},
name='newsletter_mailinglist_subscribe'),
url(r'^subscribe/',
'view_mailinglist_subscribe',
{'form_class': AllMailingListSubscriptionForm},
name='newsletter_mailinglist_subscribe_all'),
)
url(r'^unsubscribe/hard/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
'view_mailinglist_unsubscribe',
name='newsletter_mailinglist_unsubscribe_hard'),
url(r'^unsubscribe/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
UnsubscribeView.as_view(),
name='newsletter_mailinglist_unsubscribe'),
url(r'^unsubscribe/handle/$',
'unsubscription_handle',
name='newsletter_mailinglist_unsubscribe_handle'),
url(r'^unsubscribe/success/$',
UnsubscriptionSuccess.as_view(),
name='newsletter_mailinglist_unsubscribe_success'),
url(r'^subscribe/(?P<mailing_list_id>\d+)/',
'view_mailinglist_subscribe',
{'form_class': MailingListSubscriptionForm},
name='newsletter_mailinglist_subscribe'),
url(r'^subscribe/',
'view_mailinglist_subscribe',
{'form_class': AllMailingListSubscriptionForm},
name='newsletter_mailinglist_subscribe_all'),
url(r'^settings/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
AuthMailingSettings.as_view(),
name='newsletter-authmailingsettings'),
)

@ -5,7 +5,7 @@ from django.shortcuts import get_object_or_404
from django.shortcuts import render_to_response
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.views.generic import DetailView, TemplateView
from django.views.generic import DetailView, TemplateView, RedirectView
from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext as _
@ -141,3 +141,12 @@ def unsubscription_handle(request):
class UnsubscriptionSuccess(TemplateView):
template_name = 'client/newsletters/unsubscribe_success.html'
class AuthMailingSettings(RedirectView):
url = reverse_lazy('accounts-mailing_settings')
def get(self, request, *args, **kwargs):
self.contact = untokenize(self.kwargs.get('uidb36'), self.kwargs.get('token'))
request.session['ml_contact_pk'] = self.contact.pk
return super(AuthMailingSettings, self).get(request, *args, **kwargs)

@ -14,10 +14,10 @@
<div class="scroll-content">
<div class="places-list">
<ul class="modal_checkboxes">
{% for value, text in search_form.area.field.choices %}
{% for value, text in form.area.field.choices %}
<li class="level1 level">
<label>
<input type="checkbox" name="area" id="id_{{ prefix }}{{ value }}" class="csb-menu-input" value="{{ value }}" {% for option in search_form.area.value %}{% if option == value|slugify %}checked="checked"{% endif %}{% endfor %}/>
<input type="checkbox" name="area" id="id_{{ prefix }}{{ value }}" class="csb-menu-input" value="{{ value }}">
<span class="custom_checkbox"></span>
<span class="label hidden">{{ text }}</span>
</label>

Loading…
Cancel
Save