migrate_plus-8.x-5.x-dev/src/Plugin/migrate/source/Url.php
src/Plugin/migrate/source/Url.php
<?php
declare(strict_types=1);
namespace Drupal\migrate_plus\Plugin\migrate\source;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\migrate_plus\DataParserPluginInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Drupal\migrate_plus\DataParserPluginManager;
/**
* Source plugin for retrieving data via URLs.
*
* @MigrateSource(
* id = "url"
* )
*/
class Url extends SourcePluginExtension implements ContainerFactoryPluginInterface {
/**
* The source URLs to retrieve.
*
* @var array
*/
protected array $sourceUrls = [];
/**
* The data parser plugin.
*
* @var \Drupal\migrate_plus\DataParserPluginInterface
*/
protected DataParserPluginInterface $dataParserPlugin;
/**
* {@inheritdoc}
*/
public function __construct(
array $configuration,
$plugin_id,
$plugin_definition,
MigrationInterface $migration,
protected DataParserPluginManager $parserPluginManager,
) {
if (!is_array($configuration['urls'])) {
$configuration['urls'] = [$configuration['urls']];
}
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
$this->sourceUrls = $configuration['urls'];
}
/**
* {@inheritdoc}
*/
public static function create($container, array $configuration, $plugin_id, $plugin_definition, ?MigrationInterface $migration = NULL) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$migration,
$container->get('plugin.manager.migrate_plus.data_parser'),
);
}
/**
* Return a string representing the source URLs.
*
* @return string
* Comma-separated list of URLs being imported.
*/
public function __toString(): string {
// This could cause a problem when using a lot of urls, may need to hash.
$urls = implode(', ', $this->sourceUrls);
return $urls;
}
/**
* Returns the initialized data parser plugin.
*
* The data parser plugin.
*/
public function getDataParserPlugin(): DataParserPluginInterface {
if (!isset($this->dataParserPlugin)) {
$this->dataParserPlugin = $this->parserPluginManager->createInstance($this->configuration['data_parser_plugin'], $this->configuration);
}
return $this->dataParserPlugin;
}
/**
* Creates and returns a filtered Iterator over the documents.
*
* An iterator over the documents providing source rows that match the
* configured item_selector.
*/
protected function initializeIterator(): DataParserPluginInterface {
return $this->getDataParserPlugin();
}
}
