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