module_builder-8.x-3.x-dev/module_builder_devel/src/Form/ProcessDevelForm.php

module_builder_devel/src/Form/ProcessDevelForm.php
<?php

namespace Drupal\module_builder_devel\Form;

use DrupalCodeBuilder\Factory;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Form for running selected analysis jobs and outputting the result.
 *
 * This does not save the resulting analysis data to storage.
 */
class ProcessDevelForm extends FormBase {

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

  /**
   * Form constructor.
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    // We have to disable the cache, as otherwise a repeat submission of the
    // form won't come here, and the environment doesn't get set up.
    $form_state->disableCache();

    \Drupal::service('module_builder.drupal_code_builder')->loadLibrary();

    try {
      $task_handler_report = \Drupal::service('module_builder.drupal_code_builder')->getTask('ReportHookDataFolder');
      $task_report_summary = \Drupal::service('module_builder.drupal_code_builder')->getTask('ReportSummary');
      $task_handler_collect = \Drupal::service('module_builder.drupal_code_builder')->getTask('Collect');
    }
    catch (SanityException $e) {
      // We're in right place to do something about a problem, so no need to
      // show a message.
    }

    $job_list = $this->getJobList($form_state);

    $job_options = [];
    foreach ($job_list as $index => $job) {
      $option_label = isset($job['item_label']) ?
        "{$job['process_label']} - {$job['item_label']}" :
        "{$job['process_label']}";
      $job_options[$index] = $option_label;
    }

    $form['jobs'] = [
      '#type' => 'checkboxes',
      '#title' => t('Jobs to process'),
      '#options' => $job_options,
      '#required' => TRUE,
    ];

    $form['submit'] = [
      '#type' => 'submit',
      '#value' => t('Run selected processing jobs'),
    ];

    return $form;
  }

  /**
   * Form submission handler.
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $job_list = $this->getJobList($form_state);

    // Need to filter by stringity, as there is a 0 key which gets a value of
    // "0" if selected and 0 if not.
    $job_indexes_to_run = array_filter($form_state->getValues()['jobs'], function($item) {
      return is_string($item);
    });

    $jobs_to_run = array_intersect_key($job_list, $job_indexes_to_run);

    $result = [];

    foreach ($jobs_to_run as $job) {
      // Get the helper from the DCB container.
      $collector_helper = Factory::getContainer()->get($job['collector']);
      $job_data = $collector_helper->collect([$job]);

      dpm($job_data);
    }

    // Keep the selected values in the form.
    $form_state->setRebuild();
  }

  /**
   * Gets the job list from the form state.
   *
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The form state.
   *
   * @return
   *   The job list array.
   */
  protected function getJobList(FormStateInterface $form_state) {
    $job_list = $form_state->get('job_list');

    if (!isset($job_list)) {
      $task_handler_collect = \Drupal::service('module_builder.drupal_code_builder')->getTask('Collect');
      $job_list = $task_handler_collect->getJobList();

      $form_state->set('job_list', $job_list);
    }

    return $job_list;
  }

}

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

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