You are here

public function AuditFilesUsedNotReferenced::buildForm in Audit Files 4.x

Same name and namespace in other branches
  1. 8.3 src/Form/AuditFilesUsedNotReferenced.php \Drupal\auditfiles\Form\AuditFilesUsedNotReferenced::buildForm()
  2. 8 src/Form/AuditFilesUsedNotReferenced.php \Drupal\auditfiles\Form\AuditFilesUsedNotReferenced::buildForm()
  3. 8.2 src/Form/AuditFilesUsedNotReferenced.php \Drupal\auditfiles\Form\AuditFilesUsedNotReferenced::buildForm()

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

src/Form/AuditFilesUsedNotReferenced.php, line 130

Class

AuditFilesUsedNotReferenced
File used but not referenced functionality.

Namespace

Drupal\auditfiles\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this->configFactoryStorage
    ->get('auditfiles.settings');
  $storage =& $form_state
    ->getStorage();
  if (isset($storage['confirm'])) {
    $values = $form_state
      ->getValue('files');
    $form['changelist'] = [
      '#prefix' => '<ul>',
      '#suffix' => '</ul>',
      '#tree' => TRUE,
    ];

    // Prepare the list of items to present to the user.
    if (!empty($values)) {
      foreach ($values as $file_id) {
        if (!empty($file_id)) {
          $file = $this->entityTypeManager
            ->getStorage('file')
            ->load($file_id);
          if (!empty($file)) {
            $form['changelist'][$file_id] = [
              '#type' => 'hidden',
              '#value' => $file_id,
              '#prefix' => '<li><strong>' . $file
                ->getFilename() . '</strong> ' . $this
                ->t('will be deleted from the file_usage table.'),
              '#suffix' => "</li>",
            ];
          }
        }
        else {
          unset($form_state
            ->getValue('files')[$file_id]);
        }
      }
    }
    $form['#title'] = $this
      ->t('Delete these items from the file_usage table?');
    $form['#attributes']['class'][] = 'confirmation';
    $form['actions'] = [
      '#type' => 'actions',
    ];
    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => $this
        ->getConfirmText(),
      '#button_type' => 'primary',
      '#submit' => [
        '::confirmSubmissionHandlerDeleteFile',
      ],
    ];
    $form['actions']['cancel'] = ConfirmFormHelper::buildCancelLink($this, $this
      ->getRequest());
    if (!isset($form['#theme'])) {
      $form['#theme'] = 'confirm_form';
    }
    return $form;
  }
  $file_ids = $this->filesUsedNotReferenced
    ->auditfilesUsedNotReferencedGetFileList();
  if (!empty($file_ids)) {
    foreach ($file_ids as $file_id) {
      $rows[$file_id] = $this->filesUsedNotReferenced
        ->auditfilesUsedNotReferencedGetFileData($file_id);
    }
  }

  // Set up the pager.
  if (!empty($rows)) {
    $items_per_page = $config
      ->get('auditfiles_report_options_items_per_page') ? $config
      ->get('auditfiles_report_options_items_per_page') : 50;
    if (!empty($items_per_page)) {
      $current_page = $this->pagerManager
        ->createPager(count($rows), $items_per_page)
        ->getCurrentPage();

      // Break the total data set into page sized chunks.
      $pages = array_chunk($rows, $items_per_page, TRUE);
    }
  }

  // Setup the record count and related messages.
  $maximum_records = $config
    ->get('auditfiles_report_options_maximum_records') ? $config
    ->get('auditfiles_report_options_maximum_records') : 250;
  if (!empty($rows)) {
    if ($maximum_records > 0) {
      $file_count_message = $this
        ->t('Found at least @count files in the file_usage table that are not referenced in content.');
    }
    else {
      $file_count_message = $this
        ->t('Found @count files in the file_usage table that are not referenced in content.');
    }
    $form_count = $this
      ->formatPlural(count($rows), $this
      ->t('Found 1 file in the file_usage table that is not referenced in content.'), $file_count_message);
  }
  else {
    $form_count = $this
      ->t('Found no files in the file_usage table that are not referenced in content.');
  }

  // Create the form table.
  $form['files'] = [
    '#type' => 'tableselect',
    '#header' => $this->filesUsedNotReferenced
      ->auditfilesUsedNotReferencedGetHeader(),
    '#empty' => $this
      ->t('No items found.'),
    '#prefix' => '<div><em>' . $form_count . '</em></div>',
  ];

  // Add the data.
  if (!empty($rows) && !empty($pages)) {
    $form['files']['#options'] = $pages[$current_page];
  }
  elseif (!empty($rows)) {
    $form['files']['#options'] = $rows;
  }
  else {
    $form['files']['#options'] = [];
  }

  // Add any action buttons.
  if (!empty($rows)) {
    $form['actions'] = [
      '#type' => 'actions',
    ];
    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('Delete selected items from the file_usage table'),
    ];
    $form['pager'] = [
      '#type' => 'pager',
    ];
  }
  return $form;
}