SourcePluginBase
abstract class SourcePluginBase extends PluginBase implements MigrateSourceInterface, RollbackAwareInterface (View source)
The base class for source plugins.
The migration uses the next() method to iterate over rows returned by the source plugin. Information about the row is also tracked using the ID map plugin. For each row, the corresponding tracked map row, if it exists, is deleted before allowing modification to the source row. Then, source plugins can modify the row using the prepareRow() method, which also invokes hook_prepare_row(). The row is now prepared and we can decide if it will be processed.
To be processed the row must meet any of these conditions:
- The row has not already been imported.
- This is indicated by an incomplete map row with the status set to \Drupal\migrate\Plugin\MigrateIdMapInterface::STATUS_NEEDS_UPDATE.
- The row needs an update.
- Rows can be marked by custom or contrib modules using the \Drupal\migrate\Plugin\MigrateIdMapInterface::prepareUpdate() os \Drupal\migrate\Plugin\MigrateIdMapInterface::setUpdate() methods.
- The row is above the high-water mark.
- The high-water mark is the highest encountered value of the property defined by the configuration key high_water_property.
- The source row has changed.
- A row is considered changed only if the track_changes property is set on the source plugin and the source values for the row have changed since the last import.
When set to be processed, the row is also marked frozen and no further changes to the row source properties are allowed. The last step is to set the high-water value, if high water is in use.
Available configuration keys:
- cache_counts: (optional) If set, cache the source count.
- cache_key: (optional) Uniquely named cache key used for cache_counts.
- skip_count: (optional) If set, do not attempt to count the source.
- track_changes: (optional) If set, track changes to incoming data.
- high_water_property: (optional) It is an array of name & alias values (optional table alias). This high_water_property is typically a timestamp or serial id showing what was the last imported record. Only content with a higher value will be imported.
- constants: (optional) An array of constants that can be used in the process pipeline. To use the constant 'foo' as a source value use 'constants/foo'.
The high_water_property and track_changes are mutually exclusive.
Example:
Traits
Wrapper methods for \Drupal\Core\StringTranslation\TranslationInterface.
Provides dependency injection friendly methods for serialization.
Provides a trait for the messenger service.
Constants
| DERIVATIVE_SEPARATOR |
A string which is used to separate base plugin IDs from the derivative ID. |
Properties
| protected string | $pluginId | The plugin_id. |
from PluginBase |
| protected array | $pluginDefinition | The plugin implementation definition. |
from PluginBase |
| protected array | $configuration | Configuration information passed into the plugin. |
from PluginBase |
| protected TranslationInterface | $stringTranslation | The string translation service. |
from StringTranslationTrait |
| protected array | $_serviceIds | An array of service IDs keyed by property name used for serialization. |
from DependencySerializationTrait |
| protected array | $_entityStorages | An array of entity type IDs keyed by the property name of their storages. |
from DependencySerializationTrait |
| protected MessengerInterface | $messenger | The messenger. |
from MessengerTrait |
| protected ModuleHandlerInterface | $moduleHandler | The module handler service. |
|
| protected MigrationInterface | $migration | The entity migration object. |
|
| protected Row | $currentRow | The current row from the query. |
|
| protected array | $currentSourceIds | The primary key of the current row. |
|
| protected array | $highWaterProperty | Information on the property used as the high-water mark. |
|
| protected KeyValueStoreInterface | $highWaterStorage | The key-value storage for the high-water value. |
|
| protected int | $originalHighWater | The high water mark at the beginning of the import operation. |
|
| protected bool | $cacheCounts | Whether this instance should cache the source count. |
|
| protected string | $cacheKey | Key to use for caching counts. |
|
| protected bool | $skipCount | Whether this instance should not attempt to count the source. |
|
| protected bool | $trackChanges | Flags whether to track changes to incoming data. |
|
| protected bool | $mapRowAdded | Flags whether source plugin will read the map row and add to data row. |
|
| protected CacheBackendInterface | $cache | The backend cache. |
|
| protected MigrateIdMapInterface | $idMap | The migration ID map. |
|
| protected Iterator | $iterator | The iterator to iterate over the source rows. |
Methods
Constructs a \Drupal\Component\Plugin\PluginBase object.
Translates a string to the current language or to a given language.
Formats a string containing a count of items.
Returns the number of plurals supported by a given language.
Gets the string translation service.
Initializes the iterator with the source data.
Gets the module handler.
Returns the iterator that will yield the row arrays to be processed.
{@inheritdoc}
Gets the iterator key.
Checks whether the iterator is currently valid.
Rewinds the iterator.
{@inheritdoc}
Position the iterator to the following row.
Gets the currentSourceIds data member.
Gets the source count.
Gets the cache object.
Gets the source count checking if the source is countable or using the iterator_count function.
Get the high water storage object.
The current value of the high water mark.
Save the new high water mark.
Get information on the property used as the high watermark.
Get the name of the field used as the high watermark.
Gets the source module providing the source data.
Details
__construct(array $configuration, string $plugin_id, mixed $plugin_definition, MigrationInterface $migration)
Constructs a \Drupal\Component\Plugin\PluginBase object.
string
getPluginId()
Gets the plugin_id of the plugin instance.
string
getBaseId()
Gets the base_plugin_id of the plugin instance.
string|null
getDerivativeId()
Gets the derivative_id of the plugin instance.
array
getPluginDefinition()
Gets the definition of the plugin implementation.
bool
isConfigurable()
Determines if the plugin is configurable.
protected TranslatableMarkup
t(string $string, array $args = [], array $options = [])
Translates a string to the current language or to a given language.
See \Drupal\Core\StringTranslation\TranslatableMarkup::__construct() for important security information and usage guidelines.
In order for strings to be localized, make them available in one of the ways supported by the
protected
formatPlural($count, $singular, $plural, array $args = [], array $options = [])
Formats a string containing a count of items.
protected
getNumberOfPlurals($langcode = NULL)
Returns the number of plurals supported by a given language.
protected TranslationInterface
getStringTranslation()
Gets the string translation service.
$this
setStringTranslation(TranslationInterface $translation)
Sets the string translation service to use.
__sleep()
{@inheritdoc}
__wakeup()
{@inheritdoc}
setMessenger(MessengerInterface $messenger)
Sets the messenger.
MessengerInterface
messenger()
Gets the messenger.
abstract protected Iterator
initializeIterator()
Initializes the iterator with the source data.
protected ModuleHandlerInterface
getModuleHandler()
Gets the module handler.
bool
prepareRow(Row $row)
Adds additional data to the row.
protected Iterator
getIterator()
Returns the iterator that will yield the row arrays to be processed.
current()
{@inheritdoc}
key()
Gets the iterator key.
Implementation of \Iterator::key() - called when entering a loop iteration, returning the key of the current row. It must be a scalar - we will serialize to fulfill the requirement, but using getCurrentIds() is preferable.
valid()
Checks whether the iterator is currently valid.
Implementation of \Iterator::valid() - called at the top of the loop, returning TRUE to process the loop and FALSE to terminate it.
rewind()
Rewinds the iterator.
Implementation of \Iterator::rewind() - subclasses of SourcePluginBase should implement initializeIterator() to do any class-specific setup for iterating source records.
next()
{@inheritdoc}
protected
fetchNextRow()
Position the iterator to the following row.
protected bool
aboveHighWater(Row $row)
Check if the incoming data is newer than what we've previously imported.
protected bool
rowChanged(Row $row)
Checks if the incoming row has changed since our last import.
getCurrentIds()
Gets the currentSourceIds data member.
int
count(bool $refresh = FALSE)
Gets the source count.
Return a count of available source records, from the cache if appropriate. Returns MigrateSourceInterface::NOT_COUNTABLE if the source is not countable.
protected CacheBackendInterface
getCache()
Gets the cache object.
protected int
doCount()
Gets the source count checking if the source is countable or using the iterator_count function.
protected KeyValueStoreInterface
getHighWaterStorage()
Get the high water storage object.
protected int|null
getHighWater()
The current value of the high water mark.
The high water mark defines a timestamp stating the time the import was last run. If the mark is set, only content with a higher timestamp will be imported.
protected
saveHighWater(int $high_water)
Save the new high water mark.
protected array
getHighWaterProperty()
Get information on the property used as the high watermark.
Array of 'name' & (optional) db 'alias' properties used for high watermark.
protected string|null
getHighWaterField()
Get the name of the field used as the high watermark.
The name of the field qualified with an alias if available.
preRollback(MigrateRollbackEvent $event)
Performs pre-rollback tasks.
postRollback(MigrateRollbackEvent $event)
Performs post-rollback tasks.
string|null
getSourceModule()
Gets the source module providing the source data.