Файловый менеджер - Редактировать - /home/lmsyaran/public_html/components/com_hikashop/controllers/checkout_legacy.php
Назад
<?php /** * @package HikaShop for Joomla! * @version 4.4.1 * @author hikashop.com * @copyright (C) 2010-2021 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 checkoutLegacyController extends hikashopController { var $cart_update = false; var $modify_views = array(); var $add = array(); var $modify = array(); var $delete = array(); var $controllers = array(); var $checkout_workflow = null; var $steps = null; var $redirect_url = null; 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','termsandconditions','show','privacyconsent',''); 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'); $this->redirect_url = hikashop_translate($this->redirect_url); if(!empty($this->redirect_url)) { if(!preg_match('#^https?://#',$this->redirect_url)) $this->redirect_url = JURI::base().ltrim($this->redirect_url,'/'); $this->redirect_url = JRoute::_($this->redirect_url,false); } else { global $Itemid; $url = ''; $itemid_to_use = $Itemid; $menuClass = hikashop_get('class.menus'); if(!empty($itemid_to_use)) $ok = $menuClass->loadAMenuItemId('product', 'listing', $itemid_to_use); if(empty($ok)) $ok = $menuClass->loadAMenuItemId('product', 'listing'); if($ok) $itemid_to_use = $ok; if(!empty($itemid_to_use)) $url = '&Itemid=' . $itemid_to_use; $this->redirect_url = hikashop_completeLink('product&task=listing' . $url, false, true); } } function authorize($task) { return $this->isIn($task, array('display')); } public function privacyconsent() { hikaInput::get()->set('layout', 'privacyconsent'); return $this->display(); } function printcart() { hikaInput::get()->set('layout', 'printcart'); return parent::display(); } function activate_page() { hikaInput::get()->set('layout', 'activate_page'); return parent::display(); } function state() { hikaInput::get()->set('layout', 'state'); return parent::display(); } function notice() { $cart_type = hikaInput::get()->post->getVar('cart_type',''); if(!empty($cart_type)){ $app = JFactory::getApplication(); $app->setUserState( HIKASHOP_COMPONENT.'.popup_cart_type',$cart_type); } hikaInput::get()->set( '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') { $app->enqueueMessage(JText::_('Access Forbidden'), 'error'); return; } $lang = JFactory::getLanguage(); $lang->load('com_user',JPATH_SITE); jimport('joomla.user.helper'); $activation = hikashop_getEscaped(hikaInput::get()->getVar('activation', '', '', 'alnum')); if (empty($activation)) { $app->enqueueMessage(JText::_('HIKA_REG_ACTIVATE_NOT_FOUND')); return; } 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; } $app->enqueueMessage(JText::_( 'HIKA_REG_ACTIVATE_COMPLETE' )); $id = hikaInput::get()->getInt('id',0); $userClass = hikashop_get('class.user'); $user = $userClass->get($id); if($id && file_exists(JPATH_ROOT.DS.'components'.DS.'com_comprofiler'.DS.'comprofiler.php') && $userActivation < 2) { $userClass->addAndConfirmUserInCB($user); } $infos = hikaInput::get()->getVar('infos',''); global $Itemid; $url = (!empty($Itemid) ? '&Itemid='.$Itemid : ''); if(!empty($infos) && function_exists('json_decode')) { $infos = json_decode(base64_decode($infos), true); if(empty($infos['pass']) && !empty($infos['passwd'])) $infos['pass'] = $infos['passwd']; JPluginHelper::importPlugin('user'); if($userActivation < 2 && !empty($infos['pass']) && !empty($infos['username']) && $this->_doLogin($infos['username'], $infos['pass'], false)) { $page = hikaInput::get()->getString('page','checkout'); if($page == 'checkout'){ $this->before_address(); $app->redirect( hikashop_completeLink('checkout'.$url,false,true) ); return; } hikaInput::get()->set('layout', 'activate'); return parent::display(); } elseif($userActivation >= 2) { $app->enqueueMessage(JText::_( 'HIKA_ADMIN_CONFIRM_ACTIVATION' )); } } $url = 'index.php?option=com_users&view=login'.$url; $app->redirect( JRoute::_($url, false) ); } function deleteaddress() { $addressdelete = hikaInput::get()->getInt('address_id', 0); if(empty($addressdelete)) { $this->step(); return; } JSession::checkToken('request') || die('Invalid Token'); $addressClass = hikashop_get('class.address'); $oldData = $addressClass->get($addressdelete); if(empty($oldData)) { $this->step(); return; } $user_id = hikashop_loadUser(); if($user_id != $oldData->address_user_id) { $this->step(); return; } $addressClass->delete($addressdelete); $app = JFactory::getApplication(); $oldShip = $app->getUserState(HIKASHOP_COMPONENT.'.shipping_address'); if($oldShip == $addressdelete) { $app->setUserState( HIKASHOP_COMPONENT.'.shipping_address', 0); } $oldBill = $app->getUserState(HIKASHOP_COMPONENT.'.billing_address'); if($oldBill == $addressdelete) { $app->setUserState( HIKASHOP_COMPONENT.'.billing_address', 0); } $this->step(); return; } function convert() { $cartClass = hikashop_get('class.cart'); $cart = $cartClass->get(); $result = $cartClass->convert($cart->cart_id); if($result) { $app = JFactory::getApplication(); $app->setUserState(HIKASHOP_COMPONENT.'.cart_id', 0); $app->setUserState(HIKASHOP_COMPONENT.'.wishlist_id', $cart->cart_id); } global $Itemid; $url = (!empty($Itemid) ? '&Itemid=' . $Itemid : ''); $url = hikashop_completeLink('wishlist&refresh=true', false, true); $this->setRedirect($url); } function step() { hikashop_nocache(); 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])) { hikaInput::get()->set('step', hikaInput::get()->getInt('previous', 0)); hikaInput::get()->set('layout', 'step'); return $this->display(); } $ck_submital[$unique_id] = true; $_SESSION['ck_submital'] = $ck_submital; $done = true; } $cartClass = hikashop_get('class.cart'); $cart = $cartClass->get(0); if(empty($cart->cart_id)) { $this->setRedirect($this->redirect_url, JText::_('CART_EMPTY')); return true; } $config =& hikashop_config(); $app = JFactory::getApplication(); global $Itemid; $redirect = false; $ssl = false; $new_item_id = (int)$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'] = ''; } } 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 = (!empty($new_item_id) ? '&Itemid='.$new_item_id : ''); if($config->get('force_ssl', 0) != 'url') { $this->setRedirect( JRoute::_('index.php?option='.HIKASHOP_COMPONENT.'&ctrl=checkout'.$url, false, $ssl)); return true; } $url = $config->get('force_ssl_url'); $url = str_replace('http://', 'https://', $url); if(strpos($url, 'https://') === false) $url = 'https://' . $url; $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); return true; } $go_back = false; $this->previous = hikaInput::get()->getInt('previous', 0); $this->current = hikaInput::get()->getInt('step', 0); JPluginHelper::importPlugin('hikashop'); JPluginHelper::importPlugin('hikashoppayment'); JPluginHelper::importPlugin('hikashopshipping'); $app = JFactory::getApplication(); 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 { $obj =& $this; $app->triggerEvent('onAfterCheckoutStep', array($controller, &$go_back, $original_go_back, &$obj)); } } } elseif($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) { $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 { $obj =& $this; $app->triggerEvent('onBeforeCheckoutStep', array($controller, &$go_back, $original_go_back, &$obj)); } } } if($go_back && isset($this->previous)) { hikaInput::get()->set('step', $this->previous); } hikaInput::get()->set('layout', 'step'); return $this->display(); } function before_coupon() { return true; } function after_coupon($success) { $coupon = hikaInput::get()->getString('coupon',''); $qty = 1; if(empty($coupon)){ $coupon = hikaInput::get()->getInt('removecoupon', 0); $qty = 0; } if(empty($coupon)) return true; $cartClass = hikashop_get('class.cart'); if(!$cartClass->update($coupon, $qty, 0, 'coupon')) return true; 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; } function check_coupon() { return true; } function before_terms() { return true; } function termsandconditions() { hikaInput::get()->set('layout', 'termsandconditions'); return $this->display(); } function after_terms($success) { $app = JFactory::getApplication(); $app->setUserState(HIKASHOP_COMPONENT.'.checkout_terms', hikaInput::get()->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)) return true; $app = JFactory::getApplication(); $fieldClass = hikashop_get('class.field'); $old = $app->getUserState(HIKASHOP_COMPONENT.'.checkout_fields_ok', 0); $oldData = $app->getUserState(HIKASHOP_COMPONENT.'.checkout_fields'); if(is_null($oldData)) $oldData = new stdClass(); $cart = $this->initCart(); $oldData->products = $cart->products; $orderData = $fieldClass->getFilteredInput('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)) return true; $app = JFactory::getApplication(); $status = (bool)$app->getUserState( HIKASHOP_COMPONENT.'.checkout_fields_ok',0 ); if(!$status){ $app->enqueueMessage(JText::_('PLEASE_FILL_ADDITIONAL_INFO')); } return $status; } function before_cart() { return true; } function after_cart($success) { $modified = false; $cartClass = hikashop_get('class.cart'); $formData = hikaInput::get()->get('item', array(), 'array'); if(!empty($formData)) { $modified = $cartClass->update($formData, 0, 0, 'item'); } else { $formData = hikaInput::get()->get('data', array(), 'array'); if(!empty($formData)) { $modified = $cartClass->update($formData, 0, 0); } } if($modified === 0) return true; if(!$modified) return false; $cartClass->get(0); 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; } function check_cart() { $cart = $this->initCart(); if(empty($cart->products) || !is_array($cart->products) || !count($cart->products)){ $app = JFactory::getApplication(); $app->redirect( $this->redirect_url, JText::_('CART_EMPTY')); } return true; } function before_login() { if(count($this->controllers) != 1) return true; $user = JFactory::getUser(); $app = JFactory::getApplication(); $user_id = $app->getUserState(HIKASHOP_COMPONENT.'.user_id', 0); if($user->guest && empty($user_id)) return true; $controllersCheck = trim($this->steps[$this->previous]); $controllersCheck = explode('_', $controllersCheck); $current = $this->current + 1; if(count($controllersCheck) == 1 && $controllersCheck[0] == 'login') $current = $this->previous + 1; hikaInput::get()->set('step', $current); hikaInput::get()->set('previous', 0); $this->step(); return true; } function after_login($success) { $app = JFactory::getApplication(); $user = JFactory::getUser(); $status = true; $user_id = $app->getUserState(HIKASHOP_COMPONENT.'.user_id'); global $messDisplay; $messDisplay = (is_null($messDisplay) ? 0 : 1); if($this->cart_update || !$user->guest || !empty($user_id)) return true; JPluginHelper::importPlugin('user'); $register = hikaInput::get()->getString('register', ''); $action = hikaInput::get()->getString('login_view_action', ''); $login = hikaInput::get()->getString('login', ''); $username = hikaInput::get()->request->getUsername('username', ''); if($action == 'register' || ($action != 'login' && !empty($register))) { $status = $this->_doRegister(); } elseif(($action == 'login' || !empty($login)) && !empty($username)) { $status = $this->_doLogin(); } else { $name = @$_REQUEST['data']['register']['email']; if(!empty($name)) { $status = $this->_doRegister(); } elseif(!empty($username)) { $status = $this->_doLogin(); } elseif(empty($name) && empty($username) && $messDisplay == 0) { $app->enqueueMessage(JText::_('PLEASE_FILL_FORM_BEFORE_PROCEEDING'), 'error'); } } if(!$status) return $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; } if(!$status || $this->_getStep('shipping', $this->previous) !== false) { $this->before_shipping(); } $this->before_login(); return $status; } function _doRegister() { $userClass = hikashop_get('class.user'); $status = $userClass->registerLegacy($this); $app = JFactory::getApplication(); if(!$status) return $status; $this->cart_update = true; $app->setUserState(HIKASHOP_COMPONENT.'.user_id', (int)$userClass->user_id); $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( 'remember' => hikaInput::get()->getBool('remember', false), 'return' => false, ); $credentials = array(); if(empty($user)) { $credentials['username'] = hikaInput::get()->request->getUsername('username', ''); } else { $credentials['username'] = $user; } if(empty($pass)) { $credentials['password'] = hikaInput::get()->request->getRaw('passwd', ''); } else { $credentials['password'] = $pass; } $app = JFactory::getApplication(); $result = $app->login($credentials, $options); $user = JFactory::getUser(); if($result!==true || $user->guest) { return false; } $userClass = hikashop_get('class.user'); $user_id = $userClass->getID($user->get('id')); if(!empty($user_id)) { $app->setUserState(HIKASHOP_COMPONENT.'.user_id', $user_id); $hk_user = hikashop_loadUser(true, true); } $cartClass = hikashop_get('class.cart'); $cartClass->get('reset_cache'); $this->initCart(true); $this->cart_update = true; return true; } function check_login() { $logged = (bool)hikashop_loadUser(); if(!$logged) { $app = JFactory::getApplication(); $app->enqueueMessage( JText::_('LOGIN_OR_REGISTER_ACCOUNT') ); } return $logged; } public function getShippingAddress() { $app = JFactory::getApplication(); $ret = (int)$app->getUserState(HIKASHOP_COMPONENT.'.shipping_address', 0); if(empty($this->cartClass)) $this->cartClass = hikashop_get('class.cart'); $cart = $this->cartClass->get(0); if(empty($cart)) return 0; if((int)$cart->cart_shipping_address_ids != $ret) { $this->cartClass->updateAddress(0, 'shipping', $ret); } return $ret; } public function getBillingAddress() { $app = JFactory::getApplication(); $ret = (int)$app->getUserState(HIKASHOP_COMPONENT.'.billing_address', 0); if(empty($this->cartClass)) $this->cartClass = hikashop_get('class.cart'); $cart = $this->cartClass->get(0); if(empty($cart)) return $ret; if((int)$cart->cart_billing_address_id != $ret) { $this->cartClass->updateAddress(0, 'billing', $ret); } return $ret; } public function setShippingAddress($address_id) { if(empty($this->cartClass)) $this->cartClass = hikashop_get('class.cart'); $this->cartClass->updateAddress(0, 'shipping', $address_id); $app = JFactory::getApplication(); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_address', $address_id); } public function setBillingAddress($address_id) { if(empty($this->cartClass)) $this->cartClass = hikashop_get('class.cart'); $this->cartClass->updateAddress(0, 'billing', $address_id); $app = JFactory::getApplication(); $app->setUserState(HIKASHOP_COMPONENT.'.billing_address', $address_id); } function before_address() { $status = $this->_checkLogin(); if(!$status) return $status; $user_id = hikashop_loadUser(); if(empty($user_id)) return $status; $app = JFactory::getApplication(); $shipping = $this->getShippingAddress(); // $app->getUserState(HIKASHOP_COMPONENT.'.shipping_address', 0); $billing = $this->getBillingAddress(); // $app->getUserState(HIKASHOP_COMPONENT.'.billing_address', 0); if(!empty($billing)) { $db = JFactory::getDBO(); $db->setQuery('SELECT address_id FROM '.hikashop_table('address').' WHERE address_published=1 AND address_id='.$billing); $result = $db->loadResult(); if($billing == $shipping) { $billing = $shipping = $result; $shipping_done = true; } else { $billing = $result; } } if(!empty($shipping) && empty($shipping_done)) { $db = JFactory::getDBO(); $db->setQuery('SELECT address_id FROM '.hikashop_table('address').' WHERE address_published=1 AND address_id='.$shipping); $shipping = $db->loadResult(); } 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(); $this->setBillingAddress($address_id); $this->setShippingAddress($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; } $addressClass = hikashop_get('class.address'); $result = $addressClass->frontSaveForm(); if($result === false) { return false; } $billing = hikaInput::get()->getInt('hikashop_address_billing', 0); $shipping = hikaInput::get()->getInt('hikashop_address_shipping', 0); if(!empty($result) && count($result)) { if(isset($result['billing_address'])) { $billing = $result['billing_address']->id; } if(isset($result['shipping_address'])) { $shipping = $result['shipping_address']->id; } } if(empty($billing)) { if(!$this->cart_update && !hikaInput::get()->getInt('removecoupon', 0)) { hikaInput::get()->set(HIKASHOP_COMPONENT.'.address_error', 1); $app = JFactory::getApplication(); $app->enqueueMessage( JText::_('CREATE_OR_SELECT_ADDRESS') ); } return false; } if(hikaInput::get()->getString('same_address','') == 'yes' || empty($shipping)) { $shipping = $billing; } $old_billing_address = $this->getBillingAddress(); $old_shipping_address = $this->getShippingAddress(); if($billing != $old_billing_address) { $this->setBillingAddress($billing); } if($shipping != $old_shipping_address) { $this->setShippingAddress($shipping); } if($shipping != $old_shipping_address) { $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 != $old_billing_address) { return false; } return true; } function check_address() { $shipping_address = $this->getShippingAddress(); if(!empty($shipping_address)) return true; hikaInput::get()->set(HIKASHOP_COMPONENT.'.address_error', 1); $app = JFactory::getApplication(); $app->enqueueMessage( JText::_('CREATE_OR_SELECT_ADDRESS') ); return false; } function before_shipping($directCall = false) { $app = JFactory::getApplication(); $ok = true; if(!$directCall) { $ok = $this->_checkLogin(); if(!$ok) return $ok; } else { $this->initCart(true); } $shipping_address = $this->getShippingAddress(); if(empty($shipping_address) && !$directCall) { $found = $this->_getStep('address'); if($found !== false && $found != $this->current) { static $done = false; hikaInput::get()->set('step', $found); hikaInput::get()->set('previous', 0); if(!$done) { $done = true; $this->step(); } return false; } } $config = hikashop_config(); $cartClass = hikashop_get('class.cart'); $cart = $cartClass->getFullCart(0); $hasShipping = !empty($cart->usable_methods->shipping) || !empty($cart->package['weight']['value']) || $config->get('force_shipping', 0); if(!$hasShipping) { $app->setUserState(HIKASHOP_COMPONENT.'.shipping_method', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_id', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', null); return true; } $shipping_methods = array(); foreach($cart->cart_shipping_ids as $shipping_id) { if(strpos($shipping_id, '@') === false) { $extra = ''; $i = (int)$shipping_id; } else { list($i, $extra) = explode('@', $shipping_id); $i = (int)$i; $extra = '@'.$extra; } foreach($cart->shipping as $shipping) { if((int)$shipping->shipping_id != $i) continue; $shipping_methods[] = $shipping->shipping_type . $extra; break; } } $app->setUserState(HIKASHOP_COMPONENT.'.shipping_method', $shipping_methods); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_id', $cart->cart_shipping_ids); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', $cart->shipping); return true; } function after_shipping($success) { if($this->cart_update) return true; $cart = $this->initCart(); if(!$cart->has_shipping) return true; $shipping = hikaInput::get()->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_cart = 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 = hikaInput::get()->getString($input_name, null); if(empty($shipping)) return false; $key_lng = strlen($group_key) + 1; if($several_shipping && substr($shipping, -$key_lng) == '_' . $group_key) { $shipping = substr($shipping, 0, strlen($shipping) - $key_lng); } if($shipping == '-' && empty($shipping_group->shippings)) continue; $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); $cartClass = hikashop_get('class.cart'); $cartClass->updateShipping(0, array()); return false; } $shippings[] = $shipping . '@' . $group_key; $shipping_ids[] = $shipping_id . '@' . $group_key; $shipping_datas[] = $shipping_data; $shipping_ids_cart[$group_key] = $shipping_id; } 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); $cartClass = hikashop_get('class.cart'); $cartClass->updateShipping(0, $shipping_ids_cart); 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'); $shipping_done = !empty($shipping_done); if($shipping_done) return $shipping_done; $cart = $this->initCart(); if(!$cart->has_shipping) { return true; } $app->enqueueMessage( JText::_('SELECT_SHIPPING') ); return $shipping_done; } function initCart($reset = false) { static $cart = false; if($reset) { $cart = false; return true; } if(!empty($cart)) return $cart; $cartClass = hikashop_get('class.cart'); $config = hikashop_config(); $cart = $cartClass->getFullCart(0); if(empty($cart->products)) { $app = JFactory::getApplication(); $app->redirect( $this->redirect_url, JText::_('CART_EMPTY')); } $cart->has_shipping = (!empty($cart->usable_methods->shipping) || !empty($cart->package['weight']['value']) || $config->get('force_shipping', 0)); return $cart; } function before_payment($directCall = false) { $ok = true; if(!$directCall) { $ok = $this->_checkLogin(); if(!$ok) return $ok; } $app = JFactory::getApplication(); $cart = $this->initCart(); if(empty($cart->payment) && !empty($cart->usable_methods->payment_valid)) return true; $payment_method = !empty($cart->payment->payment_type) ? $cart->payment->payment_type : ''; $payment_id = $cart->cart_payment_id; if(!empty($payment_method) && !$this->cart_update) return $ok; $payment = hikaInput::get()->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; } } } $methods = $cart->usable_methods->payment; 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; break; } } $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 = hikaInput::get()->getString('hikashop_payment',''); if(empty($payment)) return false; $payment = explode('_', $payment); if(empty($payment) || count($payment) == 0) return false; $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; $old_payment_id = $cart->cart_payment_id; $app = JFactory::getApplication(); $cartClass = hikashop_get('class.cart'); $ret = $cartClass->updatePayment($cart->cart_id, $payment_id); if($ret === false) return false; $this->initCart(true); $currencyClass = hikashop_get('class.currency'); $currencyClass->convertPayments($rates); $app->setUserState(HIKASHOP_COMPONENT.'.payment_method', $payment); $app->setUserState(HIKASHOP_COMPONENT.'.payment_id', $payment_id); $app->setUserState(HIKASHOP_COMPONENT.'.payment_data', $paymentData); if(!empty($paymentData->ask_cc)) { $paymentClass = hikashop_get('class.payment'); if(!$paymentClass->readCC()) { $app->enqueueMessage( JText::_('FILL_CREDIT_CARD_INFO') ); return false; } } if($old_payment_id != $payment_id && ($this->_getStep('cart', (int)$this->previous) === (int)$this->previous || $this->_getStep('confirm', (int)$this->previous) === (int)$this->previous)) return false; return true; } 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_method = !empty($cart->payment->payment_type) ? $cart->payment->payment_type : ''; $payment_session = $app->getUserState(HIKASHOP_COMPONENT.'.payment_method'); if(empty($payment_session) || $payment_session != $payment_method) $app->setUserState(HIKASHOP_COMPONENT.'.payment_method', $payment_method); $payment_done = !empty($cart->payment); if(!$payment_done) { $app->enqueueMessage( JText::_('SELECT_PAYMENT') ); return $payment_done; } $paymentData = $cart->payment; 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->enqueueMessage( JText::_('FILL_CREDIT_CARD_INFO') ); $payment_done = false; } } return $payment_done; } function _checkToken() { static $done = false; if($done) return; $done = true; JSession::checkToken('request') || die('Invalid Token'); } function notify() { hikashop_nocache(); ob_start(); $plugin = hikaInput::get()->getCmd('notif_payment'); $type = 'payment'; if(empty($plugin)) { $plugin = hikaInput::get()->getCmd('notif_shipping'); $type = 'shipping'; } if(empty($plugin)) { $plugin = hikaInput::get()->getCmd('notif_hikashop'); $type = ''; } $pluginInstance = hikashop_import('hikashop' . $type, $plugin); if(empty($pluginInstance)) return false; $function = 'on'.ucfirst($type).'Notification'; if(!method_exists($pluginInstance, $function)) return false; $translationHelper = hikashop_get('helper.translation'); $cleaned_statuses = $translationHelper->getStatusTrans(); $data = $pluginInstance->$function($cleaned_statuses); $dbg = ob_get_clean(); if(!empty($dbg)) { hikashop_logData($dbg, ucfirst($type). 'Notification: ' . $plugin); } if(is_string($data) && !empty($data)) { echo $data; } } function threedsecure() { hikashop_nocache(); ob_start(); $payment = hikaInput::get()->getCmd('3dsecure_payment'); $pluginInstance = hikashop_import('hikashoppayment', $payment); if(empty($pluginInstance)) return false; if(!method_exists($pluginInstance, 'onThreeDSecure')) return false; $trans = hikashop_get('helper.translation'); $cleaned_statuses = $trans->getStatusTrans(); $data = $pluginInstance->onThreeDSecure($cleaned_statuses); $dbg = ob_get_clean(); if(!empty($dbg)) { hikashop_logData($dbg, '3DSecure: ' . $payment); } 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)) continue; if(!$this->$fct()) { $ok = false; } } if($ok) return true; $this->setRedirect( hikashop_completeLink('checkout&task=step&step='.$i, false, true) ); $this->redirect(); } function after_confirm($success) { if(!$success){ return false; } if(!hikaInput::get()->getVar('validate', 0)) { 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] = (int)$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) continue; 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'); } $cart->full_products =& $cart->products; unset($cart->products); $cart->products = array(); foreach($cart->full_products as &$product) { if((int)$product->cart_product_quantity <= 0) continue; $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 = clone($product->discount); $orderProduct->discount->price_value_without_discount = $product->prices[0]->unit_price->price_value_without_discount; $orderProduct->discount->price_value_without_discount_with_tax = @$product->prices[0]->unit_price->price_value_without_discount_with_tax; $orderProduct->discount->taxes_without_discount = @$product->prices[0]->unit_price->taxes_without_discount; } if(!empty($cart->item_fields)) { foreach($cart->item_fields as $field) { $namekey = $field->field_namekey; if(isset($product->$namekey)) $orderProduct->$namekey = $product->$namekey; } }elseif(!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) { if(!isset($shippings[$group_key])) continue; 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; } } $cart->products[] = $orderProduct; } unset($product); $shipping_address = (int)$cart->cart_shipping_address_ids; $billing_address = $cart->cart_billing_address_id; $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_currency_info = new stdClass(); $currencyClass = hikashop_get('class.currency'); $currencies = null; $currencies = $currencyClass->getCurrencies($order->order_currency_id, $currencies); $currency = $currencies[$order->order_currency_id]; $order->order_currency_info->currency_code = $currency->currency_code; $order->order_currency_info->currency_rate = $currency->currency_rate; $order->order_currency_info->currency_percent_fee = $currency->currency_percent_fee; $order->order_currency_info->currency_modified = $currency->currency_modified; $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)) { if(is_string($cart_shipping->shipping_warehouse_id) || is_int($cart_shipping->shipping_warehouse_id)) { $price_key .= '@' . $cart_shipping->shipping_warehouse_id; } else { $price_key .= '@'; foreach($cart_shipping->shipping_warehouse_id as $k => $v) { $price_key .= $k . $v; } } } $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; } elseif(!empty($order->order_tax_info[$tax->tax_namekey]->tax_amount) && $order->order_tax_info[$tax->tax_namekey]->tax_amount>0) { $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_with_tax; if(!empty($cart->payment) && !empty($cart->payment->payment_price_with_tax) && !empty($cart->payment->payment_price)) { $order->order_payment_tax = $cart->payment->payment_price_with_tax - $cart->payment->payment_price; if(!empty($cart->payment->taxes)) { foreach($cart->payment->taxes as $tax) { if(isset($order->order_tax_info[$tax->tax_namekey])) { $order->order_tax_info[$tax->tax_namekey]->tax_amount_for_payment = $tax->tax_amount; } elseif(!empty($order->order_tax_info[$tax->tax_namekey]->tax_amount) && $order->order_tax_info[$tax->tax_namekey]->tax_amount>0) { $order->order_tax_info[$tax->tax_namekey] = $tax; $order->order_tax_info[$tax->tax_namekey]->tax_amount_for_payment = $order->order_tax_info[$tax->tax_namekey]->tax_amount; $order->order_tax_info[$tax->tax_namekey]->tax_amount = 0; } } } } $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 = ''; } } $paymentClass = hikashop_get('class.payment'); $paymentClass->checkPaymentOptions($order); $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; } } hikaInput::get()->set('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) { $cartClass = hikashop_get('class.cart'); $cartClass->cleanCartFromSession(false); $user = JFactory::getUser(); if($user->guest) $this->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)) return true; $cartClass = hikashop_get('class.cart'); $cartClass->cleanCartFromSession(); hikaInput::get()->set('layout', 'after_end'); return $this->display(); } function _checkLogin() { if(count($this->controllers) != 1) return true; $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) { hikaInput::get()->set('step',$found); hikaInput::get()->set('previous',0); unset($_REQUEST['previous']); $this->step(); return false; } else { $userData = new stdClass(); $userData->user_created_ip = hikashop_getIP(); $userClass = hikashop_get('class.user'); $userData->user_id = $userClass->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
|
Настройка