/** * This method can be executed by a payment plugin after a succesful payment * to perform acts such as enabling file downloads, removing items from cart, * updating product quantities, etc * * @param unknown_type $order_id * @return unknown_type */ function setOrderPaymentReceived($order_id) { Tienda::load('TiendaHelperOrder', 'helpers.order'); TiendaHelperOrder::setOrderPaymentReceived($order_id); }
/** * This method occurs after payment is attempted, * and fires the onPostPayment plugin event * * @return unknown_type */ function confirmPayment() { $this->current_step = 3; $orderpayment_type = JRequest::getVar('orderpayment_type'); // Get post values $values = JRequest::get(); // get the order_id from the session set by the prePayment $mainframe = JFactory::getApplication(); $order_id = (int) $mainframe->getUserState('tienda.order_id'); $itemid_string = null; if ($itemid = $this->router->findItemid(array('view' => 'orders'))) { $itemid_string = "&Itemid=" . $itemid; } $order_link = 'index.php?option=com_tienda&view=orders&task=view&id=' . $order_id . $itemid_string; $pos_order = $mainframe->getUserState('tienda.pos_order'); $order = $this->_order; $order->load(array('order_id' => $order_id)); //redirect to the backend since we are doing pos order if ($pos_order) { // create POS request record JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tienda/tables'); $pos_tbl = JTable::getInstance("PosRequests", "TiendaTable"); $pos_tbl->order_id = 0; $pos_tbl->user_id = 0; $pos_tbl->mode = 2; // mode 2 => front-end $pos_tbl->data = base64_encode(@json_encode($values)); $pos_tbl->save(); // generate pos_id and time $pos_tbl->save(); // save the final token (with pos_id -> that's why we need to save it twice) // build URL for POS $uri = JURI::getInstance(); $uriA = JRequest::get('get'); $uriA['view'] = 'pos'; $uriA['task'] = 'display'; $uriA['subtask'] = 'confirmPayment'; $uriA['pos_id'] = $pos_tbl->pos_id; $uriA['pos_token'] = $pos_tbl->token; $uriA['order_id'] = $order_id; $uriA['user_id'] = $order->user_id; $uriA['nextstep'] = 'step5'; $uriA['Itemid'] = null; $pos_link = $uri->buildQuery(array_filter($uriA)); $mainframe->redirect(JURI::root() . 'administrator/index.php?' . $pos_link); } $dispatcher = JDispatcher::getInstance(); $html = ""; if (!empty($order->order_hash)) { $order_link .= '&h=' . $order->order_hash; } if (!empty($order_id) && (double) $order->order_total == (double) '0.00') { $order->order_state_id = '17'; // PAYMENT RECEIVED $order->save(); // send notice of new order Tienda::load("TiendaHelperBase", 'helpers._base'); $helper = TiendaHelperBase::getInstance('Email'); $order_model = Tienda::getClass("TiendaModelOrders", "models.orders"); $order_model->setId($order_id); $order_model_item = $order_model->getItem(); $helper->sendEmailNotices($order_model_item, 'new_order'); Tienda::load('TiendaHelperOrder', 'helpers.order'); TiendaHelperOrder::setOrderPaymentReceived($order_id); } else { // get the payment results from the payment plugin $results = $dispatcher->trigger("onPostPayment", array($orderpayment_type, $values)); // Display whatever comes back from Payment Plugin for the onPrePayment for ($i = 0; $i < count($results); $i++) { $html .= $results[$i]; } // re-load the order in case the payment plugin updated it $order->load(array('order_id' => $order_id)); } // $order_id would be empty on posts back from Paypal, for example if (!empty($order_id)) { // Set display if (!$this->onepage_checkout) { $progress = $this->getProgress(); } $view = $this->getView('checkout', 'html'); $view->setLayout('postpayment'); $view->set('_doTask', true); $view->assign('order_link', $order_link); $view->assign('plugin_html', $html); if (!$this->onepage_checkout) { $view->assign('progress', $progress); } // Get and Set Model $model = $this->getModel('checkout'); $view->setModel($model, true); // get the articles to display after checkout $articles = array(); $article_id = $this->defines->get('article_checkout'); if (!empty($article_id)) { Tienda::load('TiendaArticle', 'library.article'); $articles[] = TiendaArticle::display($article_id); } switch ($order->order_state_id) { case "2": case "3": case "5": case "17": $articles = array_merge($articles, $this->getOrderArticles($order_id)); // Inject <head> code if ($orders_confirmation_header_code = $this->defines->get('orders_confirmation_header_code')) { Tienda::load('TiendaHelperHead', 'helpers.head'); $head_helper = new TiendaHelperHead(); if ($string_to_inject = $head_helper->processStringForOrder($order_id, $orders_confirmation_header_code)) { $head_helper->injectIntoHead($string_to_inject); } } break; case "7": case "8": case "9": case "10": case "14": $article_id = $this->defines->get('article_default_payment_failure'); Tienda::load('TiendaArticle', 'library.article'); $articles = array(TiendaArticle::display($article_id)); break; } $view->assign('articles', $articles); ob_start(); $dispatcher->trigger('onBeforeDisplayPostPayment', array($order_id)); $view->assign('onBeforeDisplayPostPayment', ob_get_contents()); ob_end_clean(); ob_start(); $dispatcher->trigger('onAfterDisplayPostPayment', array($order_id)); $view->assign('onAfterDisplayPostPayment', ob_get_contents()); ob_end_clean(); $view->display(); } // set up user_id for cart items for guest account if ($order->user_id < Tienda::getGuestIdStart()) { Tienda::load('TiendaHelperCarts', 'helpers.cart'); $session = JFactory::getSession(); $helper = new TiendaHelperCarts(); $helper->mergeSessionCartWithUserCart($session->getId(), $order->user_id); } return; }
function doStep5($post) { //do some security check? $pos_id = JRequest::getInt('pos_id', 0); $token = JRequest::getCmd('pos_token', ''); JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tienda/tables'); $tbl_pos = JTable::getInstance('PosRequests', 'TiendaTable'); if (!$tbl_pos->load(array('pos_id' => $pos_id, 'user_id' => 0, 'order_id' => 0, 'mode' => 2, 'token' => $token))) { // no POS data with this description were found JError::raiseNotice('COM_TIENDA_RESTRICTED_ACCESS', $this->getError()); return false; } $data = json_decode(base64_decode($tbl_pos->data)); if (is_object($data)) { $data = get_object_vars($data); } $values = JRequest::get('get'); $values = array_merge($data, $values); $order_id = $values['order_id']; $session = JFactory::getSession(); $orderpayment_type = JRequest::getVar('orderpayment_type', $session->get('payment_plugin', '', 'tienda_pos')); $doneReloading = JRequest::getInt('reloaded'); // TODO find other way to do this check - there can be other offline payment types (new ones or created by users) if (($orderpayment_type == 'payment_offline' || $orderpayment_type == 'payment_ccoffline') && !$doneReloading) { $uri = JURI::getInstance(); $query = $uri->getQuery(); //reload the page since in payment_offline we are still in the modal $doc = JFactory::getDocument(); $link = JURI::root() . 'administrator/index.php?' . $query . '&reloaded=1'; $js = "window.parent.location.href = '{$link}';"; $js .= "window.parent.document.getElementById('sbox-window').close(); "; $doc->addScriptDeclaration($js); } $dispatcher = JDispatcher::getInstance(); $html = ""; $order = JTable::getInstance('Orders', 'TiendaTable'); $order->load(array('order_id' => $order_id)); if (!empty($order_id) && (double) $order->order_total == (double) '0.00') { $order->order_state_id = '17'; // PAYMENT RECEIVED $order->save(); // send notice of new order Tienda::load("TiendaHelperBase", 'helpers._base'); $helper = TiendaHelperBase::getInstance('Email'); $order_model = Tienda::getClass("TiendaModelOrders", "models.orders"); $order_model->setId($order_id); $order_model_item = $order_model->getItem(); $helper->sendEmailNotices($order_model_item, 'new_order'); Tienda::load('TiendaHelperOrder', 'helpers.order'); TiendaHelperOrder::setOrderPaymentReceived($order_id); } else { // get the payment results from the payment plugin $results = $dispatcher->trigger("onPostPayment", array($orderpayment_type, $values)); // Display whatever comes back from Payment Plugin for the onPrePayment for ($i = 0; $i < count($results); $i++) { $html .= $results[$i]; } // re-load the order in case the payment plugin updated it $order->load(array('order_id' => $order_id)); } $articles = array(); $view = $this->getView('pos', 'html'); $view->assign('plugin_html', $html); if (!empty($order_id)) { $order_link = 'index.php?option=com_tienda&controller=orders&view=orders&task=edit&id=' . $order_id; $view->assign('order_link', $order_link); // get the articles to display after checkout $article_id = Tienda::getInstance()->get('article_checkout'); $articles = array(); if (!empty($article_id)) { Tienda::load('TiendaArticle', 'library.article'); $articles[] = TiendaArticle::display($article_id); } switch ($order->order_state_id) { case "2": case "3": case "5": case "17": $articles = array_merge($articles, $this->getOrderArticles($order_id)); break; } } $view->setTask(true); $view->assign('articles', $articles); $view->assign('orderSummary', $this->getOrderSummary($order)); $view->assign('step1_inactive', $this->step1Inactive()); }