You are here

public function SkipForm::buildForm in Notify 2.0.x

Same name and namespace in other branches
  1. 8 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 67

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 = Comment::load($row->cid);
      $comments[$comment
        ->get('entity_id')->target_id][$row->cid] = $comment;
      $count++;
    }
    foreach ($res_copub as $row) {
      $comment = Comment::load($row->cid);
      if (!isset($comments[$row->nid][$row->cid])) {
        $comments[$row
          ->get('entity_id')->target_id][$row->cid] = $comment;
        $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'] = [
    '#prefix' => '<p>',
    '#markup' => $this
      ->t('The following table shows all messages that are candidates for notification emails:'),
    '#suffix' => '</p>',
  ];
  $skpnodes = $config
    ->get('notify_skip_nodes');
  if (NULL == $skpnodes) {
    $skpnodes = [];
  }
  $skpcomts = $config
    ->get('notify_skip_comments');
  if (NULL == $skpcomts) {
    $skpcomts = [];
  }
  $form['settings'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Set skip flags'),
  ];
  $form['settings']['table'] = [
    '#tree' => TRUE,
    '#type' => 'table',
    '#header' => [
      $this
        ->t('NID'),
      $this
        ->t('CID'),
      $this
        ->t('Published'),
      $this
        ->t('Created'),
      $this
        ->t('Updated'),
      $this
        ->t('Title'),
      $this
        ->t('Skip'),
    ],
  ];
  $ii = 0;
  foreach ($nodes as $node) {
    $ii++;
    $form['settings']['table'][$ii]['nid'] = [
      '#markup' => $node
        ->id(),
    ];
    $form['settings']['table'][$ii]['cid'] = [
      '#markup' => '-',
    ];
    $form['settings']['table'][$ii]['published'] = [
      '#markup' => $node
        ->isPublished() ? 'Yes' : 'No',
    ];
    $form['settings']['table'][$ii]['created'] = [
      '#markup' => \Drupal::service('date.formatter')
        ->format($node
        ->getCreatedTime(), 'short'),
    ];
    $form['settings']['table'][$ii]['updated'] = [
      '#markup' => $node
        ->getChangedTime() != $node
        ->getCreatedTime() ? \Drupal::service('date.formatter')
        ->format($node
        ->getChangedTime(), 'short') : '-',
    ];
    $form['settings']['table'][$ii]['title'] = [
      '#markup' => $node
        ->label(),
    ];
    $flag = in_array($node
      ->id(), $skpnodes) ? 1 : 0;
    $form['settings']['table'][$ii]['dist'] = [
      '#type' => 'checkbox',
      '#default_value' => $flag,
    ];
  }
  foreach ($comments as $thread) {
    foreach ($thread as $comment) {
      $ii++;
      $form['settings']['table'][$ii]['nid'] = [
        '#markup' => $comment
          ->get('entity_id')->target_id,
      ];
      $form['settings']['table'][$ii]['cid'] = [
        '#markup' => $comment
          ->id(),
      ];
      $form['settings']['table'][$ii]['published'] = [
        '#markup' => $comment
          ->isPublished() ? 'Yes' : 'No',
      ];
      $form['settings']['table'][$ii]['created'] = [
        '#markup' => \Drupal::service('date.formatter')
          ->format($comment
          ->getCreatedTime(), 'short'),
      ];
      $form['settings']['table'][$ii]['updated'] = [
        '#markup' => $comment
          ->getChangedTime() != $comment
          ->getCreatedTime() ? \Drupal::service('date.formatter')
          ->format($comment
          ->getChangedTime(), 'short') : '-',
      ];
      $form['settings']['table'][$ii]['title'] = [
        '#markup' => $comment
          ->label(),
      ];
      $flag = in_array($comment
        ->id(), $skpcomts) ? 1 : 0;
      $form['settings']['table'][$ii]['dist'] = [
        '#type' => 'checkbox',
        '#default_value' => $flag,
      ];
    }
  }
  $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 “Skip” column. Press “Save settings” to save the flags.') . '</p> ',
    ];
  }
  return parent::buildForm($form, $form_state);
}