commentStorage = $comment_storage; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity.manager')->getStorage('comment') ); } /** * {@inheritdoc} */ public function getFormId() { return 'comment_multiple_delete_confirm'; } /** * {@inheritdoc} */ public function getQuestion() { return $this->t('Are you sure you want to delete these comments and all their children?'); } /** * {@inheritdoc} */ public function getCancelUrl() { return new Url('comment.admin'); } /** * {@inheritdoc} */ public function getConfirmText() { return $this->t('Delete comments'); } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $edit = $form_state->getUserInput(); $form['comments'] = [ '#prefix' => '', '#tree' => TRUE, ]; // array_filter() returns only elements with actual values. $comment_counter = 0; $this->comments = $this->commentStorage->loadMultiple(array_keys(array_filter($edit['comments']))); foreach ($this->comments as $comment) { $cid = $comment->id(); $form['comments'][$cid] = [ '#type' => 'hidden', '#value' => $cid, '#prefix' => '
  • ', '#suffix' => Html::escape($comment->label()) . '
  • ' ]; $comment_counter++; } $form['operation'] = ['#type' => 'hidden', '#value' => 'delete']; if (!$comment_counter) { drupal_set_message($this->t('There do not appear to be any comments to delete, or your selected comment was deleted by another administrator.')); $form_state->setRedirect('comment.admin'); } return parent::buildForm($form, $form_state); } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { if ($form_state->getValue('confirm')) { $this->commentStorage->delete($this->comments); $count = count($form_state->getValue('comments')); $this->logger('comment')->notice('Deleted @count comments.', ['@count' => $count]); drupal_set_message($this->formatPlural($count, 'Deleted 1 comment.', 'Deleted @count comments.')); } $form_state->setRedirectUrl($this->getCancelUrl()); } }