multiversion-8.x-1.0-beta34/src/Plugin/migrate/source/TempStore.php
src/Plugin/migrate/source/TempStore.php
<?php
namespace Drupal\multiversion\Plugin\migrate\source;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\KeyValueStore\KeyValueExpirableFactoryInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* User source from json file.
*
* @MigrateSource(
* id = "tempstore"
* )
*/
class TempStore extends SourcePluginBase {
/**
* @var KeyValueStoreExpirableInterface
*/
protected $tempStore;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$migration,
$container->get('entity.manager'),
$container->get('keyvalue.expirable')
);
}
/**
* Constructor.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param MigrationInterface $migration
* The migration.
* @param EntityManagerInterface $entity_manager
* The entity manager.
* @param KeyValueExpirableFactoryInterface $temp_store_factory
* The temp store factory.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityManagerInterface $entity_manager, KeyValueExpirableFactoryInterface $temp_store_factory) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $entity_manager);
$this->tempStore = $temp_store_factory->get('multiversion_migration_' . $this->entityTypeId);
}
/**
* {@inheritdoc}
*/
protected function initializeIterator() {
$values = $this->tempStore->getAll();
$result = new \ArrayIterator($values);
// Suppress errors (for PHP 5).
@$result->uksort([$this, 'sortKeys']);
return $result;
}
/**
* Sorts values by default language, translations in default language will be
* always first. This will make sure that translations in non-default
* languages will be saved after the translation in default language.
*
* @param string $a
* @param string $b
*
* @return int
*/
public static function sortKeys(string $a, string $b) {
$default_language_id = \Drupal::languageManager()->getDefaultLanguage()->getId();
$a_contains_default_language_id = strpos($a, '.' . $default_language_id);
$b_contains_default_language_id = strpos($b, '.' . $default_language_id);
if ($a_contains_default_language_id !== FALSE && $b_contains_default_language_id === FALSE) {
return -1;
}
elseif ($a_contains_default_language_id === FALSE && $b_contains_default_language_id !== FALSE) {
return 1;
}
else {
return 0;
}
}
}
