Browse Source

Add legal agreement models

Rafał Pitoń 7 years ago
parent
commit
be3960262b

+ 50 - 0
misago/legal/migrations/0002_agreement_useragreement.py

@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.14 on 2018-08-13 15:46
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('misago_legal', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Agreement',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('type', models.CharField(choices=[('terms-of-service', 'Terms of service'), ('privacy-policy', 'Privacy Policy')], db_index=True, default='terms-of-service', max_length=20)),
+                ('version', models.SlugField(blank=True, unique=True)),
+                ('title', models.CharField(max_length=255)),
+                ('text', models.TextField()),
+                ('is_active', models.BooleanField(default=False)),
+                ('created_on', models.DateTimeField(default=django.utils.timezone.now)),
+                ('created_by_name', models.CharField(blank=True, max_length=255, null=True)),
+                ('last_modified_on', models.DateTimeField(default=django.utils.timezone.now)),
+                ('last_modified_by_name', models.CharField(blank=True, max_length=255, null=True)),
+                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)),
+                ('last_modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='UserAgreement',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('accepted_on', models.DateTimeField(default=django.utils.timezone.now)),
+                ('agreement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='agreements', to='misago_legal.Agreement')),
+                ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='agreements', to=settings.AUTH_USER_MODEL)),
+            ],
+            options={
+                'ordering': ['-accepted_on'],
+            },
+        ),
+    ]

+ 57 - 1
misago/legal/models.py

@@ -1 +1,57 @@
-# Empty models file that triggers migrations for this app
+from django.core.exceptions import ValidationError
+from django.db import models
+from django.template.defaultfilters import slugify
+from django.utils import timezone
+from django.utils.translation import ugettext_lazy as _
+
+from misago.conf import settings
+
+
+class Agreement(models.Model):
+    TYPE_TOS = 'terms-of-service'
+    TYPE_PRIVACY = 'privacy-policy'
+    TYPE_CHOICES = [
+        (TYPE_TOS, _('Terms of service')),
+        (TYPE_PRIVACY, _('Privacy Policy')),
+    ]
+
+    type = models.CharField(
+        max_length=20,
+        default=TYPE_TOS,
+        choices=TYPE_CHOICES,
+        db_index=True,
+    )
+    version = models.SlugField(unique=True, blank=True)
+    title = models.CharField(max_length=255)
+    text = models.TextField()
+    is_active = models.BooleanField(default=False)
+    created_on = models.DateTimeField(default=timezone.now)
+    created_by = models.ForeignKey(
+        settings.AUTH_USER_MODEL,
+        blank=True,
+        null=True,
+        related_name='+',
+    )
+    created_by_name = models.CharField(max_length=255, null=True, blank=True)
+    last_modified_on = models.DateTimeField(default=timezone.now)
+    last_modified_by = models.ForeignKey(
+        settings.AUTH_USER_MODEL,
+        blank=True,
+        null=True,
+        related_name='+',
+    )
+    last_modified_by_name = models.CharField(max_length=255, null=True, blank=True)
+
+
+class UserAgreement(models.Model):
+    user = models.ForeignKey(
+        settings.AUTH_USER_MODEL,
+        blank=True,
+        null=True,
+        related_name='agreements'
+    )
+    agreement = models.ForeignKey(Agreement, related_name='agreements')
+    accepted_on = models.DateTimeField(default=timezone.now)
+
+    class Meta:
+        ordering = ["-accepted_on"]

+ 1 - 1
misago/legal/urls.py

@@ -6,4 +6,4 @@ from .views import privacy_policy, terms_of_service
 urlpatterns = [
 urlpatterns = [
     url(r'^privacy-policy/$', privacy_policy, name='privacy-policy'),
     url(r'^privacy-policy/$', privacy_policy, name='privacy-policy'),
     url(r'^terms-of-service/$', terms_of_service, name='terms-of-service'),
     url(r'^terms-of-service/$', terms_of_service, name='terms-of-service'),
-]
+]

+ 1 - 0
misago/legal/views/__init__.py

@@ -0,0 +1 @@
+from .legal import privacy_policy, terms_of_service

+ 0 - 0
misago/legal/views/admin.py


+ 1 - 1
misago/legal/views.py → misago/legal/views/legal.py

@@ -66,4 +66,4 @@ def terms_of_service(request):
             'link': settings.terms_of_service_link,
             'link': settings.terms_of_service_link,
             'body': parsed_content,
             'body': parsed_content,
         }
         }
-    )
+    )

+ 2 - 2
misago/users/models/datadownload.py

@@ -19,12 +19,12 @@ class DataDownload(models.Model):
     STATUS_READY = 2
     STATUS_READY = 2
     STATUS_EXPIRED = 3
     STATUS_EXPIRED = 3
 
 
-    STATUS_CHOICES = (
+    STATUS_CHOICES = [
         (STATUS_PENDING, _("Pending")),
         (STATUS_PENDING, _("Pending")),
         (STATUS_PROCESSING, _("Processing")),
         (STATUS_PROCESSING, _("Processing")),
         (STATUS_READY, _("Ready")),
         (STATUS_READY, _("Ready")),
         (STATUS_EXPIRED, _("Expired")),
         (STATUS_EXPIRED, _("Expired")),
-    )
+    ]
 
 
     user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
     user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
     status = models.PositiveIntegerField(
     status = models.PositiveIntegerField(