142 lines
4.0 KiB
Python
142 lines
4.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
import json
|
|
|
|
from django.core.urlresolvers import reverse
|
|
from django.http import Http404, HttpResponseRedirect, HttpResponse
|
|
from django.shortcuts import render
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
import fmartingrcom.apps.blog.utils as blog_utils
|
|
from .models import Entry
|
|
from fmartingrcom.apps._core.views import View
|
|
from fmartingrcom.apps.config.models import SiteConfiguration
|
|
|
|
|
|
config = SiteConfiguration.objects.get()
|
|
|
|
|
|
class ListView(View):
|
|
section = 'blog'
|
|
template = 'blog/list.jinja'
|
|
|
|
def get(self, request, page_number=1):
|
|
if 'page' in request.GET:
|
|
page_number = int(request.GET['page'])
|
|
|
|
paginator, page = blog_utils.get_paginator(request, page_number)
|
|
|
|
self.data['page'] = page
|
|
self.data['page_number'] = page_number
|
|
self.data['paginator'] = paginator
|
|
|
|
return render(request, self.template, self.data)
|
|
|
|
|
|
class EntryView(View):
|
|
section = 'blog'
|
|
template = 'blog/entry.jinja'
|
|
|
|
def get_object(self, year, month, day, slug):
|
|
try:
|
|
filters = {
|
|
'slug': slug,
|
|
'date__year': int(year),
|
|
'date__month': int(month),
|
|
'date__day': int(day),
|
|
}
|
|
|
|
return Entry.objects.get(**filters)
|
|
except Entry.DoesNotExist:
|
|
raise Http404
|
|
|
|
def get(self, request, year, month, day, slug):
|
|
item = self.get_object(year, month, day, slug)
|
|
paginator, page = blog_utils.get_paginator(request, item=item)
|
|
|
|
self.data['page'] = page
|
|
self.data['paginator'] = paginator
|
|
self.data['item'] = item
|
|
|
|
return render(request, self.template, self.data)
|
|
|
|
|
|
class EntryAttachmentView(EntryView):
|
|
def get(self, request, year, month, day, slug, filename):
|
|
item = self.get_object(year, month, day, slug)
|
|
attachment = item.attachments.get(filename=filename)
|
|
if attachment:
|
|
return HttpResponseRedirect(attachment.url)
|
|
raise Http404
|
|
|
|
|
|
class EntryLiveEditView(View):
|
|
@method_decorator(csrf_exempt)
|
|
def dispatch(self, *args, **kwargs):
|
|
return super(EntryLiveEditView, self).dispatch(*args, **kwargs)
|
|
|
|
def post(self, request, year, month, day, slug):
|
|
if not request.user.is_superuser:
|
|
return HttpResponse(status=403)
|
|
|
|
try:
|
|
filters = {
|
|
'slug': slug,
|
|
'date__year': int(year),
|
|
'date__month': int(month),
|
|
'date__day': int(day),
|
|
}
|
|
|
|
item = Entry.objects.get(**filters)
|
|
except Entry.DoesNotExist:
|
|
raise Http404
|
|
|
|
data = json.loads(request.body)
|
|
if 'markdown' in data:
|
|
item.markdown = data['markdown']
|
|
item.save()
|
|
return HttpResponse(status=200)
|
|
|
|
if 'content' in data:
|
|
item.content = data['content']
|
|
item.save()
|
|
return HttpResponse(status=200)
|
|
return HttpResponse(status=204)
|
|
|
|
|
|
class SearchView(ListView):
|
|
template = 'blog/search.jinja'
|
|
|
|
def post(self, request):
|
|
page_number = 1
|
|
if 'page' in request.GET:
|
|
page_number = int(request.GET['page'])
|
|
|
|
search_query = request.POST['query']
|
|
|
|
if not search_query:
|
|
return HttpResponseRedirect(reverse('blog:list'))
|
|
|
|
paginator, page = blog_utils.get_paginator(
|
|
request, page_number, query=search_query
|
|
)
|
|
|
|
self.data['page'] = page
|
|
self.data['page_number'] = page_number
|
|
self.data['paginator'] = paginator
|
|
self.data['search_query'] = search_query
|
|
|
|
return render(request, self.template, self.data)
|
|
|
|
|
|
class RSSView(View):
|
|
template = 'blog/rss.jinja'
|
|
|
|
def get(self, request):
|
|
limit = config.rss_items
|
|
items = blog_utils.get_posts(limit=limit)
|
|
self.data['items'] = items
|
|
|
|
return render(request, self.template, self.data,
|
|
content_type='text/xml')
|