/** * Trigger order status update when changing the status in the backend * * @param string * @param DataContainer * * @return string * @link http://www.contao.org/callbacks.html#save_callback */ public function updateOrderStatus($varValue, $dc) { if ($dc->activeRecord && $dc->activeRecord->order_status != $varValue) { /** @var Order $objOrder */ if (($objOrder = Order::findByPk($dc->id)) !== null) { if (TL_MODE == 'BE') { if ($objOrder->pageId == 0) { unset($GLOBALS['objPage']); } Frontend::loadOrderEnvironment($objOrder); } // Status update has been cancelled, do not update if (!$objOrder->updateOrderStatus($varValue)) { return $dc->activeRecord->order_status; } } } return $varValue; }
/** * Run the controller */ public function run() { $this->logRequest(); $objMethod = null; try { $strMod = $this->getModule(); $intId = $this->getModuleId(); if ($strMod == '' || $intId == 0) { \System::log('Invalid post-sale request (param error): ' . \Environment::get('request'), __METHOD__, TL_ERROR); $objResponse = new Response('Bad Request', 400); $objResponse->send(); } switch (strtolower($strMod)) { case 'pay': $objMethod = Payment::findByPk($intId); break; case 'ship': $objMethod = Shipping::findByPk($intId); break; } if (null === $objMethod) { \System::log('Invalid post-sale request (model not found): ' . \Environment::get('request'), __METHOD__, TL_ERROR); $objResponse = new Response('Not Found', 404); $objResponse->send(); } \System::log('New post-sale request: ' . \Environment::get('request'), __METHOD__, TL_ACCESS); if (!$objMethod instanceof IsotopePostsale) { \System::log('Invalid post-sale request (interface not implemented): ' . \Environment::get('request'), __METHOD__, TL_ERROR); $objResponse = new Response('Not Implemented', 501); $objResponse->send(); } /** @type Order $objOrder */ $objOrder = $objMethod->getPostsaleOrder(); if (null === $objOrder || !$objOrder instanceof IsotopeProductCollection) { \System::log(get_class($objMethod) . ' did not return a valid order', __METHOD__, TL_ERROR); $objResponse = new Response('Failed Dependency', 424); $objResponse->send(); } Frontend::loadOrderEnvironment($objOrder); $objMethod->processPostsale($objOrder); $objResponse = new Response(); $objResponse->send(); } catch (\Exception $e) { \System::log(sprintf('Exception in post-sale request. See system/logs/isotope_postsale.log for details.', $e->getFile(), $e->getLine(), $e->getMessage()), __METHOD__, TL_ERROR); log_message(sprintf("Exception in post-sale request\n%s\n\n", $e->getTraceAsString()), 'isotope_postsale.log'); $objResponse = new Response('Internal Server Error', 500); $objResponse->send(); } }