Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 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());
 }