forms.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. import logging
  10. from flask_login import current_user
  11. from flask_wtf import FlaskForm
  12. from wtforms import StringField, TextAreaField, ValidationError, SubmitField
  13. from wtforms.validators import DataRequired
  14. from flask_babelplus import lazy_gettext as _
  15. from flaskbb.user.models import User
  16. from flaskbb.message.models import Conversation, Message
  17. logger = logging.getLogger(__name__)
  18. class ConversationForm(FlaskForm):
  19. to_user = StringField(_("Recipient"), validators=[
  20. DataRequired(message=_("A valid username is required."))])
  21. subject = StringField(_("Subject"), validators=[
  22. DataRequired(message=_("A Subject is required."))])
  23. message = TextAreaField(_("Message"), validators=[
  24. DataRequired(message=_("A message is required."))])
  25. send_message = SubmitField(_("Start Conversation"))
  26. save_message = SubmitField(_("Save Conversation"))
  27. def validate_to_user(self, field):
  28. user = User.query.filter_by(username=field.data).first()
  29. if not user:
  30. raise ValidationError(_("The username you entered does not "
  31. "exist."))
  32. if user.id == current_user.id:
  33. raise ValidationError(_("You cannot send a PM to yourself."))
  34. def save(self, from_user, to_user, user_id, unread, as_draft=False,
  35. shared_id=None):
  36. conversation = Conversation(
  37. subject=self.subject.data,
  38. draft=as_draft,
  39. shared_id=shared_id,
  40. from_user_id=from_user,
  41. to_user_id=to_user,
  42. user_id=user_id,
  43. unread=unread
  44. )
  45. message = Message(message=self.message.data, user_id=from_user)
  46. return conversation.save(message=message)
  47. class MessageForm(FlaskForm):
  48. message = TextAreaField(_("Message"), validators=[
  49. DataRequired(message=_("A message is required."))])
  50. submit = SubmitField(_("Send Message"))
  51. def save(self, conversation, user_id, unread=False):
  52. """Saves the form data to the model.
  53. :param conversation: The Conversation object.
  54. :param user_id: The id from the user who sent the message.
  55. :param reciever: If the message should also be stored in the recievers
  56. inbox.
  57. """
  58. message = Message(message=self.message.data, user_id=user_id)
  59. if unread:
  60. conversation.unread = True
  61. conversation.save()
  62. return message.save(conversation)