def view_ad(url): room = Room.query.filter_by(urlname=url).first() if not room: abort(404) if room.dead or get_days_ago(room.created_at) > OLD_DAYS.days: abort(404) occupied = Occupied.query.filter_by(space=room.occupieds).order_by("created_at").first() if occupied and get_days_ago(occupied.created_at) > OCCUPIED_DAYS.days: abort(404) # URL is okay. Show the ad. comments = Comment.query.filter_by(commentspace=room.comments, parent=None).order_by("created_at").all() commentform = CommentForm() delcommentform = DeleteCommentForm() if request.method == "POST": if request.form.get("form.id") == "newcomment" and commentform.validate(): if commentform.edit_id.data: comment = Comment.query.get(int(commentform.edit_id.data)) if comment: if comment.user == g.user: comment.message = commentform.message.data flash("Your comment has been edited", category="info") else: flash("You can only edit your own comments", category="info") else: flash("No such comment", category="error") else: comment = Comment(user=g.user, commentspace=room.comments, message=commentform.message.data) if commentform.parent_id.data: parent = Comment.query.get(int(commentform.parent_id.data)) if parent and parent.commentspace == room.comments: comment.parent = parent room.comments.count += 1 db.session.add(comment) flash("Your comment has been posted", category="success") db.session.commit() # Redirect despite this being the same page because HTTP 303 is required to not break # the browser Back button return redirect(url_for("view_ad", url=room.urlname) + "#c" + str(comment.id), code=303) elif request.form.get("form.id") == "delcomment" and delcommentform.validate(): comment = Comment.query.get(int(delcommentform.comment_id.data)) if comment: if comment.user == g.user: comment.delete() room.comments.count -= 1 db.session.commit() flash("Your comment was deleted.", category="success") else: flash("You did not post that comment.", category="error") else: flash("No such comment.", category="error") return redirect(url_for("view_ad", url=room.urlname), code=303) return render_template( "room.html", room=room, comments=comments, commentform=commentform, delcommentform=delcommentform )
def viewsession(name, slug): space = ProposalSpace.query.filter_by(name=name).first() if not space: abort(404) try: proposal_id = int(slug.split('-')[0]) except ValueError: abort(404) proposal = Proposal.query.get(proposal_id) if not proposal: abort(404) if proposal.proposal_space != space: return redirect(url_for('viewsession', name=proposal.proposal_space.name, slug=proposal.urlname), code=301) if slug != proposal.urlname: return redirect(url_for('viewsession', name=proposal.proposal_space.name, slug=proposal.urlname), code=301) # URL is okay. Show the proposal. comments = sorted(Comment.query.filter_by(commentspace=proposal.comments, parent=None).order_by('created_at').all(), key=lambda c: c.votes.count, reverse=True) commentform = CommentForm() delcommentform = DeleteCommentForm() if request.method == 'POST': if request.form.get('form.id') == 'newcomment' and commentform.validate(): if commentform.edit_id.data: comment = Comment.query.get(int(commentform.edit_id.data)) if comment: if comment.user == g.user: comment.message = commentform.message.data comment.message_html = markdown(comment.message) comment.edited_at = datetime.utcnow() flash("Your comment has been edited", "info") else: flash("You can only edit your own comments", "info") else: flash("No such comment", "error") else: comment = Comment(user=g.user, commentspace=proposal.comments, message=commentform.message.data) if commentform.parent_id.data: parent = Comment.query.get(int(commentform.parent_id.data)) if parent and parent.commentspace == proposal.comments: comment.parent = parent comment.message_html = markdown(comment.message) proposal.comments.count += 1 comment.votes.vote(g.user) # Vote for your own comment db.session.add(comment) flash("Your comment has been posted", "info") db.session.commit() # Redirect despite this being the same page because HTTP 303 is required to not break # the browser Back button return redirect(url_for('viewsession', name=space.name, slug=proposal.urlname) + "#c" + str(comment.id), code=303) elif request.form.get('form.id') == 'delcomment' and delcommentform.validate(): comment = Comment.query.get(int(delcommentform.comment_id.data)) if comment: if comment.user == g.user: comment.delete() proposal.comments.count -= 1 db.session.commit() flash("Your comment was deleted.", "info") else: flash("You did not post that comment.", "error") else: flash("No such comment.", "error") return redirect(url_for('viewsession', name=space.name, slug=proposal.urlname), code=303) return render_template('proposal.html', space=space, proposal=proposal, comments=comments, commentform=commentform, delcommentform=delcommentform, breadcrumbs=[(url_for('viewspace', name=space.name), space.title)])
def viewsession(name, slug): space = ProposalSpace.query.filter_by(name=name).first() if not space: abort(404) try: proposal_id = int(slug.split('-')[0]) except ValueError: abort(404) proposal = Proposal.query.get(proposal_id) if not proposal: abort(404) if proposal.proposal_space != space: return redirect(url_for('viewsession', name=proposal.proposal_space.name, slug=proposal.urlname), code=301) if slug != proposal.urlname: return redirect(url_for('viewsession', name=proposal.proposal_space.name, slug=proposal.urlname), code=301) # URL is okay. Show the proposal. comments = sorted( Comment.query.filter_by(commentspace=proposal.comments, parent=None).order_by('created_at').all(), key=lambda c: c.votes.count, reverse=True) commentform = CommentForm() commentform.message.flags.markdown = True delcommentform = DeleteCommentForm() if request.method == 'POST': if request.form.get( 'form.id') == 'newcomment' and commentform.validate(): send_mail_info = [] if commentform.edit_id.data: comment = Comment.query.get(int(commentform.edit_id.data)) if comment: if comment.user == g.user: comment.message = commentform.message.data comment.message_html = markdown(comment.message) comment.edited_at = datetime.utcnow() flash("Your comment has been edited", "info") else: flash("You can only edit your own comments", "info") else: flash("No such comment", "error") else: comment = Comment(user=g.user, commentspace=proposal.comments, message=commentform.message.data) if commentform.parent_id.data: parent = Comment.query.get(int(commentform.parent_id.data)) if parent.user.email: if parent.user == proposal.user: # check if parent comment & proposal owner are same if not g.user == parent.user: # check if parent comment is by proposal owner send_mail_info.append({ 'to': proposal.user.email or proposal.email, 'subject': "%s Funnel:%s" % (name, proposal.title), 'template': 'proposal_comment_reply_email.md' }) else: # send mail to parent comment owner & proposal owner if not parent.user == g.user: send_mail_info.append({ 'to': parent.user.email, 'subject': "%s Funnel:%s" % (name, proposal.title), 'template': 'proposal_comment_to_proposer_email.md' }) if not proposal.user == g.user: send_mail_info.append({ 'to': proposal.user.email or proposal.email, 'subject': "%s Funnel:%s" % (name, proposal.title), 'template': 'proposal_comment_email.md' }) if parent and parent.commentspace == proposal.comments: comment.parent = parent else: # for top level comment if not proposal.user == g.user: send_mail_info.append({ 'to': proposal.user.email or proposal.email, 'subject': "%s Funnel:%s" % (name, proposal.title), 'template': 'proposal_comment_email.md' }) comment.message_html = markdown(comment.message) proposal.comments.count += 1 comment.votes.vote(g.user) # Vote for your own comment db.session.add(comment) flash("Your comment has been posted", "info") send_comment_mail(proposal, comment) db.session.commit() to_redirect = url_for('viewsession', name=space.name, slug=proposal.urlname, _external=True) + "#c" + str(comment.id) for item in send_mail_info: email_body = render_template(item.pop('template'), proposal=proposal, comment=comment, link=to_redirect) send_mail(sender=None, body=email_body, **item) # Redirect despite this being the same page because HTTP 303 is required to not break # the browser Back button return redirect(to_redirect, code=303) elif request.form.get( 'form.id') == 'delcomment' and delcommentform.validate(): comment = Comment.query.get(int(delcommentform.comment_id.data)) if comment: if comment.user == g.user: comment.delete() proposal.comments.count -= 1 db.session.commit() flash("Your comment was deleted.", "info") else: flash("You did not post that comment.", "error") else: flash("No such comment.", "error") return redirect(url_for('viewsession', name=space.name, slug=proposal.urlname), code=303) links = [ Markup(url_re.sub(urllink, unicode(escape(l)))) for l in proposal.links.replace('\r\n', '\n').split('\n') if l ] confirmform = ConfirmSessionForm() return render_template('proposal.html', space=space, proposal=proposal, comments=comments, commentform=commentform, delcommentform=delcommentform, breadcrumbs=[(url_for('viewspace', name=space.name), space.title)], links=links, confirmform=confirmform)
def viewsession(name, slug): space = ProposalSpace.query.filter_by(name=name).first() if not space: abort(404) try: proposal_id = int(slug.split('-')[0]) except ValueError: abort(404) proposal = Proposal.query.get(proposal_id) if not proposal: abort(404) if proposal.proposal_space != space: return redirect(url_for('viewsession', name=proposal.proposal_space.name, slug=proposal.urlname), code=301) if slug != proposal.urlname: return redirect(url_for('viewsession', name=proposal.proposal_space.name, slug=proposal.urlname), code=301) # URL is okay. Show the proposal. comments = sorted(Comment.query.filter_by(commentspace=proposal.comments, parent=None).order_by('created_at').all(), key=lambda c: c.votes.count, reverse=True) commentform = CommentForm() commentform.message.flags.markdown = True delcommentform = DeleteCommentForm() if request.method == 'POST': if request.form.get('form.id') == 'newcomment' and commentform.validate(): send_mail_info = [] if commentform.edit_id.data: comment = Comment.query.get(int(commentform.edit_id.data)) if comment: if comment.user == g.user: comment.message = commentform.message.data comment.message_html = markdown(comment.message) comment.edited_at = datetime.utcnow() flash("Your comment has been edited", "info") else: flash("You can only edit your own comments", "info") else: flash("No such comment", "error") else: comment = Comment(user=g.user, commentspace=proposal.comments, message=commentform.message.data) if commentform.parent_id.data: parent = Comment.query.get(int(commentform.parent_id.data)) if parent.user.email: if parent.user == proposal.user: # check if parent comment & proposal owner are same if not g.user == parent.user: # check if parent comment is by proposal owner send_mail_info.append({'to': proposal.user.email or proposal.email, 'subject': "%s Funnel:%s" % (name, proposal.title), 'template': 'proposal_comment_reply_email.md'}) else: # send mail to parent comment owner & proposal owner if not parent.user == g.user: send_mail_info.append({'to': parent.user.email, 'subject': "%s Funnel:%s" % (name, proposal.title), 'template': 'proposal_comment_to_proposer_email.md'}) if not proposal.user == g.user: send_mail_info.append({'to': proposal.user.email or proposal.email, 'subject': "%s Funnel:%s" % (name, proposal.title), 'template': 'proposal_comment_email.md'}) if parent and parent.commentspace == proposal.comments: comment.parent = parent else: # for top level comment if not proposal.user == g.user: send_mail_info.append({'to': proposal.user.email or proposal.email, 'subject': "%s Funnel:%s" % (name, proposal.title), 'template': 'proposal_comment_email.md'}) comment.message_html = markdown(comment.message) proposal.comments.count += 1 comment.votes.vote(g.user) # Vote for your own comment db.session.add(comment) flash("Your comment has been posted", "info") db.session.commit() to_redirect = url_for('viewsession', name=space.name, slug=proposal.urlname, _external=True) + "#c" + str(comment.id) for item in send_mail_info: email_body = render_template(item.pop('template'), proposal=proposal, comment=comment, link=to_redirect) send_mail(sender=None, body=email_body, **item) # Redirect despite this being the same page because HTTP 303 is required to not break # the browser Back button return redirect(to_redirect, code=303) elif request.form.get('form.id') == 'delcomment' and delcommentform.validate(): comment = Comment.query.get(int(delcommentform.comment_id.data)) if comment: if comment.user == g.user: comment.delete() proposal.comments.count -= 1 db.session.commit() flash("Your comment was deleted.", "info") else: flash("You did not post that comment.", "error") else: flash("No such comment.", "error") return redirect(url_for('viewsession', name=space.name, slug=proposal.urlname), code=303) links = [Markup(url_re.sub(urllink, unicode(escape(l)))) for l in proposal.links.replace('\r\n', '\n').split('\n') if l] confirmform = ConfirmSessionForm() return render_template('proposal.html', space=space, proposal=proposal, comments=comments, commentform=commentform, delcommentform=delcommentform, breadcrumbs=[(url_for('viewspace', name=space.name), space.title)], links=links, confirmform=confirmform)