- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/controller/mail/message.php
- Класс: Bitrix\Crm\Controller\Mail\Message
- Вызов: Message::deleteMessageAction
public function deleteMessageAction($data)
{
/*
* @TODO: The old code has been moved to the controller. Refactor later
*/
if (!$this->checkModules())
{
return false;
}
if (!\CCrmPerms::IsAccessEnabled())
{
$this->addError(new Error(Loc::getMessage('CRM_MAIL_CONTROLLER_PERMISSION_DENIED')));
return false;
}
$ID = isset($data['ITEM_ID']) ? intval($data['ITEM_ID']) : 0;
if($ID <= 0)
{
$this->addError(new Error(Loc::getMessage('CRM_MAIL_CONTROLLER_ACTIVITY_NOT_FOUND')));
return false;
}
$arActivity = \CCrmActivity::GetByID($ID);
if(!$arActivity)
{
$this->addError(new Error(Loc::getMessage('CRM_MAIL_CONTROLLER_ACTIVITY_NOT_FOUND')));
return false;
}
$provider = \CCrmActivity::GetActivityProvider($arActivity);
if(!$provider)
{
$this->addError(new Error(Loc::getMessage('CRM_MAIL_CONTROLLER_PROVIDER_NOT_FOUND')));
return false;
}
$ownerTypeName = isset($data['OWNER_TYPE'])? mb_strtoupper(strval($data['OWNER_TYPE'])) : '';
if($provider::checkOwner() && !isset($ownerTypeName[0]))
{
$this->addError(new Error(Loc::getMessage('CRM_MAIL_CONTROLLER_OWNER_TYPE_IS_NOT_DEFINED')));
return false;
}
$ownerID = isset($data['OWNER_ID']) ? intval($data['OWNER_ID']) : 0;
if($provider::checkOwner() && $ownerID <= 0)
{
$this->addError(new Error(Loc::getMessage('CRM_MAIL_CONTROLLER_OWNER_TYPE_IS_NOT_DEFINED')));
return false;
}
if($provider::checkOwner() && !\CCrmActivity::CheckUpdatePermission(\CCrmOwnerType::ResolveID($ownerTypeName), $ownerID))
{
$this->addError(new Error(Loc::getMessage('CRM_MAIL_CONTROLLER_PERMISSION_DENIED')));
return false;
}
$currentUser = \CCrmSecurityHelper::getCurrentUserId();
$isOutgoing = \CCrmActivityDirection::Outgoing == $arActivity['DIRECTION'];
$isSkiplist = $isBlacklist = false;
$isSkip = !empty($_REQUEST['IS_SKIP']) && $_REQUEST['IS_SKIP'] == 'Y';
if ($isSkip && !$isOutgoing)
{
$exclusionAccess = new \Bitrix\Crm\Exclusion\Access($currentUser);
$isSkiplist = $exclusionAccess->canWrite();
}
$isSpam = !empty($_REQUEST['IS_SPAM']) && $_REQUEST['IS_SPAM'] == 'Y';
if ($isSpam && !$isOutgoing && \CModule::includeModule('mail'))
{
$res = \Bitrix\Mail\MailboxTable::getList(array(
'select' => array('ID', 'OPTIONS'),
'filter' => array(
'=LID' => SITE_ID,
'=ACTIVE' => 'Y',
'=USER_ID' => $currentUser,
),
'order' => array('ID' => 'DESC'),
));
while ($mailbox = $res->fetch())
{
if (!empty($mailbox['OPTIONS']['flags']) && in_array('crm_connect', (array) $mailbox['OPTIONS']['flags']))
{
$isBlacklist = true;
break;
}
}
}
if ($isSkiplist || $isBlacklist)
{
$communications = \CCrmActivity::getCommunications($ID);
if (!empty($communications))
{
$blacklist = array();
foreach ($communications as $item)
{
if ($item['TYPE'] == 'EMAIL' && !empty($item['VALUE']) && check_email($item['VALUE']))
{
// copied from check_email
if (preg_match('/.*?[<\[\(](.+?)[>\]\)].*/i', $item['VALUE'], $matches))
$item['VALUE'] = $matches[1];
$blacklist[] = trim($item['VALUE']);
}
}
$blacklist = array_unique($blacklist);
}
}
if(\CCrmActivity::Delete($ID))
{
if (!empty($blacklist))
{
if ($isSkiplist)
{
foreach ($blacklist as $item)
{
\Bitrix\Crm\Exclusion\Store::add(\Bitrix\Crm\Communication\Type::EMAIL, $item);
}
}
if ($isBlacklist)
{
$existsEntries = \Bitrix\Mail\BlacklistTable::getList(array(
'select' => array('ITEM_VALUE'),
'filter' => array(
'MAILBOX_ID' => $mailbox['ID'],
'ITEM_TYPE' => \Bitrix\Mail\Blacklist\ItemType::EMAIL,
'@ITEM_VALUE' => $blacklist,
),
));
foreach ($existsEntries as $item)
{
if (($k = array_search($item['ITEM_VALUE'], $blacklist)) !== false)
unset($blacklist[$k]);
}
if (!empty($blacklist))
{
foreach ($blacklist as $item)
{
\Bitrix\Mail\BlacklistTable::add(array(
'SITE_ID' => SITE_ID,
'MAILBOX_ID' => $mailbox['ID'],
'ITEM_TYPE' => \Bitrix\Mail\Blacklist\ItemType::EMAIL,
'ITEM_VALUE' => $item,
));
}
}
}
}
return(['DELETED_ITEM_ID'=> $ID]);
}
$this->addError(new Error(Loc::getMessage('CRM_MAIL_CONTROLLER_COULD_NOT_DELETE_MESSAGE', ['#ID#'=> $ID])));
return false;
}