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;
  }
  


}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc