diff --git a/cms/migrations/0003_page_link_address_alter_page_page_type.py b/cms/migrations/0003_page_link_address_alter_page_page_type.py new file mode 100644 index 0000000..260ab9e --- /dev/null +++ b/cms/migrations/0003_page_link_address_alter_page_page_type.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.6 on 2026-04-16 16:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0002_issue_number_issue_volume'), + ] + + operations = [ + migrations.AddField( + model_name='page', + name='link_address', + field=models.URLField(blank=True, verbose_name='Endereço do link'), + ), + migrations.AlterField( + model_name='page', + name='page_type', + field=models.CharField(choices=[('DL', 'Downloads'), ('TX', 'Texto'), ('IS', 'Edições'), ('LK', 'Link')], max_length=2, verbose_name='Tipo de página'), + ), + ] diff --git a/cms/migrations/0004_alter_page_page_type.py b/cms/migrations/0004_alter_page_page_type.py new file mode 100644 index 0000000..5962dd5 --- /dev/null +++ b/cms/migrations/0004_alter_page_page_type.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.6 on 2026-04-16 16:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0003_page_link_address_alter_page_page_type'), + ] + + operations = [ + migrations.AlterField( + model_name='page', + name='page_type', + field=models.CharField(choices=[('DL', 'Downloads'), ('TX', 'Texto'), ('IS', 'Edições'), ('LK', 'Link'), ('CI', 'Edição Atual')], max_length=2, verbose_name='Tipo de página'), + ), + ] diff --git a/cms/models.py b/cms/models.py index ab046ff..59b0395 100644 --- a/cms/models.py +++ b/cms/models.py @@ -114,6 +114,8 @@ class PageType(models.TextChoices): DOWNLOADS = "DL", _("Downloads") TEXT = "TX", _("Texto") ISSUES = "IS", _("Edições") + LINK = "LK", _("Link") + CURRENT_ISSUE = "CI", _("Edição Atual") publication = models.ForeignKey( Publication, on_delete=models.PROTECT, verbose_name=_("Publicação") @@ -122,6 +124,7 @@ class PageType(models.TextChoices): order = models.IntegerField(_("Ordem")) page_type = models.CharField(_("Tipo de página"), max_length=2, choices=PageType) text = HTMLField(_("Texto"), blank=True) + link_address = models.URLField(_("Endereço do link"), blank=True) slug = AutoSlugField(populate_from="title", unique=True, default="", null=False) created_at = models.DateTimeField(_("Data de criação"), auto_now_add=True) updated_at = models.DateTimeField(_("Última modificação"), auto_now=True) diff --git a/cms/views.py b/cms/views.py index 0ad3a09..0eab3ef 100644 --- a/cms/views.py +++ b/cms/views.py @@ -152,7 +152,7 @@ class PageListView(CmsListView): class PageCreateView(AutoPublicationFieldMixin, CmsCreateView): model = Page page_title = "Páginas" - fields = ["title", "order", "page_type", "text", "is_published"] + fields = ["title", "order", "page_type", "text", "link_address", "is_published"] class PageDetailView(CmsDetailView): @@ -164,7 +164,7 @@ class PageDetailView(CmsDetailView): class PageUpdateView(CmsUpdateView): model = Page page_title = "Páginas" - fields = ["title", "order", "page_type", "text", "is_published"] + fields = ["title", "order", "page_type", "text", "link_address", "is_published"] class PageDeleteView(CmsDeleteView): diff --git a/website/views.py b/website/views.py index 6c447ef..7890d06 100644 --- a/website/views.py +++ b/website/views.py @@ -1,5 +1,6 @@ from django.http import Http404 from django.db.models import QuerySet +from django.shortcuts import redirect from django.views.generic.base import TemplateView from django.views.generic.detail import DetailView from django.core.paginator import Paginator @@ -25,6 +26,19 @@ class PagesDetailView(Unpublished404Mixin, DetailView): issue_paginate_by = 6 download_paginate_by = 10 + def get(self, request, *args, **kwargs): + self.object = self.get_object() + if self.object.page_type == Page.PageType.LINK: + return redirect(self.object.link_address) + if self.object.page_type == Page.PageType.CURRENT_ISSUE: + latest = Issue.objects.filter( + is_published=True, publication=self.object.publication + ).first() + if latest is None: + raise Http404() + return redirect("website:issue_detail", pk=latest.pk) + return super().get(request, *args, **kwargs) + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) page = context["page"]