Rafał Pitoń 10 лет назад
Родитель
Сommit
6cee9c66db

+ 18 - 0
misago/threads/migrations/0001_initial.py

@@ -101,6 +101,24 @@ class Migration(migrations.Migration):
             bases=(models.Model,),
         ),
         migrations.CreateModel(
+            name='ThreadParticipant',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('level', models.PositiveIntegerField(default=1)),
+                ('thread', models.ForeignKey(to='misago_threads.Thread')),
+                ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+            ],
+            options={
+            },
+            bases=(models.Model,),
+        ),
+        migrations.AddField(
+            model_name='thread',
+            name='participants',
+            field=models.ManyToManyField(related_name='private_thread_set', through='misago_threads.ThreadParticipant', to=settings.AUTH_USER_MODEL),
+            preserve_default=True,
+        ),
+        migrations.CreateModel(
             name='Event',
             fields=[
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),

+ 1 - 0
misago/threads/migrations/0002_threads_settings.py

@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
+from django.conf import settings
 from django.db import models, migrations
 from django.utils.translation import ugettext as _
 

+ 30 - 1
misago/threads/models/thread.py

@@ -7,7 +7,7 @@ from misago.core.shortcuts import paginate
 from misago.core.utils import slugify
 
 
-__all__ = ['Thread']
+__all__ = ['Thread', 'ThreadParticipant']
 
 
 class Thread(models.Model):
@@ -47,6 +47,10 @@ class Thread(models.Model):
     is_hidden = models.BooleanField(default=False)
     is_closed = models.BooleanField(default=False)
 
+    participants = models.ManyToManyField(settings.AUTH_USER_MODEL,
+                                          related_name='private_thread_set',
+                                          through='ThreadParticipant')
+
     class Meta:
         index_together = [
             ['forum', 'id'],
@@ -168,3 +172,28 @@ class Thread(models.Model):
             self.last_poster_slug = post.poster.slug
         else:
             self.last_poster_slug = slugify(post.poster_name)
+
+
+PARTICIPANT_REMOVED = 0
+PARTICIPANT_ACTIVE = 1
+PARTICIPANT_OWNER = 2
+
+
+class ThreadParticipant(models.Model):
+    thread = models.ForeignKey(Thread)
+    user = models.ForeignKey(settings.AUTH_USER_MODEL)
+    level = models.PositiveIntegerField(default=PARTICIPANT_ACTIVE)
+
+    @property
+    def is_removed(self):
+        return self.level == PARTICIPANT_REMOVED
+
+    @property
+    def is_active(self):
+        return self.level == PARTICIPANT_ACTIVE
+
+    @property
+    def is_owner(self):
+        return self.level == PARTICIPANT_OWNER
+
+