function updateStatusForOneOrder($virtuemart_order_id, $inputOrder, $useTriggers = true) { // vmdebug('updateStatusForOneOrder', $inputOrder); /* Update the order */ $data = $this->getTable('orders'); $data->load($virtuemart_order_id); $old_order_status = $data->order_status; $data->bind($inputOrder); //First we must call the payment, the payment manipulates the result of the order_status if ($useTriggers) { if (!class_exists('vmPSPlugin')) { require JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'; } // Payment decides what to do when order status is updated JPluginHelper::importPlugin('vmpayment'); $_dispatcher = JDispatcher::getInstance(); //Should we add this? $inputOrder $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderPayment', array(&$data, $old_order_status)); foreach ($_returnValues as $_returnValue) { if ($_returnValue === true) { break; // Plugin was successfull } elseif ($_returnValue === false) { return false; // Plugin failed } // Ignore null status and look for the next returnValue } JPluginHelper::importPlugin('vmshipment'); $_dispatcher = JDispatcher::getInstance(); //Should we add this? $inputOrder $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderShipment', array(&$data, $old_order_status)); /** * If an order gets cancelled, fire a plugin event, perhaps * some authorization needs to be voided */ if ($data->order_status == "X") { JPluginHelper::importPlugin('vmpayment'); //Should we add this? $inputOrder $_dispatcher = JDispatcher::getInstance(); $_dispatcher->trigger('plgVmOnCancelPayment', array(&$data, $old_order_status)); } } if ($data->store()) { $task = JRequest::getCmd('task', 0); $view = JRequest::getWord('view', 0); /*if($task=='edit'){ $update_lines = JRequest::getInt('update_lines'); } else /*/ if ($task == 'updatestatus' and $view == 'orders') { $update_lines = JRequest::getVar('orders[' . $virtuemart_order_id . '][update_lines]'); } else { $update_lines = 1; } if ($update_lines !== 0) { vmdebug('$update_lines ' . $update_lines); $q = 'SELECT virtuemart_order_item_id FROM #__virtuemart_order_items WHERE virtuemart_order_id="' . $virtuemart_order_id . '"'; $db = JFactory::getDBO(); $db->setQuery($q); $order_items = $db->loadObjectList(); if ($order_items) { // vmdebug('updateStatusForOneOrder',$data); foreach ($order_items as $order_item) { //$this->updateSingleItem($order_item->virtuemart_order_item_id, $data->order_status, $order['comments'] , $virtuemart_order_id, $data->order_pass); $this->updateSingleItem($order_item->virtuemart_order_item_id, $data); } } } /* Update the order history */ $this->_updateOrderHist($virtuemart_order_id, $data->order_status, $inputOrder['customer_notified'], $inputOrder['comments']); // When the plugins did not already notified the user, do it here (the normal way) //Attention the ! prevents at the moment that an email is sent. But it should used that way. // if (!$inputOrder['customer_notified']) { $this->notifyCustomer($data->virtuemart_order_id, $inputOrder); // } //mod fazan 23/10/2012 per glimlag coupon if ($data->order_status == 'C') { require_once JPATH_ADMINISTRATOR . '/components/com_vmcoupons/classes/RSCoupons.class.php'; RSCoupons::OnBuyProductCouponGenarate($data->virtuemart_order_id, $data->virtuemart_user_id); RSCoupons::OnExceedsThresholds($data->order_total, $data->virtuemart_user_id); RSCoupons::OnPaymentMethodCouponGenarate($data->virtuemart_paymentmethod_id, $data->virtuemart_user_id); RSCoupons::OnBuyProductOnCategoryCouponGenarate($data->virtuemart_order_id, $data->virtuemart_user_id); RSCoupons::OnShopperGroupCouponGenarate($data->virtuemart_user_id); RSCoupons::OnShopperNameCouponGenarate($data->virtuemart_user_id); RSCoupons::UpdateGenaratedCoupons($data->coupon_code, $data->virtuemart_order_id, $data->virtuemart_user_id); } //end mod fazan 23/10/2012 per glimlag coupon JPluginHelper::importPlugin('vmcoupon'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmCouponUpdateOrderStatus', array($data, $old_order_status)); if (!empty($returnValues)) { foreach ($returnValues as $returnValue) { if ($returnValue !== null) { return $returnValue; } } } return true; } else { return false; } }