- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/classes/general/utils.php
- Класс: CIntranetUtils
- Вызов: CIntranetUtils::GetStsSyncURL
static function GetStsSyncURL($arSectionParams, $type = 'calendar', $employees = false)
{
global $USER;
if (!BitrixMainLoader::includeModule('webservice'))
{
return sprintf("alert('%s')", CUtil::jsEscape(getMessage('INTR_SYNC_OUTLOOK_NOWEBSERVICE')));
}
if (!is_array($arSectionParams))
$arSectionParams = array('ID' => intval($arSectionParams));
//if (!$arSectionParams['ID'])
// return false;
$arAllowedTypes = array('calendar', 'tasks', 'contacts');
if (!in_array($type, $arAllowedTypes))
$type = 'calendar';
if ($type == 'calendar')
{
$calendar2 = COption::GetOptionString("intranet", "calendar_2", "N") == "Y" && CModule::IncludeModule("calendar");
$fld_EXTERNAL_ID = 'XML_ID';
if ($calendar2) // Module 'Calendar'
{
// $arSectionParams = array(
// 'ID' => int
// 'XML_ID' => string
// 'NAME' => string
// 'PREFIX' => string
// 'LINK_URL' => string
// 'TYPE' => string
// )
if (mb_strlen($arSectionParams['XML_ID']) !== 32)
{
$arSectionParams[$fld_EXTERNAL_ID] = md5($arSectionParams['TYPE'].'_'.$arSectionParams['ID'].'_'.RandString(8));
// Set XML_ID
CCalendar::SaveSection(array('arFields' => Array('ID' => $arSectionParams['ID'],'XML_ID' => $arSectionParams[$fld_EXTERNAL_ID]), 'bAffectToDav' => false, 'bCheckPermissions' => false));
}
}
else // Old version calendar on iblocks
{
if (!$arSectionParams['IBLOCK_ID'] || !$arSectionParams['NAME'] || !$arSectionParams[$fld_EXTERNAL_ID])
{
$dbRes = CIBlockSection::GetByID($arSectionParams['ID']);
$arSection = $dbRes->Fetch();
if ($arSection)
{
$arSectionParams['IBLOCK_ID'] = $arSection['IBLOCK_ID'];
$arSectionParams['NAME'] = $arSection['NAME'];
$arSectionParams[$fld_EXTERNAL_ID] = $arSection[$fld_EXTERNAL_ID];
}
else
{
return false;
}
}
if (mb_strlen($arSectionParams[$fld_EXTERNAL_ID]) !== 32)
{
$arSectionParams[$fld_EXTERNAL_ID] = md5($arSectionParams['IBLOCK_ID'].'_'.$arSectionParams['ID'].'_'.RandString(8));
$obSect = new CIBlockSection();
if (!$obSect->Update($arSectionParams['ID'], array($fld_EXTERNAL_ID => $arSectionParams[$fld_EXTERNAL_ID]), false, false))
return false;
}
}
if (!$arSectionParams['PREFIX'])
{
$rsSites = CSite::GetByID(SITE_ID);
$arSite = $rsSites->Fetch();
if ($arSite["NAME"] <> '')
$arSectionParams['PREFIX'] = $arSite["NAME"];
else
$arSectionParams['PREFIX'] = COption::GetOptionString('main', 'site_name', GetMessage('INTR_OUTLOOK_PREFIX_CONTACTS'));
}
$GUID = CIntranetUtils::makeGUID($arSectionParams[$fld_EXTERNAL_ID]);
}
elseif($type == 'contacts')
{
if (!$arSectionParams['LINK_URL'])
{
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite())
$arSectionParams['LINK_URL'] = SITE_DIR.'contacts/';
else
$arSectionParams['LINK_URL'] = SITE_DIR.'company/';
}
if (!isset($arSectionParams['NAME']))
{
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite() && !$employees)
$arSectionParams['NAME'] = GetMessage('INTR_OUTLOOK_TITLE_CONTACTS_EXTRANET');
else
$arSectionParams['NAME'] = GetMessage('INTR_OUTLOOK_TITLE_CONTACTS');
}
if (!isset($arSectionParams['PREFIX']))
{
$rsSites = CSite::GetByID(SITE_ID);
$arSite = $rsSites->Fetch();
if ($arSite["NAME"] <> '')
$arSectionParams['PREFIX'] = $arSite["NAME"];
else
$arSectionParams['PREFIX'] = COption::GetOptionString('main', 'site_name', GetMessage('INTR_OUTLOOK_PREFIX_CONTACTS'));
}
$SERVER_NAME = $_SERVER['SERVER_NAME'];
$GUID_DATA = $SERVER_NAME.'|'.$type;
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite())
{
$GUID_DATA .= "|extranet";
if ($employees)
$GUID_DATA .= "|employees";
}
$GUID = CIntranetUtils::makeGUID(md5($GUID_DATA));
}
elseif($type == 'tasks')
{
if (!$arSectionParams['LINK_URL'])
{
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite())
$arSectionParams['LINK_URL'] = SITE_DIR.'contacts/personal/user/'.$USER->GetID().'/tasks/';
else
$arSectionParams['LINK_URL'] = SITE_DIR.'company/personal/user/'.$USER->GetID().'/tasks/';
}
$arSectionParams['NAME'] = $arSectionParams['NAME'] ?? GetMessage('INTR_OUTLOOK_TITLE_TASKS');
if (!($arSectionParams['PREFIX'] ?? null))
{
$rsSites = CSite::GetByID(SITE_ID);
$arSite = $rsSites->Fetch();
if ($arSite["NAME"] <> '')
$arSectionParams['PREFIX'] = $arSite["NAME"];
else
$arSectionParams['PREFIX'] = COption::GetOptionString('main', 'site_name', GetMessage('INTR_OUTLOOK_PREFIX_CONTACTS'));
}
$SERVER_NAME = $_SERVER['SERVER_NAME'];
$GUID_DATA = $SERVER_NAME.'|'.$type;
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite())
$GUID_DATA .= "|extranet";
$GUID = CIntranetUtils::makeGUID(md5($GUID_DATA));
}
else
{
return '';
}
if (mb_substr($arSectionParams['LINK_URL'], -9) == 'index.php')
$arSectionParams['LINK_URL'] = mb_substr($arSectionParams['LINK_URL'], 0, -9);
if (mb_substr($arSectionParams['LINK_URL'], -4) != '.php' && mb_substr($arSectionParams['LINK_URL'], -1) != '/')
$arSectionParams['LINK_URL'] .= '/';
// another dirty hack to avoid some M$ stssync protocol restrictions
if (mb_substr($arSectionParams['LINK_URL'], -1) != '/')
$arSectionParams['LINK_URL'] .= '/';
$type_script = $type;
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite())
{
$type_script .= "_extranet";
if ($employees)
$type_script .= "_emp";
}
return BitrixWebServiceStsSync::getUrl($type, $type_script, $arSectionParams['LINK_URL'], $arSectionParams['PREFIX'], $arSectionParams['NAME'], $GUID);
}