You are here

public function CandidateNodesForm::buildForm in Node Revision Delete 8

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/CandidateNodesForm.php, line 85

Class

CandidateNodesForm
Class CandidateNodesForm.

Namespace

Drupal\node_revision_delete\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, NodeTypeInterface $node_type = NULL) {

  // Table header.
  $header = [
    $this
      ->t('Nid'),
    [
      'data' => $this
        ->t('Title'),
      // Hide the description on narrow width devices.
      'class' => [
        RESPONSIVE_PRIORITY_MEDIUM,
      ],
    ],
    [
      'data' => $this
        ->t('Author'),
      // Hide the description on narrow width devices.
      'class' => [
        RESPONSIVE_PRIORITY_MEDIUM,
      ],
    ],
    [
      'data' => $this
        ->t('Status'),
      // Hide the description on narrow width devices.
      'class' => [
        RESPONSIVE_PRIORITY_MEDIUM,
      ],
    ],
    [
      'data' => $this
        ->t('Updated'),
      // Hide the description on narrow width devices.
      'class' => [
        RESPONSIVE_PRIORITY_MEDIUM,
      ],
    ],
    [
      'data' => $this
        ->t('Candidate revisions'),
      // Hide the description on narrow width devices.
      'class' => [
        RESPONSIVE_PRIORITY_MEDIUM,
      ],
    ],
    $this
      ->t('Operations'),
  ];

  // Table rows.
  $rows = [];

  // Getting the node type machine name.
  $node_type_machine_name = $node_type
    ->id();

  // Getting the candidate nodes.
  $candidate_nodes = $this->nodeRevisionDelete
    ->getCandidatesNodes($node_type_machine_name);
  $nodes = $this->entityTypeManager
    ->getStorage('node')
    ->loadMultiple($candidate_nodes);

  // Setup array to store candidate revisions keyed by node id.
  $candidate_revisions = [];

  /** @var \Drupal\node\Entity\Node $node */
  foreach ($nodes as $node) {
    $nid = $node
      ->id();
    $route_parameters = [
      'node_type' => $node_type_machine_name,
      'node' => $nid,
    ];

    // Get node's candidate revisions for count display and form_state
    // storage.
    $node_candidate_revisions = $this->nodeRevisionDelete
      ->getCandidatesRevisionsByNids([
      $nid,
    ]);
    $candidate_revisions[$nid] = $node_candidate_revisions;
    $node_revision_count = count($node_candidate_revisions);

    // Formatting the numbers.
    $node_revision_count = number_format($node_revision_count, 0, '.', '.');

    // Creating a link to the candidate revisions page.
    $candidate_revisions_link = Link::createFromRoute($node_revision_count, 'node_revision_delete.candidate_revisions_node', $route_parameters);
    $dropbutton = [
      '#type' => 'dropbutton',
      '#links' => [
        // Action to delete revisions.
        'delete_revisions' => [
          'title' => $this
            ->t('Delete revisions'),
          'url' => Url::fromRoute('node_revision_delete.candidate_nodes_revisions_delete_confirm', $route_parameters),
        ],
      ],
    ];

    // Setting the row values.
    $rows[$nid] = [
      $nid,
      Link::fromTextAndUrl($node
        ->getTitle(), $node
        ->toUrl('canonical')),
      $node
        ->getOwner()
        ->getAccountName() ? Link::fromTextAndUrl($node
        ->getOwner()
        ->getAccountName(), $node
        ->getOwner()
        ->toUrl('canonical')) : $this
        ->t('Anonymous (not verified)'),
      $node
        ->isPublished() ? $this
        ->t('Published') : $this
        ->t('Not published'),
      $this->dateFormatter
        ->format($node
        ->getChangedTime(), 'short'),
      $candidate_revisions_link,
      [
        'data' => $dropbutton,
      ],
    ];
  }
  $content_type_url = $node_type
    ->toUrl()
    ->toString();
  $caption = $this
    ->t('Candidates nodes for content type <a href=":url">%title</a>', [
    ':url' => $content_type_url,
    '%title' => $node_type
      ->label(),
  ]);
  $form['candidate_nodes'] = [
    '#type' => 'tableselect',
    '#caption' => $caption,
    '#header' => $header,
    '#options' => $rows,
    '#empty' => $this
      ->t('There are not candidates nodes with revisions to be deleted.'),
    '#sticky' => TRUE,
  ];
  $form['actions']['#type'] = 'actions';
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Delete revisions'),
    '#button_type' => 'primary',
  ];

  // Adding donation text.
  $form['#prefix'] = Donation::getDonationText();

  // Add all candidate revisions into form_state for use in
  // the submitForm() method.
  $form_state
    ->set('candidate_revisions', $candidate_revisions);
  return $form;
}