/** * @param JBCartOrder $order * @param bool|false $silentMode * @return int|mixed */ public function save(JBCartOrder $order, $silentMode = false) { $this->app->jbtables->checkOrder(); $currencies = $order->getCurrencyList(); $params = $order->getParams(); $params->set(JBCart::CONFIG_CURRENCIES, $currencies); $cartConfig = $order->params->find('config'); if (!$cartConfig) { $cartConfig = JBModelConfig::model()->getGroup('cart.config'); } $params->set('config', (array) $cartConfig); $total = $order->getTotalSum()->data(); $data = array('id' => $order->id, 'status' => $order->getStatus()->getCode(), 'status_payment' => $order->getPaymentStatus(), 'status_shipping' => $order->getShippingStatus(), 'created' => $order->created, 'created_by' => $order->created_by, 'total' => $total[0], 'items' => $order->getItems(false), 'fields' => $order->getFields(), 'shippingfields' => $order->getShippingFields(), 'modifiers' => $order->getModifiersData(), 'params' => $params, 'comment' => $order->comment); if ($shipping = $order->getShipping()) { $data['shipping'] = $shipping->data(); } if ($payment = $order->getPayment()) { $data['payment'] = $payment->data(); } if (!$silentMode) { $this->app->jbevent->fire($order, 'basket:beforeSave'); } if ($data['id'] <= 0) { unset($data['id']); $order->id = $this->_insert($data, ZOO_TABLE_JBZOO_ORDER); //TODO hardcoded $order->setItemsData((string) $data['items']); if (!$silentMode) { $this->app->jbevent->fire($order, 'basket:saved'); } } else { $data['modified'] = $this->app->jbdate->toMySql(); $this->_update($data, ZOO_TABLE_JBZOO_ORDER); if (!$silentMode) { $this->app->jbevent->fire($order, 'basket:updated'); } } if ($order->id && !$silentMode) { $this->app->jbevent->fire($order, 'basket:afterSave'); } return $order->id; }
/** * Filter action */ function index() { $this->formRenderer = $this->app->jbrenderer->create('Order'); $this->shippingRenderer = $this->app->jbrenderer->create('Shipping'); $this->paymentRenderer = $this->app->jbrenderer->create('Payment'); $this->validatorRenderer = $this->app->jbrenderer->create('Validator'); $this->shippingFieldRenderer = $this->app->jbrenderer->create('ShippingFields'); $this->modifierOrderPriceRenderer = $this->app->jbrenderer->create('ModifierOrderPrice'); $this->shipping = $this->app->jbshipping->getEnabled(); $this->shippingFields = $this->app->jbshipping->getFields(); $this->payment = $this->app->jbpayment->getEnabled(); $this->modifierPrice = $this->app->jbmodifierprice->getEnabled(); $this->config = $this->_config; $this->Itemid = $this->_jbrequest->get('Itemid'); $this->order = $this->cart->newOrder(); $this->items = $this->order->getItems(true); $this->itemsHtml = $this->order->renderItems(array('image_width' => $this->_config->get('tmpl_image_width', 75), 'image_height' => $this->_config->get('tmpl_image_height', 75), 'image_link' => $this->_config->get('tmpl_image_link', 1), 'item_link' => $this->_config->get('tmpl_item_link', 1), 'edit' => true)); $jbnotify = $this->app->jbnotify; $errors = 0; $orderSaved = false; $isPaymentBtn = $this->app->jbrequest->get('create-pay'); if ($this->_jbrequest->isPost()) { $formData = $this->_getRequest(); try { $errors += $this->order->bind($formData); $errorMessages = $this->order->isValid(); $errors += count($errorMessages); if ($errors) { $this->app->system->application->setUserState('JBZOO_ORDDER_SUBMISSION_FORM', serialize($formData)); // show custom error messages $jbnotify->warning('JBZOO_CART_ORDER_SOME_ERROR'); $jbnotify->warning($errorMessages); } else { // saving order JBModelOrder::model()->save($this->order); $orderSaved = true; // empty cart items $this->cart->removeItems(); // go to payment page $payment = $this->order->getPayment(); $totalSum = $this->order->getTotalSum(); if ($totalSum->isPositive() && $isPaymentBtn && $payment && ($paymentUrl = $payment->getRedirectUrl())) { $message = $payment->getSuccessMessage(); if (empty($message)) { $message = 'JBZOO_CART_PAYMENT_REDIRECT'; } $this->setRedirect($paymentUrl, JText::_($message)); } else { $jbnotify->notice('JBZOO_CART_ORDER_SUCCESS_CREATED'); } } } catch (JBCartOrderException $e) { $jbnotify->warning(JText::_($e->getMessage())); } catch (AppException $e) { $jbnotify->warning(JText::_($e->getMessage())); } } $this->isError = $errors; $templatedName = 'basket'; if ($orderSaved) { $templatedName = 'basket-success'; } $this->getView($templatedName)->addTemplatePath($this->template->getPath())->setLayout($templatedName)->display(); }