- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasknotifications.php
- Класс: CTaskNotifications
- Вызов: CTaskNotifications::getNotificationPath
static function getNotificationPath($arUser, $taskID, $bUseServerName = true, $arSites = array())
{
if(!is_array($arUser) || !intval($taskID))
{
return false;
}
static $siteCache = array();
$siteID = false;
$arTask = static::getTaskBaseByTaskId($taskID);
if (is_array($arTask) && !empty($arTask))
{
if(!is_array($arSites) || empty($arSites))
{
$arSites = BitrixTasksUtilSite::getPair();
}
// we have extranet and the current user is an extranet user
$bExtranet = BitrixTasksIntegrationExtranetUser::isExtranet($arUser["ID"]);
// task is in a group
$useGroup = $arTask['GROUP_ID'] && self::checkUserCanViewGroupExtended($arUser['ID'], $arTask['GROUP_ID']);
// detect site id
if($bExtranet)
{
$siteID = (string) CExtranet::GetExtranetSiteID();
}
else
{
if($useGroup)
{
$groupSiteList = self::getSocNetGroupSiteList($arTask['GROUP_ID']);
foreach($groupSiteList as $groupSite)
{
if (
isset($arSites['EXTRANET']['SITE_ID'])
&& $groupSite['LID'] == $arSites['EXTRANET']['SITE_ID']
)
{
continue;
}
$siteID = $groupSite['LID'];
$siteCache[$groupSite['LID']] = $groupSite;
break;
}
}
else
{
$userDataDb = CUser::GetList('', '', ['ID' => $arUser['ID']], ['FIELDS' => ['ID', 'LID']]);
if ($userData = $userDataDb->Fetch())
{
$siteID = $userData['LID'];
}
}
if(!$siteID) // still not detected, use just intranet site
{
if(isset($arSites['INTRANET']['SITE_ID']))
$siteID = $arSites['INTRANET']['SITE_ID'];
else
$siteID = (string) SITE_ID;
}
}
// get site
if(!isset($siteCache[$siteID]))
{
if((string) $siteID != '')
{
$siteCache[$siteID] = BitrixMainSiteTable::getList(array(
'filter' => array('=LID' => $siteID),
'select' => array('SITE_ID' => 'LID', 'DIR', 'SERVER_NAME'),
'limit' => 1
))->fetch();
}
}
if(!is_array($siteCache[$siteID]))
{
return false;// still no site??? abort!
}
// choose template
if ($useGroup)
{
$pathTemplate = str_replace(
array('#group_id#', '#GROUP_ID#'),
$arTask["GROUP_ID"],
CTasksTools::GetOptionPathTaskGroupEntry(
$siteID,
$siteCache[$siteID]['DIR'] . "workgroups/group/#group_id#/tasks/task/view/#task_id#/"
)
);
$workgroupsPage = Option::get('socialnetwork', 'workgroups_page', $siteCache[$siteID]['DIR'] . 'workgroups/', $siteID);
$pathTemplate = '#GROUPS_PATH#' . mb_substr($pathTemplate, mb_strlen($workgroupsPage), mb_strlen($pathTemplate) - mb_strlen($workgroupsPage));
$processed = CSocNetLogTools::ProcessPath(array("TASK_URL" => $pathTemplate), $arUser['ID'], $siteID);
$pathTemplate = $processed['URLS']['TASK_URL'];
}
else
{
$pathTemplate = CTasksTools::GetOptionPathTaskUserEntry(
$siteID,
$siteCache[$siteID]['DIR'] . ($bExtranet ? 'contacts' : 'company') . "/personal/user/#user_id#/tasks/task/view/#task_id#/"
);
}
// detect site name
$serverName = '';
if($bUseServerName)
{
$serverName = tasksServerName($siteCache[$siteID]['SERVER_NAME']);
}
$strUrl = $serverName
. CComponentEngine::MakePathFromTemplate(
$pathTemplate,
array(
'user_id' => $arUser['ID'],
'USER_ID' => $arUser['ID'],
'task_id' => $taskID,
'TASK_ID' => $taskID,
'action' => 'view'
)
);
return ($strUrl);
}
return false;
}