%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/modules/im/lib/replica/
Upload File :
Create Path :
Current File : //home/bitrix/www/bitrix/modules/im/lib/replica/chathandler.php

<?php
namespace Bitrix\Im\Replica;

use Bitrix\Main\Loader;

if (Loader::includeModule('replica'))
{
	class ChatHandler extends \Bitrix\Replica\Client\BaseHandler
	{
		protected $tableName = "b_im_chat";
		protected $moduleId = "im";
		protected $className = "\\Bitrix\\Im\\Model\\ChatTable";
		protected $primary = array(
			"ID" => "auto_increment",
		);
		protected $predicates = array(
			"AUTHOR_ID" => "b_user.ID",
		);
		protected $translation = array(
			"ID" => "b_im_chat.ID",
			"AUTHOR_ID" => "b_user.ID",
			"AVATAR" => "b_file.ID",
			"LAST_MESSAGE_ID" => "b_im_message.ID",
		);
		protected $children = array(
			"ID" => "b_im_relation.CHAT_ID",
		);
		protected $fields = array(
			"TITLE" => "text",
			"DESCRIPTION" => "text",
			"DATE_CREATE" => "datetime",
		);

		/**
		 * Method will be invoked before new database record inserted.
		 * When an array returned the insert will be cancelled and map for
		 * returned record will be added.
		 *
		 * @param array &$newRecord All fields of inserted record.
		 *
		 * @return null|array
		 */
		public function beforeInsertTrigger(array &$newRecord)
		{
			unset($newRecord["DISK_FOLDER_ID"]);
			if (
				isset($newRecord["TYPE"])
				&& $newRecord["TYPE"] === "S"
			)
			{
				$chatList = \Bitrix\Im\Model\ChatTable::getList(array(
					"filter" => array(
						"=AUTHOR_ID" => $newRecord["AUTHOR_ID"],
						"=TYPE" => "S",
					),
				));
				$oldRecord = $chatList->fetch();
				if ($oldRecord)
				{
					return $oldRecord;
				}
			}
			return null;
		}

		/**
		 * Method will be invoked before an database record updated.
		 *
		 * @param array $oldRecord All fields before update.
		 * @param array &$newRecord All fields after update.
		 *
		 * @return void
		 */
		public function beforeUpdateTrigger(array $oldRecord, array &$newRecord)
		{
			unset($newRecord["DISK_FOLDER_ID"]);
		}

		/**
		 * Method will be invoked after an database record updated.
		 *
		 * @param array $oldRecord All fields before update.
		 * @param array $newRecord All fields after update.
		 *
		 * @return void
		 */
		public function afterUpdateTrigger(array $oldRecord, array $newRecord)
		{
			if ($oldRecord['TITLE'] !== $newRecord['TITLE'])
			{
				if (\CModule::IncludeModule("pull"))
				{
					$ar = \CIMChat::GetRelationById($newRecord['CHAT_ID']);

					$clearCacheOpen = false;
					foreach ($ar as $rel)
					{
						if ($rel['MESSAGE_TYPE'] == IM_MESSAGE_OPEN)
						{
							$clearCacheOpen = true;
						}
						else
						{
							\CIMContactList::CleanChatCache($rel['USER_ID']);
						}

						\Bitrix\Pull\Event::add($rel['USER_ID'], Array(
							'module_id' => 'im',
							'command' => 'chatRename',
							'params' => Array(
								'chatId' => $newRecord['CHAT_ID'],
								'name' => $newRecord['TITLE'],
							),
							'extra' => \Bitrix\Im\Common::getPullExtra()
						));
					}
					if ($clearCacheOpen)
					{
						\CIMContactList::CleanAllChatCache();
					}
				}
			}
			if ($oldRecord['AVATAR'] !== $newRecord['AVATAR'])
			{
				if (\CModule::IncludeModule('pull'))
				{
					$avatarImage = \CIMChat::GetAvatarImage($newRecord['AVATAR']);
					$ar = \CIMChat::GetRelationById($newRecord['CHAT_ID']);

					$clearCacheOpen = false;
					foreach ($ar as $relation)
					{
						if ($relation['MESSAGE_TYPE'] == IM_MESSAGE_OPEN)
						{
							$clearCacheOpen = true;
						}
						else
						{
							\CIMContactList::CleanChatCache($relation['USER_ID']);
						}

						\Bitrix\Pull\Event::add($relation['USER_ID'], Array(
							'module_id' => 'im',
							'command' => 'chatAvatar',
							'params' => Array(
								'chatId' => $newRecord['CHAT_ID'],
								'avatar' => $avatarImage,
							),
							'extra' => \Bitrix\Im\Common::getPullExtra()
						));
					}
					if ($clearCacheOpen)
					{
						\CIMContactList::CleanAllChatCache();
					}
				}
			}
			if ($oldRecord['COLOR'] !== $newRecord['COLOR'])
			{
				if (\CModule::IncludeModule('pull'))
				{
					$ar = \CIMChat::GetRelationById($newRecord['CHAT_ID']);

					$clearCacheOpen = false;
					foreach ($ar as $relation)
					{
						if ($relation['MESSAGE_TYPE'] == IM_MESSAGE_OPEN)
						{
							$clearCacheOpen = true;
						}
						else
						{
							\CIMContactList::CleanChatCache($relation['USER_ID']);
						}

						\Bitrix\Pull\Event::add($relation['USER_ID'], Array(
							'module_id' => 'im',
							'command' => 'chatChangeColor',
							'params' => Array(
								'chatId' => $newRecord['CHAT_ID'],
								'color' => \Bitrix\Im\Color::getColor($newRecord['COLOR']),
							),
							'extra' => \Bitrix\Im\Common::getPullExtra()
						));
					}
					if ($clearCacheOpen)
					{
						\CIMContactList::CleanAllChatCache();
					}
				}
			}
		}
	}
}

Zerion Mini Shell 1.0