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.
56 lines
2.4 KiB
56 lines
2.4 KiB
"""Views for emencia.django.newsletter Newsletter"""
|
|
from django.template import RequestContext
|
|
from django.shortcuts import get_object_or_404
|
|
from django.shortcuts import render_to_response
|
|
|
|
from django.contrib.sites.models import Site
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.template.loader import render_to_string as render_file
|
|
|
|
from emencia.django.newsletter.models import Newsletter
|
|
from emencia.django.newsletter.models import ContactMailingStatus
|
|
from emencia.django.newsletter.utils import render_string
|
|
from emencia.django.newsletter.utils.newsletter import body_insertion
|
|
from emencia.django.newsletter.utils.newsletter import track_links
|
|
from emencia.django.newsletter.utils.tokens import untokenize
|
|
from emencia.django.newsletter.settings import TRACKING_LINKS
|
|
|
|
|
|
def render_newsletter(request, slug, context):
|
|
"""Return a newsletter in HTML format"""
|
|
newsletter = get_object_or_404(Newsletter, slug=slug)
|
|
context.update({'newsletter': newsletter,
|
|
'domain': Site.objects.get_current().domain})
|
|
|
|
content = render_string(newsletter.content, context)
|
|
title = render_string(newsletter.title, context)
|
|
if TRACKING_LINKS:
|
|
content = track_links(content, context)
|
|
unsubscription = render_file('newsletter/newsletter_link_unsubscribe.html', context)
|
|
content = body_insertion(content, unsubscription, end=True)
|
|
|
|
return render_to_response('newsletter/newsletter_detail.html',
|
|
{'content': content,
|
|
'title': title,
|
|
'object': newsletter},
|
|
context_instance=RequestContext(request))
|
|
|
|
|
|
@login_required
|
|
def view_newsletter_preview(request, slug):
|
|
"""View of the newsletter preview"""
|
|
context = {'contact': request.user}
|
|
return render_newsletter(request, slug, context)
|
|
|
|
|
|
def view_newsletter_contact(request, slug, uidb36, token):
|
|
"""Visualization of a newsletter by an user"""
|
|
newsletter = get_object_or_404(Newsletter, slug=slug)
|
|
contact = untokenize(uidb36, token)
|
|
ContactMailingStatus.objects.create(newsletter=newsletter,
|
|
contact=contact,
|
|
status=ContactMailingStatus.OPENED_ON_SITE)
|
|
context = {'contact': contact,
|
|
'uidb36': uidb36, 'token': token}
|
|
|
|
return render_newsletter(request, slug, context)
|
|
|