diff --git a/src/bundle/DependencyInjection/Configuration/Parser/SubitemsModule.php b/src/bundle/DependencyInjection/Configuration/Parser/Module/Subitems.php similarity index 96% rename from src/bundle/DependencyInjection/Configuration/Parser/SubitemsModule.php rename to src/bundle/DependencyInjection/Configuration/Parser/Module/Subitems.php index 4722e31c48..508e6fa603 100644 --- a/src/bundle/DependencyInjection/Configuration/Parser/SubitemsModule.php +++ b/src/bundle/DependencyInjection/Configuration/Parser/Module/Subitems.php @@ -6,7 +6,7 @@ */ declare(strict_types=1); -namespace EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Configuration\Parser; +namespace EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Configuration\Parser\Module; use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\AbstractParser; use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface; @@ -24,7 +24,7 @@ * limit: 10 * ``` */ -class SubitemsModule extends AbstractParser +class Subitems extends AbstractParser { /** * Adds semantic configuration definition. diff --git a/src/bundle/DependencyInjection/Configuration/Parser/Module/UniversalDiscoveryWidget.php b/src/bundle/DependencyInjection/Configuration/Parser/Module/UniversalDiscoveryWidget.php new file mode 100644 index 0000000000..85b7f750c7 --- /dev/null +++ b/src/bundle/DependencyInjection/Configuration/Parser/Module/UniversalDiscoveryWidget.php @@ -0,0 +1,57 @@ +<?php + +/** + * @copyright Copyright (C) eZ Systems AS. All rights reserved. + * @license For full copyright and license information view LICENSE file distributed with this source code. + */ +declare(strict_types=1); + +namespace EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Configuration\Parser\Module; + +use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\AbstractParser; +use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface; +use Symfony\Component\Config\Definition\Builder\NodeBuilder; + +/** + * Configuration parser for UDW module. + */ +class UniversalDiscoveryWidget extends AbstractParser +{ + /** + * Adds semantic configuration definition. + * + * @param NodeBuilder $nodeBuilder Node just under ezpublish.system.<siteaccess> + */ + public function addSemanticConfig(NodeBuilder $nodeBuilder) + { + $nodeBuilder + ->arrayNode('universal_discovery_widget_module') + ->info('UDW module configuration') + ->children() + ->scalarNode('default_location_id')->isRequired()->end() + ->end() + ->end(); + } + + /** + * {@inheritdoc} + */ + public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerInterface $contextualizer): void + { + if (empty($scopeSettings['universal_discovery_widget_module'])) { + return; + } + + $settings = $scopeSettings['universal_discovery_widget_module']; + + if (!isset($settings['default_location_id']) || empty($settings['default_location_id'])) { + return; + } + + $contextualizer->setContextualParameter( + 'universal_discovery_widget_module.default_location_id', + $currentScope, + $settings['default_location_id'] + ); + } +} diff --git a/src/bundle/EzPlatformAdminUiBundle.php b/src/bundle/EzPlatformAdminUiBundle.php index 610765adc2..063a979c6d 100644 --- a/src/bundle/EzPlatformAdminUiBundle.php +++ b/src/bundle/EzPlatformAdminUiBundle.php @@ -13,8 +13,8 @@ use EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Compiler\UiConfigProviderPass; use EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Compiler\ValueObjectVisitorPass; use EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Configuration\Parser\LocationIds; +use EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Configuration\Parser\Module; use EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Configuration\Parser\Pagination; -use EzSystems\EzPlatformAdminUiBundle\DependencyInjection\Configuration\Parser\SubitemsModule; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -27,7 +27,8 @@ public function build(ContainerBuilder $container) /** @var EzPublishCoreExtension $core */ $core = $container->getExtension('ezpublish'); $core->addConfigParser(new LocationIds()); - $core->addConfigParser(new SubitemsModule()); + $core->addConfigParser(new Module\Subitems()); + $core->addConfigParser(new Module\UniversalDiscoveryWidget()); $core->addConfigParser(new Pagination()); $core->addDefaultSettings(__DIR__ . '/Resources/config', ['ezplatform_default_settings.yml']); diff --git a/src/bundle/Resources/config/ezplatform_default_settings.yml b/src/bundle/Resources/config/ezplatform_default_settings.yml index 31b0c854a3..7525d85e87 100644 --- a/src/bundle/Resources/config/ezplatform_default_settings.yml +++ b/src/bundle/Resources/config/ezplatform_default_settings.yml @@ -17,3 +17,6 @@ parameters: # Subitems Module ezsettings.default.subitems_module.limit: 10 + + # Universal Discovery Widget Module + ezsettings.default.universal_discovery_widget_module.default_location_id: 1 diff --git a/src/bundle/Resources/config/services.yml b/src/bundle/Resources/config/services.yml index db65e1bfdb..07316b8167 100644 --- a/src/bundle/Resources/config/services.yml +++ b/src/bundle/Resources/config/services.yml @@ -3,8 +3,6 @@ imports: - { resource: services/controllers.yml } - { resource: services/tabs.yml } - { resource: services/menu.yml } - - { resource: services/application_config.yml } - - { resource: services/type_extensions.yml } - { resource: services/pagination.yml } - { resource: services/ui_config.yml } - { resource: services/components.yml } diff --git a/src/bundle/Resources/config/services/application_config.yml b/src/bundle/Resources/config/services/application_config.yml deleted file mode 100644 index 66787b2b31..0000000000 --- a/src/bundle/Resources/config/services/application_config.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - _defaults: - autowire: true - autoconfigure: true - public: true - - EzSystems\EzPlatformAdminUiBundle\Templating\Twig\UiConfigExtension: ~ - EzSystems\EzPlatformAdminUi\UI\Config\Aggregator: ~ diff --git a/src/bundle/Resources/config/services/type_extensions.yml b/src/bundle/Resources/config/services/type_extensions.yml deleted file mode 100644 index a75730e093..0000000000 --- a/src/bundle/Resources/config/services/type_extensions.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - _defaults: - autowire: true - autoconfigure: true - public: true diff --git a/src/bundle/Resources/config/services/ui_config.yml b/src/bundle/Resources/config/services/ui_config.yml index e23fa14a17..a27632781e 100644 --- a/src/bundle/Resources/config/services/ui_config.yml +++ b/src/bundle/Resources/config/services/ui_config.yml @@ -4,6 +4,12 @@ services: autoconfigure: true public: false + EzSystems\EzPlatformAdminUiBundle\Templating\Twig\UiConfigExtension: + public: true + + EzSystems\EzPlatformAdminUi\UI\Config\Aggregator: + public: true + EzSystems\EzPlatformAdminUi\UI\Config\Provider\ContentTypeMappings: arguments: $locationMappings: '%ezplatform.multifile_upload.location.mappings%' @@ -23,3 +29,7 @@ services: EzSystems\EzPlatformAdminUi\UI\Config\Provider\User: tags: - { name: ezplatform.admin_ui.config_provider, key: 'user' } + + EzSystems\EzPlatformAdminUi\UI\Config\Provider\Module\UniversalDiscoveryWidget: + tags: + - { name: ezplatform.admin_ui.config_provider, key: 'universalDiscoveryWidget' } diff --git a/src/bundle/Resources/public/js/alloyeditor/src/base/ez-embeddiscovercontent.js b/src/bundle/Resources/public/js/alloyeditor/src/base/ez-embeddiscovercontent.js index 2901a2da55..77e6ef41ea 100644 --- a/src/bundle/Resources/public/js/alloyeditor/src/base/ez-embeddiscovercontent.js +++ b/src/bundle/Resources/public/js/alloyeditor/src/base/ez-embeddiscovercontent.js @@ -21,7 +21,7 @@ export default class EzEmbedDiscoverContentButton extends EzWidgetButton { confirmLabel: 'Select content', title: this.props.udwTitle, multiple: false, - startingLocationId: '1', + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, restInfo: {token, siteaccess}, canSelectContent: selectable, }), udwContainer); diff --git a/src/bundle/Resources/public/js/alloyeditor/src/buttons/ez-btn-linkedit.js b/src/bundle/Resources/public/js/alloyeditor/src/buttons/ez-btn-linkedit.js index 30e465546c..5679b8c3c5 100644 --- a/src/bundle/Resources/public/js/alloyeditor/src/buttons/ez-btn-linkedit.js +++ b/src/bundle/Resources/public/js/alloyeditor/src/buttons/ez-btn-linkedit.js @@ -85,7 +85,7 @@ export default class EzBtnLinkEdit extends Component { confirmLabel: 'Select content', title: 'Select content', multiple: false, - startingLocationId: '1', + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, restInfo: {token, siteaccess}, }), udwContainer); }; diff --git a/src/bundle/Resources/public/js/scripts/admin.limitation.pick.js b/src/bundle/Resources/public/js/scripts/admin.limitation.pick.js index 74c180d40f..6f3c5a7749 100644 --- a/src/bundle/Resources/public/js/scripts/admin.limitation.pick.js +++ b/src/bundle/Resources/public/js/scripts/admin.limitation.pick.js @@ -19,6 +19,7 @@ onCancel: closeUDW, confirmLabel: 'Add locations', title: 'Choose locations', + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, multiple: true, restInfo: {token, siteaccess} }), udwContainer); diff --git a/src/bundle/Resources/public/js/scripts/admin.role_assignment.add.js b/src/bundle/Resources/public/js/scripts/admin.role_assignment.add.js index 7200ad7220..91ff25d0d2 100644 --- a/src/bundle/Resources/public/js/scripts/admin.role_assignment.add.js +++ b/src/bundle/Resources/public/js/scripts/admin.role_assignment.add.js @@ -19,6 +19,7 @@ onConfirm: selectSubtreeConfirm.bind(this), onCancel: closeUDW, multiple: true, + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, restInfo: {token, siteaccess} }), udwContainer); }; diff --git a/src/bundle/Resources/public/js/scripts/admin.section.list.js b/src/bundle/Resources/public/js/scripts/admin.section.list.js index 61d0b18312..b4121f11ae 100644 --- a/src/bundle/Resources/public/js/scripts/admin.section.list.js +++ b/src/bundle/Resources/public/js/scripts/admin.section.list.js @@ -24,6 +24,7 @@ ReactDOM.render(React.createElement(eZ.modules.UniversalDiscovery, { onConfirm: onConfirm.bind(this, form), onCancel, + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, restInfo: {token, siteaccess} }), udwContainer); }; diff --git a/src/bundle/Resources/public/js/scripts/admin.section.view.js b/src/bundle/Resources/public/js/scripts/admin.section.view.js index e209df706e..e3dc86054f 100644 --- a/src/bundle/Resources/public/js/scripts/admin.section.view.js +++ b/src/bundle/Resources/public/js/scripts/admin.section.view.js @@ -21,6 +21,7 @@ ReactDOM.render(React.createElement(eZ.modules.UniversalDiscovery, { onConfirm: onConfirm.bind(this, form), onCancel, + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, restInfo: {token, siteaccess} }), udwContainer); }; diff --git a/src/bundle/Resources/public/js/scripts/admin.trash.list.js b/src/bundle/Resources/public/js/scripts/admin.trash.list.js index c63e098c4f..f53d8828bf 100644 --- a/src/bundle/Resources/public/js/scripts/admin.trash.list.js +++ b/src/bundle/Resources/public/js/scripts/admin.trash.list.js @@ -23,6 +23,7 @@ onCancel, confirmLabel: 'Restore', title: 'Select a location to restore you content item(s)', + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, restInfo: {token, siteaccess} }), udwContainer); }; diff --git a/src/bundle/Resources/public/js/scripts/fieldType/ezobjectrelationlist.js b/src/bundle/Resources/public/js/scripts/fieldType/ezobjectrelationlist.js index a6d855f947..e18fcff8a2 100644 --- a/src/bundle/Resources/public/js/scripts/fieldType/ezobjectrelationlist.js +++ b/src/bundle/Resources/public/js/scripts/fieldType/ezobjectrelationlist.js @@ -77,8 +77,9 @@ const trashBtn = fieldContainer.querySelector('.ez-relations__table-action--remove'); const isSingle = fieldContainer.classList.contains(CLASS_FIELD_SINGLE); const selectedItemsLimit = isSingle ? 1 : parseInt(relationsContainer.dataset.limit, 10); - const startingLocationId = relationsContainer.dataset.defaultLocation !== '0' ? - parseInt(relationsContainer.dataset.defaultLocation, 10) : 1; + const startingLocationId = relationsContainer.dataset.defaultLocation !== '0' + ? parseInt(relationsContainer.dataset.defaultLocation, 10) + : window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId; const allowedContentTypes = relationsContainer.dataset.allowedContentTypes.split(',').filter(item => item.length); const closeUDW = () => udwContainer.innerHTML = ''; const renderRows = (items) => items.forEach((...args) => relationsContainer.insertAdjacentHTML('beforeend', renderRow(...args))); diff --git a/src/bundle/Resources/public/js/scripts/udw/locations.tab.js b/src/bundle/Resources/public/js/scripts/udw/locations.tab.js index 6a2d23bbe5..5f383ad2ba 100644 --- a/src/bundle/Resources/public/js/scripts/udw/locations.tab.js +++ b/src/bundle/Resources/public/js/scripts/udw/locations.tab.js @@ -24,6 +24,7 @@ confirmLabel: 'Add location', title: 'Select location', multiple: false, + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, restInfo: {token, siteaccess} }), udwContainer); }; diff --git a/src/bundle/Resources/public/js/scripts/udw/swap.js b/src/bundle/Resources/public/js/scripts/udw/swap.js index 7439fca015..2315b7f642 100644 --- a/src/bundle/Resources/public/js/scripts/udw/swap.js +++ b/src/bundle/Resources/public/js/scripts/udw/swap.js @@ -22,7 +22,7 @@ confirmLabel: 'Swap location', title: 'Select location to be swapped with', multiple: false, - startingLocationId: parseInt(event.currentTarget.dataset.rootLocation, 10), + startingLocationId: window.eZ.adminUiConfig.universalDiscoveryWidget.startingLocationId, restInfo: {token, siteaccess} }), udwContainer); }; diff --git a/src/bundle/Resources/views/content/tab/locations/panel_swap.html.twig b/src/bundle/Resources/views/content/tab/locations/panel_swap.html.twig index 586ed527d0..929c0defbc 100644 --- a/src/bundle/Resources/views/content/tab/locations/panel_swap.html.twig +++ b/src/bundle/Resources/views/content/tab/locations/panel_swap.html.twig @@ -11,7 +11,7 @@ <tr> <td> {{ 'tab.locations.swap_with_another'|trans()|desc('Swap the content item at this location with another') }} - {{ form_widget(form.swap, {'attr': {'class': 'btn-outline-secondary btn--udw-swap ml-5', 'data-root-location': '1'}}) }} + {{ form_widget(form.swap, {'attr': {'class': 'btn-outline-secondary btn--udw-swap ml-5'}}) }} {{ form_widget(form.current_location) }} {{ form_widget(form.new_location) }} </td> diff --git a/src/lib/Menu/ContentRightSidebarBuilder.php b/src/lib/Menu/ContentRightSidebarBuilder.php index 45ac129530..ddc239b542 100644 --- a/src/lib/Menu/ContentRightSidebarBuilder.php +++ b/src/lib/Menu/ContentRightSidebarBuilder.php @@ -10,6 +10,7 @@ use eZ\Publish\API\Repository\PermissionResolver; use eZ\Publish\API\Repository\Values\Content\Location; use eZ\Publish\API\Repository\Values\ContentType\ContentType; +use eZ\Publish\Core\MVC\ConfigResolverInterface; use EzSystems\EzPlatformAdminUi\Menu\Event\ConfigureMenuEvent; use InvalidArgumentException; use JMS\TranslationBundle\Model\Message; @@ -34,19 +35,25 @@ class ContentRightSidebarBuilder extends AbstractBuilder implements TranslationC /** @var PermissionResolver */ private $permissionResolver; + /** @var ConfigResolverInterface */ + private $configResolver; + /** - * @param PermissionResolver $permissionResolver * @param MenuItemFactory $factory * @param EventDispatcherInterface $eventDispatcher + * @param PermissionResolver $permissionResolver + * @param ConfigResolverInterface $configResolver */ public function __construct( MenuItemFactory $factory, EventDispatcherInterface $eventDispatcher, - PermissionResolver $permissionResolver + PermissionResolver $permissionResolver, + ConfigResolverInterface $configResolver ) { parent::__construct($factory, $eventDispatcher); $this->permissionResolver = $permissionResolver; + $this->configResolver = $configResolver; } /** @@ -117,7 +124,9 @@ public function createStructure(array $options): ItemInterface 'extras' => ['icon' => 'move'], 'attributes' => [ 'class' => 'btn--udw-move', - 'data-root-location' => 1, + 'data-root-location' => $this->configResolver->getParameter( + 'universal_discovery_widget_module.default_location_id' + ), ], ] ), @@ -127,7 +136,9 @@ public function createStructure(array $options): ItemInterface 'extras' => ['icon' => 'copy'], 'attributes' => [ 'class' => 'btn--udw-copy', - 'data-root-location' => 1, + 'data-root-location' => $this->configResolver->getParameter( + 'universal_discovery_widget_module.default_location_id' + ), ], ] ), diff --git a/src/lib/Menu/LeftSidebarBuilder.php b/src/lib/Menu/LeftSidebarBuilder.php index 9b29d6bf55..3964b05555 100644 --- a/src/lib/Menu/LeftSidebarBuilder.php +++ b/src/lib/Menu/LeftSidebarBuilder.php @@ -6,11 +6,13 @@ */ namespace EzSystems\EzPlatformAdminUi\Menu; +use eZ\Publish\Core\MVC\ConfigResolverInterface; use EzSystems\EzPlatformAdminUi\Menu\Event\ConfigureMenuEvent; use InvalidArgumentException; use JMS\TranslationBundle\Model\Message; use JMS\TranslationBundle\Translation\TranslationContainerInterface; use Knp\Menu\ItemInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; /** * KnpMenuBundle Menu Builder service implementation for AdminUI left sidebar menu. @@ -19,11 +21,29 @@ */ class LeftSidebarBuilder extends AbstractBuilder implements TranslationContainerInterface { + /** @var ConfigResolverInterface */ + private $configResolver; + /* Menu items */ const ITEM__SEARCH = 'sidebar_left__search'; const ITEM__BROWSE = 'sidebar_left__browse'; const ITEM__TRASH = 'sidebar_left__trash'; + /** + * @param MenuItemFactory $factory + * @param EventDispatcherInterface $eventDispatcher + * @param ConfigResolverInterface $configResolver + */ + public function __construct( + MenuItemFactory $factory, + EventDispatcherInterface $eventDispatcher, + ConfigResolverInterface $configResolver + ) { + parent::__construct($factory, $eventDispatcher); + + $this->configResolver = $configResolver; + } + /** * @return string */ @@ -57,7 +77,9 @@ public function createStructure(array $options): ItemInterface 'extras' => ['icon' => 'browse'], 'attributes' => [ 'class' => 'btn--udw-browse', - 'data-starting-location-id' => 1, + 'data-starting-location-id' => $this->configResolver->getParameter( + 'universal_discovery_widget_module.default_location_id' + ), ], ] ), diff --git a/src/lib/UI/Config/Provider/Module/UniversalDiscoveryWidget.php b/src/lib/UI/Config/Provider/Module/UniversalDiscoveryWidget.php new file mode 100644 index 0000000000..0956d6039f --- /dev/null +++ b/src/lib/UI/Config/Provider/Module/UniversalDiscoveryWidget.php @@ -0,0 +1,41 @@ +<?php + +/** + * @copyright Copyright (C) eZ Systems AS. All rights reserved. + * @license For full copyright and license information view LICENSE file distributed with this source code. + */ +namespace EzSystems\EzPlatformAdminUi\UI\Config\Provider\Module; + +use eZ\Publish\Core\MVC\ConfigResolverInterface; +use EzSystems\EzPlatformAdminUi\UI\Config\ProviderInterface; + +/** + * Provides information about current user with resolved profile picture. + */ +class UniversalDiscoveryWidget implements ProviderInterface +{ + /** @var ConfigResolverInterface */ + private $configResolver; + + /** + * @param ConfigResolverInterface $configResolver + */ + public function __construct( + ConfigResolverInterface $configResolver + ) { + $this->configResolver = $configResolver; + } + + /** + * @return array + */ + public function getConfig(): array + { + /* config structure has to reflect UDW module's config structure */ + return [ + 'startingLocationId' => $this->configResolver->getParameter( + 'universal_discovery_widget_module.default_location_id' + ), + ]; + } +}