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 = users.get_current_user() if not user: self.redirect(users.create_login_url(self.request.uri)) return if not is_honeypot_empty(self.request): # Honeypot caught a spammer (in case this is ever public or spammers # have google accounts)! 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: if len(answer_text) > 500: answer_text = answer_text[0:500] # max answer length, also limited by client answer = models_discussion.Feedback() answer.author = user answer.content = answer_text answer.targets = [video.key(), question.key()] answer.types = [models_discussion.FeedbackType.Answer] db.put(answer) 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 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 make_answer(self, content, question, user_data): answer = discussion_models.Feedback.insert_answer_for( content, question, user_data) notification.new_answer_for_video_question(question.video(), question, answer) return answer
def make_answer(self, content, question, user_data): answer = discussion_models.Feedback.insert_answer_for(content, question, user_data) notification.new_answer_for_video_question(question.video(), question, answer) return answer
def post(self): user_data = models.UserData.current() if not user_data: self.redirect(util.create_login_url(self.request.uri)) return if not util_discussion.is_honeypot_empty(self.request): # Honeypot caught a spammer (in case this is ever public or spammers # have google accounts)! 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 = models_discussion.Feedback(parent=user_data) answer.set_author(user_data) answer.content = answer_text answer.targets = [video.key(), question.key()] answer.types = [models_discussion.FeedbackType.Answer] if user_data.discussion_banned: # Hellbanned users' posts are automatically hidden answer.deleted = True # We don't limit answer.content length, which means we're vulnerable to # RequestTooLargeErrors being thrown if somebody submits a POST over the GAE # limit of 1MB per entity. This is *highly* unlikely for a legitimate piece of feedback, # and we're choosing to crash in this case until someone legitimately runs into this. # See Issue 841. 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 = models.UserData.current() if not user_data: self.redirect(util.create_login_url(self.request.uri)) return if not util_discussion.is_honeypot_empty(self.request): # Honeypot caught a spammer (in case this is ever public or spammers # have google accounts)! 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 = models_discussion.Feedback(parent=user_data) answer.set_author(user_data) answer.content = answer_text answer.targets = [video.key(), question.key()] answer.types = [models_discussion.FeedbackType.Answer] if user_data.discussion_banned: # Hellbanned users' posts are automatically hidden answer.deleted = True # We don't limit answer.content length, which means we're vulnerable to # RequestTooLargeErrors being thrown if somebody submits a POST over the GAE # limit of 1MB per entity. This is *highly* unlikely for a legitimate piece of feedback, # and we're choosing to crash in this case until someone legitimately runs into this. # See Issue 841. answer.put() if not answer.deleted: notification.new_answer_for_video_question(video, question, answer) self.redirect("/discussion/answers?question_key=%s" % question_key)