You are here

protected function AjaxController::getNewInboxThreads in Private Message 8

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

Creates an Ajax Command with new threads for the private message inbox.

Parameters

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

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

File

src/Controller/AjaxController.php, line 277

Class

AjaxController
Controller to handle Ajax requests.

Namespace

Drupal\private_message\Controller

Code

protected function getNewInboxThreads(AjaxResponse $response) {
  $info = $this->requestStack
    ->getCurrentRequest()
    ->get('ids');

  // Check to see if any thread IDs were POSTed.
  if (is_array($info) && count($info)) {

    // Get new inbox information based on the posted IDs.
    $inbox_threads = $this->privateMessageService
      ->getUpdatedInboxThreads($info);
  }
  else {

    // No IDs were posted, so the maximum possible number of threads to be
    // returned is retrieved from the block settings.
    $thread_count = $this->configFactory
      ->get('block.block.privatemessageinbox')
      ->get('settings.thread_count');
    $inbox_threads = $this->privateMessageService
      ->getUpdatedInboxThreads([], $thread_count);
  }

  // Only need to do something if any thread IDS were found.
  if (count($inbox_threads['thread_ids'])) {
    $view_builder = $this->entityManager
      ->getViewBuilder('private_message_thread');

    // Render any new threads as HTML to be sent to the browser.
    $rendered_threads = [];
    foreach (array_keys($inbox_threads['new_threads']) as $thread_id) {
      if ($inbox_threads['new_threads'][$thread_id]
        ->access('view', $this->currentUser)) {
        $renderable = $view_builder
          ->view($inbox_threads['new_threads'][$thread_id], 'inbox');
        $rendered_threads[$thread_id] = $this->renderer
          ->renderRoot($renderable);
      }
    }

    // Add the command that will tell the inbox which thread items to update.
    $response
      ->addCommand(new PrivateMessageInboxUpdateCommand($inbox_threads['thread_ids'], $rendered_threads));
  }
}