dcat-8.x-1.x-dev/dcat_import/src/Form/DcatImportForm.php

dcat_import/src/Form/DcatImportForm.php
<?php

namespace Drupal\dcat_import\Form;

use Drupal\Core\Form\ConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\dcat_import\DcatImportUiLogMigrateMessage;
use Drupal\dcat_import\Entity\DcatSourceInterface;
use Drupal\migrate_tools\MigrateExecutable;
use Symfony\Component\HttpFoundation\RedirectResponse;

/**
 * Configure dcat import settings for this site.
 */
class DcatImportForm extends ConfirmFormBase {

  /**
   * The DCAT source entity.
   *
   * @var \Drupal\dcat_import\Entity\DcatSourceInterface
   */
  protected $dcatSource;

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'dcat_import';
  }

  /**
   * {@inheritdoc}
   */
  public function getCancelUrl() {
    return Url::fromRoute('entity.dcat_source.collection');
  }

  /**
   * {@inheritdoc}
   */
  public function getQuestion() {
    return $this->t('Are you sure you want to import the @name DCAT feed?', [
      '@name' => $this->dcatSource->label(),
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function getConfirmText() {
    return $this->t('Import');
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state, DcatSourceInterface $dcat_source = NULL) {
    $this->dcatSource = $dcat_source;
    $form_state->setStorage(['dcat_source' => $dcat_source]);
    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    /* @var $dcat_source \Drupal\dcat_import\Entity\DcatSourceInterface */
    $dcat_source = $form_state->getStorage()['dcat_source'];
    $id = 'dcat_import_' . $dcat_source->id() . '_dataset';

    $manager = \Drupal::service('plugin.manager.migration');
    $plugins = $manager->createInstances([$id]);
    /* @var $migration \Drupal\migrate\Plugin\MigrationInterface */
    $migration = $plugins[$id];
    $ids = $migration->get('requirements');
    $ids[] = $id;

    $batch = [
      'title' => t('Importing'),
      'operations' => [],
      'finished' => 'Drupal\dcat_import\Form\DcatImportForm::batchDone',
    ];

    $start_date = time();
    foreach ($ids as $id) {
      $batch['operations'][] = [
        'Drupal\dcat_import\Form\DcatImportForm::batchImport',
        [$id, $dcat_source->id(), $start_date],
      ];
    }

    batch_set($batch);
  }

  /**
   * Batch callback, run import on migration.
   *
   * @param string $id
   *   The migration id.
   * @param string $source_id
   *   Dcat source id.
   * @param int $start_date
   *   The start date as timestamp.
   * @param array $context
   *   Batch context.
   *
   * @throws \Drupal\migrate\MigrateException
   */
  public static function batchImport($id, $source_id, $start_date, array &$context) {
    $manager = \Drupal::service('plugin.manager.migration');
    $plugins = $manager->createInstances([$id]);
    /* @var $migration \Drupal\migrate\Plugin\MigrationInterface */
    $migration = $plugins[$id];

    $log = new DcatImportUiLogMigrateMessage(\Drupal::database(), $start_date, $source_id, $id);
    $executable = new MigrateExecutable($migration, $log);
    $executable->import();
  }

  /**
   * Batch callback finish, redirect when done.
   */
  public static function batchDone($success, $results, $operations) {
    return new RedirectResponse(Url::fromRoute('entity.dcat_source.collection')->toString());
  }

}

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

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