123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- from datetime import datetime
- from flask import Blueprint, redirect, request, url_for, flash, abort
- from flask_login import login_required, current_user
- from flask_babelex import gettext as _
- from flaskbb.extensions import db
- from flaskbb.utils.settings import flaskbb_config
- from flaskbb.utils.helpers import render_template, format_quote
- from flaskbb.message.forms import ConversationForm, MessageForm
- from flaskbb.message.models import Conversation, Message
- from flaskbb.user.models import User
- message = Blueprint("message", __name__)
- @message.route("/")
- @message.route("/inbox")
- @login_required
- def inbox():
- page = request.args.get('page', 1, type=int)
- conversations = Conversation.query.\
- filter(
- Conversation.user_id == current_user.id,
- Conversation.draft == False,
- Conversation.trash == False
- ).\
- order_by(Conversation.id.asc()).\
- paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
- message_count = Conversation.query.\
- filter(Conversation.user_id == current_user.id).\
- count()
- return render_template("message/inbox.html", conversations=conversations,
- message_count=message_count)
- @message.route("/<int:conversation_id>/view", methods=["GET", "POST"])
- def view_conversation(conversation_id):
- conversation = Conversation.query.filter_by(
- id=conversation_id).first_or_404()
- if conversation.user_id != current_user.id:
-
-
- abort(404)
- form = MessageForm()
- if form.validate_on_submit():
- message_count = Conversation.query.\
- filter(Conversation.user_id == current_user.id).\
- count()
- if message_count >= flaskbb_config["MESSAGE_QUOTA"]:
- flash(_("You cannot send any messages anymore because you have"
- "reached your message limit."), "danger")
- return redirect(url_for("message.view_conversation",
- conversation_id=conversation.id))
- form.save(conversation=conversation, user_id=current_user.id,
- reciever=True)
- return redirect(url_for("message.view_conversation",
- conversation_id=conversation.id))
- return render_template("message/conversation.html",
- conversation=conversation, form=form)
- @message.route("/new", methods=["POST", "GET"])
- @login_required
- def new_conversation():
- form = ConversationForm()
- to_user = request.args.get("to_user")
- message_count = Conversation.query.\
- filter(Conversation.user_id == current_user.id).\
- count()
- if message_count >= flaskbb_config["MESSAGE_QUOTA"]:
- flash(_("You cannot send any messages anymore because you have"
- "reached your message limit."), "danger")
- return redirect(url_for("message.inbox"))
- if request.method == "POST":
- if "save_message" in request.form and form.validate():
- to_user = User.query.filter_by(username=form.to_user.data).first()
- form.save(from_user=current_user.id,
- to_user=to_user.id,
- user_id=current_user.id,
- unread=False,
- as_draft=True)
- flash(_("Message saved."), "success")
- return redirect(url_for("message.drafts"))
- if "send_message" in request.form and form.validate():
- to_user = User.query.filter_by(username=form.to_user.data).first()
-
- form.save(from_user=current_user.id,
- to_user=to_user.id,
- user_id=current_user.id,
- unread=False)
-
- form.save(from_user=current_user.id,
- to_user=to_user.id,
- user_id=to_user.id,
- unread=True)
- flash(_("Message sent."), "success")
- return redirect(url_for("message.sent"))
- else:
- form.to_user.data = to_user
- return render_template("message/message_form.html", form=form,
- title=_("Compose Message"))
- @message.route("/message/<int:message_id>/raw")
- @login_required
- def raw_message(message_id):
- message = Message.query.filter_by(id=message_id).first_or_404()
- if not (message.conversation.from_user_id == current_user.id or
- message.conversation.to_user_id == current_user.id):
- abort(404)
- return format_quote(username=message.user.username,
- content=message.message)
- @message.route("/<int:conversation_id>/edit", methods=["POST", "GET"])
- @login_required
- def edit_conversation(conversation_id):
- conversation = Conversation.query.filter_by(
- id=conversation_id).first_or_404()
- if conversation.user_id != current_user.id:
-
-
- abort(404)
- if not conversation.draft:
- flash(_("You cannot edit a sent message."), "danger")
- return redirect(url_for("message.inbox"))
- form = ConversationForm()
- if request.method == "POST":
- if "save_message" in request.form:
- to_user = User.query.filter_by(username=form.to_user.data).first()
- conversation.draft = False
- conversation.to_user = to_user.id
- conversation.save()
- flash(_("Message saved."), "success")
- return redirect(url_for("message.drafts"))
- if "send_message" in request.form and form.validate():
- to_user = User.query.filter_by(username=form.to_user.data).first()
-
- form.save(from_user=current_user.id,
- to_user=to_user.id,
- user_id=to_user.id,
- unread=True)
-
- conversation.draft = False
- conversation.to_user = to_user
- conversation.date_created = datetime.utcnow()
- conversation.save()
- flash(_("Message sent."), "success")
- return redirect(url_for("message.sent"))
- else:
- form.to_user.data = conversation.to_user.username
- form.subject.data = conversation.subject
- form.message.data = conversation.first_message
- return render_template("message/message_form.html", form=form,
- title=_("Edit Message"))
- @message.route("/sent")
- @login_required
- def sent():
- page = request.args.get('page', 1, type=int)
- conversations = Conversation.query.\
- filter(
- Conversation.user_id == current_user.id,
- Conversation.draft == False,
- Conversation.trash == False,
- db.not_(Conversation.to_user_id == current_user.id)
- ).\
- paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
- message_count = Conversation.query.\
- filter(Conversation.user_id == current_user.id).\
- count()
- return render_template("message/sent.html", conversations=conversations,
- message_count=message_count)
- @message.route("/draft")
- @login_required
- def drafts():
- page = request.args.get('page', 1, type=int)
- conversations = Conversation.query.\
- filter(
- Conversation.user_id == current_user.id,
- Conversation.draft == True,
- Conversation.trash == False
- ).\
- paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
- message_count = Conversation.query.\
- filter(Conversation.user_id == current_user.id).\
- count()
- return render_template("message/drafts.html", conversations=conversations,
- message_count=message_count)
- @message.route("/trash")
- @login_required
- def trash():
- page = request.args.get('page', 1, type=int)
- conversations = Conversation.query.\
- filter(
- Conversation.user_id == current_user.id,
- Conversation.trash == True,
- ).\
- paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
- message_count = Conversation.query.\
- filter(Conversation.user_id == current_user.id).\
- count()
- return render_template("message/trash.html", conversations=conversations,
- message_count=message_count)
|