merci-8.x-2.x-dev/modules/merci_migration/src/Plugin/migrate/source/d7/MerciPermissions.php

modules/merci_migration/src/Plugin/migrate/source/d7/MerciPermissions.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_permissions",
 * )
 */
class MerciPermissions 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', 'resource'], 'IN');
    $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);
      }
    }

    $type = $row->getSourceProperty('type');

    $permissions = $this->select('role_permission', 'rp')
      ->fields('rp', ['rid', 'permission'])
      ->condition('permission', 'edit own ' . $type . ' content')
      ->execute()
      ->fetchCol();
    if (!empty($permissions)) {
      $permissions = $this->select('role_permission', 'rp')
        ->fields('rp', ['rid', 'permission'])
        ->condition('permission', 'delete own ' . $type . ' content')
        ->condition('rid', $permissions, 'IN')
        ->execute()
        ->fetchAll();
    }
    $row->setSourceProperty('permissions', $permissions);

    return parent::prepareRow($row);
  }

  /**
   * {@inheritdoc}
   */
  public function getIds() {
    $ids['type']['type'] = 'string';
    $ids['type']['alias'] = 't';
    return $ids;
  }
  


}

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

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