Browse Source

When deleting the user, we also need to remove him from the other relations.

sh4nks 11 years ago
parent
commit
8f361e8334

+ 2 - 5
flaskbb/forum/models.py

@@ -405,7 +405,8 @@ class Category(db.Model):
     # One-to-many
     forums = db.relationship("Forum", backref="category", lazy="dynamic",
                              primaryjoin='Forum.category_id == Category.id',
-                             order_by='asc(Forum.position)')
+                             order_by='asc(Forum.position)',
+                             cascade="all, delete-orphan")
 
     def save(self):
         """Saves a category"""
@@ -421,10 +422,6 @@ class Category(db.Model):
         :param users: A list with user objects
         """
 
-        # Delete all the forums in the category
-        for forum in self.forums:
-            forum.delete()
-
         # Update the users post count
         if users:
             for user in users:

+ 4 - 0
flaskbb/templates/message/inbox.html

@@ -12,7 +12,11 @@
     <tbody>
         {% for message in messages %}
         <tr>
+        {% if message.from_user %}
             <td><a href="{{ url_for('user.profile', username=message.from_user.username) }}">{{ message.from_user.username }}</a></td>
+        {% else %}
+            <td>[deleted]</td>
+        {% endif %}
             <td><a href="{{ url_for('user.view_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> |

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

@@ -12,7 +12,11 @@
     <tbody>
         {% for message in messages %}
         <tr>
+        {% if message.to_user %}
             <td><a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a></td>
+        {% else %}
+            <td>[deleted]</td>
+        {% endif %}
             <td><a href="{{ url_for('user.view_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> |

+ 12 - 6
flaskbb/templates/message/view_message.html

@@ -5,8 +5,9 @@
         <tr>
         <td>
             <table class="table table-borderless" border="0">
-                <tr>
 
+                <tr>
+                {% if message.from_user %}
                     {% if message.from_user.avatar %}
                     <td width="1">
                         <img src="{{ message.from_user.avatar }}" alt="Avatar" height="100" width="100">
@@ -15,19 +16,24 @@
 
                     <td>
                         <a href="{{ url_for('user.profile', username=message.from_user.username) }}"><span style="color: green;"><strong><em>{{ message.from_user.username }}</em></strong></span></a>
-                        <!-- TODO: Implement online status and groups -->
-                        <span class="badge badge-success">Online</span><br />
+                            {% if message.from_user|is_online %}
+                            <span class="badge badge-success">Online</span>
+                            {% else %}
+                            <span class="badge badge-default">Offline</span>
+                            {% endif %}
+                        <br />
                         {{ message.from_user.primary_group.name }}<br />
                     </td>
 
                     <td class="pull-right">
                         Posts: {{ message.from_user.post_count }}<br />
                         Registered since: {{ message.from_user.date_joined|format_date('%b %d %Y') }}<br />
-                        <!-- TODO: Implement Karma functionality -->
-                        Karma: <a href="#">124</a>
                     </td>
-
+                {% else %}
+                    [deleted]
+                {% endif %}
                 </tr>
+
             </table>
         </td>
         </tr>

+ 9 - 2
flaskbb/user/models.py

@@ -17,7 +17,8 @@ from werkzeug import generate_password_hash, check_password_hash
 from flask import current_app
 from flask.ext.login import UserMixin, AnonymousUserMixin
 from flaskbb.extensions import db, cache
-from flaskbb.forum.models import Post, Topic, topictracker
+from flaskbb.forum.models import (Post, Topic, topictracker, TopicsRead,
+                                  ForumsRead)
 
 
 groups_users = db.Table(
@@ -294,8 +295,14 @@ class User(db.Model, UserMixin):
         db.session.commit()
         return self
 
-    def delete(self, forums=None):
+    def delete(self):
         """Deletes the User."""
+        groups_users.delete().where(groups_users.c.user_id == self.id)
+        topictracker.delete().where(topictracker.c.user_id == self.id)
+        PrivateMessage.query.filter_by(user_id=self.id).delete()
+        ForumsRead.query.filter_by(user_id=self.id).delete()
+        TopicsRead.query.filter_by(user_id=self.id).delete()
+
         db.session.delete(self)
         db.session.commit()