From 2d5a48c7ab55cd250eca747ae9ba5c36f2c5fdb4 Mon Sep 17 00:00:00 2001 From: Maciej Kobus Date: Mon, 18 Dec 2017 14:29:14 +0100 Subject: [PATCH] EZP-28567: As an editor I want to be able to restore archived Content version (#201) --- ...admin.location.version.restore_archived.js | 24 +++++++++++++++++++ .../views/content/locationview.html.twig | 1 + .../views/content/tab/versions/tab.html.twig | 7 +++++- .../content/tab/versions/table.html.twig | 12 +++++++++- src/lib/Tab/LocationView/VersionsTab.php | 6 +++++ 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/bundle/Resources/public/js/scripts/admin.location.version.restore_archived.js diff --git a/src/bundle/Resources/public/js/scripts/admin.location.version.restore_archived.js b/src/bundle/Resources/public/js/scripts/admin.location.version.restore_archived.js new file mode 100644 index 0000000000..2f49151edb --- /dev/null +++ b/src/bundle/Resources/public/js/scripts/admin.location.version.restore_archived.js @@ -0,0 +1,24 @@ +(function (global, doc) { + const FORM_ARCHIVED_VERSION_RESTORE = 'form[name="archived_version_restore"]'; + const restoreArchivedVersion = (event) => { + const versionRestoreForm = doc.querySelector(FORM_ARCHIVED_VERSION_RESTORE); + const contentId = event.currentTarget.dataset.contentId; + const versionNo = event.currentTarget.dataset.versionNo; + const languageCode = event.currentTarget.dataset.languageCode; + const contentInfoInput = versionRestoreForm.querySelector('input[name="archived_version_restore[content_info]"]'); + const versionInfoContentInfoInput = versionRestoreForm.querySelector('input[name="archived_version_restore[version_info][content_info]"]'); + const versionInfoVersionNoInput = versionRestoreForm.querySelector('input[name="archived_version_restore[version_info][version_no]"]'); + const languageInput = versionRestoreForm.querySelector('#archived_version_restore_language_' + languageCode); + + event.preventDefault(); + + contentInfoInput.value = contentId; + versionInfoContentInfoInput.value = contentId; + versionInfoVersionNoInput.value = versionNo; + languageInput.setAttribute('checked', true); + + versionRestoreForm.submit(); + }; + + [...doc.querySelectorAll('.ez-btn--restore-archived-version')].forEach(button => button.addEventListener('click', restoreArchivedVersion, false)); +})(window, document); diff --git a/src/bundle/Resources/views/content/locationview.html.twig b/src/bundle/Resources/views/content/locationview.html.twig index d6e0d4df3f..ca67e5a774 100644 --- a/src/bundle/Resources/views/content/locationview.html.twig +++ b/src/bundle/Resources/views/content/locationview.html.twig @@ -91,6 +91,7 @@ 'bundles/ezplatformadminui/js/scripts/admin.location.visibility.js' 'bundles/ezplatformadminui/js/scripts/admin.location.update.js' 'bundles/ezplatformadminui/js/scripts/admin.location.add.translation.js' + 'bundles/ezplatformadminui/js/scripts/admin.location.version.restore_archived.js' 'bundles/ezplatformadminui/js/scripts/udw/move.js' 'bundles/ezplatformadminui/js/scripts/udw/copy.js' 'bundles/ezplatformadminui/js/scripts/udw/swap.js' diff --git a/src/bundle/Resources/views/content/tab/versions/tab.html.twig b/src/bundle/Resources/views/content/tab/versions/tab.html.twig index ca48a2a175..b0c4bb9776 100644 --- a/src/bundle/Resources/views/content/tab/versions/tab.html.twig +++ b/src/bundle/Resources/views/content/tab/versions/tab.html.twig @@ -1,6 +1,7 @@ {% trans_default_domain 'locationview' %} {% import _self as tab %} +{% form_theme form_archived_version_restore '@EzPlatformAdminUi/parts/form/flat_widgets.html.twig' %} {% if draft_versions is not empty %}
@@ -41,7 +42,7 @@ }) }} {% include '@EzPlatformAdminUi/parts/table_header.html.twig' with { headerText: 'tab.versions.archived_versions'|trans()|desc('Archived versions'), tools: tab.table_header_tools(form_version_remove_archived) } %} {% if archived_versions is not empty %} - {{ include('@EzPlatformAdminUi/content/tab/versions/table.html.twig', { 'versions': archived_versions, 'form': form_version_remove_archived }) }} + {{ include('@EzPlatformAdminUi/content/tab/versions/table.html.twig', { 'versions': archived_versions, 'form': form_version_remove_archived, 'is_archived': true, 'form_archived_version_restore': form_archived_version_restore }) }} {% else %}

{{ 'tab.versions.no_permission'|trans()|desc('You don\'t have access to view the content item\'s versions') }} @@ -51,6 +52,10 @@

{% endif %} +{{ form_start(form_archived_version_restore, {'action': path('ezplatform.content.edit')}) }} +{{ form_widget(form_archived_version_restore.language, {'attr': {'hidden': 'hidden'}}) }} +{{ form_end(form_archived_version_restore) }} + {% macro table_header_tools(form) %} {% set modal_data_target = 'delete-versions-modal' %} + + {% endif %} {% endfor %} diff --git a/src/lib/Tab/LocationView/VersionsTab.php b/src/lib/Tab/LocationView/VersionsTab.php index 9f7db404c5..5f0aede85b 100644 --- a/src/lib/Tab/LocationView/VersionsTab.php +++ b/src/lib/Tab/LocationView/VersionsTab.php @@ -11,6 +11,7 @@ use eZ\Publish\API\Repository\Values\Content\Content; use eZ\Publish\API\Repository\Values\Content\Location; use eZ\Publish\API\Repository\Values\Content\VersionInfo; +use EzSystems\EzPlatformAdminUi\Form\Data\Content\Draft\ContentEditData; use EzSystems\EzPlatformAdminUi\Form\Data\Version\VersionRemoveData; use EzSystems\EzPlatformAdminUi\Form\Factory\FormFactory; use EzSystems\EzPlatformAdminUi\Tab\AbstractTab; @@ -98,6 +99,10 @@ public function renderView(array $parameters): string $archivedVersions, false ); + $archivedVersionRestoreForm = $this->formFactory->contentEdit( + new ContentEditData($contentInfo), + 'archived_version_restore' + ); $viewParameters = [ 'published_versions' => $versionsDataset->getPublishedVersions(), @@ -105,6 +110,7 @@ public function renderView(array $parameters): string 'archived_versions' => $archivedVersions, 'form_version_remove_draft' => $removeVersionDraftForm->createView(), 'form_version_remove_archived' => $removeVersionArchivedForm->createView(), + 'form_archived_version_restore' => $archivedVersionRestoreForm->createView(), ]; return $this->twig->render(