From d30d9fc9ed1402e4336c363b16aa9996fa0ea902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Thu, 25 Aug 2022 12:44:04 +0200 Subject: [PATCH] Various improvements for flatpages --- ram/consist/migrations/0006_md_to_html.py | 4 +- ram/portal/admin.py | 5 ++- ram/portal/migrations/0012_md_to_html.py | 6 +-- ...emove_flatpage_draft_flatpage_published.py | 42 +++++++++++++++++++ ram/portal/models.py | 11 ++++- ram/portal/templates/base.html | 2 +- ram/portal/templates/flatpage_menu.html | 4 +- ram/portal/templates/includes/login.html | 1 + ram/portal/templatetags/show_menu.py | 2 +- ram/portal/views.py | 2 +- ram/ram/__init__.py | 2 +- ram/roster/migrations/0011_md_to_html.py | 4 +- 12 files changed, 69 insertions(+), 16 deletions(-) create mode 100644 ram/portal/migrations/0013_remove_flatpage_draft_flatpage_published.py diff --git a/ram/consist/migrations/0006_md_to_html.py b/ram/consist/migrations/0006_md_to_html.py index e2beeee..dd4d902 100644 --- a/ram/consist/migrations/0006_md_to_html.py +++ b/ram/consist/migrations/0006_md_to_html.py @@ -6,11 +6,11 @@ from django.db import migrations def md_to_html(apps, schema_editor): fields = { - 'Consist': ['notes'], + "Consist": ["notes"], } for m in fields.items(): - model = apps.get_model('consist', m[0]) + model = apps.get_model("consist", m[0]) for row in model.objects.all(): for field in m[1]: diff --git a/ram/portal/admin.py b/ram/portal/admin.py index ef8097e..ee7f63a 100644 --- a/ram/portal/admin.py +++ b/ram/portal/admin.py @@ -9,7 +9,8 @@ admin.site.register(SiteConfiguration, SingletonModelAdmin) @admin.register(Flatpage) class FlatpageAdmin(admin.ModelAdmin): readonly_fields = ("path", "creation_time", "updated_time") - list_display = ("name", "path") + list_display = ("name", "path", "published", "get_link") + list_filter = ("published",) search_fields = ("name",) fieldsets = ( @@ -20,7 +21,7 @@ class FlatpageAdmin(admin.ModelAdmin): "name", "path", "content", - "draft", + "published", ) }, ), diff --git a/ram/portal/migrations/0012_md_to_html.py b/ram/portal/migrations/0012_md_to_html.py index d1f9120..81edd85 100644 --- a/ram/portal/migrations/0012_md_to_html.py +++ b/ram/portal/migrations/0012_md_to_html.py @@ -6,12 +6,12 @@ from django.db import migrations def md_to_html(apps, schema_editor): fields = { - 'SiteConfiguration': ['about', 'footer', 'footer_extended'], - 'Flatpage': ['content'] + "SiteConfiguration": ["about", "footer", "footer_extended"], + "Flatpage": ["content"] } for m in fields.items(): - model = apps.get_model('portal', m[0]) + model = apps.get_model("portal", m[0]) for row in model.objects.all(): for field in m[1]: diff --git a/ram/portal/migrations/0013_remove_flatpage_draft_flatpage_published.py b/ram/portal/migrations/0013_remove_flatpage_draft_flatpage_published.py new file mode 100644 index 0000000..3894141 --- /dev/null +++ b/ram/portal/migrations/0013_remove_flatpage_draft_flatpage_published.py @@ -0,0 +1,42 @@ +# Generated by Django 4.1 on 2022-08-25 10:18 + +from django.db import migrations, models + + +def reverse_bool(apps, schema_editor): + model = apps.get_model("portal", "Flatpage") + + for row in model.objects.all(): + row.published = not row.draft + row.save(update_fields=["published"]) + + +def reverse_bool_back(apps, schema_editor): + model = apps.get_model("portal", "Flatpage") + + for row in model.objects.all(): + row.draft = not row.published + row.save(update_fields=["draft"]) + + +class Migration(migrations.Migration): + + dependencies = [ + ("portal", "0012_md_to_html"), + ] + + operations = [ + migrations.AddField( + model_name="flatpage", + name="published", + field=models.BooleanField(default=False), + ), + migrations.RunPython( + reverse_bool, + reverse_code=reverse_bool_back + ), + migrations.RemoveField( + model_name="flatpage", + name="draft", + ), + ] diff --git a/ram/portal/models.py b/ram/portal/models.py index bdb706c..94d16e9 100644 --- a/ram/portal/models.py +++ b/ram/portal/models.py @@ -2,6 +2,7 @@ import django from django.db import models from django.urls import reverse from django.dispatch.dispatcher import receiver +from django.utils.safestring import mark_safe from solo.models import SingletonModel from ckeditor.fields import RichTextField @@ -51,7 +52,7 @@ class SiteConfiguration(SingletonModel): class Flatpage(models.Model): name = models.CharField(max_length=256, unique=True) path = models.CharField(max_length=256, unique=True) - draft = models.BooleanField(default=True) + published = models.BooleanField(default=False) content = RichTextUploadingField() creation_time = models.DateTimeField(auto_now_add=True) updated_time = models.DateTimeField(auto_now=True) @@ -62,6 +63,14 @@ class Flatpage(models.Model): def get_absolute_url(self): return reverse("flatpage", kwargs={"flatpage": self.path}) + def get_link(self): + if self.published: + return mark_safe( + 'Link'.format( + self.get_absolute_url() + ) + ) + @receiver(models.signals.pre_save, sender=Flatpage) def tag_pre_save(sender, instance, **kwargs): diff --git a/ram/portal/templates/base.html b/ram/portal/templates/base.html index ff00600..c5ccca5 100644 --- a/ram/portal/templates/base.html +++ b/ram/portal/templates/base.html @@ -73,7 +73,7 @@ {% show_menu %} - {% include 'includes/search.html' %} + {% include 'includes/search.html' %} diff --git a/ram/portal/templates/flatpage_menu.html b/ram/portal/templates/flatpage_menu.html index 095db24..d40ea82 100644 --- a/ram/portal/templates/flatpage_menu.html +++ b/ram/portal/templates/flatpage_menu.html @@ -3,10 +3,10 @@ - {% for m in menu %} {% endfor %} + {% endif %} diff --git a/ram/portal/templates/includes/login.html b/ram/portal/templates/includes/login.html index 7a289d3..ffcb850 100644 --- a/ram/portal/templates/includes/login.html +++ b/ram/portal/templates/includes/login.html @@ -7,6 +7,7 @@
  • Rolling stock
  • Consists
  • Metadata
  • +
  • Pages
  • Admin
  • Site configuration
  • diff --git a/ram/portal/templatetags/show_menu.py b/ram/portal/templatetags/show_menu.py index 699758f..609c8b4 100644 --- a/ram/portal/templatetags/show_menu.py +++ b/ram/portal/templatetags/show_menu.py @@ -6,5 +6,5 @@ register = template.Library() @register.inclusion_tag('flatpage_menu.html') def show_menu(): - menu = Flatpage.objects.all() + menu = Flatpage.objects.filter(published=True).order_by("name") return {"menu": menu} diff --git a/ram/portal/views.py b/ram/portal/views.py index 1363235..027ad3d 100644 --- a/ram/portal/views.py +++ b/ram/portal/views.py @@ -249,7 +249,7 @@ class GetFlatpage(View): def get(self, request, flatpage): try: flatpage = Flatpage.objects.get( - Q(Q(path=flatpage) & Q(draft=False)) + Q(Q(path=flatpage) & Q(published=True)) ) except ObjectDoesNotExist: raise Http404 diff --git a/ram/ram/__init__.py b/ram/ram/__init__.py index 1297991..3142e33 100644 --- a/ram/ram/__init__.py +++ b/ram/ram/__init__.py @@ -1,4 +1,4 @@ from ram.utils import git_suffix -__version__ = "0.0.16" +__version__ = "0.0.17" __version__ += git_suffix(__file__) diff --git a/ram/roster/migrations/0011_md_to_html.py b/ram/roster/migrations/0011_md_to_html.py index e17791b..9394ee1 100644 --- a/ram/roster/migrations/0011_md_to_html.py +++ b/ram/roster/migrations/0011_md_to_html.py @@ -6,11 +6,11 @@ from django.db import migrations def md_to_html(apps, schema_editor): fields = { - 'RollingStock': ['notes'], + "RollingStock": ["notes"], } for m in fields.items(): - model = apps.get_model('roster', m[0]) + model = apps.get_model("roster", m[0]) for row in model.objects.all(): for field in m[1]: