Файловый менеджер - Редактировать - /home/lmsyaran/public_html/j3/plugins/hikashop/userpoints/userpoints.php
Назад
<?php /** * @package HikaShop for Joomla! * @version 4.4.1 * @author hikashop.com * @copyright (C) 2010-2021 HIKARI SOFTWARE. All rights reserved. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ defined('_JEXEC') or die('Restricted access'); ?><?php class plgHikashopUserpoints extends hikashopPlugin { var $multiple = true; var $name = 'userpoints'; public function onPluginConfiguration(&$element) { $this->pluginConfiguration($element); $config =& hikashop_config(); $this->main_currency = $config->get('main_currency',1); $currency = hikashop_get('class.currency'); $this->currency = $currency->get($this->main_currency); $this->modes = array(); if($this->getAUP(false, true)) $this->modes[] = JHTML::_('select.option', 'aup', JText::_('ALPHA_USER_POINTS')); if($this->getEasysocial(false)) $this->modes[] = JHTML::_('select.option', 'esp', JText::_('EASYSOCIAL_POINTS')); $this->modes[] = JHTML::_('select.option', 'hk', JText::_('HIKASHOP_USER_POINTS')); $db = JFactory::getDBO(); $db->setQuery('SELECT a.*, a.title as text, a.id as value FROM #__usergroups AS a ORDER BY a.lft ASC'); $this->groups = $db->loadObjectList('id'); foreach($this->groups as $id => $group){ if(isset($this->groups[$group->parent_id])){ $this->groups[$id]->level = intval(@$this->groups[$group->parent_id]->level) + 1; $this->groups[$id]->text = str_repeat('- - ', $this->groups[$id]->level) . $this->groups[$id]->text; } } if(!empty($element->plugin_params->categories)) { $this->categories = hikashop_unserialize($element->plugin_params->categories); if(!empty($this->categories)) { $ids = array(); foreach($this->categories as $cat) { $ids[] = (int)$cat->category_id; } $db = JFactory::getDBO(); $db->setQuery('SELECT * FROM '.hikashop_table('category').' WHERE category_id IN ('.implode(',',$ids).')'); $cats = $db->loadObjectList('category_id'); foreach($this->categories as $k => $cat) { if(!empty($cats[$cat->category_id])) { $this->categories[$k]->category_name = $cats[$cat->category_id]->category_name; } else { $this->categories[$k]->category_name = JText::_('CATEGORY_NOT_FOUND'); } } } } if(!empty($element->plugin_params->groups)) { $element->plugin_params->groups = hikashop_unserialize($element->plugin_params->groups); foreach($this->groups as $id => $group){ $this->groups[$id]->points = (int)@$element->plugin_params->groups[$group->value]; } } } public function onPluginConfigurationSave(&$element) { $categories = hikaInput::get()->get('category', array(), 'array'); $category_points = hikaInput::get()->get('category_points', array(), 'array'); hikashop_toInteger($categories); $cats = array(); if(!empty($categories)) { foreach($categories as $id => $category) { if(!empty($category_points[$id]) && (int)$category_points[$id] != 0) { $obj = new stdClass(); $obj->category_id = $category; $obj->category_points = (int)$category_points[$id]; $cats[] = $obj; } } } $element->plugin_params->categories = serialize($cats); $groups = hikaInput::get()->get('groups', array(), 'array'); hikashop_toInteger($groups); $element->plugin_params->groups = serialize($groups); } public function _readOptions() { if(!empty($this->plugin_options)) return $this->plugin_options; $this->plugin_options = array(); if(!isset($this->params)) { $pluginsClass = hikashop_get('class.plugins'); $plugin = $pluginsClass->getByName('hikashop', 'userpoints'); $this->plugin_options['control_panel'] = true; if(isset($plugin->params['control_panel'])) $this->plugin_options['control_panel'] = (int)$plugin->params['control_panel']; $this->plugin_options['checkout_step'] = true; if(isset($plugin->params['checkout_step'])) $this->plugin_options['checkout_step'] = (int)$plugin->params['checkout_step']; $this->plugin_options['hide_when_no_points'] = true; if(isset($plugin->params['hide_when_no_points'])) $this->plugin_options['hide_when_no_points'] = (int)$plugin->params['hide_when_no_points']; $this->plugin_options['ask_no_coupon'] = true; if(isset($plugin->params['ask_no_coupon'])) $this->plugin_options['ask_no_coupon'] = (int)$plugin->params['ask_no_coupon']; $this->plugin_options['default_no_use'] = false; if(isset($plugin->params['default_no_use'])) $this->plugin_options['default_no_use'] = (int)$plugin->params['default_no_use']; $this->plugin_options['show_points'] = 'hk'; if(isset($plugin->params['show_points'])) $this->plugin_options['show_points'] = $plugin->params['hide_when_no_points']; $this->plugin_options['show_earn_points'] = false; if(isset($plugin->params['show_earn_points'])) $this->plugin_options['show_earn_points'] = (int)$plugin->params['show_earn_points']; } else { $this->plugin_options['checkout_step'] = (int)$this->params->get('checkout_step', '1'); $this->plugin_options['hide_when_no_points'] = (int)$this->params->get('hide_when_no_points', '1'); $this->plugin_options['ask_no_coupon'] = (int)$this->params->get('ask_no_coupon', '1'); $this->plugin_options['default_no_use'] = (int)$this->params->get('default_no_use', '0'); $this->plugin_options['show_points'] = $this->params->get('show_points', 'hk'); $this->plugin_options['show_earn_points'] = (int)$this->params->get('show_earn_points', '0'); $this->plugin_options['control_panel'] = (int)$this->params->get('control_panel', '1'); } if(!in_array($this->plugin_options['show_points'], array('hk','aup','esp','*'))) $this->plugin_options['show_points'] = 'hk'; return $this->plugin_options; } public function onAfterOrderCreate(&$order, &$send_email) { $app = JFactory::getApplication(); if(hikashop_isClient('administrator')) return true; if(!isset($order->order_status)) return true; if( !empty($order->order_type) && $order->order_type != 'sale' ) return true; if( !empty($order->userpoints_process->updated) ) return true; $this->giveAndGiveBack($order); unset($this->fullOrder); return true; } public function onAfterOrderUpdate(&$order, &$send_email) { if(!isset($order->order_status)) return true; if( (!empty($order->order_type) && $order->order_type != 'sale') || $order->old->order_type != 'sale' ) return true; if( !empty($order->userpoints_process->updated) ) return true; $this->giveAndGiveBack($order); unset($this->fullOrder); return true; } public function onGetUserPoints($cms_user_id = null, $mode = 'all') { $points = $this->getUserPoints($cms_user_id, $mode); } public function onGetUserPointsEarned(&$order, &$points, $mode = 'all', $onlyVirtual = false) { $ids = array(); $user_id = false; if(!empty($order->old->order_user_id)) $user_id = (int)$order->old->order_user_id; if(!empty($order->order_user_id)) $user_id = (int)$order->order_user_id; parent::listPlugins($this->name, $ids, false, $user_id); foreach($ids as $id) { parent::pluginParams($id); if( (!$onlyVirtual || !empty($this->plugin_params->virtualpoints)) && ($mode == 'all' || @$this->plugin_params->points_mode == $mode) ) { $pts = $this->getPointsEarned($order); if(empty($pts)) continue; $myMode = $this->plugin_params->points_mode; if($mode == 'all') { if(empty($points[$myMode])) $points[$myMode] = 0; $points[$myMode] += $pts; } else $points += $pts; } } } public function onGetVirtualUserPoints(&$order, &$points, $mode = 'all') { $this->onGetUserPointsEarned($order, $points, $mode, true); } public function getUserPoints($cms_user_id = null, $mode = 'all') { $ret = 0; if($mode == 'all') { $ret = array(); } if($mode == 'aup' || ($mode == 'all' && $this->getAUP())) { if($mode == 'aup' && !$this->getAUP(true)) return false; if($cms_user_id === null) { $user = Jfactory::getUser(); $cms_user_id = $user->id; } $userInfo = AlphaUserPointsHelper::getUserInfo('', $cms_user_id); if($mode == 'aup') return (int)$userInfo->points; $ret['aup'] = (int)$userInfo->points; } if($mode == 'esp' || ($mode == 'all' && $this->getEasysocial())) { if($mode == 'esp' && !$this->getEasysocial(true)) return false; if($cms_user_id === null) { $user = Jfactory::getUser(); $cms_user_id = $user->id; } $userInfo = FD::user( $cms_user_id ); if($mode == 'esp') return (int)$userInfo->getPoints(); $ret['esp'] = (int)$userInfo->getPoints(); } if($cms_user_id === null) { $user = hikashop_loadUser(true); } else { $userClass = hikashop_get('class.user'); $user = $userClass->get($cms_user_id, 'cms'); } if($mode == 'hk') { if(isset($user->user_points) || ($user != null && in_array('user_points', array_keys(get_object_vars($user))))) return (int)@$user->user_points; return false; } if(isset($user->user_points) || ($user != null && in_array('user_points', array_keys(get_object_vars($user))))) { if($mode == 'all') $ret['hk'] = (int)@$user->user_points; else $ret = (int)@$user->user_points; } return $ret; } public function addPoints($points, $order, $data = null, $forceMode = null) { if(empty($this->plugin_params) && $forceMode === null) return false; if($points === 0) return true; $points_mode = @$this->plugin_params->points_mode; if($forceMode !== null) $points_mode = $forceMode; if($points_mode == 'aup') { if(empty($order->customer)) { $userClass = hikashop_get('class.user'); $order->customer = $userClass->get($order->order_user_id); } if($this->getAUP(true)) { if($data === null) $data = $this->getDataReference($order, $points_mode); $aupid = AlphaUserPointsHelper::getAnyUserReferreID($order->customer->user_cms_id); AlphaUserPointsHelper::newpoints('plgaup_orderValidation', $aupid, '', $data, $points); return true; } return false; } if($points_mode == 'esp') { if(empty($order->customer)) { $userClass = hikashop_get('class.user'); $order->customer = $userClass->get($order->order_user_id); } if($this->getEasysocial(true)) { if($data === null) $data = $this->getDataReference($order, $points_mode); $eas_points = FD::points(); $userInfo = FD::user( $order->customer->user_cms_id ); return $eas_points->assignCustom( $userInfo->id, $points, $data ); } return false; } $ret = true; $userClass = hikashop_get('class.user'); $oldUser = $userClass->get($order->order_user_id); if(!isset($oldUser->user_points) && !in_array('user_points', array_keys(get_object_vars($oldUser)))) return false; if(empty($oldUser->user_points)) $oldUser->user_points = 0; $user = new stdClass(); $user->user_id = $oldUser->user_id; $user->user_points = (int)$oldUser->user_points + $points; if($user->user_points < 0) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::sprintf('HIKAPOINTS_USE_X_POINTS', -$points), 'error'); $points = -$oldUser->user_points; $user->user_points = 0; $ret = false; } $userClass->save($user); $app = JFactory::getApplication(); if(!hikashop_isClient('administrator') && $points !== 0) { $user = hikashop_loadUser(true); if($user->user_id == $order->order_user_id) { if($points < 0) $app->enqueueMessage(JText::sprintf('HIKAPOINTS_USE_X_POINTS', -$points)); else $app->enqueueMessage(JText::sprintf('HIKAPOINTS_EARN_X_POINTS', $points)); } } return $ret; } public function getPointsEarned($order) { if(empty($this->plugin_params)) return 0; if(!empty($this->plugin_params->notgivewhenuse) && (int)$this->plugin_params->notgivewhenuse == 1 && (!empty($order->additional['userpoints']) || !empty($order->cart->additional['userpoints']))) return 0; $points = 0; $db = JFactory::getDBO(); $config =& hikashop_config(); $this->main_currency = $config->get('main_currency',1); $currencyClass = hikashop_get('class.currency'); $this->currency = $currencyClass->get($this->main_currency); if(isset($order->order_currency_id)) { $order_currency_id = $order->order_currency_id; } else { $order_currency_id = hikashop_getCurrency(); } if($this->main_currency != $order_currency_id) { if(!empty($this->plugin_params->value)) $this->plugin_params->value = $currencyClass->convertUniquePrice($this->plugin_params->value, $this->main_currency, $order_currency_id); else $this->plugin_params->value = 0; if(!empty($this->plugin_params->minimumcost)) $this->plugin_params->minimumcost = $currencyClass->convertUniquePrice($this->plugin_params->minimumcost, $this->main_currency, $order_currency_id); else $this->plugin_params->minimumcost = 0; if(!empty($this->plugin_params->currency_rate)) $this->plugin_params->currency_rate = $currencyClass->convertUniquePrice($this->plugin_params->currency_rate, $this->main_currency, $order_currency_id); else $this->plugin_params->currency_rate = 0; } $products = array(); if(!empty($order->cart->products)) { $products = $order->cart->products; } elseif(!empty($order->products)) { $products = $order->products; } if(empty($products)) return 0; foreach($products as $k => &$p) { if(!isset($p->product_parent_id)) $p->product_parent_id = 0; } unset($p); $categories = array(); if(!empty($this->plugin_params->categories)) $categories = hikashop_unserialize($this->plugin_params->categories); $included_products = array(); $product_ids = array(); $category_ids = array(); $product_categories = array(); $sub_categories = array(); if(!empty($categories) || !empty($this->plugin_params->product_categories)) { foreach($products as $product) { $product_ids[(int)$product->product_id] = (int)$product->product_id; } $queryP = 'SELECT product_parent_id, product_id FROM '.hikashop_table('product').' WHERE product_id IN ('.implode(',',$product_ids).')'; $db->setQuery($queryP); $pids = $db->loadObjectList('product_parent_id'); if(!empty($pids)) { foreach($pids as $pid) { if((int)$pid->product_parent_id <= 0) continue; $product_ids[(int)$pid->product_parent_id] = (int)$pid->product_parent_id; foreach($products as $k => &$p) { if($p->product_id == $pid->product_id && empty($p->product_parent_id)) $p->product_parent_id = $pid->product_parent_id; } unset($p); } } unset($pids); $query = 'SELECT * FROM '.hikashop_table('product_category').' prod '. ' LEFT JOIN '.hikashop_table('category').' cat ON prod.category_id = cat.category_id ' . ' WHERE prod.product_id IN ('.implode(',', $product_ids).')'; $db->setQuery($query); $category_ids = $db->loadObjectList(); $sub_categories = array(); if(!empty($category_ids)) { $conditions = array(); foreach($category_ids as $idcat) { $conditions[(int)$idcat->category_id] = 'category_left <= '.(int)$idcat->category_left.' AND category_right >= '.(int)$idcat->category_right.''; if(empty($product_categories[(int)$idcat->product_id])) $product_categories[(int)$idcat->product_id] = array(); $product_categories[(int)$idcat->product_id][(int)$idcat->category_id] = (int)$idcat->category_id; } $query = 'SELECT * FROM '.hikashop_table('category').' WHERE category_type = \'product\' AND ((' . implode(') OR (',$conditions) . '))'; $db->setQuery($query); $sub_categories = $db->loadObjectList('category_id'); } } if(!empty($categories)) { $cats = array(); foreach($categories as $k => $category) { $cats[$category->category_id] = array( 'points' => $category->category_points, 'products' => array() ); foreach($product_categories as $id => $assoc_categories) { if(in_array($category->category_id, $assoc_categories)) { $cats[$category->category_id]['products'][$id] = $id; } } if(empty($cats[$category->category_id]['products'])) { unset($categories[$k]); unset($cats[$category->category_id]); } } foreach($product_categories as $product => $assoc_categories) { $max = array(0,0); $rem = array(); foreach($assoc_categories as $cat) { $cat = (int)$cat; if(isset($cats[$cat]) && $cats[$cat]['points'] > $max[0]) { $max[0] = $cats[$cat]['points']; if($max[1] > 0) $rem[] = $max[1]; $max[1] = $cat; } else $rem[] = $cat; } foreach($rem as $i) { unset($cats[$i]['products'][$product]); } } foreach($cats as $k => $category) { if(!empty($category['products'])) $points += $category['points']; } } if(hikashop_level(2)) { $groups = array(); if(!empty($this->plugin_params->groups)) $groups = hikashop_unserialize($this->plugin_params->groups); if(!empty($order->customer->user_cms_id)) { $user_id = $order->customer->user_cms_id; } else { $my = JFactory::getUser(); $user_id = $my->id; } jimport('joomla.access.access'); $userGroups = JAccess::getGroupsByUser($user_id, true);//$my->authorisedLevels(); foreach($userGroups as $groupid) { if(!empty($groups[$groupid])) $points += $groups[$groupid]; if(!empty($groups[$groupid]) && $this->plugin_params->limitgroup == 1) break; } } $cart = null; if(isset($order->cart)) { $cart =& $order->cart; } else { $cart =& $order; } $calculatedPrice = 0.0; if(empty($this->plugin_params->product_categories)) { if(!empty($cart->full_total->prices[0]->price_value_with_tax)) { if($this->plugin_params->shippingpoints == 1) { $calculatedPrice = $cart->full_total->prices[0]->price_value_with_tax - @$cart->coupon->discount_value; } else { $calculatedPrice = $cart->total->prices[0]->price_value_with_tax - @$cart->coupon->discount_value; } } else { if($this->plugin_params->shippingpoints == 1) { $calculatedPrice = @$order->order_full_price; } else { $calculatedPrice = @$order->order_full_price - @$order->order_shipping_price; } } } else { foreach($category_ids as &$category) { $category->parents = array(); foreach($sub_categories as $sub_category) { if($sub_category->category_left <= $category->category_left && $sub_category->category_right >= $category->category_right) $category->parents[$sub_category->category_id] = $sub_category->category_id; } } unset($category); foreach($products as $k => $product) { foreach($category_ids as $category) { if((int)$category->product_id != (int)$product->product_id && (int)$category->product_id != (int)$product->product_parent_id) continue; $product_price = 0.0; if(empty($product->prices) && !empty($product->order_product_price)) { $product_price = (float)hikashop_toFloat(@$product->order_product_price) + (float)hikashop_toFloat(@$product->order_product_tax); } else if(!empty($product->prices)) { $p = $product->prices[0]; if(isset($p->unit_price)) $p = $p->unit_price; if(isset($p->price_value_with_tax)) $product_price = $p->price_value_with_tax; else $product_price = $p->price_value; } if(isset($product->order_product_quantity)) $product_price *= (int)$product->order_product_quantity; else $product_price *= (int)$product->cart_product_quantity; $found = false; if(in_array($category->category_id, $this->plugin_params->product_categories)) { $calculatedPrice += $product_price; $found = true; } else { $interset = array_intersect($category->parents, $this->plugin_params->product_categories); if(!empty($interset)) { $calculatedPrice += $product_price; $found = true; } } if($found) { $included_products[$k] = $k; break; } } } if($this->plugin_params->shippingpoints == 1) { $calculatedPrice += (float)@$order->order_shipping_price; } } if(!empty($this->plugin_params->notgivewhenuse) && (int)$this->plugin_params->notgivewhenuse == 2 && !empty($order->additional['userpoints'])) $calculatedPrice += (float)$order->additional['userpoints']->price_value; if(!empty($this->plugin_params->notgivewhenuse) && (int)$this->plugin_params->notgivewhenuse == 2 && !empty($order->cart->additional['userpoints'])) $calculatedPrice += (float)$order->cart->additional['userpoints']->price_value; unset($cart); if($this->plugin_params->currency_rate != 0) { $points += $calculatedPrice / $this->plugin_params->currency_rate; } if($this->plugin_params->limittype == 1) { $accountedForProducts = array(); foreach($products as $k => $product) { $id = $product->product_id; if(!isset($product->product_type)) { $class = hikashop_get('class.product'); $p = $class->get($id); if(!empty($p->product_parent_id)) $id = $p->product_parent_id; } elseif(!empty($product->product_parent_id)) $id = $product->product_parent_id; if(isset($accountedForProducts[$id])) continue; $accountedForProducts[$id] = $id; if(empty($this->plugin_params->product_categories) || isset($included_products[$k])) { $points += (int)$this->plugin_params->productpoints; } } } elseif($this->plugin_params->limittype == 0) { foreach($products as $k => $product) { if(empty($this->plugin_params->product_categories) || isset($included_products[$k])) { if(isset($product->order_product_quantity)) { $points += (int)$this->plugin_params->productpoints * $product->order_product_quantity; } else { $points += (int)$this->plugin_params->productpoints * $product->cart_product_quantity; } } } } if($points <= 0) $points = 0; if(!empty($this->plugin_params->rounddown)) return floor($points); return round($points, 0); } public function giveAndGiveBack(&$order) { $this->config = hikashop_config(); $confirmed = null; if(!isset($this->params)) { $pluginsClass = hikashop_get('class.plugins'); $plugin = $pluginsClass->getByName('hikashop', 'userpoints'); $confirmed = explode(',', @$plugin->params['order_status']); } else if($this->params->get('order_status', '') != '') { $confirmed = explode(',', $this->params->get('order_status', '')); } if(empty($confirmed)) $confirmed = explode(',', $this->config->get('invoice_order_statuses')); if(empty($confirmed)) $confirmed = array('confirmed','shipped'); $created = $this->config->get('order_created_status'); $points = array(); $this->loadFullOrder($order->order_id); $creation = empty($order->old->order_status); $changed = !empty($order->old->order_status) && !empty($order->order_status) && $order->old->order_status != $order->order_status; $old_confirmed = !empty($order->old->order_status) && in_array($order->old->order_status, $confirmed); $old_created = !empty($order->old->order_status) && ($order->old->order_status == $created); $new_confirmed = !empty($order->order_status) && in_array($order->order_status, $confirmed); $new_created = !empty($order->order_status) && ($order->order_status == $created); if($changed && $old_confirmed && !$new_confirmed && !empty($this->fullOrder->order_payment_params->userpoints->earn_points)) { foreach($this->fullOrder->order_payment_params->userpoints->earn_points as $mode => $p) { if(empty($points[$mode])) $points[$mode] = 0; $points[$mode] -= $p; } } if(($creation || ($changed && !$old_confirmed)) && $new_confirmed && !empty($this->fullOrder->order_payment_params->userpoints->earn_points)) { foreach($this->fullOrder->order_payment_params->userpoints->earn_points as $mode => $p) { if(empty($points[$mode])) $points[$mode] = 0; $points[$mode] += $p; } } if(($creation || ($changed && !$old_confirmed && !$old_created)) && ($new_confirmed || $new_created)) { if(!empty($this->fullOrder->order_payment_params->userpoints->use_points)) { $m = $this->fullOrder->order_payment_params->userpoints->use_mode; if(empty($points[ $m ])) $points[ $m ] = 0; $points[ $m ] -= $this->fullOrder->order_payment_params->userpoints->use_points; } if(!$creation && $this->fullOrder->order_payment_method == 'userpoints') { if($this->paymentPluginParams($this->fullOrder->order_payment_id) && $this->payment_plugin_params->givebackpoints == 1 && !empty($this->payment_plugin_params->value)) { $p = round($this->fullOrder->order_full_price / $this->payment_plugin_params->value, 0); $m = $this->payment_plugin_params->points_mode; if(empty($points[ $m ])) $points[ $m ] = 0; $points[ $m ] -= $p; } } if(!$creation && !empty($this->fullOrder->order_discount_code)) { $matches = array(); if(preg_match('#^POINTS_([-a-zA-Z0-9])+_[a-zA-Z0-9]{25}$#', $this->fullOrder->order_discount_code, $matches) && !empty($this->plugin_params->value)) { $p = -round($this->fullOrder->order_discount_price / $this->plugin_params->value, 0); $this->addPoints($p, $this->fullOrder, $matches[1]); } } } if($changed && ($old_confirmed || $old_created) && !$new_confirmed && !$new_created) { if(!empty($this->fullOrder->order_payment_params->userpoints->use_points)) { $m = $this->fullOrder->order_payment_params->userpoints->use_mode; if(empty($points[ $m ])) $points[ $m ] = 0; $points[ $m ] += $this->fullOrder->order_payment_params->userpoints->use_points; } if($this->fullOrder->order_payment_method == 'userpoints') { if($this->paymentPluginParams($this->fullOrder->order_payment_id) && $this->payment_plugin_params->givebackpoints == 1 && !empty($this->payment_plugin_params->value)) { $p = round($this->fullOrder->order_full_price / $this->payment_plugin_params->value, 0); $m = $this->payment_plugin_params->points_mode; if(empty($points[ $m ])) $points[ $m ] = 0; $points[ $m ] += $p; } } if(!empty($this->fullOrder->order_discount_code)) { $matches = array(); if(preg_match('#^POINTS_([-a-zA-Z0-9])+_[a-zA-Z0-9]{25}$#', $this->fullOrder->order_discount_code, $matches) && !empty($this->plugin_params->value)) { $p = round($this->fullOrder->order_discount_price / $this->plugin_params->value, 0); $this->addPoints($p, $this->fullOrder, $matches[1]); } } } if(!empty($points)) { foreach($points as $mode => $p) { if(!empty($p)) $this->addPoints($p, $this->fullOrder, null, $mode); } } } protected function paymentPluginParams($id) { static $pluginsCache = array(); $key = 'payment_'.$this->name.'_'.$id; if(!isset($pluginsCache[$key])){ $query = 'SELECT * FROM '.hikashop_table('payment').' WHERE payment_type = '.$this->db->Quote($this->name); if($id > 0) { $query .= ' AND payment_id = ' . (int)$id; } $this->db->setQuery($query); $pluginsCache[$key] = $this->db->loadObject(); } if(!empty($pluginsCache[$key])) { $params = 'payment_params'; $this->payment_params = hikashop_unserialize($pluginsCache[$key]->$params); $this->payment_data = $pluginsCache[$key]; return true; } $this->payment_params = null; $this->payment_data = null; return false; } public function onCheckoutStepList(&$list) { $this->_readOptions(); if(!empty($this->plugin_options['checkout_step'])) $list['plg.shop.userpoints'] = JText::_('HIKASHOP_USER_POINTS'); } public function onHikashopBeforeDisplayView(&$view) { $app = JFactory::getApplication(); if(hikashop_isClient('administrator')) return true; $viewName = $view->getName(); $layoutName = $view->getLayout(); if($viewName != 'user' || $layoutName != 'cpanel') return true; $this->_readOptions(); if(empty($this->plugin_options['control_panel'])) return; switch($this->plugin_options['show_points']) { case 'aup': $points = $this->getUserPoints(null, 'aup'); break; case 'esp': $points = $this->getUserPoints(null, 'esp'); break; case 'hk': default: $points = $this->getUserPoints(null, 'hk'); break; } if(!isset($view->extraData)) $view->extraData = new stdClass(); if(!isset($view->extraData->topMain)) $view->extraData->topMain = array(); if($points > 0) { $view->extraData->topMain[] = '<div class="hk-well hikashop_user_points_cpanel"><i class="fas fa-2x fa-coins" style="margin-right: 10px;"></i> '. JText::sprintf('USERPOINTS_HAVE_X_POINTS', $points) . '</div>'; } else { $view->extraData->topMain[] = '<div class="hk-well hikashop_user_points_cpanel"><i class="fas fa-2x fa-coins" style="margin-right: 10px;"></i> '. JText::_('USERPOINTS_NO_POINTS') . '</div>'; } } public function onCheckoutStepDisplay($layoutName, &$html, &$view, $pos=null, $options=null) { if($layoutName != 'plg.shop.userpoints') return; $this->_readOptions(); if(empty($this->plugin_options['checkout_step'])) return; switch($this->plugin_options['show_points']) { case 'aup': $points = $this->getUserPoints(null, 'aup'); break; case 'esp': $points = $this->getUserPoints(null, 'esp'); break; case 'hk': default: $points = $this->getUserPoints(null, 'hk'); break; } $hikashop_config =& hikashop_config(); $this->legacy = ($hikashop_config->get('checkout_legacy', 0)); $this->display = true; if($points === false) $this->display = false; if(!empty($this->plugin_options['hide_when_no_points']) && empty($points)) $this->display = false; $app = JFactory::getApplication(); $currencyClass = hikashop_get('class.currency'); $consume = null; $discount = ''; $earn_points = false; $use_coupon = 1 - (int)$app->getUserState(HIKASHOP_COMPONENT.'.userpoints_no_virtual_coupon', (int)(@$this->plugin_options['checkout_step'] && @$this->plugin_options['default_no_use'])); if($this->legacy) $cart = $view->initCart(); else $cart = $view->checkoutHelper->getCart(); $paymentUserPoints = hikashop_import('hikashoppayment', 'userpoints'); if($this->display && !empty($paymentUserPoints)) { $consume = $paymentUserPoints->getCartUsedPoints($cart); if(!empty($consume) && $consume['mode'] != $this->plugin_options['show_points']) { $consume = null; } if(!empty($this->plugin_options['show_earn_points'])) { $earn_points = 0; $this->onGetUserPointsEarned($cart, $earn_points, $this->plugin_options['show_points']); } if(!empty($consume)) { if(isset($cart->order_currency_id)) $currency_id = $cart->order_currency_id; else $currency_id = hikashop_getCurrency(); $discount = $currencyClass->format(isset($consume['tax']) ? $consume['tax'] : $consume['value'], $currency_id); } } if(!$this->legacy) { $this->ajax = isset($view->ajax) && $view->ajax; $this->step = $view->step; $this->module_position = $pos; $this->cart = $cart; } $app = JFactory::getApplication(); $path = JPATH_THEMES.DS.$app->getTemplate().DS.'plg_hikashop_userpoints'.DS.'checkout.php'; if(!file_exists($path)) { $path = JPATH_PLUGINS.DS.'hikashop'.DS.'userpoints'.DS.'userpoints_checkout.php'; } if(!file_exists($path)) return false; require($path); } public function onBeforeCheckoutStep($controllerName, &$go_back, $original_go_back, &$controller) { } public function onAfterCheckoutStep($controllerName, &$go_back, $original_go_back, &$controller) { if($controllerName != 'plg.shop.userpoints') return false; $app = JFactory::getApplication(); $this->_readOptions(); if(empty($this->plugin_options['checkout_step'])) { $app->setUserState(HIKASHOP_COMPONENT.'.userpoints_no_virtual_coupon', 0); return true; } $default_no_virtual = (int)(@$this->plugin_options['checkout_step'] && @$this->plugin_options['default_no_use']); if(!empty($this->plugin_options['ask_no_coupon'])) { $no_virtual_coupon = (int)$app->getUserState(HIKASHOP_COMPONENT.'.userpoints_no_virtual_coupon', $default_no_virtual); $use_coupon_opt = hikaInput::get()->getString('userpoints_use_coupon', ''); if($use_coupon_opt !== '') { $no_coupon = 1 - (int)$use_coupon_opt; if($no_coupon != $no_virtual_coupon) { $go_back = true; $app->setUserState(HIKASHOP_COMPONENT.'.userpoints_no_virtual_coupon', $no_coupon); } } } else { $app->setUserState(HIKASHOP_COMPONENT.'.userpoints_no_virtual_coupon', $default_no_virtual); } $hikashop_config =& hikashop_config(); if(!$hikashop_config->get('checkout_legacy', 0)) { $checkoutHelper = hikashopCheckoutHelper::get(); $cart = $checkoutHelper->getCart(); $cart_id = (int)$cart->cart_id; unset($cart); $cartClass = hikashop_get('class.cart'); $cartClass->get('reset_cache', $cart_id); $cartClass->getFullCart($cart_id); $cart = $checkoutHelper->getCart(true); $cartClass->save($cart); $eventParams = null; if(!empty($params['src'])) $eventParams = array('src' => $params['src']); $checkoutHelper->addEvent('checkout.cart.updated', $eventParams); } return true; } public function loadFullOrder($order_id) { if(!empty($this->fullOrder) && $this->fullOrder->order_id == $order_id) return; $classOrder = hikashop_get('class.order'); $this->fullOrder = $classOrder->loadFullOrder($order_id, false, false); if(empty($this->fullOrder->customer)) { $userClass = hikashop_get('class.user'); $this->fullOrder->customer = $userClass->get($this->fullOrder->order_user_id); } } public function getAUP($warning = false, $init = false) { static $aup = null; static $aup_init = false; if(!isset($aup)) { $aup = false; $api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php'; if(file_exists($api_AUP)) { require_once ($api_AUP); if(class_exists('AlphaUserPointsHelper')) $aup = true; } else { $api_AUP = JPATH_SITE.DS.'components'.DS.'com_altauserpoints'.DS.'helper.php'; if (file_exists($api_AUP) ) { require_once ($api_AUP); if(class_exists('AltaUserPointsHelper')){ $aup = true; if(!class_exists('AlphaUserPointsHelper')) { require_once(JPATH_SITE.DS.'plugins'.DS.'hikashop'.DS.'userpoints'.DS.'userpoints_aup_compat.php'); } } } } if(!$aup && $warning) { $app = JFactory::getApplication(); if(hikashop_isClient('administrator')) $app->enqueueMessage('The HikaShop UserPoints plugin requires the component AltaUserPoints to be installed. If you want to use it, please install the component or use another mode.'); } } if($aup === true && $init && !$aup_init) { $db = JFactory::getDBO(); $query = 'SELECT id FROM '.hikashop_table('alpha_userpoints_rules', false).' WHERE rule_name=' . $db->Quote('Order_validation'); $db->setQuery($query); $exist = $db->loadResult(); if(empty($exist)) { $data = array( 'rule_name' => $db->Quote('Order_validation'), 'rule_description' => $db->Quote('Give points to customer when the order is validate'), 'rule_plugin' => $db->Quote('com_hikashop'), 'plugin_function' => $db->Quote('plgaup_orderValidation'), 'access' => 1, 'points' => 0, 'published' => 1, 'system' => 0, 'autoapproved' => 1 ); $query = 'INSERT INTO '.hikashop_table('alpha_userpoints_rules',false) . ' (' . implode(',', array_keys($data)) . ') VALUES (' . implode(',', $data) . ')'; $db->setQuery($query); $db->execute(); } $aup_init = true; } return $aup; } public function getEasysocial($warning = false) { static $foundry = null; if($foundry !== null) return $foundry; $file = JPATH_ADMINISTRATOR . '/components/com_easysocial/includes/foundry.php'; jimport('joomla.filesystem.file'); $foundry = JFile::exists($file); if($foundry) { include_once($file); } else if($warning) { $app = JFactory::getApplication(); if(hikashop_isClient('administrator')) $app->enqueueMessage('The HikaShop UserPoints plugin requires the component EasySocial to be installed. If you want to use it, please install the component or use another mode.'); } return $foundry; } public function getDataReference(&$order, $points_mode='aup') { if(!empty($order->order_number)) { $number = $order->order_number; } elseif(!empty($order->old->order_number)) { $number = $order->old->order_number; } elseif(!empty($order->order_id)) { $class = hikashop_get('class.order'); $data = $class->get($order->order_id); $number = $data->order_number; } else { return ''; } if($points_mode == 'esp'){ $menusClass = hikashop_get('class.menus'); $itemid = $menusClass->loadAMenuItemId('order','listing'); if(empty($itemid)) $itemid = $menusClass->loadAMenuItemId('',''); $number = '<a href="' . hikashop_completeLink('order&task=show&cid='.$order->order_id.'&Itemid='.$itemid) . '">'.$number.'</a>'; } return JText::_('ORDER_NUMBER').' : '.$number; } public function _makeLevel(&$productData, $level, &$idparentcats) { if(!empty($productData[$level])) { foreach($productData[$level] as $cat) { if(!empty($idparentcats[$cat]->category_parent_id) && !empty($idparentcats[$idparentcats[$cat]->category_parent_id])) { $productData[$level+1][] = $idparentcats[$cat]->category_parent_id; } } } if(!empty($productData[$level+1])) { $this->_makeLevel($productData,$level+1,$idparentcats); } } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка