kopia lustrzana https://github.com/wagtail/wagtail
Add locale selector to add subpage view
rodzic
9e9e753f58
commit
33c34c1230
|
@ -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 %}>
|
||||
|
|
|
@ -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">')
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue