Browse Source

Editing a PM is a works now.

Also includes some overall improvements for PMs.
sh4nks 11 years ago
parent
commit
7b96af32cf

+ 7 - 3
flaskbb/templates/message/drafts.html

@@ -1,3 +1,5 @@
+{% set page_title = "Drafts" %}
+
 {% extends "message/message_layout.html" %}
 {% block message_content %}
 <table class="table table-bordered">
@@ -13,10 +15,12 @@
         {% for message in messages %}
         <tr>
             <td><a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a></td>
-            <td><a href="{{ url_for('user.view_message', id=message.id) }}">{% if message.subject %}{{ message.subject }}{% else %}(No Subject){% endif %}</a></td>
+            <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{% if message.subject %}{{ message.subject }}{% else %}(No Subject){% endif %}</a></td>
             <td>{{ message.date_created|format_date('%d %B %Y') }}</td>
-            <td><a href="{{ url_for('user.delete_message', id=message.id) }}">Delete</a> |
-                <a href="{{ url_for('user.move_message', id=message.id) }}">Move</a></td>
+            <td>
+                <a href="{{ url_for('user.edit_message', message_id=message.id) }}">Edit</a> |
+                <a href="{{ url_for('user.move_message', message_id=message.id) }}">Delete</a>
+            </td>
         </tr>
         {% else %}
         <tr>

+ 8 - 3
flaskbb/templates/message/inbox.html

@@ -1,3 +1,5 @@
+{% set page_title = "Inbox" %}
+
 {% extends "message/message_layout.html" %}
 {% block message_content %}
 <table class="table table-bordered">
@@ -17,10 +19,13 @@
         {% else %}
             <td>[deleted]</td>
         {% endif %}
-            <td><a href="{{ url_for('user.view_message', id=message.id) }}">{{ message.subject }}</a></td>
+            <td>
+                <a href="{{ url_for('user.view_message', message_id=message.id) }}">
+                    {% if message.unread %}<strong>{{ message.subject }}</strong>{% else %}{{ message.subject }}{% endif %}
+                </a>
+            </td>
             <td>{{ message.date_created|time_since }}</td>
-            <td><a href="{{ url_for('user.delete_message', id=message.id) }}">Delete</a> |
-                <a href="{{ url_for('user.move_message', id=message.id) }}">Move</a></td>
+            <td><a href="{{ url_for('user.move_message', message_id=message.id) }}">Delete</a></td>
         </tr>
         {% else %}
         <tr>

+ 3 - 1
flaskbb/templates/message/new_message.html → flaskbb/templates/message/message_form.html

@@ -1,9 +1,11 @@
+{% set page_title = title %}
+
 {% extends theme("message/message_layout.html") %}
 
 {% block message_content %}
 {% from theme("macros.html") import horizontal_field %}
 <form class="form-horizontal" role="form" method="post" name="new">
-    <legend>Compose Message</legend>
+    <legend>{{ title }}</legend>
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.to_user)}}
     {{ horizontal_field(form.subject)}}

+ 4 - 3
flaskbb/templates/message/sent.html

@@ -1,3 +1,5 @@
+{% set page_title = "Sent Messages" %}
+
 {% extends theme("message/message_layout.html") %}
 {% block message_content %}
 <table class="table table-bordered">
@@ -17,10 +19,9 @@
         {% else %}
             <td>[deleted]</td>
         {% endif %}
-            <td><a href="{{ url_for('user.view_message', id=message.id) }}">{{ message.subject }}</a></td>
+            <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{{ message.subject }}</a></td>
             <td>{{ message.date_created|time_since }}</td>
-            <td><a href="{{ url_for('user.delete_message', id=message.id) }}">Delete</a> |
-                <a href="{{ url_for('user.move_message', id=message.id) }}">Move</a></td>
+            <td><a href="{{ url_for('user.move_message', message_id=message.id) }}">Delete</a></td>
         </tr>
         {% else %}
         <tr>

+ 7 - 2
flaskbb/templates/message/trash.html

@@ -1,3 +1,5 @@
+{% set page_title = "Trash" %}
+
 {% extends theme("message/message_layout.html") %}
 {% block message_content %}
 <table class="table table-bordered">
@@ -13,9 +15,12 @@
         {% for message in messages %}
         <tr>
             <td>{% if message.to_user %}<a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a>{% else %} (No User) {% endif %}</td>
-            <td><a href="{{ url_for('user.view_message', id=message.id) }}">{% if message.subject %}{{ message.subject }}{% else %}(No Subject){% endif %}</a></td>
+            <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{% if message.subject %}{{ message.subject }}{% else %}(No Subject){% endif %}</a></td>
             <td>{{ message.date_created|format_date }}</td>
-            <td><a href="{{ url_for('user.delete_message', id=message.id) }}">Delete</a></td>
+            <td>
+                <a href="{{ url_for('user.restore_message', message_id=message.id) }}">Restore</a> |
+                <a href="{{ url_for('user.delete_message', message_id=message.id) }}">Delete</a>
+            </td>
         </tr>
         {% else %}
         <tr>

+ 6 - 2
flaskbb/user/forms.py

@@ -98,7 +98,7 @@ class ChangeUserDetailsForm(Form):
         Optional(), Length(min=0, max=5000)])
 
 
-class NewMessage(Form):
+class NewMessageForm(Form):
     to_user = TextField("To User", validators=[
         Required(message="A username is required.")])
     subject = TextField("Subject", validators=[
@@ -109,7 +109,7 @@ class NewMessage(Form):
     def validate_to_user(self, field):
         user = User.query.filter_by(username=field.data).first()
         if not user:
-            raise ValidationError("The username you have entered doesn't exist")
+            raise ValidationError("The username you entered doesn't exist")
         if user.id == current_user.id:
             raise ValidationError("You cannot send a PM to yourself.")
 
@@ -122,3 +122,7 @@ class NewMessage(Form):
         if as_draft:
             return message.save(from_user, to_user, user_id, draft=True)
         return message.save(from_user, to_user, user_id)
+
+
+class EditMessageForm(NewMessageForm):
+    pass

+ 5 - 4
flaskbb/user/models.py

@@ -444,9 +444,10 @@ class PrivateMessage(db.Model):
 
         :param to_user: The user who should recieve the message
 
-        :param user_id: The senders user id
+        :param user_id: The senders user id - This is the id to which user the
+                        Inbox belongs.
 
-        :param draft: If the message is a draft
+        :param draft: If the message is a draft. Defaults to ``False``.
         """
 
         if self.id:
@@ -454,8 +455,8 @@ class PrivateMessage(db.Model):
             db.session.commit()
             return self
 
-        if draft:
-            self.draft = True
+        # Defaults to ``False``.
+        self.draft = draft
 
         # Add the message to the user's pm box
         self.user_id = user_id

+ 71 - 12
flaskbb/user/views.py

@@ -20,7 +20,7 @@ from flaskbb.utils.helpers import render_template
 from flaskbb.user.models import User, PrivateMessage
 from flaskbb.user.forms import (ChangePasswordForm, ChangeEmailForm,
                                 ChangeUserDetailsForm, GeneralSettingsForm,
-                                NewMessage)
+                                NewMessageForm, EditMessageForm)
 
 
 user = Blueprint("user", __name__)
@@ -132,10 +132,10 @@ def inbox():
     return render_template("message/inbox.html", messages=messages)
 
 
-@user.route("/messages/<int:id>/view")
+@user.route("/messages/<int:message_id>/view")
 @login_required
-def view_message(id):
-    message = PrivateMessage.query.filter_by(id=id).first()
+def view_message(message_id):
+    message = PrivateMessage.query.filter_by(id=message_id).first()
     if message.unread:
         message.unread = False
         db.session.commit()
@@ -175,7 +175,7 @@ def drafts():
 @user.route("/messages/new", methods=["POST", "GET"])
 @login_required
 def new_message():
-    form = NewMessage()
+    form = NewMessageForm()
     to_user = request.args.get("to_user")
 
     if request.method == "POST":
@@ -211,23 +211,82 @@ def new_message():
     else:
         form.to_user.data = to_user
 
-    return render_template("message/new_message.html", form=form)
+    return render_template("message/message_form.html", form=form,
+                           title="Compose Message")
 
 
-@user.route("/messages/<int:id>/move")
+@user.route("/messages/<int:message_id>/edit", methods=["POST", "GET"])
 @login_required
-def move_message(id):
-    message = PrivateMessage.query.filter_by(id=id).first_or_404()
+def edit_message(message_id):
+    message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
+
+    if not message.draft:
+        flash("You cannot edit a sent message", "danger")
+        return redirect(url_for("user.inbox"))
+
+    form = EditMessageForm()
+
+    if request.method == "POST":
+        if "save_message" in request.form:
+            to_user = User.query.filter_by(username=form.to_user.data).first()
+
+            # Move the message from ``Drafts`` to ``Sent``.
+            message.draft = False
+            message.to_user = to_user.id
+            message.save()
+
+            flash("Message saved!", "success")
+            return redirect(url_for("user.drafts"))
+
+        if "send_message" in request.form and form.validate():
+            to_user = User.query.filter_by(username=form.to_user.data).first()
+            # Save the message in the recievers inbox
+            form.save(from_user=current_user.id,
+                      to_user=to_user.id,
+                      user_id=to_user.id,
+                      unread=True)
+
+            # Move the message from ``Drafts`` to ``Sent``.
+            message.draft = False
+            message.to_user = to_user
+            message.date_created = datetime.utcnow()
+            message.save()
+
+            flash("Message sent!", "success")
+            return redirect(url_for("user.sent"))
+    else:
+        form.to_user.data = message.to_user.username
+        form.subject.data = message.subject
+        form.message.data = message.message
+
+    return render_template("message/message_form.html", form=form,
+                           title="Edit Message")
+
+
+@user.route("/messages/<int:message_id>/move")
+@login_required
+def move_message(message_id):
+    message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message.trash = True
     message.save()
     flash("Message moved to Trash!", "success")
     return redirect(url_for("user.inbox"))
 
 
-@user.route("/messages/<int:id>/delete")
+@user.route("/messages/<int:message_id>/restore")
+@login_required
+def restore_message(message_id):
+    message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
+    message.trash = False
+    message.save()
+    flash("Message restored from Trash!", "success")
+    return redirect(url_for("user.inbox"))
+
+
+@user.route("/messages/<int:message_id>/delete")
 @login_required
-def delete_message(id):
-    message = PrivateMessage.query.filter_by(id=id).first_or_404()
+def delete_message(message_id):
+    message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message.delete()
     flash("Message deleted!", "success")
     return redirect(url_for("user.inbox"))