diff --git a/.docksal/commands/init b/.docksal/commands/init deleted file mode 100755 index 1bac4d3749e82890850b3f78a21fd7a4fec6f9df..0000000000000000000000000000000000000000 --- a/.docksal/commands/init +++ /dev/null @@ -1,3 +0,0 @@ -fin up -fin exec composer install -fin exec /var/www/vendor/bin/run drupal:site-install diff --git a/.docksal/commands/run_tests b/.docksal/commands/run_tests deleted file mode 100755 index a1539c2a8ba49e6cc0224f90c0d28bdbb7bb10f3..0000000000000000000000000000000000000000 --- a/.docksal/commands/run_tests +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -## Run phpunit tests -## -## Tests: -## - fin run_tests --filter 'UiPatternsSettingsRenderTest' - -set -e - -fin exec /var/www/vendor/bin/phpunit $* diff --git a/.docksal/docksal.env b/.docksal/docksal.env deleted file mode 100644 index 874d3aad1a1a9747c86cafc173bc1084427e0507..0000000000000000000000000000000000000000 --- a/.docksal/docksal.env +++ /dev/null @@ -1,6 +0,0 @@ -DOCKSAL_STACK=default -DOCROOT=build -XDEBUG_ENABLED=0 -WEB_IMAGE='docksal/web:2.1-apache2.4' -DB_IMAGE='docksal/db:1.3-mysql-5.7' -CLI_IMAGE='docksal/cli:php8.1-3.2' diff --git a/.docksal/docksal.yml b/.docksal/docksal.yml deleted file mode 100644 index 2c4378d01d4814cc78821c8d49b327ade3a1d824..0000000000000000000000000000000000000000 --- a/.docksal/docksal.yml +++ /dev/null @@ -1,28 +0,0 @@ -version: "2.1" -services: - # Web - web: - extends: - file: ${HOME}/.docksal/stacks/services.yml - service: apache - depends_on: - - cli - - # DB - db: - extends: - file: ${HOME}/.docksal/stacks/services.yml - service: mysql - # CLI - cli: - extends: - file: ${HOME}/.docksal/stacks/services.yml - service: cli - labels: - - io.docksal.virtual-host=storybook.${VIRTUAL_HOST} - - io.docksal.virtual-port=3000 - environment: - - "XDEBUG_CONFIG=client_host=${DOCKSAL_HOST_IP} client_port=9000" - - "XDEBUG_MODE=debug" - - DOCKSAL=1 - - PHP_IDE_CONFIG=serverName=${VIRTUAL_HOST} diff --git a/.docksal/etc/php/php-cli.ini b/.docksal/etc/php/php-cli.ini deleted file mode 100644 index a764a8a2643837ca8078b8a298cb469318997d64..0000000000000000000000000000000000000000 --- a/.docksal/etc/php/php-cli.ini +++ /dev/null @@ -1,4 +0,0 @@ -; PHP CLI settings -[php] -; Maximum amount of memory a script may consume -memory_limit = -1 \ No newline at end of file diff --git a/.docksal/etc/php/php.ini b/.docksal/etc/php/php.ini deleted file mode 100644 index c96b7075874a401cf60568444e504645db008d62..0000000000000000000000000000000000000000 --- a/.docksal/etc/php/php.ini +++ /dev/null @@ -1,4 +0,0 @@ -; PHP CLI settings -[php] -; Maximum amount of memory a script may consume -memory_limit = -1 diff --git a/.github_changelog_generator b/.github_changelog_generator deleted file mode 100644 index 6d4371808517eec89a5c5b815f184a5baa9e6f74..0000000000000000000000000000000000000000 --- a/.github_changelog_generator +++ /dev/null @@ -1,5 +0,0 @@ -merge_prefix=**Merged Pull Requests** -tag1='API change' -include-labels='API change,Bug,New feature' -enhancement_prefix=**New features** -enhancement-labels='New feature' diff --git a/.gitignore b/.gitignore index d753432361cd01803d69137234fed09af13b12a3..a09c56df5c7fd744f3166e151ae91dd41e57fec9 100755 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1 @@ /.idea -/vendor -/composer.lock -/docs/_build -/build/ -/phpunit.xml -/docker-compose.override.yml -/runner.yml -/.docksal/docksal-local.env -/.editorconfig -/.gitattributes \ No newline at end of file diff --git a/.phpunit.result.cache b/.phpunit.result.cache deleted file mode 100644 index b0218bf7bdf02b7f9d712d14675f864ae8b5f2db..0000000000000000000000000000000000000000 --- a/.phpunit.result.cache +++ /dev/null @@ -1 +0,0 @@ -{"version":1,"defects":{"Drupal\\Tests\\ui_patterns_settings\\Functional\\UiPatternsSettingsRenderTest::testRender":4},"times":{"Drupal\\Tests\\ui_patterns_settings\\Functional\\UiPatternsSettingsRenderTest::testRender":9.008}} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index fe179c33a2a96f75f453f27f380ff6b38a87af62..0000000000000000000000000000000000000000 --- a/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ -sudo: required -language: php - -php: - - 7.3 - - 7.4 - -services: - - docker - -env: - global: - - DOCKER_COMPOSE_VERSION=1.25.5 - matrix: - - DRUPAL_VERSION=~8.8.7 GRUMPHP_CONFIG=grumphp.drupal8.yml - - DRUPAL_VERSION=~8.9.0 GRUMPHP_CONFIG=grumphp.drupal8.yml - - DRUPAL_VERSION=~9.0.0 GRUMPHP_CONFIG=grumphp.yml - - DRUPAL_VERSION=9.1.x-dev GRUMPHP_CONFIG=grumphp.yml - -matrix: - allow_failures: - - env: DRUPAL_VERSION=9.1.x-dev - -before_install: - - docker-compose up -d - -install: - - docker-compose exec -u root php composer require drupal/core-recommended:$DRUPAL_VERSION --dev - - docker-compose exec -u root php chown -R www-data:www-data build - -script: - - docker-compose exec -u www-data php ./vendor/bin/grumphp run -c $GRUMPHP_CONFIG - - docker-compose exec -u www-data php ./vendor/bin/phpunit - -notifications: - email: false - diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 420e6f23d0e3718c1c5268dee41ebe58f931a563..0000000000000000000000000000000000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1 +0,0 @@ -# Change Log diff --git a/composer.json b/composer.json deleted file mode 100644 index 1927a7fda99b0916217d35dd3f800b53260fe824..0000000000000000000000000000000000000000 --- a/composer.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "drupal/ui_patterns_settings", - "type": "drupal-module", - "description": "UI Patterns Settings.", - "keywords": [ - "drupal", - "web", - "ui" - ], - "license": "GPL-2.0+", - "minimum-stability": "dev", - "prefer-stable": true, - "authors": [ - { - "name": "Christian Wiedemann", - "email": "christian.wiedemann@key-tec.de" - } - ], - "require-dev": { - "composer/installers": "^1.2", - "drupal/core-composer-scaffold": "^8.8 || ^9 || ^10", - "drupal/ui_patterns_layout_builder": "~1", - "drupal/core-dev": "^8.8 || ^9 || ^10", - "drupal/ui_patterns": "~1.3", - "drupal/token": "~1.0", - "drush/drush": "~11", - "drupal/ui_patterns_field_formatters": "^2.0", - "drupal/core-recommended": "~10 || ^9", - "openeuropa/task-runner": "~2.0.0-alpha1", - "phpro/grumphp": "~1.5", - "drupal/ds": "^3.15", - "drupal/form_options_attributes": "^2.0" - }, - "repositories": [ - { - "type": "composer", - "url": "https://packages.drupal.org/8" - } - ], - "autoload": { - "psr-4": { - "Drupal\\ui_patterns_settings_settings\\": "./src" - } - }, - "autoload-dev": { - "psr-4": { - "Drupal\\Tests\\ui_patterns_settings_settings\\": "./tests/src" - } - }, - "scripts": { - "post-install-cmd": "./vendor/bin/run drupal:site-setup", - "post-update-cmd": "./vendor/bin/run drupal:site-setup" - }, - "extra": { - "enable-patching": true, - "composer-exit-on-patch-failure": true, - "drupal-scaffold": { - "locations": { - "web-root": "build/" - } - }, - "installer-paths": { - "build/core": [ - "type:drupal-core" - ], - "build/modules/contrib/{$name}": [ - "type:drupal-module" - ], - "build/profiles/contrib/{$name}": [ - "type:drupal-profile" - ], - "build/themes/contrib/{$name}": [ - "type:drupal-theme" - ] - } - }, - "config": { - "sort-packages": true, - "allow-plugins": { - "composer/installers": true, - "cweagans/composer-patches": true, - "drupal/core-composer-scaffold": true, - "phpro/grumphp": true, - "phpstan/extension-installer": true, - "dealerdirect/phpcodesniffer-composer-installer": true - } - } -} diff --git a/config/schema/ui_patterns_settings.schema.yml b/config/schema/ui_patterns_settings.schema.yml deleted file mode 100644 index 083e79176df277f02ad75861882c50544f3ced69..0000000000000000000000000000000000000000 --- a/config/schema/ui_patterns_settings.schema.yml +++ /dev/null @@ -1,10 +0,0 @@ -ui_patterns_settings.settings: - type: config_object - label: 'UI Patterns settings config' - mapping: - mapping: - type: sequence - label: 'Mapping' - sequence: - type: string - label: 'Field mapping' diff --git a/config/schema/ui_patterns_settings.sources.schema.yml b/config/schema/ui_patterns_settings.sources.schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..d26b260542288cc9d019e564e3711165b7ac59df --- /dev/null +++ b/config/schema/ui_patterns_settings.sources.schema.yml @@ -0,0 +1,10 @@ +ui_patterns_source.media: + type: mapping + label: 'Source: Media' + mapping: + media: + type: mapping + label: 'Media' + mapping: + media_library_selection: + type: string diff --git a/css/toggler.png b/css/toggler.png deleted file mode 100644 index e8db53e8361249c25f17fdeb1911e0984679e4a3..0000000000000000000000000000000000000000 Binary files a/css/toggler.png and /dev/null differ diff --git a/css/ui_patterns_settings.css b/css/ui_patterns_settings.css deleted file mode 100644 index b67c0d77269560508bb4449963b84f771e8ad794..0000000000000000000000000000000000000000 --- a/css/ui_patterns_settings.css +++ /dev/null @@ -1,50 +0,0 @@ -.js-ui-patterns-settings__wrapper { - position: relative; -} - -#ui-patterns-settings-token-link { - display: none; -} - -.ui-patterns-settings-show-token-a { - display: block; -} - -.js-ui-patterns-settings__toggler { - position: absolute; - width: 14px; - height: 14px; - right: 0; - top: 0; - display: block; - cursor: pointer; - background-image: url("toggler.png"); - background-repeat: no-repeat; - background-size: cover; -} - -.js-ui-patterns-settings__wrapper .js-ui-patterns-settings__token-wrapper > * { - display: none !important; -} - -.js-ui-patterns-settings__wrapper.js-ui-patterns-settings--token-has-value > .js-ui-patterns-settings__input-wrapper > * { - display: none !important; -} - -.js-ui-patterns-settings__wrapper.js-ui-patterns-settings--token-has-value > .js-ui-patterns-settings__token-wrapper > * { - display: block !important; -} - -.ui-patterns-media-edit { - position: relative; -} - -.media-library-edit__link { - position: absolute; - right: 0; - z-index: 10; -} - -.media-library-form-element .fieldset-wrapper { - position: relative; -} diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index c9c010c560b4e0c3dfdbc58902b5fe971acfe076..0000000000000000000000000000000000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,67 +0,0 @@ -version: "2" - -services: - - mariadb: - image: wodby/mariadb:10.3-3.8.4 - stop_grace_period: 30s - environment: - MYSQL_ROOT_PASSWORD: password - MYSQL_DATABASE: drupal - MYSQL_USER: drupal - MYSQL_PASSWORD: drupal - - php: - image: wodby/drupal-php:${TRAVIS_PHP_VERSION}-4.15.9 - environment: - DB_HOST: mariadb - DB_USER: drupal - DB_PASSWORD: drupal - DB_NAME: drupal - DB_DRIVER: mysql - PHP_XDEBUG: 1 - PHP_XDEBUG_DEFAULT_ENABLE: 1 - PHP_XDEBUG_REMOTE_CONNECT_BACK: 1 - PHP_XDEBUG_REMOTE_HOST: "10.254.254.254" - PHP_XDEBUG_IDEKEY: "PHPSTORM" - PHP_IDE_CONFIG: "serverName=ui_patterns" - volumes: - - ./:/var/www/html - - nginx: - image: wodby/nginx:1.15-5.0.0 - depends_on: - - php - environment: - NGINX_STATIC_OPEN_FILE_CACHE: "off" - NGINX_ERROR_LOG_LEVEL: debug - NGINX_BACKEND_HOST: php - NGINX_SERVER_ROOT: /var/www/html/build - NGINX_VHOST_PRESET: drupal8 - volumes: - - ./:/var/www/html - ports: - - "8080:80" - - # If you would like to see what is going on you can run the following on your host: - # docker run --rm -p 4444:4444 -p 5900:5900 --network="host" selenium/standalone-chrome-debug:latest - # Newer version of this image might run into this issue: - # @link https://github.com/elgalu/docker-selenium/issues/20 - selenium: - image: selenium/standalone-chrome-debug:3.11 - expose: - - '4444' - environment: - - DISPLAY=:99 - - SE_OPTS=-debug - - SCREEN_WIDTH=1280 - - SCREEN_HEIGHT=800 - - VNC_NO_PASSWORD=1 - ports: - - '4444:4444' - - "5900:5900" - volumes: - - /dev/shm:/dev/shm - -volumes: - codebase: diff --git a/grumphp.drupal8.yml b/grumphp.drupal8.yml deleted file mode 100644 index 79311e2201080fa38dc20e442475b4245a2cd82b..0000000000000000000000000000000000000000 --- a/grumphp.drupal8.yml +++ /dev/null @@ -1,16 +0,0 @@ -grumphp: - ascii: - failed: ~ - succeeded: ~ - tasks: - phpcs: - standard: vendor/drupal/coder/coder_sniffer/Drupal/ - ignore_patterns: - - build/ - - vendor/ - triggered_by: - - php - - module - - install - - inc - - theme diff --git a/grumphp.yml b/grumphp.yml deleted file mode 100644 index 79311e2201080fa38dc20e442475b4245a2cd82b..0000000000000000000000000000000000000000 --- a/grumphp.yml +++ /dev/null @@ -1,16 +0,0 @@ -grumphp: - ascii: - failed: ~ - succeeded: ~ - tasks: - phpcs: - standard: vendor/drupal/coder/coder_sniffer/Drupal/ - ignore_patterns: - - build/ - - vendor/ - triggered_by: - - php - - module - - install - - inc - - theme diff --git a/images/settings.png b/images/settings.png deleted file mode 100644 index e4a07572c240b2fadc588eaadff5f4508064b576..0000000000000000000000000000000000000000 Binary files a/images/settings.png and /dev/null differ diff --git a/js/ui_pattern_settings.toggle_token.js b/js/ui_pattern_settings.toggle_token.js deleted file mode 100644 index 2bd98be9d5bbd7bceb47244fdf753776e0b94ede..0000000000000000000000000000000000000000 --- a/js/ui_pattern_settings.toggle_token.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @file - * JavaScript file for the UI Pattern settings module. - */ - -(function ($, Drupal, drupalSettings, DrupalCoffee) { - - 'use strict'; - - /** - * Attaches ui patterns settings module behaviors. - * - * Handles enable/disable token element. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attach ui patterns settings toggle functionality to the page. - * - */ - Drupal.behaviors.ups_toggle_token = { - attach: function () { - once('ui-patterns-settings-show-token-link', '.js-ui-patterns-settings-show-token-link').forEach(function (elm) { - $(elm).after($('<a href="#" class="ui-patterns-settings-show-token-a">' + Drupal.t('Browse available token') + '</a>').click(function (event) { - event.preventDefault(); - $('#ui-patterns-settings-token-link:first a').click(); - })); - }); - - once('ui-patterns-settings-wrapper', '.js-ui-patterns-settings__wrapper').forEach(function (el) { - var wrapper = $(el); - var toggler = $('<div class="js-ui-patterns-settings__toggler" title="Use token"></div>'); - $(toggler).click(function () { - var tokenInput = $('.js-ui-patterns-settings__token', wrapper); - if ($(wrapper).hasClass('js-ui-patterns-settings--token-has-value')) { - tokenInput.attr('data-init-val', tokenInput.val()); - tokenInput.val(''); - wrapper.removeClass('js-ui-patterns-settings--token-has-value'); - } else { - tokenInput.val(tokenInput.attr('data-init-val')); - wrapper.addClass('js-ui-patterns-settings--token-has-value'); - } - }); - $('.js-ui-patterns-settings__input-wrapper', wrapper).append(toggler) - $('.js-ui-patterns-settings__token-wrapper', wrapper).append(toggler.clone(true)) - }); - } - }; -})(jQuery, Drupal, drupalSettings); diff --git a/runner.docksal.yml b/runner.docksal.yml deleted file mode 100644 index 7222a68bfa9738fe2d44c9ecde100c8f76a2af27..0000000000000000000000000000000000000000 --- a/runner.docksal.yml +++ /dev/null @@ -1,46 +0,0 @@ -drupal: - root: "build" - base_url: "http://ui-patterns-settings.docksal" - database: - host: "db" - port: "3306" - name: "default" - user: "root" - password: "root" - post_install: - - "./vendor/bin/drush en -y ui_patterns ui_patterns_library ui_patterns_ds ui_patterns_field_group ui_patterns_layouts ui_patterns_views ui_patterns_settings ui_patterns_settings_render_test" - - "./vendor/bin/drush en -y coffee config_devel" - - "./vendor/bin/drush en -y page_manager paragraphs panels" - - "./vendor/bin/drush cr" - settings: - settings: - container_yamls: - - "/var/www/${drupal.root}/sites/development.services.yml" - extension_discovery_scan_tests: true - cache: - bins: - dynamic_page_cache: "cache.backend.null" - page_cache: "cache.backend.null" - render: "cache.backend.null" - file_scan_ignore_directories: - - "vendor" - - "${drupal.root}" - -selenium: - host: "http://selenium:4444" - browser: "chrome" - -commands: - drupal:site-setup: - - { task: "symlink", from: "../../../../src", to: "${drupal.root}/modules/custom/ui_patterns_settings/src" } - - { task: "symlink", from: "../../../../tests", to: "${drupal.root}/modules/custom/ui_patterns_settings/tests" } - - { task: "symlink", from: "../../../../ui_patterns_settings.info.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.info.yml" } - - { task: "symlink", from: "../../../../ui_patterns_settings.module", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.module" } - - { task: "symlink", from: "../../../../ui_patterns_settings.services.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.services.yml" } - # Generate settings.testing.php, it will be used when running functional tests. - - { task: "process-php", type: "write", config: "drupal.settings", source: "${drupal.root}/sites/default/default.settings.php", destination: "${drupal.root}/sites/default/settings.testing.php", override: true } - - { task: "run", command: "drupal:drush-setup" } - - { task: "run", command: "drupal:settings-setup" } - - { task: "run", command: "setup:phpunit" } - setup:phpunit: - - { task: "process", source: "phpunit.xml.dist", destination: "phpunit.xml" } diff --git a/runner.yml.dist b/runner.yml.dist deleted file mode 100644 index 6be0adfb4e212f99b9fcbea8c70fe234766e8bc4..0000000000000000000000000000000000000000 --- a/runner.yml.dist +++ /dev/null @@ -1,48 +0,0 @@ -drupal: - root: "build" - base_url: "http://ui-patterns-settings.docksal" - database: - host: "db" - port: "3306" - name: "default" - user: "root" - password: "root" - post_install: - - "./vendor/bin/drush en -y ui_patterns layout_builder ui_patterns_layout_builder ui_patterns_library ui_patterns_layouts ui_patterns_views ui_patterns_settings ui_patterns_settings_render_test" - - "./vendor/bin/drush cr" - settings: - settings: - container_yamls: - - "/var/www/${drupal.root}/sites/development.services.yml" - extension_discovery_scan_tests: true - cache: - bins: - dynamic_page_cache: "cache.backend.null" - page_cache: "cache.backend.null" - render: "cache.backend.null" - file_scan_ignore_directories: - - "vendor" - - "${drupal.root}" - -selenium: - host: "http://selenium:4444" - browser: "chrome" - -commands: - drupal:site-setup: - - { task: "symlink", from: "../../../../config", to: "${drupal.root}/modules/custom/ui_patterns_settings/config" } - - { task: "symlink", from: "../../../../src", to: "${drupal.root}/modules/custom/ui_patterns_settings/src" } - - { task: "symlink", from: "../../../../js", to: "${drupal.root}/modules/custom/ui_patterns_settings/js" } - - { task: "symlink", from: "../../../../css", to: "${drupal.root}/modules/custom/ui_patterns_settings/css" } - - { task: "symlink", from: "../../../../tests", to: "${drupal.root}/modules/custom/ui_patterns_settings/tests" } - - { task: "symlink", from: "../../../../ui_patterns_settings.libraries.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.libraries.yml" } - - { task: "symlink", from: "../../../../ui_patterns_settings.info.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.info.yml" } - - { task: "symlink", from: "../../../../ui_patterns_settings.module", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.module" } - - { task: "symlink", from: "../../../../ui_patterns_settings.services.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.services.yml" } - # Generate settings.testing.php, it will be used when running functional tests. - - { task: "process-php", type: "write", config: "drupal.settings", source: "${drupal.root}/sites/default/default.settings.php", destination: "${drupal.root}/sites/default/settings.testing.php", override: true } - - { task: "run", command: "drupal:drush-setup" } - - { task: "run", command: "drupal:settings-setup" } - - { task: "run", command: "setup:phpunit" } - setup:phpunit: - - { task: "process", source: "phpunit.xml.dist", destination: "phpunit.xml" } diff --git a/src/Annotation/UiPatternsSettingType.php b/src/Annotation/UiPatternsSettingType.php deleted file mode 100644 index 935630a8c51be3c11aff80791221dd1428e0edc6..0000000000000000000000000000000000000000 --- a/src/Annotation/UiPatternsSettingType.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Annotation; - -use Drupal\Component\Annotation\Plugin; - -/** - * Defines a UI Patterns Setting Type annotation object. - * - * @see \Drupal\ui_patterns_settings\UiPatternsSettingManager - * @see plugin_api - * - * @Annotation - */ -class UiPatternsSettingType extends Plugin { - - /** - * The plugin ID. - * - * @var string - */ - public $id; - - /** - * The label of the plugin. - * - * @var \Drupal\Core\Annotation\Translation - * - * @ingroup plugin_translatable - */ - public $label; - -} diff --git a/src/ConfigManager.php b/src/ConfigManager.php deleted file mode 100644 index 27b6c304dacd85960fdea5608fd6fd999788d696..0000000000000000000000000000000000000000 --- a/src/ConfigManager.php +++ /dev/null @@ -1,120 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings; - -use Drupal\Core\Config\ConfigFactoryInterface; - -/** - * UI Patterns setting factory class. - * - * @package Drupal\ui_patterns_settings - */ -class ConfigManager { - - /** - * The config. - * - * @var \Drupal\Core\Config\Config - */ - private $config; - - /** - * Storage array by type. - * - * @var array - */ - private $typeMap = []; - - /** - * Storage array by variant. - * - * @var array - */ - private $variantMap = []; - - /** - * Constructs a new Fast404ExceptionHtmlSubscriber. - * - * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory - * The configuration factory. - */ - public function __construct(ConfigFactoryInterface $config_factory) { - $this->config = $config_factory->getEditable('ui_patterns_settings.settings'); - } - - /** - * Add mapping. - */ - public function addMapping($field_id, $pattern_setting_id) { - $field_id = str_replace('.', '--', $field_id); - $map = $this->config->get('mapping'); - if ($pattern_setting_id !== NULL) { - $map[$field_id] = $pattern_setting_id; - } - else { - unset($map[$field_id]); - } - - $this->config->set('mapping', $map); - $this->config->save(); - } - - /** - * Find all variant mappings. - * - * @return string[] - * List of all variant mappings. - */ - public function findVariantMappings($type) { - if (isset($this->variantMap[$type])) { - return $this->variantMap[$type]; - } - $map = is_array($this->config->get('mapping')) ? $this->config->get('mapping') : []; - foreach ($map as $field_id => $pattern_string) { - [$pattern_id, $setting_id] = explode('::', $pattern_string); - [$entity_type_id, $field_name] = explode('--', $field_id); - if ($setting_id === 'variant') { - $this->variantMap[$type][] = $field_name; - } - } - if (!isset($this->variantMap[$type])) { - $this->variantMap[$type] = []; - } - return $this->variantMap[$type]; - } - - /** - * Gets all mapping by entity type. - * - * @return string[] - * List of mappings. - */ - public function getMappingByType($type) { - if (isset($this->typeMap[$type])) { - return $this->typeMap[$type]; - } - $map = is_array($this->config->get('mapping')) ? $this->config->get('mapping') : []; - - foreach ($map as $field_id => $pattern_id) { - [$field_type, $field_name] = explode('--', $field_id); - $this->typeMap[$field_type][$field_name] = $pattern_id; - } - if (!isset($this->typeMap[$type])) { - $this->typeMap[$type] = []; - } - return $this->typeMap[$type]; - } - - /** - * Get Mapping by field id. - * - * @return string - * The pattern. - */ - public function getMapping($field_id) { - $field_id = str_replace('.', '--', $field_id); - $map = $this->config->get('mapping'); - return $map[$field_id] ?? NULL; - } - -} diff --git a/src/Definition/PatternDefinitionSetting.php b/src/Definition/PatternDefinitionSetting.php deleted file mode 100644 index e26beaff37ae65bcfc9c8872b621875207db1aa7..0000000000000000000000000000000000000000 --- a/src/Definition/PatternDefinitionSetting.php +++ /dev/null @@ -1,390 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Definition; - -use Drupal\ui_patterns\Definition\ArrayAccessDefinitionTrait; - -/** - * Pattern setting definition class. - * - * @package Drupal\ui_patterns_settings\Definition - */ -class PatternDefinitionSetting implements \ArrayAccess { - - use ArrayAccessDefinitionTrait; - - /** - * Default setting values. - * - * @var array - */ - protected $definition = [ - 'name' => NULL, - 'label' => NULL, - 'description' => NULL, - 'type' => NULL, - 'required' => FALSE, - 'default_value' => NULL, - 'group' => NULL, - 'forced_value' => NULL, - 'options' => NULL, - 'form_visible' => TRUE, - 'allow_token' => FALSE, - 'expose_as_field' => FALSE, - ]; - - /** - * PatternDefinitionSetting constructor. - */ - public function __construct($name, $value) { - if (is_scalar($value)) { - $this->definition['name'] = is_numeric($name) ? $value : $name; - $this->definition['label'] = $value; - $this->definition['type'] = 'textfield'; - $this->definition['preview'] = NULL; - $this->definition['group'] = NULL; - $this->definition['weight'] = NULL; - $this->definition['allow_token'] = FALSE; - $this->definition['allow_expose'] = FALSE; - $this->definition['expose_as_field'] = FALSE; - } - else { - $name_key = !isset($value['name']) ? $name : $value['name']; - $this->definition['name'] = $name_key; - $this->definition['group'] = $value['group'] ?? NULL; - $this->definition['weight'] = $value['weight'] ?? NULL; - $this->definition['type'] = $value['type'] ?? 'textfield'; - $this->definition['label'] = $value['label'] ?? $name_key; - $this->definition['required'] = $value['required'] ?? FALSE; - $this->definition['default_value'] = $value['default_value'] ?? NULL; - $this->definition['preview'] = $value['preview'] ?? NULL; - $this->definition['raw_options'] = $value['options'] ?? NULL; - - $unprocessed_options = $value['options'] ?? NULL; - unset($value['options']); - if (is_array($unprocessed_options)) { - $processed_options = []; - foreach ($unprocessed_options as $option_key => $option_value) { - if (is_array($option_value)) { - $processed_options[$option_key] = $option_value['label'] ?? 'undefined'; - } - else { - $processed_options[$option_key] = $option_value; - } - } - } - else { - $processed_options = NULL; - } - $this->definition['options'] = $processed_options; - - $this->definition['allow_token'] = $value['allow_token'] ?? FALSE; - $this->definition['allow_expose'] = $value['allow_expose'] ?? FALSE; - $this->definition['expose_as_field'] = $value['expose_as_field'] ?? FALSE; - - $this->definition = $value + $this->definition; - } - } - - /** - * Overwrite setting definition. - * - * @param array $definitions - * The overwritten definitions. - */ - public function setDefinitions(array $definitions) { - $this->definition = $definitions + $this->definition; - } - - /** - * Return any definition value. - * - * @return string - * The value. - */ - public function getValue($key) { - return $this->definition[$key] ?? NULL; - } - - /** - * Return array definition. - * - * @return array - * Array definition. - */ - public function toArray() { - return $this->definition; - } - - /** - * Get Name property. - * - * @return mixed - * Property value. - */ - public function getName() { - return $this->definition['name']; - } - - /** - * Get Group property. - * - * @return mixed - * Property value. - */ - public function getGroup() { - return $this->definition['group']; - } - - /** - * Get Label property. - * - * @return mixed - * Property value. - */ - public function getLabel() { - return $this->definition['label']; - } - - /** - * Get required property. - * - * @return mixed - * Property value. - */ - public function getRequired() { - return $this->definition['required']; - } - - /** - * Get allow token property. - * - * @return bool - * Property value. - */ - public function getAllowToken() { - return $this->definition['allow_token']; - } - - /** - * Get raw options array. - * - * @return mixed - * Property option. - */ - public function getRawOptions() { - return $this->definition['raw_options']; - } - - /** - * Get options array. - * - * @return mixed - * Property option. - */ - public function getOptions() { - return $this->definition['options']; - } - - /** - * Get default value property. - * - * @return mixed - * Property value. - */ - public function getDefaultValue() { - return $this->definition['default_value']; - } - - /** - * Set default value property. - * - * @return mixed - * Property value. - */ - public function setDefaultValue($defaultValue) { - $this->definition['default_value'] = $defaultValue; - return $this; - } - - /** - * Get weight value property. - * - * @return mixed - * Property value. - */ - public function getWeight() { - return $this->definition['weight']; - } - - /** - * Set weight property. - * - * @return mixed - * Property value. - */ - public function setWeight($weight) { - $this->definition['weight'] = $weight; - return $this; - } - - /** - * Set allow token value property. - * - * @param bool $allow_token - * Property value. - * - * @return $this - */ - public function setAllowToken($allow_token) { - $this->definition['allow_token'] = $allow_token; - return $this; - } - - /** - * Get default value property. - * - * @return mixed - * Property value. - */ - public function getForcedValue() { - return $this->definition['forced_value']; - } - - /** - * Get preview property. - * - * @return mixed - * Property value. - */ - public function getPreview() { - return $this->definition['preview']; - } - - /** - * Set default value property. - * - * @return mixed - * Property value. - */ - public function setForcedValue($forcedValue) { - $this->definition['forced_value'] = $forcedValue; - return $this; - } - - /** - * Get exposable property. - * - * @return string - * Property value. - */ - public function allowExpose() { - return $this->definition['allow_expose']; - } - - /** - * Set Exposable property. - * - * @param string $allow_expose - * Property value. - * - * @return $this - */ - public function setAllowExpose($allow_expose) { - $this->definition['allow_expose'] = $allow_expose; - return $this; - } - - /** - * Get Description property. - * - * @return string - * Property value. - */ - public function getDescription() { - return $this->definition['description']; - } - - /** - * Set Description property. - * - * @param string $description - * Property value. - * - * @return $this - */ - public function setDescription($description) { - $this->definition['description'] = $description; - return $this; - } - - /** - * Is form visible property. - * - * @return bool - * Property value. - */ - public function isFormVisible() { - return $this->definition['form_visible']; - } - - /** - * Set form visible property. - * - * @param bool $visible - * Property value. - * - * @return $this - */ - public function setFormVisible($visible) { - $this->definition['form_visible'] = $visible; - return $this; - } - - /** - * Get Type property. - * - * @return string - * Property value. - */ - public function getExposeAsField() { - return $this->definition['expose_as_field']; - } - - /** - * Set Expose property. - * - * @param string $expose_as_field - * Property value. - * - * @return $this - */ - public function setExposeAsField($expose_as_field) { - $this->definition['expose_as_field'] = $expose_as_field; - return $this; - } - - /** - * Get Type property. - * - * @return string - * Property value. - */ - public function getType() { - return $this->definition['type']; - } - - /** - * Set Type property. - * - * @param string $type - * Property value. - * - * @return $this - */ - public function setType($type) { - $this->definition['type'] = $type; - return $this; - } - -} diff --git a/src/Element/PatternSettings.php b/src/Element/PatternSettings.php deleted file mode 100644 index 55d67c6e5ea83e04a7c74caa2ed21ae469adaa1e..0000000000000000000000000000000000000000 --- a/src/Element/PatternSettings.php +++ /dev/null @@ -1,162 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Element; - -use Drupal\Core\Security\TrustedCallbackInterface; -use Drupal\Core\Template\Attribute; -use Drupal\ui_patterns\UiPatterns; -use Drupal\ui_patterns_settings\UiPatternsSettings; -use Drupal\Core\Entity\EntityMalformedException; - -/** - * Renders a pattern element. - */ -class PatternSettings implements TrustedCallbackInterface { - - /** - * Process settings for preview. - * - * @param array $element - * Render array. - * - * @return array - * Render array. - */ - public static function processPreviewSettings(array $element) { - return PatternSettings::processSettings($element, TRUE); - } - - /** - * Process settings. - * - * @param array $element - * Render array. - * @param bool $preview - * True when called in pattern preview mode. - * - * @return array - * Render array. - */ - public static function processSettings(array $element, $preview = FALSE) { - $alter_context = []; - $context = $element['#context']; - $pattern_id = $element['#id']; - /** @var \Drupal\Core\Entity\ContentEntityBase $entity */ - $entity = $context->getProperty('entity'); - if ($context->getType() === 'layout' && $entity !== NULL) { - $mappings = UiPatternsSettings::getConfigManager()->findVariantMappings($entity->getEntityTypeId()); - foreach ($mappings as $field_name) { - if ($entity->hasField($field_name) && !empty($entity->get($field_name)->value)) { - $element['#variant'] = $entity->get($field_name)->value; - } - } - } - - // Handling variant token for layout builder. - if (empty($element['#variant_token']) && isset($element['#layout'])) { - /** @var \Drupal\ui_patterns_layout_builder\Plugin\Layout\PatternLayoutBuilder $layout */ - $layout = $element['#layout']; - $configuration = $layout->getConfiguration(); - $element['#variant_token'] = $configuration['pattern']['variant_token'] ?? NULL; - } - - // Handle Variant token. - if (!empty($element['#variant_token'])) { - $variant_token = $element['#variant_token']; - $token_data = []; - if ($entity !== NULL) { - $token_data[$entity->getEntityTypeId()] = $entity; - } - try { - $element['#variant'] = \Drupal::token()->replace($variant_token, $token_data, ['clear' => TRUE]); - } - catch (EntityMalformedException $e) { - if (!ui_patterns_settings_is_layout_builder_route()) { - throw $e; - } - // Do nothing inside layout builder. - } - } - $variant_alter_context['#pattern_id'] = $pattern_id; - if (isset($element['#layout'])) { - $variant_alter_context['#layout'] = $element['#layout']; - } - $variant_alter_context['#pattern_context'] = $context; - $variant = $element['#variant']; - \Drupal::moduleHandler()->alter('ui_pattern_settings_variant', $variant, $variant_alter_context); - $element['#variant'] = $variant; - // Make sure we don't render anything in case fields are empty. - if (self::hasSettings($element)) { - $settings = $element['#settings'] ?? []; - // Handling display suite pattern. - if (empty($settings)) { - $settings = $element['#ds_configuration']['layout']['settings']['pattern']['settings'] ?? []; - } - // Handling layout builder. - if (empty($settings) && isset($element['#layout'])) { - /** @var \Drupal\ui_patterns_layout_builder\Plugin\Layout\PatternLayoutBuilder $layout */ - $layout = $element['#layout']; - $configuration = $layout->getConfiguration(); - $settings = $configuration['pattern']['settings'] ?? []; - } - $entity = $context->getProperty('entity'); - $variant = $element['#variant'] ?? NULL; - $settings = UiPatternsSettings::preprocess($pattern_id, $settings, $variant, $preview, $entity, $element); - if (isset($element['#layout'])) { - $alter_context['#layout'] = $element['#layout']; - } - $alter_context['#pattern_id'] = $pattern_id; - $alter_context['#variant'] = $variant; - $alter_context['#pattern_context'] = $context; - \Drupal::moduleHandler()->alter('ui_pattern_settings_settings', $settings, $alter_context); - unset($element['#settings']); - foreach ($settings as $name => $setting) { - $key = '#' . $name; - if (!isset($element[$key])) { - $element[$key] = $setting; - } - else { - if ($setting instanceof Attribute && $element[$key] instanceof Attribute) { - $element[$key] = new Attribute(array_merge($setting->toArray(), $element[$key]->toArray())); - } - elseif (is_array($element[$key]) && is_array($setting)) { - $element[$key] = array_merge($element[$key], $setting); - } elseif (empty($element[$key]) && !empty($setting)) { - // Handle Exposed fields. Overwrite expose fields if the setting is provided - // but the variable prefilled with an empty field. (e.g. component blocks) - $setting_definition = UiPatternsSettings::getPatternDefinitionSetting(UiPatterns::getPatternDefinition($pattern_id), $name); - if ($setting_definition !== NULL && $setting_definition->getExposeAsField()) { - $element[$key] = $setting; - } - } - } - } - } - return $element; - } - - /** - * Whereas pattern has settings or not. - * - * @return bool - * TRUE or FALSE. - */ - public static function hasSettings($element) { - $definition = UiPatterns::getPatternDefinition($element['#id']); - $settings = UiPatternsSettings::getPatternDefinitionSettings($definition); - if ($definition != NULL && count($settings) != 0) { - return TRUE; - } - else { - return FALSE; - } - } - - /** - * {@inheritdoc} - */ - public static function trustedCallbacks() { - return ['processSettings', 'processPreviewSettings']; - } - -} diff --git a/src/Form/SettingsFormBuilder.php b/src/Form/SettingsFormBuilder.php deleted file mode 100644 index 389642c04c9ca587791015b5697e0e704e7a8f65..0000000000000000000000000000000000000000 --- a/src/Form/SettingsFormBuilder.php +++ /dev/null @@ -1,270 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Form; - -use Drupal\Component\Utility\NestedArray; -use Drupal\Core\Entity\ContentEntityType; -use Drupal\Core\Form\FormState; -use Drupal\Core\Form\FormStateInterface; -use Drupal\ui_patterns\Definition\PatternDefinition; -use Drupal\ui_patterns\UiPatterns; -use Drupal\ui_patterns_settings\UiPatternsSettings; -use Drupal\ui_patterns_settings\UiPatternsSettingsManager; - -/** - * Build settings in manage display form. - */ -class SettingsFormBuilder { - - /** - * Build a hidden tree link token for performance reasons. - * - * Forms with class .js-ui-patterns-settings-show-token-link will - * generate Browse token button which click on the hidden link. - * This will reduce the number of browse buttons. - * - * @param array $form - * The form. - */ - private static function buildTokenLink(array &$form) { - - // Detecting current entity type. - // We don't have access to. - $request = \Drupal::request(); - $entity_type_id = $request->attributes->get('entity_type_id'); - if (empty($entity_type_id)) { - /** @var \Drupal\layout_builder\Plugin\SectionStorage\DefaultsSectionStorage $section_storage */ - $section_storage = $request->attributes->get('section_storage'); - if ($section_storage !== NULL) { - $entity_type_id = explode('.', $section_storage->getStorageId())[0]; - } - } - - if (!empty($entity_type_id)) { - $content_entity_types[] = $entity_type_id; - } - else { - $entity_type_definations = \Drupal::entityTypeManager()->getDefinitions(); - /** @var EntityTypeInterface $definition */ - foreach ($entity_type_definations as $definition) { - if ($definition instanceof ContentEntityType) { - $content_entity_types[] = $definition->id(); - } - } - } - - $form['token_link'] = [ - '#prefix' => '<div id="ui-patterns-settings-token-link">', - '#suffix' => '</div>', - '#theme' => 'token_tree_link', - '#token_types' => $content_entity_types, - '#show_restricted' => FALSE, - '#show_nested' => FALSE, - '#global_types' => TRUE, - '#click_insert' => TRUE, - '#recursion_limit' => 3, - '#weight' => 90, - ]; - } - - /** - * Ajax callback for variant change. - * - * @param array $form - * The form. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * The form state. - */ - public static function regenerateForm(array $form, FormStateInterface $form_state) { - return $form['layout_settings']['pattern']['settings']; - } - - /** - * Build pattern settings fieldset. - * - * @param array $form - * Form array. - * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition - * The pattern definition. - * @param array $configuration - * The pattern configuration. - */ - public static function layoutForm(array &$form, PatternDefinition $definition, array $configuration) { - $settings = UiPatternsSettings::getPatternDefinitionSettings($definition); - self::buildTokenLink($form); - - $form['variant']['#ajax'] = [ - 'callback' => '\Drupal\ui_patterns_settings\Form\SettingsFormBuilder::regenerateForm', - 'wrapper' => 'ui-patterns-settings-form-wrapper', - 'event' => 'change', - ]; - - $form['#attached']['library'][] = 'ui_patterns_settings/widget'; - if (UiPatternsSettingsManager::allowVariantToken($definition)) { - $variant_token_value = $configuration['pattern']['variant_token'] ?? NULL; - $form['variant_token'] = [ - '#type' => 'textfield', - '#title' => 'Variant token', - '#attributes' => ['class' => ['js-ui-patterns-settings-show-token-link']], - '#default_value' => $variant_token_value, - ]; - } - - $form['variant']['#attributes']['class'][] = 'ui-patterns-variant-selector-' . $definition->id(); - if (!empty($settings)) { - foreach ($settings as $key => $setting) { - if (empty($setting->getType()) || !$setting->isFormVisible()) { - continue; - } - - if (!isset($form['settings'])) { - $form['settings'] = [ - '#type' => 'fieldset', - '#prefix' => '<div id="ui-patterns-settings-form-wrapper">', - '#suffix' => '</div>', - '#title' => t('Settings'), - ]; - } - $setting_value = $configuration['pattern']['settings'][$key] ?? NULL; - $token_value = $configuration['pattern']['settings'][$key . "_token"] ?? ""; - $variant = $_POST['layout_settings']['pattern']['variant'] ?? $configuration['pattern']['variant']; - $settingType = UiPatternsSettings::createSettingType($definition, $setting, $variant); - $form['settings'] += $settingType->buildConfigurationForm([], $setting_value, $token_value, 'layouts_display'); - } - SettingsFormBuilder::buildVariantsForm(".ui-patterns-variant-selector-" . $definition->id(), $form['settings'], $definition); - } - } - - /** - * Build pattern settings for display form. - * - * @param array $form - * Form array. - * @param array $configuration - * Configurations array. - */ - public static function displayForm(array &$form, array $configuration) { - $form['#attached']['library'][] = 'ui_patterns_settings/widget'; - self::buildTokenLink($form); - foreach (UiPatterns::getPatternDefinitions() as $pattern_id => $definition) { - $settings = UiPatternsSettings::getPatternDefinitionSettings($definition); - $form['variants'][$pattern_id]['#attributes']['class'][] = 'ui-patterns-variant-selector-' . $pattern_id; - if (UiPatternsSettingsManager::allowVariantToken($definition)) { - $variant_token_value = $configuration['variants_token'][$pattern_id] ?? NULL; - $form['variants']['#weight'] = 20; - $form['pattern_mapping']['#weight'] = 30; - $form['pattern_settings']['#weight'] = 40; - $form['variants_token'] = [ - '#type' => 'container', - '#title' => t('Pattern Variant'), - '#weight' => 25, - '#states' => [ - 'visible' => [ - 'select[id="patterns-select"]' => ['value' => $pattern_id], - ], - ], - ]; - $form['variants_token'][$pattern_id] = [ - '#type' => 'textfield', - '#title' => t('Variant token'), - '#default_value' => $variant_token_value, - '#attributes' => ['class' => ['js-ui-patterns-settings-show-token-link']], - '#states' => [ - 'visible' => [ - 'select[id="patterns-select"]' => ['value' => $pattern_id], - ], - ], - ]; - } - if (!empty($settings)) { - foreach ($settings as $key => $setting) { - if (empty($setting->getType()) || !$setting->isFormVisible()) { - continue; - } - if (!isset($form['pattern_settings'][$pattern_id])) { - $form['pattern_settings'][$pattern_id] = [ - '#type' => 'fieldset', - '#title' => t('Settings'), - '#states' => [ - 'visible' => [ - 'select[id="patterns-select"]' => ['value' => $pattern_id], - ], - ], - ]; - } - $fieldset = &$form['pattern_settings'][$pattern_id]; - $settingType = UiPatternsSettings::createSettingType($definition, $setting); - $setting_value = $configuration['pattern_settings'][$pattern_id][$key] ?? NULL; - $token_value = $configuration['pattern_settings'][$pattern_id][$key . "_token"] ?? NULL; - $fieldset += $settingType->buildConfigurationForm([], $setting_value, $token_value, 'display'); - } - SettingsFormBuilder::buildVariantsForm('.ui-patterns-variant-selector-' . $pattern_id, $fieldset, $definition); - } - } - if (!empty($form['pattern_settings'])) { - $form['pattern_settings']['#element_validate'][] = - [static::class, 'cleanSettings']; - } - } - - /** - * Clean form values before being saved to configuration. - * - * @param array $element - * The pattern_settings fieldset element. - * @param \Drupal\Core\Form\FormState $form_state - * The form state. - * @param array $form - * The complete form array. - */ - public static function cleanSettings(array $element, FormState $form_state, array $form) { - $values = $form_state->getValues(); - $pattern_config = NestedArray::getValue($values, array_slice($element['#parents'], 0, -1)); - if (!empty($pattern_config['pattern_settings'])) { - // Only keep settings related to the selected pattern. - $pattern_settings = array_intersect_key($pattern_config['pattern_settings'], [$pattern_config['pattern'] => TRUE]); - $form_state->setValueForElement($element, $pattern_settings); - } - } - - /** - * Hide all settings which are configured by the variant. - * - * @param string $select_selector - * The id of the variant select field. - * @param array $fieldset - * The fieldset. - * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition - * The pattern definition. - */ - private static function buildVariantsForm($select_selector, array &$fieldset, PatternDefinition $definition) { - $variants = $definition->getVariants(); - foreach ($variants as $variant) { - $variant_ary = $variant->toArray(); - $settings = $variant_ary['settings'] ?? []; - - // Variants may have definition overwrites. - // This should not lead to hide them. So unset them before. - foreach ($settings as $name => $setting) { - if (is_array($setting) && isset($setting['definition']) && empty($setting['value'])) { - unset($settings[$name]); - } - } - - foreach ($settings as $name => $setting) { - if (isset($fieldset[$name])) { - // Add an or before a new state begins. - if (isset($fieldset[$name]['#states']['invisible']) && count($fieldset[$name]['#states']['invisible']) != 0) { - $fieldset[$name]['#states']['invisible'][] = 'or'; - } - // Hide configured setting. - $fieldset[$name]['#states']['invisible'][][$select_selector]['value'] = $variant->getName(); - if (isset($fieldset[$name . '_token'])) { - $fieldset[$name . '_token']['#states']['invisible'][][$select_selector]['value'] = $variant->getName(); - } - } - } - } - } - -} diff --git a/src/Plugin/EnumerationSettingTypeBase.php b/src/Plugin/EnumerationSettingTypeBase.php deleted file mode 100644 index dae3eb9f4deee6b6f71e19caac50bebb1be0001c..0000000000000000000000000000000000000000 --- a/src/Plugin/EnumerationSettingTypeBase.php +++ /dev/null @@ -1,110 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin; - -use Drupal\field\Entity\FieldStorageConfig; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; - -/** - * Base class for enumerations like radios or select. - */ -abstract class EnumerationSettingTypeBase extends PatternSettingTypeBase { - - /** - * Returns empty option. - * - * @return array - * The empty option. - */ - protected function emptyOption() { - return ["" => $this->t("Please select")]; - } - - /** - * Returns the enumeration type. - * - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def - * The pattern definition setting. - * - * @return string - * The enumeration type. - */ - protected function getEnumerationType(PatternDefinitionSetting $def) { - return $def->getValue('enumeration_type'); - } - - /** - * {@inheritdoc} - */ - public function alterFieldStorage(FieldStorageConfig $storage_config) { - $storage_config->setSetting('allowed_values_function', 'ui_patterns_settings_allowed_values_function'); - } - - /** - * {@inheritdoc} - */ - public function fieldStorageExposableTypes() { - return ['list_string']; - } - - /** - * Returns the enumeration options. - * - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def - * The pattern definition. - * - * @return mixed - * The options. - */ - protected function getOptions(PatternDefinitionSetting $def) { - $config = $this->configuration; - $raw_options = $def->getRawOptions(); - $final_options = []; - foreach ($raw_options as $key => $value) { - if (isset($value['condition']['variant'])) { - if ($value['condition']['variant'] === $config['variant']) { - $final_options[$key] = $value['label']; - } - } - else { - $final_options[$key] = $value['label'] ?? $value; - } - } - return $final_options; - } - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - if ($def->getRequired() == FALSE) { - $options = $this->emptyOption(); - } - else { - $options = []; - } - - $options += $this->getOptions($def); - $form[$def->getName()] = [ - '#type' => $this->getEnumerationType($def), - '#title' => $def->getLabel(), - '#description' => $def->getDescription(), - '#default_value' => $this->getValue($value), - '#options' => $options, - ]; - if ($raw_options = $def->getRawOptions()) { - foreach ($raw_options as $raw_option_name => $raw_option) { - if (isset($raw_option['condition'])) { - if (isset($raw_option['condition']['variant'])) { - $form[$def->getName()]['#options_attributes'][$raw_option_name] = [ - 'ui-patterns-settings-visible-variant' => $raw_option['condition']['variant'], - ]; - } - } - } - } - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - -} diff --git a/src/Plugin/LanguageCheckboxesSettingTypeBase.php b/src/Plugin/LanguageCheckboxesSettingTypeBase.php deleted file mode 100644 index faaf95176af94f512fb586f86e07140b906cf41d..0000000000000000000000000000000000000000 --- a/src/Plugin/LanguageCheckboxesSettingTypeBase.php +++ /dev/null @@ -1,112 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin; - -use Drupal\Core\Language\LanguageManagerInterface; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Symfony\Component\DependencyInjection\ContainerInterface; - -/** - * Language Checkboxes setting type. - * - * Provides an array of: - * - current_language_selected: True if the - * current language is part of the selection - * or nothing is selected - * - current_language: The current language. - * - selected: Array of selected languages. - * - * @UiPatternsSettingType( - * id = "language_checkboxes", - * label = @Translation("Language checkboxes") - * ) - */ -class LanguageCheckboxesSettingTypeBase extends EnumerationSettingTypeBase { - - /** - * The language manager. - * - * @var \Drupal\Core\Language\LanguageManagerInterface - */ - protected LanguageManagerInterface $languageManager; - - /** - * {@inheritdoc} - */ - protected function emptyOption() { - return []; - } - - /** - * {@inheritdoc} - */ - protected function getValue($value) { - if ($value === NULL) { - return !is_array($this->getPatternSettingDefinition() - ->getDefaultValue()) ? [ - $this->getPatternSettingDefinition() - ->getDefaultValue(), - ] : $this->getPatternSettingDefinition()->getDefaultValue(); - } - else { - return $value ?? ""; - } - } - - /** - * {@inheritdoc} - */ - protected function getOptions(PatternDefinitionSetting $def) { - $languages = $this->languageManager->getLanguages(); - $options = []; - foreach ($languages as $language) { - $options[$language->getId()] = $language->getName(); - } - return $options; - } - - /** - * {@inheritdoc} - */ - protected function getEnumerationType(PatternDefinitionSetting $def) { - return $def->getValue('enumeration_type') ?? 'checkboxes'; - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) { - $selected_options = []; - $defined_options = $this->getOptions($def); - if (is_array($value)) { - foreach ($value as $checkbox_key => $checkbox_value) { - if ($checkbox_value != "0") { - $selected_options[$checkbox_key] = $defined_options[$checkbox_value] ?? $checkbox_value; - } - } - } - $current_language = $this->languageManager->getCurrentLanguage(); - return [ - 'current_language_selected' => count($selected_options) === 0 || isset($selected_options[$current_language->getId()]), - 'current_language' => [ - $current_language->getId() => $current_language->getName(), - ], - 'selected' => $selected_options, - ]; - } - - /** - * {@inheritdoc} - */ - public static function create( - ContainerInterface $container, - array $configuration, - $plugin_id, - $plugin_definition - ) { - $plugin = parent::create($container, $configuration, $plugin_id, $plugin_definition); - $plugin->languageManager = $container->get('language_manager'); - return $plugin; - } - -} diff --git a/src/Plugin/Layout/PatternSettingsLayout.php b/src/Plugin/Layout/PatternSettingsLayout.php deleted file mode 100644 index 5dfbcc2d9eec8e6d5e67117c232a34b9bf849d5d..0000000000000000000000000000000000000000 --- a/src/Plugin/Layout/PatternSettingsLayout.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\Layout; - -use Drupal\ui_patterns_layouts\Plugin\Layout\PatternLayout; - -/** - * Layout class for patterns with settings. - * - * @package Drupal\ui_patterns_settings\Plugin\Layout - */ -class PatternSettingsLayout extends PatternLayout { - - /** - * {@inheritdoc} - */ - public function build(array $regions) { - $build = parent::build($regions); - $configuration = $this->getConfiguration(); - if (isset($configuration['pattern']['settings'])) { - $build['#settings'] = $configuration['pattern']['settings']; - } - if (isset($configuration['pattern']['variant_token'])) { - $build['#variant_token'] = $configuration['pattern']['variant_token']; - } - return $build; - } - -} diff --git a/src/Plugin/PatternSettingTypeBase.php b/src/Plugin/PatternSettingTypeBase.php deleted file mode 100644 index fd024c2a135d3e3487d4895a3f58e4fb42328004..0000000000000000000000000000000000000000 --- a/src/Plugin/PatternSettingTypeBase.php +++ /dev/null @@ -1,440 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin; - -use Drupal\Component\Plugin\ConfigurableInterface; -use Drupal\Core\Entity\EntityTypeManagerInterface; -use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\Core\Field\FieldItemList; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Plugin\ContainerFactoryPluginInterface; -use Drupal\Core\Plugin\PluginBase; -use Drupal\field\Entity\FieldStorageConfig; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Symfony\Component\DependencyInjection\ContainerInterface; - -/** - * Base class for UI Patterns Setting plugins. - */ -abstract class PatternSettingTypeBase extends PluginBase implements - ConfigurableInterface, - PatternSettingTypeInterface, - ContainerFactoryPluginInterface { - - /** - * Returns a list of plugin dependencies. - * - * @return bool - * True if all dependencies exist. - */ - protected function getSettingTypeDependencies() { - return []; - } - - /** - * The module handler. - * - * @var \Drupal\Core\Extension\ModuleHandlerInterface - */ - private $moduleHandler; - - /** - * The route match. - * - * @var \Drupal\Core\Routing\RouteMatchInterface - */ - private $routeMatch; - - /** - * Return pattern definitions for setting . - * - * @var \Drupal\ui_patterns\Definition\PatternDefinition - */ - private $patternDefinition; - - /** - * Return pattern definitions for setting . - * - * @var \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting - */ - private $patternSettingDefinition; - - /** - * Return pattern definitions for setting . - * - * @var \Drupal\Core\Entity\EntityTypeManagerInterface - */ - protected $entityTypeManager; - - /** - * {@inheritdoc} - */ - public function __construct( - array $configuration, - $plugin_id, - array $plugin_definition, - ModuleHandlerInterface $module_handler, - EntityTypeManagerInterface $entity_type_manager - ) { - $configuration += $this->defaultConfiguration(); - $this->patternSettingDefinition = $configuration['pattern_setting_definition']; - $this->patternDefinition = $configuration['pattern_definition']; - $this->moduleHandler = $module_handler; - $this->entityTypeManager = $entity_type_manager; - unset($configuration['pattern_setting_definition']); - unset($configuration['pattern_definition']); - parent::__construct($configuration, $plugin_id, $plugin_definition); - } - - /** - * Return value if set otherwise take the default value. - * - * @param mixed $value - * The provided value. - * - * @return string - * The value for this setting - */ - protected function getValue($value) { - if ($value === NULL) { - return $this->getPatternSettingDefinition()->getDefaultValue(); - } - else { - return $value ?? ""; - } - } - - /** - * Return pattern setting definition. - * - * @return \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting - * Pattern setting definition. - */ - protected function getPatternSettingDefinition() { - return $this->patternSettingDefinition; - } - - /** - * {@inheritdoc} - */ - public static function create( - ContainerInterface $container, - array $configuration, - $plugin_id, - $plugin_definition - ) { - $plugin = new static( - $configuration, - $plugin_id, - $plugin_definition, - $container->get('module_handler'), - $container->get('entity_type.manager') - ); - /** @var \Drupal\Core\StringTranslation\TranslationInterface $translation */ - $translation = $container->get('string_translation'); - - $plugin->setStringTranslation($translation); - $plugin->routeMatch = $container->get('current_route_match'); - return $plugin; - } - - /** - * {@inheritdoc} - */ - public function alterFieldStorage(FieldStorageConfig $storage_config) { - } - - /** - * {@inheritdoc} - */ - public function label() { - $plugin_definition = $this->getPluginDefinition(); - return $plugin_definition['label']; - } - - /** - * {@inheritdoc} - */ - public function getDescription() { - $plugin_definition = $this->getPluginDefinition(); - return $plugin_definition['description'] ?? ''; - } - - /** - * {@inheritdoc} - */ - public function defaultConfiguration() { - return []; - } - - /** - * {@inheritdoc} - */ - public function getConfiguration() { - return $this->configuration; - } - - /** - * {@inheritdoc} - */ - public function setConfiguration(array $configuration) { - $this->configuration = $configuration + $this->defaultConfiguration(); - } - - /** - * {@inheritdoc} - */ - public function calculateDependencies() { - return []; - } - - /** - * {@inheritdoc} - */ - public function preprocess($value, array $context) { - $def = $this->getPatternSettingDefinition(); - $value = $this->settingsPreprocess($value, $context, $def); - return $value; - } - - /** - * Checks if current route is a layout builder route. - * - * @return bool - * True if it is a layout builder route. - */ - protected function isLayoutBuilderRoute() { - if (preg_match('/^(layout_builder\.([^.]+\.)?)/', $this->routeMatch->getRouteName())) { - return TRUE; - } - return FALSE; - } - - /** - * {@inheritdoc} - */ - public function alterElement($value, PatternDefinitionSetting $def, &$element) { - - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess( - $value, - array $context, - PatternDefinitionSetting $def - ) { - return $value; - } - - /** - * Returns the bind form field. - * - * @param array $form - * The form definition array for the settings configuration form. - * @param string $value - * The stored default value. - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def - * The pattern definition. - * - * @return array - * The form. - */ - protected function tokenForm( - array $form, - $value, - PatternDefinitionSetting $def - ) { - $form[$def->getName() . "_token"] = [ - '#type' => 'textfield', - '#title' => $this->t("Token for %label", ['%label' => $def->getLabel()]), - '#default_value' => $this->getValue($value), - '#attributes' => [ - 'class' => [ - 'js-ui-patterns-settings-show-token-link', - 'js-ui-patterns-settings__token', - ], - ], - '#wrapper_attributes' => ['class' => ['js-ui-patterns-settings__token-wrapper']], - ]; - return $form; - } - - /** - * Check required input fields in layout forms. - * - * @param array $element - * The element to validate. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * The form state. - * @param array $form - * The form. - */ - public static function validateLayout( - array $element, - FormStateInterface &$form_state, - array &$form - ) { - $parents = $element['#parents']; - $value = $form_state->getValue($parents); - $parents[count($parents) - 1] = $parents[count($parents) - 1] . '_token'; - $token_value = $form_state->getValue($parents); - if (empty($value) && empty($token_value)) { - // Check if a variant is selected and the value - // is provided by the variant. - $variant = $form_state->getValue( - [ - 'layout_configuration', - 'pattern', - 'variant', - ] - ); - if (!empty($variant)) { - $variant_def = $element['#pattern_definition']->getVariant($variant); - $variant_ary = $variant_def->toArray(); - if (!empty( - $variant_ary['settings'][$element['#pattern_setting_definition']->getName( - )] - )) { - return; - } - } - - $form_state->setError( - $element, - t( - '@name field is required.', - ['@name' => $element['#title']] - ) - ); - } - } - - /** - * Add validation and basics classes to the raw input field. - * - * @param array $input - * The input field. - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def - * The pattern definition. - * @param string $form_type - * The form type. Either layouts_display or display. - */ - protected function handleInput( - array &$input, - PatternDefinitionSetting $def, - $form_type - ) { - $input['#attributes']['class'][] = 'js-ui-patterns-settings__input'; - $input['#wrapper_attributes']['class'][] = 'js-ui-patterns-settings__input-wrapper'; - if ($def->getRequired()) { - $input['#title'] .= ' *'; - if ($form_type === 'layouts_display') { - $input['#element_validate'][] = [ - PatternSettingTypeBase::class, - 'validateLayout', - ]; - } - } - } - - /** - * {@inheritdoc} - * - * Creates a generic configuration form for all settings types. - * Individual settings plugins can add elements to this form by - * overriding PatternSettingTypeBaseInterface::settingsForm(). - * Most plugins should not override this method unless they - * need to alter the generic form elements. - * - * @see \Drupal\Core\Block\BlockBase::blockForm() - */ - public function buildConfigurationForm( - array $form, - $value, - $token_value, - $form_type - ) { - $dependencies = $this->getSettingTypeDependencies(); - $def = $this->getPatternSettingDefinition(); - foreach ($dependencies as $dependency) { - if (!$this->moduleHandler->moduleExists($dependency)) { - $form[$def->getName( - )] = ['#markup' => "Missing SettingType {$def->getName()} dependency {$dependency}."]; - return $form; - } - } - - $form = $this->settingsForm($form, $value, $def, $form_type); - $form[$def->getName()]['#pattern_setting_definition'] = $def; - $form[$def->getName()]['#pattern_definition'] = $this->patternDefinition; - - if (!empty($def->getWeight())) { - $form[$def->getName()]['#weight'] = $def->getWeight(); - } - - if ($def->getAllowToken()) { - $form = $this->tokenForm($form, $token_value, $def); - if (isset($form[$def->getName() . '_token'])) { - $classes = 'js-ui-patterns-settings__wrapper'; - if (!empty($token_value)) { - $classes .= ' js-ui-patterns-settings--token-has-value'; - } - $form[$def->getName()]['#prefix'] = '<div class="' . $classes . '">'; - $form[$def->getName() . '_token']['#suffix'] = '</div>'; - $form[$def->getName() . '_token']['#pattern_setting_definition'] = $def; - $form[$def->getName( - ) . '_token']['#pattern_definition'] = $this->patternDefinition; - } - } - return $form; - } - - /** - * Set the right group before drupal #group attribute is processed. - * - * @param array $element - * The form field. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * The pattern definition. - * @param mixed $form - * The form. - * - * @return array - * The processed element. - */ - public static function formGroupProcess( - array &$element, - FormStateInterface $form_state = NULL, - &$form = [] - ) { - if (isset($element['#pattern_setting_definition'])) { - $setting_definition = $element['#pattern_setting_definition']; - if ($setting_definition->getGroup() !== NULL) { - $parents = $element['#parents']; - array_pop($parents); - $parents[] = $setting_definition->getGroup(); - $element['#group'] = implode('][', $parents); - } - } - return $element; - } - - /** - * {@inheritdoc} - */ - public function fieldStorageExposableTypes() { - return []; - } - - /** - * {@inheritdoc} - */ - public function preprocessExposedField(FieldItemList $items) { - foreach ($items as $item) { - return $item->value; - } - } - -} diff --git a/src/Plugin/PatternSettingTypeInterface.php b/src/Plugin/PatternSettingTypeInterface.php deleted file mode 100644 index 49bf7c3b21967e57adb9abef3d5a8eda912b2ad2..0000000000000000000000000000000000000000 --- a/src/Plugin/PatternSettingTypeInterface.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin; - -use Drupal\Component\Plugin\ConfigurableInterface; -use Drupal\Core\Field\FieldItemList; -use Drupal\field\Entity\FieldStorageConfig; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; - -/** - * Defines an interface for UI Patterns setting type plugins. - */ -interface PatternSettingTypeInterface extends ConfigurableInterface { - - /** - * Returns the configuration form elements specific to this settings plugin.. - * - * @param array $form - * The form definition array for the settings configuration form. - * @param string $value - * The stored default value. - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def - * The pattern definition. - * @param string $form_type - * The form type. Either layout or layouts_display or display. - * - * @return array - * The configuration form. - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type); - - /** - * Preprocess setting variable. - * - * @param string $value - * The stored value. - * @param array $context - * Context informations. - * Keys: - * - entity. - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def - * The pattern definition. - * - * @return string - * The processed value. - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def); - - /** - * Returns the processed setting variable. - * - * @param string $value - * The stored value. - * @param array $context - * Context informations. - * - * @return mixed - * The processed value. - */ - public function preprocess($value, array $context); - - /** - * Returns the processed setting variable for an exposed field. - * - * @param \Drupal\Core\Field\FieldItemList $field - * The stored value. - * - * @return mixed - * The processed value. - */ - public function preprocessExposedField(FieldItemList $field); - - /** - * Returns the settings configuration form. - * - * @param array $form - * The form definition array for the settings configuration form. - * @param string $value - * The stored default value. - * @param string $token_value - * The stored token value. - * @param string $form_type - * The form type. Either layout or layouts_display or display. - */ - public function buildConfigurationForm(array $form, $value, $token_value, $form_type); - - /** - * Alter the storage of a connected field storage. - * - * @param \Drupal\field\Entity\FieldStorageConfig $storage_config - * The storage type. - */ - public function alterFieldStorage(FieldStorageConfig $storage_config); - - /** - * Returns the list to matching field types. - * - * @return array - * The list of exposable field types - */ - public function fieldStorageExposableTypes(); - - /** - * Allow setting types to alter render element. - * - * @param string $value - * The value. - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def - * The pattern definition. - * @param array $element - * The render element. - */ - public function alterElement($value, PatternDefinitionSetting $def, &$element); - -} diff --git a/src/Plugin/TokenSettingTypeBase.php b/src/Plugin/TokenSettingTypeBase.php deleted file mode 100644 index 4913ee36797fbf2792091eeec1bee33de361f323..0000000000000000000000000000000000000000 --- a/src/Plugin/TokenSettingTypeBase.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin; - -use Drupal\Core\Plugin\ContainerFactoryPluginInterface; -use Drupal\Core\Utility\Token; -use Drupal\Core\Entity\EntityMalformedException; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Symfony\Component\DependencyInjection\ContainerInterface; - -/** - * Base class for setting types with tokens. - */ -abstract class TokenSettingTypeBase extends PatternSettingTypeBase implements ContainerFactoryPluginInterface { - - /** - * The token service. - * - * @var \Drupal\Core\Utility\Token - */ - protected $tokenService; - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { - $plugin = parent::create($container, $configuration, $plugin_id, $plugin_definition); - $plugin->setTokenService($container->get('token')); - return $plugin; - } - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $def = $this->getPatternSettingDefinition(); - $value = $this->getValue($value); - $description = $def->getDescription() != NULL ? $def->getDescription() : ""; - - $form[$def->getName()] = [ - '#type' => 'container', - ]; - - $form[$def->getName()]['input'] = [ - '#type' => 'textfield', - '#title' => $def->getLabel(), - '#description' => $description, - '#default_value' => $this->getValue($value), - '#attributes' => ['class' => ['js-ui-patterns-settings-show-token-link']], - ]; - $this->handleInput($form[$def->getName()]['input'], $def, $form_type); - - return $form; - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) { - $return_value = ''; - - if (is_array($value) && isset($value['input'])) { - $value = $value['input']; - } - - if (is_string($value)) { - $token_data = []; - /** @var \Drupal\Core\Entity\EntityInterface $entity */ - $entity = $context['entity'] ?? NULL; - if ($entity !== NULL) { - $token_data[$entity->getEntityTypeId()] = $entity; - } - try { - $return_value = $this->getTokenService()->replace($value, $token_data, ['clear' => TRUE]); - } - catch (EntityMalformedException $e) { - if (!ui_patterns_settings_is_layout_builder_route()) { - throw $e; - } - // Do nothing inside layout builder. - } - } - - return $return_value; - } - - /** - * Sets the token service. - * - * @param \Drupal\Core\Utility\Token $token_service - * The token service. - * - * @return self - * The token service. - */ - public function setTokenService(Token $token_service) { - $this->tokenService = $token_service; - return $this; - } - - /** - * Gets the token service. - * - * @return \Drupal\Core\Utility\Token - * The token service. - */ - public function getTokenService() { - if (!$this->tokenService) { - $this->tokenService = \Drupal::token(); - } - - return $this->tokenService; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/AttributesSettingType.php b/src/Plugin/UiPatterns/SettingType/AttributesSettingType.php deleted file mode 100644 index b006d16d498496b4b127554b44d6cb811c9b47f2..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/AttributesSettingType.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\Component\Utility\Html; -use Drupal\Core\Template\Attribute; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Attributes setting type. - * - * @UiPatternsSettingType( - * id = "attributes", - * label = @Translation("Attributes") - * ) - */ -class AttributesSettingType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $value = $this->getValue($value); - $description = $def->getDescription() != NULL ? $def->getDescription() : $this->t('E.g. role="navigation" class="class-1"'); - $form[$def->getName()] = [ - '#type' => 'textfield', - '#title' => $def->getLabel(), - '#description' => $description, - '#default_value' => $value, - ]; - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - - /** - * {@inheritdoc} - */ - public function preprocess($value, array $context) { - $value = parent::preprocess($value, $context); - $parse_html = '<div ' . $value . '></div>'; - $attributes = []; - foreach (Html::load($parse_html)->getElementsByTagName('div') as $div) { - foreach ($div->attributes as $attr) { - $attributes[$attr->nodeName] = $attr->nodeValue; - } - } - return new Attribute($attributes); - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/BooleanSettingType.php b/src/Plugin/UiPatterns/SettingType/BooleanSettingType.php deleted file mode 100644 index 2ce436e126a2be707e61fe6e1cb52a78a280f6c6..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/BooleanSettingType.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Checkbox setting type. - * - * @UiPatternsSettingType( - * id = "boolean", - * label = @Translation("true/false") - * ) - */ -class BooleanSettingType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $value = $this->getValue($value); - $form[$def->getName()] = [ - '#type' => 'checkbox', - '#title' => $def->getLabel(), - '#description' => $def->getDescription(), - '#default_value' => $value, - ]; - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - - /** - * {@inheritdoc} - */ - public function fieldStorageExposableTypes() { - return ['boolean']; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/CheckboxesSettingType.php b/src/Plugin/UiPatterns/SettingType/CheckboxesSettingType.php deleted file mode 100644 index 1194c90b1ee2b8a6bbc5d1f44ded53a66c62ede1..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/CheckboxesSettingType.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Checkbox setting type. - * - * @UiPatternsSettingType( - * id = "checkboxes", - * label = @Translation("Checkboxes") - * ) - */ -class CheckboxesSettingType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) { - $selected_options = []; - $defined_options = $def->getOptions(); - if (is_array($value)) { - foreach ($value as $checkbox_key => $checkbox_value) { - if ($checkbox_value != "0" && isset($defined_options[$checkbox_value])) { - $selected_options[$checkbox_key] = $checkbox_value; - } - } - } - return $selected_options; - } - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $def = $this->getPatternSettingDefinition(); - $value = $this->getValue($value); - if (is_scalar($value)) { - $value = [$value]; - } - if (empty($value)) { - $value = []; - } - $form[$def->getName()] = [ - '#type' => 'checkboxes', - '#title' => $def->getLabel(), - '#description' => $def->getDescription(), - '#default_value' => $value, - '#options' => $def->getOptions(), - ]; - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/ColorWidgetSettingType.php b/src/Plugin/UiPatterns/SettingType/ColorWidgetSettingType.php deleted file mode 100644 index 11418240e003be89f4058e8ec4c52863c25a4e23..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/ColorWidgetSettingType.php +++ /dev/null @@ -1,76 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase; - -/** - * Colorwidget setting type. - * - * @UiPatternsSettingType( - * id = "colorwidget", - * label = @Translation("Color Widget") - * ) - */ -class ColorWidgetSettingType extends EnumerationSettingTypeBase { - - /** - * {@inheritdoc} - */ - protected function getSettingTypeDependencies() { - return ['colorwidget']; - } - - /** - * {@inheritdoc} - */ - protected function getEnumerationType(PatternDefinitionSetting $def) { - return 'colorwidget'; - } - - /** - * {@inheritdoc} - */ - protected function emptyOption() { - return []; - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) { - return $value['colorwidget'] ?? NULL; - } - - /** - * {@inheritdoc} - */ - protected function getValue($value) { - if ($value === NULL) { - return $this->getPatternSettingDefinition()->getDefaultValue(); - } - else { - return $value['colorwidget'] ?? $value; - } - } - - /** - * {@inheritdoc} - */ - protected function handleInput(array &$input, PatternDefinitionSetting $def, $form_type) { - parent::handleInput($input, $def, $form_type); - - foreach ($input['#options'] as $key => $label) { - $css_color = 'transparent'; - if (str_contains($label, '/')) { - [$label, $css_color] = explode('/', $label); - } - $input['#colors'][$key] = [ - 'label' => $label, - 'css_color' => $css_color, - ]; - } - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php b/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php deleted file mode 100644 index c1b8a2d502771e2160402d9ed413e79b21102efd..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Coloriswidget setting type. - * - * @UiPatternsSettingType( - * id = "coloriswidget", - * label = @Translation("Coloris Widget") - * ) - */ -class ColorisWidgetSettingType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - protected function getSettingTypeDependencies() { - return ['coloris']; - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess( - $value, - array $context, - PatternDefinitionSetting $def - ) { - if (is_string($value) && !empty($value)) { - return $value; - } - return $value['coloris'] ?? ''; - } - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $options = $def->getOptions() ?? []; - $swatches = array_keys($options); - $form[$def->getName()] = [ - '#type' => 'coloriswidget', - '#title' => $def->getLabel(), - '#description' => $def->getDescription(), - '#default_value' => $this->getValue($value), - '#swatches' => $swatches - ]; - - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/EnumerationSettingType.php b/src/Plugin/UiPatterns/SettingType/EnumerationSettingType.php deleted file mode 100644 index d21af52dbd5a95906b7f11f6e9a05659e0fa160c..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/EnumerationSettingType.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase; - -/** - * Enumerations setting type. - * - * @UiPatternsSettingType( - * id = "enumeration", - * label = @Translation("Enumeration") - * ) - */ -class EnumerationSettingType extends EnumerationSettingTypeBase { - -} diff --git a/src/Plugin/UiPatterns/SettingType/GroupType.php b/src/Plugin/UiPatterns/SettingType/GroupType.php deleted file mode 100644 index 3133df969e6b3e5daec47f8fd5a2f0acb9762642..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/GroupType.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Group (fieldgroup/details) setting type. - * - * @UiPatternsSettingType( - * id = "group", - * label = @Translation("Group") - * ) - */ -class GroupType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $def = $this->getPatternSettingDefinition(); - $form[$def->getName()] = [ - '#type' => !empty($def->getValue('group_type')) ? $def->getValue('group_type') : 'fieldset', - '#title' => $def->getLabel(), - ]; - if (!empty($def->getDescription())) { - $form[$def->getName()]['#description'] = $def->getDescription(); - } - return $form; - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) { - return NULL; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/LanguageAccessSettingType.php b/src/Plugin/UiPatterns/SettingType/LanguageAccessSettingType.php deleted file mode 100644 index 1149ed597cf9feb113dfff27ee3d5492d7dc3063..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/LanguageAccessSettingType.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\LanguageCheckboxesSettingTypeBase; - -/** - * Hides render element for unchecked languages. - * - * Setting type to hide the render element if: - * Elements are checked and the current language is - * not part of the selection. - * - * @UiPatternsSettingType( - * id = "language_access", - * label = @Translation("Language Access") - * ) - */ -class LanguageAccessSettingType extends LanguageCheckboxesSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function alterElement($value, PatternDefinitionSetting $def, &$element) { - if ($this->isLayoutBuilderRoute() === FALSE && $value['current_language_selected'] === FALSE) { - hide($element); - } - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php b/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php deleted file mode 100644 index 560c2b629f32cd17709c678c1336caaaf6a7700d..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\Core\Language\LanguageManagerInterface; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase; -use Drupal\ui_patterns_settings\Plugin\LanguageCheckboxesSettingTypeBase; -use Symfony\Component\DependencyInjection\ContainerInterface; - -/** - * Language Checkboxes setting type. - * - * Provides an array of: - * - current_language_selected: True if the - * current language is part of the selection - * or nothing is selected - * - current_language: The current language. - * - selected: Array of selected languages. - * - * @UiPatternsSettingType( - * id = "language_checkboxes", - * label = @Translation("Language checkboxes") - * ) - */ -class LanguageCheckboxesSettingType extends LanguageCheckboxesSettingTypeBase { - -} diff --git a/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php b/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php deleted file mode 100644 index 680d5b3245d9051de44cf7e7d07568c3a0485ec0..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php +++ /dev/null @@ -1,125 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\Component\Utility\UrlHelper; -use Drupal\Core\Field\FieldItemList; -use Drupal\Core\Url; -use Drupal\media\Entity\Media; -use Drupal\media_library\MediaLibraryUiBuilder; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Media Library setting type. - * - * @UiPatternsSettingType( - * id = "media_library", - * label = @Translation("Media Library") - * ) - */ -class MediaLibrarySettingType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - protected function getSettingTypeDependencies() { - return ['media_library_form_element', 'media_library_edit']; - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) { - if (intval($value)) { - $media_id = $value; - $media = Media::load($media_id); - if ($media === NULL) { - return ''; - } - } - else { - return ''; - } - - $image_style = $def->getValue('image_style'); - if (empty($image_style) === FALSE) { - $image_uri = $media->field_media_image->entity !== NULL ? $media->field_media_image->entity->uri->value : NULL; - if ($image_uri !== NULL) { - return [ - '#theme' => 'image_style', - '#style_name' => $image_style, - '#uri' => $image_uri, - ]; - } - } - - $responsive_image_style = $def->getValue('responsive_image_style'); - if (empty($responsive_image_style) === FALSE) { - $image_uri = $media->field_media_image->entity !== NULL ? $media->field_media_image->entity->uri->value : NULL; - if ($image_uri !== NULL) { - return [ - '#theme' => 'responsive_image', - '#responsive_image_style_id' => $responsive_image_style, - '#uri' => $image_uri, - ]; - } - } - - $view_mode = $def->getValue('view_mode'); - if (empty($view_mode)) { - return $value; - } - $view_mode_builder = $this->entityTypeManager->getViewBuilder('media'); - return $view_mode_builder->view($media, $view_mode); - } - - /** - * {@inheritdoc} - */ - public function fieldStorageExposableTypes() { - return ['entity_reference']; - } - - public function preprocessExposedField(FieldItemList $items) { - foreach ($items as $item) { - if ($item->entity !== NULL) { - return $item->entity->id(); - } - } - } - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $media_id = $this->getValue($value); - - $media = $media_id !== NULL && is_numeric($media_id) ? Media::load($media_id) : NULL; - $media_id = $media !== NULL ? $media_id : NULL; - $form[$def->getName()] = [ - '#type' => 'media_library', - '#title' => $def->getLabel(), - '#description' => $def->getDescription(), - '#default_value' => $media_id, - ]; - if ($media !== NULL && $def->getValue('show_edit_button') === TRUE) { - $form[$def->getName()]['#ui_patterns_media_edit_button'] = TRUE; - } - - $allowed_bundles = $def->getValue('allowed_bundles'); - if (!empty($allowed_bundles)) { - $form[$def->getName()]['#allowed_bundles'] = $allowed_bundles; - } - else { - $form[$def->getName()]['#allowed_bundles'] = ['image']; - } - $cardinality = $def->getValue('cardinality'); - if (!empty($cardinality)) { - $form[$def->getName()]['#cardinality'] = $cardinality; - } - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/NumberSettingType.php b/src/Plugin/UiPatterns/SettingType/NumberSettingType.php deleted file mode 100644 index 99fd99ccc54386ec265f1ee8f79a2514893ce030..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/NumberSettingType.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Number setting type. - * - * @UiPatternsSettingType( - * id = "number", - * label = @Translation("Number") - * ) - */ -class NumberSettingType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $form[$def->getName()] = [ - '#type' => 'number', - '#title' => $def->getLabel(), - '#description' => $def->getDescription(), - '#default_value' => $this->getValue($value), - ]; - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/PublishSettingType.php b/src/Plugin/UiPatterns/SettingType/PublishSettingType.php deleted file mode 100644 index a96a81b105ac55bab123c8373363cfc33743d58b..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/PublishSettingType.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Unpublish render array. - * - * @UiPatternsSettingType( - * id = "publish", - * label = @Translation("Publish ") - * ) - */ -class PublishSettingType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function alterElement($value, PatternDefinitionSetting $def, &$element) { - if ($this->isLayoutBuilderRoute() === FALSE && $value === FALSE) { - hide($element); - } - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) { - if ($value === NULL) { - return $def->getDefaultValue(); - } - return $value !== 0; - } - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $form[$def->getName()] = [ - '#type' => 'checkbox', - '#title' => $def->getLabel(), - '#description' => $def->getDescription(), - '#default_value' => $this->getValue($value), - ]; - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/RadiosSettingType.php b/src/Plugin/UiPatterns/SettingType/RadiosSettingType.php deleted file mode 100644 index 14b933785ae087f47499eac34066ba2eafc0bea4..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/RadiosSettingType.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase; - -/** - * Radios setting type. - * - * @UiPatternsSettingType( - * id = "radios", - * label = @Translation("Radios") - * ) - */ -class RadiosSettingType extends EnumerationSettingTypeBase { - - /** - * {@inheritdoc} - */ - protected function getEnumerationType(PatternDefinitionSetting $def) { - return 'radios'; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/SelectSettingType.php b/src/Plugin/UiPatterns/SettingType/SelectSettingType.php deleted file mode 100644 index 8a92222f651d85001b77e279a725585f854248ef..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/SelectSettingType.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase; - -/** - * Select setting type. - * - * @UiPatternsSettingType( - * id = "select", - * label = @Translation("Select") - * ) - */ -class SelectSettingType extends EnumerationSettingTypeBase { - - /** - * {@inheritdoc} - */ - protected function getEnumerationType(PatternDefinitionSetting $def) { - return 'select'; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/TextfieldSettingType.php b/src/Plugin/UiPatterns/SettingType/TextfieldSettingType.php deleted file mode 100644 index 7f1ab2a6490e5bc1363c2eb3b128803bb7910072..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/TextfieldSettingType.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; - -/** - * Textfield setting type. - * - * @UiPatternsSettingType( - * id = "textfield", - * label = @Translation("Textfield") - * ) - */ -class TextfieldSettingType extends PatternSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { - $form[$def->getName()] = [ - '#type' => 'textfield', - '#title' => $def->getLabel(), - '#description' => $def->getDescription(), - '#default_value' => $this->getValue($value), - ]; - - $this->handleInput($form[$def->getName()], $def, $form_type); - return $form; - } - -} diff --git a/src/Plugin/UiPatterns/SettingType/TokenSettingType.php b/src/Plugin/UiPatterns/SettingType/TokenSettingType.php deleted file mode 100644 index 2f53d55f2a62790b8339aa26bd080156d71545b3..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/TokenSettingType.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\ui_patterns_settings\Plugin\TokenSettingTypeBase; - -/** - * Token setting type. - * - * @UiPatternsSettingType( - * id = "token", - * label = @Translation("Token") - * ) - */ -class TokenSettingType extends TokenSettingTypeBase { - -} diff --git a/src/Plugin/UiPatterns/SettingType/UrlSettingType.php b/src/Plugin/UiPatterns/SettingType/UrlSettingType.php deleted file mode 100644 index 8d415a753fa23eeae000d3ce78a4307dbe083c9f..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/SettingType/UrlSettingType.php +++ /dev/null @@ -1,60 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType; - -use Drupal\Core\Field\FieldItemList; -use Drupal\Core\Url; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\ui_patterns_settings\Plugin\TokenSettingTypeBase; - -/** - * Url setting type. - * - * @UiPatternsSettingType( - * id = "url", - * label = @Translation("Url") - * ) - */ -class UrlSettingType extends TokenSettingTypeBase { - - /** - * {@inheritdoc} - */ - public function fieldStorageExposableTypes() { - return ['link']; - } - - /** - * {@inheritdoc} - */ - public function preprocessExposedField(FieldItemList $items) { - foreach ($items as $item) { - return $item->getUrl(); - } - } - - /** - * {@inheritdoc} - */ - public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) { - $value = parent::settingsPreprocess($value, $context, $def); - if (empty($value)) { - return ""; - } - try { - $url = Url::fromUri($value)->toString(); - } - catch (\Exception $e) { - // Not a valid uri. Try user input: - try { - $url = Url::fromUserInput($value)->toString(); - } - catch (\Exception $e) { - // Not a valid url. - return '#'; - } - } - return $url; - } - -} diff --git a/src/Plugin/UiPatterns/Source/MediaSource.php b/src/Plugin/UiPatterns/Source/MediaSource.php new file mode 100644 index 0000000000000000000000000000000000000000..a6ac2dc2a34115d6092c563004abab3145e5b97b --- /dev/null +++ b/src/Plugin/UiPatterns/Source/MediaSource.php @@ -0,0 +1,143 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\ui_patterns_settings\Plugin\UiPatterns\Source; + +use Drupal\Core\Entity\EntityTypeManager; +use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\media\Entity\Media; +use Drupal\ui_patterns\Attribute\Source; +use Drupal\ui_patterns\SourcePluginBase; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Plugin implementation of the source. + */ +#[Source( + id: 'media', + label: new TranslatableMarkup('Media'), + description: new TranslatableMarkup('Provides a Media source..'), + prop_types: ['slot'] +)] +class MediaSource extends SourcePluginBase { + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManager + */ + protected ?EntityTypeManager $entityTypeManager; + + /** + * {@inheritdoc} + */ + public static function create( + ContainerInterface $container, + array $configuration, + $plugin_id, + $plugin_definition, + ) { + $plugin = parent::create( + $container, + $configuration, + $plugin_id, + $plugin_definition + ); + $plugin->entityTypeManager = $container->get('entity_type.manager'); + return $plugin; + } + + /** + * {@inheritdoc} + */ + public function defaultSettings(): array { + return [ + 'media' => NULL, + ]; + } + + /** + * {@inheritdoc} + */ + public function getPropValue(): mixed { + + $media = $this->getMedia(); + if ($media === NULL) { + return ''; + } + $view_mode = $this->getSetting('view_mode') ?? 'default'; + if ($view_mode === NULL) { + return $media->id(); + } + $view_mode_builder = $this->entityTypeManager->getViewBuilder('media'); + return $view_mode_builder->view($media, $view_mode); + + } + + /** + * Returns the referenced media object. + */ + protected function getMedia(): ?Media { + $media_id = $this->getSetting('media')['media_library_selection'] ?? NULL; + return $media_id !== NULL && is_numeric($media_id) ? Media::load($media_id) : NULL; + } + + /** + * {@inheritdoc} + */ + public function configureForm(array $form, FormStateInterface $form_state): array { + $configuration = $this->getConfiguration(); + $form = parent::configureForm($form, $form_state); + /** @var \Drupal\media\Entity\MediaType $bundles */ + $bundles = $this->entityTypeManager->getStorage('media_type')->loadMultiple(); + $bundle_options = []; + foreach ($bundles as $bundle_id => $bundle) { + $bundle_options[$bundle_id] = $bundle->label(); + } + $form['allowed_bundles'] = [ + '#type' => 'checkboxes', + '#title' => $this->t('Bundles'), + '#options' => $bundle_options, + '#default_value' => $configuration['configure']['allowed_bundles'] ?? FALSE, + ]; + $form['show_edit_button'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Show Edit button'), + '#default_value' => $configuration['configure']['show_edit_button'] ?? FALSE, + ]; + + return $form; + } + /** + * {@inheritdoc} + */ + public function settingsForm(array $form, FormStateInterface $form_state): array { + $form = parent::settingsForm($form, $form_state); + $configure = $this->getConfiguration()['configure']; + $media = $this->getMedia(); + $media_id = $media?->id(); + $form['media'] = [ + '#type' => 'media_library', + '#default_value' => $media_id, + ]; + + $this->addRequired($form['media']); + if ($media !== NULL && isset($configure['show_edit_button']) + && $configure['show_edit_button'] === TRUE) { + $form['media']['#ui_patterns_media_edit_button'] = TRUE; + } + + $allowed_bundles = $configure['allowed_bundles'] ?? ['image']; + if (!empty($allowed_bundles)) { + $form['media']['#allowed_bundles'] = $allowed_bundles; + } + else { + $form['media']['#allowed_bundles'] = ['image']; + } + $form['media']['#cardinality'] = $configure['cardinality'] ?? 1; + return $form; + } + +} diff --git a/src/Plugin/UiPatterns/Source/SettingFieldSource.php b/src/Plugin/UiPatterns/Source/SettingFieldSource.php deleted file mode 100644 index 239b69ce1325a62ff6d6436d27a9533450c852bc..0000000000000000000000000000000000000000 --- a/src/Plugin/UiPatterns/Source/SettingFieldSource.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\Plugin\UiPatterns\Source; - -use Drupal\Core\Plugin\ContainerFactoryPluginInterface; -use Drupal\ui_patterns\Plugin\PatternSourceBase; -use Symfony\Component\DependencyInjection\ContainerInterface; - -/** - * Defines UI Patterns Settings fields source plugin. - * - * @UiPatternsSource( - * id = "settings_field", - * label = @Translation("Seting Fields (UI Pattern settings)"), - * provider = "ui_patterns_settings", - * tags = { - * "field_properties" - * } - * ) - */ -class SettingFieldSource extends PatternSourceBase implements ContainerFactoryPluginInterface { - - /** - * {@inheritdoc} - */ - public function __construct(array $configuration, $plugin_id, $plugin_definition) { - parent::__construct($configuration, $plugin_id, $plugin_definition); - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { - return new static( - $configuration, - $plugin_id, - $plugin_definition - ); - } - - /** - * {@inheritdoc} - */ - public function getSourceFields() { - $sources = []; - return $sources; - } - -} diff --git a/src/TwigExtension/UIPatternsSettingsExtension.php b/src/TwigExtension/UIPatternsSettingsExtension.php deleted file mode 100644 index 66b9cad343ee0c5eb1960d3ace526d04150df5ce..0000000000000000000000000000000000000000 --- a/src/TwigExtension/UIPatternsSettingsExtension.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings\TwigExtension; - -use Drupal\ui_patterns\UiPatterns; -use Drupal\ui_patterns_settings\UiPatternsSettings; -use Twig\Extension\AbstractExtension; -use Twig\TwigFunction; - -/** - * UI Patterns Twig Extension. - * - * @package Drupal\ui_patterns_settings\TwigExtension - */ -class UIPatternsSettingsExtension extends AbstractExtension { - - /** - * {@inheritdoc} - */ - public function getName() { - return 'ui_patterns_settings'; - } - - /** - * {@inheritdoc} - */ - public function getFunctions() { - return [ - new TwigFunction( - 'pattern_configuration', - [$this, 'patternConfiguration'] - ), - ]; - } - - /** - * Returns pattern configuration. - * - * @param string $pattern_id - * The pattern id. - * @param string $variant_id - * The variant id. - * @param string $config_name - * The config name. - * - * @return mixed|null - * The pattern config - */ - public function patternConfiguration($pattern_id, $variant_id, $config_name) { - $definition = UiPatterns::getPatternDefinition($pattern_id); - if ($definition !== NULL) { - return UiPatternsSettings::getPatternConfiguration($definition, $variant_id, $config_name); - } - } - -} diff --git a/src/UiPatternsSettings.php b/src/UiPatternsSettings.php deleted file mode 100644 index b1c578db8dda682f8f623a3d5e89d92f13af8007..0000000000000000000000000000000000000000 --- a/src/UiPatternsSettings.php +++ /dev/null @@ -1,314 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings; - -use Drupal\Core\Entity\ContentEntityBase; -use Drupal\Core\Entity\EntityInterface; -use Drupal\ui_patterns\Definition\PatternDefinition; -use Drupal\ui_patterns\UiPatterns; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; -use Drupal\Core\Entity\EntityMalformedException; - -/** - * UI Patterns setting factory class. - * - * @package Drupal\ui_patterns_settings - */ -class UiPatternsSettings { - - /** - * Cached pattern definition settings. - * - * @var \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting[] - */ - private static $settings; - - /** - * Get pattern manager setting instance. - * - * @return \Drupal\ui_patterns_settings\UiPatternsSettingsManager - * UI Patterns setting manager instance. - */ - public static function getManager() { - return \Drupal::service('plugin.manager.ui_patterns_settings'); - } - - /** - * Get config manager instance. - * - * @return \Drupal\ui_patterns_settings\ConfigManager - * UI Patterns setting config manager. - */ - public static function getConfigManager() { - return \Drupal::service('ui_patterns_settings.config_manager'); - } - - /** - * Preprocess exposed settings variables. - * - * @param \Drupal\Core\Entity\ContentEntityBase $entity - * The entity. - * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition - * The pattern definition. - * - * @return array - * The processed variables. - */ - private static function preprocessExposedFields(ContentEntityBase $entity, PatternDefinition $definition) { - $processed_settings = []; - $mapping = self::getConfigManager()->getMappingByType($entity->getEntityTypeId()); - foreach ($mapping as $field => $pattern_setting) { - if ($entity->hasField($field)) { - [$pattern_id, $setting_id] = explode('::', $pattern_setting); - if ($setting_id !== 'variant') { - $pattern_definition = UiPatterns::getPatternDefinition($pattern_id); - $setting_definition = UiPatternsSettings::getPatternDefinitionSetting($pattern_definition, $setting_id); - if ($setting_definition !== NULL) { - $settingType = UiPatternsSettings::createSettingType($definition, $setting_definition); - $processed_settings[$setting_id] = $settingType->preprocessExposedField($entity->get($field)); - } - } - } - } - return $processed_settings; - } - - /** - * Preprocess all settings variables. - * - * @param string $pattern_id - * Pattern ID for which to preprocess. - * @param array $settings - * The stored settings. - * @param string $variant - * The variant. - * @param bool $preview - * Is preview. - * @param \Drupal\Core\Entity\EntityInterface $entity - * The entity of the pattern. Useful for dynamic settings. - * @param array $element - * The render element. - * - * @return array - * The processed settings. - */ - public static function preprocess($pattern_id, array $settings, $variant, $preview, EntityInterface $entity = NULL, array &$element = NULL) { - $processed_settings = []; - $definition = UiPatterns::getPatternDefinition($pattern_id); - $context = []; - $context['entity'] = $entity; - if ($entity instanceof ContentEntityBase) { - $processed_settings = self::preprocessExposedFields($entity, $definition); - } - $settings_definition = UiPatternsSettings::getPatternDefinitionSettings($definition); - foreach ($settings_definition as $key => $setting_definition) { - if ($setting_definition->getForcedValue()) { - $value = $setting_definition->getForcedValue(); - } - elseif (!empty($settings[$key . '_token'])) { - $token_value = $settings[$key . '_token']; - $token_data = []; - if ($entity !== NULL) { - $token_data[$entity->getEntityTypeId()] = $entity; - } - try { - $value = \Drupal::token() - ->replace($token_value, $token_data, ['clear' => TRUE]); - } - catch (EntityMalformedException $e) { - if (!ui_patterns_settings_is_layout_builder_route()) { - throw $e; - } - // Do nothing inside layout builder. - } - } - // Use exposed field value if no other setting is provided. - elseif (isset($processed_settings[$key]) && empty($settings[$key])) { - $value = $processed_settings[$key]; - } - elseif (isset($settings[$key])) { - $value = $settings[$key]; - } - elseif ($preview && !empty($setting_definition->getPreview())) { - $value = $setting_definition->getPreview(); - } - else { - $value = $setting_definition->getDefaultValue(); - } - if (!empty($variant) && $definition->hasVariant($variant)) { - $variant_ob = $definition->getVariant($variant); - if ($variant_ob != NULL) { - $variant_ary = $variant_ob->toArray(); - if (isset($variant_ary['settings']) && isset($variant_ary['settings'][$key])) { - // Overwrite settings definition. - // Allow variants to overwrite settings configuration. - if (isset($variant_ary['settings'][$key]['definition']) && is_array($variant_ary['settings'][$key]['definition'])) { - $value = $variant_ary['settings'][$key]['value'] ?? $value; - if (isset($variant_ary['settings'][$key]['definition'])) { - $setting_definition = clone $setting_definition; - $setting_definition->setDefinitions($variant_ary['settings'][$key]['definition']); - } - } - else { - $value = $variant_ary['settings'][$key]; - } - } - } - } - $setting_type = UiPatternsSettings::createSettingType($definition, $setting_definition); - $processed_value = $setting_type->preprocess($value, $context); - $setting_type->alterElement($processed_value, $setting_definition, $element); - $processed_settings[$key] = $processed_value; - } - return $processed_settings; - - } - - /** - * Exposed pattern setting definitions. - * - * Returns a list of all exposed pattern setting definitions - * filtered by the provided field storage type. - * - * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition - * The pattern definition. - * @param string $field_storage_type - * The field storage type. - * - * @return array - * The configuration array. - * Key: pattern::setting. - * Keys: - * 'label' = 'The setting label' - * 'definition' = The pattern definition - */ - public static function getExposedPatternDefinition(PatternDefinition $definition, $field_storage_type) { - $additional = $definition->getAdditional(); - $exposed = []; - if (isset($additional['allow_variant_expose']) && - $additional['allow_variant_expose'] === TRUE && $field_storage_type === 'list_string') { - $exposed[$definition->id() . '::variant'] = [ - 'label' => $definition->getLabel() . ' Variants', - 'definition' => $definition, - ]; - } - - $settings = self::getPatternDefinitionSettings($definition); - /** @var \Drupal\ui_patterns\Definition\PatternDefinitionSetting $setting */ - foreach ($settings as $setting) { - if ($setting->allowExpose() - ) { - $setting_type = self::createSettingType($definition, $setting); - if (in_array($field_storage_type, $setting_type->fieldStorageExposableTypes())) { - $exposed[$definition->id() . '::' . $setting->getName()] = [ - 'label' => $definition->getLabel() . ' ' . $setting->getLabel(), - 'definition' => $definition, - ]; - } - } - } - return $exposed; - } - - /** - * Get pattern configuration for a pattern definition. - * - * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition - * The definition. - * @param string $variant - * The pattern variant. - * @param string $name - * The configuration key. - * - * @return mixed - * Setting pattern configuration. - */ - public static function getPatternConfiguration(PatternDefinition $definition, $variant = NULL, $name = NULL) { - $additional = $definition->getAdditional(); - $configuration = $additional['configuration'] ?? []; - // Check for variant configuration. - if (!empty($variant)) { - $variant_ob = $definition->getVariant($variant); - if ($variant_ob != NULL) { - $variant_ary = $variant_ob->toArray(); - if (isset($variant_ary['configuration'])) { - $configuration = array_merge($configuration, $variant_ary['configuration']); - } - } - } - // Check for settings configuration. - if (isset($additional['settings'][$name]['options'])) { - foreach ($additional['settings'][$name]['options'] as $option_key => $option_value) { - if (is_array($option_value) && isset($option_value['configuration'])) { - $configuration[$name][$option_key] = $option_value['configuration']; - } - } - } - if ($name !== NULL && isset($configuration[$name])) { - return $configuration[$name]; - } - return $configuration; - } - - /** - * Get setting definition for a pattern and a setting name. - * - * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition - * The pattern definition. - * @param string $setting_name - * The setting name. - */ - public static function getPatternDefinitionSetting(PatternDefinition $definition, $setting_name) { - $definitions = self::getPatternDefinitionSettings($definition); - return $definitions[$setting_name] ?? NULL; - } - - /** - * Get setting definitions for a pattern definition. - * - * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition - * The definition. - * - * @return \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting[] - * Setting pattern definitons. - */ - public static function getPatternDefinitionSettings(PatternDefinition $definition) { - if (isset(self::$settings[$definition->id()])) { - return self::$settings[$definition->id()]; - } - $additional = $definition->getAdditional(); - $settings_ary = $additional['settings'] ?? []; - $settings = []; - if (!empty($settings_ary)) { - foreach ($settings_ary as $key => $setting_ary) { - $settings[$key] = new PatternDefinitionSetting($key, $setting_ary); - } - } - self::$settings[$definition->id()] = $settings; - return $settings; - } - - /** - * Create setting type plugin. - * - * @param \Drupal\ui_patterns\Definition\PatternDefinition $pattern_definition - * The pattern definition. - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $setting_defintion - * The setting definition. - * @param string $variant - * The variant. - * - * @return \Drupal\ui_patterns_settings\Plugin\PatternSettingTypeInterface - * UI Patterns setting manager instance. - */ - public static function createSettingType(PatternDefinition $pattern_definition, PatternDefinitionSetting $setting_defintion, $variant = NULL) { - $configuration = []; - $configuration['pattern_setting_definition'] = $setting_defintion; - $configuration['pattern_definition'] = $pattern_definition; - $configuration['variant'] = $variant; - - return \Drupal::service('plugin.manager.ui_patterns_settings') - ->createInstance($setting_defintion->getType(), $configuration); - } - -} diff --git a/src/UiPatternsSettingsManager.php b/src/UiPatternsSettingsManager.php deleted file mode 100644 index 73f131d5b724c4ad1cbd9b3dcf75a7a64c661b1d..0000000000000000000000000000000000000000 --- a/src/UiPatternsSettingsManager.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php - -namespace Drupal\ui_patterns_settings; - -use Drupal\Component\Plugin\Factory\DefaultFactory; -use Drupal\Component\Plugin\PluginManagerInterface; -use Drupal\Core\Cache\CacheBackendInterface; -use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\Core\Plugin\DefaultPluginManager; -use Drupal\Core\StringTranslation\StringTranslationTrait; -use Drupal\ui_patterns\Definition\PatternDefinition; - -/** - * Provides the UI Patterns Settings plugin manager. - */ -class UiPatternsSettingsManager extends DefaultPluginManager implements PluginManagerInterface { - - use StringTranslationTrait; - - /** - * UiPatternsSettingsManager constructor. - */ - public function __construct(\Traversable $namespaces, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend) { - parent::__construct('Plugin/UiPatterns/SettingType', $namespaces, $module_handler, 'Drupal\ui_patterns_settings\SettingTypeInterface', 'Drupal\ui_patterns_settings\Annotation\UiPatternsSettingType'); - $this->moduleHandler = $module_handler; - $this->alterInfo('ui_patterns_settings_info'); - $this->setCacheBackend($cache_backend, 'ui_patterns_settings', ['ui_patterns_settings']); - } - - /** - * Returns TRUE if a variant token can configured. - * - * @param \Drupal\ui_patterns\Definition\PatternDefinition $pattern_definition - * The pattern definition. - * - * @return bool - * Returns TRUE if a variant token can configured. - */ - public static function allowVariantToken(PatternDefinition $pattern_definition) { - $ary = $pattern_definition->getAdditional(); - if (isset($ary['allow_variant_token']) && $ary['allow_variant_token'] === TRUE) { - return TRUE; - } - else { - return FALSE; - } - } - - /** - * {@inheritdoc} - */ - public function createInstance($plugin_id, array $configuration = []) { - $plugin_definition = $this->getDefinition($plugin_id); - $plugin_class = DefaultFactory::getPluginClass($plugin_id, $plugin_definition); - // If the plugin provides a factory method, pass the container to it. - if (is_subclass_of($plugin_class, 'Drupal\Core\Plugin\ContainerFactoryPluginInterface')) { - $plugin = $plugin_class::create(\Drupal::getContainer(), $configuration, $plugin_id, $plugin_definition); - } - else { - $plugin = new $plugin_class($configuration, $plugin_id, $plugin_definition); - } - return $plugin; - } - -} diff --git a/tests/fixtures/TestDataSet.yml b/tests/fixtures/TestDataSet.yml new file mode 100644 index 0000000000000000000000000000000000000000..5911789820212da2462de948211d262bc1a374d9 --- /dev/null +++ b/tests/fixtures/TestDataSet.yml @@ -0,0 +1,20 @@ +--- +media_main: + component: + component_id: ui_patterns_test:test-component + slots: + slot: + sources: + - + source_id: media + source: + media_id: 112 + + output: + slots: + slot: + - + normalized_value: '12' + + + entity: {} diff --git a/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig b/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig deleted file mode 100644 index 1ed615f536a0978c45bc30220fb0a371e0f4fadc..0000000000000000000000000000000000000000 --- a/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig +++ /dev/null @@ -1,18 +0,0 @@ -{% set configuration = pattern_configuration('foo_settings', '', 'config') %} -<div style="border: 1px solid blue"> - <div class="textfield">Textfield: {{ textfield }}</div> - <div class="number">Number: {{ number }}</div> - <div class="token">Token: {{ token }}</div> - <div class="boolean">Boolean: {{ boolean }}</div> - <div class="url">Url: {{ url }}</div> - <div class="select">Select: {{ select }}</div> - <div class="enumeration">Enumeration: {{ enumeration }}</div> - <div class="checkboxes">Checkboxes: {% for i in checkboxes %} {{- i -}} {% endfor %}</div> - <div class="language_checkboxes">language_checkboxes: {% for index, language in language_checkboxes.selected %} {{- index -}}-{{ language }} {% endfor %}</div> - <div class="attributes">Attributes: {{ attributes }}</div> - <div class="config">Configuration: {{ configuration }}</div> - <div class="group_sub">Group sub: {{ group_sub }}</div> - <div class="media_style">Media Style: {{ media_style }}</div> - <div class="select_config">select_config: {{ pattern_configuration('foo_settings', '', 'select_config')[select_config] }}</div> - -</div> diff --git a/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml b/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml deleted file mode 100644 index 7948673e49421e439e9cc710e3400b4c93bed326..0000000000000000000000000000000000000000 --- a/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml +++ /dev/null @@ -1,140 +0,0 @@ -foo_settings: - label: Foo settings - fields: - dummy: - type: text - label: Dummy - allow_variant_token: true - allow_variant_expose: true - variants: - default: - label: Default - blue: - label: Blue - settings: - textfield: blue - media_style: - definition: - image_style: 'large' - settings: - textfield: - type: textfield - label: Textfield - allow_token: true - preview: text preview - required: true - number: - type: number - label: Number - preview: 10 - required: true - token: - type: token - label: Token - preview: Token - media_library: - type: media_library - label: Media Library - view_mode: 'default' - media_style: - type: media_library - label: Media Style - allow_expose: true - image_style: 'medium' - url: - type: url - label: Url - preview: Url - allow_expose: true - expose_as_field: true - boolean: - type: boolean - allow_token: true - label: Boolean - preview: 1 - allow_expose: true - colorwidget: - type: colorwidget - label: Colorwidget - options: - key: value/#000000 - white: White/#ffffff - enumeration: - type: enumeration - enumeration_type: select - label: Enumeration - options: - key: value - select: - type: select - label: Select - allow_expose: true - options: - key: value - key2: value2 - select_config: - type: select - label: Select Config - options: - key: - label: select_config 1 - configuration: config key - key2: - label: select_config 2 - configuration: config key2 - condition: - variant: blue - language_checkboxes: - type: language_checkboxes - label: Language selection - language_access: - type: language_access - label: Language access - publish: - type: publish - label: Publish - default_value: true - checkboxes: - type: checkboxes - label: Checkboxes - options: - box1: Box1 - box2: Box2 - attributes: - type: attributes - label: Attributes - group: - type: group - label: Group - group_type: container - group_sub: - type: textfield - label: Textfield - group: group - tabs: - type: group - label: Tabs - group_type: horizontal_tabs - tab: - type: group - label: Tab - group_type: details - group: tabs - tab_2: - type: group - label: Tab 2 - group_type: details - group: tabs - tab_element: - type: textfield - label: Textfield - group: tab - tab_element2: - type: select - label: Textfield 2 - group: tab_2 - options: - option1: Option 1 - - configuration: - config: config_value diff --git a/tests/modules/ui_patterns_settings_render_test/ui_patterns_settings_render_test.info.yml b/tests/modules/ui_patterns_settings_render_test/ui_patterns_settings_render_test.info.yml deleted file mode 100644 index 047efdc35fc22aa2c40cfe2c375a4eee643d7f69..0000000000000000000000000000000000000000 --- a/tests/modules/ui_patterns_settings_render_test/ui_patterns_settings_render_test.info.yml +++ /dev/null @@ -1,3 +0,0 @@ -type: module -name: 'UI Patterns Settings Render Test' -core_version_requirement: ^8 || ^9 || ^10 diff --git a/tests/src/Functional/UiPatternsSettingsRenderTest.php b/tests/src/Functional/UiPatternsSettingsRenderTest.php deleted file mode 100644 index aa7aaf8abdb9e4ed2e5d75761c367beccc4ea79c..0000000000000000000000000000000000000000 --- a/tests/src/Functional/UiPatternsSettingsRenderTest.php +++ /dev/null @@ -1,113 +0,0 @@ -<?php - -namespace Drupal\Tests\ui_patterns_settings\Functional; - -use Drupal\Tests\BrowserTestBase; -use Drupal\Tests\ui_patterns\Traits\TwigDebugTrait; - -/** - * Test pattern preview rendering. - * - * @group ui_patterns_setting - * @name ui_patterns_setting - */ -class UiPatternsSettingsRenderTest extends BrowserTestBase { - - /** - * {@inheritdoc} - */ - protected $defaultTheme = 'stable'; - - /** - * Disable schema validation when running tests. - * - * @var bool - * - * @todo Fix this by providing actual schema validation. - */ - protected $strictConfigSchema = FALSE; - - use TwigDebugTrait; - - /** - * {@inheritdoc} - */ - protected static $modules = [ - 'node', - 'ui_patterns', - 'ui_patterns_ds', - 'ui_patterns_library', - 'ui_patterns_layouts', - 'ui_patterns_settings', - 'field_ui', - 'token', - 'ds', - 'ui_patterns_settings_render_test', - ]; - - /** - * Tests pattern preview suggestions. - */ - public function testRender() { - - $assert_session = $this->assertSession(); - - $this->drupalCreateContentType(['type' => 'article']); - $created_node = $this->drupalCreateNode([ - 'title' => - t('Hello Settings'), - 'type' => 'article', - ]); - $this->enableTwigDebugMode(); - - $user = $this->drupalCreateUser([], NULL, TRUE); - $this->drupalLogin($user); - - // Define mapping for each setting type. - $mappings = [ - '[textfield]' => ['input' => 'Text', 'result' => 'Textfield: Text'], - '[number]' => ['input' => '10', 'result' => 'Number: 10'], - '[token][input]' => ['input' => '[node:nid]', 'result' => 'Token: 1'], - '[boolean]' => ['input' => '1', 'result' => 'Boolean: 1'], - '[select]' => ['input' => 'key', 'result' => 'Select: key'], - '[select_config]' => ['input' => 'key', 'result' => 'select_config: config key'], - '[enumeration]' => ['input' => 'key', 'result' => 'Enumeration: key'], - /*'[colorwidget][colorwidget]' => [ - 'input' => 'key', - 'result' => 'Colorwidget: key', - ],*/ - '[checkboxes][box1]' => ['input' => TRUE, 'result' => 'Checkboxes: Box1'], - '[attributes]' => [ - 'input' => 'class="class"', - 'result' => 'Attributes: class="class"', - ], - '[group_sub]' => [ - 'input' => 'group_sub', - 'result' => 'Group sub: group_sub', - ], - ]; - - // Select the layout. - $edit = [ - 'ds_layout' => 'pattern_foo_settings', - ]; - $this->drupalGet('/admin/structure/types/manage/article/display'); - $this->submitForm($edit, 'Save'); - - // Fill settings. - $edit = []; - foreach ($mappings as $key => $mapping) { - $edit['layout_configuration[pattern][settings]' . $key] = $mapping['input']; - } - $this->drupalGet('/admin/structure/types/manage/article/display'); - $this->submitForm($edit, 'Save'); - - // Check values. - $this->drupalGet('/node/' . $created_node->id()); - foreach ($mappings as $key => $mapping) { - $assert_session->responseContains($mapping['result']); - } - $assert_session->responseContains('Configuration: config_value'); - } - -} diff --git a/tests/src/Kernel/Source/MediaSourceTest.php b/tests/src/Kernel/Source/MediaSourceTest.php new file mode 100644 index 0000000000000000000000000000000000000000..aecb567782409b3a39263178ffb41d0297cc7dda --- /dev/null +++ b/tests/src/Kernel/Source/MediaSourceTest.php @@ -0,0 +1,32 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\Tests\ui_patterns_settings\Kernel\Source; + +use Drupal\Tests\ui_patterns_settings\Kernel\UiPSSourcePluginsTestBase; + +/** + * Test MediaSource. + * + * @coversDefaultClass \Drupal\ui_patterns_settings\Plugin\UiPatterns\Source\MediaSource + * @group ui_patterns_settings + */ +class MediaSourceTest extends UiPSSourcePluginsTestBase { + + /** + * {@inheritdoc} + */ + protected static $modules = [ + 'ui_patterns_settings', + ]; + + + /** + * Test TokenSource Plugin. + */ + public function testPlugin(): void { + $this->runSourcePluginTests('media_', __DIR__ . "/../../fixtures/TestDataSet.yml"); + } + +} diff --git a/tests/src/Kernel/UiPSSourcePluginsTestBase.php b/tests/src/Kernel/UiPSSourcePluginsTestBase.php new file mode 100644 index 0000000000000000000000000000000000000000..06e142f3a39ab010d961abfd1796b59923e20cff --- /dev/null +++ b/tests/src/Kernel/UiPSSourcePluginsTestBase.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\Tests\ui_patterns_settings\Kernel; + +use Drupal\Tests\ui_patterns\Kernel\SourcePluginsTestBase; + +/** + * Base class to test source plugins. + * + * @group ui_patterns + */ +class UiPSSourcePluginsTestBase extends SourcePluginsTestBase { + + /** + * {@inheritdoc} + */ + protected function setUp(): void { + parent::setUp(); + $this->installConfig(['ui_patterns_settings']); + + } + + public function runSourcePluginTests(?string $test_starts_with = NULL, ?string $tests_path = NULL): void { + parent::runSourcePluginTests($test_starts_with, __DIR__ . "/../../fixtures/TestDataSet.yml"); + } + + +} diff --git a/ui_patterns_settings.info.yml b/ui_patterns_settings.info.yml index a93111a96f264882138dfaa2f4bde5445aff68d9..b0ea5a384efc19e0e32290c5027d0f3eccaa540e 100644 --- a/ui_patterns_settings.info.yml +++ b/ui_patterns_settings.info.yml @@ -2,7 +2,7 @@ name: UI Patterns Settings type: module description: Configure patterns with settings package: User interface -core_version_requirement: ^8 || ^9 || ^10 +core_version_requirement: ^10.3 || ^11 dependencies: - ui_patterns:ui_patterns - token:token diff --git a/ui_patterns_settings.libraries.yml b/ui_patterns_settings.libraries.yml deleted file mode 100644 index bd781241034d10f0e9d3b6299c3c0f1acd5d2207..0000000000000000000000000000000000000000 --- a/ui_patterns_settings.libraries.yml +++ /dev/null @@ -1,12 +0,0 @@ -widget: - version: VERSION - js: - js/ui_pattern_settings.toggle_token.js: {} - css: - component: - css/ui_patterns_settings.css: {} - dependencies: - - core/jquery - - core/once - - core/drupal - - core/drupalSettings diff --git a/ui_patterns_settings.module b/ui_patterns_settings.module index 20a345838982416dce1a624bb7e9010fc40c293a..fba211c5451677bec301cd8b55e3e957a4e14cd2 100644 --- a/ui_patterns_settings.module +++ b/ui_patterns_settings.module @@ -5,329 +5,3 @@ * Contains ui_patterns_settings.module. */ -use Drupal\Component\Utility\UrlHelper; -use Drupal\Core\Url; -use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase; -use Drupal\ui_patterns_settings\Plugin\Layout\PatternSettingsLayout; -use Drupal\Core\Entity\EntityTypeInterface; -use Drupal\field\Entity\FieldStorageConfig; -use Drupal\ui_patterns_settings\UiPatternsSettings; -use Drupal\ui_patterns\UiPatterns; -use Drupal\ui_patterns\Definition\PatternDefinition; -use Drupal\ui_patterns_settings\Form\SettingsFormBuilder; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Render\Element; -use Drupal\media_library\MediaLibraryUiBuilder; - -/** - * Implements hook_ui_patterns_layouts_display_settings_form_alter(). - */ -function ui_patterns_settings_ui_patterns_layouts_display_settings_form_alter(&$form, PatternDefinition $definition, $configuration) { - SettingsFormBuilder::layoutForm($form, $definition, $configuration); -} - -function ui_patterns_settings_build_media_edit_button($media_id) { - $media_entity_type = \Drupal::entityTypeManager()->getStorage('media')->getEntityType(); - $edit_template = $media_entity_type->getLinkTemplate('edit-form'); - $edit_url_query_params = [ - 'media_library_edit' => 'ajax', - 'media_library_edit_entity_id' => $media_id, - ]; - $edit_url = Url::fromUserInput(str_replace('{media}', $media_id, $edit_template) . '?' . UrlHelper::buildQuery($edit_url_query_params)); - $dialog_options = MediaLibraryUiBuilder::dialogOptions(); - return [ - '#type' => 'link', - '#title' => '', - '#url' => $edit_url, - '#attributes' => [ - 'class' => [ - 'js-media-library-edit-link', - 'media-library-edit__link', - 'use-ajax', - ], - 'target' => '_blank', - 'data-dialog-options' => json_encode([ - 'height' => $dialog_options['height'], - 'width' => $dialog_options['width'], - 'classes' => ['ui-dialog-content' => 'media-library-edit__modal'], - ]), - 'data-dialog-type' => 'dialog', - ], - '#attached' => [ - 'library' => [ - 'media_library_edit/admin', - 'core/drupal.dialog.ajax', - ], - ], - ]; - -} -/** - * Implements hook_preprocess_media_library_element(). - */ -function ui_patterns_settings_preprocess_media_library_element(&$variables) { - $element = $variables['element']; - if (isset($element['#ui_patterns_media_edit_button']) && !empty($element['#value']) && isset($variables['content']['selection'])) { - foreach (Element::children($variables['content']['selection']) as $child) { - $selection = &$variables['content']['selection'][$child]; - $media_id = $selection['preview']['target_id']['#value'] ?? NULL; - if ($media_id !== NULL) { - // Remove js-media-library-item - if (($key = array_search('js-media-library-item', $selection['#attributes']['class'])) !== false) { - unset($selection['#attributes']['class'][$key]); - } - $selection['media_edit'] = ui_patterns_settings_build_media_edit_button($media_id); - } - } - - } -} -/** - * Implements hook_form_field_storage_config_edit_form_alter(). - */ -function ui_patterns_settings_form_field_storage_config_edit_form_alter(&$form, FormStateInterface $form_state) { - /** @var \Drupal\field\Entity\FieldStorageConfig $entity */ - $entity = $form_state->getFormObject()->getEntity(); - array_unshift($form['actions']['submit']['#submit'], 'ui_patterns_settings_form_field_storage_config_edit_form_submit'); - - $definitions = UiPatterns::getPatternDefinitions(); - $settings_options = []; - foreach ($definitions as $definition) { - $infos = UiPatternsSettings::getExposedPatternDefinition($definition, $entity->getType()); - foreach ($infos as $key => $info) { - $settings_options[$key] = $info['label']; - } - } - if (count($settings_options) > 0) { - $mapping = UiPatternsSettings::getConfigManager()->getMapping($entity->id()); - $form['settings']['use_pattern'] = [ - '#type' => 'checkbox', - '#title' => t('Expose pattern setting'), - '#default_value' => $mapping !== NULL, - '#description' => '', - ]; - - $form['settings']['pattern_setting'] = [ - '#type' => 'select', - '#options' => $settings_options, - '#title' => 'Pattern Setting', - '#states' => [ - 'invisible' => [ - ':input[name="settings[use_pattern]"]' => ['checked' => FALSE], - ], - ], - '#default_value' => $mapping, - ]; - } -} - -/** - * Implements hook_form_field_storage_config_edit_form_submit(). - */ -function ui_patterns_settings_form_field_storage_config_edit_form_submit(array $form, FormStateInterface $form_state) { - $settings = $form_state->getValue('settings'); - /** @var \Drupal\field\Entity\FieldStorageConfig $entity */ - $entity = $form_state->getFormObject()->getEntity(); - - if (isset($settings['use_pattern']) && $settings['use_pattern'] === 1) { - UiPatternsSettings::getConfigManager()->addMapping($entity->id(), $settings['pattern_setting']); - } - else { - UiPatternsSettings::getConfigManager()->addMapping($entity->id(), NULL); - } - -} - -/** - * Implements hook_entity_field_storage_info_alter(). - */ -function ui_patterns_settings_entity_field_storage_info_alter(&$fields, EntityTypeInterface $entity_type) { - /** @var \Drupal\field\Entity\FieldStorageConfig $field */ - foreach ($fields as $field) { - if ($field instanceof FieldStorageConfig) { - if (($mapping = UiPatternsSettings::getConfigManager() - ->getMapping($field->id())) !== NULL) { - [$pattern_id, $setting_id] = explode('::', $mapping); - try { - $pattern_definition = UiPatterns::getPatternDefinition($pattern_id); - $settings_definition = UiPatternsSettings::getPatternDefinitionSetting($pattern_definition, $setting_id); - if ($pattern_definition !== NULL - && $settings_definition !== NULL - ) { - $type = UiPatternsSettings::createSettingType($pattern_definition, $settings_definition); - $type->alterFieldStorage($field); - } - elseif ($pattern_definition !== NULL && $setting_id === 'variant') { - $field->setSetting('allowed_values_function', 'ui_patterns_settings_allowed_values_function'); - } - else { - \Drupal::messenger()->addError('No pattern setting %setting found'); - } - } catch (\Exception $e) { - \Drupal::messenger()->addError($e->getMessage()); - } - } - } - } -} - -/** - * The storage config. - * - * @param \Drupal\field\Entity\FieldStorageConfig $storage_config - * The field storage config. - * - * @return string[] - * The allowed list of the enumeration. - */ -function ui_patterns_settings_allowed_values_function(FieldStorageConfig $storage_config) { - [$pattern, $setting_key] = explode('::', UiPatternsSettings::getConfigManager()->getMapping($storage_config->id())); - $pattern_definition = UiPatterns::getPatternDefinition($pattern); - $settings_definition = UiPatternsSettings::getPatternDefinitionSetting($pattern_definition, $setting_key); - if ($pattern_definition !== NULL && $settings_definition !== NULL) { - return $settings_definition->getOptions(); - } - elseif ($pattern_definition !== NULL && $setting_key === 'variant') { - return $pattern_definition->getVariantsAsOptions(); - } - return []; -} - -/** - * Implements hook_ui_patterns_display_form_alter(). - */ -function ui_patterns_settings_ui_patterns_display_settings_form_alter(array &$form, $configuration) { - SettingsFormBuilder::displayForm($form, $configuration); -} - -/** - * Preprocess hook. - * - * @param array $variables - * Theme variables. - */ -function ui_patterns_settings_preprocess_field__pattern_ds_field_template(array &$variables) { - $pattern_id = $variables['ds-config']['settings']['pattern']; - $settings = $variables['ds-config']['settings']['pattern_settings'][$pattern_id] ?? NULL; - foreach ($variables['items'] as $delta => $item) { - $variables['pattern']['pattern_' . $delta]['#settings'] = $settings; - } -} - -/** - * Preprocess variables for the pattern_views_row theme hook. - * - * @param array $variables - * Theme variables. - */ -function ui_patterns_settings_preprocess_pattern_views_row(array &$variables) { - $pattern_id = $variables['options']['pattern']; - $settings = $variables['options']['pattern_settings'][$pattern_id] ?? NULL; - $variables['pattern']['#settings'] = $settings; -} - -/** - * Implements hook_element_info_alter(). - */ -function ui_patterns_settings_element_info_alter(array &$info) { - - foreach ($info as &$elm) { - if (isset($elm['#process'])) { - array_unshift($elm['#process'], [ - PatternSettingTypeBase::class, - "formGroupProcess", - ]); - } - } - - if (isset($info['pattern'])) { - $info['pattern']['#pre_render'][] = [ - "Drupal\ui_patterns_settings\Element\PatternSettings", - "processSettings", - ]; - } - - if (isset($info['pattern_preview'])) { - $info['pattern_preview']['#pre_render'][] = [ - "Drupal\ui_patterns_settings\Element\PatternSettings", - "processPreviewSettings", - ]; - } - -} - -/** - * Implements hook_theme_registry_alter(). - * - * Add settings variables to the pattern theme. - */ -function ui_patterns_settings_theme_registry_alter(&$theme_registry) { - foreach (UiPatterns::getManager()->getPatterns() as $pattern) { - $definition = $pattern->getPluginDefinition(); - if (isset($theme_registry['pattern_' . $definition->id()])) { - $settings = UiPatternsSettings::getPatternDefinitionSettings($definition); - foreach ($settings as $key => $setting) { - $theme_registry['pattern_' . $definition->id()]['variables'][$key] = NULL; - } - } - } -} - -/** - * Implements hook_field_group_build_pre_render_alter(). - */ -function ui_patterns_settings_field_group_pre_render_alter(&$element, $group, $rendering_object) { - if (!isset($group->format_settings['pattern'])) { - return; - } - - $pattern_id = $group->format_settings['pattern'] ?? NULL; - $element['#settings'] = $group->format_settings['pattern_settings'][$pattern_id] ?? NULL; - $element['#variant'] = $group->format_settings['pattern_variant'] ?? NULL; - if (!empty($group->format_settings['variants_token'])) { - $element['#variant_token'] = $group->format_settings['variants_token'][$pattern_id] ?? NULL; - } -} - -/** - * Returns true if current route is a layout builder route. - * - * @return bool - * True if is layout builder route - */ -function ui_patterns_settings_is_layout_builder_route() { - $route_name = \Drupal::routeMatch()->getRouteName(); - if (preg_match('/^(layout_builder\.([^.]+\.)?)/', $route_name)) { - return TRUE; - } - else { - return FALSE; - } -} - -/** - * Implements hook_layout_alter(). - */ -function ui_patterns_settings_layout_alter(&$definitions) { - /** @var \Drupal\Core\Layout\LayoutDefinition $definition */ - foreach ($definitions as $definition) { - if ($definition->getClass() == '\Drupal\ui_patterns_layouts\Plugin\Layout\PatternLayout') { - $definition->setClass(PatternSettingsLayout::class); - } - } -} - -/** - * Implements hook_ui_patterns_info_alter(). - */ -function ui_patterns_settings_ui_patterns_info_alter(&$definitions) { - /** @var PatternDefinition $definition */ - foreach ($definitions as $definition) { - $settings = UiPatternsSettings::getPatternDefinitionSettings($definition); - foreach ($settings as $setting) { - if ($setting->getExposeAsField()) { - $definition->setField($setting->getName(), $setting->getLabel()); - } - } - } -} diff --git a/ui_patterns_settings.services.yml b/ui_patterns_settings.services.yml index 18acd844db01bf77ba3ed4055b68727686def5ae..ad189ddbec905274478cedb2ae508abbdb4caeb0 100644 --- a/ui_patterns_settings.services.yml +++ b/ui_patterns_settings.services.yml @@ -1,11 +1 @@ -services: - plugin.manager.ui_patterns_settings: - class: Drupal\ui_patterns_settings\UiPatternsSettingsManager - arguments: ['@container.namespaces', '@module_handler', '@cache.discovery'] - ui_patterns_settings.twig: - class: Drupal\ui_patterns_settings\TwigExtension\UIPatternsSettingsExtension - tags: - - { name: twig.extension } - ui_patterns_settings.config_manager: - class: Drupal\ui_patterns_settings\ConfigManager - arguments: ['@config.factory'] +services: {}