static function GetAddressbookContactsList($collectionId, $arFilter = array())
{
list($siteId) = $collectionId;
$arFilter = self::GetAddressbookExtranetUserFilter($siteId, $arFilter);
$arFilter["ACTIVE"] = "Y";
$arResult = array();
$canCache = false;
$fromCache = false;
if(count($arFilter) == 2 && $arFilter['!UF_DEPARTMENT'] === false)
{
$canCache = true;
$obDavCache = new CPHPCache;
$cache_id = 'kp_dav_address_book';
$cache_dir = '/dav/address_book';
if(defined("BX_COMP_MANAGED_CACHE"))
$cache_ttl = 2592000;
else
$cache_ttl = 1200;
if($obDavCache->InitCache($cache_ttl, $cache_id, $cache_dir))
{
$fromCache = true;
$arResult = $obDavCache->GetVars();
}
}
if (!$fromCache)
{
$xmlIds = array();
if (!empty($arFilter['XML_ID']))
$xmlIds = (array) $arFilter['XML_ID'];
if (empty($xmlIds) || !empty($arFilter['ID']))
{
unset($arFilter['XML_ID']);
$params = array(
'filter' => $arFilter,
'select' => array(
'ID', 'LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'EMAIL', 'PERSONAL_BIRTHDAY', 'PERSONAL_PHOTO',
'WORK_PHONE', 'PERSONAL_MOBILE', 'PERSONAL_PHONE', 'WORK_COMPANY', 'WORK_POSITION',
'WORK_WWW', 'PERSONAL_WWW', 'PERSONAL_STREET', 'PERSONAL_CITY', 'PERSONAL_STATE',
'PERSONAL_ZIP', 'PERSONAL_COUNTRY', 'WORK_STREET', 'WORK_CITY', 'WORK_STATE',
'WORK_ZIP', 'WORK_COUNTRY', 'TIMESTAMP_X', 'UF_DEPARTMENT', 'UF_PHONE_INNER'
)
);
$dbUsers = BitrixMainUserTable::getList($params);
while ($arUser = $dbUsers->fetch())
{
$arUser['UF_DEPARTMENT'] = self::getDepartmentsNames($arUser['UF_DEPARTMENT']);
$arResult[] = $arUser;
}
}
if ($canCache)
{
if (defined("BX_COMP_MANAGED_CACHE"))
{
global $CACHE_MANAGER;
$CACHE_MANAGER->startTagCache($cache_dir);
$CACHE_MANAGER->registerTag("USER_CARD");
$CACHE_MANAGER->endTagCache();
}
if ($obDavCache->startDataCache())
$obDavCache->endDataCache($arResult);
}
}
global $USER;
if ($USER->isAuthorized() and !empty($xmlIds) || empty($arFilter['ID']) and CModule::includeModule('mail'))
{
$timestampX = self::getAddressbookModificationLabel($collectionId);
$extranetSite = isModuleInstalled('extranet') ? COption::getOptionString('extranet', 'extranet_site') : (isModuleInstalled('bitrix24') ? 'ex' : false);
$extranetUser = (CModule::IncludeModule("extranet") && !CExtranet::IsIntranetUser());
$rsSite = CSite::getList('', '', array('LID' => $siteId));
while ($arSite = $rsSite->fetch())
{
if (
(!$extranetUser && $extranetSite && $arSite['LID'] == $extranetSite)
|| ($extranetUser && $extranetSite && $arSite['LID'] != $extranetSite)
)
continue;
$server_name = $arSite['SERVER_NAME'] ?: COption::getOptionString('main', 'server_name', '');
$xmlId = 'feed-'.$arSite['LID'];
$siteName = !empty($arSite['SITE_NAME'])? $arSite['SITE_NAME'] : mb_strtoupper($arSite['LID']);
if (empty($xmlIds) || in_array($xmlId, $xmlIds) and isModuleInstalled('blog'))
{
$arResult[] = array(
'ID' => $xmlId,
'LAST_NAME' => getMessage('DAV_BLOG_POST_CONTACT_NAME') . '(' . $siteName . ')',
'EMAIL' => reset(BitrixMailUser::getForwardTo($arSite['LID'], $USER->getId(), 'BLOG_POST')),
'WORK_WWW' => $server_name,
'TIMESTAMP_X' => $timestampX,
'PERSONAL_PHOTO' => array('src' => '/bitrix/modules/dav/images/addressbook/feed.png')
);
}
$xmlId = 'task-'.$arSite['LID'];
if (empty($xmlIds) || in_array($xmlId, $xmlIds) and isModuleInstalled('tasks'))
{
$arResult[] = array(
'ID' => $xmlId,
'LAST_NAME' => getMessage('DAV_TASK_CONTACT_NAME') . '(' . $siteName . ')',
'EMAIL' => reset(BitrixMailUser::getForwardTo($arSite['LID'], $USER->getId(), 'TASKS_TASK')),
'WORK_WWW' => $server_name,
'TIMESTAMP_X' => $timestampX,
'PERSONAL_PHOTO' => array('src' => '/bitrix/modules/dav/images/addressbook/task.png')
);
}
}
}
return $arResult;
}