123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- # -*- coding: utf-8 -*-
- """
- flaskbb.forum.forms
- ~~~~~~~~~~~~~~~~~~~
- It provides the forms that are needed for the forum views.
- :copyright: (c) 2014 by the FlaskBB Team.
- :license: BSD, see LICENSE for more details.
- """
- from flask_wtf import FlaskForm
- from wtforms import (TextAreaField, StringField, SelectMultipleField,
- BooleanField, SubmitField)
- from wtforms.validators import DataRequired, Optional, Length
- from flask_babelplus import lazy_gettext as _
- from flaskbb.forum.models import Topic, Post, Report, Forum
- from flaskbb.user.models import User
- class QuickreplyForm(FlaskForm):
- content = TextAreaField(_("Quick reply"), validators=[
- DataRequired(message=_("You cannot post a reply without content."))])
- submit = SubmitField(_("Reply"))
- def save(self, user, topic):
- post = Post(content=self.content.data)
- return post.save(user=user, topic=topic)
- class ReplyForm(FlaskForm):
- content = TextAreaField(_("Content"), validators=[
- DataRequired(message=_("You cannot post a reply without content."))])
- track_topic = BooleanField(_("Track this topic"), default=False,
- validators=[Optional()])
- submit = SubmitField(_("Reply"))
- preview = SubmitField(_("Preview"))
- def save(self, user, topic):
- post = Post(content=self.content.data)
- if self.track_topic.data:
- user.track_topic(topic)
- return post.save(user=user, topic=topic)
- class NewTopicForm(ReplyForm):
- title = StringField(_("Topic title"), validators=[
- DataRequired(message=_("Please choose a title for your topic."))])
- content = TextAreaField(_("Content"), validators=[
- DataRequired(message=_("You cannot post a reply without content."))])
- track_topic = BooleanField(_("Track this topic"), default=False,
- validators=[Optional()])
- submit = SubmitField(_("Post Topic"))
- preview = SubmitField(_("Preview"))
- def save(self, user, forum):
- topic = Topic(title=self.title.data)
- post = Post(content=self.content.data)
- if self.track_topic.data:
- user.track_topic(topic)
- return topic.save(user=user, forum=forum, post=post)
- class ReportForm(FlaskForm):
- reason = TextAreaField(_("Reason"), validators=[
- DataRequired(message=_("What is the reason for reporting this post?"))
- ])
- submit = SubmitField(_("Report post"))
- def save(self, user, post):
- report = Report(reason=self.reason.data)
- return report.save(post=post, user=user)
- class UserSearchForm(FlaskForm):
- search_query = StringField(_("Search"), validators=[
- DataRequired(), Length(min=3, max=50)
- ])
- submit = SubmitField(_("Search"))
- def get_results(self):
- query = self.search_query.data
- return User.query.whooshee_search(query)
- class SearchPageForm(FlaskForm):
- search_query = StringField(_("Criteria"), validators=[
- DataRequired(), Length(min=3, max=50)])
- search_types = SelectMultipleField(_("Content"), validators=[
- DataRequired()], choices=[('post', _('Post')), ('topic', _('Topic')),
- ('forum', _('Forum')), ('user', _('Users'))])
- submit = SubmitField(_("Search"))
- def get_results(self):
- # Because the DB is not yet initialized when this form is loaded,
- # the query objects cannot be instantiated in the class itself
- search_actions = {
- 'post': Post.query.whooshee_search,
- 'topic': Topic.query.whooshee_search,
- 'forum': Forum.query.whooshee_search,
- 'user': User.query.whooshee_search
- }
- query = self.search_query.data
- types = self.search_types.data
- results = {}
- for search_type in search_actions.keys():
- if search_type in types:
- results[search_type] = search_actions[search_type](query)
- return results
|