Exemple #1
0
    def dispatch(self, request, *args, **kwargs):
        self.topic = self.get_topic(**kwargs)
        if not perms.may_access_topic(self.request, self.topic):
            raise PermissionDenied

        if request.GET.get('first-unread'):
            if request.user.is_authenticated():
                read_dates = []
                try:
                    read_dates.append(TopicReadTracker.objects.get(user=request.user, topic=self.topic).time_stamp)
                except TopicReadTracker.DoesNotExist:
                    pass
                try:
                    read_dates.append(ForumReadTracker.objects.get(user=request.user, forum=self.topic.forum).time_stamp)
                except ForumReadTracker.DoesNotExist:
                    pass

                read_date = read_dates and max(read_dates)
                if read_date:
                    try:
                        first_unread_topic = self.topic.posts.filter(created__gt=read_date).order_by('created', 'id')[0]
                    except IndexError:
                        first_unread_topic = self.topic.last_post
                else:
                    first_unread_topic = self.topic.head
                return HttpResponseRedirect(reverse('pybb:post', kwargs={'pk': first_unread_topic.id}))

        return super(TopicView, self).dispatch(request, *args, **kwargs)
Exemple #2
0
def add_subscription(request, topic_id): # VERIFIED
    topic = get_object_or_404(perms.filter_topics(request.user, Topic.objects.all()), pk=topic_id)
    if not perms.may_access_topic(request, topic):
        raise PermissionDenied
    if not perms.may_subscribe_topic(request.user, topic):
        raise PermissionDenied
    topic.subscribers.add(request.user)
    return HttpResponseRedirect(topic.get_absolute_url())
Exemple #3
0
 def get_topic(self, **kwargs):
     if 'pk' in kwargs:
         topic = get_object_or_404(Topic, pk=kwargs['pk'], post_count__gt=0)
     elif ('slug'and 'forum_slug'and 'category_slug') in kwargs:
         topic = get_object_or_404(
             Topic,
             slug=kwargs['slug'],
             forum__slug=kwargs['forum_slug'],
             forum__category__slug=kwargs['category_slug'],
             post_count__gt=0
             )
     else:
         raise Http404(_('This topic does not exists'))
     # hari
     if not perms.may_access_topic(self.request, topic):
         raise PermissionDenied
     return topic
Exemple #4
0
    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated():
            self.user = request.user
        else:
            if defaults.PYBB_ENABLE_ANONYMOUS_POST:
                self.user, new = User.objects.get_or_create(**{username_field: defaults.PYBB_ANONYMOUS_USERNAME})
            else:
                from django.contrib.auth.views import redirect_to_login
                return redirect_to_login(request.get_full_path())

        self.forum = None
        self.topic = None
        if 'forum_id' in kwargs:
            self.forum = get_object_or_404(perms.filter_forums(request, Forum.objects.all()), pk=kwargs['forum_id'])
            if not perms.may_access_forum(request, self.forum): # hari
                raise PermissionDenied
            if not perms.may_create_topic(self.user, self.forum):
                raise PermissionDenied
        elif 'topic_id' in kwargs:
            self.topic = get_object_or_404(perms.filter_topics(request.user, Topic.objects.all()), pk=kwargs['topic_id'])
            if not perms.may_access_topic(self.request, self.topic): # hari
                raise PermissionDenied
            if not perms.may_create_post(self.user, self.topic):
                raise PermissionDenied

            self.quote = ''
            if 'quote_id' in request.GET:
                try:
                    quote_id = int(request.GET.get('quote_id'))
                except TypeError:
                    raise Http404
                else:
                    post = get_object_or_404(Post, pk=quote_id)
                    profile = util.get_pybb_profile(post.user)
                    self.quote = util._get_markup_quoter(defaults.PYBB_MARKUP)(post.body, profile.get_display_name())

                if self.quote and request.is_ajax():
                    return HttpResponse(self.quote)
        return super(AddPostView, self).dispatch(request, *args, **kwargs)
Exemple #5
0
def topic_cancel_poll_vote(request, pk): # VERIFIED
    topic = get_object_or_404(Topic, pk=pk)
    if not perms.may_access_topic(request, topic):
        raise PermissionDenied
    PollAnswerUser.objects.filter(user=request.user, poll_answer__topic_id=topic.id).delete()
    return HttpResponseRedirect(topic.get_absolute_url())
Exemple #6
0
 def get_object(self):
     topic = super(TopicPollVoteView, self).get_object()
     if not perms.may_access_topic(self.request, topic):
         raise PermissionDenied
     return topic
Exemple #7
0
 def get_topic(self):
     topic = get_object_or_404(Topic, pk=self.kwargs['pk'])
     if not perms.may_access_topic(self.request, topic):
         raise PermissionDenied