File manager - Edit - /home/verseaumee/empowernetkenyajuly2026/controllers.tar
Back
vote.php 0000644 00000010122 15252000453 0006222 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 VoteController extends hikashopController { var $modify_views = array(); var $add = array(); var $modify = array(); var $delete = array(); function __construct($config = array(),$skip=false){ parent::__construct($config,$skip); if(!$skip){ $this->registerDefaultTask('save'); } $this->display[] = 'save'; $this->display[] = 'show'; } function save() { $config = hikashop_config(); $voteClass = hikashop_get('class.vote'); if(!count($_POST)){ $app = JFactory::getApplication(); $app->redirect(preg_replace('#ctrl=vote&task=save&[0-9a-z=]+#','',preg_replace('#/vote/save/[0-9a-z-]+#','',hikashop_currentURL()))); } $hikashop_vote_type = hikaInput::get()->getVar('hikashop_vote_type', 'update', 'default', 'string', 0); $element = new stdClass(); $element->vote_type = hikaInput::get()->getVar('vote_type', '', 'default', 'string', 0); if($hikashop_vote_type == 'useful'){ $element->vote_id = hikaInput::get()->getVar('hikashop_vote_id', 0, 'default', 'int'); $element->value = hikaInput::get()->getVar('value', 0, 'default', 'int'); $voteClass->saveUseful($element); }else{ $element->vote_ref_id = hikaInput::get()->getVar('hikashop_vote_ref_id', 0, 'default', 'int'); if(empty($element->vote_ref_id) || $element->vote_ref_id == '0') $element->vote_ref_id = hikaInput::get()->getVar('hikashop_vote_product_id', 0, 'default', 'int'); $element->vote_user_id = hikashop_loadUser(); if(empty($element->vote_user_id)) $element->vote_user_id = hikashop_getIP(); $element->vote_pseudo = hikaInput::get()->getVar('pseudo_comment', 0, 'default', 'string', 0); $element->vote_email = hikaInput::get()->getVar('email_comment', 0, 'default', 'string', 0); $element->vote_type = hikaInput::get()->getVar('vote_type', '', 'default', 'string', 0); $element->vote_rating = hikaInput::get()->getVar('hikashop_vote', 0, 'default', 'int'); $element->vote_comment = hikaInput::get()->getRaw('hikashop_vote_comment', ''); // hikaInput::get()->getVar('hikashop_vote_comment', 0, 'default', 'string', 0); $element->vote_comment = urldecode($element->vote_comment); $captcha = hikaInput::get()->getRaw('recaptcha_comment', ''); if(!empty($captcha)) $element->recaptchaResponse = $captcha; if($config->get('enable_status_vote','nothing') != 'both' && !empty($element->vote_comment)) $element->vote_rating = 0; $voteClass->save($element); } $return = array(); if(!isset($voteClass->error) || empty($voteClass->error['code'])){ $return['error'] = array('code' => '500001','message' => JText::_('VOTE_ERROR')); }elseif((int)$voteClass->error['code'] > 500000){ $return['error'] = array('code' => $voteClass->error['code'],'message' => $voteClass->error['message']); }else{ $return['success'] = array('code' => $voteClass->error['code'],'message' => $voteClass->error['message']); if(!empty($voteClass->values)){ $return['values'] = array('average' => round($voteClass->values['average'],2), 'rounded' => round($voteClass->values['average']), 'total' => $voteClass->values['total']); $return['tooltip'] = JText::sprintf('HIKA_VOTE_TOOLTIP',round($voteClass->values['average'],2),$voteClass->values['total'],$element->vote_rating); } } ob_get_clean(); echo json_encode($return); exit; } function show(){ $data_id = hikaInput::get()->getVar('data_id', 0, 'default', 'int'); $data_type = hikaInput::get()->getVar('main_ctrl', 'product', 'default', 'string', 0); $empty = $js = ''; jimport('joomla.html.parameter'); $params = new HikaParameter($empty); $params->set('vote_ref_id',$data_id); $params->set('main_ctrl',$data_type); $params->set('vote_type',$data_type); ob_get_clean(); echo hikashop_getLayout('vote', 'listing', $params, $js); exit; } } field.php 0000644 00000002345 15252000453 0006340 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 FieldController extends hikashopController { var $delete = array(); var $display = array(); public function __construct($config = array()){ parent::__construct($config); $this->modify_views = array('add_value'); $this->modify = array('save_value'); } function add_value(){ hikaInput::get()->set( 'layout', 'add_value' ); return parent::display(); } function save_value(){ JSession::checkToken() || die('Invalid Token'); $fieldClass = hikashop_get('class.field'); $input = hikaInput::get(); $id = $input->getInt('field_id'); $field = $fieldClass->getField($id); if(in_array($field->field_table, array('product', 'category'))) { return false; } $fieldClass->addValue($id, $input->getVar('value_title'), $input->getVar('value_value'), $input->getVar('value_disabled')); hikaInput::get()->set( 'layout', 'save_value' ); return parent::display(); } } order.php 0000644 00000075735 15252000453 0006405 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 orderController extends hikashopController { var $modify = array(); var $delete = array(); var $modify_views = array(); public function __construct($config = array(), $skip = false) { parent::__construct($config,$skip); $this->display = array_merge($this->display, array( 'invoice', 'cancel', 'download', 'order_products', 'pay', 'cancel_order', 'reorder', 'contact', 'send_email' )); } public function authorize($task) { if($this->isIn($task, array('display'))) { return true; } return false; } protected function isLogged($message = true, $guest_authorized = true) { $user = JFactory::getUser(); if(!$user->guest) return true; $hk_user_id = hikashop_loadUser(false); if(!empty($hk_user_id) && $guest_authorized) return true; $app = JFactory::getApplication(); if($message) $app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST')); global $Itemid; $suffix = (!empty($Itemid) ? '&Itemid=' . $Itemid : ''); $url = 'index.php?option=com_users&view=login'; $app->redirect(JRoute::_($url . $suffix . '&return='.urlencode(base64_encode(hikashop_currentUrl('', false))), false)); return false; } protected function _check($message = true) { $order_id = hikashop_getCID('order_id'); if(empty($order_id)) { $this->listing(); return false; } $orderClass = hikashop_get('class.order'); $order = $orderClass->get($order_id); if(empty($order)) { $this->listing(); return false; } $userClass = hikashop_get('class.user'); $user = $userClass->get($order->order_user_id); if(empty($user)) { $this->listing(); return false; } if(empty($user->user_cms_id) || (int)$user->user_cms_id == 0) { $token = hikaInput::get()->getVar('order_token'); if(empty($order->order_token) || $token != $order->order_token) { return false; } } elseif(!$this->isLogged($message)) { return false; } return true; } public function listing() { if(!$this->isLogged(true, false)) return false; return parent::listing(); } public function contact() { if(!hikashop_level(1)) return; if(!headers_sent()) header('X-Robots-Tag: noindex'); if(!$this->_check()) return false; hikaInput::get()->set('layout', 'contact'); return parent::display(); } public function send_email() { if(!hikashop_level(1)) return; JSession::checkToken('request') || die('Invalid Token'); $element = new stdClass(); $formData = hikaInput::get()->get('data', array(), 'array'); if(empty($formData['contact'])) { $formData['contact'] = @$formData['register']; foreach($formData['contact'] as $column => $value) { hikashop_secureField($column); $element->$column = strip_tags($value); } } else { $fieldsClass = hikashop_get('class.field'); $element = $fieldsClass->getInput('contact', $element); } $config =& hikashop_config(); $app = JFactory::getApplication(); JPluginHelper::importPlugin('hikashop'); $send = !empty($element->order_id); $orderClass = hikashop_get('class.order'); $order = $orderClass->loadFullOrder((int)$element->order_id); if(empty($order)) { $app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST')); $send = false; } $contact_statuses = explode(',', trim($config->get('contact_button_orders', 'created,confirmed,shipped,refunded,pending,cancelled'), ',')); if($send && !in_array($order->order_status, $contact_statuses)) { $app->enqueueMessage(JText::_('STATUS_OF_ORDER_NOT_VALID_FOR_THIS_ACTION')); $send = false; } if(!empty($order->customer)) { $element->email = $order->customer->user_email; $element->name = ''; if(!empty($order->customer->name)) $element->name = $order->customer->name; } $app->triggerEvent('onBeforeSendOrderContactRequest', array(&$element, &$send)); jimport('joomla.mail.helper'); $mailer = JFactory::getMailer(); if($config->get('order_contact_altbody_required', 1) && empty($element->altbody)) { $app->enqueueMessage(JText::_('PLEASE_FILL_ADDITIONAL_INFO'), 'error'); $send = false; } elseif(!empty($element->altbody)) { $element->altbody = strip_tags($element->altbody); } if(!empty($element->consentcheck) && empty($element->consent)) { $app->enqueueMessage(JText::_('PLEASE_AGREE_TO_PRIVACY_POLICY'), 'error'); $send = false; } if(!$send) { hikaInput::get()->set('formData', $element); $this->contact(); return; } $subject = JText::sprintf('CONTACT_REQUEST_FOR_ORDER',strip_tags($order->order_number)); $app->triggerEvent('onBeforeSendOrderContactRequestEmail', array(&$element, &$send)); if($send) { $mailClass = hikashop_get('class.mail'); $infos = new stdClass(); $infos->element =& $element; $infos->order =& $order; $mail = $mailClass->get('contact_request', $infos); $mail->subject = $subject; $mail->from_email = $config->get('from_email'); $mail->from_name = $config->get('from_name'); if(!empty($element->email)) $mail->reply_email = $element->email; if(empty($mail->dst_email)) { $dst = $config->get('contact_request_email'); if(empty($dst)) $mail->dst_email = array($config->get('from_email')); else $mail->dst_email = explode(',', $dst); } if($config->get('contact_form_copy_checkbox', 0) && !empty($element->copycheck) && empty($element->copy) && !empty($element->email)) { $mail->cc_email = $element->email; } if(!empty($element->email)) { $user_name = ''; if(!empty($element->name)) $user_name = $element->name; if(HIKASHOP_J30) { $mailClass->mailer->addReplyTo($element->email, $user_name); } else { $mailClass->mailer->addReplyTo(array($element->email, $user_name)); } } $status = $mailClass->sendMail($mail); } else { $status = true; } if($status) { $app->enqueueMessage(JText::_('CONTACT_REQUEST_SENT')); if(hikaInput::get()->getString('tmpl', '') == 'component') { $doc = JFactory::getDocument(); $doc->addScriptDeclaration('setTimeout(function(){ window.parent.hikashop.closeBox(); }, 4000);'); return true; } } $redirect_url = hikaInput::get()->getString('redirect_url', ''); if(empty($redirect_url)) { $url_itemid = ''; if(!empty($Itemid)) { $url_itemid = '&Itemid='.(int)$Itemid; } $url_token = ''; $token = hikaInput::get()->getVar('order_token'); if(!empty($token)) $url_token = '&order_token='.$token; $redirect_url = hikashop_contentLink('order&task=show&cid='.$order->order_id.$url_itemid.$url_token); } $app->enqueueMessage(JText::sprintf('CLICK_HERE_TO_GO_BACK', $redirect_url)); } public function show() { if(!headers_sent()) header('X-Robots-Tag: noindex'); if(!$this->_check()) return false; return parent::show(); } public function invoice() { if(!headers_sent()) header('X-Robots-Tag: noindex'); if(!$this->_check()) return false; hikaInput::get()->set('layout', 'invoice'); return parent::display(); } public function cancel_order() { if(!headers_sent()) header('X-Robots-Tag: noindex'); $app = JFactory::getApplication(); $order_id = hikashop_getCID('order_id'); $order_id_in_session = (int)$app->getUserState(HIKASHOP_COMPONENT.'.order_id'); $user_id = hikashop_loadUser(false); $connected = !empty($user_id); if(!$connected){ if(!$order_id_in_session || ($order_id && $order_id_in_session != $order_id)){ if(!$this->isLogged()) return false; } } if(empty($order_id)) $order_id = $order_id_in_session; if(empty($order_id)) return false; $orderClass = hikashop_get('class.order'); $user_id = hikashop_loadUser(); $config =& hikashop_config(); $order = $orderClass->get($order_id); if(!$connected && !empty($order->order_user_id)) { $token = hikaInput::get()->getVar('order_token'); if(empty($token)) $token = $app->getUserState('com_hikashop.order_token'); if(empty($order->order_token) || $token != $order->order_token) { return false; } } $checkout = explode(',', $config->get('checkout')); $step = hikaInput::get()->getInt('step', 0); if(empty($step)) $step = max(count($checkout) - 2, 0); $itemid_for_checkout = $config->get('checkout_itemid','0'); $item = (!empty($itemid_for_checkout) ? '&Itemid='.(int)$itemid_for_checkout : ''); $cancel_url = hikashop_completeLink('checkout&step=' . $step . $item, false, true); if(empty($order) || $order->order_user_id != $user_id) { $redirect_url = hikaInput::get()->getVar('redirect_url'); if(!empty($redirect_url) && !hikashop_disallowUrlRedirect($redirect_url)) $cancel_url = $redirect_url; $app->redirect($cancel_url); return true; } $status = $config->get('cancelled_order_status'); $unpaid_statuses = explode(',', trim($config->get('order_unpaid_statuses', 'created'), ',')); $cancellable_statuses = explode(',', trim($config->get('cancellable_order_status'), ',')); if(!empty($status) && (in_array($order->order_status, $unpaid_statuses) || in_array($order->order_status, $cancellable_statuses))) { $statuses = explode(',', trim($status, ',')); $newOrder = new stdClass(); $newOrder->order_status = reset($statuses); $newOrder->order_id = $order_id; $ret = $orderClass->save($newOrder); if($ret && hikaInput::get()->getInt('email', false)) { $order->order_status = $newOrder->order_status; $mailClass = hikashop_get('class.mail'); $infos = null; $infos =& $order; $mail = $mailClass->get('order_cancel', $infos); if( !empty($mail) ) { $mail->subject = JText::sprintf($mail->subject, HIKASHOP_LIVE); $mail->dst_email = (!empty($infos->email) ? $infos->email : $config->get('from_email')); $mail->dst_name = (!empty($infos->name) ? $infos->name : $config->get('from_name')); $mailClass->sendMail($mail); } } } $db = JFactory::getDBO(); $query = 'SELECT * FROM '.hikashop_table('payment'). ' WHERE payment_type = '.$db->Quote($order->order_payment_method).' AND payment_id = '.(int)$order->order_payment_id; $db->setQuery($query); $paymentData = $db->loadObjectList(); $pluginsClass = hikashop_get('class.plugins'); $pluginsClass->params($paymentData, 'payment'); $paymentOptions = reset($paymentData); if(!empty($paymentOptions->payment_params->cancel_url)) { $cancel_url = hikashop_translate($paymentOptions->payment_params->cancel_url); } $redirect_url = hikaInput::get()->getVar('redirect_url'); if(!empty($redirect_url) && !hikashop_disallowUrlRedirect($redirect_url)) $cancel_url = $redirect_url; $app->redirect($cancel_url); return true; } public function reorder() { if(!headers_sent()) header('X-Robots-Tag: noindex'); if(!hikashop_level(1) || !$this->_check()) { return false; } $app = JFactory::getApplication(); $config = hikashop_config(); $order_id = hikashop_getCID('order_id'); if(empty($order_id) || !$config->get('allow_reorder', 0)) return false; $orderClass = hikashop_get('class.order'); $order = $orderClass->loadFullOrder($order_id); if(empty($order)) { $app->enqueueMessage(JText::_('ORDER_NOT_FOUND'), 'error'); parent::listing(); return false; } $cartClass = hikashop_get('class.cart'); $products = $cartClass->cartProductsToArray( $order->products ); $ret = $cartClass->addProduct(0, $products, array('ignore_errors' => true)); if($ret === false) { $cartClass->enqueueCartMessages(0); parent::listing(); return false; } if(is_array($ret) && @$ret['status'] === false && !empty($ret['errors'])) { $app->enqueueMessage(JText::_('HIKASHOP_SOME_PRODUCT_NOT_ADDED_TO_CART'), 'error'); foreach($ret['errors'] as $error) { $app->enqueueMessage($error['msg'], $error['type']); } } if(!empty($order->order_discount_code)) { $cartClass->addCoupon(0, $order->order_discount_code); } $itemid_for_checkout = $config->get('checkout_itemid','0'); $item = (!empty($itemid_for_checkout) ? '&Itemid='.(int)$itemid_for_checkout : ''); $app->redirect( hikashop_completeLink('checkout'.$item, false, true) ); } public function pay() { if(!headers_sent()) header('X-Robots-Tag: noindex'); if(!$this->_check()) { return false; } $app = JFactory::getApplication(); $config = hikashop_config(); $user_id = hikashop_loadUser(false); if(!hikashop_level(1) || !$config->get('allow_payment_button', 1)) return false; $order_id = hikashop_getCID('order_id'); if(empty($order_id)) return false; $orderClass = hikashop_get('class.order'); $order = $orderClass->loadFullOrder($order_id); if(empty($order) || empty($order->order_id)) { $app->enqueueMessage(JText::sprintf('ORDER_X_NOT_FOUND', $order_id), 'error'); $app->redirect( hikashop_completeLink('order&task=listing', false, true) ); return false; } if(isset($order->customer->user_cms_id) && (int)$order->customer->user_cms_id == 0){ $token = hikaInput::get()->getVar('order_token'); if(empty($order->order_token) || $token != $order->order_token){ $app->enqueueMessage(JText::sprintf('ORDER_X_NOT_FOUND', $order_id), 'error'); $app->redirect( hikashop_completeLink('order&task=listing', false, true) ); return false; } }elseif($order->order_user_id != $user_id){ $app->enqueueMessage(JText::sprintf('ORDER_X_NOT_FOUND', $order_id), 'error'); $app->redirect( hikashop_completeLink('order&task=listing', false, true) ); } $unpaid_statuses = explode(',', $config->get('order_unpaid_statuses', 'created')); if(!in_array($order->order_status, $unpaid_statuses)) { $app->enqueueMessage(JText::sprintf('ORDER_X_NOT_PAID_ANYMORE', $order->order_number)); $app->redirect( hikashop_completeLink('order&task=listing', false, true) ); return false; } $new_payment_method = hikaInput::get()->getVar('new_payment_method', null); $payment_change = $config->get('allow_payment_change', 1); if($payment_change && $new_payment_method === null) { hikaInput::get()->set('layout', 'pay'); return $this->display(); } if($payment_change && !empty($new_payment_method)) { $ret = $this->changePaymentMethod($order, $new_payment_method); if(!$ret) return false; } $app->setUserState(HIKASHOP_COMPONENT.'.shipping_address', $order->order_shipping_address_id); $app->setUserState(HIKASHOP_COMPONENT.'.billing_address', $order->order_billing_address_id); $paymentPlugin = hikashop_import('hikashoppayment', $order->order_payment_method); if(empty($paymentPlugin)) { $app->enqueueMessage(JText::sprintf('PAYMENT_METHOD_NOT_FOUND_FOR_ORDER', $order->order_number), 'error'); return false; } $paymentClass = hikashop_get('class.payment'); $needCC = false; $paymentMethod = null; if( method_exists($paymentPlugin, 'needCC') ) { $paymentMethod = $paymentClass->get($order->order_payment_id); $needCC = $paymentPlugin->needCC($paymentMethod); } $app->setUserState(HIKASHOP_COMPONENT.'.order_id', $order_id); $app->setUserState( HIKASHOP_COMPONENT.'.payment_method', $order->order_payment_method); $app->setUserState( HIKASHOP_COMPONENT.'.payment_id', $order->order_payment_id); if(!empty($paymentMethod)) $app->setUserState( HIKASHOP_COMPONENT.'.payment_data', $paymentMethod); if(!empty($needCC) && !$paymentClass->readCC()) { hikaInput::get()->set('layout', 'pay'); return $this->display(); } $invalidToken = (!JSession::checkToken('request')); if(!empty($paymentMethod) && !empty($paymentMethod->custom_html) && (hikaInput::get()->getInt('payment_custom_html', 0) == 0 || $invalidToken)) { hikaInput::get()->set('layout', 'pay'); return $this->display(); } $userClass = hikashop_get('class.user'); $order->customer = $userClass->get($order->order_user_id); $order->cart =& $order; $price = new stdClass(); $price->price_value_with_tax = $order->order_full_price; $order->cart->full_total = new stdClass(); $order->cart->full_total->prices = array($price); $order->cart->total = new stdClass(); if($config->get('group_options',0)){ foreach($order->cart->products as $k => $product){ if(!empty($product->order_product_option_parent_id)){ foreach($order->cart->products as $k2 => $product2){ if($product->order_product_option_parent_id == $product2->order_product_id){ $product2->order_product_price += $product->order_product_price; $product2->order_product_tax += $product->order_product_tax; $product2->order_product_total_price_no_vat += $product->order_product_total_price_no_vat; $product2->order_product_total_price += $product->order_product_total_price; } } } } } $currencyClass = hikashop_get('class.currency'); $currencyClass->calculateTotal($order->cart->products, $order->cart->total, $order->order_currency_id); if(bccomp($order->order_discount_price, 0, 5) !== 0) { $order->cart->coupon = new stdClass(); $order->cart->coupon->discount_value =& $order->order_discount_price; } $paymentMethods = $paymentClass->getMethods($order->cart); if(!empty($paymentMethod) && !empty($paymentMethod->custom_html)) { $order->cart->payment = $paymentPlugin->onPaymentSave($order->cart, $paymentMethods, $order->order_payment_id); $app->setUserState( HIKASHOP_COMPONENT.'.payment_data', $paymentMethod); unset($methods); } if(!empty($order->order_shipping_method)) { $shippingClass = hikashop_get('class.shipping'); $shippingMethods = $shippingClass->getMethods($order->cart); $shippingPlugin = hikashop_import('hikashopshipping', $order->order_shipping_method); if(!empty($shippingPlugin)) $order->cart->shipping = $shippingPlugin->onShippingSave($order->cart, $shippingMethods, $order->order_shipping_id); } $old_order_status = $order->order_status; $do = true; if(method_exists($paymentPlugin, 'onBeforeOrderCreate')) $paymentPlugin->onBeforeOrderCreate($order, $do); if(!$do) { hikashop_writeToLog(); $app->enqueueMessage(JText::_('PAYMENT_REFUSED'), 'error'); $app->redirect( hikashop_completeLink('order&task=listing', false, true) ); return false; } if(empty($needCC)) { ob_start(); if(method_exists($paymentPlugin, 'onAfterOrderConfirm')) $paymentPlugin->onAfterOrderConfirm($order, $paymentMethods, $order->order_payment_id); $html = ob_get_clean(); if(empty($html)) { $app->enqueueMessage('The payment method '.$order->order_payment_method.' does not handle payments after the order has been created'); $app->redirect( hikashop_completeLink('order&task=listing', false, true) ); return false; } } if($old_order_status != $order->order_status) { if(empty($order->history)) $order->history = new stdClass(); $order->history->history_notified = 1; $updateOrder = new stdClass(); $updateOrder->order_id = $order->order_id; $updateOrder->order_status = $order->order_status; $updateOrder->order_payment_id = $order->order_payment_id; $updateOrder->order_payment_method = $order->order_payment_method; $updateOrder->history =& $order->history; $orderClass->save($updateOrder); } if(empty($needCC) && !empty($html)) { echo $html; return true; } $cartClass = hikashop_get('class.cart'); $cartClass->handleReturnURL($order->order_id); $params = '&order_id='.$order->order_id; $token = hikaInput::get()->getVar('order_token'); if(!empty($token)) $params .= '&order_token=' . $token; $app->redirect( hikashop_completeLink('checkout&task=after_end'.$params, false, true) ); return false; } protected function changePaymentMethod(&$order, $new_payment_method) { $new_payment_method = explode('_', $new_payment_method); $payment_id = array_pop($new_payment_method); $payment_method = implode('_', $new_payment_method); if($order->order_payment_id == $payment_id && $order->order_payment_method == $payment_method) return true; $pluginPaymentType = hikashop_get('type.plugins'); $pluginPaymentType->type = 'payment'; $pluginPaymentType->order = $order; $pluginPaymentType->preload(false); $methods = $pluginPaymentType->methods['payment'][(string)$order->order_id]; $found = false; foreach($methods as $method) { if($method->payment_id != $payment_id || $method->payment_type != $payment_method) continue; $found = $method; break; } $app = JFactory::getApplication(); if(!$found) { $app->enqueueMessage(JText::_('INVALID_DATA'), 'error'); return false; } $updateOrder = new stdClass(); $updateOrder->order_id = $order->order_id; $updateOrder->order_payment_id = $payment_id; $updateOrder->order_payment_method = $payment_method; $full_price_without_payment = $order->order_full_price - $order->order_payment_price; $updateOrder->order_payment_price = @$found->payment_price_with_tax; $updateOrder->order_payment_tax = @$found->payment_price_with_tax-$found->payment_price; $updateOrder->order_full_price = $full_price_without_payment + $updateOrder->order_payment_price; if(!empty($order->order_tax_info)) { $updateOrder->order_tax_info = $order->order_tax_info; foreach($order->order_tax_info as $namekey => $tax) { if(!empty($tax->tax_amount_for_payment)) { $old_tax_amount = $updateOrder->order_tax_info[$namekey]->tax_amount; $new_tax_amount = $old_tax_amount - $updateOrder->order_tax_info[$namekey]->tax_amount_for_payment; $updateOrder->order_tax_info[$namekey]->tax_amount = $new_tax_amount; if(!empty($updateOrder->order_tax_info[$namekey]->amount)) { $old_amount = $updateOrder->order_tax_info[$namekey]->amount; $new_amount = $new_tax_amount * $old_amount / $old_tax_amount; $updateOrder->order_tax_info[$namekey]->amount = $new_amount; } unset($updateOrder->order_tax_info[$namekey]->tax_amount_for_payment); } } } if(!empty($found->taxes) && count($found->taxes) == 1) { if(empty($order->order_tax_info)) { $updateOrder->order_tax_info = array(); } foreach($found->taxes as $tax) { if(isset($updateOrder->order_tax_info[$tax->tax_namekey]) && $updateOrder->order_tax_info[$tax->tax_namekey]->tax_amount > 0) { $old_tax_amount = $updateOrder->order_tax_info[$tax->tax_namekey]->tax_amount; $updateOrder->order_tax_info[$tax->tax_namekey]->tax_amount_for_payment = $tax->tax_amount; $updateOrder->order_tax_info[$tax->tax_namekey]->tax_amount += $tax->tax_amount; if(empty($updateOrder->order_tax_info[$tax->tax_namekey]->amount)) { $updateOrder->order_tax_info[$tax->tax_namekey]->amount = 0; } $updateOrder->order_tax_info[$tax->tax_namekey]->amount = $updateOrder->order_tax_info[$tax->tax_namekey]->amount * $updateOrder->order_tax_info[$tax->tax_namekey]->tax_amount / $old_tax_amount; } else { $updateOrder->order_tax_info[$tax->tax_namekey] = $tax; $updateOrder->order_tax_info[$tax->tax_namekey]->tax_amount_for_payment = $tax->tax_amount; } } }else { } $updateOrder->history = new stdClass(); $updateOrder->history->history_payment_id = $payment_id; $updateOrder->history->history_payment_method = $payment_method; $orderClass = hikashop_get('class.order'); $orderClass->save($updateOrder); $order->order_payment_id = $payment_id; $order->order_payment_method = $payment_method; $order->order_payment_price = $updateOrder->order_payment_price; $order->order_full_price = $updateOrder->order_full_price; $app->setUserState(HIKASHOP_COMPONENT.'.cc_number', null); $app->setUserState(HIKASHOP_COMPONENT.'.cc_month', null); $app->setUserState(HIKASHOP_COMPONENT.'.cc_year', null); $app->setUserState(HIKASHOP_COMPONENT.'.cc_CCV', null); $app->setUserState(HIKASHOP_COMPONENT.'.cc_type', null); $app->setUserState(HIKASHOP_COMPONENT.'.cc_owner', null); return true; } public function download() { if(!headers_sent()) header('X-Robots-Tag: noindex'); $file_id = hikaInput::get()->getInt('file_id'); if(empty($file_id)){ $field_table = hikaInput::get()->getString('field_table'); $field_namekey = base64_decode(urldecode(hikaInput::get()->getString('field_namekey'))); $name = base64_decode(urldecode(hikaInput::get()->getString('name'))); if(empty($field_table)||empty($field_namekey)||empty($name)){ $app=JFactory::getApplication(); $app->enqueueMessage(JText::_('FILE_NOT_FOUND')); return false; }else{ $options = array(); if(isset($_REQUEST['thumbnail_x']) || isset($_REQUEST['thumbnail_y'])) { $options = array( 'thumbnail_x' => hikaInput::get()->getInt('thumbnail_x', 0), 'thumbnail_y' => hikaInput::get()->getInt('thumbnail_y', 0) ); } $fileClass = hikashop_get('class.file'); $result = $fileClass->downloadFieldFile($name, $field_table, $field_namekey, $options); if($result) exit; else return; } } $order_id = hikashop_getCID('order_id'); if(empty($order_id)) { parent::listing(); return false; } $file_pos = hikaInput::get()->getInt('file_pos', 1); $order_token = hikaInput::get()->getVar('order_token', ''); if(empty($order_token)) $order_token = hikaInput::get()->getVar('email', ''); $fileClass = hikashop_get('class.file'); if(!$fileClass->download($file_id, $order_id, $file_pos, $order_token)) { switch($fileClass->error_type){ case 'login': $this->_check(false); break; case 'no_order'; parent::listing(); break; default: parent::show(); break; } } return true; } public function cancel() { $cancel_redirect = hikaInput::get()->getString('cancel_redirect'); if(!empty($cancel_redirect)) { $cancel_redirect = urldecode($cancel_redirect); if(hikashop_disallowUrlRedirect($cancel_redirect)) return false; $this->setRedirect($cancel_redirect); return true; } $cancel_url = hikaInput::get()->getString('cancel_url'); if(!empty($cancel_url)) { $cancel_url = urldecode($cancel_url); if(hikashop_disallowUrlRedirect($cancel_url)) return false; $this->setRedirect(base64_decode($cancel_url)); return true; } $order_id = hikashop_getCID('order_id'); if(!empty($order_id)) { return $this->listing(); } global $Itemid; $url = (!empty($Itemid) ? '&Itemid='.$Itemid : ''); $this->setRedirect(hikashop_completeLink('user'.$url, false, true)); } public function order_products() { $tmpl = hikaInput::get()->getString('tmpl', ''); if(!in_array($tmpl, array('raw','ajax','component'))) return false; if(!$this->_check(false)) exit; hikaInput::get()->set('layout', 'order_products'); hikashop_cleanBuffers(); parent::display(); exit; } public function getUploadSetting($upload_key, $caller = '') { if(empty($upload_key)) return false; if(strpos($upload_key, '-') === false) return false; if(in_array($caller, array('galleryimage', 'galleryselect', 'image'))) return false; list($field_table, $field_namekey) = explode('-', $upload_key, 2); $fieldClass = hikashop_get('class.field'); $field = $fieldClass->getField($field_namekey, $field_table); if(empty($field) || !in_array($field->field_type, array('ajaxfile', 'ajaximage'))) return false; $map = hikaInput::get()->getString('field_map', ''); if(empty($map)) return false; $config = hikashop_config(); $options = array( 'upload_dir' => $config->get('uploadsecurefolder') ); if(!empty($field->field_options['upload_dir'])) $options['upload_dir'] = $field->field_options['upload_dir']; if(!empty($field->field_options['allowed_extensions'])) $options['allowed_extensions'] = trim($field->field_options['allowed_extensions'], ', '); $type = ($field->field_type == 'ajaxfile') ? 'file' : 'image'; return array( 'limit' => 1, 'type' => $type, 'options' => $options, 'extra' => array( 'field_name' => $map, 'delete' => empty($field->field_required), 'uploader_id' => hikaInput::get()->getString('uploader_id', '') ) ); } public function manageUpload($upload_key, &$ret, $uploadConfig, $caller = '') { if(empty($ret) || empty($ret->name)) return; if(empty($upload_key)) return; if(strpos($upload_key, '-') === false) return; list($field_table, $field_namekey) = explode('-', $upload_key); $fieldClass = hikashop_get('class.field'); $field = $fieldClass->getField($field_namekey, $field_table); if(empty($field) || ($field->field_type != 'ajaxfile' && $field->field_type != 'ajaximage')) return; $map = hikaInput::get()->getString('field_map', ''); if(empty($map)) return; $app = JFactory::getApplication(); if($field_table == 'item') { $itemsData = $app->getUserState(HIKASHOP_COMPONENT.'.items_fields'); if(empty($itemsData)) $itemsData = array(); $newItem = new stdClass(); $newItem->$field_namekey = $ret->name; $itemsData[] = $newItem; $app->setUserState(HIKASHOP_COMPONENT.'.items_fields', $itemsData); } if($field_table == 'order') { $orderData = $app->getUserState(HIKASHOP_COMPONENT.'.checkout_fields'); if(empty($orderData)) $orderData = new stdClass(); $orderData->$field_namekey = $ret->name; $app->setUserState(HIKASHOP_COMPONENT.'.checkout_fields', $orderData); } if($field_table == 'user') { $userData = $app->getUserState(HIKASHOP_COMPONENT.'.user_fields'); if(empty($userData)) $userData = new stdClass(); $userData->$field_namekey = $ret->name; $app->setUserState(HIKASHOP_COMPONENT.'.user_fields', $userData); } if(substr($field_table, 0, 4) == 'plg.') { $externalValues = array(); JPluginHelper::importPlugin('hikashop'); $app->triggerEvent('onTableFieldsLoad', array( &$externalValues ) ); $found = false; foreach($externalValues as $external) { if($external->value == $field_table) { $found = true; break; } } if($found) { $app = JFactory::getApplication(); $elemData = $app->getUserState(HIKASHOP_COMPONENT.'.plg_fields.' . substr($field_table, 4)); if(empty($elemData)) $elemData = array(); $newItem = new stdClass(); $newItem->$field_namekey = $ret->name; $elemData[] = $newItem; $app->setUserState(HIKASHOP_COMPONENT.'.plg_fields.' . substr($field_table, 4), $elemData); } } if($field->field_type == 'ajaxfile') $ajaxFileClass = new hikashopFieldAjaxfile($fieldClass); else $ajaxFileClass = new hikashopFieldAjaximage($fieldClass); $ajaxFileClass->_manageUpload($field, $ret, $map, $uploadConfig, $caller); } } plugins.php 0000644 00000001700 15252000453 0006730 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 PluginsController extends hikashopController { var $type = 'plugins'; var $listing = true; function __construct($config = array()){ parent::__construct($config); $this->modify[]='trigger'; } function trigger(){ $cid= hikaInput::get()->getInt('cid', 0); $function = 'productDisplay'; if(empty($cid) || empty($function)){ return false; } $pluginsClass = hikashop_get('class.plugins'); $plugin = $pluginsClass->get($cid); if(empty($plugin)){ return false; } $plugin = hikashop_import($plugin->folder, $plugin->element); if(method_exists($plugin, $function)) return $plugin->$function(); return false; } } cart.php 0000644 00000056015 15252000453 0006211 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 CartController extends hikashopController { public $display = array( 'show', 'listing', 'cancel', '', 'share','printcart','add', 'showcart','showcarts' ); public $modify_views = array('product_edit'); public $add = array(); public $modify = array( 'apply','save', 'setcurrent', 'addtocart', 'sendshare', 'product_save' ); public $delete = array('remove'); public $type = 'cart'; public function __construct($config = array(), $skip = false) { parent::__construct($config, $skip); $config =& hikashop_config(); if($config->get('checkout_legacy', 0)) { $this->display[] = 'convert'; } else { $this->modify[] = 'convert'; } if(!$skip) { $this->registerDefaultTask('show'); } } protected function isLogged() { $user_id = hikashop_loadUser(false); if(!empty($user_id)) return true; $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST')); global $Itemid; $suffix = (!empty($Itemid) ? '&Itemid=' . $Itemid : ''); $url = 'index.php?option=com_users&view=login'; $app->redirect(JRoute::_($url . $suffix . '&return='.urlencode(base64_encode(hikashop_currentUrl('', false))), false)); return false; } public function add() { $cart_type = hikaInput::get()->getCmd('cart_type', ''); if(!in_array($cart_type, array('cart','wishlist'))) $cart_type = 'cart'; $config = hikashop_config(); if( ($cart_type == 'wishlist' && !$config->get('enable_multiwishlist', 1)) || ($cart_type == 'cart' && !$config->get('enable_multicart', 1)) ) { return $this->listing(); } $cartClass = hikashop_get('class.cart'); $cart = new stdClass(); $cart->cart_type = $cart_type; $result = $cartClass->save($cart); $app = JFactory::getApplication(); if($result) { $app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'), 'success'); global $Itemid; $suffix = (!empty($Itemid) ? '&Itemid=' . $Itemid : ''); $app->redirect(hikashop_completeLink('cart&task=show&cart_id='.$result.$suffix)); } else { $app->enqueueMessage(JText::_( 'ERROR_SAVING' ), 'error'); } return $this->listing(); } public function show() { hikashop_nocache(); $cartClass = hikashop_get('class.cart'); $cart_id = hikashop_getCID('cart_id'); $app = JFactory::getApplication(); if(empty($cart_id)) { $cart_id = 0; $cart_type = hikaInput::get()->getCmd('cart_type', ''); $menu_item_displaying_the_current_wishlist = false; if(empty($cart_type)) { $menus = $app->getMenu(); $menu = $menus->getActive(); global $Itemid; if(empty($menu) && !empty($Itemid)) { $menus->setActive($Itemid); $menu = $menus->getItem($Itemid); } if(is_object($menu)) { if(HIKASHOP_J30) $menuParams = $menu->getParams(); elseif(is_object($menu->params)) $menuParams = @$menu->params; if($menuParams) { $cart_type = $menuParams->get('cart_type'); $menu_item_displaying_the_current_wishlist = true; } } } if(!empty($cart_type) && $cart_type == 'wishlist') { $cart_id = $cartClass->getCurrentCartId('wishlist'); if(empty($cart_id) && $menu_item_displaying_the_current_wishlist) { $user = JFactory::getUser(); if(!$user->guest) { $app->enqueueMessage(JText::_('WISHLIST_EMPTY')); return parent::show(); } $app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST')); global $Itemid; $url = ''; if(!empty($Itemid)) $url = '&Itemid='.$Itemid; $url = 'index.php?option=com_users&view=login'.$url; $app->redirect(JRoute::_($url.'&return='.urlencode(base64_encode(hikashop_currentUrl('', false))), false)); } if(empty($cart_id)) { $this->setRedirect(hikashop_completeLink('user'), JText::_('WISHLIST_EMPTY')); return true; } hikaInput::get()->set('cart_id', $cart_id); } } $cart = $cartClass->get($cart_id); $config = hikashop_config(); if(empty($cart) || empty($cart->cart_products)) { $cart_id = hikashop_getCID('cart_id'); if(!empty($cart_id)) { $cart = $cartClass->get($cart_id, null, array('skip_user_check' => true)); $user_id = hikashop_loadUser(false); if(!empty($cart) && empty($user_id)) { $app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST')); global $Itemid; $suffix = (!empty($Itemid) ? '&Itemid=' . $Itemid : ''); $url = 'index.php?option=com_users&view=login'; $app->redirect(JRoute::_($url . $suffix . '&return='.urlencode(base64_encode(hikashop_currentUrl('', false))), false)); return true; } } if($config->get('cart_show_page_redirect_on_empty', 1) && (empty($cart_id) || empty($cart->products))) { hikashop_get('helper.checkout'); $checkoutHelper = hikashopCheckoutHelper::get(); $override = false; if($app->getUserState('com_hikashop.cart_empty_redirect') > time()-1) { $app->setUserState('com_hikashop.cart_empty_redirect', 0); $override = true; } else { $app->setUserState('com_hikashop.cart_empty_redirect', time()); } $this->setRedirect($checkoutHelper->getRedirectUrl($override), JText::_('CART_EMPTY')); return true; } } $user_id = hikashop_loadUser(false); if(!empty($cart)) { if($cart->cart_type == 'wishlist' && $cart->user_id != $user_id && $cart->cart_share == 'email') { $token = hikaInput::get()->getString('token'); if(!empty($cart->cart_params->token) && $token != $cart->cart_params->token) { $app->enqueueMessage(JText::_('CART_SHARE_INVALID_TOKEN'), 'error'); return false; } } } $app->setUserState('com_hikashop.cart_empty_redirect', 0); return parent::show(); } public function product_edit() { hikashop_nocache(); $cartClass = hikashop_get('class.cart'); $cart_id = hikashop_getCID('cart_id'); $cart = $cartClass->get($cart_id); if(empty($cart) && !empty($cart_id)) { $cart = $cartClass->get($cart_id, null, array('skip_user_check' => true)); $user_id = hikashop_loadUser(false); if(!empty($cart) && empty($user_id)) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST')); global $Itemid; $suffix = (!empty($Itemid) ? '&Itemid=' . $Itemid : ''); $url = 'index.php?option=com_users&view=login&tmpl=component'; $app->redirect(JRoute::_($url . $suffix . '&return='.urlencode(base64_encode(hikashop_currentUrl('', false))), false)); } } elseif(empty($cart)) { echo JText::_('CART_EMPTY'); return true; } $cart_product_id = hikaInput::get()->getInt('cart_product_id', 0); if(empty($cart_product_id)) { echo 'no cart_product_id provided'; return true; } $found = false; foreach($cart->cart_products as $p){ if($p->cart_product_id == $cart_product_id) { $found = true; break; } } if(!$found) { echo 'cart_product_id '.$cart_product_id.' not for the cart '.$cart_id; return true; } hikaInput::get()->set('layout', 'product_edit'); return parent::display(); } public function product_save() { hikashop_nocache(); $cartClass = hikashop_get('class.cart'); $cart_id = hikashop_getCID('cart_id'); $cart = $cartClass->get($cart_id); if(empty($cart) && !empty($cart_id)) { $cart = $cartClass->get($cart_id, null, array('skip_user_check' => true)); $user_id = hikashop_loadUser(false); if(!empty($cart) && empty($user_id)) { echo JText::_('PLEASE_LOGIN_FIRST'); return true; } } if(empty($cart)) { echo JText::_('CART_EMPTY'); return true; } $cart_product_id = hikaInput::get()->getInt('cart_product_id', 0); if(empty($cart_product_id)) { echo 'no cart_product_id provided'; return true; } $found = false; $product_id = 0; $qty = 0; foreach($cart->cart_products as $p){ if($p->cart_product_id == $cart_product_id) { $found = $p; $product_id = $p->product_id; $qty = $p->cart_product_quantity; break; } } if(!$found) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('THE_PRODUCT_BIENG_MODIFIED_IS_NOT_IN_THE_CURRENT_CART_ANYMORE'),'error'); return true; } $optionsData = null; if(hikashop_level(1)) { $options = hikaInput::get()->get('hikashop_product_option', array(), 'array'); $options_qty = hikaInput::get()->get('hikashop_product_option_qty', array(), 'array'); if(!empty($options) && is_array($options)) { $optionsData = array(); foreach($options as $k => $option) { if(empty($option) || (int)$option == 0) continue; if(isset($options_qty[$k]) && empty($options_qty[$k])) continue; if(!isset($options_qty[$k]) || (int)$options_qty[$k] < 0) $options_qty[$k] = 0; $quantity = !empty($options_qty[$k]) ? (int)$options_qty[$k] : $qty; $coef = !empty($options_qty[$k]) ? 0 : 1; $optionsData[] = array( 'id' => (int)$option, 'qty' => $quantity, 'coef' => $coef ); } if(empty($optionsData)) $optionsData = null; } } $options = array(); $fieldData = null; if(hikashop_level(2)) { $product_ids = array($product_id); $fields = $cartClass->loadFieldsForProducts($product_ids, 'display:cart_edit=1'); if(!empty($fields)) { $formData = hikaInput::get()->get('data', array(), 'array'); $cart_products[0]['fields'] = array(); foreach($fields as $k => $field){ if($field->field_type == 'customtext') continue; $fieldData[$field->field_namekey] = @$formData['item'][$field->field_namekey]; } $data = new stdClass(); $fieldClass = hikashop_get('class.field'); $buffer = hikashop_copy($fieldData); $ok = $fieldClass->checkFieldsData($fields, $buffer, $data, 'item', $found); $options['fields_area'] = 'display:cart_edit=1'; if(!$ok) { if(!empty($fieldClass->error_fields)) { foreach($fieldClass->error_fields as $error_field){ if(!empty($error_field->field_options['errormessage'])) $message = $fieldClass->trans($error_field->field_options['errormessage']); else $message = JText::sprintf('FIELD_VALID', $fieldClass->trans($error_field->field_realname)); $cartClass->addMessage($cart, array( 'msg' => $message, 'product_id' => $product_id, 'type' => 'error' )); } } return $this->product_edit(); } } } $new_product_id = hikaInput::get()->getInt('new_product_id', 0); if(!empty($new_product_id)) { $productClass = hikashop_get('class.product'); $old_product = $productClass->get($product_id); $new_product = $productClass->get($new_product_id); if($old_product->product_parent_id != $new_product->product_parent_id) { echo 'new variant '.$new_product_id.' is not from the same parent product as the one being changed '.$product_id; return true; } $product_id = $new_product_id; } $cart_products = array(array('id'=>$cart_product_id,'qty'=>0)); $result = $cartClass->updateProduct($cart_id, $cart_products); $cart_products[0]['id'] = $product_id; $cart_products[0]['qty'] = $qty; if(!empty($fieldData)) $cart_products[0]['fields'] = $fieldData; if(!empty($optionsData)) $cart_products[0]['options'] = $optionsData; $result = $cartClass->addProduct($cart_id, $cart_products, $options); if(!$result) { return $this->product_edit(); } hikaInput::get()->set('layout', 'product_save'); return parent::display(); } public function edit() { return $this->show(); } public function showcart() { return $this->show(); } public function listing() { if($this->isLogged() == false) return false; global $Itemid; $app = JFactory::getApplication(); $config = hikashop_config(); $cart_type = hikaInput::get()->getCmd('cart_type', ''); if(!in_array($cart_type, array('cart','wishlist'))) { $cart_type = 'cart'; $menus = $app->getMenu(); $menu = $menus->getActive(); if(empty($menu)) { if(!empty($Itemid)) { $menus->setActive($Itemid); $menu = $menus->getItem($Itemid); } } if(is_object($menu) && in_array($menu->link, array('index.php?option=com_hikashop&view=cart&layout=showcarts', 'index.php?option=com_hikashop&view=cart&layout=listing'))) { jimport('joomla.html.parameter'); $menu_params = new HikaParameter( $menu->params ); $cart_type = $menu_params->get('cart_type'); } if(!in_array($cart_type, array('cart','wishlist'))) $cart_type = 'cart'; hikaInput::get()->set('cart_type', $cart_type); } if(!hikashop_level(1) && $cart_type == 'wishlist') { $app->redirect( hikashop_completeLink('user&task=cpanel&Itemid='.$Itemid, false, true) ); } $multi_cart = (int)$config->get('enable_multicart', 1); if($cart_type == 'wishlist') $multi_cart = (int)$config->get('enable_multiwishlist', 1); if(!$multi_cart) { $cartClass = hikashop_get('class.cart'); $cart_id = $cartClass->getCurrentCartId($cart_type); if(!empty($cart_id)) $app->redirect( hikashop_completeLink('cart&task=show&cart_id='.$cart_id.'&Itemid='.$Itemid, false, true) ); $app->redirect( hikashop_completeLink('user&task=cpanel&Itemid='.$Itemid, false, true) ); } return parent::listing(); } public function showcarts() { return $this->listing(); } public function share() { hikashop_nocache(); hikaInput::get()->set('tmpl','component'); $cart_id = hikashop_getCID('cart_id'); if(empty($cart_id)) { hikashop_display('No wishlist ID provided'); return false; } $cartClass = hikashop_get('class.cart'); $cart = $cartClass->getFullCart($cart_id); if(empty($cart)) { hikashop_display('We couldn`\'t find any wishlist to share for the id '.$cart_id); return false; } if($cart->cart_type != 'wishlist') { hikashop_display('The Id provided is not a wishlist'); return false; } $user_id = hikashop_loadUser(false); if($cart->user_id != $user_id) { hikashop_display('You are not the owner of the wishlist'); return false; } hikaInput::get()->set('layout', 'share'); return parent::display(); } public function sendshare(){ $emails = hikaInput::get()->getVar('emails',''); if(empty($emails)) { hikashop_display(JText::_('PLEASE_ENTER_EMAIL_ADDRESSES'), 'error'); return $this->share(); } hikashop_nocache(); $emails = preg_split("/[\s,]+/", $emails); jimport('joomla.mail.helper'); $mailer = JFactory::getMailer(); $ok = true; $bcc = array(); foreach($emails as $k => $email){ $email = trim($email); if(empty($email)) continue; if((method_exists('JMailHelper', 'isEmailAddress') && !JMailHelper::isEmailAddress($email))|| !$mailer->validateAddress($email)){ hikashop_display(JText::sprintf('THE_EMAIL_ADDRESS_X_IS_INVALID', $email), 'error'); $ok = false; }else{ $bcc[] = $email; } } if(!$ok) return $this->share(); $cart_id = hikashop_getCID('cart_id'); if(empty($cart_id)) { hikashop_display('No wishlist ID provided'); return false; } $cartClass = hikashop_get('class.cart'); $cart = $cartClass->getFullCart($cart_id); $user_id = hikashop_loadUser(false); if($cart->user_id != $user_id) { hikashop_display('You are not the owner of the wishlist'); return false; } if($cart->cart_share == 'nobody'){ $cart->cart_share = 'email'; $cartClass->save($cart); } $mail = $cartClass->loadNotification($cart_id, 'wishlist_share'); if(!$mail) hikashop_display('We couldn`\'t find any wishlist to share for the id '.$cart_id); $copy = hikaInput::get()->getInt('copy'); if($copy){ $bcc[] = $mail->data->user->user_email; } $mail->bcc_email = $bcc; $mailClass = hikashop_get('class.mail'); $status = $mailClass->sendMail($mail); if(!$status) { hikashop_display(JText::_('AN_ERROR_OCCURED_DURING_THE_SENDING_OF_THE_EMAIL'), 'error'); return $this->share(); } hikashop_display(JText::_('THE_EMAIL_HAS_BEEN_SENT_SUCCESSFULLY')); } public function printcart() { hikashop_nocache(); $cartClass = hikashop_get('class.cart'); $cart_id = hikashop_getCID('cart_id'); $cart = $cartClass->get($cart_id); if(empty($cart)) return false; hikaInput::get()->set('tmpl','component'); hikaInput::get()->set('print_cart', true); $js = ' window.hikashop.ready(function(){ window.focus(); if(document.all) { document.execCommand("print", false, null); } else { window.print(); } setTimeout(function(){ window.top.hikashop.closeBox();}, 2000); }); '; $doc = JFactory::getDocument(); $doc->addScriptDeclaration($js); return $this->show(); } public function addtocart() { $app = JFactory::getApplication(); $config = hikashop_config(); $user_id = hikashop_loadUser(false); $cartClass = hikashop_get('class.cart'); $group = $config->get('group_options', 0); $cart_id = hikashop_getCID('cart_id'); $addto_type = hikaInput::get()->getCmd('addto_type', 'cart'); $addto_id = hikaInput::get()->getInt('addto_id', 0); $request_addto_id = $addto_id; $formProducts = hikaInput::get()->get('products', array(), 'array'); hikashop_toInteger($formProducts); $cart = $cartClass->get($cart_id); if(empty($cart)) { $app->enqueueMessage(JText::_('ERROR'), 'error'); $app->redirect( hikashop_completeLink('cart&task=listing', false, true) ); return false; } $add = $cart->user_id != $user_id || ($request_addto_id === 0 && $addto_type === 'cart'); $juser = JFactory::getUser(); if($addto_type == 'wishlist' && (!$config->get('enable_wishlist') || $juser->guest)) { if(!$config->get('enable_wishlist')) $app->enqueueMessage(JText::_('ERROR'), 'error'); else $app->enqueueMessage(JText::_('LOGIN_REQUIRED_FOR_WISHLISTS'), 'error'); $app->redirect( hikashop_completeLink('cart&task=show&cid='.$cart_id, false, true) ); return false; } $products = array(); foreach($formProducts as $p) { if(!isset($cart->cart_products[$p])) continue; if($group && !empty($cart->cart_products[$p]->cart_product_option_parent_id)) continue; $products[$p] = $cart->cart_products[$p]; } if(empty($products)) { $app->enqueueMessage(JText::_('PLEASE_SELECT_A_PRODUCT_FIRST'), 'error'); $app->redirect( hikashop_completeLink('cart&task=show&cid='.$cart_id, false, true) ); return false; } if(empty($addto_id)) { $addto_id = $cartClass->getCurrentCartId($addto_type); if($addto_id === false) return false; } if($addto_id <= 0) { if(!in_array($addto_type, array('cart','wishlist'))) return false; } else { $destCart = $cartClass->get($addto_id); if(empty($destCart) || $destCart->cart_type != $addto_type) return false; if($destCart->cart_type == 'wishlist' && $destCart->user_id != $user_id) return false; } $ret = false; if($add) { $formData = hikaInput::get()->get('data', array(), 'array'); foreach($products as $key => &$product) { $qty_change = 0; if(isset($formData['products'][$key])) $qty_change = $formData['products'][$key]['quantity'] - $product->cart_product_quantity; foreach($cart->cart_products as $product_in_cart_key => $product_in_cart){ if($product_in_cart->cart_product_option_parent_id == $key){ $products[$product_in_cart_key] = $product_in_cart; $products[$product_in_cart_key]->cart_product_quantity = $product_in_cart->cart_product_quantity + ($product_in_cart->cart_product_quantity / $product->cart_product_quantity) * $qty_change; } } if($qty_change) $product->cart_product_quantity = (int)$formData['products'][$key]['quantity']; } $product_data = $cartClass->cartProductsToArray($products, array('wishlist' => $cart_id)); $ret = $cartClass->addProduct($addto_id, $product_data); } else { $cart_product_ids = array_keys($products); $ret = $cartClass->moveTo($cart_id, $cart_product_ids, $addto_id, $addto_type); } if(empty($ret)) { $app->enqueueMessage(JText::_('ERROR'), 'error'); $app->redirect( hikashop_completeLink('cart&task=listing', false, true) ); return false; } $translation = $addto_type == 'wishlist' ? 'PRODUCT_SUCCESSFULLY_ADDED_TO_WISHLIST' : 'PRODUCT_SUCCESSFULLY_ADDED_TO_CART'; $app->enqueueMessage(JText::_($translation)); $app->redirect( hikashop_completeLink('cart&task=show&cid='.$ret, false, true) ); return false; } public function convert() { $config = hikashop_config(); if(!$config->get('enable_wishlist')) return false; if($this->isLogged() == false) return false; $app = JFactory::getApplication(); $cart_id = hikashop_getCID('cart_id'); $cartClass = hikashop_get('class.cart'); $ret = $cartClass->convert($cart_id, false); if(!$ret) { $app->enqueueMessage(JText::_('ERROR'), 'error'); $app->redirect( hikashop_completeLink('cart&task=listing', false, true) ); return false; } $app->enqueueMessage(JText::_('SUCCESS')); $app->redirect( hikashop_completeLink('cart&task=show&cid='.(int)$cart_id, false, true) ); return true; } public function setcurrent() { if($this->isLogged() == false) return false; $app = JFactory::getApplication(); $cart_id = hikashop_getCID('cart_id'); $cartClass = hikashop_get('class.cart'); $user_id = hikashop_loadUser(false); $cart = $cartClass->get($cart_id); $cart_type = @$cart->cart_type; if(empty($cart) || $cart->user_id != $user_id || !in_array($cart_type, array('cart','wishlist'))) { $app->redirect( hikashop_completeLink('cart&task=listing', false, true) ); return false; } $ret = $cartClass->setCurrent($cart_id); $app = JFactory::getApplication(); if(!$ret) { $app->enqueueMessage(JText::_('ERROR'), 'error'); } $url_params = ($cart->cart_type == 'cart') ? '' : '&cart_type='.$cart->cart_type; $app->redirect( hikashop_completeLink('cart&task=listing'.$url_params, false, true) ); return false; } public function remove() { if($this->isLogged() == false) return false; $app = JFactory::getApplication(); $cart_type = ''; $cids = hikaInput::get()->get('cid', array(), 'array'); if(empty($cids)) { $app->redirect( hikashop_completeLink('cart&task=listing', false, true) ); return false; } $cid = is_array($cids) ? (int)reset($cids) : (int)$cid; if(!empty($cid) && $cid > 0) { $cartClass = hikashop_get('class.cart'); $cart = $cartClass->get( $cid ); if(!empty($cart) && in_array($cart->cart_type, array('cart','wishlist'))) $cart_type = '&cart_type='.$cart->cart_type; } parent::remove(); $app->redirect( hikashop_completeLink('cart&task=listing'.$cart_type, false, true) ); return false; } } entry.php 0000644 00000011160 15252000453 0006411 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 entryController extends hikashopController { var $display = array(''); var $modify_views = array('form', 'edit', 'newentry', 'save'); var $add = array(); var $modify = array(); var $delete = array(); public function __construct($config = array(), $skip = false) { parent::__construct($config,$skip); if(!$skip) { $this->registerDefaultTask('edit'); } } public function form() { return $this->edit(); } public function newentry() { hikaInput::get()->set('layout', 'newentry'); return $this->display(); } public function save() { global $Itemid; $url = 'checkout'; if(!empty($Itemid)) { $url .= '&Itemid=' . $Itemid; } $app = JFactory::getApplication(); $fieldClass = hikashop_get('class.field'); $null = null; $entriesData = $fieldClass->getInput('entry', $null); $hikashop_config =& hikashop_config(); if($hikashop_config->get('checkout_legacy', 0)) { $app->setUserState( HIKASHOP_COMPONENT.'.entries_fields', null); } $ok = true; if(empty($entriesData)) { $app->redirect( hikashop_completeLink('entry', false, true) ); } $cartClass = hikashop_get('class.cart'); $fields =& $fieldClass->getData('frontcomp', 'entry'); $cartClass->resetCart(0); $productsToAdd = array(); $coupons = array(); foreach($entriesData as $entryData){ foreach(get_object_vars($entryData) as $namekey=>$value){ foreach($fields as $field){ if($field->field_namekey == $namekey){ $ok = false; if(!empty($field->field_options) && !is_array($field->field_options)) $field->field_options = hikashop_unserialize($field->field_options); if(!empty($field->field_options['product_id'])){ if(is_numeric($value) && is_numeric($field->field_options['product_value'])){ if( $value === $field->field_options['product_value'] ){ $ok = true; } }elseif(is_string($value) && !empty($field->field_options['product_value']) && is_array($field->field_options['product_value']) && in_array($value,$field->field_options['product_value'])){ $ok = true; }elseif($value == $field->field_options['product_value']){ $ok = true; } if($ok){ $id = $field->field_options['product_id']; if(empty($productsToAdd[$id])){ $productsToAdd[$id]=array('id'=>$id,'qty'=>1); }else{ $productsToAdd[$id]['qty'] = $productsToAdd[$id]['qty'] + 1; } } } if($field->field_type=='coupon' && !empty($field->coupon[$value])){ $coupons[] = $field->coupon[$value]; } break; } } } } if(!empty($productsToAdd)){ $cartClass->addProduct(0, $productsToAdd); } if(count($coupons)>1){ $total = 0.0; $currency = hikashop_getCurrency(); $currencyClass = hikashop_get('class.currency'); $discountClass = hikashop_get('class.discount'); foreach($coupons as $item){ $currencyClass->convertCoupon($item,$currency); $total = $total + $item->discount_flat_amount; $database = JFactory::getDBO(); $database->setQuery('UPDATE '.hikashop_table('discount').' SET discount_used_times=discount_used_times+1 WHERE discount_id = '.$item->discount_id); $database->execute(); } $newCoupon = new stdClass(); $newCoupon->discount_type='coupon'; $newCoupon->discount_currency_id = $currency; $newCoupon->discount_flat_amount = $total; $newCoupon->discount_quota = 1; jimport('joomla.user.helper'); $newCoupon->discount_code = JUserHelper::genRandomPassword(30); $newCoupon->discount_published = 1; $discountClass->save($newCoupon); $coupon = $newCoupon; }elseif(count($coupons)==1){ $coupon = reset($coupons); } if(!empty($coupon)){ $cartClass->addCoupon(0, $coupon->discount_code); } if($hikashop_config->get('checkout_legacy', 0)) { $app->setUserState( HIKASHOP_COMPONENT.'.entries_fields', $entriesData); }else{ $cart = $cartClass->get(0); if(!empty($cart->cart_fields) && is_string($cart->cart_fields)) $cart->cart_fields = json_decode($cart->cart_fields); if(!is_object($cart->cart_fields)) $cart->cart_fields = new stdClass(); $cart->cart_fields->_entries = $entriesData; $cartClass->save($cart); } $app->redirect( hikashop_completeLink($url, false, true) ); } } translations.php 0000644 00000002050 15252000453 0007767 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 TranslationsController extends hikashopController{ function __construct($config = array(),$skip=false){ parent::__construct($config,$skip); $this->display[]='load'; if(!$skip){ $this->registerDefaultTask('load'); } hikaInput::get()->set('tmpl','component'); } function load(){ hikashop_nocache(); hikashop_cleanBuffers(); header('X-Robots-Tag: noindex'); $translations = (string) hikaInput::get()->getVar('translations'); if(empty($translations)) { echo '{No translation keys found}'; exit; } $translations = explode(',',$translations); $results = array(); foreach($translations as $translation) { $results[$translation] = JText::_('HIKA_JS_'.$translation); } echo json_encode($results); exit; } } index.html 0000644 00000000034 15252000453 0006532 0 ustar 00 <html><body></body></html> affiliate.php 0000644 00000006553 15252000453 0007206 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 affiliateController extends hikashopController{ var $type='user'; function __construct($config = array(),$skip=false){ parent::__construct($config,$skip); $this->display = array('clicks','leads','sales','cancel',''); $this->modify_views = array('show'); $this->add = array(); $this->modify = array('save','apply'); $this->delete = array(); if(!$skip){ $this->registerDefaultTask('show'); } } function cancel(){ $app = JFactory::getApplication(); global $Itemid; $url = ''; if(!empty($Itemid)){ $url='&Itemid='.$Itemid; } $app->redirect(hikashop_completeLink('user'.$url,false,true)); } function listing(){ return $this->show(); } function show(){ $this->_checkProgramActive('show'); } function apply(){ $status = $this->store(); return $this->show(); } function clicks(){ return $this->_checkStats('clicks'); } function leads(){ return $this->_checkStats('leads'); } function sales(){ return $this->_checkStats('sales'); } function store($new=false){ if(hikashop_getCID('user_id')!=hikashop_loadUser()){ return false; } $app = JFactory::getApplication(); $requestData = hikaInput::get()->getVar('data'); if(empty($requestData['user'])) return false; $userClass = hikashop_get('class.user'); $user = new stdClass(); $user->user_id = hikashop_getCID('user_id'); $user->user_partner_activated = (int)@$requestData['user']['user_partner_activated']; $user->user_partner_email = @$requestData['user']['user_partner_email']; $config =& hikashop_config(); if($config->get('allow_currency_selection')){ $user->user_currency_id = (int)@$requestData['user']['user_currency_id']; } $status = $userClass->save($user); if($status) { if(!HIKASHOP_J30) $app->enqueueMessage(JText::_( 'HIKASHOP_SUCC_SAVED' ), 'success'); else $app->enqueueMessage(JText::_( 'HIKASHOP_SUCC_SAVED' )); if(!$new) hikaInput::get()->set( 'cid', $status ); else hikaInput::get()->set( 'cid', 0 ); hikaInput::get()->set( 'fail', null ); } else { $app->enqueueMessage(JText::_( 'ERROR_SAVING' ), 'error'); if(!empty($userClass->errors)){ foreach($userClass->errors as $oneError){ $app->enqueueMessage($oneError, 'error'); } } } return $status; } function _checkStats($type=''){ $config =& hikashop_config(); $advanced_stats = $config->get('affiliate_advanced_stats',1); if($advanced_stats && hikashop_loadUser()){ if($this->_checkProgramActive()){ hikaInput::get()->set( 'layout', $type ); return $this->display(); }else{ return false; } }else{ return $this->show(); } } function _checkProgramActive($type=''){ $plugin = JPluginHelper::getPlugin('system', 'hikashopaffiliate'); if(empty($plugin)){ $app = JFactory::getApplication(); $app->enqueueMessage('Affiliate program not available. Please make sure the HikaShop Affiliate System plugin is enabled.','error'); return false; } if(!empty($type)){ parent::$type(); } return true; } } checkout_legacy.php 0000644 00000165047 15252000453 0010417 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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->enqueueMessage(JText::_('CART_EMPTY')); $app->redirect( $this->redirect_url ); } 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->enqueueMessage(JText::_('CART_EMPTY')); $app->redirect( $this->redirect_url ); } $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; } } category.php 0000644 00000001031 15252000453 0007061 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 categoryController extends hikashopController{ var $modify = array(); var $delete = array(); var $modify_views = array(); function authorize($task){ if($this->isIn($task,array('display'))){ return true; } return false; } } checkout.php 0000644 00000054601 15252000453 0007064 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 HIKARI SOFTWARE. All rights reserved. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ defined('_JEXEC') or die('Restricted access'); ?><?php $hikashop_config =& hikashop_config(); if($hikashop_config->get('checkout_legacy', 0)) { require_once dirname(__FILE__) . '/checkout_legacy.php'; } else { class checkoutLegacyController extends hikashopController {} } class checkoutController extends checkoutLegacyController { public $display = array( 'show', 'showblock', '', 'step', 'state', 'notice', 'notify', 'activate', 'submitblock', 'submitstep', 'termsandconditions', 'confirm','after_end','threedsecure', 'privacyconsent', 'activate_page', ); public $modify_views = array(); public $add = array(); public $modify = array(); public $delete = array(); protected $config = null; protected $app = null; protected $dispatcher = null; public function __construct($config = array(), $skip = false) { parent::__construct($config, $skip); $this->config =& hikashop_config(); $this->app = JFactory::getApplication(); if($skip) return; if($this->config->get('checkout_legacy', 0)) $this->registerDefaultTask('step'); else $this->registerDefaultTask('show'); if($this->config->get('checkout_legacy', 0)) return; $cart_id = hikaInput::get()->getInt('cart_id', 0); hikashop_get('helper.checkout'); $checkoutHelper = hikashopCheckoutHelper::get($cart_id); $this->workflow = $checkoutHelper->checkout_workflow; } public function display($cachable = false, $urlparams = array()) { $document = JFactory::getDocument(); $view = $this->getView('', $document->getType(), ''); if($view->getLayout() == 'default' && hikaInput::get()->getString('layout', '') != '') $view->setLayout(hikaInput::get()->getString('layout')); return parent::display($cachable, $urlparams); } public function termsandconditions() { hikaInput::get()->set('layout', 'termsandconditions'); return $this->display(); } public function privacyconsent() { hikaInput::get()->set('layout', 'privacyconsent'); return $this->display(); } public function step() { if($this->config->get('checkout_legacy', 0)) return parent::step(); return $this->show(); } public function state() { if(!headers_sent()) header('Content-Type:text/html; charset=utf-8'); $namekey = hikaInput::get()->getCmd('namekey', ''); $field_namekey = hikaInput::get()->getString('field_namekey', ''); $field_id = hikaInput::get()->getString('field_id', ''); $field_type = hikaInput::get()->getString('field_type', ''); $zoneClass = hikashop_get('class.zone'); echo $zoneClass->getStateDropdownContent($namekey, $field_namekey, $field_id, $field_type); exit; } public function show() { if($this->config->get('checkout_legacy', 0)) return parent::step(); hikashop_nocache(); $checkoutHelper = hikashopCheckoutHelper::get(); $cart = $checkoutHelper->getCart(); if(empty($cart) || empty($cart->cart_id) || empty($cart->products)) { if(!empty($cart->messages)) { foreach($cart->messages as $msg) { $this->app->enqueueMessage($msg['msg'], $msg['type']); } } $override = false; if($this->app->getUserState('com_hikashop.cart_empty_redirect') > time()-1) { $this->app->setUserState('com_hikashop.cart_empty_redirect', 0); $override = true; } else { $this->app->setUserState('com_hikashop.cart_empty_redirect', time()); } $this->setRedirect($checkoutHelper->getRedirectUrl($override), JText::_('CART_EMPTY')); return true; } $cart_id_param = hikaInput::get()->getInt('cart_id', 0); if(!empty($cart_id_param) && $cart_id_param != $checkoutHelper->getCartId()) { $override = false; if($this->app->getUserState('com_hikashop.cart_empty_redirect') > time()-1) { $this->app->setUserState('com_hikashop.cart_empty_redirect', 0); $override = true; } else { $this->app->setUserState('com_hikashop.cart_empty_redirect', time()); } $this->setRedirect($checkoutHelper->getRedirectUrl($override), JText::_('CART_EMPTY')); return true; } $task = hikaInput::get()->getString('task', ''); if($task != 'submitstep') { global $Itemid; $checkout_itemid = $Itemid; $itemid_for_checkout = (int)$this->config->get('checkout_itemid', 0); if(!empty($itemid_for_checkout) && $checkout_itemid != $itemid_for_checkout && (int)$this->app->getUserState('com_hikashop.checkout_itemid', 0) == 0) { $checkout_itemid = $itemid_for_checkout; $this->app->setUserState('com_hikashop.checkout_itemid', $itemid_for_checkout); } else if((int)$this->app->getUserState('com_hikashop.checkout_itemid', 0) > 0) $this->app->setUserState('com_hikashop.checkout_itemid', 0); $ssl = false; if(( (int)$this->config->get('force_ssl', 0) == 1 || $this->config->get('force_ssl', 0) == 'url') && $this->app->getUserState('com_hikashop.ssl_redirect') != 1 && !hikashop_isSSL()) { $ssl = true; $this->app->setUserState('com_hikashop.ssl_redirect', 1); } if($ssl || $checkout_itemid != $Itemid) { if($ssl && $this->config->get('force_ssl', 0) == 'url') { $url = str_replace('http://', 'https://', $this->config->get('force_ssl_url')); if(strpos($url, 'https://') === false) $url = 'https://' . $url; $requestUri = $_SERVER['PHP_SELF']; $str_start = strpos($requestUri, 'index.php'); if($str_start > 0) $requestUri = substr($requestUri, $str_start - 1, strlen($requestUri)); if(!empty($_SERVER['QUERY_STRING'])) $requestUri = rtrim($requestUri, '/') . '?' . $_SERVER['QUERY_STRING']; $this->app->redirect($url . $requestUri); return true; } $url = ''; $menusClass = hikashop_get('class.menus'); $valid_menu = $menusClass->loadAMenuItemId('checkout', 'show', $checkout_itemid); if(empty($valid_menu)) { $url .= '&ctrl=checkout'; } $cart_id = hikaInput::get()->getInt('cart_id', 0); $url .= (!empty($cart_id)) ? '&cart_id='.$cart_id : ''; $url .= ($checkout_itemid != $Itemid) ? ('&Itemid=' . $checkout_itemid) : ''; $this->setRedirect(JRoute::_('index.php?option=' . HIKASHOP_COMPONENT . $url, false, $ssl)); return true; } } if($checkoutHelper->isStoreClosed()) { hikaInput::get()->set('layout', 'shop_closed'); return $this->display(); } $url_cart_param = ($cart_id_param > 0) ? '&cart_id='.$cart_id_param : ''; $step = hikashop_getCID('step'); if($step < 0 || $step >= count($this->workflow['steps'])) $this->app->redirect(hikashop_completeLink('checkout&task=show'.$url_cart_param.'&Itemid='.$checkout_itemid, false, true)); if($step > 0) $step--; $check = $this->checkWorkflowSteps($step); if($check !== true) $this->app->redirect(hikashop_completeLink('checkout&task=show&cid=' . ((int)$check + 1).$url_cart_param.'&Itemid='.$checkout_itemid, false, true)); $check = $this->checkWorkflowEmptyStep($step); if($check !== true && $check !== false && $check > 0 && $check != $step) { $this->app->redirect(hikashop_completeLink('checkout&task=show&cid=' . ((int)$check + 1).$url_cart_param.'&Itemid='.$checkout_itemid, false, true)); } $this->app->setUserState('com_hikashop.cart_empty_redirect', 0); $this->app->setUserState('com_hikashop.checkout_itemid', 0); hikaInput::get()->set('layout', 'show'); return $this->display(); } public function showblock() { hikashop_nocache(); $checkoutHelper = hikashopCheckoutHelper::get(); $tmpl = hikaInput::get()->getCmd('tmpl', ''); hikaInput::get()->set('layout', 'showblock'); if(in_array($tmpl, array('component', 'ajax', 'raw'))) { ob_end_clean(); echo hikashop_getHTML(function() { $this->display(); }); if(!headers_sent()) header('X-Robots-Tag: noindex'); $this->app->triggerEvent('onAfterRender'); exit; } return $this->display(); } public function submitblock() { if(!JSession::checkToken('request')) { $tmpl = hikaInput::get()->getCmd('tmpl', ''); if(in_array($tmpl, array('ajax', 'raw'))) { echo '401'; if(!headers_sent()) header('X-Robots-Tag: noindex'); exit; } jexit('Invalid Token'); } $checkoutHelper = hikashopCheckoutHelper::get(); $workflow_step = hikashop_getCID('step'); if($workflow_step > 0) $workflow_step--; $step = ($workflow_step + 1); $block_task = hikaInput::get()->getCmd('blocktask', ''); if(empty($block_task)) { echo 'Task could not be retrieved from input. Please check that you have the blocktask parameter in your request'; return false; } $block_pos = hikaInput::get()->getInt('blockpos', 0); $workflow = $checkoutHelper->checkout_workflow; if(empty($workflow['steps'][$workflow_step]['content'])) { echo 'Workflow for step ' . $workflow_step . ' could not be found'; return false; } if(empty($workflow['steps'][$workflow_step]['content'][$block_pos])) { echo 'Workflow for position ' . $block_pos . ' of step ' . $workflow_step . ' could not be found'; return false; } if($workflow['steps'][$workflow_step]['content'][$block_pos]['task'] != $block_task) { echo 'Task "' . $block_task . '" incompatible with the task "' . $workflow['steps'][$workflow_step]['content'][$block_pos]['task'] . '" of the workflow for position ' . $block_pos . ' of step ' . $workflow_step . ' could not be found'; return false; } $content = $workflow['steps'][$workflow_step]['content'][$block_pos]; if(empty($content['params'])) $content['params'] = array(); $content['params']['src'] = array( 'step' => $step, 'workflow_step' => $workflow_step, 'pos' => $block_pos, 'context' => 'submitblock' ); $cartMarkers = $checkoutHelper->getCartMarkers(); $ctrl = hikashop_get('helper.checkout-' . $block_task); if(!empty($ctrl)) { $ret = $ctrl->validate($this, $content['params']); } else { $this->initDispatcher(); $go_back = false; $original_go_back = false; $obj =& $this; $ret = $this->app->triggerEvent('onAfterCheckoutStep', array($block_task, &$go_back, $original_go_back, &$obj)); } if(!empty($ret)) { if(!is_null($checkoutHelper->redirectBeforeDisplay)) { $new_messages = array(array('msg' => $checkoutHelper->redirectBeforeDisplay, 'type' => 'message')); $cart = $checkoutHelper->getCart(); if(!empty($cart->messages)) $new_messages = array_merge($new_messages, $cart->messages); $session = JFactory::getSession(); $old_messages = $session->get('application.queue', array()); $session->set('application.queue', array_merge($old_messages, $new_messages)); $checkoutHelper->addEvent('cart.empty', null); } $checkoutHelper->generateBlockEvents($cartMarkers, array( 'src' => array('step' => $step, 'pos' => $block_pos) )); $emptyStep = $this->checkWorkflowEmptyStep($workflow_step); if($emptyStep !== false && $emptyStep !== true && $emptyStep > 0 && $emptyStep != $workflow_step) { $checkoutHelper->addEvent('checkout.step.completed'); } } return $this->showblock(); } public function submitstep() { JSession::checkToken('request') || die('Invalid Token'); $checkoutHelper = hikashopCheckoutHelper::get(); $step = hikashop_getCID('step'); $workflow_step = hikashop_getCID('step'); if($workflow_step > 0) $workflow_step--; $step = ($workflow_step + 1); $workflow = $checkoutHelper->checkout_workflow; if(empty($workflow['steps'][$workflow_step]['content'])) return false; $cartMarkers = $checkoutHelper->getCartMarkers(); $errors = 0; foreach($workflow['steps'][$workflow_step]['content'] as $block_pos => &$step_content) { if($step_content['task'] == 'confirm') continue; $ctrl = hikashop_get('helper.checkout-' . $step_content['task']); if(empty($step_content['params'])) $step_content['params'] = array(); $step_content['params']['src'] = array( 'step' => $step, 'workflow_step' => $workflow_step, 'pos' => $block_pos, 'context' => 'submitstep' ); if(!empty($ctrl)) { $ret = $ctrl->validate($this, $step_content['params']); } else { $this->initDispatcher(); $go_back = false; $original_go_back = false; $obj =& $this; $ret = $this->app->triggerEvent('onAfterCheckoutStep', array($step_content['task'], &$go_back, $original_go_back, &$obj)); if(is_array($ret) && empty($ret)) $ret = true; if($go_back == true) $ret = false; } if(!$ret) $errors++; } unset($step_content); if(!empty($checkoutHelper->redirectBeforeDisplay)){ $this->app->enqueueMessage($checkoutHelper->redirectBeforeDisplay); $this->app->redirect($checkoutHelper->getRedirectUrl()); } if($errors > 0) return $this->show(); $newMarkers = $checkoutHelper->getCartMarkers(); foreach($cartMarkers as $k => $v) { if($k == 'plugins') continue; $check = true; foreach($workflow['steps'][$workflow_step]['content'] as $block_pos => $step_content) { $ctrl = hikashop_get('helper.checkout-' . $step_content['task']); if(!empty($ctrl)) { $check = $ctrl->checkMarker($k, $cartMarkers, $newMarkers, $this, $step_content['params']); } else { } if(!$check) break; } if($check && $v !== $newMarkers[$k]) return $this->show(); } if(!empty($cartMarkers['plugins'])) { foreach($cartMarkers['plugins'] as $k => $v) { if($v === $newMarkers['plugins'][$k]) continue; return $this->show(); } } global $Itemid; $checkout_itemid = (int)$Itemid; $itemid_for_checkout = (int)$this->config->get('checkout_itemid', 0); if(!empty($itemid_for_checkout) && $checkout_itemid != $itemid_for_checkout) $checkout_itemid = $itemid_for_checkout; $cart_id_param = hikaInput::get()->getInt('cart_id', 0); $url_cart_param = ($cart_id_param > 0) ? '&cart_id='.$cart_id_param : ''; $valid = $this->checkWorkflowSteps($workflow_step); if($valid !== true) { $url = $checkoutHelper->completeLink('cid='.($valid + 1).$url_cart_param, false, true, false, $checkout_itemid); $this->app->redirect($url); } if($step + 1 == count($workflow['steps'])) { $cart = $checkoutHelper->getCart(); $this->app->redirect(hikashop_completeLink('checkout&task=confirm'.$url_cart_param.'&Itemid='.$checkout_itemid, false, true)); } $url = $checkoutHelper->completeLink('cid='.($step + 1).$url_cart_param, false, true, false, $checkout_itemid); $this->app->redirect($url); } private function initDispatcher() { JPluginHelper::importPlugin('hikashop'); JPluginHelper::importPlugin('hikashoppayment'); JPluginHelper::importPlugin('hikashopshipping'); } private function checkWorkflowSteps($step) { for($i = 0; $i < $step; $i++) { $validated = true; foreach($this->workflow['steps'][$i]['content'] as $k => $content) { $task = $content['task']; if(empty($content['params'])) $content['params'] = array(); $content['params']['src'] = array( 'step' => $i+1, 'workflow_step' => $i, 'pos' => $k, 'context' => 'submitblock' ); $ctrl = hikashop_get('helper.checkout-' . $task); if(!empty($ctrl)) { $ret = $ctrl->check($this, $content['params']); if($ret === false) $validated = false; } else { $this->initDispatcher(); $go_back = ($validated == false); $original_go_back = ($validated == false); $obj =& $this; $this->app->triggerEvent('onAfterCheckoutStep', array($task, &$go_back, $original_go_back, &$obj)); if($go_back) $validated = false; } } if(!$validated) return $i; } return true; } private function checkWorkflowEmptyStep($step) { if(empty($this->workflow['steps'][$step]['content'])) return true; $empty = true; foreach($this->workflow['steps'][$step]['content'] as $k => $content) { $task = $content['task']; $ctrl = hikashop_get('helper.checkout-' . $task); if(!empty($ctrl)) { $ret = $ctrl->haveEmptyContent($this, $content['params']); if($ret !== true) $empty = false; } else { $empty = false; } if($empty == false) break; } if($empty == false) return true; return ($step + 1); } public 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; } } public 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; } } public function after_end() { if($this->config->get('checkout_legacy', 0)) { return parent::after_end(); } $order_id = hikaInput::get()->getInt('order_id'); if(empty($order_id)) { $app = JFactory::getApplication(); $order_id = $app->getUserState('com_hikashop.order_id'); } $cartClass = hikashop_get('class.cart'); $cartClass->cleanCartFromSession(); $orderClass = hikashop_get('class.order'); $order = $orderClass->get($order_id); $order_token = hikaInput::get()->getString('order_token'); if(empty($order_token)) { $app = JFactory::getApplication(); $order_token = $app->getUserState('com_hikashop.order_token'); } if(empty($order) || (hikashop_loadUser(false) != $order->order_user_id && $order->order_token != $order_token)) return false; hikaInput::get()->set('layout', 'after_end'); return $this->display(); } public function confirm() { $checkoutHelper = hikashopCheckoutHelper::get(); global $Itemid; $checkout_itemid = (int)$Itemid; $itemid_for_checkout = (int)$this->config->get('checkout_itemid', 0); if(!empty($itemid_for_checkout) && $checkout_itemid != $itemid_for_checkout) $checkout_itemid = $itemid_for_checkout; $step = -1; if(!empty($this->workflow['steps'])) $step = count($this->workflow['steps']); if($step < 0) $this->app->redirect($checkoutHelper->completeLink('', false, true, false, $checkout_itemid)); if($step > 0) $step--; if($checkoutHelper->isStoreClosed()) { hikaInput::get()->set('layout', 'shop_closed'); return $this->display(); } $cart = $checkoutHelper->getCart(); if(empty($cart) || empty($cart->cart_id) || empty($cart->products)) { if(!empty($cart->messages)) { foreach($cart->messages as $msg) { $this->app->enqueueMessage($msg['msg'], $msg['type']); } } $this->app->setUserState('com_hikashop.cart_empty_redirect', 1); $this->setRedirect($checkoutHelper->getRedirectUrl(), JText::_('CART_EMPTY')); return true; } $check = $this->checkWorkflowSteps($step); if($check !== true) $this->app->redirect($checkoutHelper->completeLink('cid='.((int)$check + 1), false, true, false, $checkout_itemid)); $old_messages = $this->app->getMessageQueue(); $cart = $checkoutHelper->getCart(); if(!empty($cart->messages)) { foreach($cart->messages as $msg) { $this->app->enqueueMessage($msg['msg'], $msg['type']); } $this->app->redirect($checkoutHelper->completeLink('cid='.((int)$step + 1), false, true, false, $checkout_itemid)); } $orderClass = hikashop_get('class.order'); $order = $orderClass->createFromCart($cart->cart_id); if($order === false) { $new_messages = $this->app->getMessageQueue(); if(count($new_messages) <= count($old_messages)) { $this->app->enqueueMessage('A plugin cancelled the update of the order creation without displaying any error message.'); } $this->app->redirect($checkoutHelper->completeLink('cid='.((int)$step + 1), false, true, false, $checkout_itemid)); } unset($old_messages); $this->app->setUserState('com_hikashop.order_id', $order->order_id); $this->app->setUserState('com_hikashop.order_token', @$order->order_token); hikaInput::get()->set('order_token', $order->order_token ); if(!empty($order->options->remove_cart) || $this->config->get('clean_cart') == 'order_created' || $order->order_status == $this->config->get('order_confirmed_status', 'confirmed') ) { $order_id = false; if(!empty($order->options->remove_cart)) $order_id = (int)$order->order_id; $cartClass = hikashop_get('class.cart'); $cartClass->cleanCartFromSession($order_id, $cart->cart_id); } hikaInput::get()->set('layout', 'end'); return $this->display(); } public function activate_page() { hikaInput::get()->set('layout', 'activate_page'); return parent::display(); } public function notice() { $cart_type = hikaInput::get()->post->getVar('cart_type', ''); if(!empty($cart_type)) { $this->app->setUserState(HIKASHOP_COMPONENT.'.popup_cart_type', $cart_type); } hikaInput::get()->set('layout', 'notice'); return $this->display(); } public function initCart($reset = false) { if($this->config->get('checkout_legacy', 0)) return parent::initCart($reset); $checkoutHelper = hikashopCheckoutHelper::get(); return $checkoutHelper->getCart($reset); } } product.php 0000644 00000072340 15252000453 0006737 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 productController extends hikashopController { public $modify = array(); public $delete = array(); public $modify_views = array(); public function __construct($config = array(), $skip = false) { parent::__construct($config, $skip); $this->display = array_merge($this->display, array( 'updatecart', 'cart', 'cleancart', 'contact', 'compare', 'waitlist', 'send_email', 'add_waitlist', 'price', 'download', 'filter', 'cartinfo' )); } public function authorize($task) { return $this->isIn($task, array('display')); } public function contact() { hikaInput::get()->set('layout', 'contact'); return $this->display(); } public function compare() { hikaInput::get()->set('layout', 'compare'); return $this->display(); } public function waitlist() { hikaInput::get()->set('layout', 'waitlist'); return $this->display(); } public function price() { hikaInput::get()->set('layout', 'option_price'); return $this->display(); } public function listing() { hikaInput::get()->set('layout', 'listing'); $tmpl = hikaInput::get()->getCmd('tmpl', ''); if(in_array($tmpl, array('ajax', 'raw'))) { if(!headers_sent()) header('X-Robots-Tag: noindex'); $result = $this->display(); $filter = hikaInput::get()->getCmd('filter', ''); if(!$filter) exit; return $result; } return $this->display(); } public function filter() { hikaInput::get()->set('layout', 'filter'); if(!headers_sent()) header('X-Robots-Tag: noindex'); return $this->display(); } public function send_email() { JSession::checkToken('request') || die('Invalid Token'); $element = new stdClass(); $formData = hikaInput::get()->get('data', array(), 'array'); if(empty($formData['contact'])) { $formData['contact'] = @$formData['register']; foreach($formData['contact'] as $column => $value) { hikashop_secureField($column); $element->$column = strip_tags($value); } } else { $fieldsClass = hikashop_get('class.field'); $element = $fieldsClass->getInput('contact', $element); } $config =& hikashop_config(); $app = JFactory::getApplication(); JPluginHelper::importPlugin('hikashop'); $send = empty($element->product_id) || (int)$config->get('product_contact', 0); if(empty($element->email)) { $app->enqueueMessage(JText::_('VALID_EMAIL'), 'error'); $send = false; } $app->triggerEvent('onBeforeSendContactRequest', array(&$element, &$send)); jimport('joomla.mail.helper'); $mailer = JFactory::getMailer(); if($config->get('product_contact_email_required', 1) && empty($element->email)) { $app->enqueueMessage(JText::_('EMAIL_INVALID'), 'error'); $send = false; } if(!empty($element->email) && ((method_exists('JMailHelper', 'isEmailAddress') && !JMailHelper::isEmailAddress($element->email)) || !$mailer->validateAddress($element->email))){ $app->enqueueMessage(JText::_('EMAIL_INVALID'), 'error'); $send = false; } if($config->get('product_contact_name_required', 1) && empty($element->name)) { $app->enqueueMessage(JText::_('SPECIFY_A_NAME'), 'error'); $send = false; } if($config->get('product_contact_altbody_required', 1) && empty($element->altbody)) { $app->enqueueMessage(JText::_('PLEASE_FILL_ADDITIONAL_INFO'), 'error'); $send = false; } elseif(!empty($element->altbody)) { $element->altbody = strip_tags($element->altbody); } if(!empty($element->consentcheck) && empty($element->consent)) { $app->enqueueMessage(JText::_('PLEASE_AGREE_TO_PRIVACY_POLICY'), 'error'); $send = false; } if(!$send) { hikaInput::get()->set('formData', $element); $this->contact(); return; } $subject = JText::_('CONTACT_REQUEST'); if(!empty($element->product_id)) { $productClass = hikashop_get('class.product'); $product = $productClass->get((int)$element->product_id); if(!empty($product) && $product->product_type == 'variant') { $db = JFactory::getDBO(); $query = 'SELECT * FROM '.hikashop_table('variant').' AS v '. ' LEFT JOIN '.hikashop_table('characteristic') .' AS c ON v.variant_characteristic_id = c.characteristic_id '. ' WHERE v.variant_product_id = '.(int)$element->product_id.' ORDER BY v.ordering'; $db->setQuery($query); $product->characteristics = $db->loadObjectList(); $parentProduct = $productClass->get((int)$product->product_parent_id); $productClass->checkVariant($product, $parentProduct); } if(!empty($product) && !empty($product->product_name)){ $subject = JText::sprintf('CONTACT_REQUEST_FOR_PRODUCT',strip_tags($product->product_name)); } } $send = $config->get('product_contact_send_email', 1); $app->triggerEvent('onBeforeSendContactRequestEmail', array(&$element, &$send)); if($send) { $mailClass = hikashop_get('class.mail'); $infos = new stdClass(); $infos->element =& $element; $infos->product =& $product; $mail = $mailClass->get('contact_request', $infos); $mail->subject = $subject; $mail->from_email = $config->get('from_email'); $mail->from_name = $config->get('from_name'); if(!empty($element->email)) $mail->reply_email = $element->email; if(empty($mail->dst_email)) { $dst = $config->get('contact_request_email'); if(empty($dst)) $mail->dst_email = array($config->get('from_email')); else $mail->dst_email = explode(',', $dst); } if($config->get('contact_form_copy_checkbox', 0) && !empty($element->copycheck) && empty($element->copy) && !empty($element->email)) { $mail->cc_email = $element->email; } if(!empty($element->email)) { $user_name = ''; if(!empty($element->name)) $user_name = $element->name; if(HIKASHOP_J30) { $mailClass->mailer->addReplyTo($element->email, $user_name); } else { $mailClass->mailer->addReplyTo(array($element->email, $user_name)); } } $status = $mailClass->sendMail($mail); } else { $status = true; } if($status) { $app->enqueueMessage(JText::_('CONTACT_REQUEST_SENT')); if(hikaInput::get()->getString('tmpl', '') == 'component') { $doc = JFactory::getDocument(); $doc->addScriptDeclaration('setTimeout(function(){ window.parent.hikashop.closeBox(); }, 4000);'); return true; } if(!empty($product->product_id)) { $url_itemid = ''; if(!empty($Itemid)) { $url_itemid = '&Itemid='.(int)$Itemid; } if(!isset($productClass)) $productClass = hikashop_get('class.product'); $productClass->addAlias($product); $app->enqueueMessage(JText::sprintf('CLICK_HERE_TO_GO_BACK_TO_PRODUCT',hikashop_contentLink('product&task=show&cid='.$product->product_id.'&name='.$product->alias.$url_itemid, $product))); } } $url = hikaInput::get()->getVar('redirect_url'); if(!empty($url)) { $app->redirect($url); } else { $this->contact(); } } function add_waitlist() { JSession::checkToken('request') || die('Invalid Token'); $element = new stdClass(); $formData = hikaInput::get()->get('data', array(), 'array'); foreach($formData['register'] as $column => $value){ hikashop_secureField($column); $element->$column = strip_tags($value); } $hkUser = hikashop_loadUser(true); $app = JFactory::getApplication(); if(empty($element->email)) { if(empty($hkUser->user_email)) { $app->enqueueMessage(JText::_('VALID_EMAIL')); return $this->waitlist(); } else { $element->email = $hkUser->user_email; } } if(empty($element->name) && !empty($hkUser->name)) { $element->name = $hkUser->name; } jimport('joomla.mail.helper'); $mailer = JFactory::getMailer(); if($element->email && (!JMailHelper::isEmailAddress($element->email) || !$mailer->validateAddress($element->email))) { $app->enqueueMessage(JText::_('EMAIL_INVALID'), 'error'); return $this->waitlist(); } if(!empty($element->consentcheck) && empty($element->consent)) { $app->enqueueMessage(JText::_('PLEASE_AGREE_TO_PRIVACY_POLICY'), 'error'); return $this->waitlist(); } $config =& hikashop_config(); if(!$config->get('product_waitlist', 0)) { return $this->waitlist(); } $waitlist_subscribe_limit = $config->get('product_waitlist_sub_limit',10); $product_id = 0; $itemId = hikaInput::get()->getVar('Itemid'); $url_itemid = ''; if(!empty($itemId)) $url_itemid = '&Itemid='.$itemId; $alias = ''; if(!empty($element->product_id)){ $productClass = hikashop_get('class.product'); $product = $productClass->get((int)$element->product_id); if(!empty($product)){ if($product->product_type=='variant'){ $db = JFactory::getDBO(); $db->setQuery('SELECT * FROM '.hikashop_table('variant').' AS a LEFT JOIN '.hikashop_table('characteristic') .' AS b ON a.variant_characteristic_id=b.characteristic_id WHERE a.variant_product_id='.(int)$element->product_id.' ORDER BY a.ordering'); $product->characteristics = $db->loadObjectList(); $parentProduct = $productClass->get((int)$product->product_parent_id); $productClass->checkVariant($product,$parentProduct); } $product_id = (int)$product->product_id; $productClass->addAlias($product); $alias = $product->alias; } } if( $product_id == 0 ) { return $this->waitlist(); } $email = (!empty($element->email)) ? $element->email : ''; $name = (!empty($element->name)) ? $element->name : ''; $db = JFactory::getDBO(); $sql = 'SELECT waitlist_id FROM '.hikashop_table('waitlist').' WHERE email='.$db->quote($email).' AND product_id='.(int)$product_id; $db->setQuery($sql); $subscription = $db->loadResult(); if(empty($subscription)) { $sql = 'SELECT count(*) FROM '.hikashop_table('waitlist').' WHERE product_id='.(int)$product_id; $db->setQuery($sql); $subscriptions = $db->loadResult(); if( $subscriptions < $waitlist_subscribe_limit || $waitlist_subscribe_limit <= 0 ) { $lang = JFactory::getLanguage(); $tag = $lang->getTag(); $sql = 'INSERT IGNORE INTO '.hikashop_table('waitlist').' (`product_id`,`date`,`email`,`name`,`product_item_id`,`language`) VALUES ('.(int)$product_id.', '.time().', '.$db->quote($email).', '.$db->quote($name).', '.(int)$itemId.', '.$db->quote($tag).');'; $db->setQuery($sql); $db->execute(); $app->enqueueMessage(JText::_('WAITLIST_SUBSCRIBE')); $subject = JText::_('WAITLIST_REQUEST'); if(!empty($product->product_name)) { $subject = JText::sprintf('WAITLIST_REQUEST_FOR_PRODUCT', strip_tags($product->product_name)); } $mailClass = hikashop_get('class.mail'); $infos = new stdClass(); $infos->user =& $element; $infos->product =& $product; $mail = $mailClass->get('waitlist_admin_notification', $infos); $mail->subject = $subject; $mail->from_email = $config->get('from_email'); $mail->from_name = $config->get('from_name'); $mail->reply_email = $element->email; if(empty($mail->dst_email)) $mail->dst_email = array($config->get('from_email')); $status = $mailClass->sendMail($mail); } else { $app->enqueueMessage(JText::_('WAITLIST_FULL')); } } else { $app->enqueueMessage(JText::_('ALREADY_REGISTER_WAITLIST')); } $tmpl = hikaInput::get()->getString('tmpl'); $app->enqueueMessage(JText::sprintf('CLICK_HERE_TO_GO_BACK_TO_PRODUCT',hikashop_contentLink('product&task=show&cid='.$product->product_id.'&name='.$alias.$url_itemid,$product, $tmpl == 'component'))); $url = hikaInput::get()->getVar('redirect_url'); if(!empty($url)){ $app->redirect($url); }else{ $this->waitlist(); } } public function cleancart() { hikashop_nocache(); $cartClass = hikashop_get('class.cart'); $cart_id = $cartClass->getCurrentCartId(); if(!empty($cart_id)) $cartClass->delete($cart_id); $url = hikaInput::get()->getVar('return_url', ''); if(empty($url)) { $url = hikaInput::get()->getVar('url', ''); $url = urldecode($url); } else { $url = base64_decode(urldecode($url)); } if(HIKASHOP_J30){ $plugin = JPluginHelper::getPlugin('system', 'cache'); $params = new JRegistry(@$plugin->params); $options = array( 'defaultgroup' => 'page', 'browsercache' => $params->get('browsercache', false), 'caching' => false, ); $cache = JCache::getInstance('page', $options); $cache->clean(); } if(empty($url)) { echo '<html><head><script type="text/javascript">history.go(-1);</script></head><body></body></html>'; exit; } if(strpos($url, 'tmpl=component') !== false || strpos($url, 'tmpl-component') !== false) { if(!empty($_SERVER['HTTP_REFERER'])) { $app = JFactory::getApplication(); $app->redirect($_SERVER['HTTP_REFERER']); } else { echo '<html><head><script type="text/javascript">history.back();</script></head><body></body></html>'; exit; } } if(hikashop_disallowUrlRedirect($url)) return false; $this->setRedirect($url); } public function updatecart() { hikashop_nocache(); if(!headers_sent()) header('X-Robots-Tag: noindex'); $char = hikaInput::get()->getString('characteristic', ''); if(!empty($char)) return $this->show(); $config = hikashop_config(); $app = JFactory::getApplication(); $cartClass = hikashop_get('class.cart'); $product_id = hikaInput::get()->getInt('product_id', 0); $module_id = hikaInput::get()->getInt('module_id', 0); $reset_cart = hikaInput::get()->getInt('reset_cart', 0); $tmpl = hikaInput::get()->getCmd('tmpl', ''); if(empty($_COOKIE)) { if(in_array($tmpl, array('ajax', 'raw'))) { $ret = array( 'ret' => 0, 'message' => JText::_('COOKIES_REQUIRED_FOR_OPERATION') ); hikashop_cleanBuffers(); echo json_encode($ret); exit; } $privacy_plugin_present = false; try { $db = JFactory::getDBO(); $db->setQuery("SELECT extension_id FROM #__extensions WHERE `type` = 'plugin' AND `folder` = 'system' AND `element` = 'eprivacy' AND `enabled` = '1'"); $privacy_plugin_present = $db->loadResult(); } catch(Exception $e) { } if($privacy_plugin_present) { echo hikashop_display(JText::_('COOKIES_REQUIRED_FOR_OPERATION'), 'error'); return; } } $cart_type = hikaInput::get()->getString('hikashop_cart_type_'.$product_id.'_'.$module_id, null); if(empty($cart_type)) $cart_type = hikaInput::get()->getString('hikashop_cart_type_'.$module_id, null); if(empty($cart_type)) $cart_type = hikaInput::get()->getString('cart_type', 'cart'); $cart_id = hikaInput::get()->get->getInt('cart_id', 0); if(!empty($cart_id)) { $cart = $cartClass->get($cart_id); $cart_id = 0; if(!empty($cart)) // && $cart->cart_type == $cart_type) $cart_id = $cart->cart_id; } if(empty($cart_id)) $cart_id = $cartClass->getCurrentCartId($cart_type); if($cart_id && $reset_cart) { $cart_id = $cartClass->resetCart($cart_id); } if($cart_id === false && $cart_type == 'wishlist' && hikashop_loadUser() == false) { if(in_array($tmpl, array('ajax', 'raw'))) { $ret = array( 'ret' => 0, 'message' => JText::_('LOGIN_REQUIRED_FOR_WISHLISTS'), 'err_wishlist_guest' => 1 ); hikashop_cleanBuffers(); echo json_encode($ret); exit; } $app->enqueueMessage(JText::_('LOGIN_REQUIRED_FOR_WISHLISTS')); return $this->legacyWishlistRedirection(); } if($cart_id === false) { if(in_array($tmpl, array('ajax', 'raw'))) { echo '{ret:0}'; exit; } return false; } if($cart_type != 'wishlist' && $config->get('catalogue')) { if(in_array($tmpl, array('ajax', 'raw'))) { echo '{ret:0}'; exit; } return false; } if($cart_id === 0 && $cart_type != 'cart') { $cart = new stdClass(); $cart->cart_type = $cart_type; $status = $cartClass->save($cart); if(empty($status) && in_array($tmpl, array('ajax', 'raw'))) { echo '{ret:0}'; exit; } if(empty($status)) return false; $cart_id = (int)$status; } $addTo = hikaInput::get()->getString('add_to', ''); $cart_type_id = $cart_type.'_id'; if(!empty($addTo)) { $from_id = $cart_id; if($addTo == 'cart') hikaInput::get()->set('from_id', $cart_id); $cart_id = $app->getUserState(HIKASHOP_COMPONENT.'.'.$addTo.'_id', 0); $cart_type_id = $addTo.'_id'; hikaInput::get()->set('cart_type', $addTo); } else { hikaInput::get()->set('cart_type', $cart_type); } hikaInput::get()->set($cart_type_id, $cart_id); $add = hikaInput::get()->getCmd('add', ''); $add = empty($add) ? 0 : 1; if(empty($product_id)) $product_id = hikaInput::get()->getCmd('cid', 0); $cart_product_id = hikaInput::get()->getInt('cart_product_id', 0); $quantity = hikaInput::get()->getInt('quantity', 1); $status = null; $used_data = null; if (!empty($product_id)) { $type = hikaInput::get()->getWord('type', 'product'); if($type == 'product') $product_id = (int)$product_id; $used_data = array('product' => $product_id, 'quantity' => $quantity); $status = $cartClass->update($product_id, $quantity, $add, $type, true, false, $cart_id); } elseif (!empty($cart_product_id)) { $used_data = array('cart_product' => $cart_product_id, 'quantity' => $quantity); $status = $cartClass->update($cart_product_id, $quantity, $add, 'item', true, false, $cart_id); } else { $formData = hikaInput::get()->get('item', array(), 'array'); $type = 'item'; if(empty($formData)) { $formData = hikaInput::get()->get('data', array(), 'array'); $type = 'product'; } if(count($formData)) { $used_data = array('form' => $formData, 'type' => $type); $status = $cartClass->update($formData, 0, $add, $type, true, false, $cart_id); } } if($status || is_null($status)){ $coupon = hikaInput::get()->getString('coupon'); if(!empty($coupon)) $cartClass->addCoupon($cart_id, $coupon); } $cart = $cartClass->getFullCart($cart_id); if(in_array($tmpl, array('ajax', 'raw'))) { $ret = $this->getAjaxCartData($used_data, $cart, $status); hikashop_cleanBuffers(); echo json_encode($ret); exit; } if(!empty($cart->messages)) { foreach($cart->messages as $msg) { $app->enqueueMessage($msg['msg'], $msg['type']); } } if($status === false && $tmpl != 'component') { if(!empty($_SERVER['HTTP_REFERER'])) { if(strpos($_SERVER['HTTP_REFERER'], HIKASHOP_LIVE) === false && preg_match('#^https?://.*#', $_SERVER['HTTP_REFERER'])) return false; $app->redirect( str_replace('&popup=1','',$_SERVER['HTTP_REFERER'])); } else { echo '<html><head><script type="text/javascript">history.back();</script></head><body></body></html>'; $session = JFactory::getSession(); $session->set('application.queue', $app->getMessageQueue()); exit; } } $checkout = hikaInput::get()->getString('checkout', ''); if(!empty($checkout)) { $this->redirectToCheckout(); return true; } if($cart_type == 'wishlist') return $this->legacyWishlistRedirection(); return $this->legacyCartRedirection(); } public function cartinfo() { $ret = array(); $cartClass = hikashop_get('class.cart'); $cart = $cartClass->getFullCart(); $ret = $cartClass->getCartProductsInfo($cart); hikashop_cleanBuffers(); echo json_encode($ret); exit; } protected function getAjaxCartData($data, $cart, $status) { $cartClass = hikashop_get('class.cart'); $ret = $cartClass->getCartProductsInfo($cart); $ret['ret'] = (int)$status; if(!empty($data['type']) && $data['type'] == 'product' && !empty($data['form']) && count($data['form'])) { $added = array(); foreach($data['form'] as $prod => $qty) { if($qty) $added[] = array('product' => $prod, 'quantity' => $qty); } if(count($added) == 1) { $data = array_merge($data,$added[0]); } } if(!isset($data['product'])) return $ret; $imageHelper = hikashop_get('helper.image'); $config = hikashop_config(); $imageSize = (int)$config->get('addtocart_popup_image_size', 50); if(!empty($cart->products)) { foreach($cart->products as $product) { if($product->product_id != $data['product']) continue; $ret['product_id'] = (int)$product->product_id; $ret['cart_product_id'] = (int)$product->cart_product_id; $ret['product_name'] = $product->product_name; $ret['quantity'] = (int)$product->cart_product_quantity; if($imageSize > 0) { $image_path = (isset($product->images[0]->file_path) ? $product->images[0]->file_path : ''); $img = $imageHelper->getThumbnail($image_path, array($imageSize,$imageSize), array('default' => true), true); if($img->success) $ret['image'] = $img->url; } break; } } if(!isset($ret['product_name'])) { $productClass = hikashop_get('class.product'); $product = $productClass->getProduct($data['product']); if(empty($product->product_name) && !empty($product->parent->product_name)) $product->product_name = $product->parent->product_name; $ret['product_name'] = hikashop_translate($product->product_name); $ret['quantity'] = 0; $ret['cart_product_id'] = 0; $image_path = ((isset($product->parent) && isset($product->parent->images[0]->file_path)) ? $product->parent->images[0]->file_path : ''); $image_path = (isset($product->images[0]->file_path) ? $product->images[0]->file_path : $image_path); $img = $imageHelper->getThumbnail($image_path, array($imageSize,$imageSize), array('default' => true), true); if($img->success) $ret['image'] = $img->url; } if(!empty($cart->messages)) { foreach($cart->messages as $msg) { if(empty($msg['product_id']) || (int)$msg['product_id'] != $data['product']) continue; $ret['message'] = $msg['msg']; break; } } return $ret; } protected function redirectToCheckout() { global $Itemid; $url = 'checkout'; if(!empty($Itemid)){ $url .= '&Itemid=' . $Itemid; } $url = hikashop_completeLink($url, false, true); $this->setRedirect($url); } protected function legacyCartRedirection() { $app = JFactory::getApplication(); $config = hikashop_config(); $app->setUserState(HIKASHOP_COMPONENT.'.popup_cart_type','cart'); $url = hikaInput::get()->getVar('return_url',''); if(empty($url)) { $url = urldecode(hikaInput::get()->getVar('url', '')); } else { $url = base64_decode(urldecode($url)); } $url = str_replace(array('&popup=1','?popup=1'), '', $url); if(hikashop_disallowUrlRedirect($url)) $url = ''; if(empty($url)){ global $Itemid; $url = 'checkout'; if(!empty($Itemid)) $url .= '&Itemid=' . $Itemid; $url = hikashop_completeLink($url, false, true); } $tmpl = hikaInput::get()->getCmd('tmpl', ''); if($tmpl == 'component' && $config->get('redirect_url_after_add_cart', 'stay_if_cart') != 'checkout') { $js =''; jimport('joomla.application.module.helper'); global $Itemid; if(isset($Itemid) && empty($Itemid)) { $Itemid = null; hikaInput::get()->set('Itemid', null); } $module = JModuleHelper::getModule('hikashop_cart', false); $params = new HikaParameter( @$module->params ); if(!empty($module)) $module_options = $config->get('params_'.$module->id); if(empty($module_options)) $module_options = $config->get('default_params'); foreach($module_options as $key => $optionElement) { $params->set($key, $optionElement); } if(!empty($module)) { foreach(get_object_vars($module) as $k => $v) { if(!is_object($v)) $params->set($k,$v); } $params->set('from', 'module'); } $params->set('return_url', $url); header('Content-Type: text/css; charset=utf-8'); echo hikashop_getLayout('product', 'cart', $params, $js); exit; } $params = new HikaParameter(@$module->params); if(hikaInput::get()->getInt('popup', 0) || (hikaInput::get()->getInt('quantity', 0) > 0 && $config->get('redirect_url_after_add_cart', 'stay_if_cart') == 'ask_user')) { $url .= (strpos($url, '?') ? '&' : '?') . 'popup=1'; $app->setUserState(HIKASHOP_COMPONENT.'.popup', 1); } if(hikaInput::get()->getInt('hikashop_ajax', 0) == 0) { $this->setRedirect($url); return false; } ob_clean(); if($params->get('from','module') != 'module' || $config->get('redirect_url_after_add_cart', 'stay_if_cart') == 'checkout') { echo 'URL|' . $url; exit; } $this->setRedirect($url); return false; } protected function legacyWishlistRedirection() { $app = JFactory::getApplication(); $config = hikashop_config(); $app->setUserState( HIKASHOP_COMPONENT.'.popup_cart_type', 'wishlist'); if(hikashop_loadUser() == null) { $url = hikaInput::get()->getVar('return_url', ''); if(!empty($url)) $url = base64_decode(urldecode($url)); $url = str_replace(array('&popup=1', '?popup=1'), '', $url); if($config->get('redirect_url_after_add_cart', 'stay_if_cart') != 'ask_user') $app->enqueueMessage(JText::_('LOGIN_REQUIRED_FOR_WISHLISTS')); $tmpl = hikaInput::get()->getCmd('tmpl', ''); if($tmpl == 'component') { echo 'notLogged'; exit; } if(!empty($_SERVER['HTTP_REFERER'])) { if(strpos($_SERVER['HTTP_REFERER'], HIKASHOP_LIVE) === false && preg_match('#^https?://.*#', $_SERVER['HTTP_REFERER'])) return false; if($config->get('redirect_url_after_add_cart','stay_if_cart') == 'ask_user') $app->enqueueMessage(JText::_('LOGIN_REQUIRED_FOR_WISHLISTS')); $app->redirect( str_replace('&popup=1', '', $_SERVER['HTTP_REFERER'])); } } else { $url = ''; $stay = 0; $redirectConfig = $config->get('redirect_url_after_add_cart', 'stay_if_cart'); switch($redirectConfig) { case 'ask_user': $url = hikaInput::get()->getVar('return_url',''); if(!empty($url)) $url = base64_decode(urldecode($url)); $url = str_replace(array('&popup=1','?popup=1'), '', $url); if(hikaInput::get()->getInt('popup', 0) && empty($_COOKIE['popup']) || hikaInput::get()->getInt('quantity', 0)) { $url .= (strpos($url, '?') ? '&' : '?') . 'popup=1'; $app->setUserState( HIKASHOP_COMPONENT.'.popup', 1); } hikaInput::get()->set('cart_type', 'wishlist'); break; case 'stay': $stay = 1; break; case 'checkout': break; case 'stay_if_cart': default: $module = JModuleHelper::getModule('hikashop_wishlist', false); if($module != null) $stay = 1; break; } if($redirectConfig != 'checkout') { $module = JModuleHelper::getModule('hikashop_wishlist', false); $params = new HikaParameter(@$module->params); if(!empty($module)) $module_options = $config->get('params_'.$module->id); if(empty($module_options)) $module_options = $config->get('default_params'); foreach($module_options as $key => $optionElement) { $params->set($key,$optionElement); } if(!empty($module)) { foreach(get_object_vars($module) as $k => $v) { if(!is_object($v)) $params->set($k,$v); } $params->set('from','module'); } $params->set('return_url', $url); $params->set('cart_type', 'wishlist'); $js = ''; echo hikashop_getLayout('product', 'cart', $params, $js); } } if(empty($url)) { global $Itemid; if(isset($from_id)) $cart_id = $from_id; if(hikaInput::get()->getInt('new_wishlist_id', 0) != 0 && hikaInput::get()->getInt('delete', 0) == 0) $cart_id = hikaInput::get()->getInt('new_wishlist_id', 0); $cartClass = hikashop_get('class.cart'); $cart = $cartClass->get($cart_id, false, 'wishlist'); if(!empty($cart) && (int)$cart_id != 0) { $url = 'cart&task=showcart&cart_type=wishlist&cart_id='.$cart_id.'&Itemid='.$Itemid; } else { $url = 'cart&task=showcarts&cart_type=wishlist&Itemid='.$Itemid; } $url = hikashop_completeLink($url, false, true); } $stay = hikaInput::get()->getInt('stay', 0); if($stay == 0) { if(hikashop_disallowUrlRedirect($url)) return false; if(hikaInput::get()->getVar('from_form', true)) { hikaInput::get()->set('cart_type', 'wishlist'); $this->setRedirect($url); return false; } ob_clean(); echo 'URL|'.$url; exit; } echo '<html><head><script type="text/javascript">history.back();</script></head><body></body></html>'; exit; } public function cart() { $module_id = hikaInput::get()->getInt('module_id', 0); if(empty($module_id)) return false; $tmpl = hikaInput::get()->getVar('tmpl', ''); if(!in_array($tmpl, array('component', 'ajax', 'raw'))) hikaInput::get()->set('tmpl', 'component'); hikaInput::get()->set('layout', 'cart'); ob_clean(); $this->display(); exit; } public function download() { $file_id = hikaInput::get()->getInt('file_id', 0); if(empty($file_id)) return false; $fileClass = hikashop_get('class.file'); $fileClass->download($file_id); return true; } } upload.php 0000644 00000032245 15252000453 0006543 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 uploadController extends hikashopController { var $display = array('upload','image','galleryimage',''); var $modify_views = array('addimage','galleryselect'); var $add = array(); var $modify = array('upload'); var $delete = array(); protected $base_controller = null; public function __construct($config = array(),$skip=false) { parent::__construct($config, $skip); if(!$skip) $this->registerDefaultTask('galleryimage'); $this->config = hikashop_config(); $this->base_controller = null; $this->initController(); } private function initController() { if($this->base_controller != null) return; $controllerName = hikaInput::get()->getVar('uploader', ''); if(!empty($controllerName)) { if(substr($controllerName, 0, 4) == 'plg.') { JPluginHelper::importPlugin('hikashop'); $app = JFactory::getApplication(); $app->triggerEvent('onUploadControllerGet', array($controllerName, &$this->base_controller)); } else $this->base_controller = hikashop_get('controller.'.$controllerName, array(), true); if(!method_exists($this->base_controller, 'getUploadSetting')) $this->base_controller = false; } } public function image() { $this->initController(); $upload_key = hikaInput::get()->getVar('field', ''); if(empty($this->base_controller)) return false; $uploadConfig = $this->base_controller->getUploadSetting($upload_key, 'image'); if($uploadConfig === false) return false; if(!empty($uploadConfig['type']) && $uploadConfig['type'] != 'image') return false; hikaInput::get()->set('layout', 'sendfile'); hikaInput::get()->set('uploadConfig', $uploadConfig); return parent::display(); } public function galleryimage() { $this->initController(); $upload_key = hikaInput::get()->getVar('field', ''); if(empty($this->base_controller)) return false; $uploadConfig = $this->base_controller->getUploadSetting($upload_key, 'galleryimage'); if($uploadConfig === false) return false; if(!empty($uploadConfig['type']) && $uploadConfig['type'] != 'image') return false; hikaInput::get()->set('layout', 'galleryimage'); hikaInput::get()->set('uploadConfig', $uploadConfig); return parent::display(); } public function addImage() { $this->initController(); $upload_key = hikaInput::get()->getVar('field', ''); if(empty($this->base_controller)) return false; $options = array(); $uploadConfig = $this->base_controller->getUploadSetting($upload_key, 'addimage'); if($uploadConfig === false) return false; if(!empty($uploadConfig['type']) && $uploadConfig['type'] != 'image') return false; $layout = 'upload'; if(!empty($uploadConfig['layout'])) $layout = $uploadConfig['layout']; $viewName = ''; if(!empty($uploadConfig['view'])) $viewName = $uploadConfig['view']; $type = 'image'; if(!empty($uploadConfig['type'])) $type = $uploadConfig['type']; if(empty($viewName)) $viewName = ($type == 'image') ? 'image_entry' : 'file_entry'; $extra_data = array(); if(!empty($uploadConfig['extra'])) $extra_data = $uploadConfig['extra']; if(empty($extra_data['field'])) $extra_data['field'] = $upload_key; $this->processUploadOption($options, $type); if(empty($options) || empty($options['upload_dir'])) return false; $uploadHelper = hikashop_get('helper.upload'); $ret = $uploadHelper->processFallback($options); $output = '[]'; if($ret !== false && empty($ret->error)) { $imageHelper = null; if($type == 'image') { $imageHelper = hikashop_get('helper.image'); } $out = array(); foreach($ret as &$r) { if(!empty($r->error)) continue; $file = new stdClass(); $file->file_description = ''; $file->file_name = $r->name; $file->file_type = $type; $file->file_path = $options['sub_folder'].$r->name; $file->file_url = $options['upload_url'].$options['sub_folder']; foreach($extra_data as $k => $v) { $file->$k = $v; } if(strpos($file->file_name, '.') !== false) { $file->file_name = substr($file->file_name, 0, strrpos($file->file_name, '.')); } $r->html = ''; $js = ''; if($type == 'image') { $imageHelper->autoRotate($file->file_path); $img = $imageHelper->getThumbnail($file->file_path, array(100, 100), array('default' => true)); $r->thumbnail_url = $img->url; $params = new stdClass(); $params->file_path = $file->file_path; $params->file_name = $file->file_name; $params->file_url = $file->file_url; } else { $params = new stdClass(); $params->file_name = $file->file_name; $params->file_path = $file->file_path; $params->file_url = $file->file_url; $params->file_limit = -1; $params->file_size = @filesize($options['upload_dir'] . $options['sub_folder'] . $file->file_name); } foreach($extra_data as $k => $v) { $params->$k = $v; } $r->params = $params; $this->base_controller->manageUpload($upload_key, $r, $uploadConfig, 'addimage'); if(empty($r->html)) $r->html = hikashop_getLayout($layout, $viewName, $params, $js); $out[] = $r->html; unset($r->path); unset($r->params); unset($r); } if(!empty($out)) $output = json_encode($out); unset($out); unset($ret); } $js = 'window.hikashop.ready(function(){window.parent.hikashop.submitBox({images:'.$output.'});});'; $doc = JFactory::getDocument(); $doc->addScriptDeclaration($js); return true; } public function galleryselect() { $this->initController(); $upload_key = hikaInput::get()->getVar('field', ''); if(empty($this->base_controller)) return false; $uploadConfig = $this->base_controller->getUploadSetting($upload_key, 'galleryselect'); if($uploadConfig === false) return false; if(!empty($uploadConfig['type']) && $uploadConfig['type'] != 'image') return false; $layout = 'upload'; if(!empty($uploadConfig['layout'])) $layout = $uploadConfig['layout']; $viewName = ''; if(!empty($uploadConfig['view'])) $viewName = $uploadConfig['view']; $type = 'image'; if(!empty($uploadConfig['type'])) $type = $uploadConfig['type']; if(empty($viewName)) $viewName = ($type == 'image') ? 'image_entry' : 'file_entry'; $options = array(); if(!empty($uploadConfig['options'])) $options = $uploadConfig['options']; $extra_data = array(); if(!empty($uploadConfig['extra'])) $extra_data = $uploadConfig['extra']; if(empty($extra_data['field'])) $extra_data['field'] = $upload_key; $this->processUploadOption($options, $type); if(empty($options) || empty($options['upload_dir'])) return false; $filesData = hikaInput::get()->get('files', array(), 'array'); $output = '[]'; if(!empty($filesData)) { $imageHelper = hikashop_get('helper.image'); $ret = array(); $out = array(); foreach($filesData as $filename) { $r = new stdClass(); $r->name = $filename; $r->url = str_replace('//', '/', $options['upload_url'].$options['sub_folder'].rawurlencode($filename)); $r->path = str_replace('//', '/', $options['upload_dir'].$options['sub_folder'].$filename); $r->type = $type; $r->size = filesize($r->path); $params = new stdClass(); $params->file_path = str_replace('//', '/', $options['sub_folder'].$filename); $params->file_name = $filename; $params->file_url = $r->url; foreach($extra_data as $k => $v) { $params->$k = $v; } $js = ''; $r->params = $params; $this->base_controller->manageUpload($upload_key, $r, $uploadConfig, 'galleryselect'); if(empty($r->html)) $r->html = hikashop_getLayout($layout, $viewName, $r->params, $js); unset($r->params); $ret[] = $r; $out[] = $r->html; unset($r); } if(!empty($out)) $output = json_encode($out); unset($out); unset($ret); } $js = 'window.hikashop.ready(function(){window.parent.hikashop.submitBox({images:'.$output.'});});'; $doc = JFactory::getDocument(); $doc->addScriptDeclaration($js); return true; } public function upload() { JSession::checkToken() || die('Invalid Token'); $this->initController(); $config = hikashop_config(); $upload_key = hikaInput::get()->getVar('field', ''); if(empty($this->base_controller)) exit; $uploadConfig = $this->base_controller->getUploadSetting($upload_key, 'upload'); if($uploadConfig === false) { header('HTTP/1.1 403 Forbidden'); exit; } $layout = 'upload'; if(!empty($uploadConfig['layout'])) $layout = $uploadConfig['layout']; $viewName = ''; if(!empty($uploadConfig['view'])) $viewName = $uploadConfig['view']; $type = 'image'; if(!empty($uploadConfig['type'])) $type = $uploadConfig['type']; $options = array(); if(!empty($uploadConfig['options'])) $options = $uploadConfig['options']; $extra_data = array(); if(!empty($uploadConfig['extra'])) $extra_data = $uploadConfig['extra']; if(empty($extra_data['field'])) $extra_data['field'] = $upload_key; if(empty($viewName)) $viewName = ($type == 'image') ? 'image_entry' : 'file_entry'; $this->processUploadOption($options, $type); if(empty($options) || empty($options['upload_dir'])) return false; $max_width = (int)$config->get('max_image_size_width', 0); $max_height = (int)$config->get('max_image_size_height', 0); $uploadHelper = hikashop_get('helper.upload'); $ret = $uploadHelper->process($options); if($ret !== false && empty($ret->error) && empty($ret->partial)) { $imageHelper = null; if($type == 'image') { $imageHelper = hikashop_get('helper.image'); } $file = new stdClass(); $file->file_description = ''; $file->file_name = $ret->name; $file->file_type = $type; $file->file_path = $options['sub_folder'].$ret->name; $file->file_url = $options['upload_url'].$options['sub_folder']; foreach($extra_data as $k => $v) { $file->$k = $v; } if(strpos($file->file_name, '.') !== false) { $file->file_name = substr($file->file_name, 0, strrpos($file->file_name, '.')); } $ret->file = $file; $ret->html = ''; $js = ''; if($type == 'image') { if($max_height > 0 || $max_width > 0) { } $imageHelper->autoRotate($file->file_path); $img = $imageHelper->getThumbnail($file->file_path, array(100, 100), array('default' => true)); $ret->thumbnail_url = $img->url; $params = new stdClass(); $params->file_path = $file->file_path; $params->file_name = $file->file_name; $params->file_url = $file->file_url; } else { $params = new stdClass(); $params->file_name = $file->file_name; $params->file_path = $file->file_path; $params->file_url = $file->file_url; $params->file_limit = -1; $params->file_size = @filesize($options['upload_dir'] . $options['sub_folder'] . $file->file_name); } foreach($extra_data as $k => $v) { $params->$k = $v; } $ret->params = $params; $this->base_controller->manageUpload($upload_key, $ret, $uploadConfig, 'upload'); if(empty($r->html)) $ret->html = hikashop_getLayout($layout, $viewName, $ret->params, $js); } unset($ret->path); unset($ret->params); echo json_encode($ret); exit; } private function processUploadOption(&$options, $type = 'image') { $this->initController(); $shopConfig = hikashop_config(false); if($type == 'image') { if(empty($options['upload_dir'])) $options['upload_dir'] = $shopConfig->get('uploadfolder'); if(empty($options['type'])) $options['type'] = 'image'; } else { if(empty($options['upload_dir'])) $options['upload_dir'] = $shopConfig->get('uploadsecurefolder'); if(empty($options['type'])) $options['type'] = 'file'; } if(empty($options) || empty($options['upload_dir'])) return false; if(empty($options['sub_folder'])) $options['sub_folder'] = ''; else $options['sub_folder'] = str_replace(DS,'/',rtrim($options['sub_folder'], DS).DS); $options['upload_url'] = ltrim(JPath::clean(html_entity_decode($options['upload_dir'])),DS); $options['upload_url'] = str_replace(DS,'/',rtrim($options['upload_url'],DS).DS); $app = JFactory::getApplication(); if(hikashop_isClient('administrator')) { $options['upload_url'] = '../'.$options['upload_url']; } else { $options['upload_url'] = rtrim(JURI::base(true),'/').'/'.$options['upload_url']; } $options['upload_dir'] = rtrim(JPath::clean(html_entity_decode($options['upload_dir'])), DS.' ').DS; if(!preg_match('#^([A-Z]:)?/.*#',$options['upload_dir']) && (substr($options['upload_dir'], 0, 1) != '/' || !is_dir($options['upload_dir']))) { $options['upload_dir'] = JPath::clean(HIKASHOP_ROOT.DS.trim($options['upload_dir'], DS.' ').DS); } return true; } } address.php 0000644 00000021126 15252000453 0006700 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 addressController extends hikashopController { public function __construct($config = array(), $skip = false) { parent::__construct($config, $skip); $this->modify_views = array('edit'); $this->add = array('add'); $this->modify = array('save', 'setdefault'); $this->delete = array('delete'); } public function show() { $tmpl = hikaInput::get()->getCmd('tmpl', ''); if(in_array($tmpl, array('component', 'ajax', 'raw'))) { hikaInput::get()->set('hidemainmenu', 1); hikaInput::get()->set('layout', 'show'); ob_end_clean(); parent::display(); exit; } parent::show(); } public function edit() { $tmpl = hikaInput::get()->getCmd('tmpl', ''); $subtask = hikaInput::get()->getCmd('subtask', ''); $addrtype = hikaInput::get()->getCmd('address_type', ''); $config = hikashop_config(); if(($tmpl == 'raw') || ($tmpl == 'component' && ($addrtype != '' || $subtask != '') && $config->get('checkout_address_selector', 0))) { hikaInput::get()->set('hidemainmenu', 1); hikaInput::get()->set('layout', 'show'); hikaInput::get()->set('edition', true); ob_end_clean(); $app = JFactory::getApplication(); $messages = $app->getMessageQueue(); if(!empty($messages)){ foreach($messages as $message){ hikashop_display($message['message'],'error'); } } echo hikashop_getHTML(function() { parent::display(); }); exit; } parent::edit(); } public function listing() { $user = JFactory::getUser(); if(!$user->guest) { $tmpl = hikaInput::get()->getCmd('tmpl', ''); if(in_array($tmpl, array('ajax', 'raw'))) { hikashop_cleanBuffers(); parent::listing(); exit; } return parent::listing(); } $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST')); global $Itemid; $url = (!empty($Itemid)) ? '&Itemid='.$Itemid : ''; $url = 'index.php?option=com_users&view=login'.$url; $app->redirect(JRoute::_($url.'&return='.urlencode(base64_encode(hikashop_currentUrl('',false))),false)); return false; } public function delete() { $addressdelete = hikaInput::get()->getInt('address_id', 0); if($addressdelete) { JSession::checkToken('request') || die('Invalid Token'); $addressClass = hikashop_get('class.address'); $oldData = $addressClass->get($addressdelete); $user_id = hikashop_loadUser(false); if(!empty($oldData) && $user_id == $oldData->address_user_id) { $addressClass->delete($addressdelete); } return $this->listing(); } $ret = false; $cid = hikashop_getCID('cid'); $tmpl = hikaInput::get()->getCmd('tmpl', ''); if(empty($cid)) return $this->show(); JSession::checkToken('request') || die('Invalid Token'); $addressClass = hikashop_get('class.address'); $old = $addressClass->get($cid); $user_id = hikashop_loadUser(false); if(!empty($old) && $user_id == $old->address_user_id) { $ret = $addressClass->delete($cid); } if(in_array($tmpl, array('ajax', 'raw'))) { if($ret) hikaRegistry::set('address_deleted_id', $cid); return $this->listing(); } if($ret && $tmpl == 'component') { echo '1'; exit; } return $this->show(); } public function setdefault() { $tmpl = hikaInput::get()->getCmd('tmpl', ''); $newDefaultId = hikaInput::get()->getInt('address_default', 0); if(!empty($newDefaultId)) { JSession::checkToken('request') || die('Invalid Token'); } $status = 0; $oldData = null; $addressClass = hikashop_get('class.address'); $user_id = hikashop_loadUser(); if(!empty($newDefaultId)) $oldData = $addressClass->get($newDefaultId); if(!empty($oldData) && $user_id == $oldData->address_user_id) { $oldData->address_default = 1; $type = hikaInput::get()->getString('address_type', ''); $status = $addressClass->save($oldData, 0, $type); } if(in_array($tmpl, array('ajax', 'raw'))) { hikashop_cleanBuffers(); echo '{ret:'.(int)$status.'}'; exit; } return $this->listing(); } public function save() { JSession::checkToken('request') || die('Invalid Token'); $app = JFactory::getApplication(); $addressClass = hikashop_get('class.address'); $task = hikaInput::get()->getVar('subtask', ''); if(!empty($task)) { if(substr($task, -8) != '_address') $task .= '_address'; $result = $addressClass->frontSaveForm($task); if(!empty($result) && !empty($result[$task])) { hikaInput::get()->set('previous_cid', @$result[$task]->previous_id); hikaInput::get()->set('cid', $result[$task]->id); return $this->show(); } return $this->edit(); } $formData = hikaInput::get()->get('address', array(), 'array'); if(!empty($formData)) return $this->saveLegacy(); $result = $addressClass->frontSaveForm(); if($result === false || (isset($result['id']) && $result['id'] === false)) { if(!empty($result['error'])) hikaRegistry::set('address.error', $result['error']); return $this->edit(); } if(is_array($result)) { hikaRegistry::set('previous_cid', @$result['previous_id']); hikaRegistry::set('new_cid', @$result['id']); } else { hikaRegistry::set('new_cid', $result); } return $this->listing(); } protected function saveLegacy() { $app = JFactory::getApplication(); $addressClass = hikashop_get('class.address'); $fieldClass = hikashop_get('class.field'); $oldData = null; $formData = hikaInput::get()->get('address', array(), 'array'); $already = isset($formData['address_id']) ? (int)$formData['address_id'] : 0; unset($formData); if(!empty($already)) $oldData = $addressClass->get($already); $addressData = $fieldClass->getInput('address', $oldData); $ok = true; if(empty($addressData)) { $ok = false; } else { $user_id = hikashop_loadUser(); $addressData->address_user_id=$user_id; hikaInput::get()->set('fail', $addressData); $address_id = $addressClass->save($addressData); } if(!$ok || !$address_id) { $message = ''; if(isset($addressClass->message)) $message = 'alert(\''.addslashes($addressClass->message).'\');'; $this->edit(); return; } global $Itemid; $url = (!empty($Itemid)) ? '&Itemid='.$Itemid : ''; $redirect = hikaInput::get()->getWord('redirect',''); if($redirect == 'checkout') { $makenew = hikaInput::get()->getInt('makenew'); switch(hikaInput::get()->getVar('type')) { case 'shipping': if(hikaInput::get()->getVar('action')== 'add' && $makenew){ $app->setUserState( HIKASHOP_COMPONENT.'.billing_address',$address_id ); } $app->setUserState( HIKASHOP_COMPONENT.'.shipping_address', $address_id ); break; case 'billing': if(hikaInput::get()->getVar('action')== 'add' && $makenew){ $app->setUserState( HIKASHOP_COMPONENT.'.shipping_address',$address_id ); } $app->setUserState( HIKASHOP_COMPONENT.'.billing_address', $address_id ); break; default: $app->setUserState( HIKASHOP_COMPONENT.'.shipping_address',$address_id ); $app->setUserState( HIKASHOP_COMPONENT.'.billing_address',$address_id ); break; } $app->setUserState(HIKASHOP_COMPONENT.'.shipping_data', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_method', null); $app->setUserState(HIKASHOP_COMPONENT.'.shipping_id', null); $app->setUserState(HIKASHOP_COMPONENT.'.payment_data', ''); $app->setUserState(HIKASHOP_COMPONENT.'.payment_method', ''); $app->setUserState(HIKASHOP_COMPONENT.'.payment_id', 0); if(!$already){ $checkoutController = hikashop_get('controller.checkout'); $cart = $checkoutController->initCart(); $checkoutController->update_cart = true; if($cart->has_shipping){ $checkoutController->before_shipping(true); } $checkoutController->before_payment(true); } $url = hikashop_completeLink('checkout&task=step&step='.hikaInput::get()->getInt('step',0).$url,false,true); } else { $url = hikashop_completeLink('address'.$url, false, true); } $tmpl = hikaInput::get()->getCmd('tmpl', ''); if($tmpl == 'component') { ob_clean(); echo '<html><head><script type="text/javascript">window.parent.location.href=\''.$url.'\';</script></head><body></body></html>'; exit; } $app->redirect($url); return false; } } cron.php 0000644 00000001607 15252000453 0006216 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 CronController extends hikashopController{ function __construct($config = array(),$skip=false){ parent::__construct($config,$skip); $this->display[]='cron'; if(!$skip){ $this->registerDefaultTask('cron'); } hikaInput::get()->set('tmpl','component'); } function cron(){ $config =& hikashop_config(); if($config->get('cron') == 'no'){ hikashop_display(JText::_('CRON_DISABLED'),'info'); return false; } $cronHelper = hikashop_get('helper.cron'); $cronHelper->report = true; $launched = $cronHelper->cron(); if($launched){ $cronHelper->report(); } } } currency.php 0000644 00000003567 15252000453 0007116 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 CurrencyController extends hikashopController{ var $modify = array(); var $delete = array(); var $modify_views = array(); function __construct($config = array(),$skip=false){ $this->display[]='update'; if(!$skip){ parent::__construct($config,$skip); $this->registerDefaultTask('update'); } hikaInput::get()->set('tmpl','component'); } function update(){ $currency=hikaInput::get()->getInt('hikashopcurrency',0); if(!empty($currency)){ $app = JFactory::getApplication(); $app->setUserState( HIKASHOP_COMPONENT.'.currency_id', $currency ); $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', null); $app->setUserState(HIKASHOP_COMPONENT.'.payment_data', null); $app->setUserState( HIKASHOP_COMPONENT.'.lang_to_curr', 1 ); $url = hikaInput::get()->getString('return_url',''); if(HIKASHOP_J30){ $plugin = JPluginHelper::getPlugin('system', 'cache'); $params = new JRegistry(@$plugin->params); $options = array( 'defaultgroup' => 'page', 'browsercache' => $params->get('browsercache', false), 'caching' => false, ); $cache = JCache::getInstance('page', $options); $cache->clean(); } if(!empty($url)){ if(hikashop_disallowUrlRedirect($url)) return false; $app->redirect(urldecode($url)); } } return true; } } user.php 0000644 00000022157 15252000453 0006236 0 ustar 00 <?php /** * @package HikaShop for Joomla! * @version 4.5.1 * @author hikashop.com * @copyright (C) 2010-2022 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 userController extends hikashopController { var $delete = array(); var $modify = array(); var $modify_views = array(); var $add = array(); public function __construct($config = array(), $skip = false) { parent::__construct($config,$skip); if(!$skip){ $this->registerDefaultTask('cpanel'); } $this->display = array_merge($this->display, array( 'cpanel', 'form', 'register', 'downloads', 'activate', 'guest_register', 'guest_form' )); } public function register() { if(empty($_REQUEST['data'])) return $this->form(); $userClass = hikashop_get('class.user'); $status = $userClass->registerLegacy($this, 'user'); if(!empty($status)) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::sprintf('THANK_YOU_FOR_REGISTERING', HIKASHOP_LIVE)); hikaInput::get()->set('layout', 'after_register'); return parent::display(); } $this->form(); } public function guest_register() { $order = $this->_checkGuestOrder(); if(!$order) return false; if(empty($_REQUEST['data']) || !is_array($_REQUEST['data']) || !isset($_REQUEST['data']['register'])) return $this->guest_form(); $data = new stdClass(); $requestData = hikaInput::get()->getVar('data'); foreach($requestData['register'] as $k => $v){ $data->$k = $v; } $userClass = hikashop_get('class.user'); $status = $userClass->registerGuest($order->order_user_id, $data); if(!empty($status['status']) && $status['status']) { $app = JFactory::getApplication(); hikashop_get('helper.checkout'); $checkoutHelper = hikashopCheckoutHelper::get(); $cart = $checkoutHelper->getCart(); $jsession = JFactory::getSession(); $old_session = $jsession->getId(); $options = array( 'return' => true, 'remember' => false ); $credentials = array( 'username' => (string)$data->username, 'password' => (string)$data->password ); $old_messages = $app->getMessageQueue(); $result = $app->login($credentials, $options); $user = JFactory::getUser(); if($result !== true || $user->guest) { $new_messages = $app->getMessageQueue(); if(count($old_messages) == count($new_messages)) { $app->enqueueMessage(JText::_('LOGIN_NOT_VALID'), 'error'); } return false; } $jsession = JFactory::getSession(); $new_session = $jsession->getId(); $user_id = $userClass->getID($user->get('id')); if(!empty($user_id)) { $app->setUserState(HIKASHOP_COMPONENT.'.user_id', $user_id); if(!empty($cart)) { $cartClass = hikashop_get('class.cart'); if($cartClass->sessionToUser($cart->cart_id, $old_session, $user_id)) $checkoutHelper->getCart(true); } } $app->enqueueMessage(JText::sprintf('THANK_YOU_FOR_REGISTERING', HIKASHOP_LIVE)); hikaInput::get()->set('layout', 'after_register'); return parent::display(); } foreach($status['messages'] as $message){ if(empty($message)) continue; $app = JFactory::getApplication(); $app->enqueueMessage($message[0], $message[1]); } return $this->guest_form(); } public function guest_form() { if(!$this->_checkGuestOrder()) return false; hikaInput::get()->set('layout', 'guest_form'); return $this->display(); } protected function _checkGuestOrder(){ $app = JFactory::getApplication(); $config = hikashop_config(); if(!$config->get('register_after_guest', 1)){ $app->enqueueMessage(JText::_('REGISTRATION_AFTER_GUEST_CHECKOUT_NOT_ALLOWED')); return false; } jimport('joomla.application.component.helper'); $params = JComponentHelper::getParams('com_users'); if((int)$params->get('allowUserRegistration') == 0) { $app->enqueueMessage(JText::_('REGISTRATION_AFTER_GUEST_CHECKOUT_NOT_ALLOWED')); return false; } $user = JFactory::getUser(); if(!$user->guest) { $app->redirect(hikashop_completeLink('user&task=cpanel', false, true)); return false; } $token = hikaInput::get()->getVar('order_token'); $order_id = hikashop_getCID('order_id'); if(empty($order_id)){ $app->enqueueMessage(JText::_('INVALID_REQUEST')); return false; } $orderClass = hikashop_get('class.order'); $order = $orderClass->get($order_id); if(empty($order)){ $app->enqueueMessage(JText::sprintf('ORDER_X_NOT_FOUND', $order_id)); return false; } $userClass = hikashop_get('class.user'); $user = $userClass->get($order->order_user_id); if(empty($user)){ $app->enqueueMessage(JText::_('INVALID_REQUEST')); return false; } if(empty($user->user_cms_id) || (int)$user->user_cms_id == 0){ if(empty($order->order_token) || $token != $order->order_token){ $app->enqueueMessage(JText::_('INVALID_REQUEST')); return false; } }else{ $app->enqueueMessage(JText::_('USER_ACCOUNT_ALREADY_CREATED')); return false; } return $order; } public function cpanel() { if(!$this->_checkLogin()) return true; hikaInput::get()->set('layout', 'cpanel'); return parent::display(); } function form() { $user = JFactory::getUser(); if($user->guest) { hikaInput::get()->set('layout', 'form'); return $this->display(); } $app = JFactory::getApplication(); $app->redirect(hikashop_completeLink('user&task=cpanel', false, true)); return false; } public function downloads() { if(!$this->_checkLogin()) return true; hikaInput::get()->set('layout', 'downloads'); return parent::display(); } protected function _checkLogin() { $user = JFactory::getUser(); if(!$user->guest) return true; $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST')); global $Itemid; $url = ''; if(!empty($Itemid)) $url = '&Itemid='.$Itemid; $url = 'index.php?option=com_users&view=login'.$url; $app->redirect(JRoute::_($url.'&return='.urlencode(base64_encode(hikashop_currentUrl('', false))), false)); return false; } public function activate() { $app = JFactory::getApplication(); $db = JFactory::getDBO(); $user = JFactory::getUser(); $usersConfig = JComponentHelper::getParams('com_users'); $userActivation = (int)$usersConfig->get('useractivation'); $allowUserRegistration = (int)$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 false; } $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 false; } 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 false; } $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_itemid = ''; if(!empty($Itemid)) $url_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']) && $userClass->login($infos['username'], $infos['pass'])) { $page = hikaInput::get()->getString('page', 'checkout'); if($page == 'checkout') { $app->redirect(hikashop_completeLink('checkout'.$url_itemid, false, true)); } else { 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_itemid; $app->redirect(JRoute::_($url, false)); } }
| ver. 1.4 |
Github
|
.
| PHP 8.5.7 | Generation time: 0 |
proxy
|
phpinfo
|
Settings