123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- from django.template import RequestContext
- from django.utils import timezone
- from misago.acl.exceptions import ACLError403, ACLError404
- from misago.apps.errors import error403, error404
- from misago.forms import FormLayout
- from misago.markdown import post_markdown
- from misago.messages import Message
- from misago.models import Forum, WatchedThread
- class PostingBaseView(object):
- def __new__(cls, request, **kwargs):
- obj = super(PostingBaseView, cls).__new__(cls)
- return obj(request, **kwargs)
- def _set_context(self):
- self.set_context()
- if self.forum.level:
- self.parents = Forum.objects.forum_parents(self.forum.pk)
- def watch_thread(self):
- if self.request.user.subscribe_start:
- try:
- WatchedThread.objects.get(user=self.request.user, thread=self.thread)
- except WatchedThread.DoesNotExist:
- WatchedThread.objects.create(
- user=self.request.user,
- forum=self.forum,
- thread=self.thread,
- last_read=timezone.now(),
- email=(self.request.user.subscribe_start == 2),
- )
- def __call__(self, request, **kwargs):
- self.request = request
- self.kwargs = kwargs
- self.forum = None
- self.thread = None
- self.quote = None
- self.post = None
- self.parents = []
- self.message = request.messages.get_message('threads')
- post_preview = ''
- try:
- self._set_context()
- if request.method == 'POST':
- try:
- form = self.form_type(request.POST, request.FILE, request=request, forum=self.forum, thread=self.thread)
- except AttributeError:
- form = self.form_type(request.POST, request=request, forum=self.forum, thread=self.thread)
- if 'preview' in request.POST:
- form.empty_errors()
- if form['post'].value():
- md, post_preview = post_markdown(request, form['post'].value())
- else:
- md, post_preview = None, None
- else:
- if form.is_valid():
- self.post_form(form)
- self.watch_thread()
- return self.response()
- else:
- message = Message(form.non_field_errors()[0], 'error')
- else:
- form = self.form_type(request=request, forum=self.forum, thread=self.thread)
- except Forum.DoesNotExist:
- return error404(request)
- except ACLError403 as e:
- return error403(request, unicode(e))
- except ACLError404 as e:
- return error404(request, unicode(e))
- return request.theme.render_to_response(('%s/posting.html' % self.templates_prefix),
- {
- 'action': self.action,
- 'message': self.message,
- 'forum': self.forum,
- 'thread': self.thread,
- 'quote': self.quote,
- 'post': self.post,
- 'parents': self.parents,
- 'preview': post_preview,
- 'form': FormLayout(form),
- },
- context_instance=RequestContext(request));
|