You are here

class OpignoMessageThreadController in Opigno messaging 3.x

The Opigno messaging controller.

@package Drupal\opigno_messaging\Controller

Hierarchy

Expanded class hierarchy of OpignoMessageThreadController

File

src/Controller/OpignoMessageThreadController.php, line 30

Namespace

Drupal\opigno_messaging\Controller
View source
class OpignoMessageThreadController extends ControllerBase {

  /**
   * The DB connection service.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $database;

  /**
   * The private messages storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface|null
   */
  protected $messageStorage = NULL;

  /**
   * Opigno private messaging manager service.
   *
   * @var \Drupal\opigno_messaging\Services\OpignoMessageThread
   */
  protected $messageService;

  /**
   * OpignoMessageThreadController constructor.
   *
   * @param \Drupal\Core\Database\Connection $database
   *   The DB connection service.
   * @param \Drupal\Core\Form\FormBuilderInterface $form_builder
   *   The form builder service.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager service.
   * @param \Drupal\Core\Entity\EntityFormBuilderInterface $entity_form_builder
   *   The entity form builder service.
   * @param \Drupal\opigno_messaging\Services\OpignoMessageThread $pm_service
   *   The private messages manager service.
   * @param \Drupal\Core\Session\AccountInterface $account
   *   The current user account.
   */
  public function __construct(Connection $database, FormBuilderInterface $form_builder, EntityTypeManagerInterface $entity_type_manager, EntityFormBuilderInterface $entity_form_builder, OpignoMessageThread $pm_service, AccountInterface $account) {
    $this->database = $database;
    $this->formBuilder = $form_builder;
    $this->entityFormBuilder = $entity_form_builder;
    $this->messageService = $pm_service;
    $this->currentUser = $account;
    try {
      $this->messageStorage = $entity_type_manager
        ->getStorage('private_message');
    } catch (PluginNotFoundException|InvalidPluginDefinitionException $e) {
      watchdog_exception('opigno_messaging_exception', $e);
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('database'), $container
      ->get('form_builder'), $container
      ->get('entity_type.manager'), $container
      ->get('entity.form_builder'), $container
      ->get('opigno_messaging.manager'), $container
      ->get('current_user'));
  }

  /**
   * Prepare the AJAX response to display the thread add/edit form.
   *
   * @param int $tid
   *   The thread ID to get the form for. If 0 is given, creation form will be
   *   rendered.
   *
   * @return \Drupal\Core\Ajax\AjaxResponse
   *   The response object.
   *
   * @throws \Drupal\Core\Form\EnforcedResponseException
   * @throws \Drupal\Core\Form\FormAjaxException
   */
  private function prepareThreadFormResponse(int $tid = 0) : AjaxResponse {
    $response = new AjaxResponse();
    $form_state = new FormState();
    $form_state
      ->addBuildInfo('args', [
      $tid,
    ]);
    $form = $this->formBuilder
      ->buildForm(OpignoPrivateMessageThreadForm::class, $form_state);
    $build = [
      '#theme' => 'opigno_messaging_modal',
      '#title' => $tid ? $this
        ->t('Edit discussion') : $this
        ->t('New discussion'),
      '#body' => $form,
    ];
    $response
      ->addCommand(new RemoveCommand('.modal-ajax'));
    $response
      ->addCommand(new AppendCommand('body', $build));
    $response
      ->addCommand(new InvokeCommand('.modal-ajax', 'modal', [
      'show',
    ]));
    return $response;
  }

  /**
   * Get the private messages thread create form.
   *
   * @return \Drupal\Core\Ajax\AjaxResponse
   *   The AJAX response object.
   *
   * @throws \Drupal\Core\Form\EnforcedResponseException
   * @throws \Drupal\Core\Form\FormAjaxException
   */
  public function getThreadForm() : AjaxResponse {
    return $this
      ->prepareThreadFormResponse();
  }

  /**
   * Get the private messages thread edit form.
   *
   * @param \Drupal\private_message\Entity\PrivateMessageThreadInterface $private_message_thread
   *   The thread to get the form for.
   *
   * @return \Drupal\Core\Ajax\AjaxResponse
   *   The AJAX response object.
   *
   * @throws \Drupal\Core\Form\EnforcedResponseException
   * @throws \Drupal\Core\Form\FormAjaxException
   */
  public function getEditThreadForm(PrivateMessageThreadInterface $private_message_thread) : AjaxResponse {
    $tid = (int) $private_message_thread
      ->id();
    return $this
      ->prepareThreadFormResponse($tid);
  }

  /**
   * Get the delete thread confirmation form.
   *
   * @param \Drupal\private_message\Entity\PrivateMessageThreadInterface $private_message_thread
   *   The thread to be deleted.
   *
   * @return \Drupal\Core\Ajax\AjaxResponse
   *   The AJAX response object.
   */
  public function getDeleteThreadForm(PrivateMessageThreadInterface $private_message_thread) : AjaxResponse {
    $response = new AjaxResponse();
    $build = [
      '#theme' => 'opigno_messaging_confirmation',
      '#body' => $this->entityFormBuilder
        ->getForm($private_message_thread, 'delete'),
    ];
    $response
      ->addCommand(new RemoveCommand('.modal-ajax'));
    $response
      ->addCommand(new AppendCommand('body', $build));
    $response
      ->addCommand(new InvokeCommand('.modal-ajax', 'modal', [
      'show',
    ]));
    return $response;
  }

  /**
   * Close the modal.
   *
   * @return \Drupal\Core\Ajax\AjaxResponse
   *   The response object.
   */
  public function closeModal() : AjaxResponse {
    $response = new AjaxResponse();
    $response
      ->addCommand(new InvokeCommand('.modal', 'modal', [
      'hide',
    ]));
    return $response;
  }

  /**
   * Create the new thread with the given user and redirect to its page.
   *
   * @param int $uid
   *   The user ID to create message thread with.
   *
   * @return \Symfony\Component\HttpFoundation\RedirectResponse|null
   *   The redirect response.
   */
  public function redirectToNewThread(int $uid) : ?RedirectResponse {
    $members = [
      (int) $this->currentUser
        ->id(),
      $uid,
    ];
    $thread = $this->messageService
      ->getThreadForMembers($members);
    if (!$thread instanceof PrivateMessageThreadInterface) {
      return NULL;
    }

    // Prepare the url to the created thread.
    $url = Url::fromRoute('entity.private_message_thread.canonical', [
      'private_message_thread' => $thread
        ->id(),
    ])
      ->toString();
    return new RedirectResponse($url);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route.
ControllerBase::state protected function Returns the state storage service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
OpignoMessageThreadController::$database protected property The DB connection service.
OpignoMessageThreadController::$messageService protected property Opigno private messaging manager service.
OpignoMessageThreadController::$messageStorage protected property The private messages storage.
OpignoMessageThreadController::closeModal public function Close the modal.
OpignoMessageThreadController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
OpignoMessageThreadController::getDeleteThreadForm public function Get the delete thread confirmation form.
OpignoMessageThreadController::getEditThreadForm public function Get the private messages thread edit form.
OpignoMessageThreadController::getThreadForm public function Get the private messages thread create form.
OpignoMessageThreadController::prepareThreadFormResponse private function Prepare the AJAX response to display the thread add/edit form.
OpignoMessageThreadController::redirectToNewThread public function Create the new thread with the given user and redirect to its page.
OpignoMessageThreadController::__construct public function OpignoMessageThreadController constructor.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.