views.py 4.08 KB
Newer Older
Skia's avatar
Skia committed
1 2 3 4 5 6 7 8
from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView, DetailView, RedirectView
from django.views.generic.edit import UpdateView, CreateView, DeleteView
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse, reverse_lazy
from django.utils import timezone
from django.conf import settings
from django import forms
Skia's avatar
Skia committed
9
from django.db import models
Skia's avatar
Skia committed
10 11
from django.core.exceptions import PermissionDenied

12
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin
Skia's avatar
Skia committed
13 14
from forum.models import Forum, ForumMessage, ForumTopic

15
class ForumMainView(CanViewMixin, ListView):
Skia's avatar
Skia committed
16 17 18
    queryset = Forum.objects.filter(parent=None)
    template_name = "forum/main.jinja"

19
class ForumCreateView(CanCreateMixin, CreateView):
Skia's avatar
Skia committed
20
    model = Forum
21
    fields = ['name', 'parent', 'is_category', 'edit_groups', 'view_groups']
Skia's avatar
Skia committed
22 23 24 25
    template_name = "core/create.jinja"

    def get_initial(self):
        init = super(ForumCreateView, self).get_initial()
Skia's avatar
Skia committed
26 27 28 29
        try:
            parent = Forum.objects.filter(id=self.request.GET['parent']).first()
            init['parent'] = parent
        except: pass
Skia's avatar
Skia committed
30 31
        return init

32
class ForumEditView(CanEditPropMixin, UpdateView):
Skia's avatar
Skia committed
33 34
    model = Forum
    pk_url_kwarg = "forum_id"
35
    fields = ['name', 'parent', 'is_category', 'edit_groups', 'view_groups']
Skia's avatar
Skia committed
36 37 38
    template_name = "core/edit.jinja"
    success_url = reverse_lazy('forum:main')

39
class ForumDetailView(CanViewMixin, DetailView):
Skia's avatar
Skia committed
40 41 42 43
    model = Forum
    template_name = "forum/forum.jinja"
    pk_url_kwarg = "forum_id"

Skia's avatar
Skia committed
44 45 46 47 48
    def get_context_data(self, **kwargs):
        kwargs = super(ForumDetailView, self).get_context_data(**kwargs)
        kwargs['topics'] = self.object.topics.annotate(models.Max('messages__date')).order_by('-messages__date__max')
        return kwargs

49
class ForumTopicCreateView(CanCreateMixin, CreateView):
Skia's avatar
Skia committed
50 51
    model = ForumMessage
    fields = ['title', 'message']
Skia's avatar
Skia committed
52 53 54 55 56 57 58 59 60
    template_name = "core/create.jinja"

    def dispatch(self, request, *args, **kwargs):
        self.forum = get_object_or_404(Forum, id=self.kwargs['forum_id'], is_category=False)
        if not request.user.can_view(self.forum):
            raise PermissionDenied
        return super(ForumTopicCreateView, self).dispatch(request, *args, **kwargs)

    def form_valid(self, form):
Skia's avatar
Skia committed
61 62 63
        topic = ForumTopic(title=form.instance.title, author=self.request.user, forum=self.forum)
        topic.save()
        form.instance.topic = topic
Skia's avatar
Skia committed
64 65 66
        form.instance.author = self.request.user
        return super(ForumTopicCreateView, self).form_valid(form)

Skia's avatar
Skia committed
67
class ForumTopicEditView(CanEditMixin, UpdateView):
Skia's avatar
Skia committed
68
    model = ForumTopic
Skia's avatar
Skia committed
69
    fields = ['title', 'forum']
Skia's avatar
Skia committed
70 71 72
    pk_url_kwarg = "topic_id"
    template_name = "core/edit.jinja"

73
class ForumTopicDetailView(CanViewMixin, DetailView):
Skia's avatar
Skia committed
74 75 76 77 78
    model = ForumTopic
    pk_url_kwarg = "topic_id"
    template_name = "forum/topic.jinja"
    context_object_name = "topic"

Skia's avatar
Skia committed
79 80 81 82 83 84
class ForumMessageEditView(CanEditMixin, UpdateView):
    model = ForumMessage
    fields = ['title', 'message']
    template_name = "core/edit.jinja"
    pk_url_kwarg = "message_id"

85
class ForumMessageCreateView(CanCreateMixin, CreateView):
Skia's avatar
Skia committed
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
    model = ForumMessage
    fields = ['title', 'message']
    template_name = "core/create.jinja"

    def dispatch(self, request, *args, **kwargs):
        self.topic = get_object_or_404(ForumTopic, id=self.kwargs['topic_id'])
        if not request.user.can_view(self.topic):
            raise PermissionDenied
        return super(ForumMessageCreateView, self).dispatch(request, *args, **kwargs)

    def get_initial(self):
        init = super(ForumMessageCreateView, self).get_initial()
        try:
            init['message'] = "\n".join([
                " > " + line for line in ForumMessage.objects.filter(id=self.request.GET['quote_id']).first().message.split('\n')
                ])
        except: pass
        return init

    def form_valid(self, form):
        form.instance.topic = self.topic
        form.instance.author = self.request.user
        return super(ForumMessageCreateView, self).form_valid(form)