Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/administrator/components/com_hikashop/helpers/checkout/ |
| [Home] [System Details] [Kill Me] |
<?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
include_once HIKASHOP_HELPER . 'checkout.php';
class hikashopCheckoutAddressHelper extends hikashopCheckoutHelperInterface
{
protected $params = array(
'read_only' => array(
'name' => 'READ_ONLY',
'type' => 'boolean',
'default' => 0
),
'address_selector' => array(
'name' => 'HIKASHOP_CHECKOUT_ADDRESS_SELECTOR',
'type' => 'radio',
'tooltip' => 'checkout_address_selector',
'default' => 1,
'showon' => array(
'key' => 'read_only',
'values' => array(0)
)
),
'type' => array(
'name' => 'HIKASHOP_ADDRESS_TYPE',
'type' => 'radio',
'default' => 'both',
),
'same_address' => array(
'name' => 'SHOW_SHIPPING_SAME_ADDRESS_CHECKBOX',
'type' => 'boolean',
'default' => 1,
'showon' => array(
'key' => 'read_only',
'values' => array(0)
)
),
'same_address_pre_checked' => array(
'name' => 'SAME_ADDRESS_CHECKBOX_PRE_CHECKED',
'type' => 'boolean',
'default' => 1,
'showon' => array(
'key' => 'same_address',
'values' => array(1)
)
),
'multi_address' => array(
'name' => 'ALLOW_MULTIPLE_ADDRESSES',
'type' => 'radio',
'default' => 2,
'showon' => array(
'key' => 'read_only',
'values' => array(0)
)
),
);
public function getParams() {
$config = hikashop_config();
$values = array(
JHTML::_('select.option', 1,
JText::_('HIKASHOP_CHECKOUT_ADDRESS_SELECTOR_LIST')),
JHTML::_('select.option', 2,
JText::_('HIKASHOP_CHECKOUT_ADDRESS_SELECTOR_DROPDOWN'))
);
$selector = $config->get('checkout_address_selector',0);
if($config->get('checkout_legacy', 0))
$values[] = JHTML::_('select.option', 0,
JText::_('HIKASHOP_CHECKOUT_ADDRESS_SELECTOR_POPUP'));
$this->params['address_selector']['values'] =
$values;
$this->params['type']['values'] = array(
JHTML::_('select.option', 'billing',
JText::_('HIKASHOP_BILLING_ADDRESS')),
JHTML::_('select.option', 'shipping',
JText::_('HIKASHOP_SHIPPING_ADDRESS')),
JHTML::_('select.option', 'both',
JText::_('WIZARD_BOTH'))
);
$this->params['multi_address']['values'] = array(
JHTML::_('select.option', 0,
JText::_('HIKASHOP_NO')),
JHTML::_('select.option', 2,
JText::_('FOR_LOGGED_IN_USERS_ONLY')),
JHTML::_('select.option', 1,
JText::_('HIKA_ALWAYS')),
);
return parent::getParams();
}
public function check(&$controller, &$params) {
if(!empty($params['read_only']))
return true;
$checkoutHelper = hikashopCheckoutHelper::get();
$cart = $checkoutHelper->getCart();
$type = !empty($params['type']) ? $params['type'] :
'both';
$billing_address_missing = false;
$shipping_address_missing = false;
if(empty($cart->cart_billing_address_id) && in_array($type,
array('billing', 'both'))) {
$billing_address_missing = true;
}
if(empty($cart->cart_shipping_address_ids) && in_array($type,
array('shipping', 'both')) &&
$checkoutHelper->isShipping()) {
$shippingAddress_override =
$checkoutHelper->getShippingAddressOverride();
if(empty($shippingAddress_override))
$shipping_address_missing = true;
}
if($billing_address_missing || $shipping_address_missing) {
$addresses = $checkoutHelper->getAddresses();
$billing_addresses = false;
$shipping_addresses = false;
foreach($addresses['data'] as $address) {
if(empty($address->address_type) || $address->address_type ==
'both') {
$billing_addresses = true;
$shipping_addresses = true;
break;
}
if($address->address_type == 'billing')
$billing_addresses = true;
elseif($address->address_type == 'shipping')
$shipping_addresses = true;
}
};
$app = JFactory::getApplication();
if($billing_address_missing) {
if($billing_addresses)
$app->enqueueMessage(JText::_('SELECT_BILLING_ADDRESS'),
'error');
else
$app->enqueueMessage(JText::_('ENTER_BILLING_ADDRESS'),
'notice');
}
if($shipping_address_missing) {
if($shipping_addresses)
$app->enqueueMessage(JText::_('SELECT_SHIPPING_ADDRESS'),
'error');
else
$app->enqueueMessage(JText::_('ENTER_SHIPPING_ADDRESS'),
'notice');
}
return !($billing_address_missing || $shipping_address_missing);
}
public function validate(&$controller, &$params, $data = array())
{
$data = hikaInput::get()->get('data', array(),
'array');
if(!empty($data) && !empty($data['address_' .
(int)$params['src']['step'] . '_' .
(int)$params['src']['pos']])) {
$address_data = $data['address_' .
(int)$params['src']['step'] . '_' .
(int)$params['src']['pos']];
$new_address_type = @$data['address_type_' .
(int)$params['src']['step'] . '_' .
(int)$params['src']['pos']];
$both_types = null;
if(!empty($new_address_type) &&
!empty($data['address_selecttype_' .
(int)$params['src']['step'] . '_' .
(int)$params['src']['pos']]))
$both_types = (int)@$data['address_bothtypes_' .
(int)$params['src']['step'] . '_' .
(int)$params['src']['pos']];
return $this->saveAddress($controller, $params, $address_data,
$new_address_type, $both_types);
}
$checkout = hikaInput::get()->get('checkout', array(),
'array');
if(!empty($checkout) && !empty($checkout['address']))
{
if(!empty($checkout['address']['billing']) ||
!empty($checkout['address']['shipping']))
return $this->setCartAddresses($checkout['address']);
if(!empty($checkout['address']['delete']))
return
$this->deleteAddresses($checkout['address']['delete']);
}
return true;
}
private function saveAddress(&$controller, &$params,
$address_data, $new_address_type = '', $both_types = null) {
$addressClass = hikashop_get('class.address');
$old_address = new stdClass();
if(!empty($address_data['address_id'])) {
$old_address =
$addressClass->get((int)$address_data['address_id']);
if(empty($old_address) || empty($old_address->address_published))
return false;
}
$fieldClass = hikashop_get('class.field');
$type = '';
if(!empty($old_address->address_type))
$type = $old_address->address_type;
elseif(empty($address_data['address_id']) &&
!empty($new_address_type))
$type = $new_address_type;
$field_type = $type;
if(!empty($field_type))
$field_type .= '_';
$field_type .= 'address';
$formdata = array($field_type => &$address_data);
$app = JFactory::getApplication();
$old_messages = $app->getMessageQueue();
$null = null;
$address = $fieldClass->getFilteredInput($field_type, $null,
'ret', $formdata, false, 'frontcomp');
$checkoutHelper = hikashopCheckoutHelper::get();
$ret = true;
if(empty($address)) {
$error_messages = $fieldClass->messages;
foreach($error_messages as $i => $err) {
$checkoutHelper->addMessage('address.error_'.$i,
array($err, 'error'));
}
$ret = false;
}
if($ret) {
if(isset($formdata[$field_type]) &&
!empty($formdata[$field_type]['address_id']))
$address->address_id =
(int)$formdata[$field_type]['address_id'];
$address->address_published = 1;
if(!empty($old_address) &&
!empty($old_address->address_default))
$address->address_default = 1;
$checkoutHelper = hikashopCheckoutHelper::get();
$cart = $checkoutHelper->getCart();
$address->address_user_id = $cart->user_id;
$billing_ret = $shipping_ret = 0;
if(!empty($new_address_type) && $both_types !== null) {
if($both_types) {
$shipping_address = hikashop_copy($address);
$billing_address = hikashop_copy($shipping_address);
$billing_address->address_type = 'billing';
$billing_ret = $addressClass->save($billing_address, 0,
'billing');
$shipping_address->address_type = 'shipping';
$shipping_ret = $addressClass->save($shipping_address, 0,
'shipping');
} else {
$address->address_type = $new_address_type;
}
}
if($both_types === null || !$both_types)
$ret = $addressClass->save($address);
}
if(!$ret) {
if(!empty($addressClass->message))
$checkoutHelper->addMessage('address.error',
array('msg' => $addressClass->message, 'type'
=> 'error'));
$new_messages = $app->getMessageQueue();
if(count($old_messages) < count($new_messages)) {
$new_messages = array_slice($new_messages, count($old_messages));
foreach($new_messages as $i => $msg) {
$checkoutHelper->addMessage('address.joomla_error_' . $i,
array(
'msg' => $msg['message'],
'type' => $msg['type']
));
}
}
$new_address_data =
$_SESSION['hikashop_'.$type.'_address_data'];
$_SESSION['hikashop_'.$type.'_address_data'] =
null;
unset($_SESSION['hikashop_'.$type.'_address_data']);
$step = $params['src']['workflow_step'];
$block_pos = $params['src']['pos'];
$content =&
$checkoutHelper->checkout_workflow['steps'][$step]['content'][$block_pos];
if(empty($content['params']))
$content['params'] = array();
$content['params']['edit_address'] =
empty($address_data['address_id']) ? true :
(int)$address_data['address_id'];
if(empty($content['params']['err']))
$content['params']['err'] = array();
$content['params']['err']['addr'] =
$new_address_data;
$content['params']['new_address_type'] =
$new_address_type;
return false;
}
$cartClass = hikashop_get('class.cart');
$cart = $checkoutHelper->getCart();
if(!empty($ret) && empty($old_address->address_id)) {
$addresses = $checkoutHelper->getAddresses();
if((!empty($new_address_type) && in_array($new_address_type,
array('billing', 'shipping'))) || (!empty($addresses)
&& count($addresses['data']) == 1)) {
if(!empty($addresses) && count($addresses['data']) ==
1)
$type = null;
else
$type = $new_address_type;
if(isset($billing_ret) && (int)$billing_ret > 0 &&
isset($shipping_ret) && (int)$shipping_ret > 0 &&
$both_types !== null && $both_types){
$cartClass->updateAddress($cart->cart_id, 'billing',
$billing_ret);
$cartClass->updateAddress($cart->cart_id, 'shipping',
$shipping_ret);
}else {
$cartClass->updateAddress($cart->cart_id, $type, $ret);
}
}
}
if(!empty($ret)) {
$cartClass->get('reset_cache',$cart->cart_id);
$checkoutHelper->getCart(true);
}
if(!empty($ret))
return true;
if(empty($content['params']['err']))
$content['params']['err'] = array();
$content['params']['err']['addr'] =
$formdata[$field_type];
$content['params']['new_address_type'] =
$new_address_type;
$error_message = 'error';
$checkoutHelper->addMessage('address.error', array(
$error_message,
'error'
));
return false;
}
private function setCartAddresses($data) {
$billing = (!empty($data['billing'])) ?
(int)$data['billing'] : 0;
$shipping = (!empty($data['shipping'])) ?
(int)$data['shipping'] : 0;
if(empty($billing) && empty($shipping))
return true;
$checkoutHelper = hikashopCheckoutHelper::get();
$cart = $checkoutHelper->getCart();
$cartClass = hikashop_get('class.cart');
$app = JFactory::getApplication();
$old_messages = $app->getMessageQueue();
$ret_billing = true;
if(!empty($billing)) {
$ret_billing = $cartClass->updateAddress($cart->cart_id,
'billing', $billing);
}
$ret_shipping = true;
if(!empty($shipping)) {
$ret_shipping = $cartClass->updateAddress($cart->cart_id,
'shipping', $shipping);
}
if($ret_shipping && $ret_billing) {
$cartClass->get('reset_cache',$cart->cart_id);
$checkoutHelper->getCart(true);
return true;
}
$new_messages = $app->getMessageQueue(true);
if(count($old_messages) < count($new_messages)) {
$new_messages = array_slice($new_messages, count($old_messages));
foreach($new_messages as $i => $msg) {
$checkoutHelper->addMessage('address.joomla_error_' . $i,
array(
'msg' => $msg['message'],
'type' => $msg['type']
));
}
}
return false;
}
private function deleteAddresses($address_id) {
if(empty($address_id))
return true;
$address_id = (int)$address_id;
$addressClass = hikashop_get('class.address');
$ret = $addressClass->delete($address_id);
if(!$ret)
return false;
$checkoutHelper = hikashopCheckoutHelper::get();
$cart = $checkoutHelper->getCart();
if((int)$cart->cart_billing_address_id != $address_id &&
(int)$cart->cart_shipping_address_ids != $address_id)
return true;
$addressClass->loadUserAddresses('reset_cache');
if((int)$cart->cart_billing_address_id == $address_id)
$cart->cart_billing_address_id = 0;
if((int)$cart->cart_shipping_address_ids == $address_id)
$cart->cart_shipping_address_ids = 0;
$cartClass = hikashop_get('class.cart');
$cartClass->save($cart);
return true;
}
public function display(&$view, &$params) {
$checkoutHelper = hikashopCheckoutHelper::get();
$params['js'] = '';
$params['show_billing'] = true;
$params['show_shipping'] = $checkoutHelper->isShipping();
if(!in_array(@$params['type'], array('billing',
'both', ''))) {
$params['show_billing'] = false;
}
if(!in_array(@$params['type'], array('shipping',
'both', ''))) {
$params['show_shipping'] = false;
}
if(!isset($params['same_address']))
$params['same_address'] = 1;
if(!isset($params['same_address_pre_checked']))
$params['same_address_pre_checked'] = 1;
if(!isset($params['multi_address']))
$params['multi_address'] = 2;
$user = JFactory::getUser();
if($params['multi_address'] == 2)
$params['multi_address'] = empty($user->guest);
$params['display'] = $checkoutHelper->isLoggedUser()
&& ($params['show_billing'] ||
$params['show_shipping']);
if(!isset($params['readonly']))
$params['readonly'] = false;
if(!isset($params['address_selector']))
$params['address_selector'] =
(int)$view->config->get('checkout_address_selector', 0);
if(empty($params['address_selector']))
$params['address_selector'] = 1;
$params['display_cancel'] = true;
if(empty($params['read_only']) &&
$params['display'] == true) {
$addresses = $checkoutHelper->getAddresses();
if(empty($addresses) || empty($addresses['data']))
$params['edit_address'] = true;
$checkout = hikaInput::get()->get('checkout', array(),
'array');
$address_id = 0;
if(!empty($checkout['address']['edit'])) {
$address_id = (int)$checkout['address']['edit'];
if(isset($addresses['data'][ $address_id ]))
$params['edit_address'] = $address_id;
} elseif(isset($checkout['address']['billing'])
&& $checkout['address']['billing'] == 0) {
$checkout['address']['new'] = 'billing';
} elseif(isset($checkout['address']['shipping'])
&& $checkout['address']['shipping'] == 0) {
$checkout['address']['new'] =
'shipping';
}else{
$billing_addresses = false;
$shipping_addresses = false;
foreach($addresses['data'] as $address) {
if(empty($address->address_type) || $address->address_type ==
'both') {
$billing_addresses = true;
$shipping_addresses = true;
break;
}
if($address->address_type == 'billing')
$billing_addresses = true;
elseif($address->address_type == 'shipping')
$shipping_addresses = true;
}
if($params['show_billing'] &&
$params['show_shipping'] && !$billing_addresses
&& !$shipping_addresses ) {
$checkout['address']['new'] =
'billing';
$params['display_cancel'] = false;
} elseif($params['show_billing'] &&
!$billing_addresses) {
$checkout['address']['new'] =
'billing';
$params['display_cancel'] = false;
} elseif($params['show_shipping'] &&
!$shipping_addresses) {
$checkout['address']['new'] =
'shipping';
$params['display_cancel'] = false;
}
}
if(!empty($checkout['address']['new'])) {
$params['edit_address'] = true;
$params['new_address_type'] =
$checkout['address']['new'];
}
if(isset($params['new_address_type']) &&
!in_array($params['new_address_type'], array('billing',
'shipping')))
unset($params['new_address_type']);
if(!empty($params['edit_address'])) {
if(empty($view->fieldClass))
$view->fieldClass = hikashop_get('class.field');
$view->edit_address = new stdClass();
if(!empty($params['err']['addr'])) {
$view->edit_address = $params['err']['addr'];
unset($params['err']['addr']);
} elseif((int)$params['edit_address'] > 0 &&
isset($addresses['data'][ (int)$params['edit_address']
])) {
$addressClass = hikashop_get('class.address');
$view->edit_address =
$addressClass->get($params['edit_address']);
}
$fields_type = 'fields';
if(!empty($view->edit_address->address_type) &&
in_array($view->edit_address->address_type,
array('billing', 'shipping')))
$fields_type = $view->edit_address->address_type .
'_fields';
$view->fieldClass->prepareFields($addresses[$fields_type],
$view->edit_address, 'address',
'checkout&task=state');
$params['js'] .=
$view->fieldClass->jsToggle($addresses[$fields_type],
$view->edit_address, 0, 'hikashop_checkout_',
array('return_data' => true, 'suffix_type' =>
'_'.$view->step.'_'.$view->block_position));
}
}
}
}