diff --git a/accounts/views.py b/accounts/views.py
index 7ca6dd32..760b8147 100644
--- a/accounts/views.py
+++ b/accounts/views.py
@@ -131,6 +131,7 @@ class MailingSettings(GetUserMixin, ContextMixin, AjaxableResponseMixin, CreateU
'checked_r_cities': list(instance.r_cities.values_list('pk', flat=True)),
'checked_tg': list(instance.tags.values_list('pk', flat=True)),
'checked_th': list(instance.themes.values_list('pk', flat=True)),
+ 'contact': instance,
})
elif not self.request.user.is_authenticated():
raise HttpResponseForbidden()
diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py
index 2b84c00d..cae37b70 100644
--- a/emencia/django/newsletter/forms.py
+++ b/emencia/django/newsletter/forms.py
@@ -584,3 +584,13 @@ class MailingStatusFilter(forms.Form):
if ab:
qs = qs.filter(ab=ab)
return qs
+
+
+class SendtoFriendForm(forms.Form):
+ email = forms.EmailField(label=_(u"E-mail Вашего друга"), required=False)
+ first_name = forms.CharField(label=_(u"Имя Вашего друга"), required=False)
+
+ def clean_first_name(self):
+ if self.cleaned_data.get('email') and not self.cleaned_data.get('first_name'):
+ raise forms.ValidationError(_(u'Введите имя вашего друга'))
+ return self.cleaned_data.get('first_name')
diff --git a/emencia/django/newsletter/mailer.py b/emencia/django/newsletter/mailer.py
index 4d67727a..73c9c687 100644
--- a/emencia/django/newsletter/mailer.py
+++ b/emencia/django/newsletter/mailer.py
@@ -129,7 +129,7 @@ dailymail_attahcments = {
'twitter': 'newsletter/images/twitter.png',
}
context_attachments_size = {
- 'recommended': '281x225',
+ 'recommended': '17',
'news': '272x195',
'blog': '272x195',
'moscow': '109x114',
@@ -144,6 +144,7 @@ class NewsLetterSender(object):
self.test = test
self.verbose = verbose
self.newsletter = newsletter
+ self.settings_links = True
self.newsletter_template = Template(self.newsletter.content)
self.themes = dict(Theme.objects.language('ru').all().values_list('pk', 'name'))
@@ -159,14 +160,14 @@ class NewsLetterSender(object):
self.announce = self.newsletter.dailymail
self.local_dev = getattr(settings, 'LOCAL_DEV', False)
- def build_message(self, contact, announce_context=None):
+ def build_message(self, contact, announce_context=None, name=None):
"""
Build the email as a multipart message containing
a multipart alternative for text (plain, HTML) plus
all the attached files.
"""
- content_html = self.build_email_content(contact, announce_context)
+ content_html = self.build_email_content(contact, announce_context, name)
h = HTMLParser.HTMLParser()
content_html = h.unescape(content_html)
@@ -384,7 +385,7 @@ class NewsLetterSender(object):
title = self.newsletter.title2.format(**self.preheader_ctx)
return title
- def build_email_content(self, contact, announce_context=None):
+ def build_email_content(self, contact, announce_context=None, name=None):
"""Generate the mail for a contact"""
uidb36, token = tokenize(contact)
context = Context({'contact': contact,
@@ -392,7 +393,8 @@ class NewsLetterSender(object):
'newsletter': self.newsletter,
'tracking_image_format': TRACKING_IMAGE_FORMAT,
'uidb36': uidb36, 'token': token,
- 'name': contact.first_name or contact.last_name or _(u'Подписчик'),
+ 'name': name or contact.first_name or contact.last_name or _(u'Подписчик'),
+ 'settings_links': self.settings_links,
})
if self.announce:
# render template by default announce template
@@ -441,7 +443,7 @@ class NewsLetterSender(object):
return smart_unicode(content)
- def build_preheader_ctx(self, contact):
+ def build_preheader_ctx(self, contact, name=None):
t_add = u''
count = contact.themes.count()
if count > 3:
@@ -452,7 +454,7 @@ class NewsLetterSender(object):
theme_word=theme_word.make_agree_with_number(count).word,
)
self.preheader_ctx = {
- 'name': contact.first_name or contact.last_name or _(u'Подписчик'),
+ 'name': name or contact.first_name or contact.last_name or _(u'Подписчик'),
'themes': u', '.join([self.themes.get(x) for x in contact.themes.all().values_list('pk', flat=True)[:3]]) + t_add,
}
@@ -571,6 +573,39 @@ class Mailer(NewsLetterSender):
In test mode the mailer always send mails but do not log it"""
smtp = None
+ def send_to_friends(self, contact, contacts):
+ if not self.can_send:
+ return
+
+ if not self.smtp and not self.local_dev:
+ self.smtp_connect()
+
+ self.attachments = self.build_daily_attachments()
+
+ for _contact in contacts:
+ send = True
+ self.build_preheader_ctx(contact, name=_contact.get('name'))
+ announce_context = contact.get_announce_context_v2(self.newsletter.sending_date)
+ if not announce_context:
+ send = False
+ try:
+ log.info(u'Trying send to {email}'.format(email=contact.email))
+ # pass
+ if send:
+ message = self.build_message(contact, announce_context, _contact.get('name'))
+ if not self.local_dev:
+ self.smtp.sendmail(self.newsletter.header_sender,
+ _contact.get('email'),
+ message.as_string())
+ except (Exception,) as e:
+ exception = e
+ log.info(u'Exception was raised while sending to {email}: {exception}'.format(
+ email=contact.email, exception=exception))
+ else:
+ exception = None
+ if not self.local_dev:
+ self.smtp.quit()
+
def run(self):
"""Send the mails"""
if not self.can_send:
diff --git a/emencia/django/newsletter/templates/newsletter/AutomaticEmail_v2.html b/emencia/django/newsletter/templates/newsletter/AutomaticEmail_v2.html
index 1f01491e..b265e1d6 100644
--- a/emencia/django/newsletter/templates/newsletter/AutomaticEmail_v2.html
+++ b/emencia/django/newsletter/templates/newsletter/AutomaticEmail_v2.html
@@ -115,7 +115,6 @@
- {# TODO: Сменить размер картинки на 170x170 #}
{# {% endthumbnail %}#}
|
@@ -653,12 +652,18 @@
-
- | {% trans "Вы получили это письмо, так как подписаны на рассылку" %} https://www.expomap.ru |
-
-
- | {% trans "Переслать другу" %} {% trans "или" %} {% trans "Отписаться" %} |
-
+ {% if settings_links %}
+
+ | {% trans "Вы получили это письмо, так как подписаны на рассылку" %} https://www.expomap.ru |
+
+
+ | {% trans "Переслать другу" %} {% trans "или" %} {% trans "Отписаться" %} |
+
+ {% else %}
+
+ | {% trans "Вы получили это письмо, так как его переслал ваш друг" %} {{ contact.email }}. https://www.expomap.ru |
+
+ {% endif %}
| © 2008 — 2016 Expomap.ru |
diff --git a/emencia/django/newsletter/templates/newsletter/AutomaticEmail_web.html b/emencia/django/newsletter/templates/newsletter/AutomaticEmail_web.html
index b6fc5bfd..5ebc2808 100644
--- a/emencia/django/newsletter/templates/newsletter/AutomaticEmail_web.html
+++ b/emencia/django/newsletter/templates/newsletter/AutomaticEmail_web.html
@@ -668,7 +668,7 @@
{% trans "Вы получили это письмо, так как подписаны на рассылку" %} https://www.expomap.ru |
- | {% trans "Переслать другу" %} {% trans "или" %} {% trans "Отписаться" %} |
+ {% trans "Переслать другу" %} {% trans "или" %} {% trans "Отписаться" %} |
| © 2008 — 2016 Expomap.ru |
diff --git a/emencia/django/newsletter/urls/mailing_list.py b/emencia/django/newsletter/urls/mailing_list.py
index be50064a..19a09294 100644
--- a/emencia/django/newsletter/urls/mailing_list.py
+++ b/emencia/django/newsletter/urls/mailing_list.py
@@ -4,6 +4,7 @@ from django.conf.urls import patterns
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.views.mailing_list import SendtoFriendView
from emencia.django.newsletter.forms import MailingListSubscriptionForm
from emencia.django.newsletter.forms import AllMailingListSubscriptionForm
@@ -39,4 +40,8 @@ urlpatterns = patterns('emencia.django.newsletter.views.mailing_list',
AuthMailingSettings.as_view(),
name='newsletter-authmailingsettings'),
+ url(r'^tofriend/(?P[-\w]+)/(?P[0-9A-Za-z]+)-(?P.+)/$',
+ SendtoFriendView.as_view(),
+ name='newsletter-sendtofriend'),
+
)
diff --git a/emencia/django/newsletter/views/mailing_list.py b/emencia/django/newsletter/views/mailing_list.py
index 1e718993..95fd3701 100644
--- a/emencia/django/newsletter/views/mailing_list.py
+++ b/emencia/django/newsletter/views/mailing_list.py
@@ -1,17 +1,21 @@
# -*- coding: utf-8 -*-
"""Views for emencia.django.newsletter Mailing List"""
+from datetime import datetime, timedelta
from django.template import RequestContext
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, RedirectView
+from django.views.generic import DetailView, TemplateView, RedirectView, FormView
from django.core.urlresolvers import reverse_lazy
+from django.contrib import messages
from django.utils.translation import ugettext as _
+from django.forms.formsets import formset_factory
+from emencia.django.newsletter.mailer import Mailer
from emencia.django.newsletter.utils.tokens import untokenize
from emencia.django.newsletter.models import Newsletter, MailingList, ContactMailingStatus, Contact, ContactSettings
-from emencia.django.newsletter.forms import SubscribeSettingsForm
+from emencia.django.newsletter.forms import SubscribeSettingsForm, SendtoFriendForm
def view_mailinglist_unsubscribe(request, slug, uidb36, token):
@@ -150,3 +154,54 @@ class AuthMailingSettings(RedirectView):
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)
+
+
+class SendtoFriendView(TemplateView):
+ # form_class = SendtoFriendForm
+ formset_class = formset_factory(SendtoFriendForm, extra=5, max_num=5)
+ template_name = 'client/newsletters/sendmail_to_friend.html'
+ message_template_name = 'client/newsletters/sendmail_to_friend_message.html'
+
+ def dispatch(self, request, *args, **kwargs):
+ self.message_template = False
+ self.formset = self.formset_class(request.POST or None)
+ self.newsletter = get_object_or_404(Newsletter, slug=kwargs.get('slug'))
+ self.contact = untokenize(self.kwargs.get('uidb36'), self.kwargs.get('token'))
+ last_send = request.session.get('last_friend_send')
+ if last_send and datetime.now() - last_send < timedelta(hours=1):
+ self.add_msg(_(u'В целях направленных на борьбу со спамом, пересылать письма можно не чаще чем раз в час.'))
+ return super(SendtoFriendView, self).dispatch(request, *args, **kwargs)
+
+ def add_msg(self, msg):
+ self.message_template = True
+ messages.add_message(self.request, messages.INFO, msg)
+
+ def post(self, request, *args, **kwargs):
+ if self.formset.is_valid():
+ contacts = []
+ for form in self.formset:
+ contacts.append({
+ 'name': form.cleaned_data.get('first_name'),
+ 'email': form.cleaned_data.get('email')
+ })
+ self.send_mail(contacts)
+ request.session['last_friend_send'] = datetime.now()
+ self.add_msg(_(u'Мы успешно переслали письмо вашим друзьям. Спасибо что Вы с нами!'))
+ return self.get(request, *args, **kwargs)
+
+ def get_template_names(self):
+ if self.message_template:
+ return [self.message_template_name]
+ return super(SendtoFriendView, self).get_template_names()
+
+ def send_mail(self, contacts):
+ mailer = Mailer(self.newsletter)
+ mailer.settings_links = False
+ mailer.send_to_friends(self.contact, contacts)
+
+ def get_context_data(self, **kwargs):
+ ctx = super(SendtoFriendView, self).get_context_data(**kwargs)
+ ctx['formset'] = self.formset
+ ctx['newsletter'] = self.newsletter
+ ctx['contact'] = self.contact
+ return ctx
\ No newline at end of file
diff --git a/templates/client/accounts/mailing_settings.html b/templates/client/accounts/mailing_settings.html
index 81ab20b9..ee87cf92 100644
--- a/templates/client/accounts/mailing_settings.html
+++ b/templates/client/accounts/mailing_settings.html
@@ -21,7 +21,7 @@
expomap.ru ›
{% trans 'Настройте рассылку от Expomap' %}
- {% trans 'для' %} {{ request.user }}
+ {% trans 'для' %} {{ contact.email }}
diff --git a/templates/client/article/article.html b/templates/client/article/article.html
index 8f0c01b1..653c690e 100644
--- a/templates/client/article/article.html
+++ b/templates/client/article/article.html
@@ -31,10 +31,8 @@
{# {% include 'client/includes/article/article_logo.html' with obj=object %} #}
- {# TODO: подставить переменную #}
- {{ object.author_s.fullname }}
- {{ object.publish_date|date:"d E Y" }}
- {# TODO: подставить переменную #}
- Раздел: {{ object.theme.all.0 }}
{# {{ object.publish_date|date:"d E Y" }} #}
diff --git a/templates/client/newsletters/sendmail_to_friend.html b/templates/client/newsletters/sendmail_to_friend.html
new file mode 100644
index 00000000..c068bd57
--- /dev/null
+++ b/templates/client/newsletters/sendmail_to_friend.html
@@ -0,0 +1,65 @@
+{% load i18n %}
+{% load static %}
+{% load widget_tweaks %}
+
+
+
+
+
+
+ {% trans 'Перешлите письмо другу' %}
+
+
+
+
+{# #}
+{# #}
+
+
+
+
+
+
+
+ {% block content %}
+
+ {% endblock %}
+
+
+
+
+
+
+
diff --git a/templates/client/newsletters/sendmail_to_friend_message.html b/templates/client/newsletters/sendmail_to_friend_message.html
new file mode 100644
index 00000000..3fa19b1c
--- /dev/null
+++ b/templates/client/newsletters/sendmail_to_friend_message.html
@@ -0,0 +1,19 @@
+{% extends 'client/newsletters/sendmail_to_friend.html' %}
+
+{% load i18n %}
+{% load static %}
+{% load widget_tweaks %}
+
+{% block content %}
+
+ {% if messages %}
+{#
#}
+ {% for message in messages %}
+ {{ message }}
+ {% endfor %}
+{#
#}
+ {% endif %}
+
+{% endblock %}
+
+