merci-8.x-2.x-dev/modules/merci_migration/src/Plugin/migrate/source/d7/MerciBucket.php
modules/merci_migration/src/Plugin/migrate/source/d7/MerciBucket.php
<?php
namespace Drupal\merci_migration\Plugin\migrate\source\d7;
use Drupal\node\Plugin\migrate\source\d7\NodeType;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\migrate\Row;
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
use Drupal\Core\Database\Query\SelectInterface;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\Extension\ModuleHandler;
use Drupal\Core\State\StateInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Drupal 7 node source from database.
*
* @MigrateSource(
* id = "merci_bucket",
* source_module = "node"
* )
*/
class MerciBucket extends NodeType {
/**
* The join options between the node and the node_revisions table.
*/
const JOIN = 'n.vid = nr.vid';
/**
* {@inheritdoc}
*/
public function query() {
$query = $this->select('node_type', 't')->fields('t');
$query->join('merci_node_type', 'mt', 'mt.type = t.type');
$query->condition('mt.merci_type_setting', 'bucket', '=');
$query->fields('mt');
return $query;
}
/**
* {@inheritdoc}
*/
public function prepareRow(Row $row) {
// Get Field API field values.
$type = $row->getSourceProperty('type');
$query = $this->select('variable', 'v')->fields('v')->condition('name', 'merci_grouping_' . $type);
$result = $query
->execute()
->fetchAll();
if (!empty($result)) {
$tid = unserialize($result[0]['value']);
if ($tid) {
$row->setSourceProperty('resource_tree', $tid);
}
}
// Select node in its last revision.
$query = $this->select('node_revision', 'nr')->fields('n', [
'nid',
'type',
'language',
'status',
'created',
'changed',
'comment',
'promote',
'sticky',
'tnid',
'translate',
])->fields('nr', [
'vid',
'title',
'log',
'timestamp',
]);
$query->addField('n', 'uid', 'node_uid');
$query->addField('nr', 'uid', 'revision_uid');
$query->innerJoin('node', 'n', static::JOIN);
$query->leftJoin('merci_bucket_node', 'mbn', 'n.nid = mbn.nid');
$query->condition('mbn.merci_sub_type', '1');
$query->condition('type', $type);
$result = $query
->execute()
->fetchAll();
$row->setSourceProperty('bucket_items', $result);
return parent::prepareRow($row);
}
/**
* {@inheritdoc}
*/
public function getIds() {
$ids['type']['type'] = 'string';
$ids['type']['alias'] = 't';
return $ids;
}
}
