You are here

protected function AjaxController::getNewPrivateMessages in Private Message 8.2

Same name and namespace in other branches
  1. 8 src/Controller/AjaxController.php \Drupal\private_message\Controller\AjaxController::getNewPrivateMessages()

Creates an Ajax Command containing new private message.

Parameters

Drupal\Core\Ajax\AjaxResponse $response: The response to which any commands should be attached.

1 call to AjaxController::getNewPrivateMessages()
AjaxController::ajaxCallback in src/Controller/AjaxController.php
Create AJAX responses for JavaScript requests.

File

src/Controller/AjaxController.php, line 205

Class

AjaxController
Controller to handle Ajax requests.

Namespace

Drupal\private_message\Controller

Code

protected function getNewPrivateMessages(AjaxResponse $response) {
  $thread_id = $this->requestStack
    ->getCurrentRequest()
    ->get('threadid');
  $message_id = $this->requestStack
    ->getCurrentRequest()
    ->get('messageid');
  $count = 0;
  if (is_numeric($thread_id) && is_numeric($message_id)) {
    $thread = $this->threadManager
      ->load($thread_id);
    if ($thread) {
      $new_messages = $this->privateMessageService
        ->getNewMessages($thread_id, $message_id);
      $this->privateMessageService
        ->updateThreadAccessTime($thread);
      $count = count($new_messages);
      if ($count) {
        $messages = [];
        $view_builder = $this->entityTypeManager
          ->getViewBuilder('private_message');
        foreach ($new_messages as $message) {
          if ($message
            ->access('view', $this->currentUser)) {
            $message_view = $view_builder
              ->view($message);
            $message_view['#prefix'] = '<div class="private-message-wrapper field__item">';
            $message_view['#suffix'] = '</div>';
            $messages[] = $message_view;
          }
        }

        // Ensure the browser knows the thread ID at all times.
        $messages['#attached']['drupalSettings']['privateMessageThread']['threadId'] = (int) $thread
          ->id();
      }
      $response
        ->addCommand(new PrivateMessageInsertNewMessagesCommand($this->renderer
        ->renderRoot($messages), $count));
    }
  }
}