• Модуль: mobile
  • Путь к файлу: ~/bitrix/modules/mobile/classes/general/mobile_helper.php
  • Класс: CMobileHelper
  • Вызов: CMobileHelper::createLink
static function createLink($tag)
{
	global $USER;

	$link = SITE_DIR.'mobile/log/?ACTION=CONVERT';
	$result = false;
	$unique = false;
	$uniqueParams = "{}";

	if (
		mb_substr($tag, 0, 10) == 'BLOG|POST|'
		|| mb_substr($tag, 0, 18) == 'BLOG|POST_MENTION|'
		|| mb_substr($tag, 0, 11) == 'BLOG|SHARE|'
		|| mb_substr($tag, 0, 17) == 'BLOG|SHARE2USERS|'
		|| mb_substr($tag, 0, 25) == 'RATING_MENTION|BLOG_POST|'
	)
	{
		$params = explode("|", $tag);
		$result = $link."&ENTITY_TYPE_ID=BLOG_POST&ENTITY_ID=".$params[2];
	}
	elseif (
		mb_substr($tag, 0, 13) == 'BLOG|COMMENT|'
		|| mb_substr($tag, 0, 21) == 'BLOG|COMMENT_MENTION|'
	)
	{
		$params = explode("|", $tag);
		if (!empty($params[3]))
		{
			$result = $link."&ENTITY_TYPE_ID=BLOG_COMMENT&ENTITY_ID=".$params[3].'#com'.$params[3];
		}
		else
		{
			$result = $link."&ENTITY_TYPE_ID=BLOG_POST&ENTITY_ID=".$params[2];
		}
	}
	else if (mb_substr($tag, 0, 28) == 'RATING_MENTION|BLOG_COMMENT|')
	{
		$params = explode("|", $tag);
		$result = $link."&ENTITY_TYPE_ID=BLOG_COMMENT&ENTITY_ID=".$params[2];
	}
	else if (mb_substr($tag, 0, 10) == 'RATING|IM|')
	{
		$params = explode("|", $tag);
		return "BX.MobileTools.openChat(".($params[2] == 'P'? $params[3]: "'chat".$params[3]."'").");";
	}
	else if (mb_substr($tag, 0, 11) == 'IM|MENTION|')
	{
		$params = explode("|", $tag);
		return "BX.MobileTools.openChat('chat".$params[2]."');";
	}
	else if (mb_substr($tag, 0, 10) == 'RATING|DL|')
	{
		$params = explode("|", $tag);
		$result = $link."&ENTITY_TYPE_ID=".$params[2]."&ENTITY_ID=".$params[3];
	}
	else if (
		mb_substr($tag, 0, 13) === 'FORUM|COMMENT'
		|| mb_substr($tag, 0, 26) === 'RATING_MENTION|FORUM_POST|'
		|| mb_substr($tag, 0, 18) === 'RATING|FORUM_POST|'
	)
	{
		$params = explode("|", $tag);
		if (
			!empty($params[1])
			&& !empty($params[2])
			&& Loader::includeModule('socialnetwork')
		)
		{
			$liveFeedEntity = BitrixSocialNetworkLivefeedProvider::init([
				'ENTITY_TYPE' => BitrixSocialnetworkLivefeedProvider::DATA_ENTITY_TYPE_FORUM_POST,
				'ENTITY_ID' => $params[2]
			]);

			$suffix = $liveFeedEntity->getSuffix();
			if ($suffix === 'TASK')
			{
				$res = LogTable::getList(array(
					'filter' => array(
						'ID' => $liveFeedEntity->getLogId()
					),
					'select' => [ 'ENTITY_ID', 'EVENT_ID', 'SOURCE_ID' ]
				));
				if($logEntryFields = $res->fetch())
				{
					if ($logEntryFields['EVENT_ID'] === 'crm_activity_add')
					{
						if (
							Loader::includeModule('crm')
							&& ($activityFields = CCrmActivity::getById($logEntryFields['ENTITY_ID'], false))
							&& $activityFields['TYPE_ID'] == CCrmActivityType::Task
						)
						{
							$taskId = (int)$activityFields['ASSOCIATED_ENTITY_ID'];
						}
					}
					else
					{
						$taskId = (int)$logEntryFields['SOURCE_ID'];
					}

					if ($taskId > 0)
					{
						return self::getTaskLink($taskId);
					}
				}
			}
		}

		if (!$result)
		{
			$result = $link."&ENTITY_TYPE_ID=FORUM_POST&ENTITY_ID=".$params[2];
		}
	}
	else if (mb_substr($tag, 0, 7) == 'RATING|')
	{
		$params = explode("|", $tag);
		if ($params[1] == 'TASK')
		{
			if (!empty(($taskId = $params[2]) && Loader::includeModule('tasks')))
			{
				return self::getTaskLink($taskId);
			}
		}
		elseif ($params[1] == 'BLOG_COMMENT')
		{
			$result = $link."&ENTITY_TYPE_ID=".$params[1]."&ENTITY_ID=".$params[2].'#com'.$params[2];
		}
		else
		{
			$result = $link."&ENTITY_TYPE_ID=".$params[1]."&ENTITY_ID=".$params[2];
		}
	}
	else if (mb_substr($tag, 0, 15) == 'CALENDAR|INVITE' ||
		mb_substr($tag, 0, 16) == 'CALENDAR|COMMENT' ||
		mb_substr($tag, 0, 15) == 'CALENDAR|STATUS'
	)
	{
		$params = explode("|", $tag);
		if (count($params) >= 5 && $params[4] == 'cancel')
			$result = false;
		else
			$result = SITE_DIR.'mobile/calendar/view_event.php?event_id='.$params[2];
	}
	else if (mb_substr($tag, 0, 21) == 'FORUM|COMMENT_MENTION')
	{
		$params = explode("|", $tag);
		$result = $link."&ENTITY_TYPE_ID=LOG_COMMENT&ENTITY_ID=".$params[2];
	}
	else if (mb_substr($tag, 0, 7) == 'VOTING|')
	{
		$params = explode("|", $tag);
		$result = $link."&ENTITY_TYPE_ID=VOTING&ENTITY_ID=".$params[1];
	}
	else if (
		mb_substr($tag, 0, 13) == 'PHOTO|COMMENT'
		|| mb_substr($tag, 0, 12) == 'WIKI|COMMENT'
	)
	{
		$params = explode("|", $tag);
		$result = $link."&ENTITY_TYPE_ID=IBLOCK_ELEMENT&ENTITY_ID=".$params[2];
	}
	else if (
		mb_substr($tag, 0, 34) == 'INTRANET_NEW_USER|COMMENT_MENTION|'
		|| mb_substr($tag, 0, 22) == 'LISTS|COMMENT_MENTION|'
		|| mb_substr($tag, 0, 27) == 'RATING_MENTION|LOG_COMMENT|'
	)
	{
		$params = explode("|", $tag);
		$result = $link."&ENTITY_TYPE_ID=LOG_COMMENT&ENTITY_ID=".$params[2];
	}
	else if (
		mb_substr($tag, 0, 12) == 'SONET|EVENT|'
	)
	{
		$params = explode("|", $tag);
		$result = $link."&ENTITY_TYPE_ID=LOG_ENTRY&ENTITY_ID=".$params[2];
	}
	else if (
		mb_substr($tag, 0, 11) == 'TASKS|TASK|' || mb_substr($tag, 0, 14) == 'TASKS|COMMENT|'
	)
	{
		// the format is:
		// for task modifications:
		// TASKS|TASK|%task_id%|%user_id%
		// for task comments:
		// TASKS|TASK_COMMENT|%task_id%|%user_id%|%comment_id%

		$params = explode("|", $tag);
		if (!empty(($taskId = $params[2]) && Loader::includeModule('tasks')))
		{
			return self::getTaskLink($taskId);
		}

		// after task detail page supports reloading only by TASK_ID, use the following:
		//$result = SITE_DIR.'mobile/tasks/snmrouter/?routePage=__ROUTE_PAGE__&USER_ID='.intval($GLOBALS['USER']->GetId());
		//$uniqueParams = "{task_id:".intval($params[2]).", params_emitter: 'tasks_list'}";
		//$unique = true;
	}
	else if (
		mb_substr($tag, 0, 6) == 'ROBOT|'
	)
	{
		$params = explode("|", $tag);
		if ($params[1] == 'CRM' && isset($params[3]))
		{
			list($entityTypeName, $entityId) = explode('_', $params[3]);
			$entityTypeName = mb_strtolower($entityTypeName);
			$entityId = (int)$entityId;

			if ($entityTypeName === 'lead' || $entityTypeName === 'deal')
			{
				$result = SITE_DIR.'mobile/crm/'.$entityTypeName.'/?page=view&'.$entityTypeName.'_id='.$entityId;
			}
		}
	}
	else if (
		mb_strpos($tag, 'BIZPROC|TASK|') === 0
	)
	{
		$params = explode("|", $tag);
		if (isset($params[2]))
		{
			$result = SITE_DIR.'mobile/bp/detail.php?task_id='.(int)$params[2];
		}
	}

	if ($result)
	{
		if ($unique)
		{
			$result = "BXMobileApp.PageManager.loadPageUnique({'url' : '".$result."','bx24ModernStyle' : true, 'data': ".$uniqueParams."});";
		}
		else
		{
			$result = "BXMobileApp.PageManager.loadPageBlank({url: '".$result."', 'unique': ".($unique? 'true': 'false').", 'bx24ModernStyle': true})";
		}
	}
	return $result;
}