public function CommentForm::save in Comment Permissions 8
Form submission handler for the 'save' action.
Normally this method should be overridden to provide specific messages to the user and redirect the form after the entity has been saved.
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
int Either SAVED_NEW or SAVED_UPDATED, depending on the operation performed.
Overrides CommentForm::save
File
- src/
CommentForm.php, line 259
Class
- CommentForm
- Override comment entity default from.
Namespace
Drupal\comment_permCode
public function save(array $form, FormStateInterface $form_state) {
$comment = $this->entity;
$comment_type = $comment
->bundle();
$entity = $comment
->getCommentedEntity();
$field_name = $comment
->getFieldName();
$uri = $entity
->toUrl();
$logger = $this
->logger('comment');
if ($this
->accessPostComment($this->currentUser, $comment_type) && ($this
->accessAdministerComment($this->currentUser, $comment_type) || $entity->{$field_name}->status == CommentItemInterface::OPEN)) {
$comment
->save();
$form_state
->setValue('cid', $comment
->id());
// Add a log entry.
$logger
->notice('Comment posted: %subject.', [
'%subject' => $comment
->getSubject(),
'link' => Link::fromTextAndUrl(t('View'), $comment
->toUrl()
->setOption('fragment', 'comment-' . $comment
->id()))
->toString(),
]);
// Explain the approval queue if necessary.
if (!$comment
->isPublished()) {
if ($this
->noAccessAdministerComment($this->currentUser, $comment_type)) {
$this
->messenger()
->addStatus($this
->t('Your comment has been queued for review by site administrators and will be published after approval.'));
}
}
else {
$this
->messenger()
->addStatus($this
->t('Your comment has been posted.'));
}
$query = [];
// Find the current display page for this comment.
$field_definition = $this->entityFieldManager
->getFieldDefinitions($entity
->getEntityTypeId(), $entity
->bundle())[$field_name];
$page = $this->entityTypeManager
->getStorage('comment')
->getDisplayOrdinal($comment, $field_definition
->getSetting('default_mode'), $field_definition
->getSetting('per_page'));
if ($page > 0) {
$query['page'] = $page;
}
// Redirect to the newly posted comment.
$uri
->setOption('query', $query);
$uri
->setOption('fragment', 'comment-' . $comment
->id());
}
else {
$logger
->warning('Comment: unauthorized comment submitted or comment submitted to a closed post %subject.', [
'%subject' => $comment
->getSubject(),
]);
$this
->messenger()
->addError($this
->t('Comment: unauthorized comment submitted or comment submitted to a closed post %subject.', [
'%subject' => $comment
->getSubject(),
]));
// Redirect the user to the entity they are commenting on.
}
$form_state
->setRedirectUrl($uri);
}