• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/livefeed/forumpost.php
  • Класс: BitrixSocialnetworkLivefeedForumPost
  • Вызов: ForumPost::getLiveFeedUrl
public function getLiveFeedUrl()
{
	static $urlCache = [];
	$result = '';

	$entityUrl = false;

	$logId = $this->getLogId();

	if ($logId)
	{
		if (isset($urlCache[$logId]))
		{
			$entityUrl = $urlCache[$logId];
		}
		else
		{
			$res = self::$logTable::getList([
				'filter' => [
					'ID' => $logId,
				],
				'select' => [ 'ENTITY_ID', 'EVENT_ID', 'SOURCE_ID', 'RATING_TYPE_ID', 'RATING_ENTITY_ID', 'PARAMS' ],
			]);
			if ($logEntryFields = $res->fetch())
			{
				$provider = false;

				$providerTasksTask = new TasksTask();
				if (in_array((string)$logEntryFields['EVENT_ID'], $providerTasksTask->getEventId(), true))
				{
					$entityId = (int)$logEntryFields['SOURCE_ID'];
					if ($logEntryFields['EVENT_ID'] === 'crm_activity_add')
					{
						if ($logEntryFields['RATING_TYPE_ID'] === 'TASK')
						{
							$entityId = (int)$logEntryFields['RATING_ENTITY_ID'];
						}
						elseif (
							$logEntryFields['RATING_TYPE_ID'] === 'LOG_ENTRY'
							&& Loader::includeModule('crm')
							&& ($activity = CCrmActivity::getById($logEntryFields['ENTITY_ID'], false))
							&& (int)$activity['TYPE_ID'] === CCrmActivityType::Task
						)
						{
							$entityId = (int)$activity['ASSOCIATED_ENTITY_ID'];
						}
						else
						{
							$entityId = 0;
						}
					}

					if ($entityId > 0)
					{
						$provider = $providerTasksTask;
						$provider->setOption('checkAccess', false);

						$provider->setEntityId($entityId);
						$provider->setLogId($logId);
						$provider->initSourceFields();

						$postUrl = $provider->getLiveFeedUrl();
						$entityUrl = $postUrl.(mb_strpos($postUrl, '?') === false ? '?' : '&').'commentId='.$this->getEntityId().'#com'.$this->getEntityId();
					}
				}

				if (!$provider)
				{
					$providerCalendarEvent = new CalendarEvent();
					if (in_array($logEntryFields['EVENT_ID'], $providerCalendarEvent->getEventId(), true))
					{
						$provider = $providerCalendarEvent;
						$provider->setEntityId((int)$logEntryFields['SOURCE_ID']);
						$provider->setLogId($logId);
						$provider->initSourceFields();

						$postUrl = $provider->getLiveFeedUrl();
						$entityUrl = $postUrl.(mb_strpos($postUrl, '?') === false ? '?' : '&').'commentId='.$this->getEntityId().'#com'.$this->getEntityId();
					}
				}

				if (!$provider)
				{
					$providerTimemanEntry = new TimemanEntry();
					if (in_array($logEntryFields['EVENT_ID'], $providerTimemanEntry->getEventId(), true))
					{
						$provider = $providerTimemanEntry;
						$provider->setEntityId((int)$logEntryFields['SOURCE_ID']);
						$provider->setLogId($logId);
						$provider->initSourceFields();
						$entityUrl = $provider->getLiveFeedUrl();
					}
				}

				if (!$provider)
				{
					$providerTimemanReport = new TimemanReport();
					if (in_array($logEntryFields['EVENT_ID'], $providerTimemanReport->getEventId(), true))
					{
						$provider = $providerTimemanReport;
						$provider->setEntityId((int)$logEntryFields['SOURCE_ID']);
						$provider->setLogId($logId);
						$provider->initSourceFields();
						$entityUrl = $provider->getLiveFeedUrl();
					}
				}

				if (!$provider)
				{
					$providerPhotogalleryPhoto = new PhotogalleryPhoto();
					if (in_array($logEntryFields['EVENT_ID'], $providerPhotogalleryPhoto->getEventId(), true))
					{
						$provider = $providerPhotogalleryPhoto;
						$provider->setEntityId((int)$logEntryFields['SOURCE_ID']);
						$provider->setLogId($logId);
						$provider->initSourceFields();
						$entityUrl = $provider->getLiveFeedUrl();
					}
				}

				if (!$provider)
				{
					$providerWiki = new Wiki();
					if (in_array($logEntryFields['EVENT_ID'], $providerWiki->getEventId(), true))
					{
						$provider = $providerWiki;
						$provider->setEntityId((int)($logEntryFields['SOURCE_ID']));
						$provider->setLogId($logId);
						$provider->initSourceFields();
						$entityUrl = $provider->getLiveFeedUrl();
					}
				}

				if (!$provider)
				{
					$providerListsItem = new ListsItem();
					if (in_array($logEntryFields['EVENT_ID'], $providerListsItem->getEventId(), true))
					{
						$provider = $providerListsItem;
						$provider->setEntityId((int)($logEntryFields['SOURCE_ID']));
						$provider->setLogId($logId);
						$provider->initSourceFields();
						$entityUrl = $provider->getLiveFeedUrl().'?commentId='.$this->getEntityId().'#com'.$this->getEntityId();
					}
				}

				if (!$provider)
				{
					$providerForumTopic = new ForumTopic();
					if (
						!empty($logEntryFields['PARAMS'])
						&& unserialize($logEntryFields['PARAMS'], ['allowed_classes' => false])
						&& in_array($logEntryFields['EVENT_ID'], $providerForumTopic->getEventId(), true)
					)
					{
						$paramsList = unserialize($logEntryFields["PARAMS"], ['allowed_classes' => false]);
						if (!empty($paramsList["PATH_TO_MESSAGE"]))
						{
							$entityUrl = CComponentEngine::makePathFromTemplate($paramsList["PATH_TO_MESSAGE"], [ "MID" => $this->getEntityId() ]);
						}
					}
				}
			}
		}
	}

	if (!empty($entityUrl))
	{
		$result = $entityUrl;
	}

	return $result;
}