public function order_edit() { $object = $this->expectObject("param0", true); $mode = (string) getRequest('param1'); $objectId = $object->getId(); $this->setHeaderLabel("header-users-edit-" . $this->getObjectTypeMethod($object)); $this->checkSv($objectId); $inputData = array("object" => $object, "allowed-element-types" => array('emarket', 'order')); if ($mode == "do") { $oldDeliveryPrice = $object->getValue('delivery_price'); $object = $this->saveEditedObjectData($inputData); $newDeliveryPrice = $object->getValue('delivery_price'); $order = order::get($object->id); $amounts = getRequest('order-amount-item'); $dels = getRequest('order-del-item'); $isChanged = false; if (is_array($amounts)) { foreach ($amounts as $itemId => $amount) { $item = $order->getItem($itemId); if ($item instanceof orderItem) { if ($item->getAmount() != $amount) { $item->setAmount($amount); $item->commit(); $isChanged = true; } } } } if (is_array($dels)) { foreach ($dels as $itemId) { $item = orderItem::get($itemId); if ($item instanceof orderItem) { $order->removeItem($item); $isChanged = true; } } } if ($isChanged) { $order->refresh(); $order->commit(); } if ($oldDeliveryPrice != $newDeliveryPrice && !$isChanged) { $originalPrice = $object->getValue('total_original_price'); $totalPrice = $originalPrice; $discount = $order->getDiscount(); if ($discount instanceof discount) { $totalPrice = $discount->recalcPrice($originalPrice); } $totalPrice += $newDeliveryPrice; $object->setValue('total_price', $totalPrice); $object->commit(); } $this->chooseRedirect(); } $this->setDataType("form"); $this->setActionType("modify"); $data = $this->prepareData($inputData, "object"); $this->setData($data); return $this->doData(); }
/** * TODO: Write documentation * * All these cases renders full basket order: * /udata/emarket/basket/ - do nothing * /udata/emarket/basket/add/element/9 - add element 9 into the basket * /udata/emarket/basket/add/element/9?amount=5 - add element 9 into the basket + amount * /udata/emarket/basket/add/element/9?option[option_name_1]=1&option=2&option[option_name_2]=3 - add element 9 using options * /udata/emarket/basket/modify/element/9?option[option_name_1]=1&option=2&option[option_name_2]=3 - add element 9 using options * /udata/emarket/basket/modify/item/9?option[option_name_1]=1&option=2&option[option_name_2]=3 - add element 9 using options * /udata/emarket/basket/remove/element/9 - remove element 9 from the basket * /udata/emarket/basket/remove/item/111 - remove orderItem 111 from the basket * /udata/emarket/basket/remove_all/ - remove all orderItems from basket */ public function basket($mode = false, $itemType = false, $itemId = false) { $mode = $mode ? $mode : getRequest('param0'); $order = self::getBasketOrder(!in_array($mode, array('put', 'remove'))); $itemType = $itemType ? $itemType : getRequest('param1'); $itemId = (int) ($itemId ? $itemId : getRequest('param2')); $amount = (int) getRequest('amount'); $options = getRequest('options'); $order->refresh(); if ($mode == 'put') { $orderItem = $itemType == 'element' ? $this->getBasketItem($itemId) : $order->getItem($itemId); if (!$orderItem) { throw new publicException("Order item is not defined"); } if (is_array($options)) { if ($itemType != 'element') { throw new publicException("Put basket method required element id of optionedOrderItem"); } // Get all orderItems $orderItems = $order->getItems(); foreach ($orderItems as $tOrderItem) { $itemOptions = $tOrderItem->getOptions(); if (sizeof($itemOptions) != sizeof($options)) { $itemOptions = null; $tOrderItem = null; continue; } if ($tOrderItem->getItemElement()->id != $orderItem->getItemElement()->id) { $itemOptions = null; $tOrderItem = null; continue; } // Compare each tOrderItem with options list foreach ($options as $optionName => $optionId) { $itemOption = getArrayKey($itemOptions, $optionName); if (getArrayKey($itemOption, 'option-id') != $optionId) { $tOrderItem = null; continue 2; // If does not match, create new item using options specified } } break; // If matches, stop loop and continue to amount change } if (!isset($tOrderItem) || is_null($tOrderItem)) { $tOrderItem = orderItem::create($itemId); $order->appendItem($tOrderItem); } if ($tOrderItem instanceof optionedOrderItem) { foreach ($options as $optionName => $optionId) { if ($optionId) { $tOrderItem->appendOption($optionName, $optionId); } else { $tOrderItem->removeOption($optionName); } } } if ($tOrderItem) { $orderItem = $tOrderItem; } } $amount = $amount ? $amount : $orderItem->getAmount() + 1; $orderItem->setAmount($amount ? $amount : 1); $orderItem->refresh(); if ($itemType == 'element') { $order->appendItem($orderItem); } $order->refresh(); } if ($mode == 'remove') { $orderItem = $itemType == 'element' ? $this->getBasketItem($itemId, false) : orderItem::get($itemId); if ($orderItem instanceof orderItem) { $order->removeItem($orderItem); $order->refresh(); } } if ($mode == 'remove_all') { foreach ($order->getItems() as $orderItem) { $order->removeItem($orderItem); } $order->refresh(); } $referer = getServer('HTTP_REFERER'); $noRedirect = getRequest('no-redirect'); if ($redirectUri = getRequest('redirect-uri')) { $this->redirect($redirectUri); } else { if (!defined('VIA_HTTP_SCHEME') && !$noRedirect && $referer) { $current = $_SERVER['REQUEST_URI']; if (substr($referer, -strlen($current)) == $current) { if ($itemType == 'element') { $referer = umiHierarchy::getInstance()->getPathById($itemId); } else { $referer = "/"; } } $this->redirect($referer); } } $order->refresh(); return $this->order($order->getId()); }
protected function mergeBasket(umiObject $guestBasket) { $orderItems = $guestBasket->order_items; if(is_array($orderItems)) { $userBasket = __emarket_purchasing::getBasketOrder(false); if($userBasket) { foreach($orderItems as $orderItemId) { $orderItem = orderItem::get($orderItemId); if($orderItem) { $userBasket->appendItem($orderItem); } } $userBasket->commit(); } } $guestBasket->delete(); }
/** * Загрузить список наименований в заказе из объекта заказа */ protected function readItems() { $objectItems = $this->object->order_items; $items = array(); foreach ($objectItems as $objectId) { try { $items[] = orderItem::get($objectId); } catch (privateException $e) { } } $this->items = $items; }