/**
  * When the user logs in, their session cart should override their db-stored cart.
  * Current actions take precedence
  *
  * @param $user
  * @param $options
  * @return unknown_type
  */
 private function doLoginUser($user, $options = array())
 {
     $session = JFactory::getSession();
     $old_sessionid = $session->get('old_sessionid');
     $user['id'] = intval(JUserHelper::getUserId($user['username']));
     // Should check that Citruscart is installed first before executing
     if (!$this->_isInstalled()) {
         return;
     }
     Citruscart::load('CitruscartHelperCarts', 'helpers.carts');
     $helper = new CitruscartHelperCarts();
     if (!empty($old_sessionid)) {
         $helper->mergeSessionCartWithUserCart($old_sessionid, $user['id']);
         JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_citruscart/models');
         $wishlist_model = JModelLegacy::getInstance('WishlistItems', 'CitruscartModel');
         $wishlist_model->setUserForSessionItems($old_sessionid, $user['id']);
     } else {
         $helper->updateUserCartItemsSessionId($user['id'], $session->getId());
     }
     $this->checkUserGroup();
     return true;
 }
Exemple #2
0
 /**
  * This method occurs after payment is attempted,
  * and fires the onPostPayment plugin event
  *
  * return unknown_type
  */
 function confirmPayment()
 {
     $input = JFactory::getApplication()->input;
     $this->current_step = 3;
     $orderpayment_type = $input->get('orderpayment_type');
     // Get post values
     $values = $input->getArray($_POST);
     // get the order_id from the session set by the prePayment
     $mainframe = JFactory::getApplication();
     $order_id = (int) $mainframe->getUserState('citruscart.order_id');
     $itemid_string = null;
     if ($itemid = $this->router->findItemid(array('view' => 'orders'))) {
         $itemid_string = "&Itemid=" . $itemid;
     }
     $order_link = 'index.php?option=com_citruscart&view=orders&task=view&id=' . $order_id . $itemid_string;
     $pos_order = $mainframe->getUserState('citruscart.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_citruscart/tables');
         $pos_tbl = JTable::getInstance("PosRequests", "CitruscartTable");
         $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 = $input->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
         Citruscart::load("CitruscartHelperBase", 'helpers._base');
         $helper = CitruscartHelperBase::getInstance('Email');
         $order_model = Citruscart::getClass("CitruscartModelOrders", "models.orders");
         $order_model->setId($order_id);
         $order_model_item = $order_model->getItem();
         $helper->sendEmailNotices($order_model_item, 'new_order');
         Citruscart::load('CitruscartHelperOrder', 'helpers.order');
         CitruscartHelperOrder::setOrderPaymentReceived($order_id);
     } else {
         // get the payment results from the payment plugin
         $results = JFactory::getApplication()->triggerEvent("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)) {
             Citruscart::load('CitruscartArticle', 'library.article');
             $articles[] = CitruscartArticle::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')) {
                     Citruscart::load('CitruscartHelperHead', 'helpers.head');
                     $head_helper = new CitruscartHelperHead();
                     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');
                 Citruscart::load('CitruscartArticle', 'library.article');
                 $articles = array(CitruscartArticle::display($article_id));
                 break;
         }
         $view->assign('articles', $articles);
         ob_start();
         JFactory::getApplication()->triggerEvent('onBeforeDisplayPostPayment', array($order_id));
         $view->assign('onBeforeDisplayPostPayment', ob_get_contents());
         ob_end_clean();
         ob_start();
         JFactory::getApplication()->triggerEvent('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 < Citruscart::getGuestIdStart()) {
         Citruscart::load('CitruscartHelperCarts', 'helpers.cart');
         $session = JFactory::getSession();
         $helper = new CitruscartHelperCarts();
         $helper->mergeSessionCartWithUserCart($session->getId(), $order->user_id);
     }
     return;
 }