Skip to content
Snippets Groups Projects
Select Git revision
  • 961f18888112b081e9e3263a18e2a44b704966d2
  • 11.x default protected
  • 11.2.x protected
  • 10.5.x protected
  • 10.6.x protected
  • 11.1.x protected
  • 10.4.x protected
  • 11.0.x protected
  • 10.3.x protected
  • 7.x protected
  • 10.2.x protected
  • 10.1.x protected
  • 9.5.x protected
  • 10.0.x protected
  • 9.4.x protected
  • 9.3.x protected
  • 9.2.x protected
  • 9.1.x protected
  • 8.9.x protected
  • 9.0.x protected
  • 8.8.x protected
  • 10.5.1 protected
  • 11.2.2 protected
  • 11.2.1 protected
  • 11.2.0 protected
  • 10.5.0 protected
  • 11.2.0-rc2 protected
  • 10.5.0-rc1 protected
  • 11.2.0-rc1 protected
  • 10.4.8 protected
  • 11.1.8 protected
  • 10.5.0-beta1 protected
  • 11.2.0-beta1 protected
  • 11.2.0-alpha1 protected
  • 10.4.7 protected
  • 11.1.7 protected
  • 10.4.6 protected
  • 11.1.6 protected
  • 10.3.14 protected
  • 10.4.5 protected
  • 11.0.13 protected
41 results

system_test.module

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    form.theme 7.58 KiB
    <?php
    
    /**
     * @file
     * form.theme
     */
    
    use Drupal\Core\Form\FormStateInterface;
    use Drupal\Core\Render\Element;
    use Drupal\gin\GinContentFormHelper;
    use Drupal\gin\GinDescriptionToggle;
    use Drupal\gin\GinPreRender;
    use Drupal\gin\GinSettings;
    
    /**
     * Implements form_alter_HOOK() for some major form changes.
     */
    function gin_form_alter(&$form, $form_state, $form_id) {
      \Drupal::classResolver(GinContentFormHelper::class)->formAlter($form, $form_state, $form_id);
    
      // User form (Login, Register or Forgot password).
      if (strpos($form_id, 'user_login') !== FALSE || strpos($form_id, 'user_register') !== FALSE || strpos($form_id, 'user_pass') !== FALSE) {
        $form['actions']['submit']['#attributes']['class'][] = 'button--primary';
      }
    
      // Bulk forms: update action & actions to small variants.
      if (strpos($form_id, 'views_form') !== FALSE) {
        if (isset($form['header'])) {
          $bulk_form = current(preg_grep('/_bulk_form/', array_keys($form['header'])));
    
          if (isset($form['header'][$bulk_form])) {
            $form['header'][$bulk_form]['action']['#attributes']['class'][] = 'form-element--type-select--small';
            $form['header'][$bulk_form]['actions']['submit']['#attributes']['class'][] = 'button--small';
    
            // Remove double entry of submit button.
            unset($form['actions']['submit']);
          }
        }
      }
    
      // Delete forms: alter buttons.
      if (strpos($form_id, 'delete_form') !== FALSE) {
        $form['actions']['submit']['#attributes']['class'][] = 'button--danger';
        $form['actions']['cancel']['#attributes']['class'][] = 'button--secondary';
      }
    
      // $form['#attached']['library'][] = 'gin/more_actions';
    }
    
    /**
     * Helper function to remember the form actions after form has been built.
     */
    function gin_form_after_build(array $form, FormStateInterface $form_state): array {
      // Allowlist for visible actions.
      $includes = ['save', 'submit', 'preview'];
    
      // Secondary action container options.
      $form['gin_sticky_actions']['more_actions']['more_actions_items']['#weight'] = 2;
      $form['gin_sticky_actions']['more_actions']['more_actions_items']['#attributes']['class'] = ['gin-more-actions__menu'];
    
      // Build actions.
      foreach (Element::children($form['actions']) as $key) {
        $button = ($form['actions'][$key]) ?? [];
    
        if (!($button['#access'] ?? TRUE)) {
          continue;
        }
    
        if (isset($button['#type']) && $button['#type'] === 'submit') {
          // Update button.
          $button['#attributes']['id'] = 'gin-sticky-' . $button['#id'];
          $button['#attributes']['form'] = $form['#id'];
          $button['#attributes']['data-drupal-selector'] = 'gin-sticky-' . $button['#attributes']['data-drupal-selector'];
          $button['#attributes']['data-gin-sticky-form-selector'] = $button['#attributes']['data-drupal-selector'];
    
          // Add the button to the form actions array.
          if (in_array($key, $includes, TRUE) || !empty($button['#gin_action_item'])) {
            $form['gin_sticky_actions']['actions'][$key] = $button;
          }
          // Add to more menu.
          else {
            $form['gin_sticky_actions']['more_actions']['more_actions_items'][$key] = $button;
          }
        }
        // Else add button to more menu.
        elseif (!in_array($key, $includes, TRUE)) {
          $form['gin_sticky_actions']['more_actions']['more_actions_items'][$key] = $button;
          $form['gin_sticky_actions']['more_actions']['more_actions_items'][$key]['#attributes']['form'] = $button['#id'];
          continue;
        }
      }
    
      _gin_form_actions($form['gin_sticky_actions'] ?? NULL);
      unset($form['gin_sticky_actions']);
    
      return $form;
    }
    
    /**
     * Implements form_user_form_alter().
     */
    function gin_form_user_form_alter(&$form, FormStateInterface $form_state) {
      // If new user account, don't show settings yet.
      if ($form_state->getFormObject()->getEntity()->isNew()) {
        return;
      }
    
      /** @var \Drupal\gin\GinSettings $settings */
      $settings = \Drupal::classResolver(GinSettings::class);
    
      if ($settings->allowUserOverrides()) {
        // Inject the settings for the dark mode feature.
        $form['gin_theme_settings'] = [
          '#type' => 'details',
          '#title' => t('Admin theme settings'),
          '#open' => TRUE,
          '#weight' => 90,
        ];
    
        /** @var \Drupal\Core\Session\AccountInterface $account */
        $account = $form_state->getBuildInfo()['callback_object']->getEntity();
        $form['gin_theme_settings']['enable_user_settings'] = [
          '#type' => 'checkbox',
          '#title' => t('Enable overrides'),
          '#description' => t("Enables default admin theme overrides."),
          '#default_value' => $settings->userOverrideEnabled($account),
          '#weight' => 0,
        ];
    
        $form['gin_theme_settings']['user_settings'] = [
          '#type' => 'container',
          '#states' => [
            // Show if met.
            'visible' => [
              ':input[name="enable_user_settings"]' => ['checked' => TRUE],
            ],
          ],
        ] + $settings->getSettingsForm($account);
    
        // Attach custom library.
        $form['#attached']['library'][] = 'gin/settings';
    
        array_unshift($form['actions']['submit']['#submit'], '_gin_user_form_submit');
      }
    }
    
    /**
     * Implements template_preprocess_HOOK() for select.
     */
    function gin_preprocess_select(&$variables) {
      if (in_array('block-weight', $variables['attributes']['class'], TRUE)) {
        $variables['attributes']['class'][] = 'form-element--extrasmall';
      }
    }
    
    /**
     * Implements template_preprocess_HOOK() for form_element.
     */
    function gin_preprocess_form_element(&$variables) {
      \Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables);
    }
    
    /**
     * Implements template_preprocess_HOOK() for datetime_wrapper.
     */
    function gin_preprocess_datetime_wrapper(&$variables) {
      \Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables);
    }
    
    /**
     * Implements template_preprocess_HOOK() for details.
     */
    function gin_preprocess_details(&$variables) {
      \Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables);
    }
    
    /**
     * Implements template_preprocess_HOOK() for fieldset.
     */
    function gin_preprocess_fieldset(&$variables) {
      \Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables);
    }
    
    /**
     * Implements hook_element_info_alter().
     */
    function gin_element_info_alter(&$info) {
      if (array_key_exists('text_format', $info)) {
        $info['text_format']['#pre_render'][] = [
          GinPreRender::class,
          'textFormat',
        ];
      }
    }
    
    /**
     * Implements template_preprocess_HOOK() for text_format_wrapper.
     */
    function gin_preprocess_text_format_wrapper(&$variables) {
      /** @var \Drupal\gin\GinSettings $settings */
      $settings = \Drupal::classResolver(GinSettings::class);
      if ($settings->get('show_description_toggle') && !empty($variables['description'])) {
        $variables['description_display'] = 'invisible';
        $variables['description_toggle'] = TRUE;
      }
    }
    
    /**
     * Implements template_preprocess_inline_entity_form_entity_table() for forms.
     */
    function gin_preprocess_inline_entity_form_entity_table(array &$variables) {
      $variables['table']['#attached']['library'][] = 'gin/inline_entity_form';
    }
    
    /**
     * Set and get the form actions of the current request.
     *
     * @param array|null $actions
     *   If not NULL, the given actions will be remembered for the current request
     *   so that they can be retrieved later when processing the page.
     *
     * @return array|null
     *   If set, the previously stored actions, NULL otherwise.
     */
    function _gin_form_actions(?array $actions = NULL): ?array {
      static $preparedActions;
      if ($actions !== NULL) {
        $preparedActions = $actions;
      }
      return $preparedActions;
    }
    
    /**
     * Implements hook_preprocess_HOOK() for checkbox_tree.
     */
    function gin_preprocess_checkbox_tree(array &$variables) {
      $variables['#attached']['library'][] = 'gin/term_reference_tree';
    }