class MigrateSourceMultiItems in Migrate 7.2
Same name and namespace in other branches
- 6.2 plugins/sources/multiitems.inc \MigrateSourceMultiItems
Implementation of MigrateSource, providing the semantics of iterating over IDs provided by a MigrateItems and retrieving data from a MigrateItems.
Hierarchy
- class \MigrateSource implements \Iterator
- class \MigrateSourceMultiItems
Expanded class hierarchy of MigrateSourceMultiItems
File
- plugins/
sources/ multiitems.inc, line 75 - Support for migration from sources where data spans multiple lines (ex. xml, json) and IDs for the items are part of each item and multiple items reside in a single file.
View source
class MigrateSourceMultiItems extends MigrateSource {
/**
* MigrateItems object used to obtain the list of IDs and source for
* all objects.
*
* @var MigrateItems
*/
protected $itemsClass;
/**
* List of available source fields.
*
* @var array
*/
protected $fields = array();
/**
* Iterator of IDs from the listing class.
*
* @var Iterator
*/
protected $idIterator;
/**
* List of item IDs to iterate.
*
* @var array
*/
protected $idsToProcess = array();
/**
* Simple initialization.
*/
public function __construct(MigrateItems $items_class, $fields = array(), $options = array()) {
parent::__construct($options);
$this->itemsClass = $items_class;
$this->fields = $fields;
}
/**
* Return a string representing the source.
*
* @return string
*/
public function __toString() {
return (string) $this->itemsClass;
}
/**
* Returns a list of fields available to be mapped from the source query.
* Since we can't reliably figure out what "fields" are in the source,
* it's up to the implementing Migration constructor to fill them in.
*
* @return array
* Keys: machine names of the fields (to be passed to addFieldMapping)
* Values: Human-friendly descriptions of the fields.
*/
public function fields() {
return $this->fields;
}
/**
* It's the list class that knows how many records are available, so ask it.
*
* @return int
*/
public function computeCount() {
// @API: Support old count method for now.
if (method_exists($this->itemsClass, 'computeCount')) {
return $this->itemsClass
->computeCount();
}
else {
return $this->itemsClass
->count();
}
}
/**
* Implementation of MigrateSource::performRewind().
*
* @return void
*/
public function performRewind() {
// If there isn't a specific ID list passed in, get it from the list class.
if ($this->idList) {
$this->idsToProcess = $this->idList;
}
elseif (!($this->idsToProcess = $this->itemsClass
->getIdList())) {
$this->idsToProcess = array();
}
$this->idIterator = $this->idsToProcess instanceof Iterator ? $this->idsToProcess : new ArrayIterator($this->idsToProcess);
$this->idIterator
->rewind();
}
/**
* Implementation of MigrateSource::getNextRow().
*
* @return null|stdClass
*/
public function getNextRow() {
$row = NULL;
while ($this->idIterator
->valid()) {
$id = $this->idIterator
->current();
$this->idIterator
->next();
// Skip empty IDs
if (empty($id)) {
continue;
}
// Got a good ID, get the data and get out.
$row = $this->itemsClass
->getItem($id);
if ($row) {
// Save the ID using the map source key - it will be used for mapping
$sourceKey = $this->activeMap
->getSourceKey();
$key_name = key($sourceKey);
$row->{$key_name} = $id;
break;
}
}
return $row;
}
/**
* Overrides MigrateSource::hash().
*/
protected function hash($row) {
// Let the item class override the default hash function.
if (method_exists($this->itemsClass, 'hash')) {
$hash = $this->itemsClass
->hash($row);
}
else {
$hash = parent::hash($row);
}
return $hash;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
MigrateSource:: |
protected | property | The MigrateMap class for the current migration. | |
MigrateSource:: |
protected | property | The Migration class currently invoking us, during rewind() and next(). | |
MigrateSource:: |
protected | property | Whether this instance should cache the source count. | |
MigrateSource:: |
protected | property | Key to use for caching counts. | |
MigrateSource:: |
protected | property | The primary key of the current row | |
MigrateSource:: |
protected | property | The current row from the quey | |
MigrateSource:: |
protected | property | Information on the highwater mark for the current migration, if any. | |
MigrateSource:: |
protected | property | List of source IDs to process. | |
MigrateSource:: |
protected | property | By default, next() will directly read the map row and add it to the data row. A source plugin implementation may do this itself (in particular, the SQL source can incorporate the map table into the query) - if so, it should set this TRUE so we… | |
MigrateSource:: |
protected | property | Used in the case of multiple key sources that need to use idlist. | |
MigrateSource:: |
protected | property | Number of rows intentionally ignored (prepareRow() returned FALSE) | |
MigrateSource:: |
protected | property | Number of rows we've at least looked at. | 1 |
MigrateSource:: |
protected | property | The highwater mark at the beginning of the import operation. | |
MigrateSource:: |
protected | property | Whether this instance should not attempt to count the source. | |
MigrateSource:: |
protected | property | If TRUE, we will maintain hashed source rows to determine whether incoming data has changed. | |
MigrateSource:: |
public | function | Return a count of available source records, from the cache if appropriate. Returns -1 if the source is not countable. | |
MigrateSource:: |
public | function | Implementation of Iterator::current() - called when entering a loop iteration, returning the current row | |
MigrateSource:: |
protected | function | Determine whether this row has changed, and therefore whether it should be processed. | |
MigrateSource:: |
public | function | ||
MigrateSource:: |
public | function | ||
MigrateSource:: |
public | function | ||
MigrateSource:: |
public | function | 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 getCurrentKey() is preferable. | |
MigrateSource:: |
public | function | Implementation of Iterator::next() - subclasses of MigrateSource should implement getNextRow() to retrieve the next valid source rocord to process. | |
MigrateSource:: |
protected | function | Give the calling migration a shot at manipulating, and possibly rejecting, the source row. | |
MigrateSource:: |
public | function | Reset numIgnored back to 0. | |
MigrateSource:: |
public | function | Implementation of Iterator::rewind() - subclasses of MigrateSource should implement performRewind() to do any class-specific setup for iterating source records. | |
MigrateSource:: |
public | function | Implementation of Iterator::valid() - called at the top of the loop, returning TRUE to process the loop and FALSE to terminate it | |
MigrateSourceMultiItems:: |
protected | property | List of available source fields. | |
MigrateSourceMultiItems:: |
protected | property | Iterator of IDs from the listing class. | |
MigrateSourceMultiItems:: |
protected | property | List of item IDs to iterate. | |
MigrateSourceMultiItems:: |
protected | property | MigrateItems object used to obtain the list of IDs and source for all objects. | |
MigrateSourceMultiItems:: |
public | function | It's the list class that knows how many records are available, so ask it. | |
MigrateSourceMultiItems:: |
public | function |
Returns a list of fields available to be mapped from the source query.
Since we can't reliably figure out what "fields" are in the source,
it's up to the implementing Migration constructor to fill them in. Overrides MigrateSource:: |
|
MigrateSourceMultiItems:: |
public | function | Implementation of MigrateSource::getNextRow(). | |
MigrateSourceMultiItems:: |
protected | function |
Overrides MigrateSource::hash(). Overrides MigrateSource:: |
|
MigrateSourceMultiItems:: |
public | function | Implementation of MigrateSource::performRewind(). | |
MigrateSourceMultiItems:: |
public | function |
Simple initialization. Overrides MigrateSource:: |
|
MigrateSourceMultiItems:: |
public | function | Return a string representing the source. |