• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/integration/intranet/user.php
  • Класс: BitrixImIntegrationIntranetUser
  • Вызов: User::getBirthdayForToday
static function getBirthdayForToday()
{
	if (!BitrixMainModuleManager::isModuleInstalled('intranet'))
	{
		return [];
	}

	$option = Option::get('im', 'contact_list_birthday');
	if ($option === 'none' || BitrixImUser::getInstance()->isExtranet())
	{
		return [];
	}

	global $USER;

	$today = (new DateTime())->format('m-d');
	if ($option === 'department')
	{
		$cacheId = 'birthday_'.$today.'_'.$USER->GetID();
	}
	else
	{
		$cacheId = 'birthday_'.$today;
	}

	$cache = BitrixMainDataCache::createInstance();
	if($cache->initCache(86400, $cacheId, '/bx/im/birthday/'))
	{
		return $cache->getVars();
	}

	$user = CUser::getById($USER->GetId())->Fetch();

	$filter = [
		'=ACTIVE' => 'Y',
		'=BIRTHDAY_DATE' => $today,
		'=IS_REAL_USER' => true,
	];
	if ($option === 'department')
	{
		$filter['=UF_DEPARTMENT'] = $user['UF_DEPARTMENT'];
	}
	else
	{
		$filter['!=UF_DEPARTMENT'] = false;
	}

	$connection = BitrixMainApplication::getConnection();
	$helper = $connection->getSqlHelper();

	$result = [];
	$users = UserTable::getList([
		'filter' => $filter,
		'select' => ['ID'],
		'runtime' => [
			new ExpressionField('BIRTHDAY_DATE', str_replace('PERSONAL_BIRTHDAY', '%s', str_replace('%', '%%', $helper->formatDate('MM-DD', 'PERSONAL_BIRTHDAY'))), 'PERSONAL_BIRTHDAY')
		],
		'limit' => 100,
	])->fetchAll();

	foreach ($users as $user)
	{
		$result[] = BitrixImUser::getInstance($user['ID'])->getArray(['SKIP_ONLINE' => 'Y', 'JSON' => 'Y']);
	}

	$cache->forceRewriting(true);
	$cache->startDataCache();
	$cache->endDataCache($result);

	return $result;
}