forms.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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(subject=self.subject.data, draft=as_draft,
  34. shared_id=shared_id)
  35. message = Message(message=self.message.data, user_id=from_user)
  36. return conversation.save(message=message, from_user=from_user,
  37. to_user=to_user, user_id=user_id)
  38. class MessageForm(Form):
  39. message = TextAreaField(_("Message"), validators=[
  40. DataRequired(message=_("A Message is required."))])
  41. submit = SubmitField(_("Send Message"))
  42. def save(self, conversation, user_id, unread=False):
  43. """Saves the form data to the model.
  44. :param conversation: The Conversation object.
  45. :param user_id: The id from the user who sent the message.
  46. :param reciever: If the message should also be stored in the recievers
  47. inbox.
  48. """
  49. message = Message(message=self.message.data, user_id=user_id)
  50. if unread:
  51. conversation.unread = True
  52. conversation.save()
  53. return message.save(conversation)