public function RocketChatChannelBlock::build in Rocket.Chat 8.2
Throws
InvalidPluginDefinitionException
\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\BlockCode
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 [];
}
}