You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.8 KiB
94 lines
3.8 KiB
"""Views for emencia.django.newsletter Tracking"""
|
|
import base64
|
|
from urllib import urlencode
|
|
from urlparse import urlparse
|
|
from urlparse import urlunparse
|
|
from urlparse import parse_qs
|
|
|
|
|
|
from django.http import HttpResponse
|
|
from django.http import HttpResponseRedirect
|
|
from django.shortcuts import get_object_or_404
|
|
from django.template import RequestContext
|
|
from django.utils.encoding import smart_str
|
|
from django.utils.translation import ugettext as _
|
|
from django.shortcuts import render_to_response
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
from emencia.django.newsletter.models import Link
|
|
from emencia.django.newsletter.models import Newsletter
|
|
from emencia.django.newsletter.utils.tokens import untokenize
|
|
from emencia.django.newsletter.models import ContactMailingStatus
|
|
from emencia.django.newsletter.settings import USE_UTM_TAGS
|
|
from emencia.django.newsletter.settings import TRACKING_IMAGE
|
|
|
|
|
|
def view_newsletter_tracking(request, slug, uidb36, token, format):
|
|
"""Track the opening of the newsletter by requesting a blank img"""
|
|
newsletter = get_object_or_404(Newsletter, slug=slug)
|
|
contact = untokenize(uidb36, token)
|
|
params = dict(newsletter=newsletter,
|
|
contact=contact,
|
|
status=ContactMailingStatus.OPENED)
|
|
if newsletter.ab_testing:
|
|
try:
|
|
ab_state = ContactMailingStatus.objects.filter(
|
|
newsletter=newsletter,
|
|
contact=contact,
|
|
status__in=(ContactMailingStatus.SENT_TEST, ContactMailingStatus.SENT),
|
|
).order_by('-creation_date')[0].ab
|
|
params.update({'ab': ab_state})
|
|
except:
|
|
pass
|
|
ContactMailingStatus.objects.create(**params)
|
|
return HttpResponse(base64.b64decode(TRACKING_IMAGE),
|
|
mimetype='image/%s' % format)
|
|
|
|
|
|
def view_newsletter_tracking_link(request, slug, uidb36, token, link_id):
|
|
"""Track the opening of a link on the website"""
|
|
newsletter = get_object_or_404(Newsletter, slug=slug)
|
|
contact = untokenize(uidb36, token)
|
|
link = get_object_or_404(Link, pk=link_id)
|
|
params = dict(newsletter=newsletter,
|
|
contact=contact,
|
|
status=ContactMailingStatus.LINK_OPENED,
|
|
link=link)
|
|
if newsletter.ab_testing:
|
|
try:
|
|
ab_state = ContactMailingStatus.objects.filter(
|
|
newsletter=newsletter,
|
|
contact=contact,
|
|
status__in=(ContactMailingStatus.SENT_TEST, ContactMailingStatus.SENT),
|
|
).order_by('-creation_date')[0].ab
|
|
params.update({'ab': ab_state})
|
|
except:
|
|
pass
|
|
|
|
ContactMailingStatus.objects.create(**params)
|
|
if not USE_UTM_TAGS:
|
|
return HttpResponseRedirect(link.url)
|
|
|
|
url_parts = urlparse(link.url)
|
|
query_dict = parse_qs(url_parts.query)
|
|
query_dict.update({'utm_source': 'Expomap',
|
|
'utm_medium': 'email',
|
|
'utm_campaign': str(newsletter.sending_date.date())})
|
|
url = urlunparse((url_parts.scheme, url_parts.netloc, url_parts.path,
|
|
url_parts.params, urlencode(query_dict, True), url_parts.fragment))
|
|
return HttpResponseRedirect(url)
|
|
|
|
|
|
@login_required
|
|
def view_newsletter_historic(request, slug):
|
|
"""Display the historic of a newsletter"""
|
|
opts = Newsletter._meta
|
|
newsletter = get_object_or_404(Newsletter, slug=slug)
|
|
|
|
context = {'title': _('Historic of %s') % newsletter.__unicode__(),
|
|
'original': newsletter,
|
|
'opts': opts,
|
|
'object_id': newsletter.pk,
|
|
'app_label': opts.app_label}
|
|
return render_to_response('newsletter/newsletter_historic.html',
|
|
context, context_instance=RequestContext(request))
|
|
|