403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/socialnetwork/lib/integration/im/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/socialnetwork/lib/integration/im/chatfactory.php
<?php

declare(strict_types=1);

namespace Bitrix\Socialnetwork\Integration\Im;

use Bitrix\Im\V2\Chat;
use Bitrix\Main\Error;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Result;
use Bitrix\Socialnetwork\Item\Workgroup;
use Bitrix\Socialnetwork\Item\Workgroup\Type;
use CSite;

class ChatFactory
{
	private const CHAT_ENTITY_TYPE = 'SONET_GROUP';

	private Workgroup $group;

	public static function createChat(Workgroup $group): Result
	{
		$result = new Result();

		if (!Loader::includeModule('im'))
		{
			$result->addError(new Error('IM is not installed'));

			return $result;
		}

		$factory = new static($group);

		$fields = match ($factory->group->getType())
		{
			Type::Project, Type::Scrum => $factory->getProjectChatFields(),
			Type::Collab => $factory->getCollabChatFields(),
			default => $factory->getGroupChatFields(),
		};

		$chatResult = Chat\ChatFactory::getInstance()->addChat($fields);

		$result->addErrors($chatResult->getErrors());

		return $result;
	}

	public static function getChatTitle(string $groupTitle, ?Type $groupType): string
	{
		return match ($groupType)
		{
			Type::Project, Type::Scrum => Loc::getMessage('SOCIALNETWORK_WORKGROUP_CHAT_FACTORY_TITLE_PROJECT', [
				'#GROUP_NAME#' => $groupTitle,
			], static::getLanguageId()),

			Type::Collab => $groupTitle,

			default => Loc::getMessage('SOCIALNETWORK_WORKGROUP_CHAT_FACTORY_TITLE', [
				'#GROUP_NAME#' => $groupTitle,
			], static::getLanguageId()),
		};
	}

	private function __construct(Workgroup $group)
	{
		$this->group = $group;
	}

	private static function getLanguageId(): string
	{
		$currentSite = CSite::getById(SITE_ID)->fetch();

		return (string)($currentSite ? $currentSite['LANGUAGE_ID'] : LANGUAGE_ID);
	}

	private function getCollabChatFields(): array
	{
		return array_merge($this->getCommonFields(), self::getUniqueCollabChatFields());
	}

	public static function getUniqueFieldsByType(Type $type): array
	{
		return match ($type) {
			Type::Collab => self::getUniqueCollabChatFields(),
			default => self::getUniqueGroupChatFields(),
		};
	}

	public static function getUniqueGroupChatFields(): array
	{
		$fields = [];

		$fields['TYPE'] = Chat::IM_TYPE_CHAT;
		$fields['SKIP_ADD_MESSAGE'] = 'Y';

		return $fields;
	}

	public static function getUniqueCollabChatFields(): array
	{
		$fields = [];

		$fields['TYPE'] = Chat::IM_TYPE_COLLAB;
		$fields['SKIP_ADD_MESSAGE'] = 'N';
		$fields['MANAGE_USERS_DELETE'] = Chat::MANAGE_RIGHTS_OWNER;
		$fields['MANAGE_UI'] = Chat::MANAGE_RIGHTS_OWNER;

		return $fields;
	}

	private function getGroupChatFields(): array
	{
		$fields = $this->getCommonFields();

		$fields['TYPE'] = IM_MESSAGE_CHAT;

		return $fields;
	}

	private function getProjectChatFields(): array
	{
		$fields = $this->getCommonFields();

		$fields['TYPE'] = IM_MESSAGE_CHAT;

		return $fields;
	}

	private function getCommonFields(): array
	{
		$fields = [
			'TITLE' => static::getChatTitle($this->group->getName(), $this->group->getType()),
			'DESCRIPTION' => $this->group->getDescription(),
			'ENTITY_TYPE' => self::CHAT_ENTITY_TYPE,
			'ENTITY_ID' => $this->group->getId(),
			'SKIP_ADD_MESSAGE' => 'Y',
			'AUTHOR_ID' => $this->group->getOwnerId(),
			'USERS' => $this->getMembers(),
			'USER_ID' => 0,
		];

		if ($this->group->getImageId() > 0)
		{
			$fields['AVATAR_ID'] = $this->group->getImageId();
			$fields['AVATAR'] = $this->group->getImageId();
		}

		return $fields;
	}

	private function getMembers(): array
	{
		$members = $this->group->getUserMemberIds();
		if (empty($members))
		{
			$members[] = $this->group->getOwnerId();
		}

		return $members;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit