• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/controller/controlbutton.php
  • Класс: BitrixIntranetControllerControlButton
  • Вызов: ControlButton::getTaskLinkAction
public function getTaskLinkAction($entityType, $entityId, $postEntityType = '', $entityData = []): array
{
	global $USER;

	$result = [
		'link' => '',
		'TITLE' => '',
		'DESCRIPTION' => '',
		'AUDITORS' => '',
	];

	if (!$entityType || !$entityId)
	{
		return $result;
	}

	switch (strtolower($entityType))
	{
		case 'calendar_event':
			$data = $this->getCalendarData($entityId, $entityData);
			break;
		default:

			if (
				!Loader::includeModule('socialnetwork')
				|| !Loader::includeModule('tasks')
			)
			{
				return $result;
			}

			$data = [];

			if ($provider = BitrixSocialnetworkLivefeedProvider::init([
				'ENTITY_TYPE' => $entityType,
				'ENTITY_ID' => $entityId,
				'CLONE_DISK_OBJECTS' => true,
			]))
			{
				$data = [
					'TITLE' => $provider->getSourceTitle(),
					'DESCRIPTION' => $provider->getSourceDescription(),
					'SUFFIX' => $provider->getSuffix(),
					'URL' => $provider->getLiveFeedUrl(),
					'DISK_FILES' => array_values($provider->getAttachedDiskObjectsCloned()),
					'SONET_GROUP_ID' => $provider->getSonetGroupsAvailable(),
				];
			}
	}

	if (!empty($data))
	{
		$result['link'] = str_replace(
			[ '#USER_ID#', '#ID#' ],
			$USER->getId(),
			Option::get('intranet', 'search_user_url', SITE_DIR . 'company/personal/user/#USER_ID#/')
		) . 'tasks/task/edit/0/';
		$result['TITLE'] = $data['TITLE'];
		$result['DESCRIPTION'] = $data['DESCRIPTION'];
		$result['URL'] = $data['URL'];

		if (isset($data['USER_IDS']) && !empty($data['USER_IDS']))
		{
			$result['AUDITORS'] = implode(',', $data['USER_IDS']);
		}

		if ($entityType === 'calendar_event')
		{
			$result['CALENDAR_EVENT_ID'] = $data['ID'];
			$result['CALENDAR_EVENT_DATA'] = $entityData;
		}
		else
		{
			$result['SOURCE_POST_ENTITY_TYPE'] = $postEntityType;
			$result['SOURCE_ENTITY_TYPE'] = $entityType;
			$result['SOURCE_ENTITY_ID'] = (int)$entityId;
			$result['SUFFIX'] = $data['SUFFIX'];

			if (!empty($data['DISK_FILES']))
			{
				$diskFileUFCode = BitrixTasksIntegrationDiskUserField::getMainSysUFCode();
				$result[$diskFileUFCode] = $data['DISK_FILES'];
				$signer = new Signer;
				$result[$diskFileUFCode . '_SIGN'] = $signer->sign(Json::encode($data['DISK_FILES']), static::SIGNATURE_SALT);
			}

			if (
				!empty($data['SONET_GROUP_ID'])
				&& count($data['SONET_GROUP_ID']) === 1
			)
			{
				$result['GROUP_ID'] = (int)array_pop($data['SONET_GROUP_ID']);
			}
		}
	}

	return $result;
}