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/rospirotorg.ru/bitrix/modules/im/lib/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/im/lib/alias.php
<?php
namespace Bitrix\Im;

use Bitrix\Im\Model\AliasTable;
use Bitrix\Main\Result;
use Bitrix\Main\Type\DateTime;

class Alias
{
	const ENTITY_TYPE_USER = 'USER';
	const ENTITY_TYPE_CHAT = 'CHAT';
	const ENTITY_TYPE_OPEN_LINE = 'LINES';
	const ENTITY_TYPE_LIVECHAT = 'LIVECHAT';
	const ENTITY_TYPE_VIDEOCONF = 'VIDEOCONF';
	const ENTITY_TYPE_OTHER = 'OTHER';

	const CACHE_TTL = 31536000;
	const CACHE_PATH = '/bx/im/alias/';

	const FILTER_BY_ALIAS = 'alias';
	const FILTER_BY_ID = 'id';

	public static function add(array $fields)
	{
		$alias = self::prepareAlias($fields['ALIAS']);
		$entityType = $fields['ENTITY_TYPE'];
		$entityId = $fields['ENTITY_ID'];

		if (
			($fields['ENTITY_TYPE'] !== self::ENTITY_TYPE_VIDEOCONF && empty($entityId))
			|| empty($entityType)
			|| empty($alias))
		{
			return false;
		}

		$aliasData = self::get($alias);
		if ($aliasData)
			return false;

		$result = \Bitrix\Im\Model\AliasTable::add(Array(
			'ALIAS' => $alias,
			'ENTITY_TYPE' => $entityType,
			'ENTITY_ID' => $entityId,
			'DATE_CREATE' => new DateTime()
		));
		if (!$result->isSuccess())
		{
			return false;
		}

		self::cleanChatCache($entityType, (int)$entityId);

		return $result->getId();
	}

	public static function addUnique(array $fields)
	{
		$alias = \Bitrix\Im\Alias::prepareAlias(self::generateUnique());
		$fields['ALIAS'] = $alias;

		$id = self::add($fields);
		if (!$id)
		{
			return self::addUnique($fields);
		}

		return Array(
			'ID' => $id,
			'ALIAS' => $alias,
			'LINK' => self::getPublicLink($fields['ENTITY_TYPE'], $alias)
		);
	}

	public static function update($id, $fields)
	{
		$id = intval($id);
		if ($id <= 0)
			return false;

		$update = Array();
		if (isset($fields['ALIAS']))
		{
			$update['ALIAS'] = self::prepareAlias($fields['ALIAS']);
			$result = self::get($update['ALIAS']);
			if ($result)
			{
				return false;
			}
		}

		if (isset($fields['ENTITY_TYPE']))
		{
			$update['ENTITY_TYPE'] = $fields['ENTITY_TYPE'];
		}
		if (isset($fields['ENTITY_ID']))
		{
			$update['ENTITY_ID'] = $fields['ENTITY_ID'];
		}

		if (empty($update))
			return false;

		$oldRecord = AliasTable::getByPrimary($id)->fetch();
		\Bitrix\Im\Model\AliasTable::update($id, $update);
		if ((int)$oldRecord['ENTITY_ID'] !== 0)
		{
			self::cleanChatCache($oldRecord['ENTITY_TYPE'], (int)$oldRecord['ENTITY_ID']);
		}
		if (
			isset($fields['ENTITY_TYPE'], $fields['ENTITY_ID'])
			&& (int)$fields['ENTITY_ID'] !== (int)$oldRecord['ENTITY_ID']
			&& (int)$fields['ENTITY_ID'] !== 0
		)
		{
			self::cleanChatCache($fields['ENTITY_TYPE'], (int)$fields['ENTITY_ID']);
		}

		return true;
	}

	public static function delete($id, $filter = self::FILTER_BY_ID)
	{
		if ($filter == self::FILTER_BY_ALIAS)
		{
			$aliasData = self::get($id);
			if (!$aliasData)
				return new Result();
		}
		else
		{
			$aliasData = AliasTable::getByPrimary($id)->fetch();
		}

		$result = \Bitrix\Im\Model\AliasTable::delete((int)$aliasData['ID']);
		self::cleanChatCache($aliasData['ENTITY_TYPE'], (int)$aliasData['ENTITY_ID']);

		return $result;
	}

	public static function get($alias)
	{
		$alias = self::prepareAlias($alias);
		if (empty($alias))
		{
			return false;
		}

		$query = \Bitrix\Im\Model\AliasTable::query();

		$connection = \Bitrix\Main\Application::getConnection();
		if ($connection instanceof \Bitrix\Main\DB\PgsqlConnection)
		{
			$alias = $connection->getSqlHelper()->forSql($alias);
			$query
				->setSelect(['*'])
				->whereExpr("LOWER(%s) = LOWER('{$alias}')", ['ALIAS'])
			;
		}
		else
		{
			$query
				->setSelect(['*'])
				->where('ALIAS', $alias)
			;
		}

		$result = $query->exec()->fetch();

		if (!$result)
		{
			return false;
		}

		$result['LINK'] = self::getPublicLink($result['ENTITY_TYPE'], $result['ALIAS']);

		return $result;
	}

	public static function getByIdAndCode($id, $code)
	{
		$query = \Bitrix\Im\Model\AliasTable::query();
		$query
			->setSelect(['*'])
			->where('ID', $id)
		;

		$connection = \Bitrix\Main\Application::getConnection();
		if ($connection instanceof \Bitrix\Main\DB\PgsqlConnection)
		{
			$code = $connection->getSqlHelper()->forSql($code);
			$query->whereExpr("LOWER(%s) = LOWER('{$code}')", ['ALIAS']);
		}
		else
		{
			$query->where('ALIAS', $code);
		}

		return $query->exec()->fetch();
	}

	public static function getByEntity($entityType, $entityId)
	{
		$result = \Bitrix\Im\Model\AliasTable::getList(Array(
			'filter' => ['=ENTITY_TYPE' => $entityType, '=ENTITY_ID' => $entityId]
		))->fetch();

		if (!$result)
		{
			return false;
		}

		$result['LINK'] = self::getPublicLink($result['ENTITY_TYPE'], $result['ALIAS']);

		return $result;
	}

	public static function prepareAlias($alias)
	{
		$alias = preg_replace("/[^\.\-0-9a-zA-Z]+/", "", $alias);
		$alias = mb_substr($alias, 0, 255);

		return $alias;
	}

	public static function getPublicLink($type, $alias)
	{
		$path = '/online/';

		if ($type === self::ENTITY_TYPE_VIDEOCONF)
		{
			$path = '/video/';
		}
		else if ($type === self::ENTITY_TYPE_LIVECHAT)
		{
			return '';
		}

		return \Bitrix\Im\Common::getPublicDomain() . $path . $alias;
	}

	public static function generateUnique()
	{
		if (\Bitrix\Main\Loader::includeModule('security'))
		{
			return \Bitrix\Main\Security\Random::getString(8, true);
		}
		else
		{
			return mb_substr(uniqid(),-8);
		}
	}

	protected static function cleanChatCache(string $entityType, int $entityId): void
	{
		if ($entityType !== self::ENTITY_TYPE_USER)
		{
			\Bitrix\Im\V2\Chat::cleanCache($entityId);
		}
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit