You are here

public function RocketChatChannelBlock::build in Rocket.Chat 8.2

Throws

InvalidPluginDefinitionException

PluginNotFoundException

\Exception

Overrides BlockPluginInterface::build

File

modules/rocket_chat_group/src/Plugin/Block/RocketChatChannelBlock.php, line 144

Class

RocketChatChannelBlock
Provides an example block.

Namespace

Drupal\rocket_chat_group\Plugin\Block

Code

public function build() {
  $apiConfig = new Drupal8Config($this->configFactory, $this->moduleHandler, $this->state, $this->messenger);
  $apiClient = new ApiClient($apiConfig);
  if ($apiConfig
    ->isReady() && $apiClient
    ->ping()) {
    $groupEntity = $this
      ->retrieveGroupFromPath();
    $member = FALSE;
    if (!empty($groupEntity)) {
      $newGroup = $groupEntity
        ->isNew();
      $groupOwner = $groupEntity
        ->getOwner();
      $channel = NULL;
      $member = $groupEntity
        ->getMember($this->account);
      $groupMembers = $groupEntity
        ->getMembers();
      $groupUsers = [];
      foreach ($groupMembers as $groupMember) {
        $groupUsers[] = $groupMember
          ->getUser();
      }
    }
    if ($member !== FALSE) {
      if (!empty($groupEntity)) {
        $fieldName = moduleHelper::extractChannelMachineName($groupEntity);
        if (!empty($fieldName) && isset($groupEntity->{$fieldName})) {
          foreach ($groupEntity->{$fieldName}
            ->getValue() as $channelDetails) {
            foreach ($channelDetails as $channelName) {
              $channel = new Channel(Channel::READ | Channel::WRITE, $channelName);
              break;
            }
            break;
          }
          if (!empty($channel)) {
            if ($groupEntity->type
              ->getValue()[0]['target_id'] === "closed_group") {
              $channel
                ->setChannelType(Channel::READ | Channel::WRITE | Channel::PRIVATE_CHANNEL);
            }
            else {
              $channel
                ->setChannelType(Channel::READ | Channel::WRITE | Channel::PUBLIC_CHANNEL);
            }
          }
        }
        if (!empty($channel) && $apiClient
          ->ping()) {
          $chatUser = [];
          $chatUserProxy = [];
          foreach ($groupUsers as $groupUser) {
            $rcUser = new RocketchatUser(new Drupal8State($this->state), $groupUser
              ->getAccountName(), $groupUser
              ->getEmail(), $groupUser
              ->getDisplayName());
            $chatUser[] = $rcUser;
            $chatUserProxy[] = $rcUser
              ->getUserProxy($apiClient);
          }
          $chatGroupOwner = new RocketchatUser(new Drupal8State($this->state), $groupOwner
            ->getAccountName(), $groupOwner
            ->getEmail(), $groupOwner
            ->getDisplayName());
          $channelProxy = $channel
            ->getChannelProxy($apiClient);
          if (is_null($channelProxy)) {
            $this->Logger
              ->error("Channel/Group Creation / Retrieval Failed");
            return [];
          }
        }
        else {
          if ($apiClient
            ->ping()) {
            $this->messenger
              ->addError($this
              ->t("Channel not available., Contact the site admin."), TRUE);
          }
          else {
            $this->messenger
              ->addError($this
              ->t("Rocket Chat not available., Contact the site admin."), FALSE);
          }
        }
      }
      if (!empty($channel)) {
        $serverUrl = Drupal::configFactory()
          ->get('rocket_chat.settings')
          ->get('server');
        $channelURL = $channel
          ->getChannelURI();
        $targetURL = "{$serverUrl}{$channelURL}?layout=embedded";
      }
      $build = [];
      $build['#cache']["max-age"] = 0;
      $build['content']['#host'] = empty($serverUrl) ? "*" : $serverUrl;
      $build['content']['#app'] = "rocketchat://" . parse_url($serverUrl, PHP_URL_HOST);
      if ($this
        ->canSeeDirectLinkButtons($groupEntity, $groupMember)) {
        $build['content']['#showDirectLink'] = TRUE;
      }
      else {
        $build['content']['#showDirectLink'] = FALSE;
      }
      if (!empty($targetURL)) {
        $build['content']['#height'] = "750px";
        $build['content']['#width'] = "1334px";
        $build['content']['#url'] = "{$targetURL}";
        $build['content']['#theme'] = 'rocketChatChannelBlock';
        $build['content']['#markup'] = $this
          ->t('channel');
        return $build;
      }
      else {
        $this->messenger
          ->addWarning($this
          ->t("Unable to locate channel, Contact the administrator"), TRUE);
        return [];
      }
    }
    else {

      //Not a member.
      if ($this->moduleHandler
        ->moduleExists('devel')) {
        $this->messenger
          ->addStatus($this->account
          ->getDisplayName() . " is not a Member.");
      }
      return [];
    }
  }
  else {
    if ($apiClient
      ->ping()) {
      $this->messenger
        ->addWarning($this
        ->t("Unable to use Chat"), TRUE);
    }
    else {
      $this->messenger
        ->addError($this
        ->t("Rocket Chat not available., Contact the site admin."), FALSE);
    }
    return [];
  }
}