- Модуль: 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;
}