示例#1
0
    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}
示例#2
0
    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,
        }
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
 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)
示例#6
0
 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')
示例#7
0
    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
        }
示例#8
0
 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)
示例#9
0
    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,
        }
示例#10
0
    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}
示例#11
0
    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}
示例#12
0
    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,
        }
示例#13
0
    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,
        }
示例#14
0
    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,
        }
示例#15
0
    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,
        }
示例#16
0
    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,
        }
示例#17
0
    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,
        }
示例#18
0
    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]
        }
示例#19
0
    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,
        }
示例#20
0
    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,
        }
示例#21
0
    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")
示例#22
0
    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)
示例#23
0
    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}
示例#24
0
    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')
示例#25
0
    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)
示例#26
0
    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,
        }
示例#27
0
 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)
示例#28
0
 def posting(self, request, posting_id=None):
     entry = ForumEntry.query.get(posting_id)
     return redirect_to(entry)
示例#29
0
 def posting(self, request, posting_id=None):
     entry = ForumEntry.query.get(posting_id)
     return redirect_to(entry)