google_tag-8.x-1.x-dev/src/Plugin/GoogleTag/Event/ConfigurableEventBase.php
src/Plugin/GoogleTag/Event/ConfigurableEventBase.php
<?php namespace Drupal\google_tag\Plugin\GoogleTag\Event; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Plugin\PluginFormInterface; use Drupal\Core\Utility\Token; /** * Base class for event plugins that have tokenized configuration forms. */ abstract class ConfigurableEventBase extends EventBase implements PluginFormInterface { /** * Token service. * * @var \Drupal\Core\Utility\Token */ protected Token $token; /** * Module handler. * * @var \Drupal\Core\Extension\ModuleHandlerInterface */ protected ModuleHandlerInterface $moduleHandler; /** * {@inheritDoc} */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form['#process'][] = [$this, 'processToken']; return $form; } /** * {@inheritDoc} */ public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { } /** * Process callback for adding token validators and token tree to form. * * @param array $form * Form render array. * * @return array * Updated form render array. */ public function processToken(array $form): array { if ($this->getTokenElements() !== [] && $this->moduleHandler->moduleExists('token')) { foreach ($this->getTokenElements() as $element) { $form[$element]['#element_validate'] = [ 'token_element_validate', ]; } $form['token_tree'] = [ '#theme' => 'token_tree_link', '#token_types' => ['node'], '#weight' => 100, ]; } return $form; } /** * Returns elements on which token is to be applied. * * @return string[] * Token elements array. */ abstract protected function getTokenElements(): array; /** * {@inheritDoc} */ public function getData(): array { $data = []; foreach (array_filter($this->configuration) as $key => $value) { $data[$key] = $this->token->replace($value, [], ['clear' => TRUE]); } return $data; } /** * Sets token service dynamically to the event object. * * @param \Drupal\Core\Utility\Token $token * Token service. */ public function setToken(Token $token): void { $this->token = $token; } /** * Sets module handler. * * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler * Module handler service. */ public function setModuleHandler(ModuleHandlerInterface $module_handler): void { $this->moduleHandler = $module_handler; } }