You are here

function upgrade_rector_form_drupal_upgrade_status_form_alter in Upgrade Rector 8

Implements hook_form_FORM_ID_alter().

File

./upgrade_rector.module, line 21

Code

function upgrade_rector_form_drupal_upgrade_status_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  // Weave in rector results with upgrade status results.
  $projects = \Drupal::service('upgrade_rector.project_collector')
    ->collectProjects();
  $rector_results = \Drupal::service('keyvalue')
    ->get('upgrade_status_rector_results');
  $rector_processor = \Drupal::service('upgrade_rector.rector_processor');
  $categories = [
    'custom',
    'contrib',
  ];
  foreach ($categories as $category) {
    $states = [
      'installed',
      'uninstalled',
    ];
    foreach ($states as $state) {
      if (!isset($form[$category]['data'][$state]['#options'])) {
        continue;
      }
      foreach ($form[$category]['data'][$state]['#options'] as $key => &$project) {
        $raw_rector_result = $rector_results
          ->get($key);
        if (empty($raw_rector_result)) {
          continue;
        }
        $processed_result = $rector_processor
          ->processResults($raw_rector_result, $projects[$category][$key]);
        if ($processed_result['state'] === 'success' && empty($processed_result['patch'])) {
          $class = 'upgrade-status-ok-label';
          $label = t('Nothing to patch');
        }
        elseif ($processed_result['state'] === 'fail') {
          $class = 'upgrade-status-error-label';
          $label = t('Patch error');
        }
        else {
          $class = 'upgrade-status-ok-label';
          $label = t('Patch available');
        }
        $url = Url::fromRoute('upgrade_rector.result', [
          'type' => $projects[$category][$key]
            ->getType(),
          'project_machine_name' => $key,
        ]);
        $rector_info = [
          'rector_info' => [
            '#type' => 'link',
            '#title' => $label,
            '#url' => $url,
            '#attributes' => [
              'class' => [
                'use-ajax',
                $class,
              ],
              'data-dialog-type' => 'modal',
              'data-dialog-options' => Json::encode([
                'width' => 1024,
                'height' => 568,
              ]),
            ],
          ],
        ];
        $status = $project['status']['data'];
        if (!is_array($status)) {
          $status = [
            '#type' => 'markup',
            '#markup' => $status,
          ];
        }
        $project['status']['data'] = [
          $status,
          $rector_info,
        ];
      }
    }
  }

  // Add checkbox to enable running rector.
  $form['drupal_upgrade_status_form']['action']['run_rector'] = [
    '#type' => 'checkbox',
    '#title' => t('Generate patches for scanned projects with rector.'),
    '#default_value' => TRUE,
  ];
}