You are here

varbase_admin.install in Varbase Core 8.8

Install, update and uninstall functions for the Varbase admin.

File

modules/varbase_admin/varbase_admin.install
View source
<?php

/**
 * @file
 * Install, update and uninstall functions for the Varbase admin.
 */
use Symfony\Component\Yaml\Yaml;
use Drupal\Core\Config\InstallStorage;
use Drupal\Core\Config\StorageInterface;
use Drupal\Core\Config\FileStorage;
use Drupal\user\Entity\User;
use Drupal\user\RoleInterface;
use Drupal\shortcut\Entity\Shortcut;
use Drupal\varbase\Entity\VarbaseEntityDefinitionUpdateManager;
use Drupal\user\UserInterface;

/**
 * Implements hook_install().
 */
function varbase_admin_install() {
  $module_name = preg_replace('/_install$/', '', __FUNCTION__);
  $module_path = Drupal::service('module_handler')
    ->getModule($module_name)
    ->getPath();

  // Processer for install: in [$module_name].info.yml file.
  // ---------------------------------------------------------------------------.
  $module_info_file = $module_path . '/' . $module_name . '.info.yml';
  if (file_exists($module_info_file)) {
    $module_info_data = (array) Yaml::parse(file_get_contents($module_info_file));
    if (isset($module_info_data['install']) && is_array($module_info_data['install'])) {
      foreach ($module_info_data['install'] as $module) {
        if (!\Drupal::moduleHandler()
          ->moduleExists($module)) {
          \Drupal::service('module_installer')
            ->install([
            $module,
          ], TRUE);
        }
      }
    }
  }

  // Install optional configs.
  $optional_install_path = $module_path . '/' . InstallStorage::CONFIG_OPTIONAL_DIRECTORY;
  if (is_dir($optional_install_path)) {
    $config_installer = \Drupal::service('config.installer');
    $config_installer
      ->installDefaultConfig('module', $module_name);

    // Create field storage configs first in active config.
    $storage_config_files = \Drupal::service('file_system')
      ->scanDirectory($optional_install_path, '/^field.storage.*\\.(yml)$/i');
    if (isset($storage_config_files) && is_array($storage_config_files)) {
      foreach ($storage_config_files as $storage_config_file) {
        $storage_config_file_content = file_get_contents(DRUPAL_ROOT . '/' . $storage_config_file->uri);
        $storage_config_file_data = (array) Yaml::parse($storage_config_file_content);
        $config_factory = \Drupal::configFactory()
          ->getEditable($storage_config_file->name);
        $config_factory
          ->setData($storage_config_file_data)
          ->save(TRUE);
      }
    }

    // Install any optional config the module provides.
    $storage = new FileStorage($optional_install_path, StorageInterface::DEFAULT_COLLECTION);
    $config_installer
      ->installOptionalConfig($storage, '');

    // Have the .settings.yml configs into the active config.
    $settings_config_files = \Drupal::service('file_system')
      ->scanDirectory($optional_install_path, '/^.*\\.(settings.yml)$/i');
    if (isset($settings_config_files) && is_array($settings_config_files)) {
      foreach ($settings_config_files as $settings_config_file) {
        $settings_config_file_content = file_get_contents(DRUPAL_ROOT . '/' . $settings_config_file->uri);
        $settings_config_file_data = (array) Yaml::parse($settings_config_file_content);
        $config_factory = \Drupal::configFactory()
          ->getEditable($settings_config_file->name);
        $config_factory
          ->setData($settings_config_file_data)
          ->save(TRUE);
      }
    }
  }

  // ---------------------------------------------------------------------------
  // Assign user 1 the "administrator" role.
  $user = User::load(1);
  $user->roles[] = 'administrator';
  $user
    ->save();

  // Restrict user registration to admin role creation.
  \Drupal::configFactory()
    ->getEditable('user.settings')
    ->set('register', UserInterface::REGISTER_ADMINISTRATORS_ONLY)
    ->save(TRUE);

  // Allow authenticated users to use shortcuts.
  user_role_grant_permissions(RoleInterface::AUTHENTICATED_ID, [
    'access shortcuts',
  ]);

  // Populate the default shortcut set.
  $shortcut = Shortcut::create([
    'shortcut_set' => 'default',
    'title' => t('Add content'),
    'weight' => 0,
    'link' => [
      'uri' => 'internal:/node/add',
    ],
  ]);
  $shortcut
    ->save();
  $shortcut = Shortcut::create([
    'shortcut_set' => 'default',
    'title' => t('All content'),
    'weight' => 1,
    'link' => [
      'uri' => 'internal:/admin/content',
    ],
  ]);
  $shortcut
    ->save();
  $shortcut = Shortcut::create([
    'shortcut_set' => 'default',
    'title' => t('All media'),
    'weight' => 2,
    'link' => [
      'uri' => 'internal:/admin/content/media',
    ],
  ]);
  $shortcut
    ->save();
  $shortcut = Shortcut::create([
    'shortcut_set' => 'default',
    'title' => t('Taxonomy'),
    'weight' => 3,
    'link' => [
      'uri' => 'internal:/admin/structure/taxonomy',
    ],
  ]);
  $shortcut
    ->save();
  $shortcut = Shortcut::create([
    'shortcut_set' => 'default',
    'title' => t('Permissions'),
    'weight' => 4,
    'link' => [
      'uri' => 'internal:/admin/people/permissions',
    ],
  ]);
  $shortcut
    ->save();

  // Enable the admin theme.
  \Drupal::configFactory()
    ->getEditable('node.settings')
    ->set('use_admin_theme', TRUE)
    ->save(TRUE);

  // Entity updates to clear up any mismatched entity and/or field definitions
  // And Fix changes were detected in the entity type and field definitions.
  \Drupal::classResolver()
    ->getInstanceFromDefinition(VarbaseEntityDefinitionUpdateManager::class)
    ->applyUpdates();

  // Have forced configs import after the entity and definitions updates.
  $forced_configs_import_after_entity_updates = [
    'views.view.content',
    'views.view.user_admin_people',
  ];
  foreach ($forced_configs_import_after_entity_updates as $config_name) {
    $config_path = $optional_install_path . '/' . $config_name . '.yml';
    $config_content = file_get_contents($config_path);
    $config_data = (array) Yaml::parse($config_content);
    $config_factory = \Drupal::configFactory()
      ->getEditable($config_name);
    $config_factory
      ->setData($config_data)
      ->save(TRUE);
  }
}

/**
 * Enable Length Indicator module.
 */
function varbase_admin_update_8602() {

  /** @var \Drupal\update_helper\Updater $updateHelper */
  $updateHelper = \Drupal::service('update_helper.updater');

  // Execute configuration update definitions with logging of success.
  $updateHelper
    ->executeUpdate('varbase_core', 'varbase_admin_update_8602');

  // Output logged messages to related channel of update execution.
  return $updateHelper
    ->logger()
    ->output();
}

/**
 * Enable Admin Toolbar Links Access Filter module.
 */
function varbase_admin_update_8603() {
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_toolbar_links_access_filter')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_toolbar_links_access_filter',
    ], FALSE);
  }
}

/**
 * Enable [Events log track] module.
 */
function varbase_admin_update_8604() {
  if (!\Drupal::moduleHandler()
    ->moduleExists('event_log_track')) {
    \Drupal::service('module_installer')
      ->install([
      'event_log_track',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('event_log_track_file')) {
    \Drupal::service('module_installer')
      ->install([
      'event_log_track_file',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('event_log_track_media')) {
    \Drupal::service('module_installer')
      ->install([
      'event_log_track_media',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('event_log_track_user')) {
    \Drupal::service('module_installer')
      ->install([
      'event_log_track_user',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('event_log_track_taxonomy')) {
    \Drupal::service('module_installer')
      ->install([
      'event_log_track_taxonomy',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('event_log_track_node')) {
    \Drupal::service('module_installer')
      ->install([
      'event_log_track_node',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('event_log_track_menu')) {
    \Drupal::service('module_installer')
      ->install([
      'event_log_track_menu',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('event_log_track_auth')) {
    \Drupal::service('module_installer')
      ->install([
      'event_log_track_auth',
    ], FALSE);
  }
}

/**
 * Issue #3152698: Switch from [Event Log Track] to [Admin Audit Trail] module.
 */
function varbase_admin_update_8605() {

  // ---------------------------------------------------------------------------
  // Inastall all Admin Audit Trail moduels.
  // ---------------------------------------------------------------------------.
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail_file') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track_file')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail_file',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail_media') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track_media')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail_media',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail_user') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track_user')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail_user',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail_taxonomy') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track_taxonomy')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail_taxonomy',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail_node') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track_node')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail_node',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail_menu') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track_menu')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail_menu',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail_auth') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track_auth')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail_auth',
    ], FALSE);
  }
  if (!\Drupal::moduleHandler()
    ->moduleExists('admin_audit_trail_workflows') && \Drupal::moduleHandler()
    ->moduleExists('event_log_track_workflows')) {
    \Drupal::service('module_installer')
      ->install([
      'admin_audit_trail_workflows',
    ], FALSE);
  }

  // Migrate logs from the event_log_track table to admin_audit_trail table.
  // ---------------------------------------------------------------------------.
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track')) {
    $fields = [
      'lid',
      'type',
      'operation',
      'path',
      'ref_numeric',
      'ref_char',
      'description',
      'uid',
      'ip',
      'created',
    ];
    $event_log_track_query = \Drupal::database()
      ->select('event_log_track', 'event_log_track');
    $event_log_track_query
      ->fields('event_log_track', $fields);
    $event_log_track_result = $event_log_track_query
      ->execute();
    while ($event_log_track_row_values = $event_log_track_result
      ->fetchAssoc()) {
      $result = \Drupal::database()
        ->insert('admin_audit_trail')
        ->fields($fields)
        ->values($event_log_track_row_values)
        ->execute();
      unset($result);
    }
  }

  // Uninstall all Event Log Track moduels.
  // ---------------------------------------------------------------------------.
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track_file')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track_file',
    ], FALSE);
  }
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track_media')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track_media',
    ], FALSE);
  }
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track_user')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track_user',
    ], FALSE);
  }
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track_taxonomy')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track_taxonomy',
    ], FALSE);
  }
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track_node')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track_node',
    ], FALSE);
  }
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track_menu')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track_menu',
    ], FALSE);
  }
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track_auth')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track_auth',
    ], FALSE);
  }
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track_workflows')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track_workflows',
    ], FALSE);
  }
  if (\Drupal::moduleHandler()
    ->moduleExists('event_log_track')) {
    \Drupal::service('module_installer')
      ->uninstall([
      'event_log_track',
    ], FALSE);
  }
}

Functions

Namesort descending Description
varbase_admin_install Implements hook_install().
varbase_admin_update_8602 Enable Length Indicator module.
varbase_admin_update_8603 Enable Admin Toolbar Links Access Filter module.
varbase_admin_update_8604 Enable [Events log track] module.
varbase_admin_update_8605 Issue #3152698: Switch from [Event Log Track] to [Admin Audit Trail] module.