From a49accf251a4e8af95c86f808018ade185c9592c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Mon, 17 Apr 2023 07:38:50 +0200
Subject: [PATCH] add motd

---
 .../migrations/0049_alter_contract_options.py   | 17 +++++++++++++++++
 contracts/models.py                             |  6 ++++++
 contracts/settings.py                           | 11 +++++++++++
 contracts/templates/contracts/index.html        | 12 ++----------
 contracts/views.py                              |  1 +
 registry/settings/base.py                       |  6 ++++++
 registry/urls.py                                |  1 +
 requirements/base.txt                           |  1 +
 8 files changed, 45 insertions(+), 10 deletions(-)
 create mode 100644 contracts/migrations/0049_alter_contract_options.py
 create mode 100644 contracts/settings.py

diff --git a/contracts/migrations/0049_alter_contract_options.py b/contracts/migrations/0049_alter_contract_options.py
new file mode 100644
index 0000000..30756a5
--- /dev/null
+++ b/contracts/migrations/0049_alter_contract_options.py
@@ -0,0 +1,17 @@
+# Generated by Django 4.1.4 on 2023-04-17 05:16
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('contracts', '0048_alter_contractapproval_options_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='contract',
+            options={'permissions': [('approve', 'Schválit / zrušit schválení'), ('view_confidential', 'Zobrazit tajné informace'), ('edit_when_approved', 'Upravit schválené'), ('delete_when_approved', 'Odstranit schválené'), ('edit_others', 'Upravit cizí'), ('delete_others', 'Odstranit cizí'), ('can_edit_contract_settings', 'Can edit Smlouva settings')], 'verbose_name': 'Smlouva', 'verbose_name_plural': 'Smlouvy'},
+        ),
+    ]
diff --git a/contracts/models.py b/contracts/models.py
index 32bfbb8..5638b13 100644
--- a/contracts/models.py
+++ b/contracts/models.py
@@ -16,6 +16,8 @@ from markdownx.models import MarkdownxField
 from shared.models import NameStrMixin
 from users.models import User
 
+from . import settings as app_settings
+
 
 class SubdomainValidatedURLField(models.URLField):
     validators = [
@@ -780,6 +782,10 @@ class Contract(NameStrMixin, models.Model):
 
         return super().save(*args, **kwargs)
 
+    # Settings
+
+    settings = app_settings.ContractSettings("Nastavení")
+
     class Meta:
         app_label = "contracts"
 
diff --git a/contracts/settings.py b/contracts/settings.py
new file mode 100644
index 0000000..45f7a67
--- /dev/null
+++ b/contracts/settings.py
@@ -0,0 +1,11 @@
+import dbsettings
+
+from django import forms
+
+
+class ContractSettings(dbsettings.Group):
+    motd = dbsettings.StringValue(
+        "Informace na indexové stránce",
+        help_text="Poporuje formátování skrze Markdown.",
+        widget=forms.Textarea,
+    )
diff --git a/contracts/templates/contracts/index.html b/contracts/templates/contracts/index.html
index a28a22f..12f78af 100644
--- a/contracts/templates/contracts/index.html
+++ b/contracts/templates/contracts/index.html
@@ -1,17 +1,9 @@
 {% extends "shared/includes/base.html" %}
+{% load markdownify %}
 
 {% block content %}
     <div class="prose max-w-none mb-6 md:mb-10">
-        <p>
-            Registr smluv České pirátské strany slouží k evidenci i transparentnímu
-            informování o smlouvách uzavřených Pirátskou stranou s dalšími subjekty.<br>
-            Nahrávání smluv se řídí <a
-                href="https://wiki.pirati.cz/ao/pravidla/registr"
-                target="_blank"
-            >předpisem Pirátů</a>. V případě dotazů nás kontaktujte na e-mail <a
-                href="mailto:archiv@pirati.cz"
-            >archiv@pirati.cz</a>.
-        </p>
+        {{ settings.motd|markdownify|safe }}
     </div>
 
     <hr class="mb-6 md:mb-10">
diff --git a/contracts/views.py b/contracts/views.py
index 9641776..a28fecd 100644
--- a/contracts/views.py
+++ b/contracts/views.py
@@ -91,6 +91,7 @@ def index(request):
             "description": "",
             "page": page,
             "paginator": paginator,
+            "settings": Contract.settings,
         },
     )
 
diff --git a/registry/settings/base.py b/registry/settings/base.py
index e7836e0..15f0ca7 100644
--- a/registry/settings/base.py
+++ b/registry/settings/base.py
@@ -53,6 +53,7 @@ INSTALLED_APPS = [
     "django.contrib.sessions",
     "django.contrib.messages",
     "django.contrib.staticfiles",
+    "dbsettings",
     "nested_admin",
     "rangefilter",
     "guardian",
@@ -215,6 +216,11 @@ ADMIN_ORDERING = {
 }
 
 
+# DBsettings
+
+DBSETTINGS_VALUE_LENGTH = 65536
+
+
 # ClamAV
 
 CLAMD_USE_TCP = True
diff --git a/registry/urls.py b/registry/urls.py
index dd62a4f..0105484 100644
--- a/registry/urls.py
+++ b/registry/urls.py
@@ -29,4 +29,5 @@ urlpatterns = [
     path("oidc/", include("oidc.urls")),
     path("media/", include("media_server.urls")),
     path("admin/", admin.site.urls),
+    path("settings/", include("dbsettings.urls")),
 ] + pirates_urlpatterns
diff --git a/requirements/base.txt b/requirements/base.txt
index f931f52..a1283e8 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -4,6 +4,7 @@ django-admin-index==2.0.2
 django-admin-interface==0.24.2
 django-admin-rangefilter==0.9.0
 django-database-url==1.0.3
+django-dbsettings==1.3.0
 django-downloadview==2.3.0
 django-nested-admin==4.0.2
 django-ordered-model==3.7.1
-- 
GitLab