material_admin_support-8.x-1.x-dev/material_admin_support.install

material_admin_support.install
<?php

/**
 * @file
 * Contains material_admin_support.install.
 */

/**
 * Implements hook_install().
 */
function material_admin_support_install() {
  $entity_type_manager = \Drupal::entityTypeManager();
  $module_handler = \Drupal::moduleHandler();

  // Add type style configuration for common content types.
  if ($module_handler->moduleExists('node')) {
    $node_type_style_presets = [
      'article' => [
        'color' => '#039BE5',
        'icon' => 'book',
      ],
      'page' => [
        'color' => '#f57f17',
        'icon' => 'web_asset',
      ],
      'product' => [
        'color' => '#43A047',
        'icon' => 'shopping_cart',
      ],
      'landing_page' => [
        'color' => '#009688',
        'icon' => 'star',
      ],
    ];

    /** @var \Drupal\node\NodeTypeInterface[] $content_types */
    $content_types = $entity_type_manager
      ->getStorage('node_type')
      ->loadMultiple();

    foreach ($content_types as $id => $type) {
      if (empty($type->getThirdPartySettings('type_style')) && isset($node_type_style_presets[$id])) {
        $type->setThirdPartySetting('type_style', 'color', $node_type_style_presets[$id]['color']);
        $type->setThirdPartySetting('type_style', 'icon', $node_type_style_presets[$id]['icon']);
        $type->save();
      }
    }
  }

  // Add type style configuration for common media types.
  if ($module_handler->moduleExists('media')) {
    $media_type_style_presets = [
      'document' => [
        'color' => '#43A047',
        'icon' => 'insert_drive_file',
      ],
      'image' => [
        'color' => '#2196F3',
        'icon' => 'insert_photo',
      ],
      'video' => [
        'color' => '#F44336',
        'icon' => 'movie',
      ],
      'tweet' => [
        'color' => '#03A9F4',
        'icon' => 'twitter',
      ],
      'instagram' => [
        'color' => '#AB47BC',
        'icon' => 'instagram',
      ],
    ];

    /** @var \Drupal\media\MediaTypeInterface[] $media_types */
    $media_types = $entity_type_manager
      ->getStorage('media_type')
      ->loadMultiple();

    foreach ($media_types as $id => $bundle) {
      if (empty($bundle->getThirdPartySettings('type_style')) && isset($media_type_style_presets[$id])) {
        $bundle->setThirdPartySetting('type_style', 'color', $media_type_style_presets[$id]['color']);
        $bundle->setThirdPartySetting('type_style', 'icon', $media_type_style_presets[$id]['icon']);
        $bundle->save();
      }
    }
  }

  // Add type style configuration for common moderation states and transitions.
  if ($module_handler->moduleExists('type_style_moderation') && $module_handler->moduleExists('workbench_moderation')) {
    $workbench_moderation_type_style_presets = [
      'archived' => [
        'color' => '#00897b',
        'icon' => 'archive',
      ],
      'draft' => [
        'color' => '#EF6C00',
        'icon' => 'edit',
      ],
      'needs_review' => [
        'color' => '#ff8f00',
        'icon' => 'speaker_notes',
      ],
      'published' => [
        'color' => '#689f38',
        'icon' => 'public',
      ],
    ];

    /** @var \Drupal\workbench_moderation\ModerationStateInterface[] $moderation_states */
    $moderation_states = $entity_type_manager
      ->getStorage('moderation_state')
      ->loadMultiple();

    foreach ($moderation_states as $id => $state) {
      if (empty($state->getThirdPartySettings('type_style')) && isset($workbench_moderation_type_style_presets[$id])) {
        $state->setThirdPartySetting('type_style', 'color', $workbench_moderation_type_style_presets[$id]['color']);
        $state->setThirdPartySetting('type_style', 'icon', $workbench_moderation_type_style_presets[$id]['icon']);
        $state->save();
      }
    }

    /** @var \Drupal\workbench_moderation\ModerationStateTransitionInterface[] $moderation_state_transitions */
    $moderation_state_transitions = $entity_type_manager
      ->getStorage('moderation_state_transition')
      ->loadMultiple();

    foreach ($moderation_state_transitions as $id => $transition) {
      if (empty($transition->getThirdPartySettings('type_style')) && isset($workbench_moderation_type_style_presets[$transition->getToState()])) {
        $transition->setThirdPartySetting('type_style', 'color', $workbench_moderation_type_style_presets[$transition->getToState()]['color']);
        $transition->setThirdPartySetting('type_style', 'icon', $workbench_moderation_type_style_presets[$transition->getToState()]['icon']);
        $transition->setSyncing(TRUE);
        $transition->save();
      }
    }
  }

  // Add type style configuration for common commerce products.
  if ($module_handler->moduleExists('commerce_product')) {
    // Commerce product support.
    $commerce_product_type_style_preset = [
      'color' => '#d3d3d3',
      'icon' => 'shopping_cart',
    ];

    /** @var \Drupal\commerce_product\Entity\ProductTypeInterface[] $product_types */
    $product_types = $entity_type_manager
      ->getStorage('commerce_product_type')
      ->loadMultiple();

    foreach ($product_types as $id => $bundle) {
      $bundle->setThirdPartySetting('type_style', 'color', $commerce_product_type_style_preset['color']);
      $bundle->setThirdPartySetting('type_style', 'icon', $commerce_product_type_style_preset['icon']);
      $bundle->save();
    }
  }

  // Customize existing views.
  if ($module_handler->moduleExists('views')) {
    $storage = $entity_type_manager
      ->getStorage('view');

    // Customize the 'content browser' view.
    /** @var \Drupal\views\ViewEntityInterface $view */
    if (($view = $storage->load('content_browser')) && $view !== NULL) {
      material_admin_support_view_insert($view);
    }

    // Customize the 'media' view.
    /** @var \Drupal\views\ViewEntityInterface $view */
    if (($view = $storage->load('media')) && $view !== NULL) {
      material_admin_support_view_insert($view);
    }

    $entity_browser_view_displays = [];

    /** @var \Drupal\views\ViewEntityInterface[] $views */
    $views = $storage->loadMultiple();

    // Retrieve all entity browser view displays.
    foreach ($views as $view_id => $view_data) {
      foreach ($view_data->get('display') as $display_id => $display_definitions) {
        // Verify that the view displays an entity browser.
        if ($display_definitions['display_plugin'] !== 'entity_browser') {
          continue;
        };

        // Check whether a display is overridden. If so, the master must be
        // modified.
        $display_options = array_filter($display_definitions['display_options']);
        $display_to_process = empty($display_options['row']) ? 'default' : $display_id;
        $entity_browser_view_displays[$view_id][$display_to_process] = $display_to_process;
      }
    }

    // Alter the display options of each entity browser view, adding additional
    // classes and styling.
    foreach ($entity_browser_view_displays as $view_id => $display_ids) {
      foreach ($display_ids as $display_id) {
        $display = &$views[$view_id]->getDisplay($display_id);
        $display['display_options']['style']['type'] = 'default';
        $display['display_options']['style']['options']['row_class'] = 'browser--item';
        if ($display_id !== 'default') {
          $display['display_options']['defaults']['css_class'] = FALSE;
        }
        $display['display_options']['css_class'] = 'browser--row';

        // Notify administrators that the view has been altered by logging a
        // message.
        \Drupal::logger('material_admin_support')->info('View config for display @display-id of @view-id view changed', [
          '@display-id' => $display_id,
          '@view-id' => $view_id,
        ]);
      }

      $views[$view_id]->save();
    }
  }
}

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

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