- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/notify.php
- Класс: BitrixSaleNotify
- Вызов: Notify::sendOrderAllowPayStatusChange
static function sendOrderAllowPayStatusChange(InternalsEntity $entity)
{
$result = new Result();
if (static::isNotifyDisabled())
{
return $result;
}
if (!$entity instanceof Order)
{
throw new MainArgumentTypeException('entity', 'BitrixSaleOrder');
}
$statusEventName = static::EVENT_ORDER_ALLOW_PAY_SEND_EMAIL_EVENT_NAME;
if (static::hasSentEvent($entity->getId(), $statusEventName))
{
return $result;
}
/** @var InternalsFields $fields */
$fields = $entity->getFields();
$originalValues = $fields->getOriginalValues();
if (array_key_exists('STATUS_ID', $originalValues) && $originalValues['STATUS_ID'] == $entity->getField("STATUS_ID"))
{
return $result;
}
static $cacheSiteData = array();
if (!isset($cacheSiteData[$entity->getSiteId()]))
{
$siteRes = CSite::GetByID($entity->getSiteId());
$siteData = $siteRes->Fetch();
}
else
{
$siteData = $cacheSiteData[$entity->getSiteId()];
}
$statusData = InternalsStatusTable::getList(array(
'select' => array(
'ID',
'NOTIFY',
'NAME' => 'BitrixSaleInternalsStatusLangTable:STATUS.NAME',
),
'filter' => array(
'=ID' => $entity->getField("STATUS_ID"),
'=BitrixSaleInternalsStatusLangTable:STATUS.LID' => $siteData['LANGUAGE_ID'],
'=TYPE' => OrderStatus::TYPE
),
'limit' => 1,
))->fetch();
if (!empty($statusData) && $statusData['NOTIFY'] == "Y")
{
$isSend = true;
$fields = array(
"ORDER_ID" => $entity->getField("ACCOUNT_NUMBER"),
"ORDER_REAL_ID" => $entity->getField("ID"),
"ORDER_ACCOUNT_NUMBER_ENCODE" => urlencode(urlencode($entity->getField("ACCOUNT_NUMBER"))),
"ORDER_DATE" => $entity->getDateInsert()->toString(),
"ORDER_STATUS" => $statusData["NAME"],
"EMAIL" => static::getUserEmail($entity),
"TEXT" => "",
"SALE_EMAIL" => MainConfigOption::get("sale", "order_email", "order@".$_SERVER["SERVER_NAME"]),
"ORDER_PUBLIC_URL" => HelpersOrder::isAllowGuestView($entity) ? HelpersOrder::getPublicLink($entity) : ""
);
$eventManager = MainEventManager::getInstance();
if ($eventsList = $eventManager->findEventHandlers('sale', static::EVENT_ON_ORDER_ALLOW_PAY_STATUS_EMAIL))
{
$event = new MainEvent('sale', static::EVENT_ON_ORDER_ALLOW_PAY_STATUS_EMAIL, array(
'EVENT_NAME' => $statusEventName,
'VALUES' => $fields
));
$event->send();
if ($event->getResults())
{
/** @var MainEventResult $eventResult */
foreach($event->getResults() as $eventResult)
{
if($eventResult->getType() === MainEventResult::ERROR)
{
$isSend = false;
}
elseif($eventResult->getType() == MainEventResult::SUCCESS)
{
if ($eventResultParams = $eventResult->getParameters())
{
/** @var Result $eventResultData */
if (!empty($eventResultParams) && is_array($eventResultParams))
{
if (!empty($eventResultParams['EVENT_NAME']))
{
$statusEventName = $eventResultParams['EVENT_NAME'];
}
if (!empty($eventResultParams['VALUES']) && is_array($eventResultParams['VALUES']))
{
$fields = $eventResultParams['VALUES'];
}
}
}
}
}
}
}
if($isSend)
{
$eventMessage = new CEventMessage;
$eventMessageRes = $eventMessage->GetList(
'',
'',
array(
"EVENT_NAME" => $statusEventName,
"SITE_ID" => $entity->getSiteId(),
'ACTIVE' => 'Y'
)
);
if (!($eventMessageData = $eventMessageRes->Fetch()))
{
$statusEventName = static::EVENT_ORDER_ALLOW_PAY_SEND_EMAIL_EVENT_NAME;
}
unset($o, $b);
$event = new CEvent;
$event->Send($statusEventName, $entity->getSiteId(), $fields, "Y", "", array(), $siteData['LANGUAGE_ID']);
}
}
static::addSentEvent($entity->getId(), $statusEventName);
return $result;
}