Commit bb854cf2 authored by Pierre Dureau's avatar Pierre Dureau
Browse files

Issue #3319153: Remove deprecated function (drupal_get_path) by refactoring with generic callbacks

parent be1bf5e6
Loading
Loading
Loading
Loading
+62 −37
Original line number Diff line number Diff line
@@ -7,6 +7,65 @@

declare(strict_types = 1);

/**
 * Add theme base path to media.
 *
 * @param mixed $item
 *   The render element.
 *
 * @return array
 *   The modified item.
 */
function _ui_suite_bootstrap_add_media_path($item): array {
  /** @var array $item */
  $base_path = \Drupal::service('extension.list.theme')->getPath('ui_suite_bootstrap');
  if (is_array($item) && array_key_exists('#theme', $item)) {
    if ($item['#theme'] === 'image') {
      $uri = isset($item['#uri']) ? implode('/', [
        '',
        $base_path,
        $item['#uri'],
      ]) : '';
      $item['#uri'] = $uri;
    }
  }
  if (is_array($item) && array_key_exists('#type', $item)) {
    if (($item['#type'] === 'html_tag') || ($item['#tag'] === 'img')) {
      $uri = isset($item['#attributes']['src']) ? implode('/', [
        '',
        $base_path,
        $item['#attributes']['src'],
      ]) : '';
      $item['#attributes']['src'] = $uri;
    }
  }
  return $item;
}

/**
 * Add expected class to links.
 *
 * @param mixed $item
 *   The render element.
 * @param string $class
 *   The CSS class to add.
 */
function _ui_suite_bootstrap_add_link_class(&$item, string $class): void {
  if (is_array($item) && array_key_exists('#type', $item)) {
    if ($item['#type'] === 'link') {
      $item['#attributes']['class'][] = $class;
    }
    if ($item['#type'] === 'html_tag' && $item['#tag'] === 'a') {
      $item['#attributes']['class'][] = $class;
    }
  }
  if (is_array($item)) {
    foreach ($item as &$next) {
      _ui_suite_bootstrap_add_link_class($next, $class);
    }
  }
}

/**
 * Implements hook_preprocess_HOOK() for 'page'.
 */
@@ -22,23 +81,17 @@ function ui_suite_bootstrap_preprocess_page(array &$variables): void {
 * See also: https://getbootstrap.com/docs/4.6/components/card/.
 */
function ui_suite_bootstrap_preprocess_pattern_card(array &$variables): void {
  $base_path = \Drupal::service('extension.list.theme')->getPath('ui_suite_bootstrap');
  if (array_key_exists('image', $variables) && is_array($variables['image'])) {
    foreach ($variables['image'] as &$item) {
      _ui_suite_bootstrap_add_card_image_class($item, $variables['variant']);
      if ($variables['context']->getType() == 'preview') {
        $uri = isset($item['#uri']) ? implode('/', [
          '',
          $base_path,
          $item['#uri'],
        ]) : '';
        $item['#uri'] = $uri;
        $item = _ui_suite_bootstrap_add_media_path($item);
      }
    }
  }
  if (array_key_exists('links', $variables) && is_array($variables['links'])) {
    foreach ($variables['links'] as &$item) {
      _ui_suite_bootstrap_add_card_link_class($item);
      _ui_suite_bootstrap_add_link_class($item, 'card-link');
    }
  }
}
@@ -66,47 +119,19 @@ function _ui_suite_bootstrap_add_card_image_class(&$item, string $variant): void
  }
}

/**
 * Add expected class in card's link.
 */
function _ui_suite_bootstrap_add_card_link_class(&$item): void {
  if (is_array($item) && array_key_exists('#type', $item)) {
    $class = 'card-link';
    if ($item['#type'] === 'link') {
      $item['#attributes']['class'][] = $class;
    }
    if ($item['#type'] === 'html_tag' && $item['#tag'] === 'a') {
      $item['#attributes']['class'][] = $class;
    }
  }
  if (is_array($item)) {
    foreach ($item as &$next) {
      _ui_suite_bootstrap_add_card_link_class($next);
    }
  }
}

/**
 * Implements hook_preprocess_HOOK() for 'pattern_carousel'.
 *
 * See also: https://getbootstrap.com/docs/4.6/components/carousel/.
 */
function ui_suite_bootstrap_preprocess_pattern_carousel(array &$variables): void {

  // Nicer preview with fixed width and local backgrounds.
  if ($variables['context']->getType() == 'preview') {
    $variables['attributes']['style'] = "width: 800px";
    $base_path = \Drupal::service('extension.list.theme')->getPath('ui_suite_bootstrap');
    foreach ($variables['slides'] as $i => $slide) {
      $uri = isset($slide['#uri']) ? implode('/', [
        '',
        $base_path,
        $slide['#uri'],
      ]) : '';
      $variables['slides'][$i]['#uri'] = $uri;
      $variables['slides'][$i] = _ui_suite_bootstrap_add_media_path($slide);
    }
  }

}

/*