You are here

public function AuditFilesNotOnServer::buildForm in Audit Files 8

Same name and namespace in other branches
  1. 8.3 src/Form/AuditFilesNotOnServer.php \Drupal\auditfiles\Form\AuditFilesNotOnServer::buildForm()
  2. 8.2 src/Form/AuditFilesNotOnServer.php \Drupal\auditfiles\Form\AuditFilesNotOnServer::buildForm()
  3. 4.x src/Form/AuditFilesNotOnServer.php \Drupal\auditfiles\Form\AuditFilesNotOnServer::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/AuditFilesNotOnServer.php, line 68

Class

AuditFilesNotOnServer

Namespace

Drupal\auditfiles\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = \Drupal::config('auditfiles_config.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 = File::load($file_id);
          if (!empty($file)) {
            $form['changelist'][$file_id] = [
              '#type' => 'hidden',
              '#value' => $file_id,
              '#prefix' => '<li><strong>' . $file
                ->getFilename() . '</strong> ' . t('and all usages will be deleted from the database.'),
              '#suffix' => "</li>\n",
            ];
          }
        }
        else {
          unset($form_state
            ->getValue('files')[$file_id]);
        }
      }
    }
    $form['#title'] = $this
      ->t('Delete these items from the database?');
    $form['#attributes']['class'][] = 'confirmation';
    $form['actions'] = [
      '#type' => 'actions',
    ];
    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => $this
        ->getConfirmText(),
      '#button_type' => 'primary',
      '#submit' => [
        '::confirmSubmissionHandlerDelete',
      ],
    ];
    $form['actions']['cancel'] = ConfirmFormHelper::buildCancelLink($this, $this
      ->getRequest());
    if (!isset($form['#theme'])) {
      $form['#theme'] = 'confirm_form';
    }
    return $form;
  }
  $file_ids = \Drupal::service('auditfiles.not_on_server')
    ->_auditfiles_not_on_server_get_file_list();
  if (!empty($file_ids)) {
    $date_format = $config
      ->get('auditfiles_report_options_date_format') ? $config
      ->get('auditfiles_report_options_date_format') : 'long';
    foreach ($file_ids as $file_id) {
      $row = \Drupal::service('auditfiles.not_on_server')
        ->_auditfiles_not_on_server_get_file_data($file_id, $date_format);
      if (isset($row)) {
        $rows[$file_id] = $row;
      }
    }
  }

  // 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 = pager_default_initialize(count($rows), $items_per_page);

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

  // Define the form 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 database that are not on the server.');
    }
    else {
      $file_count_message = $this
        ->t('Found @count files in the database that are not on the server.');
    }
    $form_count = $this
      ->formatPlural(count($rows), $this
      ->t('Found 1 file in the database that is not on the server.'), $file_count_message);
  }
  else {
    $form_count = $this
      ->t('Found no files in the database that are not on the server.');
  }

  // Create the form table.
  $form['files'] = [
    '#type' => 'tableselect',
    '#header' => \Drupal::service('auditfiles.not_on_server')
      ->_auditfiles_not_on_server_get_header(),
    '#empty' => 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' => t('Delete selected items from the database'),
      '#submit' => [
        '::submissionHandlerDeleteFromDb',
      ],
    ];
    $form['pager'] = [
      '#type' => 'pager',
    ];
  }
  return $form;
}