From 39fd8736b104ff6a9780140bace4b77fdff36f17 Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Fri, 19 Feb 2021 22:36:41 +0100
Subject: [PATCH] Make it possible to mark DashboardWidgets as broken

---
 .../migrations/0010_dashboardwidget_broken.py  | 18 ++++++++++++++++++
 aleksis/core/models.py                         |  9 ++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)
 create mode 100644 aleksis/core/migrations/0010_dashboardwidget_broken.py

diff --git a/aleksis/core/migrations/0010_dashboardwidget_broken.py b/aleksis/core/migrations/0010_dashboardwidget_broken.py
new file mode 100644
index 000000000..ca49d4e15
--- /dev/null
+++ b/aleksis/core/migrations/0010_dashboardwidget_broken.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.1.4 on 2021-02-19 13:43
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0009_default_dashboard'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='dashboardwidget',
+            name='broken',
+            field=models.BooleanField(default=False, verbose_name='Widget is broken'),
+        ),
+    ]
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 24b6c8ca1..04bc77b7a 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -698,10 +698,12 @@ class DashboardWidget(PolymorphicModel, PureDjangoModel):
         return media
 
     template = None
+    template_broken = None
     media = Media()
 
     title = models.CharField(max_length=150, verbose_name=_("Widget Title"))
     active = models.BooleanField(verbose_name=_("Activate Widget"))
+    broken = models.BooleanField(verbose_name=_("Widget is broken"), default=False)
 
     size_s = models.PositiveSmallIntegerField(
         verbose_name=_("Size on mobile devices"),
@@ -736,8 +738,13 @@ class DashboardWidget(PolymorphicModel, PureDjangoModel):
         """Get template.
 
         Get the template to render the widget with. Defaults to the template attribute,
-        but can be overridden to allow more complex template generation scenarios.
+        but can be overridden to allow more complex template generation scenarios. If
+        the widget is marked as broken, the template_broken attribute will be returned.
         """
+        if not self.template:
+            raise NotImplementedError("A widget subclass needs to define a template.")
+        if self.broken and self.template_broken:
+            return self.template_broken
         return self.template
 
     def __str__(self):
-- 
GitLab