at_theme-1.4.1/at_core/theme-settings.php

at_core/theme-settings.php
<?php

/**
 * @file
 * Custom theme settings.
 */

use Drupal\Component\Utility\Html;
use Drupal\Core\Form\FormStateInterface;
use Drupal\at_core\Theme\ThemeInfo;
use Drupal\at_core\File\FileOperations;
use Drupal\at_core\File\DirectoryOperations;
use Drupal\at_core\Ext\ExtGet;
use Drupal\block\BlockRepositoryInterface;
use Drupal\Core\Extension\ThemeExtensionList;

/**
 * Implementation of hook_form_system_theme_settings_alter()
 *
 * @param $form
 *   Nested array of form elements that comprise the form.
 * @param $form_state
 *   A keyed array containing the current state of the form.
 */
function at_core_form_system_theme_settings_alter(&$form, FormStateInterface $form_state, $form_id = NULL) {
  // Work-around for a core bug affecting admin themes. See issue #943212.
  if (isset($form_id)) {
    return;
  }

  // Set the theme name.
  $build_info = $form_state->getBuildInfo();

  $active_theme = \Drupal::theme()->getActiveTheme();
  $theme = $active_theme->getName();
  $theme_extension = $active_theme->getExtension();

  // Instantiate our Theme info object.
  $themeInfo = new ThemeInfo($theme);
  $getThemeInfo = $themeInfo->getThemeInfo('info');

  // Get this themes config settings.
  $config = \Drupal::config($theme . '.settings')->get('settings');

  // Common paths.
  $at_core_path = \Drupal::service('extension.list.theme')->getPath('at_core');
  $subtheme_path = \Drupal::service('extension.list.theme')->getPath($theme);
  $generated_files_path = NULL;

  // Path to save generated CSS files. We don't want this happening for at_core or the generator.
  if (isset($getThemeInfo['subtheme type']) && ($getThemeInfo['subtheme type'] === 'adaptive_subtheme')) {
    $directoryOperations = new DirectoryOperations();
    $generated_files_path = $directoryOperations->directoryPrepare($backup_file_path = [$subtheme_path, 'styles/css/generated']);
  }

  // Get the active themes regions so we can use this in
  // various other places.
  // $theme_regions = system_region_list($theme, $show = REGIONS_VISIBLE);.
  $theme_regions = system_region_list($theme, $show = BlockRepositoryInterface::REGIONS_VISIBLE);

  // Set variables if modules exist.
  $modules = ['node', 'comment', 'block', 'block_content', 'paragraphs', 'breakpoint', 'at_tool'];
  $module_exists = [];
  foreach ($modules as $module) {
    $module_exists[$module] = FALSE;
    if (\Drupal::moduleHandler()->moduleExists($module) === TRUE) {
      $module_exists[$module] = TRUE;
    }
  }

  // Modules exist BC.
  $node_module = $module_exists['node'];
  $comment_module = $module_exists['comment'];
  $block_module = $module_exists['block'];
  $block_content_module = $module_exists['block_content'];
  $paragraphs_module = $module_exists['paragraphs'];
  $breakpoint_module = $module_exists['breakpoint'];
  $at_tools_module = $module_exists['at_tool'];

  // Get stuff.
  $ext_get = new ExtGet();

  // Active theme blocks.
  $theme_blocks = $ext_get->getActiveThemeBlocks($theme);
  // kint($theme_blocks);

  // Breakpoints.
  $break_points = $ext_get->getBreakPoints();
  $breakpoint_groups = $break_points['breakpoint_groups'];
  $breakpoints = $break_points['breakpoints'];
  $breakpoint_options = $break_points['breakpoint_options'];

  // Entity types.
  $entity_types = $ext_get->getEntityTypes();

  // Set easy access variables for entity types.
  if (!empty($entity_types)) {
    if (isset($entity_types['node'])) {
      $node_types = $entity_types['node'];
    }
    if (isset($entity_types['comment'])) {
      $comment_types = $entity_types['comment'];
    }
    if (isset($entity_types['block_content'])) {
      $block_content_types = $entity_types['block_content'];
    }
    if (isset($entity_types['paragraphs'])) {
      $paragraph_types = $entity_types['paragraphs'];
    }
  }

  // View modes.
  $view_modes = $ext_get->getViewModes();

  // Image Styles.
  $image_styles = $ext_get->getImageStyles();

  // Set a class on the form for the current admin theme, note if this is set to
  // "Default theme" the result is always 0.
  $system_theme_config = \Drupal::config('system.theme');
  $admin_theme = $system_theme_config->get('admin');
  if (!empty($admin_theme)) {
    $admin_theme_class = 'admin-theme--' . Html::cleanCssIdentifier($admin_theme);
    $form['#attributes'] = ['class' => [$admin_theme_class]];
  }

  // Attached required CSS and JS.
  $form['#attached']['library'][] = 'at_core/at.appearance_settings';

  // Display a rude message if AT Tools is missing...
  if ($at_tools_module === FALSE) {
    \Drupal::messenger()->addMessage(t('Please install the <a href="@at_tools_href" target="_blank">AT Tool</a> module for Drupal 8/9. Your theme may not operate correctly without this module installed.', ['@at_tools_href' => 'https://www.drupal.org/project/at_tool']), 'warning');
  }

  // AT Core.
  if ($theme === 'at_core') {
    $form['at_core']['message'] = [
      '#type' => 'container',
      '#markup' => t('AT Core has no configuration and cannot be used as a front end theme - it is a base them only. Use the <b>AT Theme Generator</b> to generate or clone a theme to get started.'),
    ];

    // Hide form items.
    $form['theme_settings']['#attributes']['class'] = ['visually-hidden'];
    $form['logo']['#attributes']['class'] = ['visually-hidden'];
    $form['favicon']['#attributes']['class'] = ['visually-hidden'];
    $form['actions']['#attributes']['class'] = ['visually-hidden'];
  }

  // AT Subtheme.
  if (isset($getThemeInfo['subtheme type'])) {

    // BC layer for older themes.
    if ($getThemeInfo['subtheme type'] !== 'adaptive_generator') {

      // Pass in the generated files path to values and settings.
      $form['at']['settings_generated_files_path'] = [
        '#type' => 'hidden',
        '#value' => $generated_files_path,
      ];

      // Theme info block.
      require_once $at_core_path . '/forms/theme_info.php';

      // Check for breakpoint module, a lot of errors without it, this is brutal.
      if ($breakpoint_module === TRUE) {
        if ($getThemeInfo['subtheme type'] === 'adaptive_subtheme') {
          require_once $at_core_path . '/forms/ext/extension_settings.php';
          require_once $at_core_path . '/forms/layout/layouts.php';
        }
        elseif ($getThemeInfo['subtheme type'] === 'adaptive_skin') {
          require_once $at_core_path . '/forms/ext/extension_settings_skin.php';
        }
      }

      // Basic settings - move into details wrapper and collapse.
      $form['basic_settings'] = [
        '#type' => 'details',
        '#title' => t('Basic Settings'),
      ];

      // If it's skin type, set details to open.
      if ($getThemeInfo['subtheme type'] === 'adaptive_skin') {
        $form['basic_settings']['#open'] = TRUE;
      }

      $form['theme_settings']['#open'] = FALSE;
      $form['theme_settings']['#group'] = 'basic_settings';
      $form['logo']['#open'] = FALSE;
      $form['logo']['#group'] = 'basic_settings';
      $form['favicon']['#open'] = FALSE;
      $form['favicon']['#group'] = 'basic_settings';

      // Buttons don't work with #group, move it the hard way.
      $form['actions']['#type'] = $form['basic_settings']['actions']['#type'] = 'actions';
      $form['actions']['submit']['#type'] = $form['basic_settings']['actions']['submit']['#type'] = 'submit';
      $form['actions']['submit']['#value'] = $form['basic_settings']['actions']['submit']['#value'] = t('Save basic settings');
      $form['actions']['submit']['#button_type'] = $form['basic_settings']['actions']['submit']['#button_type'] = 'primary';
      unset($form['actions']);
    }
  }

  // Modify the color scheme form.
  if (\Drupal::moduleHandler()->moduleExists('color')) {
    include_once $at_core_path . '/forms/color/color_submit.php';
    if (isset($build_info['args'][0]) && ($theme = $build_info['args'][0]) && color_get_info($theme) && function_exists('gd_info')) {
      $form['#process'][] = 'at_core_color_form';
    }
    // TODO This should only happen after color form submit. We need this to
    // stop 404 errors for the map URL for rewritten color stylesheets.
    $color_paths = \Drupal::config('color.theme.' . $theme)->get('stylesheets');
    if (!empty($color_paths)) {
      $fileOperations = new FileOperations();
      foreach ($color_paths as $color_path) {
        $map_string = '/*# sourceMappingURL=maps/' . str_replace('.css', '.css.map', basename($color_path)) . ' */';
        $fileOperations->fileStrReplace("$color_path", $map_string, '');
      }
    }
  }
}

/**
 * Helper function to modify the color scheme form.
 *
 * @param $form
 *
 * @return array $form
 */
function at_core_color_form($form) {
  $form['color']['#open'] = FALSE;
  $form['color']['actions'] = [
    '#type' => 'actions',
    '#attributes' => ['class' => ['submit--color-scheme']],
  ];
  $form['color']['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => t('Save color scheme'),
    '#button_type' => 'primary',
    '#submit' => ['at_color_scheme_form_submit'],
    '#weight' => 100,
  ];
  $form['color']['actions']['log'] = [
    '#type' => 'submit',
    '#value' => t('Log color scheme'),
    '#submit' => ['at_core_log_color_scheme'],
    '#weight' => 101,
    '#access' => FALSE,
  ];

  // Magic user Obi Wan gets special Jedi powers.
  $user = \Drupal::currentUser();
  if (in_array('administrator', $user->getRoles()) && $user->getAccountName() == 'Obi Wan') {
    $form['color']['actions']['log']['#access'] = TRUE;
  }

  return $form;
}

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

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