CommentAdminOverview::buildForm

public CommentAdminOverview::buildForm(array $form, FormStateInterface $form_state, $type = 'new')

Form constructor for the comment overview administration form.

Parameters

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

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

string $type: The type of the overview form ('approval' or 'new').

Return value

array The form structure.

Overrides FormInterface::buildForm

File

core/modules/comment/src/Form/CommentAdminOverview.php, line 99

Class

CommentAdminOverview
Provides the comments overview administration form.

Namespace

Drupal\comment\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, $type = 'new') {

  // Build an 'Update options' form.
  $form['options'] = array(
    '#type' => 'details',
    '#title' => $this->t('Update options'),
    '#open' => TRUE,
    '#attributes' => array('class' => array('container-inline')),
  );

  if ($type == 'approval') {
    $options['publish'] = $this->t('Publish the selected comments');
  }
  else {
    $options['unpublish'] = $this->t('Unpublish the selected comments');
  }
  $options['delete'] = $this->t('Delete the selected comments');

  $form['options']['operation'] = array(
    '#type' => 'select',
    '#title' => $this->t('Action'),
    '#title_display' => 'invisible',
    '#options' => $options,
    '#default_value' => 'publish',
  );
  $form['options']['submit'] = array(
    '#type' => 'submit',
    '#value' => $this->t('Update'),
  );

  // Load the comments that need to be displayed.
  $status = ($type == 'approval') ? CommentInterface::NOT_PUBLISHED : CommentInterface::PUBLISHED;
  $header = array(
    'subject' => array(
      'data' => $this->t('Subject'),
      'specifier' => 'subject',
    ),
    'author' => array(
      'data' => $this->t('Author'),
      'specifier' => 'name',
      'class' => array(RESPONSIVE_PRIORITY_MEDIUM),
    ),
    'posted_in' => array(
      'data' => $this->t('Posted in'),
      'class' => array(RESPONSIVE_PRIORITY_LOW),
    ),
    'changed' => array(
      'data' => $this->t('Updated'),
      'specifier' => 'changed',
      'sort' => 'desc',
      'class' => array(RESPONSIVE_PRIORITY_LOW),
    ),
    'operations' => $this->t('Operations'),
  );
  $cids = $this->commentStorage->getQuery()
    ->condition('status', $status)
    ->tableSort($header)
    ->pager(50)
    ->execute();

  /** @var $comments \Drupal\comment\CommentInterface[] */
  $comments = $this->commentStorage->loadMultiple($cids);

  // Build a table listing the appropriate comments.
  $options = array();
  $destination = $this->getDestinationArray();

  $commented_entity_ids = array();
  $commented_entities = array();

  foreach ($comments as $comment) {
    $commented_entity_ids[$comment->getCommentedEntityTypeId()][] = $comment->getCommentedEntityId();
  }

  foreach ($commented_entity_ids as $entity_type => $ids) {
    $commented_entities[$entity_type] = $this->entityManager->getStorage($entity_type)->loadMultiple($ids);
  }

  foreach ($comments as $comment) {
    /** @var $commented_entity \Drupal\Core\Entity\EntityInterface */
    $commented_entity = $commented_entities[$comment->getCommentedEntityTypeId()][$comment->getCommentedEntityId()];
    $comment_permalink = $comment->permalink();
    if ($comment->hasField('comment_body') && ($body = $comment->get('comment_body')->value)) {
      $attributes = $comment_permalink->getOption('attributes') ? : array();
      $attributes += array('title' => Unicode::truncate($body, 128));
      $comment_permalink->setOption('attributes', $attributes);
    }
    $options[$comment->id()] = array(
      'title' => array('data' => array('#title' => $comment->getSubject() ? : $comment->id())),
      'subject' => array(
        'data' => array(
          '#type' => 'link',
          '#title' => $comment->getSubject(),
          '#url' => $comment_permalink,
        ),
      ),
      'author' => array(
        'data' => array(
          '#theme' => 'username',
          '#account' => $comment->getOwner(),
        ),
      ),
      'posted_in' => array(
        'data' => array(
          '#type' => 'link',
          '#title' => $commented_entity->label(),
          '#access' => $commented_entity->access('view'),
          '#url' => $commented_entity->urlInfo(),
        ),
      ),
      'changed' => $this->dateFormatter->format($comment->getChangedTimeAcrossTranslations(), 'short'),
    );
    $comment_uri_options = $comment->urlInfo()->getOptions() + ['query' => $destination];
    $links = array();
    $links['edit'] = array(
      'title' => $this->t('Edit'),
      'url' => $comment->urlInfo('edit-form', $comment_uri_options),
    );
    if ($this->moduleHandler->moduleExists('content_translation') && $this->moduleHandler->invoke('content_translation', 'translate_access', array($comment))->isAllowed()) {
      $links['translate'] = array(
        'title' => $this->t('Translate'),
        'url' => $comment->urlInfo('drupal:content-translation-overview', $comment_uri_options),
      );
    }
    $options[$comment->id()]['operations']['data'] = array(
      '#type' => 'operations',
      '#links' => $links,
    );
  }

  $form['comments'] = array(
    '#type' => 'tableselect',
    '#header' => $header,
    '#options' => $options,
    '#empty' => $this->t('No comments available.'),
  );

  $form['pager'] = array('#type' => 'pager');

  return $form;
}
doc_Drupal
2016-10-29 08:50:29
Comments
Leave a Comment

Please login to continue.