Seth Shaw
6 years ago
committed by
dannylamb
2 changed files with 87 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||||
|
services: |
||||||
|
islandora.commands: |
||||||
|
class: \Drupal\islandora\Commands\IslandoraCommands |
||||||
|
tags: |
||||||
|
- { name: drush.command } |
@ -0,0 +1,82 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace Drupal\islandora\Commands; |
||||||
|
|
||||||
|
use Consolidation\AnnotatedCommand\CommandData; |
||||||
|
use Drupal\Core\Session\UserSession; |
||||||
|
use Drupal\user\Entity\User; |
||||||
|
use Drush\Commands\DrushCommands; |
||||||
|
|
||||||
|
/** |
||||||
|
* Adds a userid option to migrate:import. |
||||||
|
* |
||||||
|
* ... because the --user option was removed from drush 9. |
||||||
|
*/ |
||||||
|
class IslandoraCommands extends DrushCommands { |
||||||
|
|
||||||
|
/** |
||||||
|
* Add the userid option. |
||||||
|
* |
||||||
|
* @hook option migrate:import |
||||||
|
* @option userid User ID to run the migration. |
||||||
|
*/ |
||||||
|
public function optionsetImportUser($options = ['userid' => self::REQ]) { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Validate the provided userid. |
||||||
|
* |
||||||
|
* @hook validate migrate:import |
||||||
|
*/ |
||||||
|
public function validateUser(CommandData $commandData) { |
||||||
|
$userid = $commandData->input()->getOption('userid'); |
||||||
|
if ($userid) { |
||||||
|
$account = User::load($userid); |
||||||
|
if (!$account) { |
||||||
|
throw new \Exception("User ID does not match an existing user."); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Switch the active user account to perform the import. |
||||||
|
* |
||||||
|
* @hook pre-command migrate:import |
||||||
|
*/ |
||||||
|
public function preImport(CommandData $commandData) { |
||||||
|
$userid = $commandData->input()->getOption('userid'); |
||||||
|
if ($userid) { |
||||||
|
$account = User::load($userid); |
||||||
|
$accountSwitcher = \Drupal::service('account_switcher'); |
||||||
|
$userSession = new UserSession([ |
||||||
|
'uid' => $account->id(), |
||||||
|
'name' => $account->getUsername(), |
||||||
|
'roles' => $account->getRoles(), |
||||||
|
]); |
||||||
|
$accountSwitcher->switchTo($userSession); |
||||||
|
$this->logger()->notice( |
||||||
|
dt( |
||||||
|
'Now acting as user ID @id', |
||||||
|
['@id' => \Drupal::currentUser()->id()] |
||||||
|
) |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Switch the user back once the migration is complete. |
||||||
|
* |
||||||
|
* @hook post-command migrate:import |
||||||
|
*/ |
||||||
|
public function postImport($result, CommandData $commandData) { |
||||||
|
if ($commandData->input()->getOption('userid')) { |
||||||
|
$accountSwitcher = \Drupal::service('account_switcher'); |
||||||
|
$this->logger()->notice(dt( |
||||||
|
'Switching back from user @uid.', |
||||||
|
['@uid' => \Drupal::currentUser()->id()] |
||||||
|
)); |
||||||
|
$accountSwitcher->switchBack(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue