/
bitrix-dev
/
Starter-kit
Обзор
Документация
Войти
/
bitrix-dev
/
Starter-kit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
main
local/ajax/order.php
143 строки
4 KB
Alexey Karizhenskiy
Первая сборка (из ранее используемого)
19 янв 2026, 21:00
19 янв 2026, 21:00
d843e36
Код
Авторство
О чём код?
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); use Bitrix\Main\Application; use Bitrix\Main\Web\PostDecoder; use Bitrix\Main\Web\Json; class AjaxOrderController { private $response = []; private $request; private $post; private $files; public function __construct() { $this->request = Application::getInstance()->getContext()->getRequest(); if ($this->request->isPost()) { $this->post = $this->request->getPostList()->toArray(); $this->files = $this->request->getFileList()->toArray(); $this->handleRequest(); } else { $this->setError('Неверный метод запроса'); } } private function handleRequest() { $action = $this->post['action'] ?? ''; switch($action) { case 'cancel': $this->handleCancelOrder(); break; default: $this->setError('Неизвестное действие'); } } private function handleCancelOrder() { if (empty($this->post['orderId'])) { $this->setError('Не указан ID заказа'); return; } if (!$this->checkAuth()) { return; } if (!$this->checkSaleModule()) { return; } $this->processCancelOrder(); } private function checkAuth() { global $USER; if (!$USER->IsAuthorized()) { $this->setError('Необходима авторизация'); return false; } return true; } private function checkSaleModule() { if (!\CModule::IncludeModule('sale')) { $this->setError('Не удалось подключить модуль sale'); return false; } return true; } private function processCancelOrder() { $order = \CSaleOrder::GetByID($this->post['orderId']); if (!$order) { $this->setError('Заказ не найден'); return; } if (!$this->validateOrderForCancel($order)) { return; } $this->cancelOrder(); } private function validateOrderForCancel($order) { global $USER; if ($order['USER_ID'] !== $USER->GetID()) { $this->setError('Доступ запрещен'); return false; } if ($order['CANCELED'] === 'Y') { $this->setError('Заказ уже отменен'); return false; } return true; } private function cancelOrder() { /* -- Временный запрет на отмену заказа --*/ $this->setError('Отмена заказа не доступна, обратитесь к администратору.'); return; /* --- */ global $APPLICATION; $oldOrderObject = new CSaleOrder(); $oldOrderObject->CancelOrder( $this->post['orderId'], "Y", $this->post['reason'] ?? 'Отменен пользователем' ); if ($ex = $APPLICATION->GetException()) { $this->setError($ex->GetString()); } else { $this->setSuccess('Заказ успешно отменен'); } } private function setError($message) { $this->response = [ 'success' => false, 'message' => $message ]; } private function setSuccess($message) { $this->response = [ 'success' => true, 'message' => $message ]; } public function getResponse() { return $this->response; } } $controller = new AjaxOrderController(); echo Json::encode($controller->getResponse());