multiversion-8.x-1.0-beta34/multiversion.drush.inc

multiversion.drush.inc
<?php

use Drupal\Core\Entity\ContentEntityTypeInterface;
use Psr\Log\LogLevel;

/**
 * Implements of hook_drush_command().
 */
function multiversion_drush_command() {
  $items = [];

  $items['multiversion-uninstall'] = [
    'bootstrap' => DRUSH_BOOTSTRAP_NONE,
    'description' => 'Uninstall Multiversion.',
    'aliases' => ['mun'],
  ];

  $items['multiversion-enable-entity-types'] = [
    'bootstrap' => DRUSH_BOOTSTRAP_NONE,
    'description' => 'Enable entity types (make them multiversionable).',
    'arguments' => [
      'entity_types' => dt('The list of entity types, comma or space separated.'),
    ],
    'examples' => [
      'drush multiversion-enable-entity-types my_et' => 'Makes my_et entity type multiversionable.',
      'drush multiversion-enable-entity-types my_et my_et2' => 'Makes my_et and my_et2 entity types multiversionable.',
      'drush met my_et' => 'Makes my_et entity type multiversionable.',
      'drush met my_et my_et2' => 'Makes my_et and my_et2 entity types multiversionable.',
    ],
    'aliases' => ['met'],
  ];

  $items['multiversion-disable-entity-types'] = [
    'bootstrap' => DRUSH_BOOTSTRAP_NONE,
    'description' => 'Disable entity types (make them non-multiversionable).',
    'arguments' => [
      'entity_types' => dt('The list of entity types, comma or space separated.'),
    ],
    'examples' => [
      'drush multiversion-disable-entity-types my_et' => 'Makes my_et entity type non-multiversionable.',
      'drush multiversion-disable-entity-types my_et1 my_et2' => 'Makes my_et and my_et2 entity types non-multiversionable.',
      'drush mdt my_et' => 'Makes my_et entity type non-multiversionable.',
      'drush mdt my_et1 my_et2' => 'Makes my_et and my_et2 entity types non-multiversionable.',
    ],
    'aliases' => ['mdt'],
  ];

  return $items;
}

/**
 * Implements drush_hook_COMMAND().
 */
function drush_multiversion_uninstall() {
  $extension = 'multiversion';
  $uninstall = TRUE;
  $extension_info = drush_get_extensions();
  $required = drush_drupal_required_modules($extension_info);
  if (in_array($extension, $required)) {
    $info = $extension_info[$extension]->info;
    $explanation = !empty($info['explanation']) ? ' ' . dt('Reason: !explanation.', ['!explanation' => strip_tags($info['explanation'])])  : '';
    drush_log(dt('!extension is a required extension and can\'t be uninstalled.', ['!extension' => $extension]) . $explanation, LogLevel::INFO);
    $uninstall = FALSE;
  }
  elseif (!$extension_info[$extension]->status) {
    drush_log(dt('!extension is already uninstalled.', ['!extension' => $extension]), LogLevel::INFO);
    $uninstall = FALSE;
  }
  elseif (drush_extension_get_type($extension_info[$extension]) == 'module') {
    $dependents = [];
    foreach (drush_module_dependents([$extension], $extension_info) as $dependent) {
      if (!in_array($dependent, $required) && ($extension_info[$dependent]->status)) {
        $dependents[] = $dependent;
      }
    }
    if (count($dependents)) {
      drush_log(dt('To uninstall !extension, the following extensions must be uninstalled first: !required', ['!extension' => $extension, '!required' => implode(', ', $dependents)]), LogLevel::ERROR);
      $uninstall = FALSE;
    }
  }

  if ($uninstall) {
    drush_print(dt('Multiversion will be uninstalled.'));
    if(!drush_confirm(dt('Do you really want to continue?'))) {
      return drush_user_abort();
    }

    drush_log('*** ' . dt('The uninstall process can take a few minutes, it depends by the number of entities on the site. Please be patient.'), LogLevel::WARNING);

    try {
      \Drupal::service('multiversion.manager')->disableEntityTypes();
      // Delete workspace entities before uninstall.
      $storage = \Drupal::entityTypeManager()->getStorage('workspace');
      $entities = $storage->loadMultiple();
      $storage->delete($entities);
      drush_module_uninstall(['multiversion']);
    }
    catch (Exception $e) {
      drush_log($e->getMessage(), LogLevel::ERROR);
    }

    // Inform the user of final status.
    drush_log(dt('!extension was successfully uninstalled.', ['!extension' => $extension]), LogLevel::INFO);
  }

}

/**
 * Implements drush_hook_COMMAND().
 */
function drush_multiversion_enable_entity_types() {
  $args = pm_parse_arguments(func_get_args());
  if (empty($args)) {
    drush_log(dt('Entity types list argument is missing.'), LogLevel::ERROR);
  }
  elseif ($entity_types = _drush_multiversion_get_entity_types($args)) {
    if(!drush_confirm(dt('Do you really want to continue?'))) {
      return drush_user_abort();
    }
    try {
      $multiversion_settings = \Drupal::configFactory()->getEditable('multiversion.settings');
      $supported_entity_types = $multiversion_settings->get('supported_entity_types') ?: [];
      foreach (array_keys($entity_types) as $id) {
        if (!in_array($id, $supported_entity_types)) {
          $supported_entity_types[] = $id;
        }
      }
      // Add new entity types to the supported entity types list.
      $multiversion_settings
        ->set('supported_entity_types', $supported_entity_types)
        ->save();
      \Drupal::service('multiversion.manager')->enableEntityTypes($entity_types);
    }
    catch (Exception $e) {
      drush_log($e->getMessage(), LogLevel::ERROR);
    }
  }
}

/**
 * Implements drush_hook_COMMAND().
 */
function drush_multiversion_disable_entity_types() {
  $args = pm_parse_arguments(func_get_args());
  if (empty($args)) {
    $args = \Drupal::config('multiversion.settings')->get('enabled_entity_types') ?: [];
    if (!drush_confirm(dt('Do you really want to disable all enabled entity types (!entity_types)?', [
      '!entity_types' => implode(', ', array_keys(_drush_multiversion_get_entity_types($args))),
    ]))) {
      return drush_user_abort();
    }
  }
  else {
    if (!drush_confirm(dt('Do you really want to continue?'))) {
      return drush_user_abort();
    }
  }
  if (!empty($args) && $entity_types = _drush_multiversion_get_entity_types($args)) {
    try {
      \Drupal::service('multiversion.manager')->disableEntityTypes($entity_types);
    }
    catch (Exception $e) {
      drush_log($e->getMessage(), LogLevel::ERROR);
    }
  }
}

function _drush_multiversion_get_entity_types($entity_type_ids) {
  $entity_types = [];
  $manager = \Drupal::entityTypeManager();
  foreach ($entity_type_ids as $id) {
    try {
      $entity_type = $manager->getStorage($id)->getEntityType();
      if ($entity_type instanceof ContentEntityTypeInterface) {
        $entity_types[$id] = $entity_type;
      }
    }
    catch (Exception $e) {
      drush_log($e->getMessage(), LogLevel::INFO);
    }
  }

  return $entity_types;
}

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

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