class GatherContentMigrateSource in GatherContent 8.5
A source class for Gathercontent API.
@\Drupal\migrate\Annotation\MigrateSource( id = "gathercontent_migration" )
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\migrate\Plugin\migrate\source\SourcePluginBase implements RollbackAwareInterface, MigrateSourceInterface
- class \Drupal\gathercontent\Plugin\migrate\source\GatherContentMigrateSource implements ContainerFactoryPluginInterface
- class \Drupal\migrate\Plugin\migrate\source\SourcePluginBase implements RollbackAwareInterface, MigrateSourceInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of GatherContentMigrateSource
File
- src/
Plugin/ migrate/ source/ GatherContentMigrateSource.php, line 24
Namespace
Drupal\gathercontent\Plugin\migrate\sourceView source
class GatherContentMigrateSource extends SourcePluginBase implements ContainerFactoryPluginInterface {
/**
* Project ID.
*
* @var int
*/
protected $projectId;
/**
* Template ID.
*
* @var int
*/
protected $templateId;
/**
* An array of source fields.
*
* @var array
*/
protected $fields = [];
/**
* An array of metatag source fields.
*
* @var array
*/
protected $metatagFields = [];
/**
* Drupal GatherContent Client.
*
* @var \Drupal\gathercontent\DrupalGatherContentClient
*/
protected $client;
/**
* {@inheritdoc}
*/
protected $trackChanges = TRUE;
/**
* {@inheritdoc}
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, DrupalGatherContentClient $client) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
$configFields = [
'projectId',
'templateId',
'fields',
'metatagFields',
];
foreach ($configFields as $configField) {
if (isset($configuration[$configField])) {
$this->{$configField} = $configuration[$configField];
}
else {
throw new MigrateException("The source configuration must include '{$configField}'.");
}
}
$this->client = $client;
}
/**
* {@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('gathercontent.client'));
}
/**
* {@inheritdoc}
*/
public function count($refresh = FALSE) {
return count($this
->getItems());
}
/**
* {@inheritdoc}
*/
public function getIds() {
return [
'id' => [
'type' => 'string',
],
];
}
/**
* Items to import.
*
* @var array
*/
protected $items = NULL;
/**
* {@inheritdoc}
*/
public function __toString() {
return 'Gathercontent migration';
}
/**
* {@inheritdoc}
*/
public function fields() {
return $this->fields;
}
/**
* Get protected values.
*
* @param string $property
* Property name.
*
* @return mixed
* Value of the property.
*/
public function get(string $property) {
return $this->{$property};
}
/**
* Get all items for given project and template.
*
* @return array
* All items.
*/
protected function getItems() {
if ($this->items === NULL) {
$this->items = $this->client
->itemsGet($this->projectId, [
'template_id' => $this->templateId,
]);
// The first response will reveal the total number of pages. If there
// is more than one page, continue until total pages has been reached.
if (!empty($this->items['data'])) {
/** @var \Cheppers\GatherContent\DataTypes\Pagination $pagination */
$pagination = $this->items['pagination'];
$total_pages = $pagination->totalPages;
$current_page = $pagination->currentPage;
while ($current_page <= $total_pages) {
$query = [
'template_id' => $this->templateId,
'page' => $current_page + 1,
];
$next_items = $this->client
->itemsGet($this->projectId, $query);
if (!empty($next_items['data'])) {
$this->items['data'] = array_merge($this->items['data'], $next_items['data']);
}
$current_page++;
}
}
}
return $this
->convertItemsToArray($this->items['data']);
}
/**
* Convert items to array.
*
* @param array $items
* Items to covert.
*
* @return array
* The converted array.
*/
protected function convertItemsToArray(array $items) {
$converted = [];
if ($items !== NULL) {
foreach ($items as $key => $item) {
$converted[$key] = get_object_vars($item);
}
}
return $converted;
}
/**
* Returns the correct files for the gathecontent content.
*
* @param array $gcFiles
* Gathercontent file array.
* @param \Cheppers\GatherContent\DataTypes\Element $field
* Gathercontent field.
*
* @return array
* File list.
*/
protected function getFiles(array $gcFiles, Element $field) {
$value = [];
foreach ($gcFiles as $file) {
if ($file->field == $field->id) {
$value[] = $file;
}
}
return $value;
}
/**
* {@inheritdoc}
*/
protected function initializeIterator() {
return new \ArrayIterator($this
->getItems());
}
/**
* {@inheritdoc}
*/
public function prepareRow(Row $row) {
$ret = parent::prepareRow($row);
if ($ret) {
$collectedMetaTags = [];
$gcId = $row
->getSourceProperty('id');
$gcItem = $this->client
->itemGet($gcId);
if (empty($gcItem)) {
return FALSE;
}
foreach ($gcItem->content as $fieldId => $field) {
$value = $this
->getFieldValue($field);
// Check if the field is for meta tags.
if (array_key_exists($fieldId, $this->metatagFields)) {
$collectedMetaTags[$this->metatagFields[$fieldId]] = $value;
continue;
}
/* @todo This section should be moved to getFieldValue() */
if (is_array($field)) {
foreach ($field as $subObject) {
if ($subObject instanceof ElementSimpleFile) {
/* Entity with image needs to update as the alt_text property of
* the image may have been updated/changed in GatherContent.
*/
if (in_array($fieldId, $this->fields)) {
$idMap = $row
->getIdMap();
$idMap['source_row_status'] = MigrateIdMapInterface::STATUS_NEEDS_UPDATE;
$row
->setIdMap($idMap);
}
continue;
}
$value[] = [
'value' => $this
->getFieldValue($subObject),
];
}
}
$row
->setSourceProperty($fieldId, $value);
}
$row
->setSourceProperty('item_title', $gcItem->name);
if (!empty($collectedMetaTags)) {
$value = $this
->prepareMetatags($collectedMetaTags);
$row
->setSourceProperty('meta_tags', $value);
}
}
return $ret;
}
/**
* Returns the collected metatags values serialized.
*
* @param array $collectedMetaTags
* The collected metatags.
*
* @return string
* Serialized string.
*/
protected function prepareMetatags(array $collectedMetaTags) {
return serialize($collectedMetaTags);
}
/**
* Get field's value.
*
* @param mixed $field
* Field object/objects.
*
* @return array
* Returns value.
*/
protected function getFieldValue($field) {
if (!is_array($field)) {
return $field
->getValue();
}
$value = [];
foreach ($field as $item) {
if ($item instanceof ElementSimpleChoice) {
$value[] = [
'gc_id' => $item->id,
];
}
if ($item instanceof ElementSimpleFile) {
$value[] = $item;
}
}
return $value;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
GatherContentMigrateSource:: |
protected | property | Drupal GatherContent Client. | |
GatherContentMigrateSource:: |
protected | property | An array of source fields. | |
GatherContentMigrateSource:: |
protected | property | Items to import. | |
GatherContentMigrateSource:: |
protected | property | An array of metatag source fields. | |
GatherContentMigrateSource:: |
protected | property | Project ID. | |
GatherContentMigrateSource:: |
protected | property | Template ID. | |
GatherContentMigrateSource:: |
protected | property |
Flags whether to track changes to incoming data. Overrides SourcePluginBase:: |
|
GatherContentMigrateSource:: |
protected | function | Convert items to array. | |
GatherContentMigrateSource:: |
public | function |
Gets the source count. Overrides SourcePluginBase:: |
|
GatherContentMigrateSource:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
GatherContentMigrateSource:: |
public | function |
Returns available fields on the source. Overrides MigrateSourceInterface:: |
|
GatherContentMigrateSource:: |
public | function | Get protected values. | |
GatherContentMigrateSource:: |
protected | function | Get field's value. | |
GatherContentMigrateSource:: |
protected | function | Returns the correct files for the gathecontent content. | |
GatherContentMigrateSource:: |
public | function |
Defines the source fields uniquely identifying a source row. Overrides MigrateSourceInterface:: |
|
GatherContentMigrateSource:: |
protected | function | Get all items for given project and template. | |
GatherContentMigrateSource:: |
protected | function |
Initializes the iterator with the source data. Overrides SourcePluginBase:: |
|
GatherContentMigrateSource:: |
protected | function | Returns the collected metatags values serialized. | |
GatherContentMigrateSource:: |
public | function |
Adds additional data to the row. Overrides SourcePluginBase:: |
|
GatherContentMigrateSource:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides SourcePluginBase:: |
|
GatherContentMigrateSource:: |
public | function |
Allows class to decide how it will react when it is treated like a string. Overrides MigrateSourceInterface:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
SourcePluginBase:: |
protected | property | The backend cache. | |
SourcePluginBase:: |
protected | property | Whether this instance should cache the source count. | 1 |
SourcePluginBase:: |
protected | property | Key to use for caching counts. | |
SourcePluginBase:: |
protected | property | The current row from the query. | |
SourcePluginBase:: |
protected | property | The primary key of the current row. | |
SourcePluginBase:: |
protected | property | Information on the property used as the high-water mark. | |
SourcePluginBase:: |
protected | property | The key-value storage for the high-water value. | |
SourcePluginBase:: |
protected | property | The migration ID map. | |
SourcePluginBase:: |
protected | property | The iterator to iterate over the source rows. | |
SourcePluginBase:: |
protected | property | Flags whether source plugin will read the map row and add to data row. | |
SourcePluginBase:: |
protected | property | The entity migration object. | |
SourcePluginBase:: |
protected | property | The module handler service. | 2 |
SourcePluginBase:: |
protected | property | The high water mark at the beginning of the import operation. | |
SourcePluginBase:: |
protected | property | Whether this instance should not attempt to count the source. | 1 |
SourcePluginBase:: |
protected | function | Check if the incoming data is newer than what we've previously imported. | |
SourcePluginBase:: |
public | function | ||
SourcePluginBase:: |
protected | function | Gets the source count checking if the source is countable or using the iterator_count function. | 1 |
SourcePluginBase:: |
protected | function | Position the iterator to the following row. | 1 |
SourcePluginBase:: |
protected | function | Gets the cache object. | |
SourcePluginBase:: |
public | function | Gets the currentSourceIds data member. | |
SourcePluginBase:: |
protected | function | The current value of the high water mark. | |
SourcePluginBase:: |
protected | function | Get the name of the field used as the high watermark. | |
SourcePluginBase:: |
protected | function | Get information on the property used as the high watermark. | |
SourcePluginBase:: |
protected | function | Get the high water storage object. | 1 |
SourcePluginBase:: |
protected | function | Returns the iterator that will yield the row arrays to be processed. | |
SourcePluginBase:: |
protected | function | Gets the module handler. | |
SourcePluginBase:: |
public | function |
Gets the source module providing the source data. Overrides MigrateSourceInterface:: |
|
SourcePluginBase:: |
public | function | Gets the iterator key. | |
SourcePluginBase:: |
public | function | The migration iterates over rows returned by the source plugin. This method determines the next row which will be processed and imported into the system. | |
SourcePluginBase:: |
public | function |
Performs post-rollback tasks. Overrides RollbackAwareInterface:: |
|
SourcePluginBase:: |
public | function |
Performs pre-rollback tasks. Overrides RollbackAwareInterface:: |
|
SourcePluginBase:: |
public | function | Rewinds the iterator. | |
SourcePluginBase:: |
protected | function | Checks if the incoming row has changed since our last import. | |
SourcePluginBase:: |
protected | function | Save the new high water mark. | |
SourcePluginBase:: |
public | function | Checks whether the iterator is currently valid. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |