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
9
10 from zinnia.models import Entry
11
12
13 @csrf_exempt
14 -def entry_trackback(request, slug):
15 """Set a TrackBack for an Entry"""
16 entry = get_object_or_404(Entry.published, slug=slug)
17
18 if request.POST.get('url'):
19 error = ''
20 url = request.POST['url']
21 site = Site.objects.get_current()
22
23 if not entry.pingback_enabled:
24 error = u'Trackback is not enabled for %s' % entry.title
25
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
29
30 if not error:
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})
35 if created:
36 user = entry.authors.all()[0]
37 comment.flags.create(user=user, flag='trackback')
38 else:
39 error = u'Trackback is already registered'
40
41 return direct_to_template(request, 'zinnia/entry_trackback.xml',
42 mimetype='text/xml',
43 extra_context={'error': error})
44
45 return redirect(entry)
46