zinnia.views.trackback
Covered: 36 lines
Missed: 0 lines
Skipped 10 lines
Percent: 100 %
 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
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)
18
    if request.POST.get('url'):
19
        error = ''
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
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'
41
        return direct_to_template(request, 'zinnia/entry_trackback.xml',
42
                                  mimetype='text/xml',
43
                                  extra_context={'error': error})
45
    return redirect(entry)