1
"""Views for Zinnia trackback"""
2
from django.shortcuts import redirect
3
from django.shortcuts import get_object_or_404
4
from django.contrib.sites.models import Site
5
from django.contrib.comments.models import Comment
6
from django.views.decorators.csrf import csrf_exempt
7
from django.contrib.contenttypes.models import ContentType
8
from django.views.generic.simple import direct_to_template
10
from zinnia.models import Entry
14
def entry_trackback(request, slug):
15
"""Set a TrackBack for an Entry"""
16
entry = get_object_or_404(Entry.published, slug=slug)
18
if request.POST.get('url'):
20
url = request.POST['url']
21
site = Site.objects.get_current()
23
if not entry.pingback_enabled:
24
error = u'Trackback is not enabled for %s' % entry.title
26
title = request.POST.get('title') or url
27
excerpt = request.POST.get('excerpt') or title
28
blog_name = request.POST.get('blog_name') or title
31
comment, created = Comment.objects.get_or_create(
32
content_type=ContentType.objects.get_for_model(Entry),
33
object_pk=entry.pk, site=site, user_url=url,
34
user_name=blog_name, defaults={'comment': excerpt})
36
user = entry.authors.all()[0]
37
comment.flags.create(user=user, flag='trackback')
39
error = u'Trackback is already registered'
41
return direct_to_template(request, 'zinnia/entry_trackback.xml',
43
extra_context={'error': error})
45
return redirect(entry)