public function ContentSyncCommands::export in Content Synchronization 3.0.x
Same name and namespace in other branches
- 8.2 src/Commands/ContentSyncCommands.php \Drupal\content_sync\Commands\ContentSyncCommands::export()
Export Drupal content to a directory.
@command content-sync:export @interact-config-label @option entity-types A list of entity type names separated by commas. @option uuids A list of UUIDs separated by commas. @option actions A list of Actions separated by commas. @option files A value none/base64/folder - default folder. @option include-dependencies export content dependencies. @option skiplist skip the change list before proceed with the export. @usage drush content-sync-export. @aliases cse,content-sync-export.
Parameters
string|null $label: A content directory label (i.e. a key in $content_directories array in settings.php).
array $options: The command options.
File
- src/
Commands/ ContentSyncCommands.php, line 299
Class
- ContentSyncCommands
- A Drush commandfile.
Namespace
Drupal\content_sync\CommandsCode
public function export($label = NULL, array $options = [
'entity-types' => '',
'uuids' => '',
'actions' => '',
'files' => '',
'include-dependencies' => FALSE,
'skiplist' => FALSE,
]) {
//Generate comparer with filters.
$storage_comparer = new ContentStorageComparer($this->contentStorage, $this->contentStorageSync, $this->configManager);
$change_list = [];
$collections = $storage_comparer
->getAllCollectionNames();
if (!empty($options['entity-types'])) {
$entity_types = explode(',', $options['entity-types']);
$match_collections = [];
foreach ($entity_types as $entity_type) {
$match_collections = $match_collections + preg_grep('/^' . $entity_type . '/', $collections);
}
$collections = $match_collections;
}
foreach ($collections as $collection) {
if (!empty($options['uuids'])) {
$storage_comparer
->createChangelistbyCollectionAndNames($collection, $options['uuids']);
}
else {
$storage_comparer
->createChangelistbyCollection($collection);
}
if (!empty($options['actions'])) {
$actions = explode(',', $options['actions']);
foreach ($actions as $op) {
if (in_array($op, [
'create',
'update',
'delete',
])) {
$change_list[$collection][$op] = $storage_comparer
->getChangelist($op, $collection);
}
}
}
else {
$change_list[$collection] = $storage_comparer
->getChangelist(NULL, $collection);
}
$change_list = array_map('array_filter', $change_list);
$change_list = array_filter($change_list);
}
unset($change_list['']);
// Display the change list.
if (empty($options['skiplist'])) {
//Show differences
$this
->output()
->writeln("Differences of the active content to the export directory:\n");
// Print a table with changes in color.
$table = self::contentChangesTable($change_list, $this
->output());
$table
->render();
// Ask to continue
if (!$this
->io()
->confirm(dt('Do you want to export?'))) {
throw new UserAbortException();
}
}
//Process the Export.
$entities_list = [];
foreach ($change_list as $collection => $changes) {
//$storage_comparer->getTargetStorage($collection)->deleteAll();
foreach ($changes as $change => $contents) {
switch ($change) {
case 'delete':
foreach ($contents as $content) {
$storage_comparer
->getTargetStorage($collection)
->delete($content);
}
break;
case 'update':
case 'create':
foreach ($contents as $content) {
//$data = $storage_comparer->getSourceStorage($collection)->read($content);
//$storage_comparer->getTargetStorage($collection)->write($content, $data);
$entity = explode('.', $content);
$entities_list[] = [
'entity_type' => $entity[0],
'entity_uuid' => $entity[2],
];
}
break;
}
}
}
// Files options
$include_files = self::processFilesOption($options);
// Set the Export Batch
if (!empty($entities_list)) {
$batch = $this
->generateExportBatch($entities_list, [
'export_type' => 'folder',
'include_files' => $include_files,
'include_dependencies' => $options['include-dependencies'],
]);
batch_set($batch);
drush_backend_batch_process();
}
}