• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/classes/general/mail.php
  • Класс: CMailBox
  • Вызов: CMailBox::Update
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;
}