Source of file OrderManipulationExtension.php
Size: 5,349 Bytes - Last Modified: 2021-12-24T06:35:03+00:00
/var/www/docs.ssmods.com/process/src/src/Extension/OrderManipulationExtension.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | <?php namespace SilverShop\Extension; use SilverShop\Cart\ShoppingCart; use SilverShop\Forms\OrderActionsForm; use SilverShop\Model\Order; use SilverShop\ShopTools; use SilverStripe\Control\Controller; use SilverStripe\Control\HTTPRequest; use SilverStripe\Core\Extension; use SilverStripe\Forms\Form; use SilverStripe\ORM\DataList; use SilverStripe\ORM\PaginatedList; use SilverStripe\Security\Security; /** * Provides forms and processing to a controller for editing an * order that has been previously placed. * * @property Controller $owner */ class OrderManipulationExtension extends Extension { private static $allowed_actions = array( 'ActionsForm', 'order', ); private static $sessname = 'OrderManipulation.historicalorders'; /** * Add an order to the session-stored history of orders. */ public static function add_session_order(Order $order) { $history = self::get_session_order_ids(); if (!is_array($history)) { $history = array(); } $history[$order->ID] = $order->ID; ShopTools::getSession()->set(self::$sessname, $history); } /** * Get historical orders for current session. */ public static function get_session_order_ids() { $history = ShopTools::getSession()->get(self::$sessname); if (!is_array($history)) { $history = null; } return $history; } public static function clear_session_order_ids() { ShopTools::getSession()->set(self::$sessname, null)->clear(self::$sessname); } /** * Get the order via url 'ID' or form submission 'OrderID'. * It will check for permission based on session stored ids or member id. * * @return Order order */ public function orderfromid() { $request = $this->owner->getRequest(); $id = (int)$request->param('ID'); if (!$id) { $id = (int)$request->postVar('OrderID'); } return $this->allorders()->byID($id); } /** * Get all orders for current member / session. * * @return DataList of Orders */ public function allorders() { $filters = array( 'ID' => -1 //ensures no results are returned ); if ($sessids = self::get_session_order_ids()) { $filters['ID'] = $sessids; } if ($member = Security::getCurrentUser()) { $filters['MemberID'] = $member->ID; } return Order::get()->filterAny($filters) ->filter('Status:not', Order::config()->hidden_status); } /** * Return all past orders for current member / session. */ public function PastOrders($paginated = false) { $orders = $this->allorders() ->filter('Status', Order::config()->placed_status); if ($paginated) { $orders = PaginatedList::create($orders, $this->owner->getRequest()); } return $orders; } /** * Return the {@link Order} details for the current * Order ID that we're viewing (ID parameter in URL). * * @param HTTPRequest $request * @return array of template variables * @throws \SilverStripe\Control\HTTPResponse_Exception */ public function order(HTTPRequest $request) { //move the shopping cart session id to past order ids, if it is now an order ShoppingCart::singleton()->archiveorderid($request->param('ID')); $order = $this->orderfromid(); if (!$order) { return $this->owner->httpError(404, 'Order could not be found'); } return array( 'Order' => $order, 'Form' => $this->ActionsForm() //see OrderManipulation extension ); } /** * Build a form for cancelling, or retrying payment for a placed order. * * @return Form */ public function ActionsForm() { if ($order = $this->orderfromid()) { $form = OrderActionsForm::create($this->owner, 'ActionsForm', $order); $form->extend('updateActionsForm', $order); if (!$form->Actions()->exists()) { return null; } return $form; } return null; } protected $sessionmessage; protected $sessionmessagetype = null; public function setSessionMessage($message = 'success', $type = 'good') { $this->owner->getRequest()->getSession() ->set('OrderManipulation.Message', $message) ->set('OrderManipulation.MessageType', $type); } public function SessionMessage() { $session = $this->owner->getRequest()->getSession(); if ($session && ($message = $session->get('OrderManipulation.Message'))) { $this->sessionmessage = $message; $session->clear('OrderManipulation.Message'); } return $this->sessionmessage; } public function SessionMessageType() { $session = $this->owner->getRequest()->getSession(); if ($session && ($type = $session->get('OrderManipulation.MessageType'))) { $this->sessionmessagetype = $type; $session->clear('OrderManipulation.MessageType'); } return $this->sessionmessagetype; } } |