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)
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())
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
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)
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())
def get_object(self): topic = super(TopicPollVoteView, self).get_object() if not perms.may_access_topic(self.request, topic): raise PermissionDenied return topic
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