Add locale selector to add subpage view

pull/6471/head
Karl Hobley 2020-10-12 12:22:09 +01:00 zatwierdzone przez Matt Westcott
rodzic 9e9e753f58
commit 33c34c1230
3 zmienionych plików z 87 dodań i 1 usunięć

Wyświetl plik

@ -15,6 +15,14 @@
<h1>{% trans 'New' %} <span>{{ content_type.model_class.get_verbose_name }}</span></h1>
</div>
</div>
{% if locale %}
<ul class="row header-meta">
<li class="header-meta--locale">
{% include "wagtailadmin/shared/locale_selector.html" %}
</li>
</ul>
{% endif %}
</header>
<form id="page-edit-form" action="{% url 'wagtailadmin_pages:add' content_type.app_label content_type.model parent_page.id %}" method="POST" novalidate{% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>

Wyświetl plik

@ -1024,3 +1024,60 @@ class TestInlinePanelNonFieldErrors(TestCase, WagtailTestUtils):
self.assertEqual(response.status_code, 200)
self.assertContains(response, "The page could not be created due to validation errors")
self.assertContains(response, 'You must provide a related page, related document or an external URL', count=1)
@override_settings(WAGTAIL_I18N_ENABLED=True)
class TestLocaleSelector(TestCase, WagtailTestUtils):
fixtures = ['test.json']
def setUp(self):
self.events_page = Page.objects.get(url_path='/home/events/')
self.fr_locale = Locale.objects.create(language_code='fr')
self.translated_events_page = self.events_page.copy_for_translation(self.fr_locale, copy_parents=True)
self.user = self.login()
def test_locale_selector(self):
response = self.client.get(
reverse('wagtailadmin_pages:add', args=['tests', 'eventpage', self.events_page.id])
)
self.assertContains(response, '<li class="header-meta--locale">')
add_translation_url = reverse('wagtailadmin_pages:add', args=['tests', 'eventpage', self.translated_events_page.id])
self.assertContains(response, f'<a href="{add_translation_url}" aria-label="French" class="u-link is-live">')
@override_settings(WAGTAIL_I18N_ENABLED=False)
def test_locale_selector_not_present_when_i18n_disabled(self):
response = self.client.get(
reverse('wagtailadmin_pages:add', args=['tests', 'eventpage', self.events_page.id])
)
self.assertNotContains(response, '<li class="header-meta--locale">')
add_translation_url = reverse('wagtailadmin_pages:add', args=['tests', 'eventpage', self.translated_events_page.id])
self.assertNotContains(response, f'<a href="{add_translation_url}" aria-label="French" class="u-link is-live">')
def test_locale_dropdown_not_present_without_permission_to_add(self):
# Remove user's permissions to add in the French tree
group = Group.objects.get(name='Moderators')
GroupPagePermission.objects.create(
group=group,
page=self.events_page,
permission_type='add',
)
self.user.is_superuser = False
self.user.user_permissions.add(
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
)
self.user.groups.add(group)
self.user.save()
# Locale indicator should exist, but the "French" option should be hidden
response = self.client.get(
reverse('wagtailadmin_pages:add', args=['tests', 'eventpage', self.events_page.id])
)
self.assertContains(response, '<li class="header-meta--locale">')
add_translation_url = reverse('wagtailadmin_pages:add', args=['tests', 'eventpage', self.translated_events_page.id])
self.assertNotContains(response, f'<a href="{add_translation_url}" aria-label="French" class="u-link is-live">')

Wyświetl plik

@ -1,3 +1,4 @@
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
from django.http import Http404
@ -13,7 +14,7 @@ from wagtail.admin import messages, signals
from wagtail.admin.action_menu import PageActionMenu
from wagtail.admin.views.generic import HookResponseMixin
from wagtail.admin.views.pages.utils import get_valid_next_url_from_request
from wagtail.core.models import Page
from wagtail.core.models import Page, UserPagePermissionsProxy
def add_subpage(request, parent_page_id):
@ -254,5 +255,25 @@ class CreateView(TemplateResponseMixin, ContextMixin, HookResponseMixin, View):
'form': self.form,
'next': self.next_url,
'has_unsaved_changes': self.has_unsaved_changes,
'locale': None,
'translations': [],
})
if getattr(settings, 'WAGTAIL_I18N_ENABLED', False):
user_perms = UserPagePermissionsProxy(self.request.user)
context.update({
'locale': self.parent_page.locale,
'translations': [
{
'locale': translation.locale,
'url': reverse('wagtailadmin_pages:add', args=[self.page_content_type.app_label, self.page_content_type.model, translation.id]),
}
for translation in self.parent_page.get_translations().only('id', 'locale').select_related('locale')
if user_perms.for_page(translation).can_add_subpage()
and self.page_class in translation.specific_class.creatable_subpage_models()
and self.page_class.can_create_at(translation)
],
})
return context