• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/commentaux/taskinfo.php
  • Класс: BitrixSocialnetworkCommentAuxTaskInfo
  • Вызов: TaskInfo::getParamsFromFields
public function getParamsFromFields($fields = []): array
{
	static $cacheData = [];

	$params = [];

	if (!empty($fields['SHARE_DEST'])) // old
	{
		$paramsList = unserialize(htmlspecialcharsback($fields['SHARE_DEST']), [ 'allowed_classes' => false ]);
		if (!empty($paramsList))
		{
			$params = $paramsList;
		}
		else
		{
			$paramsList = explode('|', $fields['SHARE_DEST']);
			if (!empty($paramsList))
			{
				foreach ($paramsList as $pair)
				{
					[ $key, $value ] = explode('=', $pair);
					if (isset($key, $value))
					{
						$params[$key] = $value;
					}
				}
			}
		}
	}
	elseif (
		!empty($fields['EVENT_ID'])
		&& in_array($fields['EVENT_ID'], [ 'tasks_comment', 'crm_activity_add_comment' ])
		&& !empty($fields['SOURCE_ID'])
		&& (int)$fields['SOURCE_ID'] > 0
		&& Loader::includeModule('forum')
	) // new
	{
		$messageId = (int)$fields['SOURCE_ID'];

		if (isset($cacheData[$messageId]))
		{
			$params = $cacheData[$messageId];
		}
		else
		{
			$forumPostLivefeedProvider = new BitrixSocialnetworkLivefeedForumPost();
			$commentData = $forumPostLivefeedProvider->getAuxCommentCachedData($messageId);

			if (
				!empty($commentData)
				&& isset($commentData['SERVICE_TYPE'])
				&& $commentData['SERVICE_TYPE'] === BitrixForumCommentsServiceManager::TYPE_TASK_INFO
				&& (
					!empty($commentData['SERVICE_DATA'])
					|| !empty($commentData['POST_MESSAGE'])
				)
			)
			{
				try
				{
					$messageParams = Json::decode(!empty($commentData['SERVICE_DATA']) ? $commentData['SERVICE_DATA'] : $commentData['POST_MESSAGE']);
					if (!is_array($messageParams))
					{
						$messageParams = [];
					}
				}
				catch(BitrixMainArgumentException $e)
				{
					$messageParams = [];
				}

				$cacheData[$messageId] = $params = $messageParams;
			}
			else
			{
				$res = self::$forumMessageTableClass::getList([
					'filter' => [
						'=ID' => $messageId
					],
					'select' => ['TOPIC_ID']
				]);
				if (
					($forumMessageFields = $res->fetch())
					&& !empty($forumMessageFields['TOPIC_ID'])
				)
				{
					$res = self::$forumMessageTableClass::getList([
						'filter' => [
							'=TOPIC_ID' => (int)$forumMessageFields['TOPIC_ID']
						],
						'select' => [ 'ID', 'SERVICE_DATA', 'POST_MESSAGE' ]
					]);
					while (
						($forumMessageFields = $res->fetch())
						&& (
							!empty($forumMessageFields['SERVICE_DATA'])
							|| !empty($forumMessageFields['POST_MESSAGE'])
						)
					)
					{
						try
						{
							$messageParams = Json::decode(!empty($forumMessageFields['SERVICE_DATA']) ? $forumMessageFields['SERVICE_DATA'] : $forumMessageFields['POST_MESSAGE']);
							if (!is_array($messageParams))
							{
								$messageParams = [];
							}
						}
						catch(BitrixMainArgumentException $e)
						{
							$messageParams = [];
						}

						$cacheData[$forumMessageFields['ID']] = $messageParams;
					}

					$params = ($cacheData[$messageId] ?? []);
				}
			}
		}
	}

	return $params;
}