You are here

public function SkipForm::buildForm in Notify 8

Same name and namespace in other branches
  1. 2.0.x src/Form/SkipForm.php \Drupal\notify\Form\SkipForm::buildForm()
  2. 1.0.x src/Form/SkipForm.php \Drupal\notify\Form\SkipForm::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 ConfigFormBase::buildForm

File

src/Form/SkipForm.php, line 66

Class

SkipForm
Defines a form that configures forms module settings.

Namespace

Drupal\notify\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, Request $request = NULL) {
  $config = $this
    ->config('notify.settings');

  // Fetch list of nodes and comments scheduled for notification
  list($res_nodes, $res_comms, $res_nopub, $res_copub, $res_nounp, $res_counp) = _notify_select_content();

  // Get the nodes and comments queued.
  $count = 0;
  $nodes = $comments = [];

  // Ordinary nodes
  foreach ($res_nodes as $row) {
    $nodes[$row->nid] = \Drupal::entityTypeManager()
      ->getStorage('node')
      ->load($row->nid);
    $count++;
  }

  // Ordinary comments
  if ($res_comms) {
    foreach ($res_nopub as $row) {
      if (!isset($nodes[$row->nid])) {
        $nodes[$row->nid] = \Drupal::entityTypeManager()
          ->getStorage('node')
          ->load($row->nid);
        $count++;
      }
    }
    foreach ($res_comms as $row) {
      $comment = \Drupal\comment\Entity\Comment::load($row->cid);
      $comments[$comment
        ->get('entity_id')->target_id][$row->cid] = $comment;
      $count++;
    }
    foreach ($res_copub as $row) {
      if (!isset($comments[$row->nid][$row->cid])) {
        $comments[$row
          ->get('entity_id')->target_id][$row->cid] = \Drupal\comment\Entity\Comment::load($row->cid);
        $count++;
      }
    }
  }

  // Published nodes in unpublished queue
  foreach ($res_nopub as $row) {
    if (!isset($nodes[$row->nid])) {
      $nodes[$row->nid] = \Drupal::entityTypeManager()
        ->getStorage('node')
        ->load($row->nid);
      $count++;
    }
  }

  // Unpublished nodes in unpublished queue
  foreach ($res_nounp as $row) {
    if (!isset($nodes[$row->nid])) {
      $nodes[$row->nid] = \Drupal::entityTypeManager()
        ->getStorage('node')
        ->load($row->nid);
      $count++;
    }
  }
  $form = [];
  $form['#tree'] = TRUE;
  $form['info'] = [
    '#markup' => '<p>' . $this
      ->t('The following table shows all messages that are candidates for bulk notifications:' . '</p>'),
  ];
  $skpnodes = $config
    ->get('notify_skip_nodes');
  $skpcomts = $config
    ->get('notify_skip_comments');
  $ii = 0;
  $entities = [];
  foreach ($nodes as $node) {
    $ii++;
    $entities[$ii] = [];
    $entities[$ii]['nid'] = [
      '#markup' => $node
        ->id(),
    ];
    $entities[$ii]['cid'] = [
      '#markup' => '-',
    ];
    $entities[$ii]['created'] = [
      '#markup' => \Drupal::service('date.formatter')
        ->format($node
        ->getCreatedTime(), 'short'),
    ];
    $entities[$ii]['updated'] = [
      '#markup' => $node
        ->getChangedTime() != $node
        ->getCreatedTime() ? \Drupal::service('date.formatter')
        ->format($node
        ->getChangedTime(), 'short') : '-',
    ];
    $entities[$ii]['title'] = [
      '#markup' => $node
        ->label(),
    ];
    $flag = in_array($node
      ->id(), $skpnodes) ? 1 : 0;
    $entities[$ii]['dist'] = [
      '#type' => 'checkbox',
      '#default_value' => $flag,
    ];
  }
  foreach ($comments as $thread) {
    foreach ($thread as $comment) {
      $ii++;
      $entities[$ii] = [];
      $entities[$ii]['nid'] = [
        '#markup' => $comment
          ->get('entity_id')->target_id,
      ];
      $entities[$ii]['cid'] = [
        '#markup' => $comment
          ->id(),
      ];
      $entities[$ii]['created'] = [
        '#markup' => \Drupal::service('date.formatter')
          ->format($comment
          ->getCreatedTime(), 'short'),
      ];
      $entities[$ii]['updated'] = [
        '#markup' => $comment
          ->getChangedTime() != $comment
          ->getCreatedTime() ? \Drupal::service('date.formatter')
          ->format($comment
          ->getChangedTime(), 'short') : '-',
      ];
      $entities[$ii]['title'] = [
        '#markup' => $comment
          ->label(),
      ];
      $flag = in_array($comment
        ->id(), $skpcomts) ? 1 : 0;
      $entities[$ii]['dist'] = [
        '#type' => 'checkbox',
        '#default_value' => $flag,
      ];
    }
  }
  $form['entities'] = $entities;
  $users = $config
    ->get('notify_users');
  $batch_remain = $users ? count($users) : 0;
  if ($batch_remain) {
    $form['info2'] = [
      '#markup' => '<p>' . $this
        ->t('Please note that the list above may be out of sync.  Saving an altered list of skip flags is disabled as long as notifications are being processed.') . '</p> ',
    ];
  }
  else {
    $form['info2'] = [
      '#markup' => '<p>' . $this
        ->t('To flag that <em>no</em> notification about a particular message should be sent, check the checkbox in the &#8220;Skip&#8220; column. Press &#8220;Save settings&#8220; to save the flags.') . '</p> ',
    ];
  }
  return parent::buildForm($form, $form_state);
}