- Модуль: 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;
}