Commit 95131518 authored by Zoltan Attila Horvath's avatar Zoltan Attila Horvath Committed by Gaurav Kapoor
Browse files

Issue #3260107 by srishti.bankar, huzooka: Migration dependency for comment status is not evaluated

parent 34384b8c
Loading
Loading
Loading
Loading
+77 −0
Original line number Diff line number Diff line
@@ -7,6 +7,12 @@

use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Url;
use Drupal\disqus\Plugin\migrate\DisqusDeriver;
use Drupal\migrate\Exception\RequirementsException;
use Drupal\migrate\Plugin\MigrateSourceInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Drupal\migrate\Row;
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
use Drupal\node\NodeInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\ContentEntityInterface;
@@ -290,3 +296,74 @@ function disqus_api() {
  }
  return $disqus;
}

/**
 * Implements hook_migration_plugins_alter().
 */
function disqus_migration_plugins_alter(array &$migrations) {
  $node_migrations = array_filter(
    $migrations,
    function ($definition) {
      return $definition['id'] === 'd7_node' || $definition['id'] === 'd7_node_complete';
    }
  );

  $disqus_plugin = DisqusDeriver::getSourcePlugin('disqus_enabled_content_types');
  assert($disqus_plugin instanceof DrupalSqlBase);
  try {
    $disqus_plugin->checkRequirements();
  }
  catch (RequirementsException $e) {
    // Disqus module isn't enabled in the source instance, so we don't have to
    // do anything but remove the d7_disqus_settings and d7_disqus_field_storage
    // migrations.
    unset($migrations['d7_disqus_settings']);
    unset($migrations['d7_disqus_field_storage']);
    return;
  }

  $disqus_node_types = array_reduce(
    iterator_to_array($disqus_plugin, FALSE),
    function (array $carry, Row $row) {
      $carry[] = $row->getSourceProperty('type');
      return $carry;
    },
    []
  );

  foreach ($node_migrations as $plugin_id => $definition) {
    if (
      !empty($definition['source']['node_type']) &&
      !in_array($definition['source']['node_type'], $disqus_node_types)
    ) {
      continue;
    }
    $migrations[$plugin_id]['migration_tags'][] = 'Disqus field value';
    $migrations[$plugin_id]['process']['disqus/status'] = 'disqus_status';
    $migrations[$plugin_id]['process']['disqus/identifier'] = 'disqus_identifier';
  }

}

/**
 * Implements hook_migrate_prepare_row().
 */
function disqus_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
  if (!in_array('Disqus field value', $migration->getMigrationTags())) {
    return;
  }

  $database_connection = $source->getDatabase();

  $query = $database_connection->select('node', 'n')
    ->condition('n.nid', $row->getSourceProperty('nid'));
  $query->leftJoin('disqus', 'd', 'd.nid = n.nid');
  $query->orderBy('n.nid');
  // No entry in {disqus} table means status == 1.
  $query->addExpression('IF(d.status IS NULL, 1, d.status)', 'status');
  $disqus_status = $query->execute()->fetchField();

  $row->setSourceProperty('disqus_status', $disqus_status);
  $row->setSourceProperty('disqus_identifier', 'node/' . $row->getSourceProperty('tnid'));

}
+0 −20
Original line number Diff line number Diff line
id: d7_disqus_comment_status
label: D7 Disqus comment status
migration_tags:
  - Drupal 7
source:
  plugin: disqus_comments_status
process:
  nid: nid
  'disqus/status':
    plugin: get
    source: status
  'disqus/identifier':
    plugin: get
    source: identifier
destination:
  plugin: entity:node
migration_dependencies:
  required:
    - d7_node:*
    - d7_disqus_field
+3 −1
Original line number Diff line number Diff line
@@ -2,7 +2,9 @@ langcode: en
status: true
id: d7_disqus_entity_display
migration_tags:
  - 'Drupal 7'
  - Drupal 7
  - Configuration
deriver: Drupal\disqus\Plugin\migrate\DisqusDeriver
label: 'Disqus display configuration'
source:
  plugin: disqus_enabled_content_types
+2 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@ id: d7_disqus_entity_form_display
label: 'Disqus form display configuration'
migration_tags:
  - Drupal 7
  - Configuration
deriver: Drupal\disqus\Plugin\migrate\DisqusDeriver
source:
  plugin: disqus_enabled_content_types
  constants:
+2 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@ id: d7_disqus_field
label: Drupal 7 Disqus fields
migration_tags:
  - Drupal 7
  - Configuration
deriver: Drupal\disqus\Plugin\migrate\DisqusDeriver
source:
  plugin: disqus_enabled_content_types
  constants:
Loading