Файловый менеджер - Редактировать - /home/lmsyaran/public_html/components/com_hikashop/controllers/checkout.php
Назад
<?php /** * @package HikaShop for Joomla! * @version 2.2.3 * @author hikashop.com * @copyright (C) 2010-2013 HIKARI SOFTWARE. All rights reserved. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ defined('_JEXEC') or die('Restricted access'); ?><?php class checkoutController extends hikashopController { var $cart_update = false; var $modify_views = array(); var $add = array(); var $modify = array(); var $delete = array(); function __construct($config = array(),$skip=false) { parent::__construct($config,$skip); $this->display=array('convert','step','notice','state','deleteaddress','notify','after_end','activate_page','activate','resetcart','threedsecure','printcart',''); if(!$skip){ $this->registerDefaultTask('step'); } $conf =& hikashop_config(); $this->checkout_workflow = trim($conf->get('checkout','login_address_shipping_payment_coupon_cart_status_confirm,end')); $this->steps=explode(',',$this->checkout_workflow); $this->redirect_url = $conf->get('redirect_url_when_cart_is_empty'); if(empty($this->redirect_url)){ global $Itemid; $url = ''; if(!empty($Itemid)){ $url='&Itemid='.$Itemid; } $this->redirect_url=hikashop_completeLink('product&task=listing'.$url,false,true); }else{ if(!preg_match('#^https?://#',$this->redirect_url)) $this->redirect_url = JURI::base().ltrim($this->redirect_url,'/'); $this->redirect_url = JRoute::_($this->redirect_url,false); } } function authorize($task){ if($this->isIn($task,array('display'))){ return true; } return false; } function printcart(){ JRequest::setVar( 'layout', 'printcart' ); return parent::display(); } function notice(){ $cart_type = JRequest::getVar('cart_type','','post'); if(!empty($cart_type)){ $app = JFactory::getApplication(); $app->setUserState( HIKASHOP_COMPONENT.'.popup_cart_type',$cart_type); } JRequest::setVar( 'layout', 'notice' ); return parent::display(); } function resetcart(){ $cart = hikashop_get('class.cart'); $cart->resetCart(); $app = JFactory::getApplication(); $app->redirect( $this->redirect_url ); } function activate(){ $app = JFactory::getApplication(); $db = JFactory::getDBO(); $user = JFactory::getUser(); $usersConfig = JComponentHelper::getParams( 'com_users' ); $userActivation = $usersConfig->get('useractivation'); $allowUserRegistration = $usersConfig->get('allowUserRegistration'); if ($user->get('id')) { $app->redirect( hikashop_completeLink('checkout',false,true) ); } if ($allowUserRegistration == '0' || $userActivation == '0') { JError::raiseError( 403, JText::_( 'Access Forbidden' )); return; } $lang = JFactory::getLanguage(); $lang->load('com_user',JPATH_SITE); jimport('joomla.user.helper'); $activation = hikashop_getEscaped(JRequest::getVar('activation', '', '', 'alnum' )); if (empty( $activation )){ $app->enqueueMessage(JText::_( 'HIKA_REG_ACTIVATE_NOT_FOUND' )); return; } if(version_compare(JVERSION,'1.6','<')){ $result = JUserHelper::activateUser($activation); }else{ if(HIKASHOP_J30){ JModelLegacy::addIncludePath(HIKASHOP_ROOT . DS . 'components' . DS . 'com_users' . DS . 'models'); }else{ JModel::addIncludePath(HIKASHOP_ROOT . DS . 'components' . DS . 'com_users' . DS . 'models'); } $model = $this->getModel('Registration', 'UsersModel',array(),true); $language = JFactory::getLanguage(); $language->load('com_users', JPATH_SITE, $language->getTag(), true); if($model) $result = $model->activate($activation); } if(!$result){ $app->enqueueMessage(JText::_( 'HIKA_REG_ACTIVATE_NOT_FOUND' )); return; }else{ $app->enqueueMessage(JText::_( 'HIKA_REG_ACTIVATE_COMPLETE' )); $id = JRequest::getInt('id',0); $class = hikashop_get('class.user'); $user = $class->get($id); if($id && file_exists(JPATH_ROOT.DS.'components'.DS.'com_comprofiler'.DS.'comprofiler.php') && $userActivation<2){ $class->addAndConfirmUserInCB($user); } $infos = JRequest::getVar('infos',''); global $Itemid; $url = ''; if(!empty($Itemid)){ $url='&Itemid='.$Itemid; } if(!empty($infos)){ $infos = unserialize(base64_decode($infos)); JPluginHelper::importPlugin('user'); if($userActivation<2 && !empty($infos['passwd']) && !empty($infos['username']) && $this->_doLogin($infos['username'],$infos['passwd'],false)){ $page = JRequest::getString('page','checkout'); if($page=='checkout'){ $this->before_address(); $app->redirect( hikashop_completeLink('checkout'.$url,false,true) ); }else{ return true; } }elseif($userActivation>=2){ $app->enqueueMessage(JText::_( 'HIKA_ADMIN_CONFIRM_ACTIVATION' )); } } if(version_compare(JVERSION,'1.6','<')){ $url = 'index.php?option=com_user&view=login'.$url; }else{ $url = 'index.php?option=com_users&view=login'.$url; } $app->redirect( JRoute::_($url,false) ); } } function activate_page(){ JRequest::setVar( 'layout', 'activate_page' ); return parent::display(); } function state(){ JRequest::setVar( 'layout', 'state' ); return parent::display(); } function deleteaddress(){ $addressdelete = JRequest::getInt('address_id',0); if($addressdelete){ JRequest::checkToken('request') || jexit( 'Invalid Token' ); $addressClass = hikashop_get('class.address'); $oldData = $addressClass->get($addressdelete); if(!empty($oldData)){ $user_id = hikashop_loadUser(); if($user_id==$oldData->address_user_id){ $addressClass->delete($addressdelete); $app=JFactory::getApplication(); $oldShip = $app->getUserState( HIKASHOP_COMPONENT.'.shipping_address'); $oldBill = $app->getUserState( HIKASHOP_COMPONENT.'.billing_address'); if($oldShip==$addressdelete){ $app->setUserState( HIKASHOP_COMPONENT.'.shipping_address',0); } if($oldBill==$addressdelete){ $app->setUserState( HIKASHOP_COMPONENT.'.billing_address',0); } } } } $this->step(); } function convert(){ $class = hikashop_get('class.cart'); $class->get(); $cart_type = JRequest::getString('cart_type','cart'); $result = $class->convert($class->cart->cart_id,$cart_type); $app=JFactory::getApplication(); if($result){ $app->setUserState(HIKASHOP_COMPONENT.'.cart_id', 0); $app->setUserState(HIKASHOP_COMPONENT.'.wishlist_id', $class->cart->cart_id); } global $Itemid; $url = ''; if(!empty($Itemid)){ $url='&Itemid='.$Itemid; } $url = 'wishlist&refresh=true'; $url = hikashop_completeLink($url,false,true); $this->setRedirect($url); } function step(){ if(isset($_POST['unique_id'])){ $unique_id = $_POST['unique_id']; $ck_submital = isset($_SESSION['ck_submital']) ? $_SESSION['ck_submital'] : array(); static $done = false; if(!$done && isset($ck_submital[$unique_id])){ JRequest::setVar('step',JRequest::getInt('previous',0)); JRequest::setVar( 'layout', 'step' ); return $this->display(); } else{ $ck_submital[$unique_id] = true; $_SESSION['ck_submital'] = $ck_submital; $done=true; } } $class = hikashop_get('class.cart'); $class->get(); if(empty($class->cart->cart_id)){ $this->setRedirect( $this->redirect_url, JText::_('CART_EMPTY')); return true; } $config =& hikashop_config(); global $Itemid; $redirect = false; $ssl = false; $new_item_id = $Itemid; $itemid_for_checkout = $config->get('checkout_itemid','0'); if(!empty($itemid_for_checkout)){ if($new_item_id!=$itemid_for_checkout && empty($_SESSION['hikashop_new_itemid'])){ $new_item_id=$itemid_for_checkout; $_SESSION['hikashop_new_itemid']=$new_item_id; $redirect = true; }else{ $_SESSION['hikashop_new_itemid']=''; } } $app = JFactory::getApplication(); if(($config->get('force_ssl',0)==1 || $config->get('force_ssl',0)=='url') && $app->getUserState('com_hikashop.ssl_redirect')!=1){ if (!hikashop_isSSL()){ $ssl = 1; $redirect = true; $app->setUserState('com_hikashop.ssl_redirect',1); } } if($redirect){ $url = ''; if(!empty($new_item_id)){ $url='&Itemid='.$new_item_id; } if($config->get('force_ssl',0)=='url'){ $url=$config->get('force_ssl_url'); $url=str_replace('http://', 'https://', $url); if (strpos($url,"https://")===false){ $url = "https://" . $url; } $app = JFactory::getApplication(); $requestUri = $_SERVER['PHP_SELF']; $str_start=strpos($requestUri,'index.php'); if(strpos($requestUri,'index.php')!=0){ $requestUri=substr($requestUri, $str_start-1, strlen($requestUri)); } if (!empty($_SERVER['QUERY_STRING'])) $requestUri = rtrim($requestUri,'/').'?'.$_SERVER['QUERY_STRING']; $app->redirect($url.$requestUri); }else{ $this->setRedirect( JRoute::_('index.php?option='.HIKASHOP_COMPONENT.'&ctrl=checkout'.$url,false,$ssl)); } return true; } $go_back = false; $this->previous = JRequest::getInt('previous',0); $this->current = JRequest::getInt('step',0); JPluginHelper::importPlugin('hikashop'); $dispatcher = JDispatcher::getInstance(); if(isset($_REQUEST['previous'])){ if(!isset($this->steps[$this->previous])){ $this->previous = 0; } $this->controllers = trim($this->steps[$this->previous]); $this->controllers = explode('_',$this->controllers); $newArray = array(); $found = false; $cart = false; $coupon = false; $login = false; $address = false; foreach($this->controllers as $v) { if($v=='confirm'){ $found = true; }elseif($v=='cart'){ $cart = true; }elseif($v=='login'){ $login = true; }elseif($v=='address'){ $address = true; }elseif($v=='coupon'){ $coupon = true; }else{ $newArray[]=$v; } } if($cart) array_unshift($newArray, 'cart'); if($coupon) array_unshift($newArray, 'coupon'); if($login) array_unshift($newArray, 'login'); if($address) array_unshift($newArray, 'address'); if($found) $newArray[] = 'confirm'; $this->controllers = $newArray; $this->beforeControllers = $newArray; foreach($this->controllers as $controller){ $method = 'after_'.trim($controller); $original_go_back = $go_back; if(method_exists($this,$method)){ if(!$this->$method(!$go_back)){ $go_back = true; } } else { $dispatcher->trigger('onAfterCheckoutStep', array($controller, &$go_back, $original_go_back, &$this)); } } } else if($this->previous == 0) { $auto_select_default = $config->get('auto_select_default',2); if($auto_select_default){ $this->before_shipping(true); $this->before_payment(true); } } if($go_back){ JRequest::setVar('step',$this->previous); }else{ $this->controllers = trim(@$this->steps[$this->current]); $this->controllers=explode('_',$this->controllers); foreach($this->controllers as $controller){ $method = 'before_'.trim($controller); $original_go_back = $go_back; if(method_exists($this,$method)){ if(!$this->$method()){ $go_back = true; } } else { $dispatcher->trigger('onBeforeCheckoutStep', array($controller, &$go_back, $original_go_back, &$this)); } } if($go_back && isset($this->previous)){ JRequest::setVar('step',$this->previous); } } JRequest::setVar( 'layout', 'step' ); return $this->display(); } function before_coupon(){ return true; } function after_coupon($success){ $coupon = JRequest::getString('coupon',''); $qty = 1; if(empty($coupon)){ $coupon = JRequest::getInt('removecoupon',0); $qty = 0; } if(!empty($coupon)){ $class = hikashop_get('class.cart'); if($class->update($coupon,$qty,0,'coupon')){ if(strpos($this->checkout_workflow,'shipping')!==false){ $this->before_shipping(true); } if(strpos($this->checkout_workflow,'payment')!==false){ $this->before_payment(true); } $this->initCart(true); $this->cart_update = true; return false; } } return true; } function check_coupon(){ return true; } function before_terms(){ return true; } function after_terms($success){ $app = JFactory::getApplication(); $app->setUserState( HIKASHOP_COMPONENT.'.checkout_terms', JRequest::getInt('hikashop_checkout_terms',0) ); if(!$this->cart_update && $success){ return $this->check_terms(); } return true; } function check_terms(){ $app = JFactory::getApplication(); $status = (bool)$app->getUserState( HIKASHOP_COMPONENT.'.checkout_terms',0 ); if(!$status){ $app->enqueueMessage(JText::_('PLEASE_ACCEPT_TERMS_BEFORE_FINISHING_ORDER')); } return $status; } function before_fields(){ return true; } function after_fields(){ if(hikashop_level(2)){ $app = JFactory::getApplication(); $old = $app->getUserState( HIKASHOP_COMPONENT.'.checkout_fields_ok',0); $oldData = $app->getUserState( HIKASHOP_COMPONENT.'.checkout_fields'); $fieldClass = hikashop_get('class.field'); $orderData = $fieldClass->getInput('order',$oldData,!$this->cart_update); if($orderData!==false){ $app->setUserState( HIKASHOP_COMPONENT.'.checkout_fields_ok',1); $app->setUserState( HIKASHOP_COMPONENT.'.checkout_fields',$orderData); $changed = false; } if((!$old&&$orderData===false) || (!empty($orderData) && $changed && $this->_getStep('confirm',(int)$this->previous)===(int)$this->previous)){ return false; } } return true; } function check_fields(){ if(hikashop_level(2)){ $app = JFactory::getApplication(); $status = (bool)$app->getUserState( HIKASHOP_COMPONENT.'.checkout_fields_ok',0 ); if(!$status){ $app->enqueueMessage(JText::_('PLEASE_FILL_ADDITIONAL_INFO')); } }else{ $status = true; } return $status; } function before_cart(){ return true; } function after_cart($success){ $modified = false; $formData = JRequest::getVar( 'item', array(), '', 'array' ); $class = hikashop_get('class.cart'); if(!empty($formData)){ $modified = $class->update($formData,0,0,'item'); }else{ $formData = JRequest::getVar( 'data', array(), '', 'array' ); if(!empty($formData)){ $modified = $class->update($formData,0,0); } } if($modified){ $class->get(); if(strpos($this->checkout_workflow,'shipping')!==false){ $this->before_shipping(true); } if(strpos($this->checkout_workflow,'payment')!==false){ $this->before_payment(true); } $this->initCart(true); $this->cart_update = true; return false; } return true; } function check_cart(){ return true; } function before_login(){ if(count($this->controllers) == 1) { $user = JFactory::getUser(); $app = JFactory::getApplication(); $user_id = $app->getUserState( HIKASHOP_COMPONENT.'.user_id' ); if(!$user->guest || $user_id){ $controllersCheck = trim($this->steps[$this->previous]); $controllersCheck = explode('_', $controllersCheck); $current = $this->current + 1; if(count($controllersCheck) == 1 && $controllersCheck[0] == 'login') $current = $this->previous + 1; JRequest::setVar('step', $current); JRequest::setVar('previous', 0); $this->step(); } } return true; } function after_login($success){ $user = JFactory::getUser(); $status = true; $app = JFactory::getApplication(); $user_id=$app->getUserState( HIKASHOP_COMPONENT.'.user_id' ); if(!$this->cart_update && $user->guest && empty($user_id)){ JPluginHelper::importPlugin('user'); $register=JRequest::getString('register',''); $action = JRequest::getString('login_view_action',''); if($action=='register' || ($action!='login' && !empty($register))){ $status = $this->_doRegister(); }else{ $login=JRequest::getString('login',''); if($action=='login' || !empty($login)){ $status = $this->_doLogin(); }else{ $name = @$_REQUEST['data']['register']['email']; $username = JRequest::getVar('username', '', 'request', 'username'); if(!empty($name)){ $status = $this->_doRegister(); }elseif(!empty($username)){ $status = $this->_doLogin(); } } } if($status){ if($this->_getStep('address',$this->previous)!==false || $this->_getStep('confirm',(int)$this->previous)===(int)$this->previous){ $status = false; } if(!$this->before_address()){ $status = false; } $this->before_login(); } } return $status; } function _doRegister(){ $class = hikashop_get('class.user'); $status = $class->register($this); $app = JFactory::getApplication(); if($status){ $this->cart_update=true; $app->setUserState( HIKASHOP_COMPONENT.'.user_id',$class->user_id ); $config =& hikashop_config(); $simplified = $config->get('simplified_registration',0); $display = $config->get('display_method',0); if(!hikashop_level(1)) $display = 0; if($display==1){ $simplified = explode(',',$simplified); if($config->get('display_login',1)){ $simplified[]='login'; } if(count($simplified)==1){ $simplified = array_shift($simplified); }else{ $formData = JRequest::getVar( 'data', array(), '', 'array' ); $simplified = @$formData['register']['registration_method']; } } if($simplified!=2){ $usersConfig = JComponentHelper::getParams( 'com_users' ); $useractivation = $usersConfig->get( 'useractivation' ); if ( $useractivation != 1 ) { $this->_doLogin($class->registerData->username,$class->registerData->password); } } $app->setUserState(HIKASHOP_COMPONENT.'.shipping_address', 0); $app->setUserState(HIKASHOP_COMPONENT.'.billing_address', 0); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_method', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_id', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', null); $app->setUserState(HIKASHOP_COMPONENT.'.payment_method', null); $app->setUserState(HIKASHOP_COMPONENT.'.payment_id', 0); $app->setUserState(HIKASHOP_COMPONENT.'.payment_data', null); } return $status; } function _doLogin($user='',$pass='',$checkToken=true){ $options = array(); $options['remember'] = JRequest::getBool('remember', false); $options['return'] = false; $credentials = array(); if(empty($user)){ $credentials['username'] = JRequest::getVar('username', '', 'request', 'username'); }else{ $credentials['username'] = $user; } if(empty($pass)){ $credentials['password'] = JRequest::getString('passwd', '', 'request', JREQUEST_ALLOWRAW); }else{ $credentials['password'] = $pass; } $mainframe = JFactory::getApplication(); $error = $mainframe->login($credentials, $options); $user = JFactory::getUser(); if(JError::isError($error) || $user->guest){ return false; } $this->cart_update=true; $class = hikashop_get('class.user'); $user_id = $class->getID($user->get('id')); if($user_id){ $app = JFactory::getApplication(); $app->setUserState( HIKASHOP_COMPONENT.'.user_id',$user_id ); } return true; } function check_login() { $logged=(bool)hikashop_loadUser(); if(!$logged){ $app = JFactory::getApplication(); $app->enqueueMessage( JText::_('LOGIN_OR_REGISTER_ACCOUNT') ); } return $logged; } function before_address() { $status = $this->_checkLogin(); if($status) { $user_id = hikashop_loadUser(); if($user_id){ $app = JFactory::getApplication(); $shipping = $app->getUserState( HIKASHOP_COMPONENT.'.shipping_address',0 ); $billing = $app->getUserState( HIKASHOP_COMPONENT.'.billing_address',0 ); if(empty($shipping) || empty($billing)){ $db = JFactory::getDBO(); $db->setQuery('SELECT address_id FROM '.hikashop_table('address').' WHERE address_published=1 AND address_user_id='.$user_id); $address_id = $db->loadResult(); $app->setUserState( HIKASHOP_COMPONENT.'.shipping_address',$address_id ); $app->setUserState( HIKASHOP_COMPONENT.'.billing_address',$address_id ); if(strpos($this->checkout_workflow,'shipping')!==false){ if(!$this->before_shipping(true) && $this->_getStep('shipping',$this->previous)!==false){ $status = false; } } if(strpos($this->checkout_workflow,'payment')!==false){ if(!$this->before_payment(true) && $this->_getStep('payment',$this->previous)!==false){ $status = false; } } $this->initCart(true); $this->cart_update = true; $this->initCart(); } } } return $status; } function after_address($success){ if($this->cart_update){ return true; } $logged=(bool)hikashop_loadUser(); if(!$logged){ return true; } $billing = JRequest::getInt('hikashop_address_billing',0); if(empty($billing)){ if(!$this->cart_update && !JRequest::getInt('removecoupon',0)){ $app = JFactory::getApplication(); JRequest::setVar( HIKASHOP_COMPONENT.'.address_error',1 ); $app->enqueueMessage( JText::_('CREATE_OR_SELECT_ADDRESS') ); } return false; } $shipping = JRequest::getInt('hikashop_address_shipping',0); if(JRequest::getString('same_address','')=='yes'||empty($shipping)){ $shipping = $billing; } $app = JFactory::getApplication(); $oldShippingAddress = (int)$app->getUserState( HIKASHOP_COMPONENT.'.shipping_address' ); $oldBillingAddress = (int)$app->getUserState( HIKASHOP_COMPONENT.'.billing_address' ); $app->setUserState( HIKASHOP_COMPONENT.'.shipping_address',$shipping ); $app->setUserState( HIKASHOP_COMPONENT.'.billing_address',$billing ); $shipping_address = (int)$app->getUserState( HIKASHOP_COMPONENT.'.shipping_address' ); $billing_address = (int)$app->getUserState( HIKASHOP_COMPONENT.'.billing_address' ); if($shipping!=$oldShippingAddress){ $cart = $this->initCart(); if($cart->has_shipping){ $this->cart_update=true; if(strpos($this->checkout_workflow,'shipping')!==false){ $this->before_shipping(true); } if(strpos($this->checkout_workflow,'payment')!==false){ $this->before_payment(true); } return false; } } if($billing!=$oldBillingAddress){ return false; } return true; } function check_address(){ $app = JFactory::getApplication(); $shipping_address=$app->getUserState( HIKASHOP_COMPONENT.'.shipping_address' ); if(empty($shipping_address)){ JRequest::setVar( HIKASHOP_COMPONENT.'.address_error',1 ); $app->enqueueMessage( JText::_('CREATE_OR_SELECT_ADDRESS') ); return false; } return true; } function before_shipping($directCall = false) { $ok = true; if(!$directCall) { $ok = $this->_checkLogin(); if(!$ok) return $ok; } else { $this->initCart(true); } $app = JFactory::getApplication(); $shipping_address = $app->getUserState( HIKASHOP_COMPONENT.'.shipping_address'); if(empty($shipping_address) && !$directCall) { $found = $this->_getStep('address'); if($found !== false && $found != $this->current) { JRequest::setVar('step',$found); JRequest::setVar('previous',0); $this->step(); return false; } } $shipping_methods = $app->getUserState(HIKASHOP_COMPONENT.'.shipping_method', null); $shipping_ids = $app->getUserState(HIKASHOP_COMPONENT.'.shipping_id', null); if(empty($shipping_methods) || $this->cart_update) { $cart = $this->initCart(); if($cart->has_shipping){ $shippingClass = hikashop_get('class.shipping'); $methods =& $shippingClass->getShippings($cart, $directCall); if(empty($methods)) return $ok; $shipping_groups = $cart->shipping_groups; // $shippingClass->getShippingGroups($cart, $methods); $reset_shipping = true; if($this->cart_update && !empty($shipping_methods)) { $found = false; $rates = array(); foreach($shipping_groups as $key => $shipping_group) { $p = reset($shipping_group); foreach($methods as $m) { if(is_array($shipping_ids) && is_array($shipping_methods) && in_array($m->shipping_id.'@'.$key, $shipping_ids) && in_array($m->shipping_type.'@'.$key, $shipping_methods)) { $found = true; $rates[] = $m; } } } if($found) $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', $rates); $reset_shipping = !$found; } if($reset_shipping) { $config =& hikashop_config(); $auto_select_default = $config->get('auto_select_default', 2); if($auto_select_default == 1 && count($methods) > 1) $auto_select_default = 0; $ok = false; if($auto_select_default) { $method = reset($methods); $shipping_methods = array(); $shipping_ids = array(); $rates = array(); foreach($shipping_groups as $key => $shipping_group) { $p = reset($shipping_group->shippings); foreach($methods as $rate) { if($rate->shipping_id == $p && (!isset($rate->shipping_warehouse_id) || $rate->shipping_warehouse_id === $key)) { $rates[] = $rate; $shipping_ids[] = $rate->shipping_id.'@'.$key; $shipping_methods[] = $rate->shipping_type.'@'.$key; break; } } } $app->setUserState(HIKASHOP_COMPONENT.'.shipping_method', $shipping_methods); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_id', $shipping_ids); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', $rates); $this->initCart(true); } else { $app->setUserState(HIKASHOP_COMPONENT.'.shipping_method', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_id', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', null); if((empty($shipping_methods) && empty($shipping_ids)) || $directCall || isset($this->beforeControllers) && count($this->beforeControllers)==1) $ok = true; } } } } return $ok; } function after_shipping($success) { if($this->cart_update) return true; $cart = $this->initCart(); if(!$cart->has_shipping) return true; $shipping = JRequest::getString('hikashop_shippings', ''); $app = JFactory::getApplication(); $shippingClass = hikashop_get('class.shipping'); $methods =& $shippingClass->getShippings($cart); if(empty($methods)) return false; if($shipping != implode(';', array_keys($cart->shipping_groups)) && !(empty($shipping) && implode(';', array_keys($cart->shipping_groups)) == '0')) { return false; } $shippings = array(); $shipping_ids = array(); $shipping_datas = array(); $several_shipping = (count($cart->shipping_groups) > 1); if($several_shipping) $order_products = $cart->products; foreach($cart->shipping_groups as $group_key => $shipping_group) { $input_name = 'hikashop_shipping'; if($several_shipping) $input_name .= '_'.$group_key; $shipping = JRequest::getString($input_name, null); if(empty($shipping)) return false; $key_lng = strlen($group_key) + 1; if(substr($shipping, -$key_lng) == '_' . $group_key) { $shipping = substr($shipping, 0, strlen($shipping) - $key_lng); } $shipping = explode('_', $shipping); if(count($shipping) <= 1) return false; $shipping_id = array_pop($shipping); $shipping = implode('_', $shipping); if(empty($shipping)) return false; $data = hikashop_import('hikashopshipping', $shipping); if($several_shipping) { $cart->products = $shipping_group->products; $rates_copy = array(); foreach($methods as $rate) { if(!isset($rate->shipping_warehouse_id) || $rate->shipping_warehouse_id == $group_key) $rates_copy[] = clone($rate); } $shipping_data = $data->onShippingSave($cart, $rates_copy, $shipping_id, $group_key); unset($rates_copy); } else { $shipping_data = $data->onShippingSave($cart, $methods, $shipping_id); } if($shipping_data === false) { $app->setUserState(HIKASHOP_COMPONENT.'.shipping_method', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_id', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', null); return false; } $shippings[] = $shipping . '@' . $group_key; $shipping_ids[] = $shipping_id . '@' . $group_key; $shipping_datas[] = $shipping_data; } if($several_shipping) $cart->products = $order_products; $old_shipping_methods = $app->getUserState(HIKASHOP_COMPONENT.'.shipping_method'); $old_shipping_ids = $app->getUserState(HIKASHOP_COMPONENT.'.shipping_id'); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_method', $shippings); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_id', $shipping_ids); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', $shipping_datas); if(($old_shipping_ids !== $shipping_ids || $old_shipping_methods !== $shippings) && strpos($this->checkout_workflow, 'payment') !== false) { $this->cart_update = true; $this->initCart(true); $this->before_payment(true); } if(($old_shipping_ids !== $shipping_ids || $old_shipping_methods !== $shippings) && ($this->_getStep('cart',(int)$this->previous)===(int)$this->previous || $this->_getStep('confirm',(int)$this->previous)===(int)$this->previous)) { return false; } return true; } function check_shipping(){ $app = JFactory::getApplication(); $shipping_done=$app->getUserState( HIKASHOP_COMPONENT.'.shipping_method'); if(empty($shipping_done)){ $shipping_done=false; }else{ $shipping_done=true; } if(!$shipping_done){ $cart = $this->initCart(); if(!$cart->has_shipping){ return true; } $app->enqueueMessage( JText::_('SELECT_SHIPPING') ); } return $shipping_done; } function initCart($reset = false) { static $done = false; if($reset) { $done = false; return true; } if(!$done) { $cartClass = hikashop_get('class.cart'); $done = $cartClass->loadFullCart(true); if(empty($done->products)) { $app = JFactory::getApplication(); $app->redirect( $this->redirect_url, JText::_('CART_EMPTY')); } $shippingClass = hikashop_get('class.shipping'); $usable_rates =& $shippingClass->getShippings($done); if(empty($usable_rates) && empty($shippingClass->errors)) { $shipping = false; } else { $shipping = true; } $config =& hikashop_config(); $done->has_shipping = $shipping || $config->get('force_shipping'); } return $done; } function before_payment($directCall=false){ $ok = true; if(!$directCall){ $ok = $this->_checkLogin(); if(!$ok){ return $ok; } } $app = JFactory::getApplication(); $payment_method = $app->getUserState( HIKASHOP_COMPONENT.'.payment_method',''); $payment_id = $app->getUserState( HIKASHOP_COMPONENT.'.payment_id',''); $cart = $this->initCart(); if(empty($cart->full_total->prices[0]->price_value_with_tax) || bccomp($cart->full_total->prices[0]->price_value_with_tax,0,5)==0){ $app->setUserState( HIKASHOP_COMPONENT.'.payment_method',''); $app->setUserState( HIKASHOP_COMPONENT.'.payment_id',0); $app->setUserState( HIKASHOP_COMPONENT.'.payment_data',''); return true; } if(!empty($payment_method) && @$cart->payment->payment_params->payment_percentage != 0){ $pluginsClass = hikashop_get('class.plugins'); $rates = $pluginsClass->getMethods('payment'); $price_all = @$cart->full_total->prices[0]->price_value_with_tax; if(isset($cart->full_total->prices[0]->price_value_without_payment_with_tax)){ $price_all = @$cart->full_total->prices[0]->price_value_without_payment_with_tax; } $currencyClass = hikashop_get('class.currency'); $currencyClass->convertPayments($rates); $cart->payment->payment_price = ($price_all * (float)@$cart->payment->payment_params->payment_percentage / 100) + $rates[$payment_id]->payment_price; } if(empty($payment_method) || $this->cart_update){ $payment = JRequest::getString('hikashop_payment',''); if(!empty($payment)){ $payment = explode('_',$payment); if(count($payment)>1){ $new_payment_id = array_pop($payment); $payment = implode('_',$payment); if($new_payment_id!=$payment_id || $payment!=$payment_method){ $payment_method = $payment; $payment_id = $new_payment_id; $status = $this->_readPayment(); if(!$directCall){ return $status; } } } } $class = hikashop_get('class.payment'); $methods = $class->getPayments($cart,$this->cart_update); if(!empty($methods)){ $reset_payment=true; if($this->cart_update){ $found = false; foreach($methods as $m){ if($m->payment_id==$payment_id&&$m->payment_type==$payment_method){ $found=true; } } $reset_payment = !$found; } if($reset_payment){ $config =& hikashop_config(); $auto_select_default = $config->get('auto_select_default',2); if($auto_select_default==1 && count($methods)>1) $auto_select_default=0; $ok = false; if($auto_select_default){ $method = reset($methods); $app->setUserState( HIKASHOP_COMPONENT.'.payment_method',$method->payment_type); $app->setUserState( HIKASHOP_COMPONENT.'.payment_id',$method->payment_id); $app->setUserState( HIKASHOP_COMPONENT.'.payment_data',$method); }else{ $app->setUserState( HIKASHOP_COMPONENT.'.payment_method',''); $app->setUserState( HIKASHOP_COMPONENT.'.payment_id',0); $app->setUserState( HIKASHOP_COMPONENT.'.payment_data',''); if(($payment_method=='' && $payment_id=='') || $directCall || !empty($this->beforeControllers) && count($this->beforeControllers)==1){ $ok = true; } } } } } return $ok; } function after_payment($success){ if($this->cart_update){ return true; } $cart = $this->initCart(); if(empty($cart->full_total->prices[0]->price_value_with_tax) || bccomp($cart->full_total->prices[0]->price_value_with_tax,0,5)==0){ $app = JFactory::getApplication(); $app->setUserState( HIKASHOP_COMPONENT.'.payment_method',''); $app->setUserState( HIKASHOP_COMPONENT.'.payment_id',0); $app->setUserState( HIKASHOP_COMPONENT.'.payment_data',''); return true; } return $this->_readPayment(); } function _readPayment(){ $payment = JRequest::getString('hikashop_payment',''); if(empty($payment)){ return false; } $payment = explode('_',$payment); if(count($payment)>1){ $payment_id = array_pop($payment); $payment = implode('_',$payment); if(empty($payment)){ return false; } $cart = $this->initCart(); $pluginsClass = hikashop_get('class.plugins'); $rates = $pluginsClass->getMethods('payment'); $data = hikashop_import('hikashoppayment',$payment); $paymentData = $data->onPaymentSave($cart,$rates,$payment_id); if($paymentData===false){ return false; } $app = JFactory::getApplication(); $old_payment_method = $app->getUserState(HIKASHOP_COMPONENT.'.payment_method'); $old_payment_id = $app->getUserState(HIKASHOP_COMPONENT.'.payment_id'); $app->setUserState( HIKASHOP_COMPONENT.'.payment_method',$payment); $app->setUserState( HIKASHOP_COMPONENT.'.payment_id',$payment_id); $price_all = @$cart->full_total->prices[0]->price_value_with_tax; if(isset($cart->full_total->prices[0]->price_value_without_payment_with_tax)){ $price_all = @$cart->full_total->prices[0]->price_value_without_payment_with_tax; } $currencyClass = hikashop_get('class.currency'); $currencyClass->convertPayments($rates); $paymentData->payment_price = ($price_all * (float)@$paymentData->payment_params->payment_percentage / 100) + $paymentData->payment_price; $app->setUserState( HIKASHOP_COMPONENT.'.payment_data',$paymentData); if(!empty($paymentData->ask_cc)){ $paymentClass = hikashop_get('class.payment'); $paymentClass->readCC(); } if(($old_payment_id!=$payment_id || $old_payment_method!=$payment) && ($this->_getStep('cart',(int)$this->previous)===(int)$this->previous || $this->_getStep('confirm',(int)$this->previous)===(int)$this->previous)){ return false; } return true; }else{ return false; } } function check_payment(){ $cart = $this->initCart(); $app = JFactory::getApplication(); if(empty($cart->full_total->prices[0]->price_value_with_tax) || bccomp($cart->full_total->prices[0]->price_value_with_tax,0,5)==0){ $app->setUserState( HIKASHOP_COMPONENT.'.payment_method',''); $app->setUserState( HIKASHOP_COMPONENT.'.payment_id',0); $app->setUserState( HIKASHOP_COMPONENT.'.payment_data',''); return true; } $payment=$app->getUserState( HIKASHOP_COMPONENT.'.payment_method'); if(empty($payment)){ $payment_done=false; }else{ $payment_done=true; } if(!$payment_done){ $app = JFactory::getApplication(); $app->enqueueMessage( JText::_('SELECT_PAYMENT') ); }else{ $paymentData = $app->getUserState( HIKASHOP_COMPONENT.'.payment_data'); if(!empty($paymentData->ask_cc)){ $cc_number=$app->getUserState( HIKASHOP_COMPONENT.'.cc_number'); $cc_month=$app->getUserState( HIKASHOP_COMPONENT.'.cc_month'); $cc_year=$app->getUserState( HIKASHOP_COMPONENT.'.cc_year'); $cc_CCV=$app->getUserState( HIKASHOP_COMPONENT.'.cc_CCV'); $cc_owner=$app->getUserState( HIKASHOP_COMPONENT.'.cc_owner'); if(empty($cc_number) || empty($cc_month) || empty($cc_year) || (empty($cc_CCV)&&!empty($paymentData->ask_ccv)) || (empty($cc_owner)&&!empty($paymentData->ask_owner))){ $app =& JFactory::getApplication(); $app->enqueueMessage( JText::_('FILL_CREDIT_CARD_INFO') ); $payment_done=false; } } } return $payment_done; } function _checkToken(){ static $done = false; if(!$done){ $done = true; JRequest::checkToken('request') || jexit( 'Invalid Token' ); } } function notify(){ ob_start(); $payment = JRequest::getCmd('notif_payment'); $data = hikashop_import('hikashoppayment',$payment); if(!empty($data)){ $trans = hikashop_get('helper.translation'); $cleaned_statuses = $trans->getStatusTrans(); $data = $data->onPaymentNotification($cleaned_statuses); } $dbg=ob_get_clean(); if(!empty($dbg)){ $config =& hikashop_config(); jimport('joomla.filesystem.file'); $file = $config->get('payment_log_file',''); $file = rtrim(JPath::clean(html_entity_decode($file)),DS.' '); if(!preg_match('#^([A-Z]:)?/.*#',$file)){ if(!$file[0]=='/' || !file_exists($file)){ $file = JPath::clean(HIKASHOP_ROOT.DS.trim($file,DS.' ')); } } if(!empty($file) && defined('FILE_APPEND')){ if (!file_exists(dirname($file))) { jimport('joomla.filesystem.folder'); JFolder::create(dirname($file)); } file_put_contents($file,$dbg,FILE_APPEND); } } if(is_string($data) && !empty($data)){ echo $data; } } function threedsecure(){ ob_start(); $payment = JRequest::getCmd('3dsecure_payment'); $data = hikashop_import('hikashoppayment',$payment); if(!empty($data)){ $trans = hikashop_get('helper.translation'); $cleaned_statuses = $trans->getStatusTrans(); $data = $data->onThreeDSecure($cleaned_statuses); } $dbg=ob_get_clean(); if(!empty($dbg)){ $config =& hikashop_config(); jimport('joomla.filesystem.file'); $file = $config->get('payment_log_file',''); $file = rtrim(JPath::clean(html_entity_decode($file)),DS.' '); if(!preg_match('#^([A-Z]:)?/.*#',$file)){ if(!$file[0]=='/' || !file_exists($file)){ $file = JPath::clean(HIKASHOP_ROOT.DS.trim($file,DS.' ')); } } if(!empty($file) && defined('FILE_APPEND')){ if (!file_exists(dirname($file))) { jimport('joomla.filesystem.folder'); JFolder::create(dirname($file)); } file_put_contents($file,$dbg,FILE_APPEND); } } if(is_string($data) && !empty($data)){ echo $data; } } function before_confirm(){ foreach($this->steps as $i => $step){ if(intval($i)!=intval($this->current)){ $this->_checkStep(trim($step),$i); } } return true; } function _checkStep($step,$i){ $controllers = explode('_',$step); $ok = true; foreach($controllers as $controller){ $fct = 'check_'.trim($controller); if(method_exists($this,$fct)){ if(!$this->$fct()){ $ok = false; } } } if(!$ok){ $this->setRedirect( hikashop_completeLink('checkout&task=step&step='.$i,false,true)); $this->redirect(); } } function after_confirm($success){ if(!$success){ return false; } if(!JRequest::getVar('hikashop_validate',1)){ return false; } if($this->current==$this->previous){ return true; } foreach($this->steps as $i => $step){ $this->_checkStep(trim($step),$i); } $app = JFactory::getApplication(); $db = JFactory::getDBO(); $config =& hikashop_config(); $pluginsClass = hikashop_get('class.plugins'); $cart = $this->initCart(); $shippings = array(); $shipping = $app->getUserState( HIKASHOP_COMPONENT.'.shipping_method'); $shipping_id = $app->getUserState( HIKASHOP_COMPONENT.'.shipping_id'); if(!empty($shipping)) { foreach($shipping as $ship) { $ship = explode('@', $ship, 2); $current_id = 0; foreach($shipping_id as $sid) { list($i, $k) = explode('@', $sid, 2); if($k == $ship[1]) { $current_id = $i; break; } } $shippings[$ship[1]] = array('id' => $current_id, 'name' => $ship[0]); } $shippingClass = hikashop_get('class.shipping'); $methods =& $shippingClass->getShippings($cart); $shipping_groups = $shippingClass->getShippingGroups($cart, $methods); } $payment = $app->getUserState( HIKASHOP_COMPONENT.'.payment_method'); $payment_id = $app->getUserState( HIKASHOP_COMPONENT.'.payment_id'); $ids = array(); foreach($cart->products as $product){ if($product->cart_product_quantity>0 && $product->product_type=='variant'){ $ids[$product->product_id]=$product->product_id; } } if(!empty($ids)){ $database = JFactory::getDBO(); $query = 'SELECT a.variant_product_id as product_id,b.characteristic_id as value_id,b.characteristic_value as value,c.characteristic_id as name_id,c.characteristic_value as name FROM '.hikashop_table('variant').' AS a LEFT JOIN '.hikashop_table('characteristic').' AS b ON a.variant_characteristic_id=b.characteristic_id LEFT JOIN '.hikashop_table('characteristic').' AS c ON b.characteristic_parent_id = c.characteristic_id WHERE a.variant_product_id IN ('.implode(',',$ids).')'; $database->setQuery($query); $characteristics = $database->loadObjectList(); if(!empty($characteristics)){ foreach($characteristics as $characteristic){ foreach($cart->products as $k => $product){ if($product->product_id == $characteristic->product_id){ if(empty($product->characteristics)){ $product->characteristics = array($characteristic->name => $characteristic->value); }else{ $product->characteristics[$characteristic->name] = $characteristic->value; } } } } } } if(hikashop_level(2)){ $element=null; $fieldsClass = hikashop_get('class.field'); $itemFields = $fieldsClass->getFields('',$element,'item'); } $products = array(); foreach($cart->products as $product) { if($product->cart_product_quantity > 0) { $orderProduct = new stdClass(); $orderProduct->product_id = $product->product_id; $orderProduct->order_product_quantity = $product->cart_product_quantity; $orderProduct->order_product_name = $product->product_name; $orderProduct->cart_product_id = $product->cart_product_id; $orderProduct->cart_product_option_parent_id = $product->cart_product_option_parent_id; $orderProduct->order_product_code = $product->product_code; $orderProduct->order_product_price = @$product->prices[0]->unit_price->price_value; $orderProduct->order_product_wishlist_id = $product->cart_product_wishlist_id; $orderProduct->product_subscription_id = @$product->product_subscription_id; $tax = 0; if(!empty($product->prices[0]->unit_price->price_value_with_tax) && bccomp($product->prices[0]->unit_price->price_value_with_tax,0,5)) $tax = $product->prices[0]->unit_price->price_value_with_tax-$product->prices[0]->unit_price->price_value; $orderProduct->order_product_tax = $tax; $characteristics = ''; if(!empty($product->characteristics)) $characteristics = serialize($product->characteristics); $orderProduct->order_product_options = $characteristics; if(!empty($product->discount)) $orderProduct->discount = $product->discount; if(!empty($itemFields)) { foreach($itemFields as $field) { $namekey = $field->field_namekey; if(isset($product->$namekey)) $orderProduct->$namekey = $product->$namekey; } } if(isset($product->prices[0]->unit_price->taxes)) $orderProduct->order_product_tax_info = $product->prices[0]->unit_price->taxes; if(isset($product->files)) $orderProduct->files =& $product->files; if(!empty($shipping)) { $shipping_done = false; foreach($shipping_groups as $group_key => $group_products) { foreach($group_products->products as $group_product) { if((int)$group_product->cart_product_id == (int)$product->cart_product_id) { $orderProduct->order_product_shipping_id = $shippings[$group_key]['id'] . '@' . $group_key; $orderProduct->order_product_shipping_method = $shippings[$group_key]['name']; $shipping_done = true; break; } } if($shipping_done) break; } } $products[] = $orderProduct; } } $cart->products = &$products; foreach($cart->products as $cartContent){ if((int)$cartContent->order_product_wishlist_id != 0){ $query = 'SELECT * FROM '.hikashop_table('cart_product').' WHERE cart_id ='.(int)$cartContent->order_product_wishlist_id.' AND product_id='.(int)$cartContent->product_id; $db->setQuery($query); $wishlistData = $db->loadObject(); $quantity = $wishlistData->cart_product_quantity - $cartContent->order_product_quantity; if($quantity < 0) $quantity = 0; $query = 'UPDATE '.hikashop_table('cart_product').' SET cart_product_quantity = '.(int)$quantity.' WHERE cart_id ='.(int)$cartContent->order_product_wishlist_id.' AND product_id='.(int)$cartContent->product_id; } } $shipping_address=$app->getUserState( HIKASHOP_COMPONENT.'.shipping_address'); $billing_address=$app->getUserState( HIKASHOP_COMPONENT.'.billing_address'); $main_currency = (int)$config->get('main_currency',1); $currency_id = (int)$app->getUserState( HIKASHOP_COMPONENT.'.currency_id', $main_currency); $order = new stdClass(); $order->order_user_id = @hikashop_loadUser(); $order->order_status = $config->get('order_created_status'); $order->order_shipping_address_id = $shipping_address; $order->order_billing_address_id = $billing_address; $order->order_discount_code = @$cart->coupon->discount_code; $order->order_currency_id = $cart->full_total->prices[0]->price_currency_id; $order->order_type = 'sale'; $order->order_full_price = $cart->full_total->prices[0]->price_value_with_tax; $order->order_tax_info = @$cart->full_total->prices[0]->taxes; $order->order_shipping_price = 0.0; $order->order_shipping_tax = 0.0; $order->order_shipping_params = null; if(!empty($cart->shipping)) { $order->order_shipping_params = new stdClass(); $order->order_shipping_params->prices = array(); foreach($cart->shipping as $cart_shipping) { $price_key = $cart_shipping->shipping_id; if(isset($cart_shipping->shipping_warehouse_id)) $price_key .= '@' . $cart_shipping->shipping_warehouse_id; $order->order_shipping_params->prices[$price_key] = new stdClass(); $order->order_shipping_params->prices[$price_key]->price_with_tax = $cart_shipping->shipping_price_with_tax; $order->order_shipping_price += $cart_shipping->shipping_price_with_tax; if(!empty($cart_shipping->shipping_price_with_tax) && !empty($cart_shipping->shipping_price)) { $order->order_shipping_tax += $cart_shipping->shipping_price_with_tax - $cart_shipping->shipping_price; $order->order_shipping_params->prices[$price_key]->tax = $cart_shipping->shipping_price_with_tax - $cart_shipping->shipping_price; if(!empty($cart_shipping->taxes)) { $order->order_shipping_params->prices[$price_key]->taxes = array(); foreach($cart_shipping->taxes as $tax) { $order->order_shipping_params->prices[$price_key]->taxes[$tax->tax_namekey] = $tax->tax_amount; if(isset($order->order_tax_info[$tax->tax_namekey])) { if(empty($order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping)) $order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping = 0; $order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping += $tax->tax_amount; } else { $order->order_tax_info[$tax->tax_namekey] = $tax; $order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping = $order->order_tax_info[$tax->tax_namekey]->tax_amount; $order->order_tax_info[$tax->tax_namekey]->tax_amount = 0; } } } } } } $order->order_payment_price = @$cart->payment->payment_price; $discount_price = 0; $discount_tax=0; if(!empty($cart->coupon)&& !empty($cart->coupon->total->prices[0]->price_value_without_discount_with_tax)){ $discount_price=@$cart->coupon->total->prices[0]->price_value_without_discount_with_tax-@$cart->coupon->total->prices[0]->price_value_with_tax; if(!empty($cart->coupon->total->prices[0]->price_value_with_tax)&&!empty($cart->coupon->total->prices[0]->price_value)){ $discount_tax = (@$cart->coupon->total->prices[0]->price_value_without_discount_with_tax-@$cart->coupon->total->prices[0]->price_value_without_discount)-(@$cart->coupon->total->prices[0]->price_value_with_tax-@$cart->coupon->total->prices[0]->price_value); if(isset($cart->coupon->taxes)){ foreach($cart->coupon->taxes as $tax){ if(isset($order->order_tax_info[$tax->tax_namekey])){ $order->order_tax_info[$tax->tax_namekey]->tax_amount_for_coupon = $tax->tax_amount; }else{ $order->order_tax_info[$tax->tax_namekey]=$tax; $order->order_tax_info[$tax->tax_namekey]->tax_amount_for_coupon = $order->order_tax_info[$tax->tax_namekey]->tax_amount; $order->order_tax_info[$tax->tax_namekey]->tax_amount = 0; } } } } } $order->order_discount_tax = $discount_tax; $order->order_discount_price = $discount_price; $order->order_shipping_id = $shipping_id; $order->order_shipping_method = $shipping; $order->order_payment_id = $payment_id; $order->order_payment_method = $payment; $order->cart =& $cart; $order->history = new stdClass(); $order->history->history_reason = JText::_('ORDER_CREATED'); $order->history->history_notified = 0; $order->history->history_type = 'creation'; $app = JFactory::getApplication(); if(hikashop_level(2)) { $orderData = $app->getUserState( HIKASHOP_COMPONENT.'.checkout_fields'); if(!empty($orderData)){ foreach(get_object_vars($orderData) as $key => $val){ $order->$key = $val; } } } if(!empty($shippings)) { if(count($shippings) == 1) { $s = reset($shippings); $order->order_shipping_id = $s['id']; $order->order_shipping_method = $s['name']; } else { $ids = array(); foreach($shippings as $key => $ship) $ids[] = $ship['id'] . '@' . $key; $order->order_shipping_id = implode(';', $ids); $order->order_shipping_method = ''; } } $orderClass = hikashop_get('class.order'); $order->order_id = $orderClass->save($order); $removeCart = false; if(empty($order->order_id)) return false; $app->setUserState( HIKASHOP_COMPONENT.'.checkout_fields_ok',0); $entriesData = $app->getUserState( HIKASHOP_COMPONENT.'.entries_fields'); if(!empty($entriesData)){ $entryClass = hikashop_get('class.entry'); foreach($entriesData as $entryData){ $entryData->order_id = $order->order_id; $entryClass->save($entryData); } $app->setUserState( HIKASHOP_COMPONENT.'.entries_fields',null); } if(!empty($payment)){ $query = 'SELECT * FROM '.hikashop_table('payment').' WHERE payment_type='.$db->Quote($payment); $db->setQuery($query); $paymentData = $db->loadObjectList('payment_id'); $pluginsClass->params($paymentData,'payment'); }else{ $paymentData = null; } if(!empty($shipping)) { $shippings_quoted = array(); foreach($shippings as $ship) { $shippings_quoted[] = $db->Quote($ship['name']); } $query = 'SELECT * FROM '.hikashop_table('shipping').' WHERE shipping_type IN (' . implode(',', $shippings_quoted) . ')'; $db->setQuery($query); $shippingData = $db->loadObjectList('shipping_id'); $pluginsClass->params($shippingData,'shipping'); } else { $shippingData = null; } ob_start(); if(!empty($shippingData)) { foreach($shippings as $ship) { $data = hikashop_import('hikashopshipping', $ship['name']); $data->onAfterOrderConfirm($order, $shippingData, $ship['id']); if(!empty($data->removeCart)) $removeCart = true; } } if(!empty($paymentData)){ $data = hikashop_import('hikashoppayment',$payment); $data->onAfterOrderConfirm($order, $paymentData, $payment_id); if(!empty($data->removeCart)){ $removeCart = true; } } JRequest::setVar('hikashop_plugins_html',ob_get_clean()); $app->setUserState( HIKASHOP_COMPONENT.'.order_id', $order->order_id); if($config->get('clean_cart','order_created') == 'order_created' || $removeCart) { $cart_id = $app->getUserState( HIKASHOP_COMPONENT.'.cart_id'); if($cart_id) { $class = hikashop_get('class.cart'); $class->delete($cart_id); $app->setUserState( HIKASHOP_COMPONENT.'.cart_id',0); } $app->setUserState( HIKASHOP_COMPONENT.'.coupon_code', ''); $app->setUserState( HIKASHOP_COMPONENT.'.cc_number', ''); $app->setUserState( HIKASHOP_COMPONENT.'.cc_month', ''); $app->setUserState( HIKASHOP_COMPONENT.'.cc_year', ''); $app->setUserState( HIKASHOP_COMPONENT.'.cc_CCV', ''); $app->setUserState( HIKASHOP_COMPONENT.'.cc_type', ''); $app->setUserState( HIKASHOP_COMPONENT.'.cc_owner', ''); $app->setUserState( HIKASHOP_COMPONENT.'.cc_valid', 0); $app->setUserState( HIKASHOP_COMPONENT.'.checkout_terms', 0); $app->setUserState( HIKASHOP_COMPONENT.'.checkout_fields_ok', 0); $app->setUserState( HIKASHOP_COMPONENT.'.checkout_fields', null); $user = JFactory::getUser(); if($user->guest) { $app->setUserState( HIKASHOP_COMPONENT.'.user_id', 0); } } return true; } function before_status(){ return true; } function after_status(){ return true; } function check_status(){ return true; } function before_end(){ $app = JFactory::getApplication(); $order = $app->getUserState( HIKASHOP_COMPONENT.'.order_id',0); if(empty($order)){ return $this->after_confirm(true); } return true; } function after_end(){ if(!isset($this->current)){ $class = hikashop_get('class.cart'); $class->cleanCartFromSession(); JRequest::setVar( 'layout', 'after_end' ); return $this->display(); } return true; } function _checkLogin(){ if(count($this->controllers)==1){ $user = JFactory::getUser(); $app = JFactory::getApplication(); $user_id=$app->getUserState( HIKASHOP_COMPONENT.'.user_id' ); if($user->guest && empty($user_id)){ $found = $this->_getStep('login'); if($found!==false){ JRequest::setVar('step',$found); JRequest::setVar('previous',0); unset($_REQUEST['previous']); $this->step(); return false; }else{ $userData = new stdClass(); $userData->user_created_ip = hikashop_getIP(); $class=hikashop_get('class.user'); $userData->user_id = $class->save($userData); $app->setUserState( HIKASHOP_COMPONENT.'.user_id',$userData->user_id ); } } } return true; } function _getStep($search,$onStep=null){ $found = false; foreach($this->steps as $k => $step){ if(isset($onStep) && $onStep!=$k) continue; if(strpos($step,$search)!==false){ $found = $k; break; } } return $found; } function display($cachable = false, $urlparams = array()){ static $done = false; $result = true; if(!$done){ $done = true; $result = parent::display(); } return $result; } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка