• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/mailservices.php
  • Класс: BitrixMailMailServicesTable
  • Вызов: MailServicesTable::update
static function update($primary, array $data): EntityUpdateResult
{
	if (empty($data))
		return new EntityUpdateResult();

	$serviceForUpdate = static::getByPrimary(
		$primary,
		array(
			'select' => array(
				'ID', 'SITE_ID', 'ACTIVE', 'SERVICE_TYPE',
			),
		)
	)->fetch();
	if (!$serviceForUpdate)
	{
		$updateResult = new EntityUpdateResult();
		$updateResult->addError(new EntityEntityError(LocalizationLoc::getMessage('mail_mailservice_not_found')));

		return $updateResult;
	}

	if (isset($data['ICON']) && is_array($data['ICON']))
	{
		$iconError = $data['ICON']['name'] ? CFile::checkImageFile($data['ICON']) : null;
		if (is_null($iconError))
		{
			$data['ICON']['MODULE_ID'] = 'mail';

			CFile::saveForDB($data, 'ICON', 'mail/mailservices/icon');
		}
	}

	$updateResult = parent::update($primary, $data);

	if ($updateResult->isSuccess())
	{
		$serviceId = is_array($primary) ? $primary['ID'] : $primary;

		$isSiteChanged = isset($data['SITE_ID']) && $data['SITE_ID'] != $serviceForUpdate['SITE_ID'];
		$isDeactivated = isset($data['ACTIVE']) && $data['ACTIVE'] == 'N' && $serviceForUpdate['ACTIVE'] == 'Y';
		if (($isSiteChanged || $isDeactivated) && $serviceForUpdate['SERVICE_TYPE'] == 'imap')
		{
			$emptyService = static::getList(array(
				'select' => array('ID'),
				'filter' => array(
					'=SITE_ID' => $serviceForUpdate['SITE_ID'],
					'ACTIVE' => 'Y',
					'=SERVICE_TYPE' => 'imap',
					'=SERVER' => '',
					'=PORT' => '',
					'=ENCRYPTION' => '',
					'=LINK' => '',
				),
				'limit' => 1,
			))->fetch();
		}

		if ($isSiteChanged || $isDeactivated && $emptyService)
		{
			$mbData = $emptyService
				? array('SERVICE_ID' => $emptyService['ID'])
				: array('ACTIVE' => 'N', 'SERVICE_ID' => 0);
		}
		else
		{
			$mbData = array();
			foreach ($data as $key => $value)
			{
				if (empty($value))
					continue;

				switch ($key)
				{
					case 'ACTIVE':
					case 'NAME':
					case 'SERVER':
					case 'PORT':
					case 'LINK':
						$mbData[$key] = $value;
						break;
					case 'ENCRYPTION':
						$mbData['USE_TLS'] = $value;
						break;
				}
			}
		}

		$selectResult = CMailbox::getList(array(), array('SERVICE_ID' => $serviceId));
		while ($mailbox = $selectResult->fetch())
			CMailbox::update($mailbox['ID'], $mbData);
	}

	return $updateResult;
}