blacksmith-8.x-1.x-dev/src/Commands/BlacksmithCommands.php
src/Commands/BlacksmithCommands.php
<?php
namespace Drupal\blacksmith\Commands;
use Consolidation\OutputFormatters\StructuredData\RowsOfFields;
use Drupal\blacksmith\Blacksmith\ContentDiscovery;
use Drupal\blacksmith\Blacksmith\ContentImporter;
use Drush\Commands\DrushCommands;
use Exception;
/**
* Class BlacksmithCommands.
*
* @noinspection PhpUnused
*
* @package Drupal\blacksmith\Commands
*/
class BlacksmithCommands extends DrushCommands {
/**
* Blacksmith content discovery service.
*
* @var \Drupal\blacksmith\Blacksmith\ContentDiscovery
*/
protected $contentDiscoverer;
/**
* Blacksmith content importer service.
*
* @var \Drupal\blacksmith\Blacksmith\ContentImporter
*/
protected $contentImporter;
/**
* BlacksmithCommands constructor.
*
* @param \Drupal\blacksmith\Blacksmith\ContentDiscovery $contentDiscoveryService
* Blacksmith content discovery service.
* @param \Drupal\blacksmith\Blacksmith\ContentImporter $contentImporter
* Blacksmith content importer service.
*/
public function __construct(ContentDiscovery $contentDiscoveryService, ContentImporter $contentImporter) {
parent::__construct();
$this->contentDiscoverer = $contentDiscoveryService;
$this->contentImporter = $contentImporter;
}
/**
* Provides the list of content to import and content already imported.
*
* @command blacksmith:status
* @aliases blacksmith-status, bss
* @field-labels
* name: Blacksmith Name
* entity_type: Default entity type
* bundle: Default bundle
* total: Total
* @default-fields name,entity_type,bundle,total
*
* @return \Consolidation\OutputFormatters\StructuredData\RowsOfFields
* Formatted table.
*
* @throws \Exception
* @noinspection PhpUnused
*/
public function statusCommand() : RowsOfFields {
$groups = $this->contentDiscoverer->findAllGroups();
$table = [];
foreach ($groups as $group) {
$table[] = [
'name' => $group->fullLabel(),
'total' => count($group->getItems()),
'entity_type' => $group->getDefault('entity_type'),
'bundle' => $group->getDefault('bundle'),
];
}
return new RowsOfFields($table);
}
/**
* Generate the content based on the source data files.
*
* @param string $groupNames
* Restrict to a comma-separated list of Blacksmith groups (Optional).
*
* @command blacksmith:import
* @aliases blacksmith-import, bsi
* @option group A comma-separated list of migration groups to list
*
* @default $options []
*
* @throws \Exception
* @noinspection PhpUnused
*/
public function importCommand($groupNames = '') : void {
if ($groupNames) {
$groups = explode(',', mb_strtolower($groupNames));
$groups = $this->contentDiscoverer->getGroups($groups);
}
else {
$groups = $this->contentDiscoverer->findAllGroups();
}
foreach ($groups as $group) {
$groupLabel = $group->fullLabel();
$this->io()->write("Importing Blacksmith group : $groupLabel", FALSE);
try {
$this->contentImporter->importGroup($group);
$this->inlineSuccess(' Success!');
}
catch (Exception $exception) {
$this->inlineError(' ERROR!');
$this->io()->error($exception->getMessage());
}
}
}
/**
* Utility method to print a message in green.
*
* @param string $message
* The message we want to display in green.
*/
protected function inlineSuccess($message) : void {
$this->io()->write("\033[0;32m$message\033[0m", FALSE);
$this->io()->writeln('');
}
/**
* Utility method to print a message in red.
*
* @param string $message
* The message we want to display in red.
*/
protected function inlineError($message) : void {
$this->io()->write("\033[0;31m$message\033[0m", FALSE);
$this->io()->writeln('');
}
}
