static function Update($ID, $arFields)
{
$ID = intval($ID);
CMailError::ResetErrors();
$arFields = array_filter($arFields, 'is_set');
if(is_set($arFields, "ACTIVE") && $arFields["ACTIVE"]!="Y")
$arFields["ACTIVE"]="N";
if(is_set($arFields, "DELETE_MESSAGES") && $arFields["DELETE_MESSAGES"]!="Y")
$arFields["DELETE_MESSAGES"]="N";
if(is_set($arFields, "USE_MD5") && $arFields["USE_MD5"]!="Y")
$arFields["USE_MD5"]="N";
if(is_set($arFields, 'USE_TLS') && $arFields['USE_TLS'] != 'Y' && $arFields['USE_TLS'] != 'S')
$arFields["USE_TLS"]="N";
if (is_set($arFields, "SERVER_TYPE") && !in_array($arFields["SERVER_TYPE"], array("pop3", "smtp", "imap", "controller", "domain", "crdomain")))
$arFields["SERVER_TYPE"] = "pop3";
if(!CMailBox::CheckFields($arFields, $ID))
return false;
$mbox = BitrixMailMailboxTable::getRowById($ID);
$serverType = is_set($arFields, 'SERVER_TYPE') ? $arFields['SERVER_TYPE'] : $mbox['SERVER_TYPE'];
$periodCheck = is_set($arFields, 'PERIOD_CHECK') ? $arFields['PERIOD_CHECK'] : $mbox['PERIOD_CHECK'];
if (!empty($mbox))
{
$userChanged = isset($arFields['USER_ID']) && $mbox['USER_ID'] != $arFields['USER_ID'];
$siteChanged = isset($arFields['LID']) && $mbox['LID'] != $arFields['LID'];
if ($userChanged || $siteChanged)
{
if ($mbox['ACTIVE'] == 'Y')
{
if ($mbox['USER_ID'] > 0)
{
$mailboxSyncManager = new BitrixMailHelperMailboxMailboxSyncManager($mbox['USER_ID']);
$mailboxSyncManager->deleteSyncData($mbox['ID']);
}
}
$newActive = isset($arFields['ACTIVE']) ? $arFields['ACTIVE'] : $mbox['ACTIVE'];
if ($newActive == 'Y')
{
$newUserId = isset($arFields['USER_ID']) ? $arFields['USER_ID'] : $mbox['USER_ID'];
$newSiteId = isset($arFields['LID']) ? $arFields['LID'] : $mbox['LID'];
if ($newUserId > 0)
{
$mailboxSyncManager = new BitrixMailHelperMailboxMailboxSyncManager($newUserId);
$mailboxSyncManager->setDefaultSyncData($mbox['ID']);
}
}
}
if ($mbox['USER_ID'] != 0 || isset($arFields['USER_ID']) && $arFields['USER_ID'] != 0)
{
CUserCounter::Clear($mbox['USER_ID'], 'mail_unseen', $mbox['LID']);
if ($siteChanged)
CUserCounter::Clear($mbox['USER_ID'], 'mail_unseen', $arFields['LID']);
if ($userChanged)
{
CUserCounter::Clear($arFields['USER_ID'], 'mail_unseen', $mbox['LID']);
if (isset($arFields['LID']) && $mbox['LID'] != $arFields['LID'])
CUserCounter::Clear($arFields['USER_ID'], 'mail_unseen', $arFields['LID']);
}
}
}
CAgent::removeAgent(sprintf('CMailbox::CheckMailAgent(%u);', $ID), 'mail');
CAgent::removeAgent(sprintf('BitrixMailHelper::syncMailboxAgent(%u);', $ID), 'mail');
CAgent::removeAgent(sprintf('BitrixMailHelper::cleanupMailboxAgent(%u);', $ID), 'mail');
BitrixMailMailboxTable::update($ID, $arFields);
if (in_array($serverType, array('imap', 'controller', 'domain', 'crdomain')))
{
CAgent::addAgent(sprintf('BitrixMailHelper::syncMailboxAgent(%u);', $ID), 'mail', 'N', (int) $periodCheck*60);
CAgent::addAgent(sprintf('BitrixMailHelper::cleanupMailboxAgent(%u);', $ID), 'mail', 'N', 3600 * 24);
}
if ($serverType == 'pop3' && (int) $periodCheck > 0)
CAgent::addAgent(sprintf('CMailbox::CheckMailAgent(%u);', $ID), 'mail', 'N', (int) $periodCheck*60);
CMailbox::SMTPReload();
return true;
}