o365-2.0.3/modules/o365_teams/src/Form/O365TeamsSendMessageForm.php

modules/o365_teams/src/Form/O365TeamsSendMessageForm.php
<?php

namespace Drupal\o365_teams\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Url;
use Drupal\o365_teams\O365TeamsSendMessageService;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Provides an Microsoft 365 - Teams integration form.
 */
final class O365TeamsSendMessageForm extends FormBase {

  /**
   * Our custom message sending service.
   *
   * @var \Drupal\o365_teams\O365TeamsSendMessageService
   */
  protected $sendMessageService;

  /**
   * The current request.
   *
   * @var \Symfony\Component\HttpFoundation\Request|null
   */
  protected $request;

  /**
   * The form class constructor.
   *
   * @param \Drupal\o365_teams\O365TeamsSendMessageService $sendMessageService
   *   Our custom message sending service.
   * @param \Symfony\Component\HttpFoundation\RequestStack $request
   *   The current request stack.
   */
  public function __construct(O365TeamsSendMessageService $sendMessageService, RequestStack $request) {
    $this->sendMessageService = $sendMessageService;
    $this->request = $request->getCurrentRequest();
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container->get('o365_teams.send_message_service'), $container->get('request_stack'));
  }

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'o365_teams_o365_teams_send_message';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['message_container'] = [
      '#type' => 'container',
    ];

    // When modal  === 'true' we will use some different form of form.
    $modal = $this->request->get('modal');
    $form_state->set('modal', $modal);

    // When redirect is filled, we will redirect to the specified route.
    $redirect = $this->request->get('redirect');
    $form_state->set('redirect', $redirect);

    $defaultRecipient = '';
    if (!empty($this->request->get('to'))) {
      $user = $this->sendMessageService->getUserDataFromRecipient($this->request->get('to'));
      $defaultRecipient = $user->getDisplayName() . ' (' . $user->getUserPrincipalName() . ')';
    }

    $form['message_container']['recipient'] = [
      '#type' => ($modal === 'true' && !empty($defaultRecipient)) ? 'hidden' : 'textfield',
      '#title' => $this->t('Recipient'),
      '#autocomplete_route_name' => 'o365_teams.autocomplete.teams_recipients',
      '#required' => TRUE,
      '#default_value' => $defaultRecipient,
    ];

    $form['message_container']['message'] = [
      '#type' => 'textarea',
      '#title' => $this->t('Message'),
      '#required' => TRUE,
    ];

    if (!empty($this->request->get('to'))) {
      $linkTitle = new TranslatableMarkup('This link opens in a new window');
      $url = Url::fromUri('https://teams.microsoft.com/l/chat/0/0?users=' . $this->request->get('to'), [
        'attributes' => [
          'target' => '_blank',
          'title' => $linkTitle,
        ],
      ]);
      $text = new TranslatableMarkup('Open a chat with @name in Microsoft Teams', ['@name' => $user->getDisplayName()]);
      $link = Link::fromTextAndUrl($text, $url);
      $form['message_container']['teams_link'] = $link->toRenderable();
    }

    $form['actions'] = [
      '#type' => 'actions',
    ];
    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Send'),
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $recipient = $this->sendMessageService->sendMessageToUser($form_state->getValue('recipient'), $form_state->getValue('message'));
    $route = 'o365_teams.send_message';
    $params = ['to' => $recipient];

    if ($form_state->get('modal') === 'true') {
      $route = $form_state->get('redirect');
      $params = [];
    }

    $form_state->setRedirect($route, $params);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc