charts-8.x-4.x-dev/modules/charts_highcharts/src/Hook/ChartsHighchartsHooks.php

modules/charts_highcharts/src/Hook/ChartsHighchartsHooks.php
<?php

declare(strict_types=1);

namespace Drupal\charts_highcharts\Hook;

use Drupal\charts\ConfigUpdater;
use Drupal\charts_highcharts\Plugin\chart\Library\Highcharts;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Hook\Attribute\Hook;

/**
 * Hook implementations for the Charts Highcharts module.
 */
class ChartsHighchartsHooks {

  /**
   * Constructs a new ChartsHighchartsHooks object.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory
   *   The config factory.
   */
  public function __construct(protected ConfigFactoryInterface $configFactory) {
  }

  /**
   * Implements hook_charts_version3_to_new_settings_structure_alter().
   *
   * @param array $new_settings
   *   The new settings.
   * @param string $for
   *   What this is supposed to affect.
   * @param \Drupal\charts\ConfigUpdater $config_updater
   *   The config updater.
   *
   * @phpstan-ignore-next-line
   */
  #[Hook('charts_version3_to_new_settings_structure_alter')]
  public function chartsVersion3ToNewSettingsStructureAlter(array &$new_settings, string $for, ConfigUpdater $config_updater): void {
    $is_config = $for === 'config';
    $highcharts_config = $is_config ? $this->configFactory->getEditable('charts_highcharts.settings') : NULL;
    if (!$is_config || !$highcharts_config || empty($new_settings['library']) || $new_settings['library'] !== 'highcharts') {
      if ($highcharts_config) {
        $highcharts_config->delete();
      }
      return;
    }

    $mapping_keys = [
      'legend_layout' => 'legend_layout',
      'legend_background_color' => 'legend_background_color',
      'legend_border_width' => 'legend_border_width',
      'legend_shadow' => 'legend_shadow',
      'item_style_color' => 'legend_item_style_color',
      'text_overflow' => 'legend_item_style_overflow',
    ];
    $library_config = [
      'legend' => [
        'layout' => NULL,
        'background_color' => '',
        'border_width' => 0,
        'shadow' => FALSE,
        'item_style' => [
          'color' => '',
          'overflow' => '',
        ],
      ],
      'exporting_library' => TRUE,
      'texture_library' => TRUE,
      'global_options' => Highcharts::defaultGlobalOptions(),
    ];

    foreach ($highcharts_config->getRawData() as $config_key => $config_value) {
      $setting_key_map = $mapping_keys[$config_key] ?? '';
      if (!$setting_key_map || substr($setting_key_map, 0, 6) !== 'legend') {
        continue;
      }

      // Stripping the 'legend_' in front of the mapping key.
      $setting_key_map = substr($setting_key_map, 7, strlen($setting_key_map));
      $value = $config_updater->transformBoolStringValueToBool($config_value);
      switch ($setting_key_map) {
        case 'layout':
          $library_config['legend']['layout'] = $value;
          break;

        case 'background_color':
          $library_config['legend']['background_color'] = $value;
          break;

        case 'border_width':
          $library_config['legend']['border_width'] = $value;
          break;

        case 'shadow':
          $library_config['legend']['shadow'] = $value;
          break;

        case 'item_style_color':
          $library_config['legend']['item_style']['color'] = $value;
          break;

        default:
          $library_config['legend']['item_style']['overflow'] = $value;
      }

      $new_settings['library_config'] = $library_config;
      $highcharts_config->delete();
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc