Ejemplo n.º 1
0
    def __call__(self, request, **kwargs):
        self.request = request
        self.kwargs = kwargs
        self.parents = []
        self.ignored = False
        self.watcher = False
        self.message = request.messages.get_message('threads')
        try:
            self._type_available()
            self.fetch_thread()
            self.check_forum_type()
            self._check_permissions()
            response = self.fetch_posts()
            if response:
                return response
            self.make_thread_form()
            if self.thread_form:
                response = self.handle_thread_form()
                if response:
                    return response
            self.make_posts_form()
            if self.posts_form:
                response = self.handle_posts_form()
                if response:
                    return response
        except (Forum.DoesNotExist, Thread.DoesNotExist):
            return error404(request)
        except ACLError403 as e:
            return error403(request, unicode(e))
        except ACLError404 as e:
            return error404(request, unicode(e))

        # Merge proxy into forum
        self.forum.closed = self.proxy.closed

        return render_to_response('%ss/thread.html' % self.type_prefix,
                                  self._template_vars({
                                        'message': self.message,
                                        'forum': self.forum,
                                        'parents': self.parents,
                                        'thread': self.thread,
                                        'is_read': self.tracker.is_read(self.thread),
                                        'count': self.count,
                                        'posts': self.posts,
                                        'ignored_posts': self.ignored,
                                        'watcher': self.watcher,
                                        'pagination': self.pagination,
                                        'emojis': emojis(),
                                        'quick_reply': QuickReplyForm(request=request),
                                        'thread_form': self.thread_form or None,
                                        'posts_form': self.posts_form or None,
                                      }),
                                  context_instance=RequestContext(request));
Ejemplo n.º 2
0
Archivo: base.py Proyecto: xyzz/Misago
    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 = ''
        form = None

        try:
            self._type_available()
            self._set_context()
            self.check_forum_type()
            self._check_permissions()
            request.block_flood_requests = self.block_flood_requests
            if request.method == 'POST':
                # Create correct form instance
                if self.allow_quick_reply and 'quick_reply' in request.POST:
                    form = QuickReplyForm(request.POST, request=request)
                if not form or 'preview' in request.POST or not form.is_valid(
                ):
                    # Override "quick reply" form with full one
                    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)
                # Handle specific submit
                if 'preview' in request.POST:
                    form.empty_errors()
                    if form['post'].value():
                        md, post_preview = post_markdown(form['post'].value())
                    else:
                        md, post_preview = None, None
                else:
                    if form.is_valid():
                        self.post_form(form)
                        self.watch_thread()
                        self.after_form(form)
                        self.notify_users()
                        return self.response()
                    else:
                        self.message = Message(form.non_field_errors()[0],
                                               'error')
            else:
                form = self.form_type(request=request,
                                      forum=self.forum,
                                      thread=self.thread,
                                      initial=self.form_initial_data())
        except (Forum.DoesNotExist, Thread.DoesNotExist, Post.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(
            ('%ss/posting.html' % self.type_prefix),
            self.template_vars({
                'type_prefix': self.type_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),
                'emojis': emojis(),
            }),
            context_instance=RequestContext(request))
Ejemplo n.º 3
0
    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 = ''
        form = None

        try:
            self._type_available()
            self._set_context()
            self.check_forum_type()
            self._check_permissions()
            request.block_flood_requests = self.block_flood_requests
            self.make_attachments_token()
            self.fetch_attachments()
            if request.method == 'POST':
                # Create correct form instance
                if self.allow_quick_reply and 'quick_reply' in request.POST:
                    form = QuickReplyForm(request.POST, request=request)
                if not form or 'preview' in request.POST or not form.is_valid(
                ):
                    # Override "quick reply" form with full one
                    try:
                        form = self.form_type(request.POST,
                                              request.FILES,
                                              request=request,
                                              forum=self.forum,
                                              thread=self.thread)
                    except AttributeError:
                        form = self.form_type(request.POST,
                                              request=request,
                                              forum=self.forum,
                                              thread=self.thread)
                # Handle specific submit
                if list(
                        set(request.POST.keys())
                        & set(('preview', 'upload', 'remove_attachment',
                               'restore_attachment'))):
                    form.empty_errors()
                    if form['post'].value():
                        md, post_preview = post_markdown(form['post'].value())
                    else:
                        md, post_preview = None, None
                    if 'upload' in request.POST:
                        try:
                            uploaded_file = form['new_file'].value()
                        except KeyError:
                            uploaded_file = None
                        self._upload_file(uploaded_file)
                    if 'remove_attachment' in request.POST:
                        try:
                            self.remove_attachment(
                                int(request.POST.get('remove_attachment')))
                        except ValueError:
                            self.message = Message(
                                _("Requested attachment could not be found."),
                                messages.ERROR)
                    if 'restore_attachment' in request.POST:
                        try:
                            self.restore_attachment(
                                int(request.POST.get('restore_attachment')))
                        except ValueError:
                            self.message = Message(
                                _("Requested attachment could not be found."),
                                messages.ERROR)
                else:
                    if form.is_valid():
                        self.post_form(form)
                        self.watch_thread()
                        self.after_form(form)
                        self.finalize_attachments()
                        self.notify_users()
                        return self.response()
                    else:
                        self.message = Message(form.non_field_errors()[0],
                                               messages.ERROR)
            else:
                form = self.form_type(request=request,
                                      forum=self.forum,
                                      thread=self.thread,
                                      initial=self.form_initial_data())
        except (Forum.DoesNotExist, Thread.DoesNotExist, Post.DoesNotExist):
            return error404(request)
        except ACLError403 as e:
            return error403(request, unicode(e))
        except ACLError404 as e:
            return error404(request, unicode(e))

        return render_to_response('%ss/posting.html' % self.type_prefix,
                                  self._template_vars({
                                      'action':
                                      self.action,
                                      'attachments':
                                      self.attachments,
                                      'attachments_types':
                                      AttachmentType.objects.all_types(),
                                      'attachments_removed':
                                      self.attachments_removed,
                                      'attachments_number':
                                      self.user_attachments,
                                      'message':
                                      self.message,
                                      'forum':
                                      self.forum,
                                      'thread':
                                      self.thread,
                                      'quote':
                                      self.quote,
                                      'post':
                                      self.post,
                                      'parents':
                                      self.parents,
                                      'preview':
                                      post_preview,
                                      'form':
                                      form,
                                      'emojis':
                                      emojis(),
                                  }),
                                  context_instance=RequestContext(request))
Ejemplo n.º 4
0
    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 = ''
        form = None

        try:
            self._type_available()
            self._set_context()
            self.check_forum_type()
            self._check_permissions()
            if request.method == 'POST':
                # Create correct form instance
                if self.allow_quick_reply and 'quick_reply' in request.POST:
                    form = QuickReplyForm(request.POST, request=request)
                if not form or 'preview' in request.POST or not form.is_valid():
                    # Override "quick reply" form with full one
                    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)
                
                # Handle specific submit
                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()
                        self.after_form(form)
                        self.notify_users()
                        return self.response()
                    else:
                        self.message = Message(form.non_field_errors()[0], 'error')
            else:
                form = self.form_type(request=request, forum=self.forum, thread=self.thread, initial=self.form_initial_data())
        except (Forum.DoesNotExist, Thread.DoesNotExist, Post.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(('%ss/posting.html' % self.type_prefix),
                                                self.template_vars({
                                                 'type_prefix': self.type_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));
Ejemplo n.º 5
0
    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 = ''
        form = None

        try:
            self._type_available()
            self._set_context()
            self.check_forum_type()
            self._check_permissions()
            request.block_flood_requests = self.block_flood_requests
            self.make_attachments_token()
            self.fetch_attachments()
            if request.method == 'POST':
                # Create correct form instance
                if self.allow_quick_reply and 'quick_reply' in request.POST:
                    form = QuickReplyForm(request.POST, request=request)
                if not form or 'preview' in request.POST or not form.is_valid():
                    # Override "quick reply" form with full one
                    try:
                        form = self.form_type(request.POST, request.FILES, request=request, forum=self.forum, thread=self.thread)
                    except AttributeError:
                        form = self.form_type(request.POST, request=request, forum=self.forum, thread=self.thread)
                # Handle specific submit
                if list(set(request.POST.keys()) & set(('preview', 'upload', 'remove_attachment', 'restore_attachment'))):
                    form.empty_errors()
                    if form['post'].value():
                        md, post_preview = post_markdown(form['post'].value())
                    else:
                        md, post_preview = None, None
                    if 'upload' in request.POST:
                        try:
                            uploaded_file = form['new_file'].value()
                        except KeyError:
                            uploaded_file = None
                        self._upload_file(uploaded_file)
                    if 'remove_attachment' in request.POST:
                        try:
                            self.remove_attachment(int(request.POST.get('remove_attachment')))
                        except ValueError:
                            self.message = Message(_("Requested attachment could not be found."), messages.ERROR)
                    if 'restore_attachment' in request.POST:
                        try:
                            self.restore_attachment(int(request.POST.get('restore_attachment')))
                        except ValueError:
                            self.message = Message(_("Requested attachment could not be found."), messages.ERROR)
                else:
                    if form.is_valid():
                        self.post_form(form)
                        self.watch_thread()
                        self.after_form(form)
                        self.finalize_attachments()
                        self.notify_users()
                        return self.response()
                    else:
                        self.message = Message(form.non_field_errors()[0], messages.ERROR)
            else:
                form = self.form_type(request=request, forum=self.forum, thread=self.thread, initial=self.form_initial_data())
        except (Forum.DoesNotExist, Thread.DoesNotExist, Post.DoesNotExist):
            return error404(request)
        except ACLError403 as e:
            return error403(request, unicode(e))
        except ACLError404 as e:
            return error404(request, unicode(e))

        return render_to_response('%ss/posting.html' % self.type_prefix,
                                  self._template_vars({
                                        'action': self.action,
                                        'attachments': self.attachments,
                                        'attachments_types': AttachmentType.objects.all_types(),
                                        'attachments_removed': self.attachments_removed,
                                        'attachments_number': self.user_attachments,
                                        'message': self.message,
                                        'forum': self.forum,
                                        'thread': self.thread,
                                        'quote': self.quote,
                                        'post': self.post,
                                        'parents': self.parents,
                                        'preview': post_preview,
                                        'form': form,
                                        'emojis': emojis(),
                                      }),
                                  context_instance=RequestContext(request));