- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/classes/general/utils.php
- Класс: CIntranetUtils
- Вызов: CIntranetUtils::checkMailDomain
static function checkMailDomain($service_id, $user_id, $cnt = 1)
{
$service_id = intval($service_id);
$user_id = intval($user_id);
$cnt = intval($cnt);
if (!CModule::includeModule('mail'))
return '';
$arAdmin = CUser::getList(
'', '',
array('ID' => $user_id, 'GROUPS_ID' => 1, 'ACTIVE' => 'Y'),
array('FIELDS' => array('ID', 'TIME_ZONE_OFFSET'))
)->fetch();
if (empty($arAdmin))
return '';
$service = BitrixMailMailServicesTable::getList(array(
'filter' => array('=ID' => $service_id)
))->fetch();
if (empty($service) || $service['ACTIVE'] != 'Y' || !in_array($service['SERVICE_TYPE'], array('domain', 'crdomain')))
return '';
if ($service['SERVICE_TYPE'] == 'domain')
{
$result = CMailDomain2::getDomainStatus($service['TOKEN'], $service['SERVER']);
$stage = empty($result['stage']) ? null : $result['stage'];
}
else // if ($service['SERVICE_TYPE'] == 'crdomain')
{
$crResponse = CControllerClient::executeEvent('OnMailControllerCheckMemberDomain', array('DOMAIN' => $service['SERVER']));
$stage = empty($crResponse['result']['stage']) ? null : $crResponse['result']['stage'];
}
if (!in_array($stage, array('none', 'owner-check', 'mx-check', 'added')))
{
return false;
}
else
{
if (in_array($stage, array('none', 'added')))
{
if ($stage == 'added')
{
if (CModule::includeModule('im'))
{
includeModuleLangFile(__FILE__);
$siteUrl = sprintf(
'http%s://%s%s',
CMain::isHTTPS() ? 's' : '', $_SERVER['SERVER_NAME'],
in_array($_SERVER['SERVER_PORT'], array(80, 443)) ? '' : ':' . $_SERVER['SERVER_PORT']
);
CIMNotify::add(array(
'TO_USER_ID' => $user_id,
'FROM_USER_ID' => 0,
'NOTIFY_TYPE' => IM_NOTIFY_SYSTEM,
'NOTIFY_MODULE' => 'intranet',
'NOTIFY_MESSAGE' => str_replace(
array('#DOMAIN#', '#SERVER#'),
array(htmlspecialcharsbx($service['SERVER']), $siteUrl),
getMessage('INTR_MAIL_DOMAINREADY_NOTICE')
)
));
}
$timeout = new DateTime(intval($arAdmin['TIME_ZONE_OFFSET']).' seconds +7 days');
if ($timeout->format('N') > 5)
$timeout->modify('next monday');
CAgent::addAgent(
'CIntranetUtils::notifyMailDomain("nomailbox", '.$service_id.', '.$user_id.');',
'intranet', 'N',
$timeout->getTimestamp()-intval($arAdmin['TIME_ZONE_OFFSET'])-time()
);
}
return '';
}
else
{
if ($cnt > 100)
return '';
global $pPERIOD;
$pPERIOD = $pPERIOD * $cnt;
if ($pPERIOD > 3600 * 4)
$pPERIOD = 3600 * 4;
return 'CIntranetUtils::checkMailDomain('.$service_id.', '.$user_id.', '.++$cnt.');';
}
}
}