Skip to content

Commit

Permalink
Closes #2170. Closes #2160
Browse files Browse the repository at this point in the history
  • Loading branch information
ajrbyers committed May 10, 2021
1 parent 53e810d commit 0d9eb46
Show file tree
Hide file tree
Showing 15 changed files with 276 additions and 111 deletions.
7 changes: 6 additions & 1 deletion src/cms/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@
from django.contrib import admin
from cms import models


class PageAdmin(admin.ModelAdmin):
list_display = ('display_name', 'name', 'object')


admin_list = [
(models.NavigationItem,),
(models.Page,),
(models.Page, PageAdmin),
]

[admin.site.register(*t) for t in admin_list]
8 changes: 5 additions & 3 deletions src/cms/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@


from django import forms

from django_summernote.widgets import SummernoteWidget

from cms import models
from core.forms import JanewayTranslationModelForm


class PageForm(forms.ModelForm):
class PageForm(JanewayTranslationModelForm):

class Meta:
model = models.Page
fields = ('name', 'display_name', 'content')
exclude = ('journal', 'is_markdown', 'content_type', 'object_id')

def __init__(self, *args, **kwargs):
Expand All @@ -23,10 +24,11 @@ def __init__(self, *args, **kwargs):
self.fields['content'].widget = SummernoteWidget()


class NavForm(forms.ModelForm):
class NavForm(JanewayTranslationModelForm):

class Meta:
model = models.NavigationItem
fields = ('link_name', 'link', 'is_external', 'sequence', 'has_sub_nav', 'top_level_nav')
exclude = ('page', 'content_type', 'object_id')

def __init__(self, *args, **kwargs):
Expand Down
80 changes: 80 additions & 0 deletions src/cms/migrations/0003_auto_20210510_1148.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2021-05-10 11:48
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('cms', '0002_migrate_issue_types'),
]

operations = [
migrations.AddField(
model_name='navigationitem',
name='link_name_cy',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='navigationitem',
name='link_name_de',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='navigationitem',
name='link_name_en',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='navigationitem',
name='link_name_fr',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='page',
name='content_cy',
field=models.TextField(blank=True, null=True),
),
migrations.AddField(
model_name='page',
name='content_de',
field=models.TextField(blank=True, null=True),
),
migrations.AddField(
model_name='page',
name='content_en',
field=models.TextField(blank=True, null=True),
),
migrations.AddField(
model_name='page',
name='content_fr',
field=models.TextField(blank=True, null=True),
),
migrations.AddField(
model_name='page',
name='display_name_cy',
field=models.CharField(help_text='Name of the page, max 100 chars, displayed in the nav and on the header of the page eg. About or Contact', max_length=100, null=True),
),
migrations.AddField(
model_name='page',
name='display_name_de',
field=models.CharField(help_text='Name of the page, max 100 chars, displayed in the nav and on the header of the page eg. About or Contact', max_length=100, null=True),
),
migrations.AddField(
model_name='page',
name='display_name_en',
field=models.CharField(help_text='Name of the page, max 100 chars, displayed in the nav and on the header of the page eg. About or Contact', max_length=100, null=True),
),
migrations.AddField(
model_name='page',
name='display_name_fr',
field=models.CharField(help_text='Name of the page, max 100 chars, displayed in the nav and on the header of the page eg. About or Contact', max_length=100, null=True),
),
migrations.AlterField(
model_name='page',
name='name',
field=models.CharField(help_text='Page name displayed in the URL bar eg. about or contact', max_length=300, verbose_name='URL Name'),
),
]
15 changes: 11 additions & 4 deletions src/cms/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,17 @@ class Page(models.Model):
object_id = models.PositiveIntegerField(blank=True, null=True)
object = GenericForeignKey('content_type', 'object_id')

name = models.CharField(max_length=300, help_text="Page name displayed in the URL bar eg. about or contact")
display_name = models.CharField(max_length=100, help_text='Name of the page, max 100 chars, displayed '
'in the nav and on the header of the page eg. '
'About or Contact')
name = models.CharField(
max_length=300,
help_text="Page name displayed in the URL bar eg. about or contact",
verbose_name="URL Name"
)
display_name = models.CharField(
max_length=100,
help_text='Name of the page, max 100 chars, displayed '
'in the nav and on the header of the page eg. '
'About or Contact',
)
content = models.TextField(null=True, blank=True)
is_markdown = models.BooleanField(default=True)
edited = models.DateTimeField(auto_now=timezone.now)
Expand Down
13 changes: 13 additions & 0 deletions src/cms/translation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from modeltranslation.translator import register, TranslationOptions

from cms import models


@register(models.Page)
class PageTranslationOptions(TranslationOptions):
fields = ('display_name', 'content')


@register(models.NavigationItem)
class NavigationItemTranslationOptions(TranslationOptions):
fields = ('link_name',)
177 changes: 96 additions & 81 deletions src/cms/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from django.db.models import Q
from django.shortcuts import render, get_object_or_404, redirect
from django.urls import reverse
from django.utils import translation

from security.decorators import editor_user_required
from cms import models, forms
Expand All @@ -16,6 +17,8 @@
from core.forms import XSLFileForm
from journal import models as journal_models
from utils import setting_handler
from utils.decorators import GET_language_override
from utils.shared import language_override_redirect


@editor_user_required
Expand Down Expand Up @@ -114,38 +117,44 @@ def view_page(request, page_name):


@editor_user_required
@GET_language_override
def page_manage(request, page_id=None):
"""
Allows a staff member to add a new or edit an existing page.
:param request: HttpRequest object
:param page_id: pk of a Page object, not required
:return: HttpResponse object
"""
if page_id:
page = get_object_or_404(models.Page, pk=page_id,
content_type=request.model_content_type, object_id=request.site_type.pk)
page_form = forms.PageForm(instance=page)
edit = True
else:
page = None
page_form = forms.PageForm()
edit = False

if request.POST:

with translation.override(request.override_language):
if page_id:
page_form = forms.PageForm(request.POST, instance=page)
page = get_object_or_404(models.Page, pk=page_id,
content_type=request.model_content_type, object_id=request.site_type.pk)
page_form = forms.PageForm(instance=page)
edit = True
else:
page_form = forms.PageForm(request.POST)

if page_form.is_valid():
page = page_form.save(commit=False)
page.content_type = request.model_content_type
page.object_id = request.site_type.pk
page.save()

messages.add_message(request, messages.INFO, 'Page saved.')
return redirect(reverse('cms_index'))
page = None
page_form = forms.PageForm()
edit = False

if request.POST:

if page_id:
page_form = forms.PageForm(request.POST, instance=page)
else:
page_form = forms.PageForm(request.POST)

if page_form.is_valid():
page = page_form.save(commit=False)
page.content_type = request.model_content_type
page.object_id = request.site_type.pk
page.save()

messages.add_message(request, messages.INFO, 'Page saved.')
return language_override_redirect(
request,
'cms_page_edit',
{'page_id': page.pk},
)

template = 'cms/page_manage.html'
context = {
Expand All @@ -158,74 +167,80 @@ def page_manage(request, page_id=None):


@editor_user_required
@GET_language_override
def nav(request, nav_id=None):
"""
Allows a staff member to edit or add nav objects.
:param request: HttpRequest object
:param nav_id: pk of a Navigation object, not required
:return: HttpResponse object
"""
if nav_id:
nav_to_edit = get_object_or_404(models.NavigationItem, pk=nav_id)
form = forms.NavForm(instance=nav_to_edit, request=request)
else:
nav_to_edit = None
form = forms.NavForm(request=request)

top_nav_items = models.NavigationItem.objects.filter(content_type=request.model_content_type,
object_id=request.site_type.pk,
top_level_nav__isnull=True)
collection_nav_items = None
if request.journal:
collection_nav_items = models.NavigationItem.get_issue_types_for_nav(
request.journal)

if request.POST.get('nav'):
attr = request.POST.get('nav')
setattr(request.journal, attr, not getattr(request.journal, attr))
request.journal.save()
return redirect(reverse('cms_nav'))

elif "editorial_team" in request.POST:
setting_handler.toggle_boolean_setting(
setting_group_name="general",
setting_name="enable_editorial_display",
journal=request.journal,
)

elif 'keyword_list_page' in request.POST:
setting_handler.toggle_boolean_setting(
setting_group_name="general",
setting_name="keyword_list_page",
journal=request.journal,
)

elif "delete_nav" in request.POST:
nav_to_delete = get_object_or_404(
models.NavigationItem,
pk=request.POST["delete_nav"])
nav_to_delete.delete()
elif "toggle_collection_nav" in request.POST:
issue_type = get_object_or_404(
journal_models.IssueType,
journal=request.journal,
pk=request.POST["toggle_collection_nav"],
)
models.NavigationItem.toggle_collection_nav(issue_type)

if request.POST:
if nav_to_edit:
form = forms.NavForm(request.POST, request=request, instance=nav_to_edit)
with translation.override(request.override_language):
if nav_id:
nav_to_edit = get_object_or_404(models.NavigationItem, pk=nav_id)
form = forms.NavForm(instance=nav_to_edit, request=request)
else:
form = forms.NavForm(request.POST, request=request)
nav_to_edit = None
form = forms.NavForm(request=request)

top_nav_items = models.NavigationItem.objects.filter(content_type=request.model_content_type,
object_id=request.site_type.pk,
top_level_nav__isnull=True)
collection_nav_items = None
if request.journal:
collection_nav_items = models.NavigationItem.get_issue_types_for_nav(
request.journal)

if request.POST.get('nav'):
attr = request.POST.get('nav')
setattr(request.journal, attr, not getattr(request.journal, attr))
request.journal.save()
return redirect(reverse('cms_nav'))

if form.is_valid():
new_nav_item = form.save(commit=False)
new_nav_item.content_type = request.model_content_type
new_nav_item.object_id = request.site_type.pk
new_nav_item.save()
elif "editorial_team" in request.POST:
setting_handler.toggle_boolean_setting(
setting_group_name="general",
setting_name="enable_editorial_display",
journal=request.journal,
)

return redirect(reverse('cms_nav'))
elif 'keyword_list_page' in request.POST:
setting_handler.toggle_boolean_setting(
setting_group_name="general",
setting_name="keyword_list_page",
journal=request.journal,
)

elif "delete_nav" in request.POST:
nav_to_delete = get_object_or_404(
models.NavigationItem,
pk=request.POST["delete_nav"])
nav_to_delete.delete()
elif "toggle_collection_nav" in request.POST:
issue_type = get_object_or_404(
journal_models.IssueType,
journal=request.journal,
pk=request.POST["toggle_collection_nav"],
)
models.NavigationItem.toggle_collection_nav(issue_type)

if request.POST:
if nav_to_edit:
form = forms.NavForm(request.POST, request=request, instance=nav_to_edit)
else:
form = forms.NavForm(request.POST, request=request)

if form.is_valid():
new_nav_item = form.save(commit=False)
new_nav_item.content_type = request.model_content_type
new_nav_item.object_id = request.site_type.pk
new_nav_item.save()

return language_override_redirect(
request,
'cms_nav_edit',
{'nav_id': new_nav_item.pk},
)

template = 'cms/nav.html'
context = {
Expand Down
1 change: 1 addition & 0 deletions src/core/janeway_global_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@
'ENABLE_ORCID',
'DEBUG',
'LANGUAGE_CODE',
'URL_CONFIG',
]

WSGI_APPLICATION = 'core.wsgi.application'
Expand Down
Loading

0 comments on commit 0d9eb46

Please sign in to comment.