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)
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))
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)
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))
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))
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))
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))
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
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