forms.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # -*- coding: utf-8 -*-
  2. """
  3. flaskbb.message.forms
  4. ~~~~~~~~~~~~~~~~~~~~~
  5. It provides the forms that are needed for the message views.
  6. :copyright: (c) 2014 by the FlaskBB Team.
  7. :license: BSD, see LICENSE for more details.
  8. """
  9. from flask_login import current_user
  10. from flask_wtf import Form
  11. from wtforms import StringField, TextAreaField, ValidationError, SubmitField
  12. from wtforms.validators import DataRequired
  13. from flask_babelplus import lazy_gettext as _
  14. from flaskbb.user.models import User
  15. from flaskbb.message.models import Conversation, Message
  16. class ConversationForm(Form):
  17. to_user = StringField(_("Recipient"), validators=[
  18. DataRequired(message=_("A valid username is required."))])
  19. subject = StringField(_("Subject"), validators=[
  20. DataRequired(message=_("A Subject is required."))])
  21. message = TextAreaField(_("Message"), validators=[
  22. DataRequired(message=_("A message is required."))])
  23. send_message = SubmitField(_("Start Conversation"))
  24. save_message = SubmitField(_("Save Conversation"))
  25. def validate_to_user(self, field):
  26. user = User.query.filter_by(username=field.data).first()
  27. if not user:
  28. raise ValidationError(_("The username you entered does not "
  29. "exist."))
  30. if user.id == current_user.id:
  31. raise ValidationError(_("You cannot send a PM to yourself."))
  32. def save(self, from_user, to_user, user_id, unread, as_draft=False,
  33. shared_id=None):
  34. conversation = Conversation(
  35. subject=self.subject.data,
  36. draft=as_draft,
  37. shared_id=shared_id,
  38. from_user_id=from_user,
  39. to_user_id=to_user,
  40. user_id=user_id,
  41. unread=unread
  42. )
  43. message = Message(message=self.message.data, user_id=from_user)
  44. return conversation.save(message=message)
  45. class MessageForm(Form):
  46. message = TextAreaField(_("Message"), validators=[
  47. DataRequired(message=_("A message is required."))])
  48. submit = SubmitField(_("Send Message"))
  49. def save(self, conversation, user_id, unread=False):
  50. """Saves the form data to the model.
  51. :param conversation: The Conversation object.
  52. :param user_id: The id from the user who sent the message.
  53. :param reciever: If the message should also be stored in the recievers
  54. inbox.
  55. """
  56. message = Message(message=self.message.data, user_id=user_id)
  57. if unread:
  58. conversation.unread = True
  59. conversation.save()
  60. return message.save(conversation)