forms.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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_babelex 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(_("To User"), validators=[
  18. DataRequired(message=_("A 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 doesn't exist"))
  29. if user.id == current_user.id:
  30. raise ValidationError(_("You cannot send a PM to yourself."))
  31. def save(self, from_user, to_user, user_id, unread, as_draft=False,
  32. shared_id=None):
  33. conversation = Conversation(
  34. subject=self.subject.data,
  35. draft=as_draft,
  36. shared_id=shared_id,
  37. from_user_id=from_user,
  38. to_user_id=to_user,
  39. user_id=user_id
  40. )
  41. message = Message(message=self.message.data)
  42. return conversation.save(message=message)
  43. class MessageForm(Form):
  44. message = TextAreaField(_("Message"), validators=[
  45. DataRequired(message=_("A Message is required."))])
  46. submit = SubmitField(_("Send Message"))
  47. def save(self, conversation, user_id, unread=False):
  48. """Saves the form data to the model.
  49. :param conversation: The Conversation object.
  50. :param user_id: The id from the user who sent the message.
  51. :param reciever: If the message should also be stored in the recievers
  52. inbox.
  53. """
  54. message = Message(message=self.message.data, user_id=user_id)
  55. if unread:
  56. conversation.unread = True
  57. conversation.save()
  58. return message.save(conversation)