diff --git a/.cspell-project-words.txt b/.cspell-project-words.txt new file mode 100644 index 0000000000000000000000000000000000000000..0c01d8e3cefc354dd60fd8f95ffd33698e0dc7fb --- /dev/null +++ b/.cspell-project-words.txt @@ -0,0 +1,4 @@ +coloris +colorwidget +coloriswidget +exposable diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..ed0be75c5efb9b7e9ad1d9552909a0cdb6153f98 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,38 @@ +################ +# Includes +# +# Additional configuration can be provided through includes. +# One advantage of include files is that if they are updated upstream, the changes affect all pipelines using that include. +# +# Includes can be overridden by re-declaring anything provided in an include, here in gitlab-ci.yml +# https://docs.gitlab.com/ee/ci/yaml/includes.html#override-included-configuration-values +################ + +include: + ################ + # DrupalCI includes: + # As long as you include this, any future includes added by the Drupal Association will be accessible to your pipelines automatically. + # View these include files at https://git.drupalcode.org/project/gitlab_templates/ + ################ + - project: $_GITLAB_TEMPLATES_REPO + ref: $_GITLAB_TEMPLATES_REF + file: + - '/includes/include.drupalci.main.yml' + - '/includes/include.drupalci.variables.yml' + - '/includes/include.drupalci.workflows.yml' + +################ +# Pipeline configuration variables +# +# These are the variables provided to the Run Pipeline form that a user may want to override. +# +# Docs at https://git.drupalcode.org/project/gitlab_templates/-/blob/main/includes/include.drupalci.variables.yml +################ +variables: + # Broaden test coverage. + _SHOW_ENVIRONMENT_VARIABLES: 1 + _PHPUNIT_CONCURRENT: 1 + OPT_IN_TEST_CURRENT: 1 + OPT_IN_TEST_PREVIOUS_MAJOR: 1 + OPT_IN_TEST_MIN_PHP: 1 + OPT_IN_TEST_MAX_PHP: 1 diff --git a/README.md b/README.md index 6f9dac4780ff1e707d95c75ad4a9a7979ec8d135..e3f2e35fbb5120a5055ed34bbbe917ef19280dc0 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ You can easily create your own setting types. - attributes - token - url (Generates urls from uri or user input. - Tokens are accepted. Useful for linkfield uris?) + Tokens are accepted. Useful for link field uris?) REQUIREMENTS ------------ diff --git a/composer.json b/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..25f514082af35cba4542200abba19edc33c0ac0f --- /dev/null +++ b/composer.json @@ -0,0 +1,12 @@ +{ + "name": "drupal/ui_patterns_settings", + "description": "Configure patterns with settings.", + "type": "drupal-module", + "require": { + "drupal/ui_patterns": "^1" + }, + "require-dev": { + "drupal/ds": "^3", + "drupal/token": "^1" + } +} diff --git a/js/ui_pattern_settings.toggle_token.js b/js/ui_pattern_settings.toggle_token.js index 2bd98be9d5bbd7bceb47244fdf753776e0b94ede..2efcc53bfe4ca21648494c5a10169be30ccbc180 100644 --- a/js/ui_pattern_settings.toggle_token.js +++ b/js/ui_pattern_settings.toggle_token.js @@ -4,9 +4,6 @@ */ (function ($, Drupal, drupalSettings, DrupalCoffee) { - - 'use strict'; - /** * Attaches ui patterns settings module behaviors. * @@ -15,23 +12,37 @@ * @type {Drupal~behavior} * * @prop {Drupal~behaviorAttach} attach - * Attach ui patterns settings toggle functionality to the page. + * 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(); - })); + attach() { + 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>'); + once( + 'ui-patterns-settings-wrapper', + '.js-ui-patterns-settings__wrapper', + ).forEach(function (el) { + const wrapper = $(el); + const toggler = $( + '<div class="js-ui-patterns-settings__toggler" title="Use token"></div>', + ); $(toggler).click(function () { - var tokenInput = $('.js-ui-patterns-settings__token', wrapper); + const 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(''); @@ -41,9 +52,11 @@ 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)) + $('.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/src/Annotation/UiPatternsSettingDataProvider.php b/src/Annotation/UiPatternsSettingDataProvider.php index 12f921974c202629aacf8672b475892b389bb6b0..0bc316265e8e1e852fe4692e5a421f5bee81aae2 100644 --- a/src/Annotation/UiPatternsSettingDataProvider.php +++ b/src/Annotation/UiPatternsSettingDataProvider.php @@ -42,4 +42,5 @@ class UiPatternsSettingDataProvider extends Plugin { * @var string */ public $settingType; + } diff --git a/src/Definition/PatternDefinitionSetting.php b/src/Definition/PatternDefinitionSetting.php index a458a08aa0e4a8aaed33f1842f68456904aa084c..18758ed7c0496e17ae726844145ff1cbcb97bb11 100644 --- a/src/Definition/PatternDefinitionSetting.php +++ b/src/Definition/PatternDefinitionSetting.php @@ -71,7 +71,8 @@ class PatternDefinitionSetting implements \ArrayAccess { $processed_options[$option_key] = $option_value; } } - } else { + } + else { $processed_options = NULL; } $this->definition['options'] = $processed_options; @@ -87,7 +88,7 @@ class PatternDefinitionSetting implements \ArrayAccess { /** * Overwrite setting definition. * - * @param $definitions + * @param array $definitions * The overwritten definitions. */ public function setDefinitions($definitions) { @@ -328,6 +329,7 @@ class PatternDefinitionSetting implements \ArrayAccess { $this->definition['form_visible'] = $visible; return $this; } + /** * Get Type property. * @@ -341,7 +343,7 @@ class PatternDefinitionSetting implements \ArrayAccess { /** * Set Expose property. * - * @param string $type + * @param string $expose_as_field * Property value. * * @return $this diff --git a/src/Element/PatternSettings.php b/src/Element/PatternSettings.php index 55d67c6e5ea83e04a7c74caa2ed21ae469adaa1e..65375b93f856aed30008b06a348bb23d96b56120 100644 --- a/src/Element/PatternSettings.php +++ b/src/Element/PatternSettings.php @@ -121,9 +121,11 @@ class PatternSettings implements TrustedCallbackInterface { } 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) + } + 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; diff --git a/src/Form/SettingsFormBuilder.php b/src/Form/SettingsFormBuilder.php index 942bb3cbb1fa7f2788c7369cf8997386ac70f40a..fa8dd14a7ff0b28e820d85273a4e066891b72cf4 100644 --- a/src/Form/SettingsFormBuilder.php +++ b/src/Form/SettingsFormBuilder.php @@ -5,11 +5,8 @@ namespace Drupal\ui_patterns_settings\Form; use Drupal\Component\Utility\NestedArray; use Drupal\Core\Entity\ContentEntityType; use Drupal\Core\Form\FormState; -use Drupal\Core\Render\Element; -use Drupal\Core\Render\Element\Form; use Drupal\ui_patterns\Definition\PatternDefinition; use Drupal\ui_patterns\UiPatterns; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; use Drupal\ui_patterns_settings\UiPatternsSettings; use Drupal\ui_patterns_settings\UiPatternsSettingsManager; @@ -31,7 +28,7 @@ class SettingsFormBuilder { private static function buildTokenLink(array &$form) { // Detecting current entity type. - // We don't have access to + // We don't have access to. $request = \Drupal::request(); $entity_type_id = $request->attributes->get('entity_type_id'); if (empty($entity_type_id)) { @@ -44,10 +41,11 @@ class SettingsFormBuilder { if (!empty($entity_type_id)) { $content_entity_types[] = $entity_type_id; - } else { - $entity_type_definations = \Drupal::entityTypeManager()->getDefinitions(); + } + else { + $entity_type_definitions = \Drupal::entityTypeManager()->getDefinitions(); /** @var EntityTypeInterface $definition */ - foreach ($entity_type_definations as $definition) { + foreach ($entity_type_definitions as $definition) { if ($definition instanceof ContentEntityType) { $content_entity_types[] = $definition->id(); } @@ -84,7 +82,7 @@ class SettingsFormBuilder { $form['#attached']['library'][] = 'ui_patterns_settings/widget'; if (UiPatternsSettingsManager::allowVariantToken($definition)) { - $variant_token_value = isset($configuration['pattern']['variant_token']) ? $configuration['pattern']['variant_token'] : NULL; + $variant_token_value = $configuration['pattern']['variant_token'] ?? NULL; $form['variant_token'] = [ '#type' => 'textfield', '#title' => 'Variant token', @@ -212,7 +210,7 @@ class SettingsFormBuilder { /** * Build settings form. * - * @param string $select_selector + * @param string $variant_selector * The id of the variant select field. * @param array $fieldset * The fieldset. @@ -221,23 +219,23 @@ class SettingsFormBuilder { */ private static function buildStatesForm($variant_selector, array &$fieldset, PatternDefinition $definition) { $settings = UiPatternsSettings::getPatternDefinitionSettings($definition); - /** @var PatternDefinitionSetting $setting */ + /** @var \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $setting */ foreach ($settings as $setting_name => $setting) { $states = $setting->getStates(); if (!is_null($states) && count($states) !== 0) { - foreach ($states as $visibilty => $conditions) { + foreach ($states as $visibility => $conditions) { foreach ($conditions as $state) { if (isset($state['variant'])) { - $fieldset[$setting_name]['#states'][$visibilty][][$variant_selector]['value'] = $state['variant']; + $fieldset[$setting_name]['#states'][$visibility][][$variant_selector]['value'] = $state['variant']; if (isset($fieldset[$setting_name . '_token'])) { - $fieldset[$setting_name . '_token']['#states'][$visibilty][][$variant_selector]['value'] = $state['variant']; + $fieldset[$setting_name . '_token']['#states'][$visibility][][$variant_selector]['value'] = $state['variant']; } } if (isset($state['setting'])) { $setting_select = '.js-ui-patterns-settings-' . $state['setting']; - $fieldset[$setting_name]['#states'][$visibilty][][$setting_select]['value'] = $state['value']; + $fieldset[$setting_name]['#states'][$visibility][][$setting_select]['value'] = $state['value']; if (isset($fieldset[$setting_name . '_token'])) { - $fieldset[$setting_name . '_token']['#states'][$visibilty][][$setting_select]['value'] = $state['value']; + $fieldset[$setting_name . '_token']['#states'][$visibility][][$setting_select]['value'] = $state['value']; } } } @@ -246,7 +244,7 @@ class SettingsFormBuilder { } } - /** + /** * Hide all settings which are configured by the variant. * * @param string $select_selector diff --git a/src/Plugin/ComplexSettingTypeBase.php b/src/Plugin/ComplexSettingTypeBase.php index ead5ac24abeba09214f6d6f9a7c4775e74123b7a..7094370fbcb0b07b4b8cd293f56bdb1ac7c6d357 100644 --- a/src/Plugin/ComplexSettingTypeBase.php +++ b/src/Plugin/ComplexSettingTypeBase.php @@ -53,13 +53,13 @@ abstract class ComplexSettingTypeBase extends PatternSettingTypeBase implements '#title' => $def->getLabel(), ]; - $provider_select_id = $def->getName(). '_provider'; + $provider_select_id = $def->getName() . '_provider'; $form[$def->getName()]['provider'] = [ '#type' => 'select', - '#title' => $this->t('Dataprovider'), + '#title' => $this->t('Data provider'), '#default_value' => $this->getValue($value['provider'] ?? NULL), '#options' => $provider_options, - '#attributes'=> ['id' => $provider_select_id] + '#attributes' => ['id' => $provider_select_id], ]; $form[$def->getName()]['configuration'] = []; @@ -68,7 +68,8 @@ abstract class ComplexSettingTypeBase extends PatternSettingTypeBase implements $data_provider_id = $data_provider_definition['id']; $provider_settings_form = $provider_plugins[$data_provider_id]->settingsForm($value['configuration'][$data_provider_id]['config'] ?? []); if ($provider_settings_form) { - $form[$def->getName()]['configuration'][$data_provider_id] = ['#type' => 'container', + $form[$def->getName()]['configuration'][$data_provider_id] = [ + '#type' => 'container', '#states' => [ 'visible' => [ 'select[id="' . $provider_select_id . '"]' => ['value' => $data_provider_id], @@ -87,7 +88,7 @@ abstract class ComplexSettingTypeBase extends PatternSettingTypeBase implements public function settingsPreprocess( $value, array $context, - PatternDefinitionSetting $def + PatternDefinitionSetting $def, ) { $provider_id = $value['provider'] ?? NULL; if ($provider_id) { diff --git a/src/Plugin/EnumerationSettingTypeBase.php b/src/Plugin/EnumerationSettingTypeBase.php index b466d0ea373dfe4243053bc6bbc14f0963e37bcf..72cfd6dea52e177e5cba4447285dfb61d61942cc 100644 --- a/src/Plugin/EnumerationSettingTypeBase.php +++ b/src/Plugin/EnumerationSettingTypeBase.php @@ -51,7 +51,7 @@ abstract class EnumerationSettingTypeBase extends PatternSettingTypeBase { * Returns the enumeration options. * * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def - * The pattern definition. + * The pattern definition. * * @return mixed * The options. diff --git a/src/Plugin/LanguageCheckboxesSettingTypeBase.php b/src/Plugin/LanguageCheckboxesSettingTypeBase.php index faaf95176af94f512fb586f86e07140b906cf41d..64cdff9e3a2f7815b90539314f5f634d19382f24 100644 --- a/src/Plugin/LanguageCheckboxesSettingTypeBase.php +++ b/src/Plugin/LanguageCheckboxesSettingTypeBase.php @@ -101,8 +101,8 @@ class LanguageCheckboxesSettingTypeBase extends EnumerationSettingTypeBase { public static function create( ContainerInterface $container, array $configuration, - $plugin_id, - $plugin_definition + $plugin_id, + $plugin_definition, ) { $plugin = parent::create($container, $configuration, $plugin_id, $plugin_definition); $plugin->languageManager = $container->get('language_manager'); diff --git a/src/Plugin/PatternSettingDataProviderBase.php b/src/Plugin/PatternSettingDataProviderBase.php index e66903ecd58a44e90854f8d8e4f68f171684d51a..3c93456f743b278764f75c0695820162b1b7ee9a 100644 --- a/src/Plugin/PatternSettingDataProviderBase.php +++ b/src/Plugin/PatternSettingDataProviderBase.php @@ -39,7 +39,7 @@ abstract class PatternSettingDataProviderBase extends PluginBase implements Patt $plugin_id, array $plugin_definition, ModuleHandlerInterface $module_handler, - EntityTypeManagerInterface $entity_type_manager + EntityTypeManagerInterface $entity_type_manager, ) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->entityTypeManager = $entity_type_manager; @@ -47,13 +47,13 @@ abstract class PatternSettingDataProviderBase extends PluginBase implements Patt } /** - * + * {@inheritdoc} */ public static function create( ContainerInterface $container, array $configuration, $plugin_id, - $plugin_definition + $plugin_definition, ) { $plugin = new static( $configuration, diff --git a/src/Plugin/PatternSettingDataProviderInterface.php b/src/Plugin/PatternSettingDataProviderInterface.php index 10c20e54a075e61aba7008c7fc5e8187bf1e224c..bc9e35fe95681b4331c2d09ca08d7eed3a07c989 100644 --- a/src/Plugin/PatternSettingDataProviderInterface.php +++ b/src/Plugin/PatternSettingDataProviderInterface.php @@ -26,6 +26,8 @@ interface PatternSettingDataProviderInterface { public function settingsForm($value); /** + * Return the data. + * * @return array * The provided data. */ diff --git a/src/Plugin/PatternSettingTypeBase.php b/src/Plugin/PatternSettingTypeBase.php index 85e96f8927ef9be5293bb34e4064ac927b4cc0f5..7d1dad2db02d2756e9c1893d0af9310b889aaa25 100644 --- a/src/Plugin/PatternSettingTypeBase.php +++ b/src/Plugin/PatternSettingTypeBase.php @@ -17,9 +17,9 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * Base class for UI Patterns Setting plugins. */ abstract class PatternSettingTypeBase extends PluginBase implements - ConfigurableInterface, - PatternSettingTypeInterface, - ContainerFactoryPluginInterface { + ConfigurableInterface, + PatternSettingTypeInterface, + ContainerFactoryPluginInterface { /** * Returns a list of plugin dependencies. @@ -74,7 +74,7 @@ abstract class PatternSettingTypeBase extends PluginBase implements $plugin_id, array $plugin_definition, ModuleHandlerInterface $module_handler, - EntityTypeManagerInterface $entity_type_manager + EntityTypeManagerInterface $entity_type_manager, ) { $configuration += $this->defaultConfiguration(); $this->patternSettingDefinition = $configuration['pattern_setting_definition']; @@ -121,7 +121,7 @@ abstract class PatternSettingTypeBase extends PluginBase implements ContainerInterface $container, array $configuration, $plugin_id, - $plugin_definition + $plugin_definition, ) { $plugin = new static( $configuration, @@ -223,7 +223,7 @@ abstract class PatternSettingTypeBase extends PluginBase implements public function settingsPreprocess( $value, array $context, - PatternDefinitionSetting $def + PatternDefinitionSetting $def, ) { return $value; } @@ -244,7 +244,7 @@ abstract class PatternSettingTypeBase extends PluginBase implements protected function tokenForm( array $form, $value, - PatternDefinitionSetting $def + PatternDefinitionSetting $def, ) { $form[$def->getName() . "_token"] = [ '#type' => 'textfield', @@ -274,7 +274,7 @@ abstract class PatternSettingTypeBase extends PluginBase implements public static function validateLayout( array $element, FormStateInterface &$form_state, - array &$form + array &$form, ) { $parents = $element['#parents']; $value = $form_state->getValue($parents); @@ -324,7 +324,7 @@ abstract class PatternSettingTypeBase extends PluginBase implements protected function handleInput( array &$input, PatternDefinitionSetting $def, - $form_type + $form_type, ) { $input['#attributes']['class'][] = 'js-ui-patterns-settings__input js-ui-patterns-settings-' . $def->getName(); $input['#wrapper_attributes']['class'][] = 'js-ui-patterns-settings__input-wrapper'; @@ -354,7 +354,7 @@ abstract class PatternSettingTypeBase extends PluginBase implements array $form, $value, $token_value, - $form_type + $form_type, ) { $dependencies = $this->getSettingTypeDependencies(); $def = $this->getPatternSettingDefinition(); @@ -406,8 +406,8 @@ abstract class PatternSettingTypeBase extends PluginBase implements */ public static function formGroupProcess( array &$element, - FormStateInterface $form_state = NULL, - &$form = [] + ?FormStateInterface $form_state = NULL, + &$form = [], ) { if (isset($element['#pattern_setting_definition'])) { $setting_definition = $element['#pattern_setting_definition']; diff --git a/src/Plugin/PatternSettingTypeInterface.php b/src/Plugin/PatternSettingTypeInterface.php index 49bf7c3b21967e57adb9abef3d5a8eda912b2ad2..93ec16100d07049098b306e48a5f1fcd18d8e677 100644 --- a/src/Plugin/PatternSettingTypeInterface.php +++ b/src/Plugin/PatternSettingTypeInterface.php @@ -35,7 +35,7 @@ interface PatternSettingTypeInterface extends ConfigurableInterface { * @param string $value * The stored value. * @param array $context - * Context informations. + * Context information. * Keys: * - entity. * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def @@ -52,7 +52,7 @@ interface PatternSettingTypeInterface extends ConfigurableInterface { * @param string $value * The stored value. * @param array $context - * Context informations. + * Context information. * * @return mixed * The processed value. diff --git a/src/Plugin/RoleCheckboxesSettingTypeBase.php b/src/Plugin/RoleCheckboxesSettingTypeBase.php index da13e4422d66c5090ea6b5378ca114339f177682..58dc7601d23a95c03a219de60db40aa1e437fa99 100644 --- a/src/Plugin/RoleCheckboxesSettingTypeBase.php +++ b/src/Plugin/RoleCheckboxesSettingTypeBase.php @@ -42,9 +42,8 @@ class RoleCheckboxesSettingTypeBase extends EnumerationSettingTypeBase { if ($value === NULL) { return !is_array($this->getPatternSettingDefinition() ->getDefaultValue()) ? [ - $this->getPatternSettingDefinition() - ->getDefaultValue(), - ] : $this->getPatternSettingDefinition()->getDefaultValue(); + $this->getPatternSettingDefinition()->getDefaultValue(), + ] : $this->getPatternSettingDefinition()->getDefaultValue(); } else { return $value ?? ""; diff --git a/src/Plugin/TokenSettingTypeBase.php b/src/Plugin/TokenSettingTypeBase.php index 4913ee36797fbf2792091eeec1bee33de361f323..85c56bc2bb643097f5b1c9de4d63d7f49f6edc4b 100644 --- a/src/Plugin/TokenSettingTypeBase.php +++ b/src/Plugin/TokenSettingTypeBase.php @@ -106,6 +106,7 @@ abstract class TokenSettingTypeBase extends PatternSettingTypeBase implements Co */ public function getTokenService() { if (!$this->tokenService) { + // @phpstan-ignore-next-line $this->tokenService = \Drupal::token(); } diff --git a/src/Plugin/UiPatterns/SettingDataProvider/BreadcrumbDataProvider.php b/src/Plugin/UiPatterns/SettingDataProvider/BreadcrumbDataProvider.php index 5210f649a59600a995b6d333c010692e3829b904..21eb661c6e210d6afa732233eed81f69aa746b74 100644 --- a/src/Plugin/UiPatterns/SettingDataProvider/BreadcrumbDataProvider.php +++ b/src/Plugin/UiPatterns/SettingDataProvider/BreadcrumbDataProvider.php @@ -34,13 +34,13 @@ class BreadcrumbDataProvider extends PatternSettingDataProviderBase implements P protected $breadcrumbManager; /** - * + * {@inheritdoc} */ public static function create( ContainerInterface $container, array $configuration, - $plugin_id, - $plugin_definition + $plugin_id, + $plugin_definition, ) { $plugin = new static( $configuration, diff --git a/src/Plugin/UiPatterns/SettingDataProvider/MenuDataProvider.php b/src/Plugin/UiPatterns/SettingDataProvider/MenuDataProvider.php index 304ae35d49a34eea8322bf2a68841e2ea5a33650..7e384869c54289f198df4e2e15a9434e668cce67 100644 --- a/src/Plugin/UiPatterns/SettingDataProvider/MenuDataProvider.php +++ b/src/Plugin/UiPatterns/SettingDataProvider/MenuDataProvider.php @@ -43,13 +43,13 @@ class MenuDataProvider extends PatternSettingDataProviderBase implements Pattern protected $menuId; /** - * + * {@inheritdoc} */ public static function create( ContainerInterface $container, array $configuration, - $plugin_id, - $plugin_definition + $plugin_id, + $plugin_definition, ) { $plugin = new static( $configuration, diff --git a/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php b/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php index c1b8a2d502771e2160402d9ed413e79b21102efd..ad45ac9ae0d3b5916796d729c38b01a7c3b08a60 100644 --- a/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php +++ b/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php @@ -3,7 +3,6 @@ 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; /** @@ -29,13 +28,14 @@ class ColorisWidgetSettingType extends PatternSettingTypeBase { public function settingsPreprocess( $value, array $context, - PatternDefinitionSetting $def + PatternDefinitionSetting $def, ) { if (is_string($value) && !empty($value)) { return $value; } return $value['coloris'] ?? ''; } + /** * {@inheritdoc} */ @@ -47,7 +47,7 @@ class ColorisWidgetSettingType extends PatternSettingTypeBase { '#title' => $def->getLabel(), '#description' => $def->getDescription(), '#default_value' => $this->getValue($value), - '#swatches' => $swatches + '#swatches' => $swatches, ]; $this->handleInput($form[$def->getName()], $def, $form_type); diff --git a/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php b/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php index 560c2b629f32cd17709c678c1336caaaf6a7700d..b24a39b51f1f3417d038e7aea6d5f54dd600086d 100644 --- a/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php +++ b/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php @@ -2,11 +2,7 @@ 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. diff --git a/src/Plugin/UiPatterns/SettingType/LinksSettingType.php b/src/Plugin/UiPatterns/SettingType/LinksSettingType.php index 75569fdaadf316c76db6f04b2cd72a26c8662354..22edcb8337ea6980ebdeb23999d3aa3c91a481b7 100644 --- a/src/Plugin/UiPatterns/SettingType/LinksSettingType.php +++ b/src/Plugin/UiPatterns/SettingType/LinksSettingType.php @@ -28,6 +28,7 @@ class LinksSettingType extends ComplexSettingTypeBase { * The items to convert. * * @return array + * Normalized menu items. */ public static function normalize(array $items): array { foreach ($items as $index => $item) { @@ -68,7 +69,7 @@ class LinksSettingType extends ComplexSettingTypeBase { } /** - * Normaize URL in an item. + * Normalize URL in an item. * * Useful for: menu.html.twig, links.html.twig. */ diff --git a/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php b/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php index 680d5b3245d9051de44cf7e7d07568c3a0485ec0..9a79c17d8c739dc1182608339e2a683517daf0ab 100644 --- a/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php +++ b/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php @@ -2,11 +2,8 @@ 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; @@ -81,6 +78,9 @@ class MediaLibrarySettingType extends PatternSettingTypeBase { return ['entity_reference']; } + /** + * {@inheritdoc} + */ public function preprocessExposedField(FieldItemList $items) { foreach ($items as $item) { if ($item->entity !== NULL) { diff --git a/src/Plugin/UiPatterns/SettingType/ValueSettingType.php b/src/Plugin/UiPatterns/SettingType/ValueSettingType.php index eb5ca41ed0c5572b72ab7305270ddc131cb1a447..e1a5f9b536ba12d816a7f9a8547e98d5d29c1271 100644 --- a/src/Plugin/UiPatterns/SettingType/ValueSettingType.php +++ b/src/Plugin/UiPatterns/SettingType/ValueSettingType.php @@ -20,13 +20,16 @@ class ValueSettingType extends PatternSettingTypeBase { */ public function buildConfigurationForm( array $form, - $value, - $token_value, - $form_type + $value, + $token_value, + $form_type, ) { return []; } + /** + * {@inheritdoc} + */ public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) { return []; } diff --git a/src/Plugin/UiPatterns/Source/SettingFieldSource.php b/src/Plugin/UiPatterns/Source/SettingFieldSource.php index 239b69ce1325a62ff6d6436d27a9533450c852bc..6cc709cb23e3b71fba21a57a41713f7771f4865d 100644 --- a/src/Plugin/UiPatterns/Source/SettingFieldSource.php +++ b/src/Plugin/UiPatterns/Source/SettingFieldSource.php @@ -11,7 +11,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * * @UiPatternsSource( * id = "settings_field", - * label = @Translation("Seting Fields (UI Pattern settings)"), + * label = @Translation("Setting Fields (UI Pattern settings)"), * provider = "ui_patterns_settings", * tags = { * "field_properties" diff --git a/src/UiPatternsSettings.php b/src/UiPatternsSettings.php index dad1efe3213f72b9e2376fd139e57dae91148de2..7842a33801998fe606a8b3fa7e2f481a4876a372 100644 --- a/src/UiPatternsSettings.php +++ b/src/UiPatternsSettings.php @@ -86,11 +86,13 @@ class UiPatternsSettings { * Is preview. * @param \Drupal\Core\Entity\EntityInterface $entity * The entity of the pattern. Useful for dynamic settings. + * @param array $element + * The element. * * @return array * The processed settings. */ - public static function preprocess($pattern_id, array $settings, $variant, $preview, EntityInterface $entity = NULL, &$element = NULL) { + public static function preprocess($pattern_id, array $settings, $variant, $preview, ?EntityInterface $entity = NULL, &$element = NULL) { $processed_settings = []; $definition = UiPatterns::getPatternDefinition($pattern_id); $context = []; @@ -120,7 +122,7 @@ class UiPatternsSettings { // Do nothing inside layout builder. } } - // Use exposed field value if no other setting is provided + // Use exposed field value if no other setting is provided. elseif (isset($processed_settings[$key]) && empty($settings[$key])) { $value = $processed_settings[$key]; } @@ -146,7 +148,8 @@ class UiPatternsSettings { $setting_definition = clone $setting_definition; $setting_definition->setDefinitions($variant_ary['settings'][$key]['definition']); } - } else { + } + else { $value = $variant_ary['settings'][$key]; } } @@ -223,7 +226,8 @@ class UiPatternsSettings { public static function getPatternConfiguration(PatternDefinition $definition, $variant = NULL, $name = NULL) { $additional = $definition->getAdditional(); $configuration = $additional['configuration'] ?? []; - // Check for variant configuration + + // Check for variant configuration. if (!empty($variant)) { $variant_ob = $definition->getVariant($variant); if ($variant_ob != NULL) { @@ -233,7 +237,8 @@ class UiPatternsSettings { } } } - // Check for settings 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'])) { @@ -267,7 +272,7 @@ class UiPatternsSettings { * The definition. * * @return \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting[] - * Setting pattern definitons. + * Setting pattern definitions. */ public static function getPatternDefinitionSettings(PatternDefinition $definition) { if (isset(self::$settings[$definition->id()])) { @@ -290,18 +295,18 @@ class UiPatternsSettings { * * @param \Drupal\ui_patterns\Definition\PatternDefinition $pattern_definition * The pattern definition. - * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $setting_defintion + * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $setting_definition * The setting definition. * * @return \Drupal\ui_patterns_settings\Plugin\PatternSettingTypeInterface * UI Patterns setting manager instance. */ - public static function createSettingType(PatternDefinition $pattern_definition, PatternDefinitionSetting $setting_defintion) { + public static function createSettingType(PatternDefinition $pattern_definition, PatternDefinitionSetting $setting_definition) { $configuration = []; - $configuration['pattern_setting_definition'] = $setting_defintion; + $configuration['pattern_setting_definition'] = $setting_definition; $configuration['pattern_definition'] = $pattern_definition; return \Drupal::service('plugin.manager.ui_patterns_settings') - ->createInstance($setting_defintion->getType(), $configuration); + ->createInstance($setting_definition->getType(), $configuration); } } diff --git a/src/UiPatternsSettingsDataProviderManager.php b/src/UiPatternsSettingsDataProviderManager.php index cf98a28cdf1f1dc375041cd8f87ed9e22d1ac4ee..a24c9d3d520d23bdb8be409e4aaf9bf93fb6d4e4 100644 --- a/src/UiPatternsSettingsDataProviderManager.php +++ b/src/UiPatternsSettingsDataProviderManager.php @@ -34,6 +34,15 @@ class UiPatternsSettingsDataProviderManager extends DefaultPluginManager { $this->setCacheBackend($cache_backend, 'ui_patterns_settings_data_provider_plugins'); } + /** + * Get definitions by setting type. + * + * @param string $setting_type_id + * Settings type id. + * + * @return array + * The definitions. + */ public function getDefinitionsBySettingType($setting_type_id) { $definitions = $this->getDefinitions(); $results = []; diff --git a/src/UiPatternsSettingsManager.php b/src/UiPatternsSettingsManager.php index eb53b91c16118e0cfe1c8eab349812b783ed7810..db6b3eac40f3c2ec4952c294f2688994b9e0668d 100644 --- a/src/UiPatternsSettingsManager.php +++ b/src/UiPatternsSettingsManager.php @@ -54,6 +54,7 @@ class UiPatternsSettingsManager extends DefaultPluginManager implements PluginMa $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')) { + // @phpstan-ignore-next-line $plugin = $plugin_class::create(\Drupal::getContainer(), $configuration, $plugin_id, $plugin_definition); } else { diff --git a/tests/modules/ui_patterns_settings_data_provider/src/Plugin/UiPatterns/SettingType/SampleComplexSettingType.php b/tests/modules/ui_patterns_settings_data_provider/src/Plugin/UiPatterns/SettingType/SampleComplexSettingType.php index 3912a2ec954a5a3b7254e1dd4fd3f39dc9a2e5e2..2619c1c83431e635fc0cb3bf258ffe8645d7eea9 100644 --- a/tests/modules/ui_patterns_settings_data_provider/src/Plugin/UiPatterns/SettingType/SampleComplexSettingType.php +++ b/tests/modules/ui_patterns_settings_data_provider/src/Plugin/UiPatterns/SettingType/SampleComplexSettingType.php @@ -3,7 +3,6 @@ namespace Drupal\ui_patterns_settings_data_provider\Plugin\UIPatterns\SettingType; use Drupal\ui_patterns_settings\Plugin\ComplexSettingTypeBase; -use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; /** * Complex Setting Type. @@ -15,5 +14,4 @@ use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting; */ class SampleComplexSettingType extends ComplexSettingTypeBase { - } diff --git a/tests/src/Kernel/ComplexSettingTypeTest.php b/tests/src/Kernel/ComplexSettingTypeTest.php index cdaa1a1bdfd5d9c53caecabcce7bf6e5d4ef331e..b8a9e8d1e058faad45a51955025c0fc87762038d 100644 --- a/tests/src/Kernel/ComplexSettingTypeTest.php +++ b/tests/src/Kernel/ComplexSettingTypeTest.php @@ -23,13 +23,11 @@ class ComplexSettingTypeTest extends KernelTestBase { ]; /** - * {@inheritdoc} + * Get setting type. + * + * @return \Drupal\ui_patterns_settings\Plugin\PatternSettingTypeInterface + * The settings type. */ - protected function setUp(): void { - parent::setUp(); - // Mock required services here. - } - private function getTestSettingType() { /** @var \Drupal\ui_patterns_settings_data_provider\Plugin\UIPatterns\SettingType\SampleComplexSettingType $sample_complex_setting_type */ $definition = new PatternDefinition([ @@ -42,6 +40,12 @@ class ComplexSettingTypeTest extends KernelTestBase { return UiPatternsSettings::createSettingType($definition, $this->getTestSettingDefinition()); } + /** + * Get setting definition. + * + * @return \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting + * The settings. + */ private function getTestSettingDefinition() { return new PatternDefinitionSetting('sample_complex_setting_type', [ 'name' => 'sample_complex_setting_type', @@ -51,22 +55,26 @@ class ComplexSettingTypeTest extends KernelTestBase { } /** - * Test testSettingsForm. + * Test settings form. */ public function testSettingsForm() { $sample_definition = $this->getTestSettingDefinition(); $sample_complex_setting_type = $this->getTestSettingType(); - $fieldset = $sample_complex_setting_type->settingsForm([], '', $sample_definition, 'layout'); + $fieldset = $sample_complex_setting_type->settingsForm([], '', $sample_definition, 'layout'); self::assertArrayHasKey('sample_complex_setting_type', $fieldset); self::assertArrayHasKey('provider', $fieldset['sample_complex_setting_type']); self::assertArrayHasKey('foo', $fieldset['sample_complex_setting_type']['configuration']); self::assertArrayHasKey('#type', $fieldset['sample_complex_setting_type']['configuration']['foo']['config']); } + /** + * Test preprocess. + */ public function testPreprocess() { $sample_complex_setting_type = $this->getTestSettingType(); $context = []; $ary = $sample_complex_setting_type->preprocess(['provider' => 'foo'], $context); self::assertArrayHasKey('data', $ary); } + } diff --git a/ui_patterns_settings.api.php b/ui_patterns_settings.api.php index 1e09880f20623cced28cc3c45826bd1cd975c5e7..7210dae476d69a3a8c20141fcbcedf121168dfdb 100644 --- a/ui_patterns_settings.api.php +++ b/ui_patterns_settings.api.php @@ -18,7 +18,7 @@ * keys: * - #pattern_id: The pattern id. * - #variant: The variant id. - * - #context: The pattern context + * - #context: The pattern context. * * @see \Drupal\ui_patterns_settings\Element\PatternSettings */ @@ -34,14 +34,14 @@ function hook_ui_pattern_settings_settings_alter(array &$settings, array $contex * Implement this hook to override the configured pattern variant for * specific patterns or to configure custom variant logic. * - * @param $variant + * @param string $variant * Pattern variant. * @param array $context * Context Properties: The context and the entity of the pattern. * keys: * - #pattern_id: The pattern id. * - #variant: The variant id. - * - #context: The pattern context + * - #context: The pattern context. * * @see \Drupal\ui_patterns_settings\Element\PatternSettings */ diff --git a/ui_patterns_settings.module b/ui_patterns_settings.module index e651a8ffab9d366797abe8643dff8caec64d8c38..35b2ad74735572e977b730a8b8776a4912c7f515 100644 --- a/ui_patterns_settings.module +++ b/ui_patterns_settings.module @@ -27,6 +27,15 @@ function ui_patterns_settings_ui_patterns_layouts_display_settings_form_alter(&$ SettingsFormBuilder::layoutForm($form, $definition, $configuration); } +/** + * Build media edit button. + * + * @param string $media_id + * The media id. + * + * @return array + * The button array. + */ 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'); @@ -48,10 +57,10 @@ function ui_patterns_settings_build_media_edit_button($media_id) { ], 'target' => '_blank', 'data-dialog-options' => json_encode([ - 'height' => $dialog_options['height'], - 'width' => $dialog_options['width'], - 'classes' => ['ui-dialog-content' => 'media-library-edit__modal'], - ]), + 'height' => $dialog_options['height'], + 'width' => $dialog_options['width'], + 'classes' => ['ui-dialog-content' => 'media-library-edit__modal'], + ]), 'data-dialog-type' => 'dialog', ], '#attached' => [ @@ -63,6 +72,7 @@ function ui_patterns_settings_build_media_edit_button($media_id) { ]; } + /** * Implements hook_preprocess_media_library_element(). */ @@ -73,8 +83,8 @@ function ui_patterns_settings_preprocess_media_library_element(&$variables) { $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) { + // 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); @@ -149,8 +159,7 @@ function ui_patterns_settings_entity_field_storage_info_alter(&$fields, EntityTy /** @var \Drupal\field\Entity\FieldStorageConfig $field */ foreach ($fields as $field) { if ($field instanceof FieldStorageConfig) { - if (($mapping = UiPatternsSettings::getConfigManager() - ->getMapping($field->id())) !== NULL) { + if (($mapping = UiPatternsSettings::getConfigManager()->getMapping($field->id())) !== NULL) { [$pattern_id, $setting_id] = explode('::', $mapping); try { $pattern_definition = UiPatterns::getPatternDefinition($pattern_id); @@ -167,7 +176,8 @@ function ui_patterns_settings_entity_field_storage_info_alter(&$fields, EntityTy else { \Drupal::messenger()->addError('No pattern setting %setting found'); } - } catch (\Exception $e) { + } + catch (\Exception $e) { \Drupal::messenger()->addError($e->getMessage()); } } @@ -325,7 +335,7 @@ function ui_patterns_settings_layout_alter(&$definitions) { * Implements hook_ui_patterns_info_alter(). */ function ui_patterns_settings_ui_patterns_info_alter(&$definitions) { - /** @var PatternDefinition $definition */ + /** @var \Drupal\ui_patterns\Definition\PatternDefinition $definition */ foreach ($definitions as $definition) { $settings = UiPatternsSettings::getPatternDefinitionSettings($definition); foreach ($settings as $setting) {