Esempio n. 1
0
    def post(self):

        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        answer_text = self.request.get("answer_text")
        video_key = self.request.get("video_key")
        question_key = self.request.get("question_key")

        video = db.get(video_key)
        question = db.get(question_key)

        if answer_text and video and question:
            answer = discussion_models.Feedback.insert_answer_for(
                answer_text, question, user_data)

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                answer.deleted = True
                answer.put()

            if not answer.deleted:
                notification.new_answer_for_video_question(
                    video, question, answer)

        self.redirect("/discussion/answers?question_key=%s" % question_key)
Esempio n. 2
0
    def post(self):
        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        comment_text = self.request.get("comment_text")
        comments_hidden = self.request.get("comments_hidden")
        video_key = self.request.get("video_key")
        video = db.get(video_key)

        if comment_text and video:
            if len(comment_text) > 300:
                comment_text = comment_text[
                    0:300]  # max comment length, also limited by client

            comment = discussion_models.Feedback(parent=user_data)
            comment.set_author(user_data)
            comment.content = comment_text
            comment.targets = [video.key()]
            comment.types = [discussion_models.FeedbackType.Comment]

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                comment.deleted = True

            comment.put()

        self.redirect(
            "/discussion/pagecomments?video_key=%s&page=0&comments_hidden=%s&sort_order=%s"
            % (video_key, comments_hidden, voting.VotingSortOrder.NewestFirst))
Esempio n. 3
0
    def post(self):

        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        answer_text = self.request.get("answer_text")
        video_key = self.request.get("video_key")
        question_key = self.request.get("question_key")

        video = db.get(video_key)
        question = db.get(question_key)

        if answer_text and video and question:
            answer = discussion_models.Feedback.insert_answer_for(answer_text,
                                                                  question,
                                                                  user_data)

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                answer.deleted = True
                answer.put()

            if not answer.deleted:
                notification.new_answer_for_video_question(video, question, answer)

        self.redirect("/discussion/answers?question_key=%s" % question_key)
Esempio n. 4
0
    def post(self):

        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        text = self.request.get("question_text")
        video_key = self.request.get("video_key")
        video = db.get(video_key)
        question_key = ""

        if text and video:
            if len(text) > 500:
                text = text[0:
                            500]  # max question length, also limited by client

            question = discussion_models.Feedback.insert_question_for(
                text, video, user_data)

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                question.deleted = True
                question.put()

            question_key = question.key()

        self.redirect(
            "/discussion/pagequestions?video_key=%s&qa_expand_key=%s" %
            (video_key, question_key))
Esempio n. 5
0
    def post(self):

        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        text = self.request.get("question_text")
        video_key = self.request.get("video_key")
        video = db.get(video_key)
        question_key = ""

        if text and video:
            if len(text) > 500:
                text = text[0:500] # max question length, also limited by client

            question = discussion_models.Feedback.insert_question_for(text,
                                                                      video,
                                                                      user_data)

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                question.deleted = True
                question.put()

            question_key = question.key()

        self.redirect("/discussion/pagequestions?video_key=%s&qa_expand_key=%s" % 
                (video_key, question_key))
Esempio n. 6
0
    def post(self):
        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        comment_text = self.request.get("comment_text")
        comments_hidden = self.request.get("comments_hidden")
        video_key = self.request.get("video_key")
        video = db.get(video_key)

        if comment_text and video:
            if len(comment_text) > 300:
                comment_text = comment_text[0:300] # max comment length, also limited by client

            comment = discussion_models.Feedback(parent=user_data)
            comment.set_author(user_data)
            comment.content = comment_text
            comment.targets = [video.key()]
            comment.types = [discussion_models.FeedbackType.Comment]

            if user_data.discussion_banned:
                # Hellbanned users' posts are automatically hidden
                comment.deleted = True

            comment.put()

        self.redirect("/discussion/pagecomments?video_key=%s&page=0&comments_hidden=%s&sort_order=%s" % 
                (video_key, comments_hidden, voting.VotingSortOrder.NewestFirst))
Esempio n. 7
0
    def post(self):
        user_data = user_models.UserData.current()

        if not util_discussion.is_post_allowed(user_data, self.request):
            return

        text = self.request.get("comment_text")
        comments_hidden = self.request.get("comments_hidden")
        video_key = self.request.get("video_key")
        video = db.get(video_key)

        if text and video:
            # Truncate comment to a maximum length of 300 characters
            # (which is limited by the client)
            text = text[:300]

            # Grab stats before putting the feedback in case of building stats
            # now and double-counting
            stats = discussion_models.UserDiscussionStats.get_or_build_for(
                user_data)

            comment = discussion_models.Feedback.insert_feedback(
                text, discussion_models.FeedbackType.Comment, video, user_data)

            stats.record(comment)
            stats.put()

        self.redirect(
            "/discussion/pagecomments?video_key=%s&page=0&"
            "comments_hidden=%s&sort_order=%s" %
            (video_key, comments_hidden, voting.VotingSortOrder.NewestFirst))
Esempio n. 8
0
def add_feedback(text, feedback_type, parent_key_or_id):
    """Add a question to a video, or an answer to a question.

    Returns a util_discussion.ClientFeedback entity for the added feedback, if
    successful, or None.

    Arguments:
        text: the desired feedback text property
        feedback_type: either FeedbackType.Question or FeedbackType.Answer
        parent_key_or_id: readable_id if adding a question, question_key if
                          adding an answer
    """
    user_data = user_models.UserData.current()
    if not util_discussion.is_post_allowed(user_data, None):
        return None

    if feedback_type == discussion_models.FeedbackType.Question:
        parent = video_models.Video.get_for_readable_id(parent_key_or_id)
    else:
        parent = db.get(parent_key_or_id)

    if parent and text:
        # TODO(drew): see if answers need to be truncated
        # Truncate feedback to a maximum length of 500 characters
        text = text[:500]

        # Grab stats before putting the feedback in case of building stats now
        # and double-counting
        stats = discussion_models.UserDiscussionStats.get_or_build_for(
            user_data)

        feedback = discussion_models.Feedback.insert_feedback(text,
            feedback_type, parent, user_data)

        stats.record(feedback)
        stats.put()

        voting.add_vote_expando_properties(feedback, {})
        return util_discussion.ClientFeedback.from_feedback(feedback,
            with_extra_vote_properties=True)

    return None
Esempio n. 9
0
def add_feedback(text, feedback_type, parent_key_or_id):
    """Add a question to a video, or an answer to a question.

    Returns a util_discussion.ClientFeedback entity for the added feedback, if
    successful, or None.

    Arguments:
        text: the desired feedback text property
        feedback_type: either FeedbackType.Question or FeedbackType.Answer
        parent_key_or_id: readable_id if adding a question, question_key if
                          adding an answer
    """
    user_data = user_models.UserData.current()
    if not util_discussion.is_post_allowed(user_data, None):
        return None

    if feedback_type == discussion_models.FeedbackType.Question:
        parent = video_models.Video.get_for_readable_id(parent_key_or_id)
    else:
        parent = db.get(parent_key_or_id)

    if parent and text:
        # TODO(drew): see if answers need to be truncated
        # Truncate feedback to a maximum length of 500 characters
        text = text[:500]

        # Grab stats before putting the feedback in case of building stats now
        # and double-counting
        stats = discussion_models.UserDiscussionStats.get_or_build_for(
            user_data)

        feedback = discussion_models.Feedback.insert_feedback(
            text, feedback_type, parent, user_data)

        stats.record(feedback)
        stats.put()

        voting.add_vote_expando_properties(feedback, {})
        return util_discussion.ClientFeedback.from_feedback(
            feedback, with_extra_vote_properties=True)

    return None