BatchImportProcessor.php in Content Synchronizer 8
File
src/Processors/BatchImportProcessor.php
View source
<?php
namespace Drupal\content_synchronizer\Processors;
use Drupal\content_synchronizer\Base\BatchProcessorBase;
use Drupal\content_synchronizer\Entity\ImportEntity;
class BatchImportProcessor extends BatchProcessorBase {
protected $entitiesToImport;
public function import(ImportEntity $import, array $entitiesToImport, $finishCallBack = NULL, $creationType = ImportProcessor::PUBLICATION_UNPUBLISH, $updateType = ImportProcessor::UPDATE_IF_RECENT) {
$operations = $this
->getBatchOperations($import, $entitiesToImport, $finishCallBack, $creationType, $updateType);
$batch = [
'title' => t('Importing entities...'),
'operations' => $operations,
'finished' => get_called_class() . '::onFinishBatchProcess',
];
batch_set($batch);
}
public function setEntitiesToImport(array $entitiesToImport) {
$this->entitiesToImport = $entitiesToImport;
}
protected function getBatchOperations(ImportEntity $import, array $entitiesToImport, $finishCallBack = NULL, $creationType = ImportProcessor::PUBLICATION_UNPUBLISH, $updateType = ImportProcessor::UPDATE_IF_RECENT) {
$operations = [];
foreach ($entitiesToImport as $data) {
$data['finishCallback'] = $finishCallBack;
$data['importId'] = $import
->id();
$data['creationType'] = $creationType;
$data['updateType'] = $updateType;
$operations[] = [
get_called_class() . '::processBatchOperation',
[
$data,
],
];
}
return $operations;
}
public static function processBatchOperation(array $data, array $context) {
$importProcessor = new ImportProcessor(ImportEntity::load($data['importId']));
$importProcessor
->setCreationType($data['creationType']);
$importProcessor
->setUpdateType($data['updateType']);
$importProcessor
->importEntityFromRootData($data);
$context['results']['finishCallback'] = $data['finishCallback'];
}
public static function onFinishBatchProcess($success, $results, $operations) {
if (array_key_exists('finishCallback', $results)) {
self::callFinishCallback($results['finishCallback'], $results);
}
}
}