175 lines
5.6 KiB
PHP
175 lines
5.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Defines base for migration destinations implemented as Drupal entities.
|
|
*/
|
|
|
|
/**
|
|
* Abstract base class for entity-based destination handling. Holds common
|
|
* Field API-related functions.
|
|
*/
|
|
abstract class MigrateDestinationEntity extends MigrateDestination {
|
|
/**
|
|
* The entity type (node, user, taxonomy_term, etc.) of the destination.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $entityType;
|
|
public function getEntityType() {
|
|
return $this->entityType;
|
|
}
|
|
|
|
/**
|
|
* The bundle (node type, vocabulary, etc.) of the destination.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $bundle;
|
|
public function getBundle() {
|
|
return $this->bundle;
|
|
}
|
|
|
|
/**
|
|
* Default language for text fields in this destination.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $language;
|
|
public function getLanguage() {
|
|
return $this->language;
|
|
}
|
|
|
|
/**
|
|
* Default input format for text fields in this destination.
|
|
*
|
|
* @var int
|
|
*/
|
|
protected $textFormat;
|
|
public function getTextFormat() {
|
|
return $this->textFormat;
|
|
}
|
|
|
|
/**
|
|
* Simply save the key schema.
|
|
*
|
|
* @param array $key_schema
|
|
*/
|
|
public function __construct($entity_type, $bundle, array $options = array()) {
|
|
parent::__construct();
|
|
$this->entityType = $entity_type;
|
|
$this->bundle = $bundle;
|
|
$this->language = isset($options['language']) ? $options['language'] : LANGUAGE_NONE;
|
|
$this->textFormat = isset($options['text_format']) ? $options['text_format'] : filter_fallback_format();
|
|
}
|
|
|
|
public function __toString() {
|
|
// TODO: Link to configuration page
|
|
if ($this->entityType == $this->bundle) {
|
|
$output = t('%type', array('%type' => $this->entityType));
|
|
}
|
|
else {
|
|
$output = t('%type (%bundle)',
|
|
array('%type' => $this->entityType, '%bundle' => $this->bundle));
|
|
}
|
|
// TODO: Non-default language, input format
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Give handlers a shot at cleaning up before an entity has been rolled back.
|
|
*
|
|
* @param $entity_id
|
|
* ID of the entity about to be deleted..
|
|
*/
|
|
public function prepareRollback($entity_id) {
|
|
$migration = Migration::currentMigration();
|
|
|
|
// Call any general entity handlers (in particular, the builtin field handler)
|
|
migrate_handler_invoke_all('Entity', 'prepareRollback', $entity_id);
|
|
// Then call any entity-specific handlers
|
|
migrate_handler_invoke_all($this->entityType, 'prepareRollback', $entity_id);
|
|
// Then call any prepare handler for this specific Migration.
|
|
if (method_exists($migration, 'prepareRollback')) {
|
|
$migration->prepareRollback($entity_id);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Give handlers a shot at cleaning up after an entity has been rolled back.
|
|
*
|
|
* @param $entity_id
|
|
* ID of the entity which has been deleted.
|
|
*/
|
|
public function completeRollback($entity_id) {
|
|
$migration = Migration::currentMigration();
|
|
// Call any general entity handlers (in particular, the builtin field handler)
|
|
migrate_handler_invoke_all('Entity', 'completeRollback', $entity_id);
|
|
// Then call any entity-specific handlers
|
|
migrate_handler_invoke_all($this->entityType, 'completeRollback', $entity_id);
|
|
// Then call any complete handler for this specific Migration.
|
|
if (method_exists($migration, 'completeRollback')) {
|
|
$migration->completeRollback($entity_id);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Give handlers a shot at modifying the object before saving it.
|
|
*
|
|
* @param $entity
|
|
* Entity object to build. Prefilled with any fields mapped in the Migration.
|
|
* @param $source_row
|
|
* Raw source data object - passed through to prepare handlers.
|
|
*/
|
|
public function prepare($entity, stdClass $source_row) {
|
|
// Add source keys for debugging and identification of migrated data by hooks.
|
|
/* TODO: Restore
|
|
foreach ($migration->sourceKeyMap() as $field_name => $key_name) {
|
|
$keys[$key_name] = $source_row->$field_name;
|
|
}
|
|
*/
|
|
$migration = Migration::currentMigration();
|
|
$entity->migrate = array(
|
|
// 'source_keys' => $keys,
|
|
'machineName' => $migration->getMachineName(),
|
|
);
|
|
|
|
// Call any general entity handlers (in particular, the builtin field handler)
|
|
migrate_handler_invoke_all('Entity', 'prepare', $entity, $source_row);
|
|
// Then call any entity-specific handlers
|
|
migrate_handler_invoke_all($this->entityType, 'prepare', $entity, $source_row);
|
|
// Then call any prepare handler for this specific Migration.
|
|
if (method_exists($migration, 'prepare')) {
|
|
$migration->prepare($entity, $source_row);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Give handlers a shot at modifying the object (or taking additional action)
|
|
* after saving it.
|
|
*
|
|
* @param $object
|
|
* Entity object to build. This is the complete object after saving.
|
|
* @param $source_row
|
|
* Raw source data object - passed through to complete handlers.
|
|
*/
|
|
public function complete($entity, stdClass $source_row) {
|
|
// Call any general entity handlers (in particular, the builtin field handler)
|
|
migrate_handler_invoke_all('Entity', 'complete', $entity, $source_row);
|
|
// Then call any entity-specific handlers
|
|
migrate_handler_invoke_all($this->entityType, 'complete', $entity, $source_row);
|
|
// Then call any complete handler for this specific Migration.
|
|
$migration = Migration::currentMigration();
|
|
if (method_exists($migration, 'complete')) {
|
|
try {
|
|
$migration->complete($entity, $source_row);
|
|
}
|
|
catch (Exception $e) {
|
|
// If we catch any errors here, save the messages without letting
|
|
// the exception prevent the saving of the entity being recorded.
|
|
$migration->saveMessage($e->getMessage());
|
|
}
|
|
}
|
|
}
|
|
}
|