def change_comment(self, request, id, action): comment = Comment.query.get(id) if action in ("hide", "restore"): message = { "hide": _(u"Do you really want to hide the comment?"), "restore": _(u"Do you really want to restore the comment?"), } if confirm_action(request, message[action], "news/edit_comment", id=id, action=action): comment.deleted = action == "hide" db.session.commit() request.flash( _(u"The comment has been hidden") if action == "hide" else _(u"The comment has been restored") ) return redirect_to(comment) return redirect_to(comment.article) # action == 'edit' form = EditCommentForm(request.form) if form.validate_on_submit(): if form.validate(): comment.text = form.text.data db.session.commit() request.flash(_(u"The comment was saved"), True) return redirect_to(comment) else: form.text.data = comment.text return {"comment": comment, "form": form}
def change_comment(self, request, id, action): comment = Comment.query.get(id) if action in ('hide', 'restore'): message = { 'hide': _(u'Do you really want to hide the comment?'), 'restore': _(u'Do you really want to restore the comment?') } if confirm_action(request, message[action], 'news/edit_comment', id=id, action=action): comment.deleted = action == 'hide' db.session.commit() request.flash(_(u'The comment has been hidden') if \ action == 'hide' else _(u'The comment has been restored')) return redirect_to(comment) return redirect_to(comment.article) # action == 'edit' form = EditCommentForm(request.form) if form.validate_on_submit(): if form.validate(): comment.text = form.text.data db.session.commit() request.flash(_(u'The comment was saved'), True) return redirect_to(comment) else: form.text.data = comment.text return { 'comment': comment, 'form': form, }
def tags_delete(self, request, slug): message = _(u'Do you really want to delete this tag?') tag = Tag.query.filter_by(slug=slug).one() if confirm_action(request, message, 'portal/tag_delete', slug=slug): db.session.delete(tag) db.session.commit() request.flash(_(u'The tag “%s” was deleted successfully.' % tag.name)) return redirect_to('portal/tags') return redirect_to(tag)
def answer(self, request, entry_id, action=None): answer = Answer.query.get(entry_id) if action == 'edit': form = AnswerQuestionForm(request.form, text=answer.text) if form.validate_on_submit(): answer.text = form.text.data db.session.commit() return redirect_to(answer) return {'form': form} else: kwargs = {'_anchor': 'answer-%s' % answer.id} return redirect_to(answer.question, **kwargs)
def answer(self, request, entry_id, action=None): answer = Answer.query.get(entry_id) if action == 'edit': form = AnswerQuestionForm(request.form, text=answer.text) if form.validate_on_submit(): answer.text = form.text.data db.session.commit() return redirect_to(answer) return { 'form': form } else: kwargs = {'_anchor': 'answer-%s' % answer.id} return redirect_to(answer.question, **kwargs)
def articles_delete(self, request, slug): article = Article.query.filter_by(slug=slug).one() if 'cancel' in request.form: request.flash(_(u'Action canceled')) elif request.method in ('POST', 'PUT') and 'confirm' in request.form: db.session.delete(article) db.session.commit() request.flash(_(u'The article “%s” was deleted successfully.' % article.title)) return redirect_to('news/articles') else: request.flash(render_template('news/admin/article_delete.html', { 'article': article }), html=True) return redirect_to(article, action='edit')
def ask(self, request, forum=None): tags = [] if request.args.get('tags'): tags = ifilter(bool, (Tag.query.public().filter_by(slug=t).one() \ for t in request.args.get('tags').split())) elif forum: forum = Forum.query.filter_by(slug=forum).one() tags = forum.tags form = AskQuestionForm(request.form, tags=tags) if form.validate_on_submit(): question = Question( title=form.title.data, author=request.user, text=form.text.data, tags=form.tags.data ) db.session.commit() return redirect_to(question) return { 'forum': forum, 'tags': tags, 'form': form }
def vote(self, request, entry_id, action): entry = ForumEntry.query.get(entry_id) if entry.author == request.user: raise Forbidden v = Vote.query.filter_by(entry=entry, user=request.user).first() args = { 'up': { 'score': +1 }, 'down': { 'score': -1 }, 'revoke': { 'score': 0 }, 'favorite': { 'favorite': True }, 'nofavorite': { 'favorite': False } }[action] if not v: args.update({ 'score': args.get('score', 0), 'user': request.user, }) v = Vote(**args) v.entry = entry else: for key, a in args.iteritems(): setattr(v, key, a) db.session.commit() return redirect_to(entry)
def edit_forum(self, request, forum=None): if forum: forum = Forum.query.filter_by(slug=forum).first() initial = model_to_dict(forum) else: forum = None initial = {} form = EditForumForm(request.form, **initial) if form.validate_on_submit(): if forum: forum = update_model( forum, form, ('name', 'slug', 'parent', 'description', 'tags')) else: forum = Forum(name=form.name.data, slug=form.slug.data, parent=form.parent.data, description=form.description.data, tags=form.tags.data) db.session.commit() return redirect_to('forum/index') return { 'forum': forum, 'form': form, }
def detail(self, request, slug): article = Article.query.filter_by(slug=slug).one() if article.hidden: #TODO: ACL Check request.flash(_(u'This article is hidden'), False) if article.comments_enabled: form = EditCommentForm(request.form) if form.validate_on_submit(): if form.data.get('comment_id', None): comment = Comment.query.get(form.comment_id.data) comment.text = form.text.data request.flash(_(u'The comment was successfully edited'), True) else: comment = Comment(text=form.text.data, author=request.user) article.comments.append(comment) Subscription.new(comment, 'news.comment.new') request.flash(_(u'Your comment was successfully created'), True) db.session.commit() return redirect_to(comment) else: form = EditCommentForm() # increase counters article.touch() comments = list(article.comments.options(db.joinedload('author'))) Subscription.accessed(request.user, object=article, subject=article) return {'article': article, 'comments': comments, 'form': form}
def detail(self, request, slug): article = Article.query.filter_by(slug=slug).one() if article.hidden: # TODO: ACL Check request.flash(_(u"This article is hidden"), False) if article.comments_enabled: form = EditCommentForm(request.form) if form.validate_on_submit(): if form.data.get("comment_id", None): comment = Comment.query.get(form.comment_id.data) comment.text = form.text.data request.flash(_(u"The comment was successfully edited"), True) else: comment = Comment(text=form.text.data, author=request.user) article.comments.append(comment) Subscription.new(comment, "news.comment.new") request.flash(_(u"Your comment was successfully created"), True) db.session.commit() return redirect_to(comment) else: form = EditCommentForm() # increase counters article.touch() comments = list(article.comments.options(db.joinedload("author"))) Subscription.accessed(request.user, object=article, subject=article) return {"article": article, "comments": comments, "form": form}
def index(self, request): form = AddPasteForm(request.form) if form.validate_on_submit(): e = PasteEntry(text=form.text.data, language=form.language.data or None, title=form.title.data, author=request.user) if form.parent.data: e.parent_id = form.parent.data db.session.commit() return redirect_to(e) parent_id = request.args.get('reply_to', None) if parent_id is not None and parent_id.isdigit(): parent = PasteEntry.query.get(int(parent_id)) form = AddPasteForm( **{ 'title': parent.title, 'language': parent.language, 'text': parent.text, 'parent': parent.id }) return { 'form': form, }
def index(self, request): form = AddPasteForm(request.form) if form.validate_on_submit(): e = PasteEntry(text=form.text.data, language=form.language.data or None, title=form.title.data, author=request.user) if form.parent.data: e.parent_id = form.parent.data db.session.commit() return redirect_to(e) parent_id = request.args.get('reply_to', None) if parent_id is not None and parent_id.isdigit(): parent = PasteEntry.query.get(int(parent_id)) form = AddPasteForm(**{ 'title': parent.title, 'language': parent.language, 'text': parent.text, 'parent': parent.id }) return { 'form': form, }
def edit_forum(self, request, forum=None): if forum: forum = Forum.query.filter_by(slug=forum).first() initial = model_to_dict(forum) else: forum = None initial = {} form = EditForumForm(request.form, **initial) if form.validate_on_submit(): if forum: forum = update_model(forum, form, ('name', 'slug', 'parent', 'description', 'tags')) else: forum = Forum( name=form.name.data, slug=form.slug.data, parent=form.parent.data, description=form.description.data, tags=form.tags.data ) db.session.commit() return redirect_to('forum/index') return { 'forum': forum, 'form': form, }
def index(self, request): tags = [] if request.args.get('tags'): tags = ifilter(bool, (Tag.query.public().filter_by(name=t).one() \ for t in request.args.get('tags').split())) form = AddEventForm(request.form) if form.validate_on_submit(): #: Create the event object e = Event(title=form.title.data, text=form.text.data, author=request.user, start_date=form.start.data, end_date=form.end.data, tags=form.tags.data, discussion_question_id=None, info_question_id=None) db.session.commit() #: Check for creating a question-object for an event discussion if form.discussion_question.data: q_discussion = Question( title=u'[Event discussion] %s' % form.title.data, author=request.user, text=u'This is the discussion for the event [%s "%s"]' % (href(e, _external=True), form.title.data), tags=form.tags.data) else: q_discussion = None #: Check for creating a question-object an event information if form.info_question.data: q_info = Question( title=u'[Event information] %s' % form.title.data, author=request.user, text= u'This is the information topic for the event [%s "%s"]' % (href(e, _external=True), form.title.data), tags=form.tags.data) else: q_info = None db.session.commit() if q_discussion: e.discussion_question_id = q_discussion.id if q_info: e.info_question_id = q_info.id db.session.commit() return redirect_to(e) return { 'form': form, }
def index(self, request): tags = [] if request.args.get('tags'): tags = ifilter(bool, (Tag.query.public().filter_by(name=t).one() \ for t in request.args.get('tags').split())) form = AddEventForm(request.form) if form.validate_on_submit(): #: Create the event object e = Event(title=form.title.data, text=form.text.data, author=request.user, start_date=form.start.data, end_date=form.end.data, tags=form.tags.data, discussion_question_id = None, info_question_id = None) db.session.commit() #: Check for creating a question-object for an event discussion if form.discussion_question.data: q_discussion = Question(title=u'[Event discussion] %s' % form.title.data, author=request.user, text=u'This is the discussion for the event [%s "%s"]' % (href(e, _external=True), form.title.data), tags=form.tags.data) else: q_discussion = None #: Check for creating a question-object an event information if form.info_question.data: q_info = Question(title=u'[Event information] %s' % form.title.data, author=request.user, text=u'This is the information topic for the event [%s "%s"]' % (href(e, _external=True), form.title.data), tags=form.tags.data) else: q_info = None db.session.commit() if q_discussion: e.discussion_question_id = q_discussion.id if q_info: e.info_question_id = q_info.id db.session.commit() return redirect_to(e) return { 'form': form, }
def edit_paste(self, request, id): entry = PasteEntry.query.get(id) form = EditPasteForm( request.form, **model_to_dict(entry, exclude=('id', 'author_id'))) if form.validate_on_submit(): entry = update_model( entry, form, ('text', 'language', 'title', 'author', 'hidden')) db.session.commit() return redirect_to(entry) return { 'paste': entry, 'form': form, }
def tags(self, request): cloud, more = Tag.query.public().get_cloud() if request.method in ('POST', 'PUT'): # the user choosed a tag by manually entered name name = request.form.get('tag') tag = Tag.query.filter_by(name=name).first() if tag is not None: return redirect_to('portal/tag', slug=tag.slug) request.flash(_(u'The tag “%s” does not exist' % name), False) return { 'tag_cloud': cloud, 'tag_names': [t['name'] for t in cloud] }
def edit_paste(self, request, id): entry = PasteEntry.query.get(id) form = EditPasteForm(request.form, **model_to_dict( entry, exclude=('id', 'author_id') )) if form.validate_on_submit(): entry = update_model(entry, form, ('text', 'language', 'title', 'author', 'hidden')) db.session.commit() return redirect_to(entry) return { 'paste': entry, 'form': form, }
def articles_edit(self, request, slug=None): new = slug is None if new: article, data = Article(), {'tags': []} else: article = Article.query.filter_by(slug=slug).one() data = model_to_dict(article, exclude=('slug')) form = EditArticleForm(request.form, **data) if 'delete' in request.form: return redirect_to('news/article_delete', slug=article.slug) elif form.validate_on_submit(): article = update_model(article, form, ('pub_date', 'updated', 'title', 'intro', 'text', 'public', 'tags', 'author')) db.session.commit() msg = slug and _(u'Updated article “%s”') \ or _(u'Created article “%s”') request.flash(msg % article.title, True) return redirect_to(article) return { 'form': form, 'article': article, }
def subscribe_articles(self, request, action): do = {"subscribe": Subscription.subscribe, "unsubscribe": Subscription.unsubscribe}[action] existed = do(request.user, ArticleSubscriptionType) msg = { "subscribe": [ _(u"You had already been subscribed before."), _(u"You have successfully been subscribed to " u"new News articles."), ], "unsubscribe": [ _(u"You had not been subscribed before."), _(u"You have successfully been unsubscribed from " u"new News articles."), ], } request.flash(msg[action][existed], True if not existed else None) return redirect_to("news/index")
def subscribe_comments(self, request, action, slug): do = {"subscribe": Subscription.subscribe, "unsubscribe": Subscription.unsubscribe}[action] article = Article.query.filter_by(slug=slug).one() existed = do(request.user, CommentSubscriptionType, article) msg = { "subscribe": [ _(u"You had already been subscribed before."), _(u"You have successfully been subscribed to " u"new comments on this article."), ], "unsubscribe": [ _(u"You had not been subscribed before."), _(u"You have successfully been unsubscribed from " u"new comments on this article."), ], } request.flash(msg[action][existed], True if not existed else None) return redirect_to(article)
def ask(self, request, forum=None): tags = [] if request.args.get('tags'): tags = ifilter(bool, (Tag.query.public().filter_by(slug=t).one() \ for t in request.args.get('tags').split())) elif forum: forum = Forum.query.filter_by(slug=forum).one() tags = forum.tags form = AskQuestionForm(request.form, tags=tags) if form.validate_on_submit(): question = Question(title=form.title.data, author=request.user, text=form.text.data, tags=form.tags.data) db.session.commit() return redirect_to(question) return {'forum': forum, 'tags': tags, 'form': form}
def subscribe_articles(self, request, action): do = { 'subscribe': Subscription.subscribe, 'unsubscribe': Subscription.unsubscribe, }[action] existed = do(request.user, ArticleSubscriptionType) msg = { 'subscribe': [ _(u'You had already been subscribed before.'), _(u'You have successfully been subscribed to ' u'new News articles.') ], 'unsubscribe': [ _(u'You had not been subscribed before.'), _(u'You have successfully been unsubscribed from ' u'new News articles.') ], } request.flash(msg[action][existed], True if not existed else None) return redirect_to('news/index')
def subscribe_comments(self, request, action, slug): do = { 'subscribe': Subscription.subscribe, 'unsubscribe': Subscription.unsubscribe, }[action] article = Article.query.filter_by(slug=slug).one() existed = do(request.user, CommentSubscriptionType, article) msg = { 'subscribe': [ _(u'You had already been subscribed before.'), _(u'You have successfully been subscribed to ' u'new comments on this article.') ], 'unsubscribe': [ _(u'You had not been subscribed before.'), _(u'You have successfully been unsubscribed from ' u'new comments on this article.') ], } request.flash(msg[action][existed], True if not existed else None) return redirect_to(article)
def tags_edit(self, request, slug=None): new = slug is None if new: tag, data = Tag(), {} else: tag = Tag.query.filter_by(slug=slug).one() data = model_to_dict(tag, exclude=('slug')) form = EditTagForm(request.form, **data) if 'delete' in request.form: return redirect_to('portal/tag_delete', slug=tag.slug) elif form.validate_on_submit(): tag = update_model(tag, form, ('name')) db.session.commit() if new: request.flash(_(u'Created tag “%s”' % tag.name), True) else: request.flash(_(u'Updated tag “%s”' % tag.name), True) return { 'form': form, 'tag': tag, }
def vote(self, request, entry_id, action): entry = ForumEntry.query.get(entry_id) if entry.author == request.user: raise Forbidden v = Vote.query.filter_by(entry=entry, user=request.user).first() args = { 'up': {'score': +1}, 'down': {'score': -1}, 'revoke': {'score': 0}, 'favorite': {'favorite': True}, 'nofavorite': {'favorite': False} }[action] if not v: args.update({ 'score': args.get('score', 0), 'user': request.user, }) v = Vote(**args) v.entry = entry else: for key, a in args.iteritems(): setattr(v, key, a) db.session.commit() return redirect_to(entry)
def posting(self, request, posting_id=None): entry = ForumEntry.query.get(posting_id) return redirect_to(entry)