Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla4/ |
| [Home] [System Details] [Kill Me] |
buttons/index.html000064400000000032151160562250010235
0ustar00<html><body></body></html>buttons/pophelp.php000064400000004436151160562250010434
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class JButtonPophelp extends JButton {
private $name = 'Pophelp';
public function fetchButton($type = 'Pophelp', $namekey =
'', $id = 'pophelp') {
$doc = JFactory::getDocument();
$config = hikamarket::config();
$level = $config->get('level');
$url = HIKAMARKET_HELPURL.$namekey.'&level='.$level;
$js = '
function displayDoc(){
var d = document, init = false, b =
d.getElementById("iframedoc");
if(!b) return true;
if(typeof(b.openHelp) == "undefined") { b.openHelp = true; init
= true; }
if(b.openHelp) { b.innerHTML = \'<iframe
src="'.$url.'" width="100%"
height="100%" style="border:0px" border="no"
scrolling="auto"></iframe>\';
b.setStyle("display","block"); }
try {
if(typeof(b.fxEffect) == "undefined") { b.fxEffect =
b.effects({duration: 1500, transition: Fx.Transitions.Quart.easeOut}); }
if(b.openHelp){
if(init) { b.height = 0; b.style.height = 0; }
b.fxEffect.stop(); b.fxEffect.start({height: 300});
}else{
b.fxEffect.stop(); b.fxEffect.start({height: 0}).chain(function() {
b.innerHTML = ""; b.setStyle("display",
"none"); });
}
} catch(err) {
if(typeof(b.vslide) == "undefined") { b.vslide = new
Fx.Slide("iframedoc"); }
if(b.openHelp){
if(init) { b.vslide.hide(); }
b.vslide.slideIn();
}else{
b.vslide.slideOut().chain(function() { b.innerHTML = "";
b.setStyle("display", "none"); });
}
}
b.openHelp = !b.openHelp;
return false;
}';
$doc->addScriptDeclaration($js);
if(!HIKASHOP_BACK_RESPONSIVE)
return '<a href="' . $url . '"
target="_blank" onclick="return displayDoc();"
class="toolbar"><span class="icon-32-help"
title="' . JText::_('HIKA_HELP', true) .
'"></span>' . JText::_('HIKA_HELP') .
'</a>';
return '<button class="btn btn-small"
onclick="return displayDoc();"><i
class="icon-help"></i> ' .
JText::_('HIKA_HELP') . '</button>';
}
public function fetchId($type = 'Pophelp', $html = '',
$id = 'pophelp') {
return $this->name . '-' . $id;
}
}
class JToolbarButtonPophelp extends JButtonPophelp {}
classes/acl.php000064400000002665151160562250007465 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketAclClass extends hikamarketClass {
protected $tables = array();
protected $pkeys = array();
protected $toggle = array();
public function saveForm() {
$config = hikamarket::config();
$formData = hikaInput::get()->get('data', array(),
'array');
$market_type = hikaInput::get()->getCmd('acl_type',
'');
if(empty($market_type))
return false;
$data = array();
if(!empty($formData['acl'])) {
foreach($formData['acl'] as $group => $d) {
$data_array = explode(',', $d);
foreach($data_array as &$d) {
$d = trim($d);
}
unset($d);
sort($data_array, SORT_STRING);
$data[$market_type.'_acl_'.$group] = implode(',',
$data_array);
}
} else if($market_type == 'vendor_options') {
foreach($formData as $group => $options) {
if(!is_array($options))
continue;
$data_array = array();
foreach($options as $k => $v) {
if(!empty($v))
$data_array[$k] = $v;
}
$data[$market_type.'_acl_'.$group] = serialize($data_array);
}
}
$status = false;
if(!empty($data))
$status = $config->save($data);
return $status;
}
}
classes/address.php000064400000022740151160562250010347 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketAddressClass extends hikamarketClass {
protected $tables = array('shop.address');
protected $pkeys = array('address_id');
protected $toggle = array('address_published' =>
'address_id');
public function frontSaveForm($user_id, $area = '') {
$fieldsClass = hikamarket::get('shop.class.field');
$data = hikaInput::get()->get('data', array(),
'array');
$ret = false;
$currentTask = 'user_address';
if(!empty($data[$currentTask])) {
$oldAddress = null;
$user_address = $fieldsClass->getFilteredInput(array($currentTask,
'address'), $oldAddress, false, 'data', false, $area);
if(!empty($user_address)) {
$user_address->address_user_id = $user_id;
$id = (int)@$user_address->address_id;
$result = $this->save($user_address);
if($result) {
$ret = new stdClass();
$ret->id = $result;
$ret->previous_id = $id;
}
}
}
return $ret;
}
public function save(&$addressData, $type = null) {
$app = JFactory::getApplication();
if(!$app->isAdmin()) {
$vendor_id = hikamarket::loadVendor(false, false);
if($vendor_id > 1) return false;
if(!hikamarket::acl('user/edit/address')) return false;
}
$addrClass = hikamarket::get('shop.class.address');
if($type === null && !empty($addressData->address_type))
$type = $addressData->address_type;
if($type === null && !empty($addressData->address_id)) {
$old = $addrClass->get($addressData->address_id);
$type = @$old->address_type;
}
$new = true;
if(!empty($addressData->address_id)) {
$new = false;
$oldData = $this->get($addressData->address_id);
if(!empty($addressData->address_vat) &&
$oldData->address_vat != $addressData->address_vat) {
if(!$addrClass->_checkVat($addressData))
return false;
}
$orderClass = hikamarket::get('shop.class.order');
if(!empty($addressData->address_id) &&
!empty($oldData->address_published) &&
$orderClass->addressUsed($addressData->address_id)) {
unset($addressData->address_id);
$new = true;
$oldData->address_published = 0;
parent::save($oldData);
}
} elseif(!empty($addressData->address_vat)) {
if(!$addrClass->_checkVat($addressData))
return false;
}
if(empty($addressData->address_id) &&
empty($addressData->address_user_id))
return false;
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikamarket');
$do = true;
if($new) {
if(!empty($addressData->address_user_id)) {
$query = 'SELECT count(*) as cpt FROM
'.hikamarket::table('shop.address').' WHERE
address_user_id = '.(int)$addressData->address_user_id.' AND
address_published = 1 AND address_default = 1';
$this->db->setQuery($query);
$ret = $this->db->loadObject();
if($ret->cpt == 0)
$addressData->address_default = 1;
}
$app->triggerEvent('onBeforeAddressCreate',
array(&$addressData, &$do));
} else {
$app->triggerEvent('onBeforeAddressUpdate',
array(&$addressData, &$do));
}
if(!$do)
return false;
$status = parent::save($addressData);
if(!$status)
return false;
if(!empty($addressData->address_default) &&
!empty($oldData->address_id)) {
$query = 'UPDATE
'.hikamarket::table('shop.address').' SET
address_default = 0 '.
' WHERE address_user_id =
'.(int)$oldData->address_user_id.' AND address_id !=
'.(int)$oldData->address_id;
if(!empty($type))
$query .= ' AND address_type = ' .
$this->db->Quote($type);
$this->db->setQuery($query);
$this->db->execute();
$shopConfig = hikamarket::config(false);
if(!empty($type) &&
!$shopConfig->get('checkout_legacy', 0)) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.address').' WHERE
address_user_id = '.(int)$oldData->address_user_id.' AND
address_type IN (\'\', \'both\') AND address_published
= 1 AND address_default = 1';
$this->db->setQuery($query);
$defaultAddresses = $this->db->loadObjectList();
if(!empty($defaultAddresses)) {
foreach($defaultAddresses as $defaultAddress) {
$defaultAddress->address_type = 'billing';
$duplicate = hikashop_copy($defaultAddress);
$duplicate->address_type = 'shipping';
unset($duplicate->address_id);
if($type == $defaultAddress->address_type)
$defaultAddress->address_default = 0;
else
$duplicate->address_default = 0;
parent::save($defaultAddress);
parent::save($duplicate);
}
}
}
}
if($new)
$app->triggerEvent('onAfterAddressCreate',
array(&$addressData));
else
$app->triggerEvent('onAfterAddressUpdate',
array(&$addressData));
return $status;
}
public function delete(&$address) {
$app = JFactory::getApplication();
if(!$app->isAdmin()) {
$vendor_id = hikamarket::loadVendor(false, false);
if($vendor_id > 1) return false;
if(!hikamarket::acl('user/edit/address')) return false;
}
$address_id = 0;
if(is_object($address))
$address_id = (int)$address->address_id;
else
$address_id = (int)$address;
$do = true;
JPluginHelper::importPlugin('hikashop');
$app->triggerEvent('onBeforeAddressDelete',
array(&$address_id, &$do));
if(!$do)
return false;
$orderClass = hikamarket::get('shop.class.order');
if($orderClass->addressUsed($address_id)) {
$addr = new stdClass();
$addr->address_id = $address_id;
$addr->address_published = 0;
$status = parent::save($addr);
} else {
$status = parent::delete($address_id);
}
if($status)
$app->triggerEvent('onAfterAddressDelete',
array(&$address_id));
return $status;
}
public function maxiFormat($address, $fields = null, $nlbr = false) {
static $templateAddress = null;
static $templateClassicalMode = true;
if($templateAddress === null) {
$config = hikamarket::config();
$tpl = $config->get('address_template', '');
if(!empty($tpl)) {
$templateAddress = $tpl;
} else {
$params = null;
$js = null;
$templateAddress = hikamarket::getLayout('shop.address',
'address_template', $params, $js);
}
}
$ret = ''.$templateAddress;
if($templateClassicalMode) {
if(!empty($fields)) {
if(empty($this->fieldsClass))
$this->fieldsClass =
hikamarket::get('shop.class.field');
foreach($fields as $field){
$fieldname = $field->field_namekey;
$ret = str_replace('{'.$fieldname.'}',
$this->fieldsClass->show($field, @$address->$fieldname), $ret);
}
} elseif(!empty($address)) {
foreach($address as $k => $v) {
if(is_string($v))
$ret = str_replace('{' . $k . '}', $v, $ret);
}
}
$ret =
str_replace(array("\r\n\r\n","\n\n","\r\r"),array("\r\n","\n","\r"),
trim(preg_replace('#{(?:(?!}).)*}#i','',$ret)));
} else {
}
if($nlbr)
$ret =
str_replace(array("\r\n","\r","\n"),
'<br/>', $ret);
return $ret;
}
public function miniFormat($address, $fields = null, $format =
'') {
$shopConfig = hikamarket::config(false);
$ret = $shopConfig->get('mini_address_format',
'');
if(empty($ret))
$ret = '{address_lastname} {address_firstname} - {address_city},
{address_state} ({address_country})';
if(!empty($format))
$ret = $format;
if(!empty($fields)) {
if(empty($this->fieldsClass))
$this->fieldsClass = hikamarket::get('shop.class.field');
foreach($fields as $field) {
$fieldname = $field->field_namekey;
$ret = str_replace('{'.$fieldname.'}',
$this->fieldsClass->show($field, @$address->$fieldname), $ret);
}
} else {
foreach($address as $k => $v) {
if(is_string($v))
$ret = str_replace('{' . $k . '}', $v, $ret);
}
}
$ret = preg_replace('#{[-_a-zA-Z0-9]+}#iU', '',
$ret);
return $ret;
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
if(empty($options['url_params']))
return $ret;
if(isset($options['url_params']['USER_ID'])
&& (int)$options['url_params']['USER_ID'] >
0) {
$query = 'SELECT * FROM ' .
hikamarket::table('shop.address').
' WHERE address_published = 1 AND address_user_id = ' .
(int)$options['url_params']['USER_ID'];
if(!empty($options['url_params']['ADDR_TYPE']))
$query .= ' AND address_type IN (\'\',
'.$this->db->Quote($options['url_params']['ADDR_TYPE']).')';
$this->db->setQuery($query);
$addresses = $this->db->loadObjectList('address_id');
}
if(!empty($value)) {
}
if(!empty($addresses)) {
$fields = null;
$config = hikamarket::config();
if(empty($this->fieldsClass))
$this->fieldsClass = hikamarket::get('shop.class.field');
$null = null;
if($config->get('address_show_details', 0)) {
$fields =
$this->fieldsClass->getFields('display:vendor_user_show=1',
$null, 'address');
} else {
$fields =
$this->fieldsClass->getFields('field_frontcomp', $null,
'address');
}
if(empty($this->shopAddressClass))
$this->shopAddressClass =
hikamarket::get('shop.class.address');
$this->shopAddressClass->loadZone($addresses);
foreach($addresses as $k => $v) {
$v->address_mini_format = $this->miniFormat($v, $fields);
$ret[0][$k] = $v;
}
asort($ret[0]);
}
unset($addresses);
return $ret;
}
}
classes/cart.php000064400000027706151160562250007662 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketCartClass extends hikamarketClass {
protected $tables = array();
protected $pkeys = array();
protected $toggle = array();
protected $config = null;
static protected $zone_id = null;
static protected $vendor_id = null;
public function __construct($config = array()) {
parent::__construct($config);
$this->config = hikamarket::config();
}
public function onAfterCartProductsLoad(&$cart) {
if(!empty($cart->products))
$this->manageZoneVendor($cart->products);
}
public function manageZoneVendor(&$products, $address = null) {
if(empty($products) ||
!$this->config->get('allow_zone_vendor', 0))
return;
$zone_id = hikamarket::getZone('shipping');
if(self::$zone_id != $zone_id) {
self::$zone_id = $zone_id;
self::$vendor_id = null;
$zoneClass = hikamarket::get('shop.class.zone');
$zones = $zoneClass->getZoneParents($zone_id);
$zonesQuoted = array();
foreach($zones as $z) {
$zonesQuoted[] = $this->db->Quote($z);
}
$query = 'SELECT vendor.vendor_id, vendor.vendor_zone_id,
zone.zone_namekey, zone.zone_type '.
' FROM ' . hikamarket::table('vendor') . ' AS
vendor '.
' INNER JOIN ' . hikamarket::table('shop.zone') .
' AS zone ON vendor.vendor_zone_id = zone.zone_id '.
' WHERE zone.zone_namekey IN ('.implode(',',
$zonesQuoted).') ORDER BY vendor.vendor_id ASC';
$this->db->setQuery($query);
$vendors = $this->db->loadObjectList('zone_namekey');
if(!empty($vendors)) {
foreach($zones as $z) {
if(isset($vendors[$z])) {
self::$vendor_id = (int)$vendors[$z]->vendor_id;
break;
}
}
}
}
if(!empty(self::$vendor_id)) {
foreach($products as &$product) {
if($product->product_vendor_id == 0) // ||
$product->product_vendor_id == 1)
$product->product_vendor_id = self::$vendor_id;
}
unset($product);
}
}
public function onAfterProductCheckQuantities(&$products, &$cart,
$options) {
if(!empty($cart->cart_type) && $cart->cart_type !=
'cart')
return;
$limit_vendors_in_cart =
$this->config->get('vendors_in_cart', 0);
if($limit_vendors_in_cart == 0)
return;
if(empty($cart->cart_products))
return;
$cart_products = array();
$pids = array();
foreach($cart->cart_products as $k => $cp) {
if(!is_numeric($k) && substr($k, 0, 1) == 'p')
continue;
$o = new stdClass();
$o->product_id = $cp->product_id;
$o->product_type = $cp->product_type;
$o->product_parent_id = $cp->product_parent_id;
$pids[ (int)$cp->product_id ] = (int)$cp->product_id;
$pids[ (int)$cp->product_parent_id ] =
(int)$cp->product_parent_id;
$cart_products[ $k ] = $o;
}
foreach($products as $p) {
$pid = !empty($p['id']) ? (int)$p['id'] :
(int)@$p['data']->product_id;
if(empty($pid))
continue;
$pids[ $pid ] = (int)$pid;
if(!empty($p['data']) &&
!empty($p['data']->product_parent_id)) {
$i = (int)$p['data']->product_parent_id;
$pids[$i] = $i;
}
}
unset($pids[0]);
$query = 'SELECT product_id, product_vendor_id FROM
'.hikamarket::table('shop.product').' WHERE product_id
IN ('.implode(',', $pids).')';
$this->db->setQuery($query);
$product_vendors =
$this->db->loadObjectList('product_id');
$add_vendors = array();
foreach($products as $p) {
$pid = !empty($p['id']) ? (int)$p['id'] :
(int)@$p['data']->product_id;
if(empty($pid))
continue;
$v = 0;
if(isset($product_vendors[ $pid ]))
$v = (int)$product_vendors[ $pid ]->product_vendor_id;
if($v == 0 && !empty($p['data']) &&
!empty($p['data']->product_parent_id))
$v = (int)$product_vendors[
(int)$p['data']->product_parent_id ]->product_vendor_id;
if($v == 0)
$v = 1;
if(!isset($add_vendors[ $v ]))
$add_vendors[ $v ] = 0;
$add_vendors[ $v ]++;
}
if($limit_vendors_in_cart == 2 && count($add_vendors) == 1
&& !empty($add_vendors[1]) &&
!$this->config->get('allow_zone_vendor', 0))
return;
foreach($cart_products as $k => &$cp) {
if(!is_numeric($k) && substr($k, 0, 1) == 'p')
continue;
$cp->product_vendor_id = (int)@$product_vendors[
(int)$cp->product_id ]->product_vendor_id;
if(!empty($cp->product_vendor_id) ||
empty($cp->product_parent_id))
continue;
$cp->product_vendor_id = (int)@$product_vendors[
(int)$cp->product_parent_id ]->product_vendor_id;
}
unset($cp);
$this->manageZoneVendor($cart_products);
$current_vendor_id = 1;
$cart_vendors = array();
foreach($cart_products as $k => $cp) {
if(empty($cart_vendors[ (int)$cp->product_vendor_id ]))
$cart_vendors[ (int)$cp->product_vendor_id ] = 0;
$cart_vendors[ (int)$cp->product_vendor_id ]++;
if((int)$cp->product_vendor_id > 1)
$current_vendor_id = (int)$cp->product_vendor_id;
}
if(!empty($options['message'])) {
$vendor_ids = array_merge(array(1), array_keys($add_vendors),
array_keys($cart_vendors));
$query = 'SELECT vendor_id, vendor_name FROM ' .
hikamarket::table('vendor') . ' as v WHERE v.vendor_id IN
(' . implode(',', $vendor_ids). ')';
$this->db->setQuery($query);
$vendors = $this->db->loadObjectList('vendor_id');
}
$cartClass = hikamarket::get('shop.class.cart');
foreach($products as &$p) {
$pid = !empty($p['id']) ? (int)$p['id'] :
(int)@$p['data']->product_id;
if(empty($pid))
continue;
$v = isset($product_vendors[ $pid ]) ? (int)$product_vendors[ $pid
]->product_vendor_id : 0;
if($v == 0 && !empty($p['data']) &&
!empty($p['data']->product_parent_id))
$v = (int)$product_vendors[
(int)$p['data']->product_parent_id ]->product_vendor_id;
if($v == 0 && !empty(self::$zone_id))
$v = self::$vendor_id;
if(isset($cart_vendors[$v]))
continue;
if($limit_vendors_in_cart == 2 && $v <= 1)
continue;
$p['qty'] = 0;
if(empty($options['message']))
continue;
if($v == 0)
$v = 1;
$msg = JText::sprintf('VENDOR_CART_PRODUCT_REFUSED',
$p['data']->product_name, $vendors[$v]->vendor_name,
$vendors[$current_vendor_id]->vendor_name);
if($limit_vendors_in_cart == 2 && $v > 1 &&
isset($vendors[1]) && !empty($vendors[1]->vendor_name))
$msg = JText::sprintf('VENDOR_CART_PRODUCT_REFUSED_2',
$p['data']->product_name, $vendors[$v]->vendor_name,
$vendors[$current_vendor_id]->vendor_name,
$vendors[1]->vendor_name);
$cartClass->addMessage($cart, array(
'msg' => $msg,
'product_id' => $pid,
'type' => 'notice'
));
}
unset($p);
}
public function onAfterCheckCartQuantities(&$cart, $parent_products,
&$ret) {
if($cart->cart_type != 'cart')
return;
$limit_vendors_in_cart =
$this->config->get('vendors_in_cart', 0);
if($limit_vendors_in_cart == 0)
return;
if(empty($cart->cart_products))
return;
$vendor_zone =
(int)$this->config->get('allow_zone_vendor', 0);
if(empty($vendor_zone) && count($cart->cart_products) == 1)
return;
$cart_vendors = array();
foreach($cart->products as $k => &$p) {
if(!is_numeric($k) && substr($k, 0, 1) == 'p')
continue;
$v = (int)$p->product_vendor_id;
if(empty($v) && $p->product_type == 'variant') {
$v = (int)$cart->products['p'.$k]->product_vendor_id;
$p->product_vendor_id = $v;
}
if(empty($cart_vendors[$v]))
$cart_vendors[$v] = 0;
$cart_vendors[$v]++;
}
unset($p);
if($vendor_zone)
$this->manageZoneVendor($cart->products);
if(!empty($cart_vendors[0])) {
if(!empty(self::$zone_id)) {
if(empty($cart_vendors[self::$vendor_id]))
$cart_vendors[self::$vendor_id] = 0;
$cart_vendors[self::$vendor_id] += $cart_vendors[0];
} else {
if(empty($cart_vendors[1]))
$cart_vendors[1] = 0;
$cart_vendors[1] += $cart_vendors[0];
}
unset($cart_vendors[0]);
}
ksort($cart_vendors);
if(count($cart_vendors) == 1)
return;
if($limit_vendors_in_cart == 2 && count($cart_vendors) == 2
&& !empty($cart_vendors[1]))
return;
if($limit_vendors_in_cart == 2)
unset($cart_vendors[1]);
sort($cart_vendors);
$keep_vendor = array_keys($cart_vendors);
$keep_vendor = array_shift($keep_vendor);
$product_removed = 0;
foreach($cart->cart_products as $k => &$cart_product) {
if(!is_numeric($k) && substr($k, 0, 1) == 'p')
continue;
$v = (int)$cart->products[$k]->product_vendor_id;
if(empty($v) && !empty(self::$zone_id))
$v = self::$vendor_id;
if($limit_vendors_in_cart == 2 && $v <= 1)
continue;
if($v == $keep_vendor)
continue;
$cart_product->cart_product_quantity = 0;
$product_removed++;
}
unset($cart_product);
if(empty($product_removed))
return;
$cartClass = hikamarket::get('shop.class.cart');
$cartClass->addMessage($cart, array(
'msg' =>
JText::_('VENDOR_RESTRICTION_PRODUCT_REMOVED'),
'type' => 'notice'
));
}
public function onAfterProductQuantityCheck(&$product,
&$wantedQuantity, &$quantity, &$cartContent,
&$cart_product_id_for_product, &$displayErrors) {
if(empty($cartContent))
return;
$this->manageZoneVendor($cartContent);
$limit_vendors_in_cart =
$this->config->get('vendors_in_cart', 0);
if($limit_vendors_in_cart == 0)
return;
$vendor_id = (int)$product->product_vendor_id;
if($vendor_id == 0 && $product->product_type ==
'variant' && !empty($product->product_parent_id))
$vendor_id = (int)$this->getProductVendor(
(int)$product->product_parent_id );
if($vendor_id == 1)
$vendor_id = 0;
if($limit_vendors_in_cart == 2 && $vendor_id == 0)
return;
$refuse = false;
$vendor_ids = array();
foreach($cartContent as $p) {
if((int)$p->cart_product_quantity == 0)
continue;
$v = (int)$p->product_vendor_id;
if($v == 0 && $p->product_type == 'variant') {
if(isset($cartContent[ (int)$p->cart_product_parent_id ]))
$v = (int)$cartContent[ (int)$p->cart_product_parent_id
]->product_vendor_id;
else
$v = $this->getProductVendor( (int)$p->product_parent_id );
}
if($v == 1)
$v = 0;
if($v > 1)
$vendor_ids[$v] = $v;
else
$vendor_ids[1] = 1;
if($limit_vendors_in_cart == 2 && $v == 0)
continue;
if($v != $vendor_id) {
$refuse = true;
break;
}
}
if(!$refuse)
return;
$quantity = 0;
$displayErrors = false;
$app = JFactory::getApplication();
if($vendor_id == 0)
$vendor_id = 1;
$this->db->setQuery('SELECT vendor_id, vendor_name FROM '
. hikamarket::table('vendor') . ' as v WHERE v.vendor_id IN
(' . $vendor_id . ',' . implode(',', $vendor_ids)
. ')');
$vendors = $this->db->loadObjectList('vendor_id');
$wantedVendor = $vendors[$vendor_id]->vendor_name;
$otherVendor = null;
foreach($vendors as $v) {
if($v->vendor_id > 1 && $v->vendor_id != $vendor_id)
$otherVendor = $v->vendor_name;
}
if($limit_vendors_in_cart == 2 && $otherVendor !== null
&& isset($vendors[1])) {
$app->enqueueMessage(JText::sprintf('VENDOR_CART_PRODUCT_REFUSED_2',
$product->product_name, $wantedVendor, $otherVendor,
$vendors[1]->vendor_name));
} else {
if($otherVendor === null)
$otherVendor = $vendors[1]->vendor_name;
$app->enqueueMessage(JText::sprintf('VENDOR_CART_PRODUCT_REFUSED',
$product->product_name, $wantedVendor, $otherVendor));
}
}
private function getProductVendor($product_id) {
if(empty($product_id))
return 0;
static $cache = array();
if(isset($cache[$product_id]))
return $cache[$product_id];
$db = JFactory::getDBO();
$db->setQuery('SELECT product_vendor_id FROM
'.hikamarket::table('shop.product').' WHERE product_id
= '.(int)$product_id);
$ret = (int)$db->loadResult();
if($ret == 1)
$ret = 0;
$cache[$product_id] = $ret;
return $cache[$product_id];
}
}
classes/category.php000064400000056003151160562260010537 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketCategoryClass extends hikamarketClass {
protected $tables = array('shop.category');
protected $pkeys = array('category_id');
protected $toggle = array('category_published' =>
'category_id');
protected $toggleAcl = array('category_published' =>
'category/edit/published');
public function getRaw($element, $withimage = false) {
static $multiTranslation = null;
if(empty($element))
return null;
if(in_array($element,array('product','status','tax','manufacturer')))
{
$shopCategoryClass = hikamarket::get('shop.class.category');
return $shopCategoryClass->getMainElement($element);
}
$pkey = end($this->pkeys);
$namekey = end($this->namekeys);
$table = hikamarket::table(end($this->tables));
if(!is_numeric($element) && !empty($namekey)) {
$pkey = $namekey;
}
if($multiTranslation === null) {
$translationHelper =
hikamarket::get('shop.helper.translation');
$multiTranslation = $translationHelper->isMulti(true);
}
if($withimage)
$query = 'SELECT cat.*, file.* FROM '.$table.' AS cat
LEFT JOIN ' . hikamarket::table('shop.file') . ' AS
file ON cat.category_id = file.file_ref_id AND
file.file_type=\'category\' WHERE cat.category_id =
'.$this->db->Quote($element);
else
$query = 'SELECT * FROM '.$table.' WHERE
'.$pkey.' = '.$this->db->Quote($element);
$this->db->setQuery($query, 0, 1);
$app = JFactory::getApplication();
if(!$app->isAdmin() && $multiTranslation &&
class_exists('JFalangDatabase')) {
$ret = $this->db->loadObject('stdClass', false);
} elseif(!$app->isAdmin() && $multiTranslation &&
(class_exists('JFDatabase') ||
class_exists('JDatabaseMySQLx'))) {
$ret = $this->db->loadObject(false);
} else {
$ret = $this->db->loadObject();
}
return $ret;
}
public function frontSaveForm() {
$app = JFactory::getApplication();
$category_id = hikamarket::getCID('category_id');
$categoryClass = hikamarket::get('shop.class.category');
$fieldsClass = hikamarket::get('shop.class.field');
$vendorClass = hikamarket::get('class.vendor');
$vendor_id = hikamarket::loadVendor(false, false);
$formData = hikaInput::get()->get('data', array(),
'array');
$formCategory = array();
if(!empty($formData['category']))
$formCategory = $formData['category'];
$new = false;
$oldCategory = null;
if(empty($category_id))
$new = true;
if(!$new) {
$oldCategory = $categoryClass->get($category_id);
if(empty($oldCategory))
return false;
if(!in_array($oldCategory->category_type, array('product',
'vendor')))
return false;
if($vendor_id > 1 && $oldCategory->category_type ==
'vendor' && $oldCategory->category_namekey !=
'vendor_' . $vendor_id)
return false;
}
$category = $fieldsClass->getInput('category', $oldCategory,
true, 'data', false, 'display:vendor_category_edit');
if(empty($category))
return false;
$category->category_id = (int)$category_id;
$category->category_type = 'product';
if(!empty($oldCategory))
$category->category_type = $oldCategory->category_type;
if(!hikamarket::acl('category/edit/name')) {
unset($category->category_name); }
if(!hikamarket::acl('category/edit/published')) {
unset($category->category_published); }
if(!hikamarket::acl('category/edit/pagetitle')) {
unset($category->category_page_title); }
if(!hikamarket::acl('category/edit/metadescription')) {
unset($category->category_meta_description); }
if(!hikamarket::acl('category/edit/keywords')) {
unset($category->category_keywords); }
if(!hikamarket::acl('category/edit/alias')) {
unset($category->category_alias); }
if(!hikamarket::acl('category/edit/acl')) {
unset($category->category_access); }
if(hikamarket::acl('category/edit/description')) {
$category->category_description =
hikaInput::get()->getRaw('category_description',
'');
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$category->category_description =
$safeHtmlFilter->clean($category->category_description,
'string');
}
if(!hikamarket::acl('category/edit/parent') ||
empty($category->category_parent_id) ||
(!hikamarket::isVendorCategory($category->category_parent_id))) {
unset($category->category_parent_id);
}
if(!isset($category->category_parent_id) && $new) {
$rootCategory = $vendorClass->getRootCategory($vendor_id);
if($rootCategory == 0) {
$rootCategory = 1;
}
$category->category_parent_id = $rootCategory;
}
if($vendor_id > 1 && !empty($oldCategory) &&
$oldCategory->category_type == 'vendor') {
unset($category->category_published);
unset($category->category_parent_id);
}
$category_image_id = @$category->category_image;
unset($category->category_image);
$category->hikamarket = new stdClass();
$category->hikamarket->force_type = $category->category_type;
$status = $this->save($category);
if($status) {
if(hikamarket::acl('category/edit/images')) {
if($category_id > 0) {
$query = 'DELETE FROM ' .
hikamarket::table('shop.file') . ' WHERE
file_type=\'category\' AND file_ref_id = ' .
(int)$category_id . ' ';
if($category_image_id != 0)
$query .= ' AND file_id != ' . $category_image_id;
$this->db->setQuery($query);
$this->db->execute();
}
if($category_image_id > 0 && $category_id == 0) {
$query = 'UPDATE ' .
hikamarket::table('shop.file') . ' SET file_ref_id =
'.(int)$status.' WHERE file_type=\'category\' AND
file_ref_id = 0 AND file_id = '.$category_image_id;
$this->db->setQuery($query);
$this->db->execute();
}
}
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'),
'success');
} else {
hikaInput::get()->set('fail', $category);
}
return $status;
}
public function save(&$element, $ordering = true) {
$categoryClass = hikamarket::get('shop.class.category');
return $categoryClass->save($element, $ordering);
}
public function toggleId($task, $value = null) {
if($value !== null) {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value == 0 ||
!hikamarket::isVendorCategory((int)$value) ||
empty($this->toggle[$task]) || ( empty($this->toggleAcl[$task])
&& !hikamarket::acl('category/edit/'.$task) ) || (
!empty($this->toggleAcl[$task]) &&
!hikamarket::acl($this->toggleAcl[$task]) ) ))
return false;
}
if(!empty($this->toggle[$task]))
return $this->toggle[$task];
return false;
}
public function toggleDelete($value1 = '', $value2 =
'') {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value1 == 0 ||
!hikamarket::isVendorCategory((int)$value1) ||
!hikamarket::acl('category/delete')))
return false;
if(!empty($this->deleteToggle))
return $this->deleteToggle;
return false;
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$app = JFactory::getApplication();
static $multiTranslation = null;
if($multiTranslation === null) {
$translationHelper =
hikamarket::get('shop.helper.translation');
$multiTranslation = $translationHelper->isMulti(true);
}
$category_type =
array('product','root','vendor');
if(!empty($typeConfig['params']['category_type']))
$category_type =
$typeConfig['params']['category_type'];
if(is_string($category_type))
$category_type = explode(',', $category_type);
$key_value = @$options['key'];
if(empty($key_value))
$key_value = @$typeConfig['params']['key'];
if(empty($key_value))
$key_value = 'category_name';
$fullLoad = false;
$displayFormat = !empty($options['displayFormat']) ?
$options['displayFormat'] :
@$typeConfig['displayFormat'];
$depth = (int)@$options['depth'];
$start = (int)@$options['start'];
$limit = (int)@$options['limit'];
$page = (int)@$options['page'];
$cats = array();
$is_root = false;
if(empty($start) && !empty($options['root'])) {
if(!is_array($options['root'])) {
$start = (int)$options['root'];
} else {
$start = $options['root'];
hikamarket::toInteger($start);
}
$is_root = true;
}
if($depth <= 0)
$depth = 1;
if($limit <= 0)
$limit = 200;
$category_types = array();
foreach($category_type as $t) {
$category_types[] = $this->db->Quote($t);
}
$select = array('c.*');
$table = array(hikamarket::table('shop.category').' AS
c');
$where = array('c.category_type IN ('.implode(',',
$category_types).')');
if($typeConfig['mode'] == 'list')
$where[] = 'c.category_namekey NOT IN
('.implode(',', $category_types).')';
if(in_array('manufacturer', $category_type))
$where[] = 'c.category_published = 1';
if(in_array('product', $category_type) &&
empty($search)) {
if(empty($start))
$where[] = 'c.category_depth >= 0 AND c.category_depth <=
' . $depth;
else
$where[] = 'c.category_depth >= cp.category_depth AND
c.category_depth <= (cp.category_depth + ' . $depth .
')';
}
if(!empty($search)) {
$searchStr = "'%" . ((HIKASHOP_J30) ?
$this->db->escape($search, true) :
$this->db->getEscaped($search, true) ) . "%'";
if(!is_array($start))
$where[] = '(c.category_name LIKE ' . $searchStr . ' OR
c.category_id = '.$start.')';
else
$where[] = '(c.category_name LIKE ' . $searchStr . ' OR
c.category_id IN ('.implode(',', $start).'))';
}
if(!empty($start) && ((is_int($start) && $start > 0)
|| (is_array($start) && count($start) > 0))) {
if(!is_array($start))
$table[] = 'INNER JOIN
'.hikamarket::table('shop.category').' AS cp ON
cp.category_id = ' . $start;
else
$table[] = 'INNER JOIN
'.hikamarket::table('shop.category').' AS cp ON
(cp.category_id IN (' . implode(',', $start) .
'))';
$where[] = '(c.category_left >= cp.category_left AND
c.category_right <= cp.category_right)';
}
if(!empty($typeConfig['params']['filters'])) {
$extra_filters = $typeConfig['params']['filters'];
if(!is_array($extra_filters))
$extra_filters = array($extra_filters);
$where = array_merge($where, $extra_filters);
}
if($typeConfig['mode'] == 'list')
$order = ' ORDER BY c.category_name ASC';
else
$order = ' ORDER BY c.category_parent_id ASC,
c.category_ordering';
$query = 'SELECT '.implode(', ', $select) . '
FROM ' . implode(' ', $table) . ' WHERE ' .
implode(' AND ', $where) . $order;
$this->db->setQuery($query, $page, $limit);
if(!$app->isAdmin() && $multiTranslation &&
class_exists('JFalangDatabase')) {
$categories = $this->db->loadObjectList('category_id',
'stdClass', false);
} elseif(!$app->isAdmin() && $multiTranslation &&
(class_exists('JFDatabase') ||
class_exists('JDatabaseMySQLx'))) {
$categories = $this->db->loadObjectList('category_id',
false);
} else {
$categories = $this->db->loadObjectList('category_id');
}
if($typeConfig['mode'] == 'list') {
if(count($categories) < $limit)
$fullLoad = true;
if(!empty($typeConfig['params']['category_type'])
&& $typeConfig['params']['category_type'] ==
'status') {
foreach($categories as $category) {
if(!empty($category->translation))
$ret[0][$category->category_name] =
hikamarket::orderStatus($category->translation);
else
$ret[0][$category->category_name] =
hikamarket::orderStatus($category->category_name);
}
} else {
foreach($categories as $category) {
$ret[0][$category->$key_value] =
(!empty($category->translation)) ? $category->translation :
$category->category_name;
}
}
} else {
$tmp = array();
if(!empty($search)) {
$base = '';
if(is_int($start) && $start > 0) {
$base = '(c.category_left <= ' .
(int)$categories[$start]->category_left . ' AND c.category_right
>= ' . (int)$categories[$start]->category_right . ') AND
';
} else if(is_array($start) && count($start) > 0) {
$b = array();
foreach($start as $c) {
$b[] = 'c.category_left <= ' .
(int)$categories[$c]->category_left . ' AND c.category_right >=
' . (int)$categories[$c]->category_right;
}
$base = '((' . implode(') OR (', $b) . '))
AND ';
}
$lookup_categories = array();
foreach($categories as $c) {
if(empty($lookup_categories[ (int)$c->category_id ]))
$lookup_categories[ (int)$c->category_id ] =
(int)$c->category_left . ' AND c.category_right > ' .
(int)$c->category_right;
}
$query = 'SELECT c.* ' .
' FROM ' . hikamarket::table('shop.category') .
' AS c ' .
' WHERE ' . $base . '((c.category_left <
'.implode(') OR (c.category_left < ', $lookup_categories)
. '))' . $order;
$this->db->setQuery($query);
if(!$app->isAdmin() && $multiTranslation &&
class_exists('JFalangDatabase')) {
$category_tree =
$this->db->loadObjectList('category_id',
'stdClass', false);
} elseif(!$app->isAdmin() && $multiTranslation &&
(class_exists('JFDatabase') ||
class_exists('JDatabaseMySQLx'))) {
$category_tree =
$this->db->loadObjectList('category_id', false);
} else {
$category_tree =
$this->db->loadObjectList('category_id');
}
if(is_array($start) && $is_root) {
$r = (int)reset($start);
if(isset($category_tree[$r])) {
$o = new stdClass();
$o->status = 5;
$o->name = (!empty($category_tree[$r]->translation)) ?
$category_tree[$r]->translation :
JText::_($category_tree[$r]->category_name); //
JText::_($category_tree[$r]->category_name);
$o->value = $r;
$o->data = array();
$o->icon = 'world';
$ret[0][] =& $o;
$tmp[$k] =& $o;
}
}
foreach($category_tree as $k => $v) {
if(!$is_root && ((is_int($start) && $k == $start) ||
(is_array($start) && in_array($k, $start))))
continue;
if(is_array($start) && isset($tmp[$k]))
continue;
$o = new stdClass();
$o->status = 2;
$o->name = JText::_($v->category_name);
$o->value = $k;
$o->data = array();
if(empty($v->category_parent_id) || ((is_int($start) && $k
== $start) || (is_array($start) && in_array($k, $start)))) {
$o->status = 5;
$o->icon = 'world';
$ret[0][] =& $o;
} else if((int)$v->category_parent_id == 1 ||
!isset($tmp[(int)$v->category_parent_id])) {
$ret[0][] =& $o;
} else {
$tmp[(int)$v->category_parent_id]->data[] =& $o;
}
$tmp[$k] =& $o;
unset($o);
}
}
if(is_array($start) && $is_root) {
$r = (int)reset($start);
if(isset($categories[$r])) {
$o = new stdClass();
$o->status = 5;
$o->name = (!empty($categories[$r]->translation)) ?
$categories[$r]->translation :
JText::_($categories[$r]->category_name);
$o->value = $r;
$o->data = array();
$o->icon = 'world';
$ret[0][] =& $o;
$tmp[$r] =& $o;
unset($o);
}
}
foreach($categories as $k => $v) {
if(!$is_root && ((is_int($start) && $k == $start) ||
(is_array($start) && in_array($k, $start))))
continue;
if(is_array($start) && in_array($k, $start) &&
isset($tmp[$k]))
continue;
$o = new stdClass();
$o->status = 3;
$o->name = (!empty($v->translation)) ? $v->translation :
JText::_($v->category_name);
$o->value = $k;
$o->data = array();
if($v->category_left + 1 == $v->category_right)
$o->status = 4;
if(empty($v->category_parent_id) || ((is_int($start) && $k
== $start) || (is_array($start) && in_array($k, $start)))) {
$o->status = 5;
$o->icon = 'world';
$ret[0][] =& $o;
} else if((int)$v->category_parent_id == 1 ||
!isset($tmp[(int)$v->category_parent_id])) {
$ret[0][] =& $o;
} else {
$tmp[(int)$v->category_parent_id]->status = 2;
$tmp[(int)$v->category_parent_id]->data[] =& $o;
}
$tmp[$k] =& $o;
unset($o);
}
}
if(!empty($value) &&
@$typeConfig['params']['category_type'] ==
'status') {
if($mode == hikamarketNameboxType::NAMEBOX_SINGLE) {
if(isset($ret[0][$value])) {
$ret[1][$value] = $ret[0][$value];
return $ret;
}
} else if($mode == hikamarketNameboxType::NAMEBOX_MULTIPLE &&
is_array($value)) {
foreach($value as $v) {
if(isset($ret[0][$v])) {
$ret[1][$v] = $ret[0][$v];
}
}
return $ret;
}
}
if(empty($value) && is_array($value) && count($value) ==
1 && $value[0] == '')
$value = array();
if(!empty($value)) {
if(!is_array($value))
$value = array($value);
$search = array();
$f = reset($value);
if(is_int($f) || (int)$f > 0) {
foreach($value as $v) {
$search[] = (int)$v;
}
$query = 'SELECT c.* '.
' FROM ' . hikamarket::table('shop.category') .
' AS c '.
' WHERE c.category_id IN ('.implode(',',
$search).')';
} else {
foreach($value as $v) {
$search[] = $this->db->Quote($v);
}
$query = 'SELECT c.* '.
' FROM ' . hikamarket::table('shop.category') .
' AS c '.
' WHERE c.category_name IN ('.implode(',',
$search).')';
}
$this->db->setQuery($query);
if(!$app->isAdmin() && $multiTranslation &&
class_exists('JFalangDatabase')) {
$categories = $this->db->loadObjectList('category_id',
'stdClass', false);
} elseif(!$app->isAdmin() && $multiTranslation &&
(class_exists('JFDatabase') ||
class_exists('JDatabaseMySQLx'))) {
$categories = $this->db->loadObjectList('category_id',
false);
} else {
$categories =
$this->db->loadObjectList('category_id');
}
if(!empty($categories)) {
foreach($categories as $category) {
$category->name = (!empty($category->translation)) ?
$category->translation : JText::_($category->category_name);
$ret[1][$category->category_id] = $category;
}
}
unset($categories);
if($mode == hikamarketNameboxType::NAMEBOX_SINGLE)
$ret[1] = reset($ret[1]);
}
return $ret;
}
public function &getList($type = 'product', $root = 0,
$getRoot = true) {
$app = JFactory::getApplication();
$select = 'SELECT a.*';
$table = ' FROM
'.hikamarket::table('shop.category').' AS a ';
$where = array();
if(!empty($type)) {
if(is_array($type)) {
if($getRoot && !in_array('root', $type))
$type[] = 'root';
$types = array();
foreach($type as $t) {
$types[] = $this->db->Quote($t);
}
$where[] = 'a.category_type IN
('.implode(',',$types).')';
} else {
if($getRoot) {
$where[] = 'a.category_type IN
('.$this->db->Quote($type).',\'root\')';
} else {
$where[] = 'a.category_type =
'.$this->db->Quote($type);
}
}
}
if((int)$root > 0) {
$table .= ' INNER JOIN
'.hikamarket::table('shop.category').' AS b On
b.category_id = ' . (int)$root . ' ';
$where[] = 'a.category_left >= b.category_left AND
a.category_right <= b.category_right';
}
if(!empty($where)) {
$where = ' WHERE (' . implode($where,') AND (').
')';
} else {
$where = '';
}
$this->db->setQuery($select . $table . $where . ' ORDER BY
a.category_left ASC'); //' ORDER BY a.category_parent_id ASC,
a.category_ordering ASC');
$elements = $this->db->loadObjectList();
foreach($elements as &$element) {
if(empty($element->value)){
$val = str_replace(array(' ',','), '_',
strtoupper($element->category_name));
$element->value = JText::_($val);
if($val == $element->value) {
$element->value = $element->category_name;
}
}
$element->category_name = $element->value;
if($element->category_namekey == 'root') {
$element->category_parent_id = -1;
}
unset($element);
}
return $elements;
}
public function beforeCategoryCreate(&$category, &$do) {
if($category->category_type != 'vendor')
return;
$test = $category->category_type . '_' .
$category->category_created . '_';
if(substr($category->category_namekey, 0, strlen($test)) != $test)
return;
$category->category_type = 'product';
$category->category_namekey = $category->category_type .
'_' . $category->category_created . '_' . rand();
}
public function beforeCategoryUpdate(&$category, &$do) {
if(empty($category->hikamarket) ||
empty($category->hikamarket->force_type))
return;
$category->category_type = $category->hikamarket->force_type;
}
public function processListing(&$filters, &$order, &$view,
&$leftjoin) {
if(!$view->module)
return;
$option =
hikaInput::get()->getString('option','');
$ctrl = hikaInput::get()->getString('ctrl','');
$task = hikaInput::get()->getString('task','');
$viewName = $view->getName();
if($option != HIKAMARKET_COMPONENT || $ctrl != 'vendor' ||
$task != 'show' || $viewName != 'category')
return;
$content_synchronize =
$view->params->get('content_synchronize', 0);
if(!$content_synchronize)
return;
$vendor_id = hikamarket::getCID('vendor_id');
$filter_type = $view->params->get('filter_type');
$filter_only_products =
(int)$view->params->get('only_if_products', 0);
if($filter_only_products) {
$leftjoin .= ' INNER JOIN
'.hikamarket::table('shop.product_category').' AS pc ON
pc.category_id = a.category_id '.
' INNER JOIN
'.hikamarket::table('shop.product').' AS p ON
p.product_id = pc.product_id ';
if($vendor_id == 1)
$filters[] = '(p.product_vendor_id = 1 OR p.product_vendor_id =
0)';
else
$filters[] = 'p.product_vendor_id = '.$vendor_id;
}
if((int)$filter_type == 0) {
$vendorClass = hikamarket::get('class.vendor');
$rootCategory = $vendorClass->getRootCategory($vendor_id);
if(empty($rootCategory))
return;
if(isset($filters['category_parent_id'])) {
$filters['category_parent_id'] = 'a.category_parent_id =
' . (int)$rootCategory;
} else {
foreach($filters as &$filter) {
if(substr($filter, 0, 23) != 'a.category_parent_id = ')
continue;
$filter = 'a.category_parent_id = ' . (int)$rootCategory;
break;
}
unset($filter);
}
}
}
public function processView(&$view) {
$layout = $view->getLayout();
if(!in_array($layout, array('listing')))
return;
$config = hikamarket::config();
$paramsOpt =
(int)$view->params->get('market_vendor_categories', -1);
if($paramsOpt < 0)
$paramsOpt =
(int)$config->get('override_vendor_category_link', 0);
if(empty($paramsOpt))
return;
if(empty($view->rows))
return;
foreach($view->rows as &$row) {
if(!isset($row->category_namekey) ||
substr($row->category_namekey, 0, 7) != 'vendor_')
continue;
$vendor_id = (int)substr($row->category_namekey, 7);
$vendorItemId = (int)$config ->get('vendor_default_menu',
'');
if(empty($vendorItemId))
$vendorItemId = '';
if(!empty($vendorItemId))
$vendorItemId = '&Itemid='.$vendorItemId;
$row->override_url =
hikamarket::completeLink('vendor&task=show&cid='.$vendor_id.$vendorItemId);
if(!empty($row->link)) {
$row->link_origin = $row->link;
$row->link = $row->override_url;
}
}
unset($row);
}
}
classes/characteristic.php000064400000033430151160562260011711
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketCharacteristicClass extends hikamarketClass {
protected $tables = array('shop.characteristic');
protected $pkeys = array('characteristic_id');
protected $toggle = array();
protected $deleteToggle = array(
'shop.characteristic' => array(
'characteristic_id',
'characteristic_parent_id'
)
);
public function frontSaveForm() {
$app = JFactory::getApplication();
$config = hikamarket::config();
$characteristic_id = hikamarket::getCID('characteristic_id');
$characteristicClass =
hikamarket::get('shop.class.characteristic');
$fieldsClass = hikamarket::get('shop.class.field');
$vendor_id = hikamarket::loadVendor(false, false);
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$stripTags = (int)$config->get('characteristic_strip_tags',
1);
$formData = hikaInput::get()->get('data', array(),
'array');
$characteristic_parent_id =
hikaInput::get()->getInt('characteristic_parent_id', 0);
$formCharacteristic = array();
if(!empty($formData['characteristic']))
$formCharacteristic = $formData['characteristic'];
$new = empty($characteristic_id);
$characteristic = new stdClass();
$oldCharacteristic = null;
$reorder_values = array();
$update_values = array();
$create_values = array();
$current_values = array();
$characteristic->characteristic_id = (int)$characteristic_id;
$oldCharacteristic = $characteristicClass->get($characteristic_id);
if(empty($characteristic_parent_id) || !empty($formCharacteristic)) {
if(!$new && !hikamarket::acl('characteristic/edit'))
return false;
if($new && !hikamarket::acl('characteristic/add'))
return false;
if($new || $vendor_id <= 1 ||
(int)$oldCharacteristic->characteristic_vendor_id == $vendor_id) {
if(hikamarket::acl('characteristic/edit/value') &&
isset($formCharacteristic['characteristic_value'])) {
if($stripTags)
$characteristic->characteristic_value =
strip_tags(trim($formCharacteristic['characteristic_value']));
else
$characteristic->characteristic_value =
$safeHtmlFilter->clean(trim($formCharacteristic['characteristic_value']),
'string');
}
if(hikamarket::acl('characteristic/edit/alias') &&
isset($formCharacteristic['characteristic_alias'])) {
if($stripTags)
$characteristic->characteristic_alias =
strip_tags(trim($formCharacteristic['characteristic_alias']));
else
$characteristic->characteristic_alias =
$safeHtmlFilter->clean(trim($formCharacteristic['characteristic_alias']),
'string');
}
if($vendor_id <= 1 &&
hikamarket::acl('characteristic/edit/vendor') &&
isset($formCharacteristic['characteristic_vendor_id']))
$characteristic->characteristic_vendor_id =
(int)$formCharacteristic['characteristic_vendor_id'];
if($new && $vendor_id > 1)
$characteristic->characteristic_vendor_id = (int)$vendor_id;
}
$value_edit =
hikamarket::acl('characteristic/values/edit/value');
$vendor_edit = ($vendor_id <= 1) &&
hikamarket::acl('characteristic/values/edit/vendor');
$ordering_edit =
hikamarket::acl('characteristic/values/ordering');
if(!$new &&
hikamarket::acl('characteristic/values/ordering') &&
!empty($formData['values']) &&
isset($formData['values']['id']) &&
isset($formData['values']['ordering'])) {
$p = array_search('{ID}',
$formData['values']['id']);
if($p !== false) {
unset($formData['values']['id'][$p]);
unset($formData['values']['ordering'][$p]);
}
hikamarket::toInteger($formData['values']['id']);
hikamarket::toInteger($formData['values']['ordering']);
$values = array_combine($formData['values']['id'],
$formData['values']['ordering']);
$query = 'SELECT * FROM ' .
hikamarket::table('shop.characteristic') .
' WHERE characteristic_parent_id = ' .
(int)$characteristic_id . ' AND characteristic_id IN
('.implode(',', array_keys($values)).')';
if($vendor_id > 1)
$query .= ' AND characteristic_vendor_id = ' .
(int)$vendor_id;
$this->db->setQuery($query);
$current_values =
$this->db->loadObjectList('characteristic_id');
$current_ids = array_keys($current_values);
hikamarket::toInteger($current_ids);
$wrong_data = array_diff($formData['values']['id'],
$current_ids);
if(!empty($wrong_data)) {
foreach($wrong_data as $wd) {
unset($values[$wd]);
}
}
foreach($values as $k => $value) {
if(!isset($current_values[$k]))
continue;
if((int)$current_values[$k]->characteristic_ordering != $value)
$reorder_values[$k] = $value;
}
unset($values);
}
if(!$new &&
hikamarket::acl('characteristic/values/edit') &&
!empty($formData['characteristic_value'])) {
$values = $formData['characteristic_value'];
if(empty($current_values)) {
$query = 'SELECT * FROM ' .
hikamarket::table('shop.characteristic') .
' WHERE characteristic_parent_id = ' .
(int)$characteristic_id . ' AND characteristic_id IN
('.implode(',', array_keys($values)).')';
if($vendor_id > 1)
$query .= ' AND characteristic_vendor_id = ' .
(int)$vendor_id;
$this->db->setQuery($query);
$current_values =
$this->db->loadObjectList('characteristic_id');
}
$current_ids = array_keys($current_values);
hikamarket::toInteger($current_ids);
$wrong_data = array_diff(array_keys($values), $current_ids);
if(!empty($wrong_data)) {
foreach($wrong_data as $wd) {
unset($values[$wd]);
}
}
foreach($values as $k => $value) {
if(empty($value['value']))
continue;
$v = array();
if($value_edit)
$v[] = $safeHtmlFilter->clean(trim($value['value']),
'string');
if($vendor_edit)
$v[] = (int)$value['vendor'];
$update_values[(int)$k] = $v;
}
}
if($new &&
hikamarket::acl('characteristic/values/add') &&
!empty($formData['values']) &&
!empty($formData['values']['value'])) {
foreach($formData['values']['value'] as $k =>
$v) {
if(empty($v) || trim($v) == '')
continue;
$v = array($v);
if($ordering_edit)
$v[] =
(empty($formData['values']['ordering'][$k])) ? 0 :
(int)$formData['values']['ordering'][$k];
if($vendor_edit)
$v[] = (empty($formData['values']['vendor'][$k]))
? 0 : (int)$formData['values']['vendor'][$k];
$create_values[] = $v;
}
}
} else {
if($new || !hikamarket::acl('characteristic/values/edit'))
return false;
if($vendor_id > 1 &&
(int)$oldCharacteristic->characteristic_vendor_id != $vendor_id)
return false;
$formCharacteristic = array();
if(!empty($formData['characteristic_value'][(int)$characteristic_id]))
$formCharacteristic =
$formData['characteristic_value'][(int)$characteristic_id];
else
return false;
if(hikamarket::acl('characteristic/values/edit/value')) {
if(empty($formCharacteristic['value']) ||
trim($formCharacteristic['value']) == '')
return false;
if($stripTags)
$characteristic->characteristic_value =
strip_tags(trim($formCharacteristic['value']));
else
$characteristic->characteristic_value =
$safeHtmlFilter->clean(trim($formCharacteristic['value']),
'string');
}
if($vendor_id <= 1 &&
hikamarket::acl('characteristic/values/edit/vendor') &&
isset($formCharacteristic['vendor']))
$characteristic->characteristic_vendor_id =
(int)$formCharacteristic['vendor'];
}
$status = $this->save($characteristic);
if($status) {
if(!empty($reorder_values)) {
$data = array();
foreach($reorder_values as $k => $v) {
$data[] = (int)$k . ',' . (int)$v;
}
$query = 'INSERT INTO ' .
hikamarket::table('shop.characteristic') . '
(characteristic_id, characteristic_ordering) VALUES (' .
implode('),(', $data) . ') '.
'ON DUPLICATE KEY UPDATE characteristic_ordering =
VALUES(characteristic_ordering)';
$this->db->setQuery($query);
$this->db->execute();
unset($data);
}
if(!empty($update_values)) {
$data = array();
foreach($update_values as $k => $v) {
$d = (int)$k;
if($value_edit) $d .= ',' . $this->db->Quote(
array_shift($v) );
if($vendor_edit) $d .= ',' . (int)array_shift($v);
$data[] = $d;
}
$dupcolumns = array();
$columns = array('characteristic_id');
if($value_edit) {
$columns[] = 'characteristic_value';
$dupcolumns[] = 'characteristic_value =
VALUES(characteristic_value)';
}
if($vendor_edit) {
$columns[] = 'characteristic_vendor_id';
$dupcolumns[] = 'characteristic_vendor_id =
VALUES(characteristic_vendor_id)';
}
$query = 'INSERT INTO ' .
hikamarket::table('shop.characteristic') . '
('.implode(',', $columns).') VALUES (' .
implode('),(', $data) . ') '.
'ON DUPLICATE KEY UPDATE ' . implode(',',
$dupcolumns);
$this->db->setQuery($query);
$this->db->execute();
unset($data);
unset($columns);
unset($dupcolumns);
}
if(!empty($create_values)) {
$data = array();
foreach($create_values as $k => $v) {
$d = $this->db->Quote( array_shift($v) );
if($ordering_edit) $d .= ',' . (int)array_shift($v);
$d .= ',' . (($vendor_edit) ? (int)array_shift($v) :
(int)$vendor_id);
$data[] = $d;
}
$columns = array('characteristic_parent_id',
'characteristic_alias', 'characteristic_value');
if($ordering_edit) $columns[] = 'characteristic_ordering';
$columns[] = 'characteristic_vendor_id';
$query = 'INSERT IGNORE INTO ' .
hikamarket::table('shop.characteristic') . '
('.implode(',', $columns) . ') '.
'VALUES (' . (int)$status . ',' .
$this->db->Quote('') . ',' .
implode('),(' . (int)$status . ',' .
$this->db->Quote('') . ',', $data) .
')';
$this->db->setQuery($query);
$this->db->execute();
unset($data);
unset($columns);
}
} else {
hikaInput::get()->set('fail', $characteristic);
}
return $status;
}
public function save(&$element) {
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikamarket');
$do = true;
$new = empty($element->characteristic_id);
if($new)
$app->triggerEvent('onBeforeCharacteristicCreate',
array(&$element, &$do));
else
$app->triggerEvent('onBeforeCharacteristicUpdate',
array(&$element, &$do));
if(!$do)
return false;
$status = parent::save($element);
if(!$status)
return false;
if($new)
$app->triggerEvent('onAfterCharacteristicCreate',
array(&$element));
else
$app->triggerEvent('onAfterCharacteristicUpdate',
array(&$element));
return $status;
}
public function findValue($value, $characteristic_parent_id, $vendor_id =
-1) {
$ret = false;
if($vendor_id < 0)
$vendor_id = hikamarket::loadVendor(false);
$query = 'SELECT count(characteristic_id) FROM ' .
hikamarket::table('shop.characteristic').
' WHERE characteristic_value LIKE ' .
$this->db->Quote($value) . ' AND characteristic_parent_id =
' . (int)$characteristic_parent_id .
' AND characteristic_vendor_id IN (0, ' . (int)$vendor_id .
')';
$this->db->setQuery($query);
$ret = (int)$this->db->loadResult();
return $ret;
}
public function toggleDelete($value1 = '', $value2 =
'') {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value1 == 0 ||
!hikamarket::isVendorCharacteristic((int)$value1, (int)$value2) ||
!hikamarket::acl('characteristic/delete')))
return false;
$query = 'SELECT COUNT(v.variant_product_id) as counter '.
' FROM ' . hikamarket::table('shop.variant') .
' AS v INNER JOIN ' . hikamarket::table('shop.product')
. ' AS p ON v.variant_product_id = p.product_id '.
' WHERE variant_characteristic_id = '.(int)$value1.' AND
p.product_type = ' . $this->db->Quote('variant');
$this->db->setQuery($query);
$ret = (int)$this->db->loadResult();
if($ret > 0)
return false;
if((int)$value2 == 0)
return array('shop.characteristic' =>
array('characteristic_id', null));
if(!empty($this->deleteToggle))
return $this->deleteToggle;
return false;
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$characteristics = null;
if(isset($typeConfig['params']['value']) &&
$typeConfig['params']['value']) {
if((int)$options['url_params']['ID'] > 0) {
$query = 'SELECT characteristic_value, characteristic_id,
characteristic_alias FROM ' .
hikamarket::table('shop.characteristic').' WHERE
characteristic_parent_id = ' .
(int)$options['url_params']['ID'];
if(!empty($options['vendor']))
$query .= ' AND characteristic_vendor_id IN (0,
'.(int)$options['vendor'].')';
if(!empty($search))
$query .= ' AND characteristic_value LIKE \'%' .
hikamarket::getEscaped($search) . '%\'';
$this->db->setQuery($query);
$characteristics =
$this->db->loadObjectList('characteristic_id');
}
if(!empty($value)) {
}
} else {
$query = 'SELECT characteristic_value, characteristic_id,
characteristic_alias FROM ' .
hikamarket::table('shop.characteristic').' WHERE
characteristic_parent_id = 0';
if(!empty($options['vendor']))
$query .= ' AND characteristic_vendor_id IN (0,
'.(int)$options['vendor'].')';
$this->db->setQuery($query);
$characteristics =
$this->db->loadObjectList('characteristic_id');
if(!empty($value)) {
}
}
if(!empty($characteristics)) {
foreach($characteristics as $k => $v) {
$ret[0][$k] = $v;
}
asort($ret[0]);
}
unset($characteristics);
return $ret;
}
}
classes/checkout.php000064400000004436151160562260010532 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketCheckoutClass extends hikamarketClass {
public function afterCheckoutStep($controllerName, &$go_back,
$original_go_back, &$controller) {
if($controllerName == 'plg.market.terms')
return $this->afterTermsCheckoutStep($go_back, $original_go_back,
$controller);
}
private function afterTermsCheckoutStep(&$go_back, $original_go_back,
&$controller) {
$app = JFactory::getApplication();
$is_block =
hikaInput::get()->getInt('hikamarket_checkout_terms_block',
0);
if($is_block) {
$app->setUserState(HIKASHOP_COMPONENT.'.checkout_terms',
hikaInput::get()->getInt('hikashop_checkout_terms', 0));
$app->setUserState(HIKAMARKET_COMPONENT.'.checkout_terms',
hikaInput::get()->get('hikamarket_checkout_terms', array(),
'array'));
}
if(!empty($controller->cart_update) || $go_back)
return;
$status =
(bool)$app->getUserState(HIKASHOP_COMPONENT.'.checkout_terms',
0);
if(!$status) {
$app->enqueueMessage(JText::_('PLEASE_ACCEPT_TERMS_BEFORE_FINISHING_ORDER'),
'error');
$go_back = true;
}
$cart = $controller->initCart();
$vendors = array();
foreach($cart->products as $product) {
$vendor_id = (int)$product->product_vendor_id;
$vendors[$vendor_id] = $vendor_id;
}
if(isset($vendors[0])) unset($vendors[0]);
if(isset($vendors[1])) unset($vendors[1]);
if(!empty($vendors)) {
$db = JFactory::getDBO();
$query = 'SELECT vendor_id, vendor_name, vendor_terms FROM
'.hikamarket::table('vendor').' WHERE vendor_id IN
('.implode(',', $vendors).')';
$db->setQuery($query);
$terms_content = $db->loadObjectList('vendor_id');
$terms =
(array)$app->getUserState(HIKAMARKET_COMPONENT.'.checkout_terms',
array());
foreach($vendors as $vendor) {
if(!empty($terms_content[$vendor]->vendor_terms) &&
empty($terms[$vendor])) {
$app->enqueueMessage(JText::sprintf('PLEASE_ACCEPT_TERMS_FOR_VENDOR_BEFORE_FINISHING_ORDER',
$terms_content[$vendor]->vendor_name), 'error');
$go_back = true;
}
}
}
}
}
classes/config.php000064400000014101151160562260010160 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketConfigClass extends hikamarketClass {
protected $toggle = array('config_value' =>
'config_namekey');
public function load() {
$query = 'SELECT * FROM
'.hikamarket::table('config');
$this->db->setQuery($query);
$this->values =
$this->db->loadObjectList('config_namekey');
if(!empty($this->values['default_params']->config_value))
{
$this->values['default_params']->config_value =
hikamarket::unserialize(base64_decode($this->values['default_params']->config_value));
}
}
public function set($namekey, $value = null) {
if(empty($this->values))
$this->values = array();
$this->values[$namekey] = new stdClass();
$this->values[$namekey]->config_value = $value;
$this->values[$namekey]->config_namekey = $namekey;
return true;
}
public function get($namekey, $default = null) {
if(isset($this->values[$namekey])){
if(preg_match('#^(menu_|params_)[0-9]+$#',$namekey) &&
!empty($this->values[$namekey]->config_value) &&
is_string($this->values[$namekey]->config_value)) {
$this->values[$namekey]->config_value =
hikamarket::unserialize(base64_decode($this->values[$namekey]->config_value));
}
return $this->values[$namekey]->config_value;
}
return $default;
}
public function save(&$configObject, $default = false) {
if(empty($this->values)) {
$this->load();
}
$query = 'REPLACE INTO
'.hikamarket::table('config').'
(config_namekey,config_value'.($default?',config_default':'').')
VALUES ';
$params = array();
$queryShop = 'REPLACE INTO
'.hikamarket::table('shop.config').'
(config_namekey,config_value) VALUES ';
$paramsShop = array();
if(is_object($configObject)) {
if(isset($configObject->config_value) &&
isset($configObject->config_namekey)) {
$n = new stdClass();
$n->{$configObject->config_namekey} =
$configObject->config_value;
$configObject = $n;
} else
$configObject = get_object_vars($configObject);
}
$concatFields = array(
'updatable_order_statuses',
'valid_order_statuses',
'admin_notify_subsale',
'stats_valid_order_statuses',
'vendor_email_order_status_notif_statuses',
'vendor_extra_categories',
'vendor_show_modules'
);
$listConcatFields = array(
'default_template_id'
);
jimport('joomla.filter.filterinput');
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
foreach($configObject as $namekey => $value) {
$shop = false;
if(substr($namekey, 0, 5) == 'shop.') {
$shop = true;
$namekey = substr($namekey, 5);
}
if( $namekey == 'default_params' || $namekey ==
'vendor_statistics' ||
preg_match('#^(menu_|params_)[0-9]+$#',$namekey) ) {
$value = base64_encode(serialize($value));
}
if(is_array($value) && in_array($namekey, $concatFields))
$value = trim(implode(',', $value), ',');
if(is_array($value) && in_array($namekey, $listConcatFields))
$value = ',' . trim(implode(',', $value),
',') . ',';
if(is_array($value))
continue;
if(!$shop) {
if(empty($this->values[$namekey]))
$this->values[$namekey] = new stdClass();
$this->values[$namekey]->config_value = $value;
if( !isset($this->values[$namekey]->config_default) ) {
$this->values[$namekey]->config_default =
$this->values[$namekey]->config_value;
}
$params[] =
'('.$this->db->Quote(strip_tags($namekey)).','.$this->db->Quote($safeHtmlFilter->clean($value,
'string')).($default?','.$this->db->Quote($this->values[$namekey]->config_default):'').')';
} else {
$paramsShop[] =
'('.$this->db->Quote(strip_tags($namekey)).','.$this->db->Quote($safeHtmlFilter->clean($value,
'string')).')';
}
}
$ret = false;
if(!empty($paramsShop)) {
$queryShop .= implode(',',$paramsShop);
$this->db->setQuery($queryShop);
$ret = $this->db->execute();
}
if(!empty($params)) {
$query .= implode(',',$params);
$this->db->setQuery($query);
$ret = $this->db->execute();
}
return $ret;
}
public function reset(){
$query = 'UPDATE '.hikamarket::table('config').'
SET config_value = config_default';
$this->db->setQuery($query);
$this->values = $this->db->execute();
}
public function vendorget($vendor, $namekey, $default = null) {
if(is_numeric($vendor)) {
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get( (int)$vendor );
}
$vendor_acl_default_public_group =
(int)$this->get('vendor_acl_default_public_group', 0);
if(empty($vendor_acl_default_public_group)) {
if(is_string($vendor->vendor_access) &&
strpos($vendor->vendor_access, '@') === false)
return $default;
if(is_array($vendor->vendor_access)) {
$a = implode(',', $vendor->vendor_access);
if(strpos($a, '@') === false)
return $default;
}
}
$joomla_acl = hikamarket::get('type.joomla_acl');
$gs = $joomla_acl->getList();
$groups = array();
foreach($gs as $g) {
$groups[$g->id] = $g;
}
unset($gs);
if(is_string($vendor->vendor_access)) {
$vendor_access = explode(',',
trim(strtolower($vendor->vendor_access), ','));
} else {
$vendor_access = $vendor->vendor_access;
}
if(!empty($vendor_acl_default_public_group)) {
$vendor_access[] = '@1';
}
foreach($vendor_access as $k => $ax) {
if(substr($ax,0,1) != '@')
continue;
$ax_id = (int)substr($ax,1);
if($ax_id == 0)
continue;
$group = (isset($groups[$ax_id])) ? $group = $groups[$ax_id] : null;
while(!empty($group)) {
$access = $this->get('vendor_options_acl_'.$group->id,
'');
if(!empty($access)) {
$access = hikamarket::unserialize($access);
if(isset($access[$namekey]))
return $access[$namekey];
}
$group = (isset($groups[$group->parent_id])) ? $group =
$groups[$group->parent_id] : null;
}
}
return $default;
}
}
classes/discount.php000064400000027245151160562260010560 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketDiscountClass extends hikamarketClass {
protected $tables = array('shop.discount');
protected $pkeys = array('discount_id');
protected $toggle = array('discount_published' =>
'discount_id');
protected $deleteToggle = array('shop.discount' =>
'discount_id');
public function frontSaveForm($task = '', $acl = true) {
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$discount_id = hikamarket::getCID('discount_id');
$discountClass = hikamarket::get('shop.class.discount');
$vendorClass = hikamarket::get('class.vendor');
$vendor_id = hikamarket::loadVendor(false, false);
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$discount = new stdClass();
$new = false;
if(empty($discount_id))
$new = true;
else
$discount->discount_id = $discount_id;
$formData = hikaInput::get()->get('data', array(),
'array');
unset($formData['discount']['discount_id']);
$nameboxes =
array('discount_product_id','discount_category_id','discount_zone_id','discount_user_id');
foreach($formData['discount'] as $column => $value) {
hikamarket::secureField($column);
if(in_array($column, $nameboxes)) {
if($column == 'discount_zone_id') {
$discount->$column = array();
foreach($value as $i => $v) {
$discount->{$column}[] = $safeHtmlFilter->clean(strip_tags($v),
'string');
}
} else {
hikamarket::toInteger($value);
}
$discount->$column = $value;
} else {
$discount->$column = $safeHtmlFilter->clean(strip_tags($value),
'string');
}
}
if(!hikamarket::acl('discount/edit/code')) {
unset($discount->discount_code); }
if(!hikamarket::acl('discount/edit/type')) {
unset($discount->discount_type); }
if(!hikamarket::acl('discount/edit/flatamount')) {
unset($discount->discount_flat_amount); }
if(!hikamarket::acl('discount/edit/flatamount')) {
unset($discount->discount_currency_id); }
if(!hikamarket::acl('discount/edit/percentamount')) {
unset($discount->discount_percent_amount); }
if(!hikamarket::acl('discount/edit/taxcategory')) {
unset($discount->discount_tax_id); }
if(!hikamarket::acl('discount/edit/usedtimes')) {
unset($discount->discount_used_times); }
if(!hikamarket::acl('discount/edit/published')) {
unset($discount->discount_published); }
if(!hikamarket::acl('discount/edit/dates')) {
unset($discount->discount_start);
unset($discount->discount_end);
}
if(!hikamarket::acl('discount/edit/minorder')) {
unset($discount->discount_minimum_order); }
if(!hikamarket::acl('discount/edit/minproducts')) {
unset($discount->discount_minimum_products); }
if(!hikamarket::acl('discount/edit/quota')) {
unset($discount->discount_quota); }
if(!hikamarket::acl('discount/edit/peruser')) {
unset($discount->discount_quota_per_user); }
if(!hikamarket::acl('discount/edit/product')) {
unset($discount->discount_product_id); }
if(!hikamarket::acl('discount/edit/category')) {
unset($discount->discount_category_id); }
if(!hikamarket::acl('discount/edit/zone')) {
unset($discount->discount_zone_id); }
if(!hikamarket::acl('discount/edit/user') ||
!hikashop_level(2)) { unset($discount->discount_user_id); }
if($new && !empty($vendor_id) && $vendor_id > 1)
$discount->discount_target_vendor = $vendor_id;
else if($vendor_id > 1 ||
!hikamarket::acl('discount/edit/targetvendor'))
unset($discount->discount_target_vendor);
else
$discount->discount_target_vendor =
(int)@$discount->discount_target_vendor;
if(!empty($discount->discount_start))
$discount->discount_start =
hikamarket::getTime($discount->discount_start);
if(!empty($discount->discount_end))
$discount->discount_end =
hikamarket::getTime($discount->discount_end);
if(!empty($discount->discount_id) &&
!empty($discount->discount_code)){
$query = 'SELECT discount_id FROM
'.hikamarket::table('shop.discount').' WHERE
discount_code = '.
$this->db->Quote($discount->discount_code).' AND discount_id
!= ' . (int)$discount->discount_id;
$this->db->setQuery($query);
$res = $this->db->loadResult();
if(!empty($res) && $res != $discount->discount_id){
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('DISCOUNT_CODE_ALREADY_USED'),
'error');
hikaInput::get()->set('fail', $discount);
return false;
}
}
$status = $this->save($discount);
if($status) {
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'));
} else {
hikaInput::get()->set('fail', $discount);
$app->enqueueMessage(JText::_('DISCOUNT_CODE_ALREADY_USED'));
}
return $status;
}
public function save(&$discount) {
JPluginHelper::importPlugin('hikamarket');
$discountClass = hikamarket::get('shop.class.discount');
$status = $discountClass->save($discount);
return $status;
}
public function toggleId($task, $value = null) {
if($value !== null) {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value == 0 ||
empty($this->toggle[$task]) ||
!hikamarket::acl('discount/edit/'.str_replace('discount_',
'', $task)) || !hikamarket::isVendorDiscount((int)$value) ))
return false;
}
if(!empty($this->toggle[$task]))
return $this->toggle[$task];
return false;
}
public function toggleDelete($value1 = '', $value2 =
'') {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value1 == 0 ||
!hikamarket::acl('discount/delete') ||
!hikamarket::isVendorDiscount((int)$value1)))
return false;
if(!empty($this->deleteToggle))
return $this->deleteToggle;
return false;
}
public function discountBlocksDisplay(&$discount, &$html) {
$vendor_id = (int)@$discount->discount_target_vendor;
if($vendor_id > 1) {
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($vendor_id);
$vendor_name = $vendor_id . ' - ' . $vendor->vendor_name;
} else {
$vendor_id = -2;
$vendor_name = JText::_('HIKAM_SELECT_VENDOR');
}
$values = array(
JHTML::_('select.option', '0',
JText::_('HIKASHOP_NO')),
JHTML::_('select.option', '1',
JText::_('HIKASHOP_YES')),
JHTML::_('select.option', '-1',
JText::_('HIKAM_DISCOUNT_NOT_APPLIED_TO_VENDOR')),
JHTML::_('select.option', $vendor_id, $vendor_name)
);
$popup = hikamarket::get('shop.helper.popup');
$popupLinkData = '<img
src="'.HIKASHOP_IMAGES.'edit.png"
style="vertical-align:middle;"/>';
if(HIKASHOP_BACK_RESPONSIVE)
$popupLinkData = '';
$ret = '
<dt><label>'.
JText::_('DISCOUNT_TARGET_VENDOR')
.'</label></dt>
<dd>
'.JHTML::_('hikaselect.radiolist', $values,
'data[discount][discount_target_vendor]' ,
'onclick="hikamarket_discount_setVendor(this, true);"
onchange="hikamarket_discount_setVendor(this, false);"',
'value', 'text',
@$discount->discount_target_vendor).
$popup->display(
$popupLinkData,
'EDIT',
hikamarket::completeLink('vendor&task=selection&single=true',
true),
'market_discount_set_vendor',
760, 480, 'onclick="return
hikamarket_discount_changeVendor(this);"', '',
'link'
).
'<script type="text/javascript">
var hikamarket_discount_current_vendor = '.$vendor_id.';
function hikamarket_discount_setVendor(el, c) {
var v = 0;
if(el.value) v = parseInt(el.value);
if((v == -2 && c) || (c && v > 1 && v ==
hikamarket_discount_current_vendor && el.checked)) {
var p = document.getElementById("market_discount_set_vendor");
hikamarket_discount_changeVendor(p);
}
if(c)
hikamarket_discount_current_vendor = v;
}
function hikamarket_discount_changeVendor(el) {
window.hikamarket.submitFct = function(data) {
var d = document, w = window, o = w.Oby,
el =
d.getElementById("data[discount][discount_target_vendor]-1"),
lbl =
d.getElementById("data[discount][discount_target_vendor]-1-lbl");
if(!el) el =
d.getElementById("data_discount_discount_target_vendor-1");
if(el) el.value = data.id;
if(el && !el.checked) el.checked = "checked";
if(!lbl) { lbl = el; while(lbl && lbl.nodeName.toLowerCase() !=
"label") { lbl = lbl.nextSibling; } }
if(lbl) lbl.innerHTML = data.id + " - " + data.vendor_name;
};
window.hikamarket.openBox(el);
}
</script>
</dd>';
$html[] = $ret;
}
public function beforeCouponCheck(&$coupon, &$total, &$zones,
&$products, &$display_error, &$error_message, &$do) {
if(empty($coupon->discount_target_vendor) ||
(int)$coupon->discount_target_vendor == 1 || !$do)
return;
$vendor_products = array();
foreach($products as &$product) {
if((int)$product->product_vendor_id ==
(int)$coupon->discount_target_vendor ||
((int)$product->product_vendor_id <= 1 &&
(int)$coupon->discount_target_vendor == -1)) {
$vendor_products[] = &$product;
}
}
if(empty($vendor_products)) {
$error_message = JText::_('DISCOUNT_NO_VENDOR');
$do = false;
return;
}
$coupon_flat =
(float)hikamarket::toFloat($coupon->discount_flat_amount);
$coupon_percent =
(float)hikamarket::toFloat($coupon->discount_percent_amount);
if($coupon_flat > 0) {
$shopConfig = hikamarket::config(false);
$discount_before_tax =
$shopConfig->get('discount_before_tax');
$vendor_total = 0.0;
foreach($vendor_products as $vendor_product) {
if(isset($vendor_product->prices[0]->price_value_with_tax)
&& $discount_before_tax)
$vendor_total +=
$vendor_product->prices[0]->price_value_with_tax;
else
$vendor_total +=
(float)@$vendor_product->prices[0]->price_value;
}
$currencyClass = hikamarket::get('shop.class.currency');
if($coupon->discount_currency_id !=
$total->prices[0]->price_currency_id)
$coupon_flat = $currencyClass->convertUniquePrice($coupon_flat,
$coupon->discount_currency_id,
$total->prices[0]->price_currency_id);
if($vendor_total < $coupon_flat) {
$error_message =
JText::sprintf('ORDER_NOT_EXPENSIVE_ENOUGH_FOR_COUPON',
$currencyClass->format($vendor_total,
$total->prices[0]->price_currency_id));
$do = false;
return;
}
}
$coupon->discount_coupon_product_only = 1;
$coupon->all_products = false;
if(!isset($coupon->old_products))
$coupon->old_products = $products;
$products = $vendor_products;
}
public function afterCouponCheck(&$coupon, &$total, &$zones,
&$products, &$display_error, &$error_message, &$do) {
if(empty($coupon->discount_target_vendor) ||
(int)$coupon->discount_target_vendor == 1)
return;
if(empty($coupon->products))
$coupon->products = $products;
if(!empty($coupon->old_products)) {
$products = $coupon->old_products;
unset($coupon->old_products);
}
}
public function onSelectDiscount(&$product, &$discountsSelected,
&$discounts, $zone_id, &$parent) {
$vendor_id = (int)$product->product_vendor_id;
if($vendor_id == 0 && !empty($parent))
$vendor_id = (int)$parent->product_vendor_id;
foreach($discountsSelected as &$discountSelected) {
$this->recursiveSelectDiscount($vendor_id, $discountSelected);
}
unset($discountSelected);
}
protected function recursiveSelectDiscount($vendor_id, &$discounts) {
foreach($discounts as $k => $v) {
if(is_array($v)) {
$this->recursiveSelectDiscount($vendor_id, $discounts[$k]);
if(empty($discounts[$k]))
unset($discounts[$k]);
} else {
$discount_target = (int)$v->discount_target_vendor;
if($discount_target > 1 && $vendor_id != $discount_target)
unset($discounts[$k]);
if($discount_target == 0 && $vendor_id > 1)
unset($discounts[$k]);
}
}
}
}
classes/fee.php000064400000030532151160562260007460 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketFeeClass extends hikamarketClass {
protected $tables = array('fee');
protected $pkeys = array('fee_id');
protected $toggle = array();
public function saveForm($type, $target_id, &$formData) {
if(!in_array($type, array('config', 'product',
'vendor'))) {
return false;
}
if((int)$target_id == 0 && $type != 'config')
return false;
if((int)$target_id <= 1 && $type == 'vendor')
return false;
if($type == 'config')
$target_id = 0;
if(empty($formData)) {
$query = 'DELETE FROM ' . hikamarket::table('fee') .
' WHERE (fee_type = \''.$type.'\' OR fee_type =
\''.$type.'_global\') AND fee_target_id = ' .
(int)$target_id;
$this->db->setQuery($query);
$this->db->execute();
return true;
}
$fee_ids = array();
foreach($formData as $fee) {
if(!empty($fee['id'])) {
$fee_ids[] = $fee['id'];
}
}
$query = 'DELETE FROM ' . hikamarket::table('fee') .
' WHERE (fee_type = \''.$type.'\' OR fee_type =
\''.$type.'_global\') AND fee_target_id = ' .
(int)$target_id;
if(!empty($fee_ids)) {
$query = 'DELETE FROM ' . hikamarket::table('fee') .
' WHERE (fee_type = \''.$type.'\' OR fee_type =
\''.$type.'_global\') AND fee_target_id = ' .
(int)$target_id . ' AND fee_id NOT IN (' . implode(',',
$fee_ids) . ')';
}
$this->db->setQuery($query);
$this->db->execute();
$data = array();
foreach($formData as $fee) {
if(empty($fee['currency']) || (int)$fee['currency']
== 0)
continue;
if(isset($fee['percent']) && $fee['percent']
== '' && isset($fee['value']) &&
$fee['value'] == '')
continue;
$fee_type = $type;
if(!empty($fee['global']) && ($type ==
'vendor' || $type == 'config'))
$fee_type = $type . '_global';
if(empty($fee['quantity']) || (int)$fee['quantity']
<= 0)
$fee['quantity'] = 1;
if(empty($fee['percent']))
$fee['percent'] = 0;
else
$fee['percent'] = round((float)$fee['percent'],
2);
if(empty($fee['fixed']))
$fee['fixed'] = 0;
else
$fee['fixed'] = round((float)$fee['fixed'], 2);
if(empty($fee['min_price']))
$fee['min_price'] = 0;
else
$fee['min_price'] = round((float)$fee['min_price'],
2);
if(empty($fee['value']))
$fee['value'] = 0;
if($type != 'config')
$fee['group'] = 0;
else
$fee['group'] = (int)@$fee['group'];
if(empty($fee['id'])) {
$data[] = '\''.$fee_type.'\',' .
(int)$target_id . ',' . (int)$fee['currency'] .
',' . (float)$fee['value'] . ',' .
(float)$fee['percent'] . ',' .
(int)$fee['quantity'] . ',' .
(float)$fee['min_price'] . ',' .
(float)$fee['fixed'] . ',' .
(int)$fee['group'];
} else {
$query = 'UPDATE ' . hikamarket::table('fee') .
' SET '.
' fee_currency_id=' . (int)$fee['currency'] .
','.
' fee_value=' . (float)$fee['value'] .
','.
' fee_percent=' . (float)$fee['percent'] .
','.
' fee_min_quantity=' . (int)$fee['quantity'] .
','.
' fee_min_price=' . (float)$fee['min_price'] .
','.
' fee_fixed=' . (float)$fee['fixed'] .
','.
' fee_group=' . (float)$fee['group'] .
','.
' fee_type=\'' . $fee_type . '\'' .
' WHERE fee_id = ' . (int)$fee['id'] . ' AND
(fee_type = \''.$type.'\' OR fee_type =
\''.$type.'_global\') AND fee_target_id =' .
(int)$target_id;
$this->db->setQuery($query);
$this->db->execute();
}
}
if(!empty($data)) {
$query = 'INSERT IGNORE INTO ' .
hikamarket::table('fee') . ' (`fee_type`, `fee_target_id`,
`fee_currency_id`, `fee_value`, `fee_percent`, `fee_min_quantity`,
`fee_min_price`, `fee_fixed`, `fee_group`) VALUES (' .
implode('),(', $data). ')';
$this->db->setQuery($query);
$this->db->execute();
}
return true;
}
public function delete(&$elements) {
return false;
}
public function getConfig() {
$query = 'SELECT a.* '.
' FROM ' . hikamarket::table('fee') . ' AS a
'.
' WHERE (a.fee_type = \'config\' OR a.fee_type =
\'config_global\')';
$this->db->setQuery($query);
$fees = $this->db->loadObjectList();
return $fees;
}
public function saveConfig(&$formData) {
return $this->saveForm('config', 0, $formData);
}
public function getVendor($vendor, $config = false) {
$filter = '';
if(is_array($vendor)) {
if(is_object(reset($vendor))) {
$ids = array();
foreach($vendor as $v) {
$ids[] = $v->vendor_id;
}
$filter = 'AND a.fee_target_id IN (' . implode(',',
$ids) . ')';
} else {
$filter = 'AND a.fee_target_id IN (' . implode(',',
$vendor) . ')';
}
} else {
if(is_object($vendor)) {
$filter = 'AND a.fee_target_id = ' .
(int)$vendor->vendor_id;
} else {
$filter = 'AND a.fee_target_id = ' . (int)$vendor;
}
}
$configFilter = '';
if($config) {
if(is_int($vendor)) {
$query = 'SELECT vendor_id, vendor_access FROM
'.hikamarket::table('vendor').' WHERE vendor_id =
'.(int)$vendor;
$this->db->setQuery($query);
$v = $this->db->loadObject();
$vendor_access = $v->vendor_access;
} else if(is_object($vendor)) {
$vendor_access = $vendor->vendor_access;
}
if(!empty($vendor_access)) {
$joomlaaclType = hikamarket::get('type.joomla_acl');
$tree_groups = $joomlaaclType->getParentList();
if(is_array($vendor_access))
$vendor_access = implode(',', $vendor_access);
$vendor_access = str_replace('@0,', '',
trim($vendor_access,',').',');
$groups = array();
if(strpos($vendor_access, '@') !== false) {
$vendor_access = explode(',',
trim($vendor_access,','));
foreach($vendor_access as $a) {
if(substr($a, 0, 1) != '@')
continue;
$i = (int)substr($a, 1);
if(!isset($groups[$i])) {
$groups[$i] = $i;
foreach($tree_groups[$i]['parents'] as $c) {
if(!empty($c))
$groups[$c] = (int)$c;
}
}
}
$groups[0] = 0;
}
unset($vendor_access);
$vendor_access = $groups;
}
if(empty($vendor_access))
$configFilter = ' OR (a.fee_type = \'config\' OR
a.fee_type = \'config_global\') ';
else
$configFilter = ' OR ((a.fee_type = \'config\' OR
a.fee_type = \'config_global\') AND fee_group IN
('.implode(',', $vendor_access).')) ';
}
$query = 'SELECT a.* '.
' FROM ' . hikamarket::table('fee') . ' AS a
'.
' WHERE ((a.fee_type = \'vendor\' OR a.fee_type =
\'vendor_global\')'.$filter.') '.$configFilter;
$this->db->setQuery($query);
$fees = $this->db->loadObjectList();
return $fees;
}
public function saveVendor($vendor_id, &$formData) {
return $this->saveForm('vendor', $vendor_id, $formData);
}
public function getProduct($product, $vendor = false) {
$filter = '1';
if(is_array($product)) {
if(is_object(reset($product))) {
$ids = array();
foreach($product as $p) {
$ids[] = $p->product_id;
if($p->product_type == 'variant' &&
!empty($p->product_parent_id))
$ids[] = (int)$p->product_parent_id;
}
$filter = 'hkp.product_id IN (' . implode(',',
$ids) . ')';
} else {
$filter = 'hkp.product_id IN (' . implode(',',
$product) . ')';
}
} else {
if(is_object($product)) {
$filter = 'hkp.product_id = ' .
(int)$product->product_id;
if($product->product_type == 'variant' &&
!empty($product->product_parent_id))
$filter = 'hkp.product_id IN (' .
(int)$product->product_id . ',' .
(int)$p->product_parent_id . ')';
} else {
$filter = 'hkp.product_id = ' . (int)$product;
}
}
$vendorFilter = array();
if($vendor) {
if(is_array($vendor)) {
$vendorFilter[] = 'OR ((hkm_fee.fee_type = \'vendor\' OR
hkm_fee.fee_type = \'vendor_global\') AND (hkp.product_vendor_id
= hkm_fee.fee_target_id OR hkm_fee.fee_target_id IN
('.implode(',',$vendor).')))';
} else {
$vendorFilter[] = 'OR ((hkm_fee.fee_type = \'vendor\' OR
hkm_fee.fee_type = \'vendor_global\') AND (hkp.product_vendor_id
= hkm_fee.fee_target_id))';
}
$vendorFilter[] = 'OR (hkm_fee.fee_type =
\'config\')';
$vendorFilter[] = 'OR (hkm_fee.fee_type =
\'config_global\')';
}
$query = 'SELECT hkm_fee.*, hkp.product_id, hkp.product_parent_id
'.
' FROM '. hikamarket::table('fee') . ' AS
hkm_fee '.
' LEFT JOIN ' . hikamarket::table('shop.product') .
' AS hkp ON '.
' (hkm_fee.fee_type = \'product\' AND (hkp.product_id =
hkm_fee.fee_target_id OR (hkp.product_parent_id > 0 AND
hkp.product_parent_id = hkm_fee.fee_target_id))) '. implode('
',$vendorFilter).
' WHERE '.$filter.
' ORDER BY hkm_fee.fee_min_quantity ASC, hkm_fee.fee_currency_id
ASC';
$this->db->setQuery($query);
$fees = $this->db->loadObjectList('fee_id');
return $fees;
}
public function getProducts(&$products, $vendor = false) {
$product_ids = array();
foreach($products as $product) {
$product_ids[] = $product['id'];
if(!empty($product['parent']))
$product_ids[] = $product['parent'];
}
$product_ids = array_unique($product_ids);
$fees = $this->getProduct($product_ids, $vendor);
unset($product_ids);
$vendor_groups = array();
foreach($fees as &$fee) {
$fee->fee_id = (int)$fee->fee_id;
$fee->fee_target_id = (int)$fee->fee_target_id;
$fee->fee_currency_id = (int)$fee->fee_currency_id;
$fee->fee_min_quantity = (int)$fee->fee_min_quantity;
$fee->product_id = (int)$fee->product_id;
$fee->product_parent_id = (int)$fee->product_parent_id;
$fee->fee_value = (float)hikamarket::toFloat($fee->fee_value);
$fee->fee_percent =
(float)hikamarket::toFloat($fee->fee_percent);
$fee->fee_min_price =
(float)hikamarket::toFloat($fee->fee_min_price);
$fee->fee_fixed = (float)hikamarket::toFloat($fee->fee_fixed);
$fee->fee_group = (int)$fee->fee_group;
if($fee->fee_type != 'config' && $fee->fee_type
!= 'config_global')
$fee->fee_group = 0;
else
$vendor_groups[$fee->fee_group] = $fee->fee_group;
}
unset($fee);
$vendors = null;
if(!empty($vendor_groups) && $vendor !== false) {
$vendor_ids = is_array($vendor) ? $vendor : array($vendor =>
$vendor);
$query = 'SELECT vendor_id, vendor_access FROM
'.hikamarket::table('vendor').' WHERE vendor_id IN
('.implode(',',$vendor_ids).')';
$this->db->setQuery($query);
$vendors = $this->db->loadObjectList('vendor_id');
$joomlaaclType = hikamarket::get('type.joomla_acl');
$tree_groups = $joomlaaclType->getParentList();
foreach($vendors as &$v) {
$v->vendor_access = str_replace('@0,', '',
trim($v->vendor_access,',').',');
$v->groups = array();
if(strpos($v->vendor_access, '@') !== false) {
$v->vendor_access = explode(',',
trim($v->vendor_access,','));
foreach($v->vendor_access as $a) {
if(substr($a, 0, 1) != '@')
continue;
$i = (int)substr($a, 1);
if(!isset($v->groups[$i])) {
$v->groups[$i] = $i;
foreach($tree_groups[$i]['parents'] as $c) {
if(!empty($c))
$v->groups[$c] = $c;
}
}
}
}
}
unset($v);
}
$config = hikamarket::config();
$load_all_fees = (int)$config->get('get_best_fee', 1);
foreach($products as &$product) {
$public_fees = array();
foreach($fees as $fee) {
if($fee->fee_type == 'product' &&
((int)$fee->fee_target_id == $product['id']) ||
($product['parent'] > 0 && (int)$fee->fee_target_id
== $product['parent'])) {
$product['fee'][] = $fee;
}
if((($fee->fee_type == 'vendor' || $fee->fee_type ==
'vendor_global') && (int)$fee->fee_target_id ==
(int)$product['vendor'])) {
$product['fee'][] = $fee;
}
if($fee->fee_type == 'config' || $fee->fee_type ==
'config_global') {
if($vendors == null) {
$product['fee'][] = $fee;
} elseif(isset($vendors[(int)$product['vendor']])) {
$v = $vendors[(int)$product['vendor']];
if((empty($v->groups) && $fee->fee_group == 0) ||
isset($v->groups[$fee->fee_group])) {
$product['fee'][] = $fee;
}
}
}
}
if(empty($product['fee']))
$product['fee'] = $public_fees;
}
unset($product);
return $fees;
}
public function saveProduct($product_id, &$formData) {
return $this->saveForm('product', $product_id, $formData);
}
}
classes/field.php000064400000027117151160562260010011 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketFieldClass extends hikamarketClass {
protected $tables = array();
protected $pkeys = array();
protected $toggle = array();
protected $fields = array(
'vendor' => array(
'struct' => array(
'text' => 'HIKAMARKET_VENDOR',
'table' => 'vendor',
'id' => 'vendor_id',
'columns' => array('vendor_params')
),
'display' => array(
array(
'name' => 'vendor_page',
'title' => 'HIKAM_FIELD_DISPLAY_VENDOR_PAGE'
),
array(
'name' => 'vendor_registration',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_REGISTRATION'
),
array(
'name' => 'vendor_listing',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_LISTING'
),
array(
'name' => 'vendor_select',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_FRONT_SELECT'
)
)
),
'shop.product' => array(
'display' => array(
array(
'name' => 'vendor_product_edit',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_PRODUCT_EDITION',
'init' => 'backend'
),
array(
'name' => 'vendor_product_listing',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_PRODUCT_LISTING'
)
)
),
'shop.category' => array(
'display' => array(
array(
'name' => 'vendor_category_edit',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_CATEGORY_EDITION',
'init' => 'backend'
),
array(
'name' => 'vendor_category_listing',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_CATEGORY_LISTING'
)
)
),
'shop.order' => array(
'display' => array(
array(
'name' => 'vendor_order_show',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_SHOW',
'init' => 'frontend'
),
array(
'name' => 'vendor_order_invoice',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_INVOICE',
'init' => 'frontend'
),
array(
'name' => 'vendor_order_edit',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_EDITION',
'init' => 'backend'
),
array(
'name' => 'vendor_order_listing',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_LISTING',
'init' => 'backend_listing'
)
)
),
'shop.item' => array(
'display' => array(
array(
'name' => 'vendor_order_show',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_SHOW',
'init' => 'frontend'
),
array(
'name' => 'vendor_order_edit',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_EDITION',
'init' => 'backend'
),
array(
'name' => 'vendor_order_invoice',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_INVOICE',
'init' => 'frontend'
),
array(
'name' => 'vendor_order_shipping_invoice',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_SHIPPING_INVOICE',
'init' => 'frontend'
)
)
),
'shop.entry' => array(
'display' => array(
array(
'name' => 'vendor_order_show',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_SHOW',
'init' => 'frontend'
),
array(
'name' => 'vendor_order_edit',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_EDITION',
'init' => 'backend'
)
)
),
'shop.address' => array(
'display' => array(
array(
'name' => 'vendor_order_show',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_SHOW',
'init' => 'frontend'
),
array(
'name' => 'vendor_order_edit',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_ORDER_EDITION',
'init' => 'backend'
),
array(
'name' => 'vendor_user_show',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_USER_SHOW',
'init' => 'frontend'
),
array(
'name' => 'vendor_user_edit',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_USER_EDIT',
'init' => 'backend'
)
)
),
'shop.user' => array(
'display' => array(
array(
'name' => 'vendor_user_show',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_USER_SHOW',
'init' => 'frontend'
),
array(
'name' => 'vendor_user_edit',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_USER_EDIT',
'init' => 'backend'
),
array(
'name' => 'vendor_registration',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_REGISTRATION',
'init' => 'frontend'
),
array(
'name' => 'vendor_user_listing',
'title' =>
'HIKAM_FIELD_DISPLAY_VENDOR_USER_LIST'
)
)
)
);
public function tableFieldsLoad(&$values) {
foreach($this->fields as $key => $field) {
if(empty($field['struct']))
continue;
$table = new stdClass();
$table->value = 'plg.hikamarket.' . $key;
$table->datatype = $key;
$table->prefix = 'hikamarket_';
$table->text =
JText::_($field['struct']['text']);
$table->table =
hikamarket::table($field['struct']['table']);
$table->arrayColumns =
$field['struct']['columns'];
$values['hikamarket.'.$key] = $table;
}
}
public function customfieldEdit(&$field, &$view) {
if(empty($field->field_table))
return;
$key = 'shop.' . $field->field_table;
if(substr($field->field_table, 0, 15) ===
'plg.hikamarket.')
$key = substr($field->field_table, 15);
if(!isset($this->fields[$key]))
return;
if(!empty($field->field_display) &&
is_string($field->field_display)) {
$fields_display = explode(';', trim($field->field_display,
';'));
$field->field_display = new stdClass();
foreach($fields_display as $f) {
list($k,$v) = explode('=', $f, 2);
$field->field_display->$k = $v;
}
}
if(!empty($this->fields[$key]['display'])) {
if(empty($view->displayOptions))
$view->displayOptions = array();
foreach($this->fields[$key]['display'] as $opt) {
$opt['title'] = JText::_($opt['title']);
$opt['group'] = 'HikaMarket';
$view->displayOptions[] = $opt;
}
}
}
public function fieldFileDownload(&$found, $name, $field_table,
$field_namekey, $options) {
if(substr($field_table, 0, 15) != 'plg.hikamarket.')
return $this->shopfieldFileDownload($found, $name, $field_table,
$field_namekey, $options);
$table = substr($field_table, 15);
$query = '';
foreach($this->fields as $key => $field) {
if(empty($field['struct']))
continue;
if($key == $table) {
$query = 'SELECT '.$field['id'].' FROM
'.$field['table'].' WHERE '.$field_namekey .
' = '. $this->db->Quote($name);
}
}
if(!empty($query)) {
$this->db->setQuery($query);
$result = $this->db->loadResult();
if($result)
$found = true;
}
}
protected function shopfieldFileDownload(&$found, $name, $field_table,
$field_namekey, $options) {
if(!in_array($field_table, array('order','item')))
return;
$vendor_id = hikamarket::loadVendor(false, false);
if(empty($vendor_id))
return;
if(!hikamarket::acl('order/show/customfield') &&
!hikamarket::acl('order/edit/customfield'))
return;
$escaped_field_namekey = $this->db->quoteName($field_namekey);
if($vendor_id > 1) {
if($field_table == 'order') {
$query = 'SELECT order_id FROM ' .
hikamarket::table('shop.order') .
' WHERE (order_type = ' .
$this->db->Quote('subsale').') AND (order_vendor_id =
' . $vendor_id . ') AND (' . $escaped_field_namekey . '
= ' . $this->db->Quote($name) . ')';
} else {
$query = 'SELECT order_product_id FROM
'.hikamarket::table('shop.order').' AS hk_order
'.
' LEFT JOIN
'.hikashop_table('order_product').' AS hk_order_product
ON hk_order.order_id = hk_order_product.order_id '.
' WHERE (hk_order.order_type = ' .
$this->db->Quote('subsale').') AND
(hk_order.order_vendor_id = ' . $vendor_id . ') AND
(hk_order_product.'.$escaped_field_namekey.' =
'.$this->db->Quote($name).')';
}
} else {
if($field_table == 'order') {
$query = 'SELECT order_id FROM ' .
hikamarket::table('shop.order').
' WHERE (order_type = ' .
$this->db->Quote('sale') . ') AND (' .
$escaped_field_namekey . ' = ' . $this->db->Quote($name) .
')';
} else {
$query = 'SELECT order_product_id FROM
'.hikamarket::table('shop.order').' AS hk_order
'.
' LEFT JOIN
'.hikashop_table('order_product').' AS hk_order_product
ON hk_order.order_id = hk_order_product.order_id '.
' WHERE (hk_order.order_type = ' .
$this->db->Quote('sale') . ') AND
(hk_order_product.'.$escaped_field_namekey.' =
'.$this->db->Quote($name).')';
}
}
$this->db->setQuery($query);
$result = $this->db->loadResult();
if(empty($result))
return;
$searchVal = '\'%' .
$this->db->escape(';vendor_order_show=1;', true) .
'%\'';
if($field_table == 'order') {
$query = 'SELECT field_id FROM ' .
hikamarket::table('shop.field') .
' WHERE (field_table = ' .
$this->db->Quote('order') . ') AND (field_namekey =
' . $this->db->Quote($field_namekey) . ') AND
(field_display LIKE ' . $searchVal . ')';
} else {
$query = 'SELECT field_id FROM ' .
hikamarket::table('shop.field') .
' WHERE (field_table = ' .
$this->db->Quote('item') . ') AND (field_namekey =
' . $this->db->Quote($field_namekey) . ') AND
(field_display LIKE ' . $searchVal . ')';
}
$this->db->setQuery($query);
$result = $this->db->loadResult();
if(empty($result))
return;
$found = true;
}
public function getFilteredInput($type, &$oldData, $report = true,
$varname = 'data', $force = false, $area = '') {
$shopFieldClass = hikamarket::get('shop.class.field');
$allCat = $shopFieldClass->getCategories($type, $oldData);
$fields =& $shopFieldClass->getData($area, $type, false,
$allCat);
$data = $shopFieldClass->getInput($type, $oldData, $report, $varname,
$force, $area);
if(!$data)
return $data;
if($type == 'entry' && $area == 'frontcomp')
{
$ret = array();
foreach($data as $key => $d) {
$r = new stdClass();
foreach($fields as $fieldname => $field) {
if(isset($d->$fieldname))
$r->$fieldname = $d->$fieldname;
}
$ret[$key] = $r;
}
} else {
$ret = new stdClass();
foreach($fields as $fieldname => $field) {
if(isset($data->$fieldname))
$ret->$fieldname = $data->$fieldname;
}
if(!empty($oldData)) {
foreach($oldData as $key => $value) {
if(!isset($data->$key))
$data->$key = $value;
}
}
}
return $ret;
}
public function initFields() {
$query = 'SELECT * FROM
'.hikamarket::table('shop.field');
$this->db->setQuery($query);
$fields = $this->db->loadObjectList();
$updateData = array();
foreach($fields as $field) {
if(empty($field->field_display)) {
$table = $field->field_table;
if(strpos($table, '.') === false) {
$table = 'shop.' . $table;
} else {
$table = str_replace('plg.hikamarket.', '',
$table);
}
if(isset($this->fields[$table])) {
$display_data = array();
foreach($this->fields[$table]['display'] as $display) {
if(!empty($display['init'])) {
if($display['init'] == 'backend') {
$display_data[] =
$display['name'].'='.$field->field_backend;
} else {
$display_data[] =
$display['name'].'='.$field->field_frontcomp;
}
} else {
$display_data[] = $display['name'].'=0';
}
}
$updateData[$field->field_id] =
';'.implode(';',$display_data).';';
}
}
}
foreach($updateData as $k => $v) {
$query = 'UPDATE
'.hikamarket::table('shop.field').' SET field_display =
'.$this->db->Quote($v).' WHERE field_id = '.(int)$k;
$this->db->setQuery($query);
$this->db->execute();
}
}
}
classes/index.html000064400000000032151160562260010175
0ustar00<html><body></body></html>classes/mail.php000064400000034206151160562260007645
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketMailClass extends hikamarketClass {
protected $tables = array();
protected $pkeys = array();
protected $toggle = array();
private $orderEmails = array(
'order_admin_notification' => 1,
'order_cancel' => 0,
'order_creation_notification' => 0,
'order_notification' => 0,
'order_status_notification' => 0
);
public function __construct($config = array()){
$marketConfig = hikamarket::config();
return parent::__construct($config);
}
public function load($name, &$data) {
$shopMailClass = hikamarket::get('shop.class.mail');
$shopMailClass->mailer = JFactory::getMailer();
$shopMailClass->mail_folder = HIKAMARKET_MEDIA . 'mail' .
DS;
if(substr($name, 0, 7) == 'market.')
$name = substr($name, 7);
$mail = new stdClass();
$mail->mail_name = $name;
$shopMailClass->loadInfos($mail, 'market.'.$name);
$mail->body = $shopMailClass->loadEmail($mail, $data);
$mail->altbody = $shopMailClass->loadEmail($mail, $data,
'text');
$mail->preload = $shopMailClass->loadEmail($mail, $data,
'preload');
$mail->data =& $data;
$mail->mailer =& $shopMailClass->mailer;
if($data !== true)
$mail->body = hikamarket::absoluteURL($mail->body);
if(empty($mail->altbody) && $data !== true)
$mail->altbody = $shopMailClass->textVersion($mail->body);
return $mail;
}
public function sendMail(&$mail) {
$shopMailClass = hikamarket::get('shop.class.mail');
return $shopMailClass->sendMail($mail);
}
public function cleanEmail($text) {
return trim(preg_replace('/(%0A|%0D|\n+|\r+)/i', '',
(string)$text));
}
public function beforeMailPrepare(&$mail, &$mailer, &$do) {
$mail_name = $mail->mail_name;
if(isset($mail->hikamarket) && !empty($mail->hikamarket))
{
$mail_name = 'market.' . $mail_name;
if(empty($mail->attachments)) {
$shopMailClass = hikamarket::get('shop.class.mail');
$mail->attachments =
$shopMailClass->loadAttachments($mail_name);
}
}
if(isset($this->orderEmails[$mail_name]))
return $this->processOrderEmail($mail, $mailer, $do);
if($mail_name == 'contact_request')
return $this->processContactMail($mail, $mailer, $do);
if($mail_name == 'new_comment')
return $this->processCommentMail($mail, $mailer, $do);
}
public function processMailTemplate(&$mail, &$data, &$content,
&$vars, &$texts, &$templates) {
$mail_name = $mail->mail_name;
if(isset($mail->hikamarket) && !empty($mail->hikamarket))
$mail_name = 'market.' . $mail_name;
if(isset($this->orderEmails[$mail_name]))
return $this->processOrdernotificationTemplate($mail, $data,
$content, $vars, $texts, $templates);
if($mail_name == 'contact_request')
return $this->processContactrequestTemplate($mail, $data, $content,
$vars, $texts, $templates);
}
public function sendVendorOrderEmail(&$order) {
if(empty($order->order_vendor_id) &&
empty($order->old->order_vendor_id))
return false;
if(!empty($order->hikamarket->vendor)) {
$vendor =& $order->hikamarket->vendor;
} else {
$vendor_id = !empty($order->order_vendor_id) ?
(int)$order->order_vendor_id : (int)$order->old->order_vendor_id;
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($vendor_id);
}
if(empty($vendor) || empty($vendor->vendor_email) ||
filter_var($vendor->vendor_email, FILTER_VALIDATE_EMAIL) === false)
return false;
$order->vendor =& $vendor;
if(empty($order->customer)) {
$order_user_id = !empty($order->order_user_id) ?
(int)$order->order_user_id : (int)$order->old->order_user_id;
$userClass = hikamarket::get('shop.class.user');
$order->customer = $userClass->get($order_user_id);
}
if(empty($order->mail_status))
$order->mail_status =
hikamarket::orderStatus(@$order->order_status);
else
$order->mail_status =
hikamarket::orderStatus($order->mail_status);
$user_cms_id = (int)$order->customer->user_cms_id;
$mail = $this->load('order_status_notification', $order);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject =
'MARKET_ORDER_STATUS_NOTIFICATION_SUBJECT';
$order_number = isset($order->order_number) ? $order->order_number
: @$order->old->order_number;
$mail_subject = JText::sprintf($mail->subject, $order_number,
$order->mail_status, HIKASHOP_LIVE);
if(empty($mail) || !$mail->published)
return false;
$mail->dst_email = $vendor->vendor_email;
$mail->dst_name = $vendor->vendor_name;
$this->setVendorNotifyEmails($mail, $vendor);
if(empty($mail->dst_email))
return;
$mail->subject = $mail_subject;
$ret = $this->sendMail($mail);
return $ret;
return false;
}
public function sendVendorPaymentEmail(&$order, &$vendor) {
if(empty($vendor) || empty($vendor->vendor_email) ||
filter_var($vendor->vendor_email, FILTER_VALIDATE_EMAIL) === false)
return false;
$data = new stdClass();
$data->order_id = (int)$order->order_id;
$data->mail_status = $order->order_status;
$data->order = $order;
$data->vendor = $vendor;
if(empty($data->order->customer)) {
$userClass = hikamarket::get('shop.class.user');
$data->order->customer =
$userClass->get($vendor->vendor_admin_id);
}
$mail = $this->load('vendor_payment_notification', $data);
if(empty($mail) || !$mail->published)
return false;
$mail->hikamarket = true;
$mail->dst_email = $vendor->vendor_email;
$mail->dst_name = $vendor->vendor_name;
if(empty($mail->dst_email))
return;
if(empty($mail->subject))
$mail->subject =
'MARKET_VENDOR_PAYMENT_NOTIFICATION_SUBJECT';
$mail->subject = JText::sprintf($mail->subject, HIKASHOP_LIVE);
$ret = $this->sendMail($mail);
return $ret;
return false;
}
public function setVendorNotifyEmails(&$mail, $vendor) {
$vendor_access = $vendor->vendor_access;
if(empty($vendor_access)) {
$config = hikamarket::config();
$vendor_access = $config->get('store_default_access',
'all');
}
if($vendor_access == 'all')
$vendor_access = '*';
$vendor_access = explode(',', trim(strtolower($vendor_access),
','));
sort($vendor_access, SORT_STRING);
if(!hikamarket::aclTest('order/notify', $vendor_access))
return;
$query = 'SELECT hku.*, ju.* '.
' FROM
'.hikamarket::table('user','shop').' AS hku
'.
' LEFT JOIN
'.hikamarket::table('users',false).' AS ju ON
hku.user_cms_id = ju.id '.
' WHERE hku.user_vendor_id = ' . (int)$vendor->vendor_id .
' ORDER BY hku.user_id';
$this->db->setQuery($query);
$users = $this->db->loadObjectList('user_id');
$config = hikamarket::config();
if((int)$config->get('user_multiple_vendor', 0)) {
$query = 'SELECT hku.*, ju.*, vu.user_access as vendor_user_access
' .
' FROM ' .hikamarket::table('vendor_user') . '
AS vu ' .
' INNER JOIN
'.hikamarket::table('shop.user').' AS u ON (u.user_id =
vu.user_id)' .
' LEFT JOIN
'.hikamarket::table('users',false).' AS ju ON
hku.user_cms_id = ju.id '.
' WHERE vu.vendor_id = ' . (int)$vendor->vendor_id .
' ORDER BY hku.user_id';
$this->db->setQuery($query);
$extra_users = $this->db->loadObjectList('user_id');
}
if(empty($users) && empty($extra_users))
return;
if(!empty($extra_users))
$users = empty($users) ? $extra_users : array_merge($users,
$extra_users);
foreach($users as $user) {
if((is_string($mail->dst_email) && $user->user_email ==
$mail->dst_email) || (is_array($mail->dst_email) &&
in_array($user->user_email, $mail->dst_email)))
continue;
if(!empty($user->vendor_user_access))
$user->user_vendor_access = $user->vendor_user_access;
if(empty($user->user_vendor_access))
continue;
if($user->user_vendor_access == 'all')
$user->user_vendor_access = '*';
$user_access = explode(',',
trim(strtolower($user->user_vendor_access), ','));
sort($user_access, SORT_STRING);
$ret = hikamarket::aclTest('order/notify', $user_access);
if($ret) {
if(!is_array($mail->dst_email)) $mail->dst_email = (
!empty($mail->dst_email) ? array($mail->dst_email) : array() );
if(!is_array($mail->dst_name)) $mail->dst_name = (
!empty($mail->dst_name) ? array($mail->dst_name) : array() );
$mail->dst_email[] = $user->user_email;
$mail->dst_name[] = $user->username;
}
}
}
protected function loadLocale($user_cms_id) {
return true;
$locale = '';
if(!empty($user_cms_id)) {
$user = JFactory::getUser($user_cms_id);
$locale = $user->getParam('language');
if(empty($locale))
$locale = $user->getParam('admin_language');
} else if($user_cms_id === false && isset($this->oldLocale))
{
if($this->oldLocale === false)
return;
$local = $this->oldLocale;
}
if(empty($locale)) {
$params = JComponentHelper::getParams('com_languages');
$locale = $params->get('site', 'en-GB');
}
$this->oldLocale = false;
$lang = JFactory::getLanguage();
if($lang->getTag() == $locale)
return;
$this->oldLocale = $lang->getTag();
$joomlaConfig = JFactory::getConfig();
$joomlaConfig->set('language', $locale);
$override_path = hikashop_getLanguagePath(JPATH_ROOT) .
'/overrides/' . $locale . '.override.ini';
$lang->load(HIKASHOP_COMPONENT, JPATH_SITE, $locale, true);
if(file_exists($override_path))
hikashop_loadTranslationFile($override_path);
return $locale;
}
private function processOrderEmail(&$mail, &$mailer, &$do) {
$supportEmail = $this->orderEmails[$mail->mail_name];
$config = hikamarket::config();
$vendorOrderType = 'subsale';
$subsaleEmail = false;
if((!empty($mail->data->order_type) &&
$mail->data->order_type == $vendorOrderType)
|| (!empty($mail->data->old->order_type) &&
$mail->data->old->order_type == $vendorOrderType)) {
$subsaleEmail = true;
}
if($subsaleEmail) {
$do = false;
return;
}
if(!$subsaleEmail && $supportEmail) {
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get(1);
$this->setVendorNotifyEmails($mail, $vendor);
}
}
private function processContactMail(&$mail, &$mailer, &$do) {
$config = hikamarket::config();
if($config->get('contact_mail_to_vendor', 1) == 0)
return;
if(!empty($mail->data->product) &&
isset($mail->data->product->product_vendor_id) &&
$mail->data->product->product_vendor_id == 0 &&
$mail->data->product->product_type == 'variant') {
$productClass = hikashop_get('class.product');
$parentProduct =
$productClass->get((int)$mail->data->product->product_parent_id);
if(!empty($parentProduct))
$mail->data->product->product_vendor_id =
$parentProduct->product_vendor_id;
}
if(!empty($mail->data->product) &&
isset($mail->data->product->product_vendor_id) &&
$mail->data->product->product_vendor_id > 1) {
$vendorClass = hikamarket::get('class.vendor');
$vendor =
$vendorClass->get($mail->data->product->product_vendor_id);
if(empty($vendor) || empty($vendor->vendor_published))
return;
$mail->dst_email = $vendor->vendor_email;
$mail->dst_name = $vendor->vendor_name;
}
if(!empty($mail->data->element->target) &&
$mail->data->element->target == 'vendor') {
$vendorClass = hikamarket::get('class.vendor');
$vendor =
$vendorClass->get($mail->data->element->vendor_id);
if(empty($vendor) || empty($vendor->vendor_published))
return;
$mail->dst_email = $vendor->vendor_email;
$mail->dst_name = $vendor->vendor_name;
}
}
private function processCommentMail(&$mail, &$mailer, &$do) {
if($mail->data->result->vote_type == 'vendor') {
$do = false;
return;
}
if($mail->data->result->vote_type == 'product') {
if(empty($mail->data->type->product_vendor_id))
return;
$vendorClass = hikamarket::get('class.vendor');
$vendor =
$vendorClass->get($mail->data->type->product_vendor_id);
if(empty($vendor) || empty($vendor->vendor_published))
return;
$mail->dst_email = $vendor->vendor_email;
$mail->dst_name = $vendor->vendor_name;
}
}
private function processOrdernotificationTemplate(&$mail, &$data,
&$content, &$vars, &$texts, &$templates) {
$config = hikamarket::config();
if(empty($templates['PRODUCT_LINE']) ||
!$config->get('mail_display_vendor', 0))
return;
$vendor_ids = array();
foreach($templates['PRODUCT_LINE'] as $p) {
if(!empty($p['product']->product_vendor_id))
$vendor_ids[ (int)$p['product']->product_vendor_id ] =
(int)$p['product']->product_vendor_id;
}
if(empty($vendor_ids))
return;
$query = 'SELECT * FROM ' .
hikamarket::table('vendor') . ' WHERE vendor_id IN (' .
implode(',', $vendor_ids) . ') AND vendor_published =
1';
$this->db->setQuery($query);
$vendors = $this->db->loadObjectList('vendor_id');
foreach($templates['PRODUCT_LINE'] as &$p) {
if(empty($p['product']->product_vendor_id))
continue;
$v = (int)$p['product']->product_vendor_id;
if(!isset($vendors[$v]))
continue;
$p['vendor'] = $vendors[$v];
if(empty($p['PRODUCT_DETAILS']))
$p['PRODUCT_DETAILS'] = '';
$p['PRODUCT_DETAILS'] .= '<br />' .
JText::sprintf('SOLD_BY_VENDOR', $vendors[$v]->vendor_name);
}
unset($p);
}
private function processContactrequestTemplate(&$mail, &$data,
&$content, &$vars, &$texts, &$templates) {
$config = hikamarket::config();
if($config->get('contact_mail_to_vendor', 1) == 0)
return;
if(!empty($data->product) &&
isset($data->product->product_vendor_id) &&
$data->product->product_vendor_id > 1) {
global $Itemid;
$url_itemid = (!empty($Itemid)) ? ('&Itemid=' . $Itemid) :
'';
$front_product_url =
hikashop_frontendLink('index.php?option=com_hikashop&ctrl=product&task=show&cid='.$data->product->product_id.'&name='.$data->product->alias
. $url_itemid);
$vars['PRODUCT_DETAILS'] = '<p>' .
strip_tags($data->product->product_name.'
('.$data->product->product_code.')') . ' '
.
'<a
href="'.$front_product_url.'">' .
JText::_('FRONTEND_DETAILS_PAGE').'</a>' .
'</p>';
}
}
}
classes/menu.php000064400000011266151160562260007670 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketMenuClass extends hikamarketClass {
protected $tables = array();
protected $pkeys = array();
protected $toggle = array();
public function processView(&$view) {
if(empty($view->menus))
return;
$currentuser = JFactory::getUser();
if(!$currentuser->authorise('core.manage',
'com_hikamarket'))
return;
$config = hikamarket::config();
$use_approval = $config->get('product_approval', 0);
$market = array(
'name' => HIKAMARKET_NAME,
'check' => 'ctrl=config',
'acl' => 'config',
'task' => 'manage',
'icon' => 'fas fa-store',
'url' => hikamarket::completeLink('dashboard'),
'children' => array(
array(
'name' => JText::_('HIKA_CONFIGURATION'),
'check' => 'ctrl=config',
'acl' => 'config',
'task' => 'manage',
'icon' => 'fa fa-wrench',
'url' => hikamarket::completeLink('config'),
'display' =>
$currentuser->authorise('core.admin',
'com_hikamarket')
),
array(
'name' => JText::_('HIKAM_ACL'),
'check' => 'ctrl=config&task=acl',
'acl' => 'config',
'task' => 'manage',
'icon' => 'fa fa-unlock-alt',
'url' =>
hikamarket::completeLink('config&task=acl'),
'display' =>
$currentuser->authorise('core.admin',
'com_hikamarket')
),
array(
'name' => JText::_('PLUGINS'),
'check' => 'ctrl=plugins',
'icon' => 'fa fa-puzzle-piece',
'url' => hikamarket::completeLink('plugins')
),
array('name' => ''),
array(
'name' => JText::_('HIKA_VENDORS'),
'check' => 'ctrl=vendor',
'acl' => 'vendor',
'icon' => 'fas fa-user-tie',
'url' => hikamarket::completeLink('vendor'),
'display' => hikamarket::level(1)
),
array(
'name' => JText::_('WAITING_APPROVAL_LIST'),
'check' =>
'ctrl=product&task=waitingapproval',
'icon' => 'fa fa-thumbs-up',
'url' =>
hikamarket::completeLink('product&task=waitingapproval'),
'display' => $use_approval
),
array('name' => '', 'display' =>
hikamarket::level(1) || $use_approval),
array(
'name' => JText::_('VIEWS'),
'check' => 'ctrl=views',
'icon' => 'fa fa-file-code',
'url' =>
hikamarket::completeLink('shop.view&component='.HIKAMARKET_COMPONENT)
),
array(
'name' => JText::_('MENUS'),
'check' => 'ctrl=menus',
'icon' => 'icon-16-menu',
'url' => hikamarket::completeLink('menus'),
'display' => hikamarket::level(1) &&
!HIKASHOP_J30
),
array(
'name' => JText::_('MODULES'),
'check' => 'ctrl=modules',
'icon' => 'icon-16-module',
'url' => hikamarket::completeLink('modules'),
'display' => hikamarket::level(1) &&
!HIKASHOP_J30
),
array('name' => ''),
array(
'name' => JText::_('DOCUMENTATION'),
'check' => 'ctrl=documentation',
'icon' => 'fa fa-life-ring',
'url' =>
hikamarket::completeLink('documentation')
),
array(
'name' => JText::_('UPDATE_ABOUT'),
'check' => 'ctrl=update',
'icon' => 'fa fa-sync',
'url' => hikamarket::completeLink('update')
),
array(
'name' => JText::_('FORUM'),
'check' => 'support/forum.html',
'icon' => 'fa fa-info',
'url' => HIKAMARKET_URL.'support/forum.html'
)
)
);
$newMenus = array(&$market);
$this->checkActive($newMenus, 0, HIKAMARKET_COMPONENT);
$last = array_pop($view->menus);
array_push($view->menus, $market, $last);
}
private function checkActive(&$menus, $level = 0, $default_component =
HIKASHOP_COMPONENT) {
if($level > 2)
return;
$currentComponent = hikaInput::get()->getCmd('option',
HIKASHOP_COMPONENT);
foreach($menus as $k => $menu) {
if(isset($menu['display']) &&
!$menu['display']) {
unset($menus[$k]);
continue;
}
if(empty($menu['check']))
continue;
if(is_array($menu['check'])) {
$component = $menu['check'][0];
$check = $menu['check'][1];
} else {
$check = $menu['check'];
$component = $default_component;
}
if($component == $currentComponent &&
strpos($_SERVER['QUERY_STRING'], $check) !== false) {
if(strpos($_SERVER['QUERY_STRING'], '&task=')
=== false || strpos($menu['check'], '&task=') !==
false) {
$menus[$k]['active'] = true;
}
}
if(!empty($menu['children'])) {
$this->checkActive($menus[$k]['children'], $level+1,
$default_component);
}
}
}
}
classes/menus.php000064400000021640151160562270010051 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketMenusClass extends hikamarketClass {
protected $tables = array('joomla.menu');
protected $pkeys = array('id');
protected $toggle = array('published' => 'id');
public function get($id, $default = '') {
$obj = parent::get($id);
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
if(is_null($obj))
$obj = new stdClass();
if(!empty($obj->id))
$obj->hikamarket_params = $config->get('menu_' .
$obj->id, null);
if(empty($obj->hikamarket_params)) {
$obj->hikamarket_params =
$shopConfig->get('default_params', null);
$obj->hikamarket_params['content_type'] = '';
if(!empty($obj->link) && substr($obj->link, 0, 32) ==
'index.php?option=com_hikamarket&') {
$link_params = explode('&', substr($obj->link, 32));
foreach($link_params as $link_param) {
if(!empty($link_param) && strpos($link_param, '=')
!== false) {
list($p,$v) = explode('=', $link_param, 2);
if($p == 'view' || $p == 'ctrl')
$obj->hikamarket_params['content_type'] =
str_replace('market', '', $v);
}
}
}
}
$obj->content_type =
$obj->hikamarket_params['content_type'];
$this->loadParams($obj);
return $obj;
}
protected function loadParams(&$result) {
if(empty($result->params))
return;
$lines = explode("\n", $result->params);
$result->params = array();
foreach($lines as $line) {
$param = explode('=', $line, 2);
if(count($param) == 2)
$result->params[$param[0]] = $param[1];
}
}
public function saveForm() {
$module = new stdClass();
$formData = hikaInput::get()->get('menu', array(),
'array');
if(!empty($formData)) {
foreach($formData as $column => $value) {
hikamarket::secureField($column);
if(is_array($value)) {
$module->$column = array();
foreach($value as $k2 => $v2) {
hikamarket::secureField($k2);
$module->{$column}[$k2] = strip_tags($v2);
}
} else {
$module->$column = strip_tags($value);
}
}
$module->link =
'index.php?option='.HIKAMARKET_COMPONENT.'&view='.$module->content_type.'market&layout=listing';
$content_type = $module->content_type;
unset($module->content_type);
}
$new = false;
if(empty($module->id)) {
$new = true;
if(empty($module->alias))
$module->alias =
preg_replace('#[^a-z_0-9-]#i','',$module->title);
}
$result = $this->save($module);
if($result) {
$element = array();
$formData = hikaInput::get()->get('config', array(),
'array');
$params_name = 'menu_'.(int)$module->id;
if($new)
$post_name = 'menu_0';
else
$post_name = $params_name;
if(!empty($formData[$post_name])) {
foreach($formData[$post_name] as $column => $value) {
hikamarket::secureField($column);
$element[$column] = strip_tags($value);
}
}
$element['content_type'] = $content_type;
$configClass = hikamarket::config();
$config = new stdClass();
$config->$params_name = $element;
if($configClass->save($config))
$configClass->set($params_name, $element);
}
return $result;
}
protected function displayErrors($id) {
static $displayed = false;
if($displayed)
return;
$displayed = true;
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('MENU_WITHOUT_ASSOCIATED_MODULE'));
$app->enqueueMessage(JText::_('ASSOCIATED_MODULE_NEEDED'));
$app->enqueueMessage(JText::sprintf('ADD_MODULE_AUTO',
hikamarket::completeLink('menus&task=add_module&cid='.$id.'&'.hikamarket::getFormToken().'=1')));
}
public function save(&$element) {
$query = 'SELECT a.extension_id FROM ' .
hikamarket::table('extensions',false).' AS a WHERE
a.type=\'component\' AND
a.element=\''.HIKAMARKET_COMPONENT.'\'';
$this->db->setQuery($query);
$element->component_id = $this->db->loadResult();
if(empty($element->id))
$element->params['show_page_title'] = 1;
if(!empty($element->params) && is_array($element->params))
{
$params = '';
foreach($element->params as $k => $v) {
$params .= $k . '=' . $v . "\n";
}
$element->params = rtrim($params, "\n");
}
$element->id = parent::save($element);
return $element->id;
}
public function delete(&$elements) {
$result = parent::delete($elements);
if($result) {
if(!is_array($elements))
$elements = array($elements);
if(!empty($elements)) {
$ids = array();
foreach($elements as $id) {
$ids[] = $this->db->Quote('menu_' . (int)$id);
}
$query = 'DELETE FROM ' .
hikamarket::table('config') . ' WHERE config_namekey IN
(' . implode(',', $ids) . ');';
$this->db->setQuery($query);
return $this->db->execute();
}
}
return $result;
}
public function attachAssocModule($id) {
$menu = $this->get($id);
$menu->hikamarket_params['content_type'] =
'vendor';
$params =& $menu->hikamarket_params;
$module_id = $this->createAssocModule($params,$id);
if(!empty($module_id)) {
$configData = new stdClass();
$params['modules'] = $module_id;
$name = 'menu_' . $id;
$configData->$name = $params;
$config = hikamarket::config();
if($config->save($configData)){
$config->set($name, $params);
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'));
}
}
return true;
}
public function createMenu(&$moduleOtpions, $id) {
$alias = 'hikamarket-menu-for-module-' . $id;
$this->db->setQuery('SELECT id FROM ' .
hikamarket::table('menu',false).' WHERE
alias=\''.$alias.'\'');
$moduleOtpions['itemid'] = $this->db->loadResult();
if(empty($moduleOtpions['itemid'])) {
$this->db->setQuery('SELECT menutype FROM
'.hikamarket::table('menu_types',false).' WHERE
menutype=\'hikashop_hidden\'');
$mainMenu = $this->db->loadResult();
if(empty($mainMenu)) {
$this->db->setQuery('INSERT INTO
'.hikamarket::table('menu_types',false).'
(`menutype`,`title`,`description`) VALUES (
\'hikashop_hidden\',\'HikaShop hidden
menus\',\'This menu is used by HikaShop to store menus
configurations\' )');
$this->db->execute();
}
$this->db->setQuery('SELECT rgt FROM
'.hikamarket::table('menu',false).' WHERE id=1');
$root = $this->db->loadResult();
$element = new stdClass();
$element->menutype = 'hikashop_hidden';
$element->alias = $alias;
$element->link =
'index.php?option=com_hikamarket&view=vendor&layout=listing';
$element->type = 'component';
$element->published = 1;
$element->client_id = 0;
$element->language = '*';
$element->access = 1;
$element->lft = $root;
$element->rgt = $root+1;
$element->level = 1;
$element->parent_id = 1;
$element->title = 'Menu item for vendor listing module
'.$id;
$this->save($element);
$this->db->setQuery('UPDATE
'.hikamarket::table('menu',false).' SET
rgt='.($root+2).' WHERE id=1');
$this->db->execute();
$this->db->setQuery('SELECT id FROM
'.hikashop_table('menu',false).' WHERE
alias=\''.$element->alias.'\'');
$moduleOtpions['itemid'] = $this->db->loadResult();
}
if(!empty($moduleOtpions['itemid'])) {
$menuData = new stdClass();
$menuData->id = $moduleOtpions['itemid'];
$this->createMenuOption($menuData, $moduleOtpions);
}
}
public function createMenuOption(&$menuData, $default_params = null)
{
$configClass = hikamarket::config();
$shopConfig = hikamarket::config(false);
if(empty($default_params)) {
if(!isset($default_params['columns']))
$default_params['columns'] = 1;
$default_params = $shopConfig->get('default_params');
$default_params['content_type'] = 'vendor';
$default_params['layout_type'] = 'div';
$default_params['content_synchronize'] = '1';
if($default_params['columns'] == 1)
$default_params['columns'] = 3;
}
$id = (int)@$menuData->id;
$default_params['modules'] = '';
$default_params['modules'] =
(int)$this->createAssocModule($default_params, $id);
$name = 'menu_'.$id;
$config = new stdClass();
$config->$name = $default_params;
if($configClass->save($config)) {
$configClass->set($name, $default_params);
}
$menuData->hikamarket_params = $default_params;
return true;
}
public function createAssocModule(&$params,$id){
if(!empty($params['modules'])) {
if(is_array($params['modules'])) {
$ids = implode(',', $params['modules']);
} else {
$ids = (int)$params['modules'];
}
$this->db->setQuery('SELECT * FROM
'.hikamarket::table('modules',false).' WHERE id IN
('.$ids.');');
$modulesData = $this->db->loadObjectList('id');
if(!is_array($modulesData) || !count($modulesData)) {
$params['modules'] = '';
}
}
return false;
}
}
classes/modules.php000064400000013711151160562270010372 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketModulesClass extends hikamarketClass {
protected $tables = array('joomla.modules');
protected $pkeys = array('id');
protected $toggle = array('published' => 'id');
public function get($id, $default = '') {
$obj = parent::get($id);
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
if(is_null($obj))
$obj = new stdClass();
if(!empty($obj->id))
$obj->hikamarket_params = $config->get('params_' .
$obj->id, null);
if(empty($obj->hikamarket_params))
$obj->hikamarket_params =
$shopConfig->get('default_params', null);
$this->loadParams($obj);
return $obj;
}
protected function loadParams(&$result) {
if(empty($result->params))
return;
$registry = new JRegistry;
if(!HIKASHOP_J30)
$registry->loadJSON($result->params);
else
$registry->loadString($result->params);
$result->params = $registry->toArray();
}
public function saveForm($id = null) {
$module = new stdClass();
$formData = hikaInput::get()->get('module', array(),
'array');
if(!empty($formData)) {
foreach($formData as $column => $value) {
hikamarket::secureField($column);
if(is_array($value)) {
$module->$column = array();
foreach($value as $k2 => $v2) {
hikamarket::secureField($k2);
$module->{$column}[$k2] = strip_tags($v2);
}
} else {
$module->$column = strip_tags($value);
}
}
}
$element = array();
$formData = hikaInput::get()->get('config', array(),
'array');
if(isset($module->id) && empty($id))
$params_name = 'params_'.(int)$module->id;
else
$params_name = 'params_'.(int)$id;
if(!empty($formData[$params_name])) {
foreach($formData[$params_name] as $column => $value) {
hikamarket::secureField($column);
$element[$column] = strip_tags($value);
}
}
$formData = hikaInput::get()->get('moduleconfig', array(),
'array');
if(!empty($formData[$params_name])) {
foreach($formData[$params_name] as $column => $value){
hikamarket::secureField($column);
$module->$column = strip_tags($value);
}
}
$module->hikamarket_params =& $element;
$result = $this->save($module);
return $result;
}
public function save(&$element) {
if(!empty($element->params) && is_array($element->params))
{
$handler = JRegistryFormat::getInstance('JSON');
$element->params = $handler->objectToString($element->params);
}
$element->id = parent::save($element);
if($element->id && !empty($element->hikamarket_params)){
$config =& hikamarket::config();
$update_config = new stdClass();
$params_name = 'params_'.$element->id;
$update_config->$params_name = $element->hikamarket_params;
if($config->save($update_config)) {
$config->set($params_name, $element->hikamarket_params);
}
}
return $element->id;
}
public function delete(&$elements) {
$result = parent::delete($elements);
if(!$result)
return false;
if(!is_array($elements))
$elements = array($elements);
if(!empty($elements)) {
$ids = array();
foreach($elements as $id) {
$ids[] = $this->db->Quote('params_' . (int)$id);
}
$query = 'DELETE FROM
'.hikamarket::table('config').' WHERE config_namekey IN
(' . implode(',', $ids) . ');';
$this->db->setQuery($query);
$result = $this->db->execute();
}
return $result;
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$sqlFilters = array();
if(!empty($options['filters'])) {
foreach($options['filters'] as $filter) {
}
}
$module_types = array(
'mod_hikamarket',
'mod_hikashop',
);
$sqlTypes = array();
foreach($module_types as $type) {
$sqlTypes[] = 'module = ' . $this->db->Quote($type);
if(!HIKASHOP_J30)
$sqlTypes[] = 'module LIKE
\''.$this->db->getEscaped($type.'_',
true).'%\'';
else
$sqlTypes[] = 'module LIKE
\''.$this->db->escape($type.'_',
true).'%\'';
}
$sqlFilters[] = '('.implode(' OR ',
$sqlTypes).')';
if(!empty($search)) {
$searchMap = array('title', 'id');
$searchVal = '\'%' .
$this->db->escape(HikaStringHelper::strtolower($search), true) .
'%\'';
$sqlFilters[] = '('.implode(' LIKE
'.$searchVal.' OR ', $searchMap).' LIKE
'.$searchVal.')';
}
$sqlSort = 'id';
$max = 15;
$start = (int)@$options['page'];
$query = 'SELECT id, title, module '.
' FROM ' . hikamarket::table('joomla.modules') .
' WHERE ('.implode(') AND (', $sqlFilters).')
'.
' ORDER BY '.$sqlSort;
$this->db->setQuery($query, $start, $max+1);
$modules = $this->db->loadObjectList('id');
if(count($modules) > $max) {
$fullLoad = false;
array_pop($modules);
}
if(!empty($value) && !is_array($value) && (int)$value
> 0) {
$value = (int)$value;
if(isset($modules[$value])) {
$ret[1] = $modules[$value];
} else {
$query = 'SELECT id, title, module '.
' FROM ' . hikamarket::table('joomla.modules') .
' WHERE id = ' . $value;
$this->db->setQuery($query);
$ret[1] = $this->db->loadObject();
}
} else if(!empty($value) && is_array($value)) {
hikamarket::toInteger($value);
$query = 'SELECT id, title, module '.
' FROM ' . hikamarket::table('joomla.modules') .
' WHERE id IN (' . implode(',', $value) .
')';
$this->db->setQuery($query);
$module_values = $this->db->loadObjectList('id');
$ret[1] = array();
foreach($value as $v) {
if(isset($module_values[$v]))
$ret[1][$v] = $module_values[$v];
}
unset($module_values);
}
if(!empty($modules))
$ret[0] = $modules;
return $ret;
}
}
classes/order.php000064400000343056151160562270010045 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketOrderClass extends hikamarketClass {
protected $tables = array('shop.order_product',
'shop.order');
protected $pkeys = array('order_id', 'order_id');
private static $creatingSubSales = false;
private static $events = array();
public function frontSaveForm() {
self::$events = array();
if(!hikamarket::loginVendor())
return false;
$config = hikamarket::config();
$vendor_id = hikamarket::loadVendor(false);
if($vendor_id == 1)
$vendor_id = 0;
$order_id = hikamarket::getCID('order_id');
$req_order_id = (int)$order_id;
if(empty($order_id) || !hikamarket::isVendorOrder($order_id))
return false;
$block = hikaInput::get()->getCmd('block', '');
$orderClass = hikamarket::get('shop.class.order');
$fieldsClass = hikamarket::get('shop.class.field');
jimport('joomla.filter.filterinput');
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$do = false;
$no_modification = false;
$fields = array();
$order = new stdClass();
$order->hikamarket = new stdClass();
$order->old = $this->getRaw($order_id);
$editable_order = ($order->old->order_type === 'sale')
&& ($vendor_id == 0);
if($order->old->order_type === 'sale' &&
$vendor_id > 1 && (int)$order->old->order_vendor_id ==
$vendor_id && (int)$config->get('vendor_edit_order',
0) == 1) {
$editable_order = hikamarket::isEditableOrder($order_id, $vendor_id);
}
if(!empty($order->old->order_tax_info) &&
is_string($order->old->order_tax_info))
$order->old->order_tax_info =
hikamarket::unserialize($order->old->order_tax_info);
if(!empty($order->old->order_payment_params) &&
is_string($order->old->order_payment_params))
$order->old->order_payment_params =
hikamarket::unserialize($order->old->order_payment_params);
if(!empty($order->old->order_shipping_params) &&
is_string($order->old->order_shipping_params))
$order->old->order_shipping_params =
hikamarket::unserialize($order->old->order_shipping_params);
if(!empty($order->old->order_vendor_params) &&
is_string($order->old->order_vendor_params))
$order->old->order_vendor_params =
hikamarket::unserialize($order->old->order_vendor_params);
$order->order_id = $order_id;
$order->history = new stdClass();
$order->history->history_type = 'modification';
$order->history->history_notified = false;
$order->history->history_reason = array();
$order->history->history_data = array();
$order->old->order_discount_tax_namekey = '';
$order->old->order_payment_tax_namekey = '';
$order->old->order_shipping_tax_namekey = array();
if(!empty($order->old->order_tax_info)) {
foreach($order->old->order_tax_info as $k => $v) {
if(isset($v->tax_amount_for_coupon) &&
empty($order->old->order_discount_tax_namekey))
$order->old->order_discount_tax_namekey = $k;
if(isset($v->tax_amount_for_payment) &&
empty($order->old->order_payment_tax_namekey))
$order->old->order_payment_tax_namekey = $k;
if(isset($v->tax_amount_for_shipping))
$order->old->order_shipping_tax_namekey[$k] =
$v->tax_amount_for_shipping;
}
}
if(count($order->old->order_shipping_tax_namekey) == 1) {
$keys = array_keys($order->old->order_shipping_tax_namekey);
$order->old->order_shipping_tax_namekey = reset($keys);
unset($keys);
}
if(empty($order_id) || empty($order->order_id))
$orderClass->sendEmailAfterOrderCreation = false;
$data = hikaInput::get()->get('order', array(),
'array');
if($block == 'delete_product' && $editable_order) {
$data = array();
$pid = hikaInput::get()->getInt('pid', 0);
$product_hash = hikaInput::get()->getString('product_hash',
'');
if(empty($product_hash) || empty($pid) || empty($order->old) ||
!hikamarket::acl('order/edit/products'))
return false;
$query = 'SELECT * FROM ' .
hikamarket::table('shop.order_product') . ' WHERE order_id =
' . (int)$req_order_id . ' AND order_product_id = ' .
(int)$pid;
$this->db->setQuery($query);
$order_product = $this->db->loadObject();
$local_hash = md5((int)$order_product->order_product_id .
'#' . (int)$order_product->order_id . '#' .
(int)$order->old->order_modified);
if($local_hash != $product_hash)
return false;
$do = true;
$order->history->history_reason[] = 'Order product
deleted';
$order->history->history_data['product_delete'] =
array(
'product' => array(
'id' => (int)$order_product->product_id,
'name' => $order_product->order_product_name,
'code' => $order_product->order_product_code,
'qty' => (int)$order_product->order_product_quantity,
'price' =>
(float)hikamarket::toFloat($order_product->order_product_price)
)
);
$this->addEvent('orderMgr.details', array(
'src' => $block
));
$order_product->order_product_quantity = 0;
$order->product = array(
$order_product
);
}
if(hikamarket::acl('order/edit/general') &&
!empty($data['general'])) {
$order_status = $data['general']['order_status'];
if($order->old->order_type == 'subsale' &&
$order->old->order_vendor_paid > 0 &&
$config->get('filter_orderstatus_paid_order', 1)) {
$valid_order_statuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
if(!in_array($order->old->order_status, $valid_order_statuses) ||
!in_array($order_status, $valid_order_statuses)) {
$order_status = null;
}
}
if($this->isValidOrderStatus($order_status)) {
$order->order_status = $order_status;
$do = true;
if(!empty($data['notify']) && $vendor_id == 0
&& hikamarket::acl('order/edit/notify'))
$order->history->history_notified = true;
$order->history->history_reason[] = 'Order status
modified';
$order->history->history_data['order_status'] = array(
'old' => $order->old->order_status,
'new' => $order->order_status
);
$this->addEvent('orderMgr.order_status', array(
'src' => $block,
'old' => (int)$order->old->order_status,
'new' => $order->order_status,
));
}
}
if(hikamarket::acl('order/edit/customer') &&
!empty($data['customer']['user_id']) &&
$editable_order) {
$user_id = (int)$data['customer']['user_id'];
if($user_id > 0 && (int)$order->old->order_user_id !=
$user_id && hikamarket::isVendorCustomer($user_id)) {
$order->order_user_id = $user_id;
$do = true;
$order->history->history_reason[] = 'Customer
modified';
$order->history->history_data['customer'] = array(
'old' => (int)$order->old->order_user_id,
'new' => $user_id
);
$this->addEvent('orderMgr.customer', array(
'src' => $block,
'old' => (int)$order->old->order_user_id,
'id' => $user_id,
));
if(!empty($data['customer']['addrlink'])) {
$addressClass = hikamarket::get('shop.class.address');
$addresses = $addressClass->getByUser( (int)$user_id );
if(!empty($addresses)) {
$addr = reset($addresses);
$order->order_billing_address_id = (int)$addr->address_id;
$order->history->history_data['billing_address'] =
array(
'old' =>
(int)$order->old->order_billing_address_id,
'new' => (int)$addr->address_id
);
$this->addEvent('orderMgr.shippingaddress', array(
'src' => $block,
'old' =>
(int)$order->old->order_billing_address_id,
'id' => (int)$addr->address_id
));
$order->order_shipping_address_id = (int)$addr->address_id;
$order->history->history_data['shipping_address'] =
array(
'old' =>
(int)$order->old->order_shipping_address_id,
'new' => (int)$addr->address_id
);
$this->addEvent('orderMgr.billingaddress', array(
'src' => $block,
'old' =>
(int)$order->old->order_shipping_address_id,
'id' => (int)$addr->address_id
));
}
}
}
}
if(hikamarket::acl('order/edit/billingaddress') &&
!empty($data['billingaddress'])) {
if($this->processAddressFormData($order, 'billing',
$data['billingaddress'], $block))
$do = true;
}
if(hikamarket::acl('order/edit/shippingaddress') &&
!empty($data['shippingaddress'])) {
if($this->processAddressFormData($order, 'shipping',
$data['shippingaddress'], $block))
$do = true;
}
if(hikamarket::acl('order/edit/coupon') &&
!empty($data['coupon']) && $editable_order) {
$coupon = $this->processFormData($order, $data['coupon'],
array(
'order_discount_code' => array(
'default' => '',
'field' => 'code',
'type' => 'text'
),
'order_discount_price' => array(
'default' => 0.0,
'field' => 'value',
'type' => 'price'
),
'order_discount_tax' => array(
'default' => 0.0,
'field' => 'tax',
'type' => 'price'
),
'order_discount_tax_namekey' => array(
'default' => '',
'field' => 'tax_namekey',
'type' => 'tax_namekey'
),
));
if($coupon !== false && !empty($coupon)) {
$do = true;
$order->history->history_reason[] = 'Coupon modified';
$order->history->history_data['coupon'] = array(
'old' => $coupon['old'],
'new' => $coupon['new']
);
$this->addEvent('orderMgr.details', array(
'src' => $block
));
}
}
if(hikamarket::acl('order/edit/shipping') &&
!empty($data['shipping']) && $editable_order) {
$shipping = $this->processFormData($order,
$data['shipping'], array(
'order_shipping_id' => array(
'default' => 0,
'field' => 'id',
),
'order_shipping_method' => array(
'default' => '',
'field' => 'namekey',
'type' => 'shipping_method',
'link' => 'order_shipping_id'
),
'order_shipping_price' => array(
'default' => 0.0,
'field' => 'value',
'type' => 'price'
),
'order_shipping_tax' => array(
'default' => 0.0,
'field' => 'tax',
'type' => 'price'
),
'order_shipping_tax_namekey' => array(
'default' => '',
'field' => 'tax_namekey',
'type' => 'tax_namekey'
),
));
if($shipping !== false && !empty($shipping)) {
$do = true;
$order->history->history_reason[] = 'Shipping
modified';
$order->history->history_data['shipping'] = array(
'old' => $shipping['old'],
'new' => $shipping['new']
);
$this->addEvent('orderMgr.details', array(
'src' => $block
));
}
} elseif(hikamarket::acl('order/edit/shipping') &&
!empty($data['shippings']) && $editable_order) {
$shippings = $this->processShippingsFormData($order,
$data['shippings']);
if($shippings !== false && !empty($shippings)) {
$do = true;
$order->history->history_reason[] = 'Shipping
modified';
$order->history->history_data['shipping'] = array(
'old' => $shipping['old'],
'new' => $shipping['new']
);
$this->addEvent('orderMgr.details', array(
'src' => $block
));
}
}
if(hikamarket::acl('order/edit/payment') &&
!empty($data['payment']) && $editable_order) {
$payment = $this->processFormData($order, $data['payment'],
array(
'order_payment_id' => array(
'default' => 0,
'field' => 'id',
),
'order_payment_method' => array(
'default' => '',
'field' => 'namekey',
'type' => 'payment_method',
'link' => 'order_payment_id'
),
'order_payment_price' => array(
'default' => 0.0,
'field' => 'value',
'type' => 'price'
),
'order_payment_tax' => array(
'default' => 0.0,
'field' => 'tax',
'type' => 'price'
),
'order_payment_tax_namekey' => array(
'default' => '',
'field' => 'tax_namekey',
'type' => 'tax_namekey'
),
));
if($payment !== false && !empty($payment)) {
$do = true;
$order->history->history_reason[] = 'Payment
modified';
$order->history->history_data['payment'] = array(
'old' => $payment['old'],
'new' => $payment['new']
);
$this->addEvent('orderMgr.details', array(
'src' => $block
));
}
}
if(hikamarket::acl('order/edit/customfields') &&
!empty($data['field'])) {
$null = null;
$orderFields =
$fieldsClass->getFilteredInput(array('field','order'),
$null, true, 'order', false,
'display:vendor_order_edit=1');
if(!empty($orderFields)) {
$old_fields = array();
$new_fields = array();
foreach($orderFields as $key => $value) {
$order->$key = $value;
if(!isset($order->old->$key) || $value !=
$order->old->$key) {
$new_fields[$key] = $value;
$old_fields[$key] = @$order->old->$key;
}
}
if(!empty($new_fields)) {
$do = true;
$order->history->history_reason[] = 'Custom fields
modified';
$order->history->history_data['fields'] = array(
'old' => $old_fields,
'new' => $new_fields
);
$this->addEvent('orderMgr.fields', array(
'src' => $block
));
}
if(!$do)
$no_modification = true;
}
}
if(hikamarket::acl('order/edit/products') &&
!empty($data['products']) && $editable_order) {
$query = 'SELECT * FROM ' .
hikamarket::table('shop.order_product') . ' WHERE order_id =
' . (int)$order_id;
$this->db->setQuery($query);
$order->old->order_products =
$this->db->loadObjectList('order_product_id');
$null = null;
$itemFieldsCat = $fieldsClass->getCategories('item',
$null);
$fields['item'] =
$fieldsClass->getData('display:vendor_order_edit=1',
'item', $itemFieldsCat);
$order->product = array();
$order->hikamarket->products = array();
foreach($data['products'] as $order_product_id =>
$order_product) {
if((int)$order_product_id > 0 &&
!isset($order->old->order_products[ (int)$order_product_id ]))
continue;
$product = new stdClass();
$oldData = new stdClass();
if((int)$order_product_id > 0)
$oldData = $order->old->order_products[ (int)$order_product_id
];
$fields_checked =
$fieldsClass->_checkOneInput($fields['item'],
$order_product['field'], $product, 'item', $oldData);
$product->order_id = (int)$order_id;
if(!empty($order_product_id) && (int)$order_product_id > 0)
$product->order_product_id = (int)$order_product_id;
$product->product_id = (int)$order_product['id'];
$product->order_product_name =
$safeHtmlFilter->clean(trim($order_product['name']),
'string');
$product->order_product_code =
$safeHtmlFilter->clean(strip_tags(trim($order_product['code'])),
'string');
$product->order_product_quantity =
(int)$order_product['qty'];
$product->order_product_price =
(float)hikamarket::toFloat(trim($order_product['value']));
$product->order_product_tax =
(float)hikamarket::toFloat(trim($order_product['tax']));
if(!empty($product->order_product_tax))
$product->order_product_price -= $product->order_product_tax;
$product->tax_namekey =
$safeHtmlFilter->clean(strip_tags(trim($order_product['tax_namekey'])),
'string');
if($vendor_id <= 1 &&
hikamarket::acl('order/edit/vendor') &&
isset($order_product['vendor_id'])) {
$ref = uniqid();
$product_vendor_id = (int)$order_product['vendor_id'];
$vendor_price =
(float)hikamarket::toFloat(trim($order_product['vendor_price']));
$order->hikamarket->products[(int)$order_product_id] = array(
'vendor_id' => $product_vendor_id,
'vendor_price' => $vendor_price,
'product_id' => (int)$order_product['id'],
'order_product_id' => (int)$order_product_id,
'order_product_quantity' =>
(int)$order_product['qty'],
'ref' => $ref
);
$product->hikamarket = new stdClass();
$product->hikamarket->ref = $ref;
} else if($vendor_id > 1) {
$product->order_product_vendor_price =
$this->recalculateProductPrice($product,
$order->old->order_vendor_params);
if($product->order_product_vendor_price === false)
$product->order_product_vendor_price =
$product->order_product_price;
}
if((int)$order_product_id > 0) {
$diff = false;
foreach($product as $k => $v) {
if($v == $oldData->$k) {
$diff = true;
break;
}
}
} else
$diff = true;
if($diff)
$order->product[] =& $product;
unset($product);
}
if(!empty($order->product)) {
$do = true;
if(count($order->product) == 1 &&
empty($order->product[0]->order_product_id)) {
$order->history->history_reason[] = 'Order product
added';
$order->history->history_data['product'] = array(
);
} else {
$order->history->history_reason[] = 'Order product
modified';
$order->history->history_data['product'] = array(
);
}
$this->addEvent('orderMgr.details', array(
'src' => $block
));
}
}
if(!$do && $no_modification)
return true;
if(!$do)
return false;
$order->history->history_reason =
(count($order->history->history_reason) == 1) ?
reset($order->history->history_reason) : 'Order modified';
$order->history->history_data =
json_encode($order->history->history_data);
if(isset($order->order_shipping_price) ||
isset($order->order_payment_price) ||
isset($order->order_discount_price)) {
if(!isset($order->order_payment_tax_namekey) &&
isset($order->old->order_payment_tax_namekey)) {
$order->order_payment_tax = $order->old->order_payment_tax;
$order->order_payment_tax_namekey =
$order->old->order_payment_tax_namekey;
}
if(!isset($order->order_discount_tax_namekey) &&
isset($order->old->order_discount_tax_namekey)) {
$order->order_discount_tax = $order->old->order_discount_tax;
$order->order_discount_tax_namekey =
$order->old->order_discount_tax_namekey;
}
if(!isset($order->order_shipping_tax_namekey) &&
isset($order->old->order_shipping_tax_namekey)) {
$order->order_shipping_tax = $order->old->order_shipping_tax;
$order->order_shipping_tax_namekey =
$order->old->order_shipping_tax_namekey;
}
}
unset($order->old->order_discount_tax_namekey);
unset($order->old->order_shipping_tax_namekey);
unset($order->old->order_payment_tax_namekey);
$status = $orderClass->save($order);
if(!$status)
return false;
$order->order_id = (int)$status;
$this->addEvent('orderMgr.history', null);
$admin_notify_orders = explode(',',
$config->get('admin_notify_subsale',
'cancelled,refunded'));
if(!empty($order->order_status) && !empty($order->old)
&& $order->old->order_type == 'subsale' &&
$order->order_status != $order->old->order_status &&
in_array($order->order_status, $admin_notify_orders)) {
$shopConfig = hikamarket::config(false);
$mailClass = hikamarket::get('class.mail');
$vendorClass = hikamarket::get('class.vendor');
$mainVendor = $vendorClass->get(1);
if(empty($mainVendor->vendor_email))
$mainVendor->vendor_email =
$shopConfig->get('payment_notification_email', '');
if(empty($mainVendor->vendor_email))
$mainVendor->vendor_email =
$shopConfig->get('order_creation_notification_email',
'');
if(!isset($order->hikamarket))
$order->hikamarket = new stdClass();
$order->hikamarket->vendor = $mainVendor;
$mailClass->sendVendorOrderEmail($order);
}
return $order;
}
public function saveCreateForm() {
if(!hikamarket::loginVendor())
return false;
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$vendor_id = hikamarket::loadVendor(false);
if($vendor_id == 1)
$vendor_id = 0;
if( !hikamarket::acl('order/add') )
return false;
if($vendor_id > 1 &&
((int)$config->get('vendor_edit_order', 0) == 0 ||
!hikamarket::level(1)))
return false;
$formData = hikaInput::get()->get('data', array(),
'array');
if(empty($formData['order']))
return false;
$order = new stdClass();
$order->order_type = 'sale';
$order->order_vendor_id = $vendor_id;
$main_currency = (int)$shopConfig->get('main_currency', 1);
$order->order_currency_id = $main_currency;
if(!empty($formData['order']['order_currency_id']))
{
$order->order_currency_id =
(int)$formData['order']['order_currency_id'];
}
if(empty($formData['order']['order_user_id'])) {
return false;
}
$order->order_user_id =
(int)$formData['order']['order_user_id'];
if(empty($order->order_billing_address_id)) {
$query = 'SELECT address_id FROM
'.hikamarket::table('shop.address').
' WHERE address_user_id =
'.(int)$order->order_user_id.' AND address_published = 1
'.
'AND address_type IN ('.
$this->db->Quote('billing') . ',' .
$this->db->Quote('both') . ',' .
$this->db->Quote('') . ') '.
' ORDER BY address_default DESC, address_id DESC';
$this->db->setQuery($query, 0, 1);
$order->order_billing_address_id =
(int)$this->db->loadResult();
}
if(empty($order->order_shipping_address_id)) {
$query = 'SELECT address_id FROM
'.hikamarket::table('shop.address').
' WHERE address_user_id =
'.(int)$order->order_user_id.' AND address_published = 1
'.
'AND address_type IN ('.
$this->db->Quote('shipping') . ',' .
$this->db->Quote('both') . ',' .
$this->db->Quote('') . ') '.
' ORDER BY address_default DESC, address_id DESC';
$this->db->setQuery($query, 0, 1);
$order->order_shipping_address_id =
(int)$this->db->loadResult();
}
if($vendor_id > 1) {
$feeClass = hikamarket::get('class.fee');
$vendorFees = $feeClass->getVendor($vendor_id, true);
if(!empty($vendorFees)) {
$fee = reset($vendorFees);
$order->order_vendor_params = new stdClass();
$order->order_vendor_params->fees = new stdClass();
$order->order_vendor_params->fees->rules = array($fee);
$order->order_vendor_params =
serialize($order->order_vendor_params);
}
}
$orderClass = hikamarket::get('shop.class.order');
$status = $orderClass->save($order);
if(!$status)
return false;
$order->order_id = (int)$status;
return $order;
}
protected function processFormData(&$order, $data, $conf) {
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
foreach($conf as $k => $v) {
if(!isset($order->$k) && isset($v['default']))
$order->$k = $v['default'];
$f = $v['field'];
$t = isset($v['type']) ? $v['type'] : null;
if($f !== null && $t !== null && isset($data[$f])) {
switch($t) {
case 'price':
$order->$k = (float)hikamarket::toFloat(trim($data[$f]));
break;
case 'tax_namekey':
$order->$k =
$safeHtmlFilter->clean(strip_tags(trim($data[$f])),
'string');
break;
case 'shipping_method':
case 'payment_method':
$blocks = explode('_', trim($data[$f]));
$link = $v['link'];
$order->$link = array_pop($blocks);
$order->$k = implode('_', $blocks);
break;
case 'text':
default:
$order->$k =
$safeHtmlFilter->clean(strip_tags(trim($data[$f])),
'string');
break;
}
} elseif(isset($order->old->$k))
$order->$k = $order->old->$k;
}
$new = array();
$old = array();
foreach($conf as $k => $v) {
if(!isset($order->old->$k) || $order->$k !=
$order->old->$k) {
$f = $v['field'];
$new[$f] = $order->$k;
$old[$f] = @$order->old->$k;
}
}
if(empty($new))
return false;
foreach($conf as $k => $v) {
if(!isset($v['link']))
continue;
$f = $v['field'];
$l = $conf[ $v['link'] ]['field'];
if(isset($new[$f]) || isset($new[$l])) {
$new[$f] = $order->$k;
$old[$f] = @$order->old->$k;
$new[$l] = $order->$v['link'];
$old[$l] = @$order->old->$v['link'];
}
}
return array('old' => $old, 'new' => $new);
}
protected function processShippingsFormData(&$order, $data) {
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$order->order_shipping_id = array();
$order->order_shipping_method = '';
$order->order_shipping_price = 0.0;
$order->order_shipping_tax = 0.0;
$order->order_shipping_tax_namekey = array();
$order->order_shipping_params = new stdClass();
if(!empty($order->old->order_shipping_params))
$order->order_shipping_params =
clone($order->old->order_shipping_params);
if(empty($order->order_shipping_params))
$order->order_shipping_params = new stdClass();
$order->order_shipping_params->prices = array();
foreach($data as $key => $shipping_data) {
$blocks = explode('_',
trim($shipping_data['namekey']));
$shipping_id = array_pop($blocks);
$order->order_shipping_id[] = $shipping_id . '@' . $key;
$shipping_price =
(float)hikamarket::toFloat(trim($shipping_data['value']));
$shipping_tax =
(float)hikamarket::toFloat(trim($shipping_data['tax']));
$shipping_tax_namekey =
$safeHtmlFilter->clean(strip_tags(trim($shipping_data['tax_namekey'])),
'string');
$order->order_shipping_price += $shipping_price;
$order->order_shipping_tax += $shipping_tax;
if(!isset($order->order_shipping_tax_namekey[ $shipping_tax_namekey
]))
$order->order_shipping_tax_namekey[ $shipping_tax_namekey ] = 0.0;
$order->order_shipping_tax_namekey[ $shipping_tax_namekey ] +=
$shipping_tax;
$prices = new stdClass();
$prices->price_with_tax = $shipping_price;
$prices->tax = $shipping_tax;
$prices->taxes = array( $shipping_tax_namekey => $shipping_tax );
$order->order_shipping_params->prices[ $shipping_id .
'@' . $key ] = $prices;
}
if(count($order->order_shipping_tax_namekey) == 1) {
$keys = array_keys($order->order_shipping_tax_namekey);
$order->order_shipping_tax_namekey = reset($keys);
unset($keys);
}
$order->order_shipping_id = implode(';',
$order->order_shipping_id);
$old_hash = '';
if(!empty($order->old->order_shipping_params->prices))
$old_hash =
serialize($order->old->order_shipping_params->prices);
$new_hash = serialize($order->order_shipping_params->prices);
if($old_hash == $new_hash)
return false;
$new = array();
$old = array();
return array('old' => $old, 'new' => $new);
}
protected function processAddressFormData(&$order, $type, $data,
$block) {
$address_id = (int)$data['address_id'];
$addressClass = hikamarket::get('shop.class.address');
$order_user_id = !empty($order->order_user_id) ?
(int)$order->order_user_id : (int)$order->old->order_user_id;
$address_id_field = 'order_'.$type.'_address_id';
$other_type = (($type == 'billing') ? 'shipping' :
'billing');
$other_address_id_field =
'order_'.$other_type.'_address_id';
if(!empty($data['addrselect'])) {
if($address_id == (int)$order->old->$address_id_field &&
(empty($data['addrselect']) || $address_id ==
(int)$order->old->$other_address_id_field))
return false;
$address = $addressClass->get($address_id);
if(empty($address) || empty($address->address_published) ||
(int)$address->address_user_id != $order_user_id)
return false;
if(!empty($address->address_type) &&
$address->address_type != $type)
return false;
} else {
if($address_id != (int)$order->old->$address_id_field)
return false;
$address = $addressClass->get($address_id);
$fieldsClass = hikamarket::get('shop.class.field');
$new_address =
$fieldsClass->getFilteredInput(array($type.'address',
'address'), $address, true, 'order', false,
'display:vendor_order_edit=1');
if(empty($new_address))
return false;
$new_address->address_id = $address_id;
$new_address->address_type = $address->address_type;
unset($new_address->address_default);
unset($new_address->addrlink);
$status = $addressClass->save($new_address, $order->order_id,
$type);
if(!$status)
return false;
$address_id = $status;
}
$order->$address_id_field = $address_id;
$order->history->history_reason[] = ucfirst($type) . ' Address
modified';
$order->history->history_data[$type.'_address'] = array(
'old' => (int)$order->old->$address_id_field,
'new' => $address_id
);
$this->addEvent('orderMgr.'.$type.'address',
array(
'src' => $block,
'old' => (int)$order->old->$address_id_field,
'id' => (int)$address_id
), true);
if(empty($data['addrlink']) ||
!empty($address->address_type) ||
!empty($order->$other_address_id_field))
return true;
if(empty($data['addrselect']) &&
$order->old->$address_id_field !=
$order->old->$other_address_id_field)
return true;
$order->$other_address_id_field = $address_id;
$order->history->history_data[$other_type.'_address'] =
array(
'old' => (int)$order->old->$other_address_id_field,
'new' => $address_id
);
$this->addEvent('orderMgr.'.$other_type.'address',
array(
'src' => $block,
'old' => (int)$order->old->$other_address_id_field,
'id' => (int)$address_id
), true);
return true;
}
public function addEvent($name, $params = null, $force = false) {
if(isset(self::$events[$name]) && !$force)
return false;
self::$events[$name] = $params;
return true;
}
public function getEvents() {
return self::$events;
}
public function frontSaveFormLegacy($task = '', $acl = true) {
$shopOrderBackendHelper =
hikamarket::get('helper.shop-order_backend');
if($shopOrderBackendHelper)
return $shopOrderBackendHelper->frontSaveFormLegacy($this, $task,
$acl);
return false;
}
public function save(&$order) {
return false;
}
private function saveRaw(&$order) {
return parent::save($order);
}
public function delete(&$elements) {
return false;
}
public function beforeCreate(&$order, &$do) {
$order_type = (!empty($order->order_type)) ? $order->order_type :
'sale';
if($order_type == 'sale')
return $this->beforeCreateSale($order, $do);
if($order_type == 'subsale')
return $this->beforeCreateSubsale($order, $do);
}
private function beforeCreateSale(&$order, &$do) {
}
private function beforeCreateSubsale(&$order, &$do) {
}
public function beforeUpdate(&$order, &$do) {
$order_type = (!empty($order->order_type)) ? $order->order_type :
@$order->old->order_type;
if(empty($order_type)) $order_type = 'sale';
$app = JFactory::getApplication();
$ctrl = hikaInput::get()->getCmd('ctrl', '');
$task = hikaInput::get()->getCmd('task', '');
if($app->isAdmin() && $ctrl == 'order' &&
$task == 'save') {
$shopOrderBackendHelper =
hikamarket::get('helper.shop-order_backend');
if($shopOrderBackendHelper)
$shopOrderBackendHelper->processAdminForm($order, $do,
'order');
if($order_type == 'subsale' &&
!empty($order->hikamarket->products) &&
!empty($order->hikamarket->products[0])) {
$do = false;
return;
}
}
if(empty($order->hikamarket))
$order->hikamarket = new stdClass();
if($order_type == 'sale')
return $this->beforeUpdateSale($order, $do);
if($order_type == 'subsale')
return $this->beforeUpdateSubsale($order, $do);
}
private function beforeUpdateSale(&$order, &$do) {
if(empty($order->hikamarket->children)) {
$query = 'SELECT o.* FROM ' .
hikamarket::table('shop.order') . ' AS o '.
' WHERE o.order_type = '.
$this->db->Quote('subsale') .' AND o.order_parent_id =
' . (int)$order->order_id;
$this->db->setQuery($query);
$order->hikamarket->children =
$this->db->loadObjectList('order_id');
foreach($order->hikamarket->children as &$suborder) {
if(!empty($suborder->order_tax_info))
$suborder->order_tax_info =
hikamarket::unserialize($suborder->order_tax_info);
}
unset($suborder);
}
if(empty($order->hikamarket->transactions)) {
$this->loadOrderTransactions($order);
}
}
private function beforeUpdateSubsale(&$order, &$do) {
$vendor_id = isset($order->order_vendor_id) ?
(int)$order->order_vendor_id :
(int)@$order->old->order_vendor_id;
if(empty($order->hikamarket->parent)) {
$parent_id = !empty($order->order_parent_id) ?
(int)$order->order_parent_id :
(int)@$order->old->order_parent_id;
$query = 'SELECT * FROM ' .
hikamarket::table('shop.order') . ' AS a WHERE order_id =
' . $parent_id;
$this->db->setQuery($query);
$order->hikamarket->parent = $this->db->loadObject();
}
if(empty($order->hikamarket->transactions))
$this->loadOrderTransactions($order);
if($vendor_id > 0 && !empty($order->order_status)
&& empty($order->order_invoice_id) &&
empty($order->old->order_invoice_id)) {
$shopConfig = hikamarket::config(false);
$invoice_statuses = explode(',',
$shopConfig->get('invoice_order_statuses','confirmed,shipped'));
if(empty($invoice_statuses))
$invoice_statuses = array('confirmed','shipped');
$excludeFreeOrders =
$shopConfig->get('invoice_exclude_free_orders', 0);
$total = 1;
if($excludeFreeOrders)
$total = hikamarket::toFloat( isset($order->order_full_price) ?
$order->order_full_price : $order->old->order_full_price );
if(in_array($order->order_status, $invoice_statuses) &&
(!$excludeFreeOrders || $total > 0)) {
$this->generateOrderInvoiceNumber($order, $vendor_id);
}
}
}
public function afterCreate(&$order, &$send_email) {
if(empty($order) || empty($order->order_type))
return;
if($order->order_type == 'subsale')
$send_email = false;
if(isset($order->hikamarket->do_not_process))
return;
if($order->order_type == 'sale') {
if(!empty($order->cart->products) &&
empty($order->order_vendor_id))
$this->afterCreateSale($order, $send_email);
if(!empty($order->order_vendor_id))
$this->afterCreateVendorSale($order, $send_email);
}
if($order->order_type == 'subsale') {
$this->afterCreateSubsale($order, $send_email);
}
if(!empty($order->hikamarket) &&
isset($order->hikamarket->send_email) &&
$order->hikamarket->send_email === true) {
$config = hikamarket::config();
$statuses =
$config->get('vendor_email_order_status_notif_statuses',
'');
if(!empty($statuses))
$statuses = explode(',', $statuses);
if(!isset($order->hikamarket->vendor)) {
$vendorClass = hikamarket::get('class.vendor');
$vendor_id = (int)@$order->old->order_vendor_id;
if(isset($order->order_vendor_id))
$vendor_id = (int)$order->order_vendor_id;
$order->hikamarket->vendor = $vendorClass->get( $vendor_id );
}
if(!empty($order->hikamarket->vendor)) {
if(!empty($order->hikamarket->vendor->vendor_params->notif_order_statuses))
$statuses = explode(',',
$order->hikamarket->vendor->vendor_params->notif_order_statuses);
if(empty($statuses) || in_array($order->order_status, $statuses)) {
$mailClass = hikamarket::get('class.mail');
$mailClass->sendVendorOrderEmail($order);
}
}
}
}
private function afterCreateSale(&$order, &$send_email) {
if(empty($order->cart->products))
return;
$products = $this->getProductStruct($order);
$vendors = $this->getVendorsByProducts($products, $order);
$vendor_ids = array_keys($vendors);
$vendor_ids = array_combine($vendor_ids, $vendor_ids);
if(empty($vendors) || count($vendors) == 1)
return;
$feeClass = hikamarket::get('class.fee');
$allFees = $feeClass->getProducts($products, $vendor_ids);
if(!empty($order->order_discount_code) &&
empty($order->cart->coupon)) {
}
if(!empty($order->order_discount_code) &&
!empty($order->cart->coupon) &&
(int)$order->cart->coupon->discount_target_vendor >= 1) {
$order->cart->coupon->products_full_price = 0.0;
if(!empty($order->cart->coupon->products)) {
foreach($order->cart->coupon->products as $p) {
$order->cart->coupon->products_full_price +=
(int)$p->cart_product_quantity *
(float)$p->prices[0]->price_value;
}
} else {
foreach($order->cart->products as $p) {
$order->cart->coupon->products_full_price +=
(int)$p->order_product_quantity * (float)$p->order_product_price;
}
}
}
self::$creatingSubSales = true;
foreach($vendors as $vendor_id => $vendor) {
if(empty($vendor))
continue;
$subsale = $this->createSubOrder($order, $vendor_id, $products);
if(isset($statuses[$subsale->order_status]))
$statuses[$subsale->order_status]++;
else
$statuses[$subsale->order_status] = 1;
}
self::$creatingSubSales = false;
if(count($statuses) == 1 &&
empty($statuses[$order->order_status])) {
$update_order = new stdClass();
$update_order->order_id = $order->order_id;
$update_order->order_status = reset(array_keys($statuses));
$update_order->old = $order;
$update_order->hikamarket = new stdClass();
$update_order->hikamarket->internal_process = true;
$orderClass = hikamarket::get('shop.class.order');
$orderClass->save($update_order);
}
}
private function getProductStruct(&$order, $force_vendor_id = null) {
$products = array();
$bundles = false;
foreach($order->cart->products as $k => $product) {
$pid = (int)$product->cart_product_id;
if(empty($pid))
continue;
$products[$pid] = array(
'_id' => $pid,
'id' => (int)$product->product_id,
'parent' => (int)$product->product_parent_id,
'vendor' => $force_vendor_id,
'fee' => array(),
'qty' => (int)$product->order_product_quantity,
'price' =>
(float)hikamarket::toFloat($product->order_product_price),
'price_tax' =>
(float)hikamarket::toFloat($product->order_product_tax),
);
if(empty($product->order_product_options))
continue;
$options = hikamarket::unserialize($product->order_product_options);
if(empty($options['type']) || $options['type'] !=
'bundle')
continue;
$products[$pid]['bundle'] = array(
'link' =>
(int)$product->cart_product_option_parent_id,
'qty' => (int)$options['related_quantity']
);
$bundles = true;
}
if($bundles) {
foreach($products as $k => $product) {
if(empty($product['bundle']))
continue;
$pid = (int)$product['bundle']['link'];
if(empty($products[$pid]))
continue;
if(empty($products[$pid]['bundle_price']))
$products[$pid]['bundle_price'] = 0.0;
$products[$pid]['bundle_price'] +=
(float)$product['price'] *
(int)$product['bundle']['qty'];
}
}
return $products;
}
private function afterCreateVendorSale(&$order, &$send_email) {
if(empty($order->order_vendor_id))
return;
$vendor_id = (int)$order->order_vendor_id;
$order->order_vendor_price = 0.0;
if(!empty($order->cart->products)) {
$products = $this->getProductStruct($order, $vendor_id);
$feeClass = hikamarket::get('class.fee');
$allFees = $feeClass->getProducts($products, $vendor_id);
$order->order_vendor_price =
$this->calculateVendorPrice($vendor_id, $order, $products,
$order->cart->coupon);
}
$this->createTransaction($order, $vendor_id);
}
private function afterCreateSubsale(&$order, &$send_email) {
if((int)$order->order_vendor_id > 1 &&
(int)$order->order_user_id > 0) {
$query = 'INSERT IGNORE INTO
`'.hikamarket::table('customer_vendor').'`
(customer_id, vendor_id) VALUES
('.(int)$order->order_user_id.','.(int)$order->order_vendor_id.')';
$this->db->setQuery($query);
$this->db->execute();
}
if(!empty($order->cart->products)) {
foreach($order->cart->products as $product) {
if(!isset($product->order_product_parent_id) ||
!isset($product->order_product_vendor_price))
continue;
$query = 'UPDATE ' .
hikamarket::table('shop.order_product') .
' SET order_product_parent_id = ' .
(int)$product->order_product_parent_id.',
order_product_vendor_price = ' .
(float)$product->order_product_vendor_price;
if(!empty($product->order_product_id))
$query .= ' WHERE order_product_id = ' .
$product->order_product_id;
else
$query .= ' WHERE order_id = ' . (int)$product->order_id
. ' AND product_id = ' . (int)$product->product_id . '
AND order_product_price = ' .
(float)hikamarket::toFloat($product->order_product_price);
$this->db->setQuery($query);
$this->db->execute();
}
}
}
public function beforeProductsUpdate(&$order, &$do) {
$order_type = (!empty($order->order_type)) ? $order->order_type :
@$order->old->order_type;
$app = JFactory::getApplication();
$ctrl = hikaInput::get()->getCmd('ctrl', '');
$task = hikaInput::get()->getCmd('task', '');
if($app->isAdmin() && $ctrl == 'order' &&
$task == 'save') {
$shopOrderBackendHelper =
hikamarket::get('helper.shop-order_backend');
if($shopOrderBackendHelper)
$shopOrderBackendHelper->processAdminForm($order, $do,
'products');
}
if($order_type == 'vendorrefund')
$do = false;
if(($order_type == 'subsale') &&
!empty($order->product) &&
(empty($order->hikamarket->internal_process) ||
!$order->hikamarket->internal_process))
$do = false;
if($order_type == 'sale' && !empty($order->product)
&& !empty($order->hikamarket->reprocess)) {
$query = 'SELECT op.*, o.order_vendor_params FROM ' .
hikamarket::table('shop.order_product') . ' AS op '.
' INNER JOIN ' . hikamarket::table('shop.order') .
' AS o ON op.order_id = o.order_id '.
' WHERE o.order_type = ' .
$this->db->Quote('subsale') . ' AND o.order_parent_id
= ' . $order->order_id;
$this->db->setQuery($query);
$suborder_products = $this->db->loadObjectList();
if(is_array($order->product))
$order_products = $order->product;
else
$order_products = array($order->product);
$updates = array();
foreach($order_products as $order_product) {
foreach($suborder_products as $suborder_product) {
if((int)$suborder_product->order_product_parent_id !=
(int)$order_product->order_product_id)
continue;
if($suborder_product->order_product_price ==
$order_product->order_product_price)
break;
$suborder_product->order_product_price =
$order_product->order_product_price;
$op = array(
'order_product_price' =>
$suborder_product->order_product_price,
'order_product_vendor_price' =>
$this->recalculateProductPrice($suborder_product, $order_vendor_params)
);
if($op['order_product_vendor_price'] === false)
unset($op['order_product_vendor_price']);
$updates[$suborder_product->order_product_id] = $op;
break;
}
}
unset($order_product);
if(!empty($updates)) {
foreach($updates as $i => $update) {
$query = 'UPDATE ' .
hikamarket::table('shop.order_product') . ' SET ';
foreach($update as $k => $v) {
$query .= $k . ' = ' . $this->db->Quote($v) . '
';
}
$query .= ' WHERE order_product_id = ' . $i;
$this->db->setQuery($query);
$this->db->execute();
}
unset($updates);
$query = 'SELECT * FROM ' .
hikamarket::table('shop.order') . ' AS o WHERE o.order_type
= ' . $this->db->Quote('subsale') . ' AND
o.order_parent_id = ' . $order->order_id;
$this->db->setQuery($query);
$suborders = $this->db->loadObjectList();
foreach($suborders as $suborder) {
$ret = $this->recalculateVendorPrice($suborder, true);
$query = 'UPDATE ' .
hikamarket::table('shop.order') . ' SET order_vendor_price =
' . $this->db->Quote($ret) . ' WHERE order_id = ' .
(int)$suborder->order_id . ' AND o.order_type = ' .
$this->db->Quote('subsale') . ' AND o.order_parent_id
= ' . $order->order_id;
$this->db->setQuery($query);
$this->db->execute();
}
}
}
}
public function afterUpdate(&$order, &$send_email) {
$order_type = (!empty($order->order_type)) ? $order->order_type :
@$order->old->order_type;
if($order_type == 'sale')
$this->afterUpdateSale($order, $send_email);
if($order_type == 'subsale')
$this->afterUpdateSubsale($order);
}
private function afterUpdateSale(&$order, &$send_email) {
$config = hikamarket::config();
$confirmedOrderStatuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
$updateOrders = array();
if(!empty($order->hikamarket->products)) {
$this->processOrderEditionData($order);
} elseif(!empty($order->product) &&
(int)$order->product[0]->order_product_quantity === 0) {
$query = 'DELETE FROM ' .
hikamarket::table('shop.order_product') .
' WHERE order_product_parent_id = ' .
(int)$order->product[0]->order_product_id;
$this->db->setQuery($query);
$this->db->execute();
} elseif(!empty($order->product)) {
$product = hikamarket::cloning($order->product[0]);
$pcid = $product->order_product_id;
unset($product->order_product_id);
unset($product->order_product_parent_id);
unset($product->order_product_vendor_price);
list($fields, $values) = $this->getQuotedObject($product);
unset($product);
$query = 'UPDATE ' .
hikamarket::table('shop.order_product') . ' SET ';
$sep = '';
foreach($fields as $k => $v) {
$query .= $sep.' '. $v . '=' . $values[$k];
$sep = ',';
}
$query .= ' WHERE order_product_parent_id = '.(int)$pcid;
$this->db->setQuery($query);
$this->db->execute();
unset($values);
unset($fields);
}
if(!empty($order->order_status) && $order->order_status !=
$order->old->order_status &&
empty($order->hikamarket->internal_process)) {
foreach($order->hikamarket->children as $suborder) {
if($order->order_status == $suborder->order_status)
continue;
$r = $this->generateUpdateSuborder($suborder->order_id, $order);
$r->order_status = $order->order_status;
if(!isset($r->history)) {
$r->history = new stdClass();
$r->history->history_notified = $send_email;
}
$updateOrders[(int)$r->order_id] = $r;
}
}
$this->processOrderFieldsMerge($order, $updateOrders);
$reprocess_suborders = $this->needReprocessSuborders($order);
if($reprocess_suborders) {
$shopOrderClass = hikamarket::get('shop.class.order');
$confirmingOrder = isset($order->order_status) &&
(in_array($order->order_status, $confirmedOrderStatuses) &&
!in_array($order->old->order_status, $confirmedOrderStatuses));
$refundingOrder = isset($order->order_status) &&
(!in_array($order->order_status, $confirmedOrderStatuses) &&
in_array($order->old->order_status, $confirmedOrderStatuses));
if(!isset($order->order_vendor_id))
$order->order_vendor_id = (int)$order->old->order_vendor_id;
if(empty($order->order_vendor_id) ||
!empty($order->hikamarket->children)) {
$this->loadOrderProducts($order->hikamarket->children, true);
foreach($order->hikamarket->children as $subOrder) {
$shopOrderClass->recalculateFullPrice($subOrder,
$subOrder->order_products);
if($subOrder->order_full_price !=
$subOrder->old->order_full_price) {
if(!isset($updateOrders[(int)$subOrder->order_id]))
$updateOrders[(int)$subOrder->order_id] =
$this->generateUpdateSuborder($subOrder->order_id, $order);
$updateOrders[(int)$subOrder->order_id]->order_full_price =
$subOrder->order_full_price;
$updateOrders[(int)$subOrder->order_id]->order_tax_info =
$subOrder->order_tax_info;
}
$subOrder->order_vendor_price =
(float)hikamarket::toFloat($subOrder->order_vendor_price);
$vendor_new_total = $this->recalculateVendorPrice($subOrder,
true);
if($vendor_new_total != $subOrder->order_vendor_price ||
$confirmingOrder || $refundingOrder) {
if(!isset($updateOrders[(int)$subOrder->order_id]))
$updateOrders[(int)$subOrder->order_id] =
$this->generateUpdateSuborder($subOrder->order_id, $order);
$updateOrders[(int)$subOrder->order_id]->order_vendor_price =
$vendor_new_total;
$this->updateTransaction($order, $subOrder, $vendor_new_total);
}
}
} else {
$this->loadOrderProducts($order, true);
$shopOrderClass->recalculateFullPrice($order,
$order->order_products);
$order->order_vendor_price = (float)hikamarket::toFloat(
isset($order->order_vendor_price) ? $order->order_vendor_price :
$order->old->order_vendor_price );
$vendor_new_total = $this->recalculateVendorPrice($order, true);
if($vendor_new_total != $order->order_vendor_price ||
$confirmingOrder || $refundingOrder) {
$this->updateTransaction($order, $order, $vendor_new_total);
}
}
}
if(!empty($order->order_status) && $order->order_status !=
$order->old->order_status) {
$query = 'UPDATE
'.hikamarket::table('order_transaction').' SET
order_transaction_status =
'.$this->db->Quote($order->order_status).
' WHERE order_id = '.(int)$order->order_id.' AND
order_transaction_paid = 0';
$this->db->setQuery($query);
$this->db->execute();
$isValid = in_array($order->order_status, $confirmedOrderStatuses);
$query = 'UPDATE
'.hikamarket::table('order_transaction').' SET
order_transaction_valid = '.($isValid ? '1' :
'0').
' WHERE order_id = '.(int)$order->order_id.' AND
order_transaction_valid = '.($isValid ? '0' :
'1');
$this->db->setQuery($query);
$this->db->execute();
}
if(!empty($updateOrders)) {
$shopOrderClass = hikamarket::get('shop.class.order');
foreach($updateOrders as &$suborder) {
$shopOrderClass->save($suborder);
}
unset($suborder);
}
}
private function afterUpdateSubsale(&$order) {
$config = hikamarket::config();
if((!isset($order->hikamarket->internal_process) ||
!$order->hikamarket->internal_process) &&
!self::$creatingSubSales) {
$this->checkUpdateSubsaleOrderStatus($order);
}
if(!empty($order->order_status) && (empty($order->old) ||
$order->order_status != $order->old->order_status) &&
(!isset($order->hikamarket->send_email) ||
!$order->hikamarket->send_email)) {
$this->loadOrderVendor($order);
if(!empty($order->hikamarket->vendor)) {
$statuses =
$config->get('vendor_email_order_status_notif_statuses',
'');
if(!empty($statuses))
$statuses = explode(',', $statuses);
if(!empty($order->hikamarket->vendor->vendor_params->notif_order_statuses))
$statuses = explode(',',
$order->hikamarket->vendor->vendor_params->notif_order_statuses);
if(empty($statuses) || in_array($order->order_status, $statuses)) {
if(!isset($mailClass))
$mailClass = hikamarket::get('class.mail');
$mailClass->sendVendorOrderEmail($order);
}
}
}
}
public function beforeDelete(&$elements, &$do) {
$string = array();
foreach($elements as $key => $val) {
$string[$val] = $this->db->Quote($val);
}
$query = 'SELECT order_id, order_type, order_status FROM ' .
hikamarket::table('shop.order') . ' WHERE order_id IN
(' . implode(',', $string) . ')';
$this->db->setQuery($query);
$orders = $this->db->loadObjectList();
$removedList = array();
foreach($orders as $order) {
if($order->order_type == 'subsale') {
foreach($elements as $k => $e) {
if($e == $order->order_id)
unset($elements[$k]);
}
$removedList[] = $order->order_id;
}
}
if(!empty($removedList)) {
$app = JFactory::getApplication();
if(count($removedList) == 1) {
$app->enqueueMessage(JText::sprintf('CANNOT_DELETE_SUBORDER',
$removedList[0]));
} else {
$app->enqueueMessage(JText::sprintf('CANNOT_DELETE_SUBORDERS',
implode(', ',$removedList)));
}
}
if(empty($elements))
$do = false;
}
public function afterDelete(&$elements) {
$string = array();
foreach($elements as $key => $val) {
$string[$val] = $val;
}
$query = 'SELECT order_id, order_billing_address_id,
order_shipping_address_id FROM
'.hikamarket::table('shop.order').' WHERE order_type =
'.$this->db->Quote('subsale').' AND
order_parent_id IN ('.implode(',',$string).')';
$this->db->setQuery($query);
$orders = $this->db->loadObjectList();
if(!empty($orders)) {
$addr = array();
$string = array();
foreach($orders as $o) {
$addr[$o->order_billing_address_id] =
$o->order_billing_address_id;
$addr[$o->order_shipping_address_id] =
$o->order_shipping_address_id;
$string[] = $this->db->Quote($o->order_id);
}
$query = 'DELETE FROM ' .
hikamarket::table('shop.order') . ' WHERE order_id IN
(' . implode(',', $string) . ')';
$this->db->setQuery($query);
$this->db->execute();
$query = 'DELETE FROM ' .
hikamarket::table('shop.order_product') . ' WHERE order_id
IN (' . implode(',', $string) . ')';
$this->db->setQuery($query);
$this->db->execute();
$addressClass = hikamarket::get('shop.class.address');
foreach($addr as $address) {
$addressClass->delete($address, true);
}
$query = 'DELETE FROM ' .
hikamarket::table('order_transaction') . ' WHERE order_id IN
(' . implode(',', $string) . ')';
$this->db->setQuery($query);
$this->db->execute();
}
}
public function isValidOrderStatus($order_status) {
if(empty($order_status))
return false;
static $order_statuses = null;
if($order_statuses !== null)
return isset($order_statuses[$order_status]);
$filters = array();
$orderstatusClass = hikamarket::get('shop.class.orderstatus');
$rows = $orderstatusClass->getList($filters);
foreach($rows as $row) {
$order_statuses[$row->orderstatus_namekey] =
$row->orderstatus_namekey;
}
unset($rows);
return isset($order_statuses[$order_status]);
}
private function generateOrderInvoiceNumber(&$order, $vendor_id,
$force = false) {
$shopConfig = hikamarket::config(false);
$format =
$shopConfig->get('invoice_number_format','{automatic_code}');
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($vendor_id);
if(!empty($vendor->vendor_params->invoice_number_format))
$format = $vendor->vendor_params->invoice_number_format;
if(!$force && (!empty($order->order_invoice_created) ||
!empty($order->old->order_invoice_created)))
return false;
if($format == '{parent_code}') {
$order_parent_id = !empty($order->order_parent_id) ?
$order->order_parent_id : $order->old->order_parent_id;
$query = 'SELECT o.order_invoice_id, o.order_invoice_number FROM
'.hikamarket::table('shop.order').' AS o WHERE
o.order_type = '.$this->db->Quote('sale').' AND
o.order_id = '.(int)$order_parent_id;
$this->db->setQuery($query);
$order_number_data = $this->db->loadObject();
if(!empty($order_number_data) &&
!empty($order_number_data->order_invoice_id)) {
$order->order_invoice_id =
(int)$order_number_data->order_invoice_id;
$order->order_invoice_number =
$order_number_data->order_invoice_number;
$order->order_invoice_created = time();
}
return true;
}
$filters = array(
'order_type' => 'o.order_type =
'.$this->db->Quote('subsale'),
'vendor_id' => 'o.order_vendor_id = '.
(int)$vendor_id,
);
$resetFrequency =
$shopConfig->get('invoice_reset_frequency', '');
if(!empty($resetFrequency)) {
$y = (int)date('Y');
$m = 1;
$d = 1;
if($resetFrequency == 'month')
$m = (int)date('m');
if(strpos($resetFrequency, '/') !== false) {
list($d,$m) = explode('/', $resetFrequency, 2);
$d = ($d == '*') ? (int)date('d') : (int)$d;
$m = ($m == '*') ? (int)date('m') : (int)$m;
if($d <= 0) $d = 1;
if($m <= 0) $m = 1;
}
$filters['date'] = 'o.order_invoice_created >=
'.mktime(0, 0, 0, $m, $d, $y);
}
$query = 'SELECT MAX(o.order_invoice_id) + 1 FROM
'.hikamarket::table('shop.order').' AS o WHERE
('.implode(') AND (', $filters) . ')';
$this->db->setQuery($query);
$order->order_invoice_id = (int)$this->db->loadResult();
$start_order_invoice_id =
(int)$shopConfig->get('start_order_invoice_id', 1);
if($start_order_invoice_id <= 0)
$start_order_invoice_id = 1;
if(empty($order->order_invoice_id) || $order->order_invoice_id
<= 1)
$order->order_invoice_id = $start_order_invoice_id;
$order->order_invoice_number = hikamarket::encodeNumber($order,
'invoice', $format);
$order->order_invoice_created = time();
return true;
}
private function getVendorIdFromOrderProducts($order_product_id,
&$order) {
if(empty($order_product_id) || (int)$order_product_id <= 0)
return 0;
if(empty($order->hikamarket))
$order->hikamarket = new stdClass();
if(empty($order->hikamarket->order_product_vendors)) {
if(empty($order->order_products))
$this->loadOrderProducts($order);
$order_product_ids = array_keys($order->order_products);
hikamarket::toInteger($order_product_ids);
$query = 'SELECT op.order_product_id, op.order_id,
o.order_vendor_id, o.order_type, op.order_product_parent_id,
op.order_product_vendor_price ' .
' FROM ' . hikamarket::table('shop.order_product')
. ' AS op ' .
' INNER JOIN ' . hikamarket::table('shop.order') .
' AS o ON op.order_id = o.order_id ' .
' WHERE op.order_product_parent_id IN (' .
implode(',', $order_product_ids) . ')';
$this->db->setQuery($query);
$order->hikamarket->order_product_vendors =
$this->db->loadObjectList('order_product_id');
}
foreach($order->hikamarket->order_product_vendors as
$order_product) {
if((int)$order_product->order_product_parent_id ==
(int)$order_product_id)
return (int)$order_product->order_vendor_id;
}
return 0;
}
private function createSubOrder(&$mainOrder, $vendor_id,
&$products, $options = array()) {
$shopOrderClass = hikamarket::get('shop.class.order');
$config = hikamarket::config();
if(!isset($options['send_email']))
$options['send_email'] = true;
$vendorOrder = unserialize(serialize($mainOrder));
$vendorOrder->order_type = 'subsale';
$vendorOrder->order_parent_id = $vendorOrder->order_id;
$vendorOrder->order_vendor_id = $vendor_id;
$vendorOrder->order_payment_method = 'market-' .
$vendorOrder->order_payment_method;
$vendorOrder->order_partner_id = 0;
$vendorOrder->order_partner_price = 0.0;
$vendorOrder->order_payment_price = 0.0;
$vendorOrder->order_payment_tax = 0.0;
$vendorOrder->order_shipping_price = 0.0;
$vendorOrder->order_shipping_tax = 0.0;
$vendorOrder->order_discount_price = 0.0;
$vendorOrder->order_discount_tax = 0.0;
$vendorOrder->order_discount_code = '';
$vendorOrder->order_token = '';
unset($vendorOrder->order_id);
unset($vendorOrder->order_invoice_id);
unset($vendorOrder->order_invoice_number);
unset($vendorOrder->cart->products);
if(!$config->get('use_same_order_number', 0))
unset($vendorOrder->order_number);
$total_products = 0.0;
$total_products_vendor = 0.0;
$vendorOrder->cart->products = array();
foreach($mainOrder->cart->products as $product) {
$pid = (int)$product->product_id;
$pcid = (isset($product->cart_product_id)) ?
(int)$product->cart_product_id : (int)$product->order_product_id;
$total_products += $product->order_product_price;
if(!isset($products[$pcid]))
continue;
if(!isset($products[$pcid]['bundle_price']) &&
$products[$pcid]['vendor'] != $vendor_id)
continue;
$bundle_products = 0;
$bundle_vendor_price = 0.0;
if(isset($products[$pcid]['bundle_price'])) {
foreach($products as $k => $v) {
if(empty($v['bundle']) || $v['vendor'] !=
$vendor_id || $v['bundle']['link'] != $pcid)
continue;
$bundle_products++;
$bundle_vendor_price += $v['price'] *
$v['bundle']['qty'];
}
if(empty($bundle_products))
continue;
}
$newProduct = hikamarket::cloning($product);
$newProduct->order_product_parent_id =
(int)$newProduct->order_product_id;
if(isset($newProduct->cart_product_id))
$newProduct->cart_product_parent_id =
(int)$newProduct->cart_product_id;
unset($newProduct->order_product_id);
unset($newProduct->order_id);
if($bundle_products > 0) {
if(empty($products[$pcid]['bundle_price'])) {
$newProduct->order_product_price = 0.0;
} else {
$newProduct->order_product_price *= $bundle_vendor_price /
$products[$pcid]['bundle_price'];
}
}
$discount_apply_vendor =
!isset($newProduct->discount->discount_target_vendor) ? 0 :
(int)$newProduct->discount->discount_target_vendor;
if(!empty($newProduct->discount) &&
$newProduct->discount->discount_type == 'discount'
&& $discount_apply_vendor <= 0) {
if(isset($newProduct->discount->price_value_without_discount)) {
$newProduct->order_product_price =
$newProduct->discount->price_value_without_discount;
$newProduct->order_product_tax =
$newProduct->discount->price_value_without_discount_with_tax -
$newProduct->discount->price_value_without_discount;
$newProduct->order_product_tax_info =
$newProduct->discount->taxes_without_discount;
} else {
if(!empty($newProduct->discount->discount_percent_amount)) {
$percent =
(float)hikamarket::toFloat($newProduct->discount->discount_percent_amount);
$newProduct->order_product_price /= (1 - $percent/100);
}
if(!empty($newProduct->discount->discount_flat_amount)) {
$value =
(float)hikamarket::toFloat($newProduct->discount->discount_flat_amount);
$newProduct->order_product_price += $value;
}
}
}
$newProduct->order_product_vendor_price = null;
if(isset($products[$pcid]['vendor_price']))
$newProduct->order_product_vendor_price =
$products[$pcid]['vendor_price'];
if(!empty($newProduct->cart_product_option_parent_id)) {
$f = false;
foreach($mainOrder->cart->products as $p) {
$pcid = (isset($p->cart_product_id)) ? (int)$p->cart_product_id
: (int)$p->order_product_id;
if($p->cart_product_id ==
$newProduct->cart_product_option_parent_id &&
isset($products[$pcid])) {
$f = true;
break;
}
}
if(!$f)
unset($newProduct->cart_product_option_parent_id);
}
$newProduct->bundle_done = true;
$newProduct->no_update_qty = true;
$vendorOrder->cart->products[] = $newProduct;
$total_products_vendor += $newProduct->order_product_price;
}
if($config->get('split_order_payment_fees', 0) &&
!empty($total_products) &&
empty($mainOrder->hikamarket->no_process_vendor_payment)) {
$vendorOrder->order_payment_price =
$mainOrder->order_payment_price * $total_products_vendor /
$total_products;
$vendorOrder->order_payment_tax =
((int)@$mainOrder->order_payment_tax) * $total_products_vendor /
$total_products;
}
$this->processShippingParams($mainOrder, $vendor_id, $vendorOrder,
$total_products, $total_products_vendor, $products);
if(!empty($mainOrder->cart->coupon) &&
!empty($mainOrder->cart->coupon->products_full_price)) {
$vendor_coupon_total = 0.0;
if(!empty($mainOrder->cart->coupon->products)) {
foreach($mainOrder->cart->coupon->products as $product) {
if($vendor_id > 1 && (int)$product->product_vendor_id !=
$vendor_id)
continue;
if($vendor_id <= 1 && (int)$product->product_vendor_id
> 1)
continue;
foreach($products as $p) {
if($p['id'] != (int)$product->product_id)
continue;
$vendor_coupon_total += (int)$product->cart_product_quantity *
(float)$product->prices[0]->price_value;
}
}
} else {
foreach($vendorOrder->cart->products as $product) {
$vendor_coupon_total += (int)$product->order_product_quantity *
(float)$product->order_product_price;
}
}
if(empty($mainOrder->cart->coupon->vendors))
$mainOrder->cart->coupon->vendors = array();
$mainOrder->cart->coupon->vendors[$vendor_id] =
$vendor_coupon_total;
if($vendor_coupon_total > 0.0 &&
($mainOrder->cart->coupon->discount_target_vendor == 1 ||
$mainOrder->cart->coupon->discount_target_vendor == $vendor_id))
{
$vendorOrder->order_discount_code =
$mainOrder->order_discount_code;
$coupon_percentage = (float)($vendor_coupon_total /
$mainOrder->cart->coupon->products_full_price);
$vendorOrder->order_discount_price =
$mainOrder->order_discount_price * $coupon_percentage;
if($mainOrder->order_discount_tax > 0)
$vendorOrder->order_discount_tax =
$mainOrder->order_discount_tax * $coupon_percentage;
else
$vendorOrder->order_discount_tax = 0.0;
}
}
if(empty($mainOrder->cart->coupon))
$mainOrder->cart->coupon = null;
$shopOrderClass->recalculateFullPrice($vendorOrder,
$vendorOrder->cart->products);
if(isset($options['vendor_total']))
$vendorOrder->order_vendor_price =
$options['vendor_total'];
else
$vendorOrder->order_vendor_price =
$this->calculateVendorPrice($vendor_id, $vendorOrder, $products,
$mainOrder->cart->coupon);
$feeMode = ($config->get('market_mode', 'fee') ==
'fee');
$payment_params = null;
if(!empty($mainOrder->order_payment_params))
$payment_params = is_string($mainOrder->order_payment_params) ?
hikamarket::unserialize($mainOrder->order_payment_params) :
$mainOrder->order_payment_params;
if(!empty($payment_params->market_mode)) {
$feeMode = (($payment_params->market_mode === true) ||
($payment_params->market_mode === 'fee'));
} else {
$payment_id = 0;
if(!empty($mainOrder->order_payment_id))
$payment_id = (int)$mainOrder->order_payment_id;
if($payment_id > 0) {
$paymentClass = hikamarket::get('shop.class.payment');
$payment = $paymentClass->get($payment_id);
if(!empty($payment->market_mode)) {
$feeMode = true;
} else if(!empty($payment->payment_params->payment_market_mode))
{
$feeMode = ($payment->payment_params->payment_market_mode ==
'fee');
}
}
}
if(!$feeMode) {
if($config->get('shipping_per_vendor', 1))
$vendorOrder->order_vendor_price -=
$mainOrder->order_full_price;
else
$vendorOrder->order_vendor_price -= $mainOrder->order_full_price
+ (float)$vendorOrder->order_shipping_price -
(float)$vendorOrder->order_shipping_tax;
}
if(!empty($vendorOrder->order_payment_params))
$vendorOrder->order_payment_params =
is_string($vendorOrder->order_payment_params) ?
hikamarket::unserialize($vendorOrder->order_payment_params) :
$vendorOrder->order_payment_params;
else
$vendorOrder->order_payment_params = new stdClass();
$vendorOrder->order_payment_params->market_mode = $feeMode;
$vendorOrder->hikamarket = new stdClass();
$vendorOrder->hikamarket->internal_process = true;
$vendorOrder->hikamarket->send_email =
$options['send_email'];
$vendorOrder->hikamarket->parent = $mainOrder;
if(!empty($vendorOrder->order_vendor_params) &&
is_object($vendorOrder->order_vendor_params))
$vendorOrder->order_vendor_params =
serialize($vendorOrder->order_vendor_params);
$shopOrderClass->save($vendorOrder);
if(empty($vendorOrder->order_id))
return false;
$this->createTransaction($vendorOrder, $vendor_id);
return $vendorOrder;
}
private function checkUpdateSubsaleOrderStatus(&$order) {
if(empty($order->order_status) ||
empty($order->hikamarket->parent) ||
!empty($order->hikamarket->internal_process) ||
($order->order_status == $order->old->order_status) ||
($order->order_status ==
$order->hikamarket->parent->order_status))
return;
$query = 'SELECT a.order_status, count(a.order_id) as count FROM
' . hikamarket::table('shop.order') . ' AS a'.
' WHERE order_type = ' .
$this->db->Quote('subsale') . ' AND order_parent_id =
' . (int)$order->hikamarket->parent->order_id .
' GROUP BY a.order_status';
$this->db->setQuery($query);
$statuses = $this->db->loadObjectList();
if(count($statuses) != 1)
return;
$config = hikamarket::config();
$parentOrder = new stdClass();
$parentOrder->order_id =
$order->hikamarket->parent->order_id;
$parentOrder->order_status = $order->order_status;
$parentOrder->hikamarket = new stdClass();
$parentOrder->hikamarket->internal_process = true;
$parentOrder->history = new stdClass();
$parentOrder->history->history_reason =
JText::sprintf('AUTOMATIC_UPDATE_WITH_VENDORS');
$parentOrder->history->history_type = 'modification';
$parentOrder->history->history_notified =
(bool)$config->get('send_mail_subsale_update_main', 0);
$shopOrderClass = hikamarket::get('shop.class.order');
$shopOrderClass->save($parentOrder);
$vendor_new_total = $this->recalculateVendorPrice($order, true);
$order_vendor_price = isset($order->order_vendor_price) ?
$order->order_vendor_price : $order->old->order_vendor_price;
if($vendor_new_total != $order_vendor_price) {
$this->updateTransaction($parentOrder, $order, $vendor_new_total);
}
}
private function createTransaction(&$order, $vendor_id, $price = null)
{
$order_id = (int)$order->order_parent_id;
if(empty($order_id) && ((!empty($order->order_type) &&
$order->order_type == 'sale') || (!empty($order->old)
&& $order->old->order_type == 'sale')))
$order_id = (int)$order->order_id;
if($price === null)
$price = $order->order_vendor_price;
$config = hikamarket::config();
$confirmedOrderStatuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
$order_status = isset($order->order_status) ? $order->order_status
: $order->old->order_status;
$isValidTransaction = in_array($order_status, $confirmedOrderStatuses) ?
1 : 0;
if(!isset($order->hikamarket->transactions))
$this->loadOrderTransactions($order);
foreach($order->hikamarket->transactions as $transaction_id =>
$transaction) {
if(isset($transaction->vendor_id) &&
(int)$transaction->vendor_id != $subOrder->order_vendor_id)
continue;
if(isset($transaction->order_transaction_paid) &&
(int)$transaction->order_transaction_paid == 1) {
$isValidTransaction = 2;
break;
}
}
$fields = array(
'order_id' => (int)$order_id,
'vendor_id' => (int)$vendor_id,
'order_transaction_created' => time(),
'order_transaction_status' =>
$this->db->Quote($order_status),
'order_transaction_price' => hikamarket::toFloat($price),
'order_transaction_currency_id' =>
(int)(isset($order->order_currency_id) ? $order->order_currency_id :
$order->old->order_currency_id),
'order_transaction_paid' => 0,
'order_transaction_valid' => $isValidTransaction
);
$query = 'INSERT IGNORE INTO
`'.hikamarket::table('order_transaction').'`
('.implode(',', array_keys($fields)).') VALUES
('.implode(',', $fields).')';
$this->db->setQuery($query);
$status = $this->db->execute();
if(!$status)
return false;
$transaction = new stdClass();
foreach($fields as $k => $v) {
$transaction->$k = $v;
}
$transaction->order_transaction_status = $order_status;
$transaction_id = $this->db->insertid();
$transaction->order_transaction_id = $transaction_id;
if(empty($order->hikamarket->transactions))
$order->hikamarket->transactions = array();
$order->hikamarket->transactions[$transaction_id] = $transaction;
return $transaction_id;
}
public function updateTransaction(&$order, &$subOrder,
$vendor_new_total) {
$config = hikamarket::config();
$confirmedOrderStatuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
if(!isset($order->hikamarket->transactions))
$this->loadOrderTransactions($order);
$transaction_unpaid = 0;
$transactions_total = 0.0;
$isValidTransaction = 0;
foreach($order->hikamarket->transactions as $transaction_id =>
$transaction) {
if(isset($transaction->vendor_id) &&
(int)$transaction->vendor_id != $subOrder->order_vendor_id)
continue;
if(isset($transaction->order_transaction_paid) &&
(int)$transaction->order_transaction_paid == 0) {
$transaction_unpaid = $transaction_id;
continue;
}
$transactions_total +=
(float)hikamarket::toFloat($transaction->order_transaction_price);
$isValidTransaction = 2;
}
$order_status = isset($order->order_status) ? $order->order_status
: $order->old->order_status;
$currency_id = (int)(isset($order->order_currency_id) ?
$order->order_currency_id : $order->old->order_currency_id);
if(empty($currency_id))
$currency_id = (int)(isset($subOrder->order_currency_id) ?
$subOrder->order_currency_id :
$subOrder->old->order_currency_id);
if(in_array($order_status, $confirmedOrderStatuses)) {
$transactions_total = $vendor_new_total - $transactions_total;
$isValidTransaction = max($isValidTransaction, 1);
} else if(empty($isValidTransaction) &&
empty($transactions_total)) {
$transactions_total = $vendor_new_total;
} else {
$transactions_total = -$vendor_new_total - $transactions_total;
}
if(is_numeric($transaction_unpaid) && (int)$transaction_unpaid
> 0) {
$query = 'UPDATE ' .
hikamarket::table('order_transaction') .
' SET order_transaction_price = ' .
(float)$transactions_total . ', order_transaction_status = ' .
$this->db->Quote($order_status) . ', order_transaction_valid =
' . (int)$isValidTransaction . ' ' .
' WHERE order_transaction_id = ' . (int)$transaction_unpaid .
'';
$this->db->setQuery($query);
$ret = $this->db->execute();
if($ret) {
$order->hikamarket->transactions[$transaction_unpaid]->order_transaction_price
= $transactions_total;
$order->hikamarket->transactions[$transaction_unpaid]->order_transaction_status
= $order_status;
}
} else {
$ret = $this->createTransaction($order,
(int)$subOrder->order_vendor_id, $transactions_total);
}
}
private function generateUpdateSuborder($id, &$order) {
$ret = new stdClass();
$ret->order_id = (int)$id;
$ret->hikamarket = new stdClass();
$ret->hikamarket->internal_process = true;
$ret->hikamarket->parent = $order;
if(isset($order->history))
$ret->history = hikamarket::cloning($order->history);
return $ret;
}
private function processOrderEditionData(&$order) {
if(isset($order->hikamarket->products['vendor_id']))
$order->hikamarket->products =
array($order->hikamarket->products);
$this->loadOrderProducts($order);
$exclude_orderproduct_fields = array(
'order_product_id', // key to remove
'order_id', // overrided
'order_product_quantity', // already handle in the code
'order_product_option_parent_id', // can't work
'order_product_wishlist_id', // unwanted
'order_product_parent_id', // already used
'order_product_vendor_price' // internal value
);
foreach($order->hikamarket->products as $order_product) {
$order_product_id = 0;
if(!empty($order_product['order_product_id']))
$order_product_id = (int)$order_product['order_product_id'];
if($order_product_id > 0 && !isset($order->order_products[
$order_product_id ]))
continue;
$current_vendor_id =
$this->getVendorIdFromOrderProducts($order_product_id, $order);
$new_vendor_id = (isset($order_product['vendor_id'])) ?
(int)$order_product['vendor_id'] : $current_vendor_id;
if($new_vendor_id == 1)
$new_vendor_id = 0;
$suborder_current_id = -1;
$suborder_new_id = -1;
foreach($order->hikamarket->children as $k => $v) {
if($suborder_current_id < 0 && (int)$v->order_vendor_id
== $current_vendor_id) {
$suborder_current_id = (int)$v->order_id;
}
if($suborder_new_id < 0 && (int)$v->order_vendor_id ==
$new_vendor_id) {
$suborder_new_id = (int)$v->order_id;
}
}
if($suborder_new_id < 0) {
$new_sub_order = $this->createSubOrderFromProduct($order,
$new_vendor_id, $order_product);
if(!empty($new_sub_order))
$order->hikamarket->children[$new_sub_order->order_id] =
$new_sub_order;
} elseif($order_product_id > 0) {
$fields = array(
'order_product_vendor_price' =>
'order_product_vendor_price = ' .
$this->db->Quote($order_product['vendor_price'])
);
if(isset($order_product['order_product_quantity'])) {
$fields['order_product_quantity'] =
'order_product_quantity = ' .
(int)$order_product['order_product_quantity'];
}
if($new_vendor_id != $current_vendor_id) {
$fields['order_id'] = 'order_id = ' .
(int)$suborder_new_id;
}
foreach(get_object_vars($order->order_products[ $order_product_id ])
as $k => $v) {
if(isset($fields[$k]) || in_array($k, $exclude_orderproduct_fields))
continue;
$fields[$k] = $k . ' = ' . $this->db->Quote($v);
}
$query = 'UPDATE ' .
hikamarket::table('shop.order_product') .
' SET ' . implode(', ', $fields) .
' WHERE order_product_parent_id = ' . (int)$order_product_id
. ' AND product_id = ' .
(int)$order_product['product_id'];
$this->db->setQuery($query);
$this->db->execute();
} else {
$order_product_obj = new stdClass();
foreach($order->product as $product) {
if(isset($order_product['ref']) &&
(!isset($product->hikamarket->ref) || $product->hikamarket->ref
!= $order_product['ref']))
continue;
$order_product_obj = $product;
}
list($fields, $values) =
$this->getQuotedObject($order_product_obj);
if(isset($values['order_id'])) {
$values['order_id'] = $suborder_new_id;
$fields['order_product_id'] =
'order_product_parent_id';
$fields['order_product_vendor_price'] =
'order_product_vendor_price';
$values['order_product_vendor_price'] =
$this->db->Quote($order_product['vendor_price']);
unset($fields['order_product_parent_id']);
unset($values['order_product_parent_id']);
$query = 'INSERT IGNORE INTO ' .
hikamarket::table('shop.order_product') . ' (' .
implode(',', $fields) . ') VALUES (' .
implode(',', $values) . ')';
$this->db->setQuery($query);
$this->db->execute();
}
unset($values);
unset($fields);
}
}
}
private function processOrderFieldsMerge(&$order, &$updateOrders)
{
$includeFields = array(
'order_billing_address_id',
'order_shipping_address_id',
'order_user_id',
'order_discount_code',
'order_ip',
'order_currency_id',
'order_payment_id',
'order_payment_method',
);
if(hikashop_level(2)) {
$query = 'SELECT field_namekey FROM
'.hikamarket::table('shop.field').' WHERE field_table =
' . $this->db->Quote('order');
$this->db->setQuery($query);
$customFields = $this->db->loadColumn();
$includeFields = array_merge($includeFields, $customFields);
}
foreach($includeFields as $field) {
if(!isset($order->$field))
continue;
$value = $order->$field;
if($field == 'order_payment_method')
$value = 'market-' . $order->$field;
foreach($order->hikamarket->children as $suborder) {
if(!isset($updateOrders[(int)$suborder->order_id])) {
$updateOrders[(int)$suborder->order_id] =
$this->generateUpdateSubOrder($suborder->order_id, $order);
}
$updateOrders[(int)$suborder->order_id]->$field = $value;
}
}
}
private function needReprocessSuborders(&$order) {
if(!empty($order->product) ||
!empty($order->hikamarket->products))
return true;
$serializes = array(
'order_tax_info',
'order_shipping_params',
'order_payment_params'
);
foreach($serializes as $k) {
if(!isset($order->$k))
continue;
$n = is_string($order->$k) ? $order->$k :
serialize($order->$k);
$o = is_string($order->old->$k) ? $order->old->$k :
serialize($order->old->$k);
if($n != $o)
return true;
}
unset($n);
unset($o);
$compares = array(
'order_payment_price',
'order_payment_tax',
'order_shipping_id',
'order_shipping_price',
'order_shipping_tax',
'order_discount_price',
'order_discount_tax',
'order_full_price'
);
foreach($compares as $k) {
if(!isset($order->$k))
continue;
$v = $order->$k;
if(in_array($k, array('order_full_price')))
$v = (float)hikamarket::toFloat($v);
if($v != $order->old->$k)
return true;
}
$config = hikamarket::config();
$updatableOrderStatuses = explode(',',
$config->get('updatable_order_statuses',
'created'));
$confirmedOrderStatuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
$confirmingOrder = isset($order->order_status) &&
(in_array($order->order_status, $confirmedOrderStatuses) &&
!in_array($order->old->order_status, $confirmedOrderStatuses));
$refundingOrder = isset($order->order_status) &&
(!in_array($order->order_status, $confirmedOrderStatuses) &&
in_array($order->old->order_status, $confirmedOrderStatuses));
if($confirmingOrder || $refundingOrder)
return true;
return false;
}
private function createSubOrderFromProduct(&$order, $vendor_id,
&$order_product) {
$mainOrder = unserialize(serialize($order));
$raw_order = $this->getRaw((int)$order->order_id);
foreach(get_object_vars($raw_order) as $k => $v) {
if(isset($mainOrder->$k))
continue;
$mainOrder->$k = $v;
}
if(empty($mainOrder->hikamarket))
$mainOrder->hikamarket = new stdClass();
$mainOrder->hikamarket->no_process_vendor_payment = true;
$mainOrder->hikamarket->no_process_vendor_shipping = true;
$mainOrder->cart = new stdClass();
$mainOrder->cart->products = array();
$products = array();
$vendor_total = 0.0;
foreach($order->product as $product) {
if(isset($order_product['ref']) &&
(!isset($product->hikamarket->ref) || $product->hikamarket->ref
!= $order_product['ref']))
continue;
$newProduct = hikamarket::cloning($product);
$newProduct->no_update_qty = true;
$newProduct->order_product_vendor_price =
(float)hikamarket::toFloat($order_product['vendor_price']);
unset($newProduct->hikamarket->ref);
$mainOrder->cart->products[] = $newProduct;
$pid = (int)$product->order_product_id;
$products[$pid] = array(
'_id' => $pid,
'id' => $newProduct->product_id,
'vendor' => $vendor_id,
'fee' => array(),
'qty' => (int)$newProduct->order_product_quantity,
'price' =>
(float)hikamarket::toFloat($newProduct->order_product_price),
'price_tax' =>
(float)hikamarket::toFloat($newProduct->order_product_tax),
'vendor_price' =>
(float)hikamarket::toFloat($newProduct->order_product_vendor_price),
);
$vendor_total += $products[$pid]['vendor_price'];
}
$subsale = $this->createSubOrder($mainOrder, $vendor_id, $products,
array(
'send_email' => false,
'vendor_total' => $vendor_total
));
if(empty($subsale))
return $subsale;
$subsale_id = (int)$subsale->order_id;
foreach($products as $order_product_id => $p) {
$fields = array(
'order_product_vendor_price' =>
'order_product_vendor_price = ' .
$this->db->Quote($order_product['vendor_price'])
);
$query = 'UPDATE ' .
hikamarket::table('shop.order_product') .
' SET ' . implode(', ', $fields) .
' WHERE order_product_parent_id = ' . (int)$order_product_id
. ' AND product_id = ' . (int)$p['id'];
$this->db->setQuery($query);
$this->db->execute();
}
return $subsale;
}
public function getProductVendorAttribution(&$order) {
$products = array();
$cart_products = isset($order->cart->products) ?
$order->cart->products : $order->products;
foreach($cart_products as $product) {
$id = isset($product->cart_product_id) ?
(int)$product->cart_product_id : @$product->order_product_id;
if(empty($id))
continue;
$products[$id] = array(
'_id' => $id,
'id' => (int)$product->product_id,
'vendor' => null
);
}
$this->getVendorsByProducts($products, $order);
return $products;
}
protected function getVendorsByProducts(&$products, $order = null) {
$vendors = array(0 => array());
if(empty($products))
return $vendors;
$product_ids = array();
foreach($products as $product) { $product_ids[] =
$product['id']; }
$query = 'SELECT a.product_id, a.product_vendor_id,
a.product_parent_id, b.product_vendor_id as `parent_vendor_id`'.
' FROM ' . hikamarket::table('shop.product') .
' AS a'.
' LEFT JOIN ' . hikamarket::table('shop.product') .
' AS b ON a.product_parent_id = b.product_id'.
' WHERE a.product_id IN (' . implode(',',
$product_ids) . ')';
$this->db->setQuery($query);
$productObjects =
$this->db->loadObjectList('product_id');
if(!empty($productObjects)) {
foreach($productObjects as $productObject) {
$vid = $productObject->product_vendor_id;
if(empty($vid) && !empty($productObject->parent_vendor_id))
{
$vid = $productObject->parent_vendor_id;
}
if($vid == 1)
$vid = 0;
$pid = (int)$productObject->product_id;
foreach($products as $key => &$product) {
if($product['id'] == $pid)
$product['vendor'] = $vid;
}
unset($product);
}
}
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikamarket');
$app->triggerEvent('onBeforeProductsVendorAttribution',
array(&$products, &$productObjects, &$order));
foreach($products as $key => &$product) {
$vid = $product['vendor'];
if($vid == 1) { $vid = 0; $product['vendor'] = 0; }
if(empty($vendors[$vid]))
$vendors[$vid] = array();
$vendors[$vid][$key] = $key;
}
unset($product);
$config = hikamarket::config();
$vendorselection_custom_field =
$config->get('vendor_select_custom_field', '');
if(!empty($vendorselection_custom_field) && !empty($vendors[0])
&& !empty($order)) {
$query = 'SELECT field.field_namekey, field.field_table '.
' FROM ' . hikamarket::table('shop.field') . '
AS field '.
' WHERE field.field_namekey =
'.$this->db->Quote($vendorselection_custom_field).' AND
(field.field_table = \'order\' OR field.field_table =
\'item\') '.
' AND field.field_type =
\'plg.market_vendorselectfield\' AND field_published = 1 AND
field_frontcomp = 1';
$this->db->setQuery($query);
$result = $this->db->loadObject();
if(!empty($result)) {
if($result->field_table == 'order' &&
isset($order->$vendorselection_custom_field) &&
!empty($order->$vendorselection_custom_field)) {
$query = 'SELECT vendor.vendor_id FROM
'.hikamarket::table('vendor').' AS vendor WHERE
vendor.vendor_id =
'.(int)$order->$vendorselection_custom_field.' AND
vendor.vendor_published = 1';
$this->db->setQuery($query);
$selected_vendor_id = $this->db->loadResult();
if(!empty($selected_vendor_id)) {
$selected_vendor_id = (int)$selected_vendor_id;
if(empty($vendors[$selected_vendor_id]))
$vendors[$selected_vendor_id] = array();
foreach($vendors[0] as $product_cart_id) {
$vendors[$selected_vendor_id][$product_cart_id] = $product_cart_id;
$products[$product_cart_id]['vendor'] =
$selected_vendor_id;
}
$vendors[0] = array();
}
}
$cart_products = isset($order->cart->products) ?
$order->cart->products : $order->products;
if($result->field_table == 'item' &&
!empty($cart_products)) {
$affectedProducts = array();
foreach($cart_products as $order_product) {
$pcid = 0;
if(isset($order_product->cart_product_id))
$pcid = (int)$order_product->cart_product_id;
else if(isset($order_product->order_product_id))
$pcid = (int)$order_product->order_product_id;
$pid = (int)$order_product->product_id;
if(isset($vendors[0][$pcid]) &&
isset($order_product->$vendorselection_custom_field)) {
$vid = (int)$order_product->$vendorselection_custom_field;
if($vid > 1)
$affectedProducts[$pcid] = $vid;
}
}
if(!empty($affectedProducts)) {
$vendor_ids = array();
foreach($affectedProducts as $pcid => $vendor_id) {
$vendor_ids[(int)$vendor_id] = (int)$vendor_id;
}
$query = 'SELECT vendor_id, vendor_params FROM ' .
hikamarket::table('vendor').' WHERE vendor_id IN
('.implode(',',$vendor_ids).') AND vendor_published =
1';
$this->db->setQuery($query);
$valid_vendors =
$this->db->loadObjectList('vendor_id');
foreach($affectedProducts as $pcid => $vendor_id) {
if(!isset($valid_vendors[$vendor_id]))
continue;
$params = null;
if(is_string($valid_vendors[$vendor_id]->vendor_params))
$params =
hikamarket::unserialize($valid_vendors[$vendor_id]->vendor_params);
$has_no_selector = false;
if(!empty($params) && is_object($params) &&
(!isset($params->vendor_selector) ||
!empty($params->vendor_selector))) {
$has_no_selector = true;
}
if(!empty($params) && is_array($params) &&
(!isset($params['vendor_selector']) ||
!empty($params['vendor_selector']))) {
$has_no_selector = true;
}
if($has_no_selector && isset($products[$pcid]) &&
$products[$pcid]['vendor'] == 0) {
$products[$pcid]['vendor'] = $vendor_id;
unset($vendors[0][$pcid]);
if(empty($vendors[$vendor_id]))
$vendors[$vendor_id] = array();
$vendors[$vendor_id][$pcid] = $pcid;
}
}
}
}
}
}
if($config->get('allow_zone_vendor', 0) &&
!empty($vendors[0]) && !empty($order)) {
$zoneClass = hikamarket::get('shop.class.zone');
$zones = $zoneClass->getOrderZones($order);
if(count($zones) == 1) {
$zones = $zoneClass->getZoneParents($zones);
}
$zonesQuoted = array();
foreach($zones as $z) {
$zonesQuoted[] = $this->db->Quote($z);
}
$query = 'SELECT vendor.vendor_id, vendor.vendor_zone_id,
zone.zone_namekey, zone.zone_type '.
' FROM ' . hikamarket::table('vendor') . ' AS
vendor '.
' INNER JOIN ' . hikamarket::table('shop.zone') .
' AS zone ON vendor.vendor_zone_id = zone.zone_id '.
' WHERE vendor.vendor_zone_id > 0 AND zone.zone_namekey IN
('.implode(',', $zonesQuoted).') ORDER BY
vendor.vendor_id ASC';
$this->db->setQuery($query);
$zoneVendors =
$this->db->loadObjectList('zone_namekey');
$zone_vendor_id = null;
if(!empty($zoneVendors)) {
foreach($zones as $z) {
if(isset($zoneVendors[$z])) {
$zone_vendor_id = (int)$zoneVendors[$z]->vendor_id;
break;
}
}
}
if(!empty($zone_vendor_id)) {
if(empty($vendors[$zone_vendor_id]))
$vendors[$zone_vendor_id] = array();
foreach($vendors[0] as $k => $p) {
$vendors[$zone_vendor_id][$k] = $p;
$products[$k]['vendor'] = $zone_vendor_id;
}
$vendors[0] = array();
}
}
$app->triggerEvent('onAfterProductsVendorAttribution',
array(&$vendors, &$products, &$productObjects, &$order));
return $vendors;
}
private function loadOrderProducts(&$order, $force = false) {
if(empty($order) || (is_object($order) &&
empty($order->order_id)))
return false;
if(is_object($order)) {
if(isset($order->order_products) &&
is_array($order->order_products) && !$force)
return true;
$query = 'SELECT * FROM ' .
hikamarket::table('shop.order_product') .
' WHERE order_id = ' . (int)$order->order_id . ' AND
order_product_quantity > 0';
$this->db->setQuery($query);
$order->order_products =
$this->db->loadObjectList('order_product_id');
return true;
}
if(!is_array($order))
return false;
$ids = array();
foreach($order as &$o) {
if(empty($o->order_id))
continue;
if(!$force && isset($o->order_products) &&
is_array($o->order_products))
continue;
$ids[] = (int)$o->order_id;
unset($o->order_products);
$o->order_products = array();
}
unset($o);
$query = 'SELECT * FROM ' .
hikamarket::table('shop.order_product') .
' WHERE order_id IN (' . implode(',', $ids) .
') AND order_product_quantity > 0';
$this->db->setQuery($query);
$order_products =
$this->db->loadObjectList('order_product_id');
foreach($order_products as &$op) {
foreach($order as &$o) {
if((int)$op->order_id != (int)$o->order_id)
continue;
$o->order_products[ (int)$op->order_product_id ] =& $op;
break;
}
unset($o);
}
unset($op);
return true;
}
private function loadOrderTransactions(&$order, $force = false) {
if(empty($order) || empty($order->order_id))
return false;
if(!isset($order->hikamarket))
$order->hikamarket = new stdClass();
if(isset($order->hikamarket->transactions) &&
is_array($order->hikamarket->transactions) && !$force)
return true;
$order_type = isset($order->order_type) ? $order->order_type :
$order->old->order_type;
$order_id = (int)$order->order_id;
if($order_type == 'subsale') {
$order_id = isset($order->order_parent_id) ?
(int)$order->order_parent_id : (int)$order->old->order_parent_id;
$vendor_id = isset($order->order_vendor_id) ?
(int)$order->order_vendor_id : (int)$order->old->order_vendor_id;
}
$query = 'SELECT * FROM ' .
hikamarket::table('order_transaction') .
' WHERE order_id = ' . (int)$order_id;
if($order_type == 'subsale')
$query .= ' AND vendor_id = '.$vendor_id;
$this->db->setQuery($query);
$order->hikamarket->transactions =
$this->db->loadObjectList('order_transaction_id');
return true;
}
private function loadOrderVendor(&$order) {
if(isset($order->hikamarket->vendor))
return;
if(!isset($order->hikamarket))
$order->hikamarket = new stdClass();
$vendorClass = hikamarket::get('class.vendor');
$vendor_id = isset($order->order_vendor_id) ?
(int)$order->order_vendor_id :
(int)@$order->old->order_vendor_id;
$order->hikamarket->vendor = $vendorClass->get( $vendor_id );
}
public function calculateVendorPrice($vendor_id, &$v_order,
&$products, $coupon) {
$ret = 0.0;
$total_qty = 0;
$app = JFactory::getApplication();
$config = hikamarket::config();
if($vendor_id <= 1)
return 0.0;
$order_products =& $v_order->cart->products;
$do = true;
JPluginHelper::importPlugin('hikamarket');
$app->triggerEvent('onBeforeMarketCalculateVendorPrice',
array($vendor_id, &$ret, &$order_products, &$products, $coupon,
$v_order, &$do));
if(!$do)
return $ret;
$vendor_price_with_tax =
(bool)$config->get('calculate_vendor_price_with_tax', false);
$global_fixed_fees = array();
if(empty($v_order->order_vendor_params))
$v_order->order_vendor_params = new stdClass();
if(empty($v_order->order_vendor_params->fees))
$v_order->order_vendor_params->fees = new stdClass();
if(empty($v_order->order_vendor_params->fees->rules))
$v_order->order_vendor_params->fees->rules = array();
if(empty($v_order->order_vendor_params->fees->fixed))
$v_order->order_vendor_params->fees->fixed = array();
if(empty($v_order->order_vendor_params->fees->shipping))
$v_order->order_vendor_params->fees->shipping = 0.0;
$total_quantity = 0;
$total_price = 0.0;
$total_price_with_tax = 0.0;
foreach($products as $product) {
if($product['vendor'] == $vendor_id) {
$total_quantity += $product['qty'];
$total_price += $product['price'];
$total_price_with_tax += $product['price_tax'];
}
}
if($config->get('fee_on_shipping', 0) &&
!empty($v_order->order_shipping_price)) {
$total_price += (float)$v_order->order_shipping_price -
(float)$v_order->order_shipping_tax;
$total_price_with_tax += (float)$v_order->order_shipping_price;
}
foreach($order_products as &$product) {
if($product->order_product_quantity == 0 ||
(isset($product->order_product_vendor_price) &&
$product->order_product_vendor_price !== null))
continue;
if($vendor_price_with_tax)
$full_price = (float)($product->order_product_price +
$product->order_product_tax) *
(int)$product->order_product_quantity;
else
$full_price = (float)$product->order_product_price *
(int)$product->order_product_quantity;
if(!empty($coupon) && !empty($coupon->products) &&
empty($coupon->all_products)) {
foreach($coupon->products as $couponProduct) {
if($couponProduct->product_id != $product->product_id)
continue;
if(isset($couponProduct->processed_discount_value)) {
$full_price -=
floatval($couponProduct->processed_discount_value);
} elseif(bccomp($coupon->discount_flat_amount, 0, 5) !== 0) {
$percent = 1.0;
if(!empty($coupon->products_full_price))
$percent = floatval($full_price / $coupon->products_full_price);
$full_price -= floatval($coupon->discount_flat_amount) *
$percent;
} elseif(bccomp($coupon->discount_percent_amount, 0, 5) !== 0) {
$full_price *= floatval((100 -
floatval($coupon->discount_percent_amount)) / 100);
}
}
}
$pcid = isset($product->cart_product_parent_id) ?
$product->cart_product_parent_id :
$product->order_product_parent_id;
if($vendor_price_with_tax)
$product->order_product_vendor_price =
($product->order_product_price + $product->order_product_tax);
else
$product->order_product_vendor_price =
$product->order_product_price;
$product_fee = false;
if(isset($products[$pcid]))
$product_fee = $this->getProductFee($product,
$products[$pcid]['fee'], $full_price, ($vendor_price_with_tax ?
$total_price_with_tax : $total_price), $total_quantity);
if(!empty($product_fee)) {
$products[$pcid]['vendor_fee'] = $product_fee;
$products[$pcid]['vendor_price'] =
$product_fee['vendor'];
$product->order_product_vendor_price =
$product_fee['vendor'];
$ret += $product_fee['price'];
foreach($products[$pcid]['fee'] as $fee) {
if($fee->fee_id == $product_fee['id']) {
$v_order->order_vendor_params->fees->rules[] = $fee;
break;
}
}
if(!empty($product_fee['fixed'])) {
if(empty($v_order->order_vendor_params->fees->fixed[
$product_fee['id'] ]))
$v_order->order_vendor_params->fees->fixed[
$product_fee['id'] ] = $product_fee['fixed'];
}
if(substr($product_fee['mode'], -7) == '_global')
{
if(!isset($global_fixed_fees[ $product_fee['id'] ])) {
$ret -= $product_fee['fixed'];
$global_fixed_fees[ $product_fee['id'] ] = true;
}
} else {
$ret -= $product_fee['fixed'];
}
} else {
$ret += $full_price; // $product->order_product_vendor_price;
}
}
unset($product);
if(empty($order_products)) {
$feeClass = hikamarket::get('class.fee');
$vendorFees = $feeClass->getVendor($vendor_id);
$v_order->order_vendor_params->fees->rules[] =
reset($vendorFees);
}
if(!empty($coupon) && !empty($coupon->discount_target_vendor)
&& (int)$coupon->discount_target_vendor > 0 &&
(empty($coupon->products) || !empty($coupon->all_products))) {
if(empty($v_order->order_vendor_params->coupon))
$v_order->order_vendor_params->coupon = new stdClass();
if(bccomp($coupon->discount_flat_amount, 0, 5) !== 0 &&
(!isset($coupon->discount_percent_amount_orig) ||
bccomp($coupon->discount_percent_amount_orig, 0, 5) === 0)) {
$coupon_percentage = (float)($coupon->vendors[$vendor_id] /
$coupon->products_full_price);
$v_order->order_discount_price =
floatval($coupon->discount_flat_amount) * $coupon_percentage;
$v_order->order_vendor_params->coupon->mode =
'flat';
$v_order->order_vendor_params->coupon->value =
floatval($coupon->discount_flat_amount);
$v_order->order_vendor_params->coupon->ratio =
$coupon_percentage;
$ret -= floatval($coupon->discount_flat_amount) *
$coupon_percentage;
} elseif(bccomp($coupon->discount_percent_amount, 0, 5) !== 0 ||
(isset($coupon->discount_percent_amount_orig) &&
bccomp($coupon->discount_percent_amount_orig, 0, 5) !== 0)) {
$percent_amount =
(float)hikamarket::toFloat($coupon->discount_percent_amount);
if(empty($percent_amount) &&
isset($coupon->discount_percent_amount_orig))
$percent_amount =
(float)hikamarket::toFloat($coupon->discount_percent_amount_orig);
$v_order->order_vendor_params->coupon->mode =
'percent';
$v_order->order_vendor_params->coupon->value =
$percent_amount;
$v_order->order_vendor_params->coupon->target_vendor =
$coupon->discount_target_vendor;
if($coupon->discount_target_vendor > 1) {
if($vendor_price_with_tax)
$ret -= $v_order->order_discount_price;
else
$ret -= $v_order->order_discount_price +
$v_order->order_discount_tax;
} else {
$ret *= floatval((100 - $percent_amount) / 100);
}
}
}
if(!empty($v_order->order_payment_price)) {
$ret += $v_order->order_payment_price;
if(!$vendor_price_with_tax)
$ret -= (float)hikamarket::toFloat($v_order->order_payment_tax);
}
if(!empty($v_order->order_shipping_price)) {
$shipping_price =
(float)hikamarket::toFloat($v_order->order_shipping_price);
if(!$vendor_price_with_tax)
$shipping_price -=
(float)hikamarket::toFloat($v_order->order_shipping_tax);
$ret += $shipping_price;
if($config->get('fee_on_shipping', 0)) {
$f = false;
foreach($v_order->order_vendor_params->fees->rules as $rule)
{
if(substr($rule->fee_type, -7) == '_global') {
$v_order->order_vendor_params->fees->shipping =
round((float)((100 - (float)$rule->fee_percent) * $shipping_price / 100)
- $rule->fee_value, 5);
$f = true;
break;
}
}
if(!$f) {
$feeClass = hikamarket::get('class.fee');
$vendorFees = $feeClass->getVendor($vendor_id, true);
foreach($vendorFees as $fee) {
if((int)$fee->fee_min_quantity > 1)
continue;
if((int)$fee->fee_currency_id != $v_order->order_currency_id)
continue;
if((float)hikamarket::toFloat($fee->fee_min_price) >
$shipping_price)
continue;
$v_order->order_vendor_params->fees->shipping =
round((float)((100 - (float)hikamarket::toFloat($fee->fee_percent)) *
$shipping_price / 100) - (float)hikamarket::toFloat($fee->fee_value),
5);
break;
}
}
if(!empty($v_order->order_vendor_params->fees->shipping)) {
if($v_order->order_vendor_params->fees->shipping >
$shipping_price)
$v_order->order_vendor_params->fees->shipping =
$shipping_price;
$ret -= $shipping_price -
$v_order->order_vendor_params->fees->shipping;
}
}
}
$app->triggerEvent('onAfterMarketCalculateVendorPrice',
array($vendor_id, &$ret, &$order_products, &$products, $coupon,
$v_order));
return $ret;
}
public function getProductFee(&$product, &$fees, $full_price,
$total_price = 0, $total_quantity = 0) {
$current_product_qty = (int)$product->order_product_quantity;
$product_fee = array();
$modes =
array('product','vendor','config');
$global_modes = array('vendor','config');
$config = hikamarket::config();
$price_with_tax =
($config->get('calculate_vendor_price_with_tax', false));
for($i = 0; $i < count($modes) && empty($product_fee); $i++)
{
$mode = $modes[$i];
$fee_processing = array(
'qty' => array(-1,$full_price,-1,0,null),
'price' => array(-1,$full_price,-1,0,null)
);
$mode_gbl = null;
if(in_array($mode, $global_modes))
$mode_gbl = $mode.'_global';
foreach($fees as $fee) {
if($fee->fee_type != $mode && $fee->fee_type !=
$mode_gbl)
continue;
$global_mode = ($fee->fee_type == $mode_gbl);
if(empty($fee->fee_min_quantity) &&
empty($fee->fee_min_price))
$fee->fee_min_quantity = 1;
if(
(!$global_mode && (($current_product_qty >=
$fee->fee_min_quantity || $fee->fee_min_quantity <= 1) &&
($product->order_product_price >= $fee->fee_min_price ||
$fee->fee_min_price == 0)))
||
($global_mode && (($total_quantity >=
$fee->fee_min_quantity || $fee->fee_min_quantity <= 1) &&
($total_price >= $fee->fee_min_price || $fee->fee_min_price ==
0)))
) {
$product_full_price = (float)((100 - (float)$fee->fee_percent) *
$full_price / 100) - (float)($fee->fee_value * $current_product_qty);
$product_vendor_unit_price = (float)((100 -
(float)$fee->fee_percent) * $product->order_product_vendor_price /
100) - $fee->fee_value;
if($fee->fee_min_quantity > 0 &&
$fee->fee_min_quantity > $fee_processing['qty'][0])
$fee_processing['qty'] = array($fee->fee_min_quantity,
$product_full_price, $product_vendor_unit_price, $fee->fee_fixed,
$fee->fee_id);
if($fee->fee_min_price > 0 && $fee->fee_min_price
> $fee_processing['price'][0])
$fee_processing['price'] = array($fee->fee_min_price,
$product_full_price, $product_vendor_unit_price, $fee->fee_fixed,
$fee->fee_id);
}
}
if($fee_processing['qty'][0] >= 0 ||
$fee_processing['price'][0] >= 0) {
if($fee_processing['qty'][0] >= 0 &&
($fee_processing['price'][0] < 0 ||
$fee_processing['qty'][1] >
$fee_processing['price'][1])) {
$product_fee = array(
'price' => $fee_processing['qty'][1],
'vendor' => $fee_processing['qty'][2],
'fixed' => $fee_processing['qty'][3],
'id' => $fee_processing['qty'][4],
'type' => 'qty',
'mode' => $fee->fee_type
);
} else {
$product_fee = array(
'price' => $fee_processing['price'][1],
'vendor' => $fee_processing['price'][2],
'fixed' => $fee_processing['qty'][3],
'id' => $fee_processing['price'][4],
'type' => 'price',
'mode' => $fee->fee_type
);
}
}
}
return $product_fee;
}
public function recalculateVendorPrice(&$order, $handleFeeMode =
false) {
if((int)$order->order_vendor_id <= 1)
return 0.0;
$config = hikamarket::config();
$this->loadOrderProducts($order);
$ret = 0.0;
foreach($order->order_products as $order_product) {
$ret += (int)$order_product->order_product_quantity *
(float)hikamarket::toFloat($order_product->order_product_vendor_price);
}
$fields =
array('order_full_price','order_payment_price','order_shipping_price','order_discount_price','order_discount_tax','order_shipping_tax','order_payment_tax','order_vendor_params','order_payment_params');
foreach($fields as $field) {
if(!isset($order->$field) &&
isset($order->old->$field))
$order->$field = $order->old->$field;
}
if(!empty($order->order_payment_price))
$ret += (float)hikamarket::toFloat($order->order_payment_price);
if(!empty($order->order_shipping_price))
$ret += (float)hikamarket::toFloat($order->order_shipping_price);
if(!empty($order->order_discount_price))
$ret -= (float)hikamarket::toFloat($order->order_discount_price);
if($config->get('calculate_vendor_price_with_tax', false))
{
if(!empty($order->order_discount_tax))
$ret -= (float)hikamarket::toFloat($order->order_discount_tax);
} else {
if(!empty($order->order_shipping_tax))
$ret -= (float)hikamarket::toFloat($order->order_shipping_tax);
if(!empty($order->order_payment_tax))
$ret -= (float)hikamarket::toFloat($order->order_payment_tax);
}
$order_vendor_params = is_string($order->order_vendor_params) ?
hikamarket::unserialize($order->order_vendor_params) :
$order->order_vendor_params;
if(!empty($order_vendor_params->fees->fixed)) {
foreach($order_vendor_params->fees->fixed as $fixedFee) {
$ret -= (float)hikamarket::toFloat($fixedFee);
}
}
if(!empty($order_vendor_params->fees->shipping)) {
$ret -= (float)hikamarket::toFloat($order->order_shipping_price) -
(float)hikamarket::toFloat($order_vendor_params->fees->shipping);
}
if(!$handleFeeMode)
return $ret;
$feeMode = true;
$order_payment_params = (is_string($order->order_payment_params)
&& !empty($order->order_payment_params)) ?
hikamarket::unserialize($order->order_payment_params) :
$order->order_payment_params;
if(!empty($order_payment_params) &&
isset($order_payment_params->market_mode))
$feeMode = (int)$order_payment_params->market_mode;
if($feeMode)
return $ret;
if($config->get('shipping_per_vendor', 1) ||
empty($order->order_shipping_price))
$ret -= (float)hikamarket::toFloat($order->order_full_price);
else
$ret -= (float)hikamarket::toFloat($order->order_full_price) +
(float)hikamarket::toFloat($order->order_shipping_price) -
(float)hikamarket::toFloat($order->order_shipping_tax);
return $ret;
}
private function recalculateProductPrice($suborder_product,
$order_vendor_params) {
if(empty($order_vendor_params))
return false;
$order_vendor_params = is_string($order_vendor_params) ?
hikamarket::unserialize($order_vendor_params) : $order_vendor_params;
if(empty($order_vendor_params->fees->rules))
return false;
foreach($order_vendor_params->fees->rules as $rule) {
if((int)$rule->product_id == (int)$suborder_product->product_id ||
((int)$rule->product_parent_id > 0 &&
(int)$rule->product_parent_id == (int)$suborder_product->product_id))
{
$ret =
(float)hikamarket::toFloat($suborder_product->order_product_price);
$ret = (float)((100 - (float)$rule->fee_percent) * $ret / 100) -
$rule->fee_value;
return $ret;
}
}
return false;
}
private function processShippingParams(&$order, $vendor_id,
&$vendor_order, $total_products, $total_products_vendor, $products =
null) {
$config = hikamarket::config();
$shipping_per_vendor = false;
$shipping_found = false;
if(!empty($order->hikamarket->no_process_vendor_shipping))
return;
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikamarket');
$continue = true;
$app->triggerEvent('onBeforeMarketProcessShippingParams',
array(&$vendor_order, $vendor_id, $total_products,
$total_products_vendor, $order, $products, &$continue));
if(!$continue)
return;
if($vendor_id == 0)
$vendor_id = 1;
if(!empty($order->cart->shipping)) {
$vendor_order->cart->shipping = array();
foreach($order->cart->shipping as $shipping) {
$warehouse = null; $shipping_vendor = null;
if(!empty($shipping->shipping_warehouse_id) &&
is_string($shipping->shipping_warehouse_id)) {
if(strpos($shipping->shipping_warehouse_id, 'v') !==
false)
list($warehouse, $shipping_vendor) = explode('v',
$shipping->shipping_warehouse_id, 2);
else
$warehouse = $shipping->shipping_warehouse_id;
}
if(!empty($shipping->shipping_warehouse_id) &&
is_array($shipping->shipping_warehouse_id)) {
$warehouse = $shipping->shipping_warehouse_id[''];
$shipping_vendor =
$shipping->shipping_warehouse_id['v'];
}
if($shipping_vendor !== null) {
if((int)$shipping_vendor == $vendor_id) {
$vendor_order->order_shipping_price +=
$shipping->shipping_price_with_tax;
$vendor_order->order_shipping_tax +=
$shipping->shipping_price_with_tax - $shipping->shipping_price;
$shipping_found = true;
}
$vendor_order->cart->shipping[] = $shipping;
} else if($vendor_id == 1 && $shipping_vendor === null) {
$vendor_order->order_shipping_price +=
$shipping->shipping_price_with_tax;
$vendor_order->order_shipping_tax +=
$shipping->shipping_price_with_tax - $shipping->shipping_price;
$shipping_found = true;
$vendor_order->cart->shipping[] = $shipping;
}
if(!$shipping_per_vendor && $shipping_vendor !== null)
$shipping_per_vendor = true;
}
} else if(!empty($order->order_shipping_params)) {
foreach($order->order_shipping_params->prices as $key =>
$prices) {
if(strpos($key, 'v') !== false) {
list($null, $shipping_vendor) = explode('v', $key, 2);
if((int)$shipping_vendor == $vendor_id) {
$vendor_order->order_shipping_price +=
$prices->price_with_tax;
$vendor_order->order_shipping_tax += $prices->tax;
$shipping_found = true;
}
} else if($vendor_id == 1 && strpos($key, 'v') ===
false) {
$vendor_order->order_shipping_price += $prices->price_with_tax;
$vendor_order->order_shipping_tax += $prices->tax;
$shipping_found = true;
}
if(!$shipping_per_vendor && (
(is_string($shipping->shipping_warehouse_id) &&
strpos($shipping->shipping_warehouse_id, 'v') !== false) ||
(is_array($shipping->shipping_warehouse_id) &&
isset($shipping->shipping_warehouse_id['v']))
)
) {
$shipping_per_vendor = true;
}
}
}
if(!empty($vendor_order->order_shipping_price) || $shipping_found) {
$vendor_order->order_shipping_id = '';
$order_shipping_id = explode(';',
$order->order_shipping_id);
$order_shipping_vendor = 'v' . $vendor_id;
foreach($order_shipping_id as $order_shipping) {
if(($vendor_id == 1 && strpos($order_shipping, 'v')
=== false) || substr($order_shipping, -strlen($order_shipping_vendor)) ==
$order_shipping_vendor) {
if(!empty($vendor_order->order_shipping_id))
$vendor_order->order_shipping_id .= ';';
$vendor_order->order_shipping_id .= $order_shipping;
}
if(!$shipping_per_vendor && strpos($order_shipping,
'v') !== false)
$shipping_per_vendor = true;
}
if(empty($vendor_order->order_shipping_params))
$vendor_order->order_shipping_params = new stdClass();
$vendor_order->order_shipping_params->prices = array();
foreach($order->order_shipping_params->prices as $k => $v) {
if(($vendor_id == 1 && strpos($k, 'v') === false) ||
substr($k, -strlen($order_shipping_vendor)) == $order_shipping_vendor) {
$vendor_order->order_shipping_params->prices[$k] = $v;
if(empty($vendor_order->order_shipping_id))
$vendor_order->order_shipping_id = substr($k, 0,
strpos('@', $k));
}
if(!$shipping_per_vendor && strpos($k, 'v') !==
false)
$shipping_per_vendor = true;
}
if(empty($vendor_order->order_shipping_id) &&
!empty($vendor_order->cart->shipping)) {
foreach($vendor_order->cart->shipping as $s) {
if(!empty($vendor_order->order_shipping_id))
$vendor_order->order_shipping_id .= ';';
$vendor_order->order_shipping_id .= $s->shipping_id;
}
}
}
if(empty($vendor_order->order_shipping_price) &&
!$shipping_per_vendor &&
$config->get('split_order_shipping_fees', 0) &&
!empty($total_products)) {
$vendor_order->order_shipping_price = $order->order_shipping_price
* $total_products_vendor / $total_products;
$vendor_order->order_shipping_tax = $order->order_shipping_tax *
$total_products_vendor / $total_products;
}
if(!empty($vendor_order->order_tax_info)) {
foreach($vendor_order->order_tax_info as $tax_namekey =>
&$tax) {
$tax->tax_amount_for_shipping = 0;
}
unset($tax);
}
if(!empty($vendor_order->order_shipping_params) &&
!empty($vendor_order->order_shipping_params->prices)) {
foreach($vendor_order->order_shipping_params->prices as
$shipping_price) {
if(empty($shipping_price->taxes))
continue;
foreach($shipping_price->taxes as $tax_namekey => $tax_value) {
$vendor_order->order_tax_info[$tax_namekey]->tax_amount_for_shipping
+= $tax_value;
}
}
}
if(empty($vendor_order->order_shipping_id) &&
!empty($vendor_order->order_shipping_price)) {
$vendor_order->order_shipping_id = $order->order_shipping_id;
}
if(empty($vendor_order->order_shipping_price) &&
$shipping_per_vendor && !$shipping_found) {
$vendor_order->order_shipping_id = '';
}
}
private function getQuotedObject($obj) {
$fields = array();
$values = array();
foreach(get_object_vars($obj) as $k => $v) {
if(is_array($v) || is_object($v) || $v === null || $k[0] ==
'_' )
continue;
$fields[$k] = $this->db->quoteName($k);
$values[$k] = $this->db->Quote($v);
}
return array($fields, $values);
}
public function processView(&$view) {
$shopOrderBackendHelper =
hikamarket::get('helper.shop-order_backend');
if($shopOrderBackendHelper)
$shopOrderBackendHelper->processView($view);
}
}
classes/payment.php000064400000032376151160562270010407 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketPaymentClass extends hikamarketClass {
protected $tables = array('shop.payment');
protected $pkeys = array('payment_id');
protected $toggle = array('payment_published' =>
'payment_id');
protected $toggleAcl = array('payment' =>
'payment_published');
protected $deleteToggle = array('shop.payment' =>
array('payment_id', 'payment_type'));
public function save(&$element) {
$shopClass = hikamarket::get('shop.class.payment');
return $shopClass->save($element);
}
public function onPluginConfiguration(&$plugin, &$element,
&$extra_config, &$extra_blocks) {
$app = JFactory::getApplication();
if(!$app->isAdmin())
return;
if(!empty($plugin->market_support)) {
$extra_blocks[] = '
<div class="hikashop_tile_block"><div
style="min-height:auto;">
<div
class="hikashop_tile_title">'.JText::_('VENDOR_OPTIONS').'</div>
<p>'.JText::_('PLUGIN_COMPATIBLE_MARKET').'</p>
</div></div>
';
return;
}
$nameboxType = hikamarket::get('type.namebox');
$vendor_id = '';
if(!empty($element->payment_vendor_id))
$vendor_id = (int)$element->payment_vendor_id;
if(empty($vendor_id) &&
!empty($element->payment_params->payment_vendor_id))
$vendor_id = (int)$element->payment_params->payment_vendor_id;
$market_modes = array(
JHTML::_('select.option', '',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', 'fee',
JText::_('MARKETMODE_FEE_DETAILED')),
JHTML::_('select.option', 'com',
JText::_('MARKETMODE_COMMISSION_DETAILED'))
);
$market_mode = '';
if(!empty($element->payment_params->payment_market_mode))
$market_mode = $element->payment_params->payment_market_mode;
$config = hikamarket::config();
$msg = '';
$cart_restriction = (int)$config->get('vendors_in_cart',
0);
if($cart_restriction != 1) {
$msg = '
<tr>
<td
colspan="2">'.JText::_('WARNING_VENDOR_LIMITATION_NOT_SET').'</td>
</tr>';
}
$extra_blocks[] = '
<div class="hikashop_tile_block"><div
style="min-height:auto;">
<div
class="hikashop_tile_title">'.JText::_('VENDOR_OPTIONS').'</div>
<table class="admintable table">'.$msg.'
<tr>
<td class="key">
<label
for="data[payment][payment_vendor_id]">'.JText::_('HIKA_VENDOR').'</label>
</td>
<td>'.
$nameboxType->display(
'data[payment][payment_vendor_id]',
(int)$vendor_id,
hikamarketNameboxType::NAMEBOX_SINGLE,
'vendor',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>'
)
).
'</td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][payment_market_mode]">'.JText::_('HIKAM_MODE_COMMISSION').'</label>
</td>
<td>'.
JHTML::_('select.genericlist', $market_modes,
'data[payment][payment_params][payment_market_mode]',
'', 'value', 'text', $market_mode).
'</td>
</tr>
</table>
</div></div>';
}
public function onBeforePluginSave(&$element, &$do, $new = false)
{
}
public function onPaymentDisplay(&$order, &$methods,
&$usable_methods) {
$config = hikamarket::config();
$cart_restriction = (int)$config->get('vendors_in_cart',
0);
$only_vendor_payments =
(int)$config->get('only_vendor_payments', 0);
$vendor_id = 0;
if(!empty($order->products)) {
foreach($order->products as $product) {
if(isset($product->product_vendor_id) &&
(int)$product->product_vendor_id >= 1) {
if($cart_restriction > 0)
$vendor_id = (int)$product->product_vendor_id;
elseif($vendor_id == 0)
$vendor_id = (int)$product->product_vendor_id;
else
$vendor_id = -1;
}
}
}
if($vendor_id > 0 && $only_vendor_payments) {
$found = false;
if(!empty($usable_methods)) {
foreach($usable_methods as $method) {
if(!$this->isVendorMethod($method, $vendor_id))
continue;
$found = true;
break;
}
}
if(!empty($methods) && !$found) {
foreach($methods as $method) {
if(!$this->isVendorMethod($method, $vendor_id))
continue;
$found = true;
break;
}
}
if(!$found) {
$vendor_id = -1;
$cart_restriction = 0;
}
}
if(!empty($usable_methods)) {
foreach($usable_methods as $k => &$method) {
if((isset($method->enabled) && $method->enabled == false)
|| empty($method->payment_published))
continue;
if(!$this->checkMethodForCheckout($method, $cart_restriction,
$vendor_id, $only_vendor_payments)) {
$method->enabled = false;
$method->payment_published = false;
unset($usable_methods[$k]);
}
}
unset($method);
}
if(!empty($methods)) {
foreach($methods as &$method) {
if((isset($method->enabled) && $method->enabled == false)
|| empty($method->payment_published))
continue;
if(!$this->checkMethodForCheckout($method, $cart_restriction,
$vendor_id, $only_vendor_payments)) {
$method->enabled = false;
$method->payment_published = false;
}
}
unset($method);
}
}
private function isVendorMethod(&$method, $cart_vendor_id) {
if((isset($method->enabled) && $method->enabled == false)
|| empty($method->payment_published))
return false;
if(!empty($method->payment_params->market_support) ||
$method->payment_type == 'paypaladaptive')
return true;
$vendor_id = (int)@$method->payment_vendor_id;
if(empty($vendor_id) &&
!empty($method->payment_params->payment_vendor_id))
$vendor_id = (int)$method->payment_params->payment_vendor_id;
return $vendor_id == $cart_vendor_id;
}
private function checkMethodForCheckout(&$method, $cart_restriction,
$cart_vendor_id, $only_vendor_payments) {
$vendor_id = (int)@$method->payment_vendor_id;
if(empty($vendor_id) &&
!empty($method->payment_params->payment_vendor_id))
$vendor_id = (int)$method->payment_params->payment_vendor_id;
if(!empty($method->payment_params->market_support) ||
$method->payment_type == 'paypaladaptive') {
if($cart_vendor_id == $vendor_id || $vendor_id == 0 || $vendor_id == 1)
return true;
return false;
}
if($cart_restriction == 0 && $cart_vendor_id <= 1) {
if($vendor_id > 1)
return false;
return true;
}
if($cart_vendor_id == $vendor_id || (!$only_vendor_payments &&
($vendor_id == 0 || $vendor_id == 1)))
return true;
return false;
}
public function onAfterHikaPluginConfigurationListing($type, &$rows,
&$listing_columns, &$view) {
$vendors = array();
foreach($rows as &$row) {
if(empty($row->payment_vendor_id) &&
!empty($row->payment_params->payment_vendor_id))
$row->payment_vendor_id =
(int)$row->payment_params->payment_vendor_id;
if(!empty($row->payment_vendor_id)) {
$id = (int)$row->payment_vendor_id;
$vendors[$id] = $id;
}
}
unset($row);
if(!empty($vendors)) {
$listing_columns['vendor'] = array(
'name' => 'HIKA_VENDOR',
'col' => 'vendor_name'
);
$db = JFactory::getDBO();
$query = 'SELECT * FROM ' .
hikamarket::table('vendor') . ' WHERE vendor_id IN
('.implode(',', $vendors) . ')';
$db->setQuery($query);
$vendors = $db->loadObjectList('vendor_id');
foreach($rows as &$row) {
$row->vendor_name = '';
if(!empty($row->payment_vendor_id)) {
$id = (int)$row->payment_vendor_id;
if(isset($vendors[ $id ]))
$row->vendor_name = $vendors[ $id ]->vendor_name;
else
$row->vendor_name = $id;
}
}
unset($row);
}
}
public function onBeforeHikaPluginConfigurationListing($type,
&$filters, &$order, &$searchMap, &$extrafilters,
&$view) {
}
public function loadConfigurationFields() {
$main_form = array(
'payment_images' => array(
'name' => 'HIKA_IMAGES',
'type' => 'plugin_images',
'format' => 'arrayString'
),
'payment_price' => array(
'name' => 'PRICE',
'type' => 'price',
'format' => 'float',
'link' => 'params.payment_currency',
'linkformat' => 'int',
),
'params.payment_percentage' => array(
'name' => 'DISCOUNT_PERCENT_AMOUNT',
'type' => 'input',
'format' => 'float',
'append' => '%'
),
'params.payment_tax_id' => array(
'name' => 'TAXATION_CATEGORY',
'type' => 'tax',
'format' => 'int'
),
);
$restriction_form = array(
'payment_currency' => array(
'name' => 'CURRENCY',
'type' => 'currencies',
'format' => 'arrayInt',
'category' => 'currency'
),
'params.payment_min_price' => array(
'name' => 'SHIPPING_MIN_PRICE',
'type' => 'input',
'format' => 'float',
'category' => 'price'
),
'params.payment_max_price' => array(
'name' => 'SHIPPING_MAX_PRICE',
'type' => 'input',
'format' => 'float',
'category' => 'price'
),
'params.payment_price_use_tax' => array(
'name' => 'WITH_TAX',
'type' => 'boolean',
'default' => '1',
'format' => 'boolean',
'category' => 'price',
'category_check' => false
),
'params.payment_min_quantity' => array(
'name' => 'SHIPPING_MIN_QUANTITY',
'type' => 'input',
'format' => 'int',
'category' => 'quantity'
),
'params.payment_max_quantity' => array(
'name' => 'SHIPPING_MAX_QUANTITY',
'type' => 'input',
'format' => 'int',
'category' => 'quantity'
),
'payment_zone_namekey' => array(
'name' => 'ZONE',
'type' => 'zone',
'format' => 'string',
'category' => 'zone'
),
'payment_shipping_methods' => array(
'name' => 'HIKASHOP_SHIPPING_METHOD',
'type' => 'shipping_method',
'format' => 'arrayString',
'category' => 'shipping'
),
'params.payment_min_weight' => array(
'name' => 'SHIPPING_MIN_WEIGHT',
'type' => 'weight',
'format' => 'float',
'link' => 'payment_weight_unit',
'linkformat' => 'string',
'category' => 'weight'
),
'params.payment_max_weight' => array(
'name' => 'SHIPPING_MAX_WEIGHT',
'type' => 'weight',
'format' => 'float',
'link' => 'payment_weight_unit',
'linkformat' => 'string',
'category' => 'weight'
),
'params.payment_min_volume' => array(
'name' => 'SHIPPING_MIN_VOLUME',
'type' => 'volume',
'format' => 'float',
'link' => 'payment_size_unit',
'linkformat' => 'string',
'category' => 'volume'
),
'params.payment_max_volume' => array(
'name' => 'SHIPPING_MAX_VOLUME',
'type' => 'volume',
'format' => 'float',
'link' => 'payment_size_unit',
'linkformat' => 'string',
'category' => 'volume'
),
'params.payment_zip_prefix' => array(
'name' => 'SHIPPING_PREFIX',
'type' => 'input',
'format' => 'string',
'category' => 'postcode'
),
'params.payment_min_zip' => array(
'name' => 'SHIPPING_MIN_ZIP',
'type' => 'input',
'format' => 'string',
'category' => 'postcode'
),
'params.payment_max_zip' => array(
'name' => 'SHIPPING_MAX_ZIP',
'type' => 'input',
'format' => 'string',
'category' => 'postcode'
),
'params.payment_zip_suffix' => array(
'name' => 'SHIPPING_SUFFIX',
'type' => 'input',
'format' => 'string',
'category' => 'postcode'
),
);
if(hikashop_level(2)) {
$restriction_form['payment_access'] = array(
'name' => 'ACCESS_LEVEL',
'type' => 'acl',
'format' => 'arrayString',
'category' => 'acl',
'empty_value' => 'all'
);
}
return array(
'main' => $main_form,
'restriction' => $restriction_form
);
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$query = 'SELECT * FROM ' .
hikamarket::table('shop.payment') . ' WHERE
payment_published = 1';
$this->db->setQuery($query);
$methods = $this->db->loadObjectList('payment_id');
foreach($methods as $method) {
$payment_namekey = $method->payment_type . '_' .
$method->payment_id;
$ret[0][$payment_namekey] = $method->payment_name;
}
if(!empty($value)) {
if($mode == hikamarketNameboxType::NAMEBOX_SINGLE) {
$ret[1] = $ret[0][$value];
} else {
if(!is_array($value))
$value = array($value);
foreach($value as $v) {
if(isset($ret[0][$v]))
$ret[1][$v] = $ret[0][$v];
}
}
}
return $ret;
}
public function toggleId($task, $value = null) {
if($value !== null) {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value == 0 ||
empty($this->toggle[$task]) ||
!hikamarket::acl('paymentplugin/edit/'.str_replace('payment_',
'', $task)) || !hikamarket::isVendorPlugin((int)$value,
'payment') ))
return false;
}
if(!empty($this->toggle[$task]))
return $this->toggle[$task];
return false;
}
public function toggleDelete($value1 = '', $value2 =
'') {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value1 == 0 ||
!hikamarket::acl('paymentplugin/delete') ||
!hikamarket::isVendorPlugin((int)$value1, 'payment')))
return false;
if(!empty($this->deleteToggle))
return $this->deleteToggle;
return false;
}
}
classes/plugin.php000064400000030252151160562270010217 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketPluginClass extends hikamarketClass {
protected $tables = array('shop.plugin');
protected $pkeys = array('plugin_id');
protected $toggle = array('plugin_published' =>
'plugin_id');
protected $toggleAcl = array('plugin' =>
'plugin_published');
protected $deleteToggle = array('shop.plugin' =>
array('plugin_type', 'plugin_id'));
public function __construct($config = array()) {
return parent::__construct($config);
}
public function get($id, $default = '') {
$ret = parent::get($id);
if(!empty($ret->plugin_params))
$ret->plugin_params =
hikamarket::unserialize($ret->plugin_params);
return $ret;
}
public function frontSaveForm($task = '', $acl = true) {
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$plugin_id = hikamarket::getCID('plugin_id');
$vendor_id = hikamarket::loadVendor(false, false);
$plugin_name = hikaInput::get()->getCmd('name',
'');
if(empty($plugin_name))
return false;
$plugin_type = hikaInput::get()->getCmd('plugin_type',
'');
if(empty($plugin_type) || !in_array($plugin_type,
array('payment', 'shipping', 'generic')))
return false;
if($plugin_type == 'plugin' || $plugin_type ==
'generic')
$pluginInstance = hikamarket::import('hikashop',
$plugin_name);
else
$pluginInstance = hikamarket::import('hikashop'.$plugin_type,
$plugin_name);
if(empty($pluginInstance))
return false;
$pluginInterfaceClass = null;
switch($plugin_type) {
case 'payment':
$pluginInterfaceClass = hikamarket::get('class.payment');
break;
case 'shipping':
$pluginInterfaceClass = hikamarket::get('class.shipping');
break;
case 'generic':
default:
$pluginInterfaceClass = hikamarket::get('class.plugin');
$plugin_type = 'plugin';
break;
}
if(empty($pluginInterfaceClass))
return false;
$new = empty($plugin_id);
$oldPlugin = null;
if(!$new) {
if(!hikamarket::acl($plugin_type.'plugin/edit'))
return false;
$oldPlugin = $pluginInterfaceClass->get($plugin_id);
if(empty($oldPlugin))
return false;
if($vendor_id > 1 &&
(int)@$oldPlugin->{$plugin_type.'_vendor_id'} != $vendor_id)
return false;
} else if(!hikamarket::acl($plugin_type.'plugin/add'))
return false;
$plugin = new stdClass();
$plugin->{$plugin_type . '_params'} = new stdClass();
if($vendor_id > 1)
$plugin->{$plugin_type.'_vendor_id'} = $vendor_id;
$plugin->{$plugin_type . '_type'} = $plugin_name;
if(!$new)
$plugin->{$plugin_type . '_id'} = $plugin_id;
$formData = hikaInput::get()->get('data', array(),
'array');
if(empty($formData[$plugin_type]))
return false;
if($plugin_type == 'payment' && $vendor_id > 1)
$plugin->{$plugin_type . '_params'}->payment_vendor_id =
(int)$vendor_id;
$fields = $pluginInterfaceClass->loadConfigurationFields();
if(empty($fields['main']))
return false;
$fields['main'][$plugin_type.'_name'] = array(
'name' => 'HIKA_NAME',
'type' => 'input'
);
$fields['main'][$plugin_type.'_description'] =
array(
'name' => 'HIKA_DESCRIPTION',
'type' => 'wysiwyg',
'format' => 'text'
);
foreach($fields['main'] as $k => $v) {
$key = str_replace(array('params.'.$plugin_type.'_',
$plugin_type.'_', '_'), array('',
'', '-'), $k);
if(!hikamarket::acl($plugin_type . 'plugin/edit/' . $key))
unset($fields['main'][$k]);
}
if(!empty($fields['restriction'])) {
foreach($fields['restriction'] as $k => $v) {
$key =
str_replace(array('params.'.$plugin_type.'_',
$plugin_type.'_', '_'), array('',
'', '-'), $k);
if(!hikamarket::acl($plugin_type . 'plugin/edit/restriction/'
. $key))
unset($fields['restriction'][$k]);
}
}
$process_fields = array_merge($fields['main'],
$fields['restriction']);
if(hikamarket::acl($plugin_type . 'plugin/edit/specific') ) {
if(!empty($pluginInstance->pluginConfig)) {
foreach($pluginInstance->pluginConfig as $k => $v) {
$val = array(
'name' => $v[0],
'type' => $v[1]
);
if($v[1] == 'wysiwyg') {
$val['format'] = 'wysiwyg';
$val['form_field'] = $plugin_type . '_params_' .
$k;
}
$process_fields['params.'.$k] = $val;
}
} else {
foreach($formData[$plugin_type][$plugin_type . '_params'] as
$k => $v) {
$plugin->{$plugin_type . '_params'}->$k = $v;
}
}
}
$processed = array();
foreach($process_fields as $fieldName => $field) {
$params = false;
$key = $fieldName;
if(substr($fieldName, 0, 7) == 'params.') {
$params = true;
$fieldName = substr($fieldName, 7);
}
$data = null;
if((isset($field['type']) && $field['type']
== 'wysiwyg') || (!empty($field['format']) &&
$field['format'] == 'text'))
$data = hikaInput::get()->getRaw(
isset($field['form_field']) ? $field['form_field'] :
$fieldName, '');
else if($params)
$data = @$formData[$plugin_type][$plugin_type .
'_params'][$fieldName];
else
$data = @$formData[$plugin_type][$fieldName];
if($data === null)
$data = '';
$format = !empty($field['format']) ?
$field['format'] : 'auto';
$data = $this->parseData($data, $format);
if($params)
$plugin->{$plugin_type . '_params'}->$fieldName =
$data;
else
$plugin->$fieldName = $data;
$processed[$key] = true;
if(!empty($field['link'])) {
$linkName = $field['link'];
$key = $linkName;
if($params) {
$key = 'params.' . $key;
} elseif(substr($linkName, 0, 7) == 'params.') {
$params = true;
$linkName = substr($linkName, 7);
}
if(empty($processed[$key])) {
if($params)
$data = @$formData[$plugin_type][$plugin_type .
'_params'][$linkName];
else
$data = @$formData[$plugin_type][$linkName];
$format = !empty($field['linkformat']) ?
$field['linkformat'] : 'auto';
$data = $this->parseData($data, $format);
if($params)
$plugin->{$plugin_type . '_params'}->$linkName =
$data;
else
$plugin->$linkName = $data;
$processed[$key] = true;
}
}
}
if(hikamarket::acl($plugin_type . 'plugin/edit/specific')
&& empty($pluginInstance->pluginConfig)) {
foreach($fields['main'] as $k => $v) {
if(substr($k, 0, 7) != 'params.')
continue;
$k = substr($k, 7);
$key = str_replace(array($plugin_type.'_', '_'),
array('', '-'), $k);
if(!hikamarket::acl($plugin_type . 'plugin/edit/' . $key))
unset($plugin->{$plugin_type . '_params'}->$k);
}
if(!empty($fields['restriction'])) {
foreach($fields['restriction'] as $k => $v) {
if(substr($k, 0, 7) != 'params.')
continue;
$k = substr($k, 7);
$key = str_replace(array($plugin_type.'_', '_'),
array('', '-'), $k);
if(!hikamarket::acl($plugin_type .
'plugin/edit/restriction/' . $key))
unset($plugin->{$plugin_type . '_params'}->$k);
}
}
}
if($plugin_type == 'payment') {
if(!isset($plugin->payment_shipping_methods))
$plugin->payment_shipping_methods = array();
if(!isset($plugin->payment_currency))
$plugin->payment_currency = array();
} elseif($plugin_type == 'shipping') {
if(!isset($plugin->shipping_currency))
$plugin->shipping_currency = array();
}
$function =
'on'.ucfirst($plugin_type).'ConfigurationSave';
if(method_exists($pluginInstance, $function))
$pluginInstance->$function($plugin);
$status = $pluginInterfaceClass->save($plugin);
if(!$status) {
hikaInput::get()->set('fail', $plugin);
} else {
$app = JFactory::getApplication();
if(!HIKASHOP_J30)
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'),
'success');
else
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'));
if($new)
hikaInput::get()->set($plugin_type.'_id', $status);
}
return $status;
}
public function parseData($data, $format) {
if(empty($this->safeHtmlFilter))
$this->safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
switch($format) {
case 'text':
case 'wysiwyg':
if(is_array($data))
$data = reset($data);
$data = $this->safeHtmlFilter->clean(trim($data),
'string');
break;
case 'string':
if(is_array($data))
$data = reset($data);
$data = $this->safeHtmlFilter->clean(strip_tags(trim($data)),
'string');
break;
case 'boolean':
case 'int':
if(is_array($data))
$data = reset($data);
$data = trim($data);
if($format == 'boolean' || $data !== '')
$data = (int)$data;
break;
case 'float':
if(is_array($data))
$data = reset($data);
$data = trim($data);
if($data !== '')
$data = (float)hikamarket::toFloat($data);
break;
case 'arrayString':
if(!is_array($data)) {
if($data !== '')
$data = array($data);
else
$data = array();
}
foreach($data as &$d) {
$d = $this->safeHtmlFilter->clean(strip_tags(trim($d)),
'string');
}
unset($d);
$data = implode(',', $data);
break;
case 'acl':
if(empty($data) || $data == 'all') {
$data = 'all';
break;
}
case 'arrayInt':
if(!is_array($data)) {
if($data !== '')
$data = array($data);
else
$data = array();
}
foreach($data as &$d) {
$d = (int)trim($d);
}
unset($d);
$data = implode(',', $data);
break;
case 'auto':
default:
if(is_array($data)) {
foreach($data as &$d) {
$d = $this->safeHtmlFilter->clean(strip_tags(trim($d)),
'string');
}
unset($d);
} else
$data = $this->safeHtmlFilter->clean(strip_tags(trim($data)),
'string');
break;
}
return $data;
}
public function save(&$plugin) {
JPluginHelper::importPlugin('hikamarket');
$pluginClass = hikamarket::get('shop.class.plugin');
$status = $pluginClass->save($plugin);
return $status;
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
if(isset($typeConfig['params']['type']) &&
$typeConfig['params']['type'] == 'images') {
$image_type = @$options['type'];
if(!in_array($image_type, array('shipping',
'payment')))
return $ret;
$path = HIKASHOP_MEDIA.'images'.DS.$image_type.DS;
jimport('joomla.filesystem.folder');
$images = JFolder::files($path);
$rows = array();
foreach($images as $image){
$parts = explode('.',$image);
$row = new stdClass();
$row->ext = array_pop($parts);
if(!in_array(strtolower($row->ext),
array('gif','png','jpg','jpeg','svg')))
continue;
$row->id = implode($parts);
$row->image_name = str_replace('_', ' ',
$row->id);
$row->image_file = $image;
$row->image_url = '<img src="'.HIKASHOP_IMAGES
.$image_type.'/'. $row->image_file.'" />';
$rows[$row->id] = $row;
}
if(!empty($value)) {
if(is_string($value))
$value = explode(',', $value);
foreach($value as $v) {
if(isset($rows[$v]))
$ret[1][$v] = $rows[$v];
}
}
if(!empty($rows))
$ret[0] = $rows;
}
return $ret;
}
public function toggleId($task, $value = null) {
if($value !== null) {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value == 0 ||
empty($this->toggle[$task]) ||
!hikamarket::acl('genericplugin/edit/'.$task) ||
!hikamarket::isVendorPlugin((int)$value, 'plugin') ))
return false;
}
if(!empty($this->toggle[$task]))
return $this->toggle[$task];
return false;
}
public function toggleDelete($value1 = '', $value2 =
'') {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value1 == 0 ||
!hikamarket::acl('genericplugin/delete') ||
!hikamarket::isVendorPlugin((int)$value1, 'plugin')))
return false;
if(!empty($this->deleteToggle))
return $this->deleteToggle;
return false;
}
}
classes/plugins.php000064400000005236151160562270010406 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketPluginsClass extends hikamarketClass {
public function __construct($config = array()) {
$this->toggle = array('enabled' =>
'extension_id');
$this->pkeys = array('extension_id');
$this->tables = array('joomla.extensions');
return parent::__construct($config);
}
public function getTable() {
return hikamarket::table('extensions', false);
}
public function params(&$methods,$type){
if(empty($methods))
return;
$params = $type.'_params';
foreach($methods as $k => $el){
if(!empty($el->$params))
$methods[$k]->$params = @hikamarket::unserialize($el->$params);
}
}
public function get($id, $default = null){
$result = parent::get($id);
$this->loadParams($result);
return $result;
}
public function getByName($type, $name) {
$table = $this->getTable();
$query = 'SELECT * FROM ' . $table . ' WHERE folder='
. $this->db->Quote($type) . ' AND element=' .
$this->db->Quote($name) . ' AND
type=\'plugin\'';
$this->db->setQuery($query);
$result = $this->db->loadObject();
$this->loadParams($result);
return $result;
}
private function loadParams(&$result) {
if(empty($result->params))
return;
$registry = new JRegistry();
if(!HIKASHOP_J30)
$registry->loadJSON($result->params);
else
$registry->loadString($result->params, 'JSON');
$result->params = $registry->toArray();
}
public function save(&$element) {
if(!empty($element->params)) {
$handler = JRegistryFormat::getInstance('JSON');
$element->params = $handler->objectToString($element->params);
}
return parent::save($element);
}
public function getPlugin($name, $type = 'hikamarket') {
$ret = $this->getPlugins($type, $name);
if(!empty($ret)){
if(count($ret) == 1)
return reset($ret);
return $ret;
}
return null;
}
public function getPlugins($type = 'hikamarket', $name =
'') {
$where = array();
if(!empty($name)) {
$where[] = $type.'_type='.$this->db->Quote($name);
}
if(!empty($where)) {
$where = ' WHERE '.implode(' AND ',$where);
} else {
$where = '';
}
$query = 'SELECT * FROM '.hikamarket::table($type).'
'.$where;
$this->db->setQuery($query);
$methods = $this->db->loadObjectList($type.'_id');
$this->params($methods, $type);
if(empty($methods)) {
$methods = array();
}
return $methods;
}
}
classes/product.php000064400000325705151160562270010413 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketProductClass extends hikamarketClass {
protected $tables = array('shop.product');
protected $pkeys = array('product_id');
protected $toggle = array('product_published' =>
'product_id');
protected $toggleAcl = array('product_published' =>
'product/edit/published');
protected $deleteToggle = array('shop.product' =>
'product_id');
public function frontSaveForm() {
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$product_id = hikamarket::getCID('product_id');
$productClass = hikamarket::get('shop.class.product');
$fieldsClass = hikamarket::get('shop.class.field');
$vendorClass = hikamarket::get('class.vendor');
$vendor = hikamarket::loadVendor(true, false);
$vendor_id = $vendor->vendor_id;
$formData = hikaInput::get()->get('data', array(),
'array');
$formProduct = array();
if(!empty($formData['product']))
$formProduct = $formData['product'];
$ret = true;
$new = empty($product_id);
$oldProduct = null;
if(!$new) {
$oldProduct = $productClass->get($product_id);
$editAllVendors = ($vendor_id == 1 &&
hikamarket::acl('product/subvendor'));
if(!in_array($oldProduct->product_type, array('main',
'variant', 'waiting_approval')))
return false;
if($oldProduct->product_type == 'variant') {
$parent_product =
$productClass->get($oldProduct->product_parent_id);
if((int)$parent_product->product_vendor_id > 1)
return false;
}
$productVendorId = (int)$oldProduct->product_vendor_id;
if($productVendorId != $vendor_id && !$editAllVendors &&
($productVendorId > 1 || $vendor_id > 1))
return false;
} else {
if(!hikamarket::acl('product/add'))
return false;
if($vendorClass->checkProductLimitation($vendor) !== true)
return false;
$rootCategory = $vendorClass->getRootCategory($vendor_id);
if(empty($rootCategory)) {
$categoryClass = hikamarket::get('shop.class.category');
$rootCategory = 'product';
$categoryClass->getMainElement($rootCategory);
}
$oldProduct = new stdClass();
$oldProduct->categories = array();
if(!empty($formProduct['categories']))
$oldProduct->categories = $formProduct['categories'];
hikamarket::toInteger($oldProduct->categories);
if(!count($oldProduct->categories) && !empty($rootCategory))
$oldProduct->categories = array($rootCategory);
}
$product = $fieldsClass->getInput('product', $oldProduct,
true, 'data', false, 'display:vendor_product_edit'); //
'all');
if(empty($product)) {
$product = @$_SESSION['hikashop_product_data'];
if(empty($product) || !is_object($product))
$product = new stdClass();
$ret = false;
}
$aclKey = ($vendor_id > 1 && ($new ||
@$oldProduct->product_type == 'waiting_approval') &&
hikamarket::acl('product/new')) ? 'product/new/' :
'product/edit/';
$this->db->setQuery('SELECT field.* FROM
'.hikamarket::table('shop.field').' as field WHERE
field.field_table =
'.$this->db->Quote('product').' ORDER BY
field.`field_ordering` ASC');
$all_fields =
$this->db->loadObjectList('field_namekey');
$edit_fields = hikamarket::acl($aclKey.'customfields');
foreach($all_fields as $fieldname => $field) {
if(!$edit_fields || empty($field->field_published) ||
(strpos($field->field_display, ';vendor_product_edit=1') ===
false) ) {
unset($product->$fieldname);
}
}
$product->product_id = (int)$product_id;
if($new) {
$reset = true;
if(!empty($product->product_type) &&
$product->product_type == 'variant' &&
!empty($product->product_parent_id)) {
$query = 'SELECT c.characteristic_id, p.product_id,
p.product_vendor_id, p.product_code FROM ' .
hikamarket::table('shop.variant') . ' AS v '.
' INNER JOIN ' .
hikamarket::table('shop.characteristic') . ' AS c ON
v.variant_characteristic_id = c.characteristic_id '.
' INNER JOIN ' . hikamarket::table('shop.product')
. ' AS p ON v.variant_product_id = p.product_id '.
' WHERE c.characteristic_parent_id = 0 AND c.characteristic_alias
= \'vendor\' AND v.variant_product_id = ' .
(int)$product->product_parent_id.' '.
' ORDER BY v.ordering ASC';
$db = JFactory::getDBO();
$db->setQuery($query);
$parent_data = $db->loadObject();
if(!empty($parent_data) &&
(int)$parent_data->product_vendor_id == 0) {
$reset = false;
if(empty($product->product_code))
$product->product_code = $parent_data->product_code .
'_v_' . $vendor_id;
}
}
if($reset) {
$product->product_type = 'main';
unset($product->product_parent_id);
if($config->get('product_approval', 0) &&
!hikamarket::acl('product/approve'))
$product->product_type = 'waiting_approval';
}
} else {
$product->product_type = $oldProduct->product_type;
unset($product->product_parent_id);
}
if($new && !empty($vendor_id))
$product->product_vendor_id = $vendor_id;
if( !hikamarket::level(1) || ($vendor_id > 1 &&
isset($product->product_vendor_id) &&
$product->product_vendor_id != $vendor_id) || ($vendor_id == 1
&& !hikamarket::acl('product/edit/vendor')) ) {
unset($product->product_vendor_id);
}
if(!hikamarket::acl($aclKey.'name')) {
unset($product->product_name); }
if(!hikamarket::acl($aclKey.'code')) {
unset($product->product_code); }
if(!hikamarket::acl($aclKey.'weight')) {
unset($product->product_weight); }
if(!hikamarket::acl($aclKey.'volume')) {
unset($product->product_volume); }
if(!hikamarket::acl($aclKey.'published')) {
unset($product->product_published); }
if(!hikamarket::acl($aclKey.'manufacturer')) {
unset($product->product_manufacturer_id); }
if(!hikamarket::acl($aclKey.'pagetitle')) {
unset($product->product_page_title); }
if(!hikamarket::acl($aclKey.'url')) {
unset($product->product_url); }
if(!hikamarket::acl($aclKey.'metadescription')) {
unset($product->product_meta_description); }
if(!hikamarket::acl($aclKey.'keywords')) {
unset($product->product_keywords); }
if(!hikamarket::acl($aclKey.'alias')) {
unset($product->product_alias); }
if(!hikamarket::acl($aclKey.'acl')) {
unset($product->product_access); }
if(!hikamarket::acl($aclKey.'msrp')) {
unset($product->product_msrp); }
if(!hikamarket::acl($aclKey.'canonical')) {
unset($product->product_canonical); }
if(!hikamarket::acl($aclKey.'warehouse')) {
unset($product->product_warehouse_id); }
if(!hikamarket::acl($aclKey.'tax')) {
unset($product->product_tax_id); }
if(!hikamarket::acl($aclKey.'quantity')) {
unset($product->product_quantity); }
if(hikamarket::acl($aclKey.'qtyperorder')) {
if(isset($product->product_max_per_order))
$product->product_max_per_order =
(int)$product->product_max_per_order;
if(isset($product->product_min_per_order))
$product->product_min_per_order =
(int)$product->product_min_per_order;
} else {
unset($product->product_max_per_order);
unset($product->product_min_per_order);
}
unset($product->tags);
if(hikamarket::acl($aclKey.'tags')) {
$tagsHelper = hikamarket::get('shop.helper.tags');
if(!empty($tagsHelper) && $tagsHelper->isCompatible())
$product->tags = empty($formData['tags']) ? array() :
$formData['tags'];
}
$removeFields = array(
'contact', 'delay_id', 'waitlist',
'display_quantity_field', 'price_percentage',
'group_after_purchase',
'status', 'hit', 'created',
'modified', 'last_seen_date', 'sales',
'layout', 'average_score', 'total_vote',
);
foreach($removeFields as $rf) {
$rf = 'product_'.$rf;
unset($product->$rf);
}
if(hikamarket::acl($aclKey.'description')) {
$product->product_description =
hikaInput::get()->getRaw('product_description',
'');
$product->product_description_raw =
hikaInput::get()->getRaw('product_description_raw', null);
$default_description_type =
$shopConfig->get('default_description_type', '');
if(empty($product_id) && !empty($default_description_type))
$product->product_description_type = $default_description_type;
if(!empty($oldProduct->product_description_type))
$product->product_description_type =
$oldProduct->product_description_type;
if($product->product_description_raw !== null &&
!empty($product->product_description_type) &&
$product->product_description_type != 'html') {
$contentparserType =
hikamarket::get('shop.type.contentparser');
$description_types = $contentparserType->load();
if(isset($description_types[ $product->product_description_type ]))
{
$product->product_description =
$product->product_description_raw;
JPluginHelper::importPlugin('hikashop');
$app->triggerEvent('onHkContentParse', array(
&$product->product_description,
$product->product_description_type ));
} else {
$product->product_description_type = null;
unset($product->product_description);
}
}
if((int)$config->get('vendor_safe_product_description', 1))
{
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$product->product_description =
$safeHtmlFilter->clean($product->product_description,
'string');
}
$strip_tags =
$config->get('vendor_striptags_product_description',
'');
if(!empty($strip_tags)) {
$product->product_description =
strip_tags($product->product_description, $strip_tags);
}
}
if(hikamarket::acl($aclKey.'category')) {
$categoryClass = hikamarket::get('shop.class.category');
$vendor_chroot = $vendorClass->getRootCategory($vendor);
$rootCategory = $vendor_chroot;
if(empty($rootCategory)) {
$rootCategory = 'product';
$categoryClass->getMainElement($rootCategory);
}
$product->categories = array();
if(!empty($formProduct['categories']))
$product->categories = $formProduct['categories'];
hikamarket::toInteger($product->categories);
if(empty($product->product_id) &&
empty($product->categories) && !empty($rootCategory)) {
$product->categories = array($rootCategory);
}
if(!empty($vendor_chroot)) {
$oldCategories = array();
if(!$new) {
$query = 'SELECT category_id FROM ' .
hikamarket::table('shop.product_category') . ' WHERE
product_id = ' . (int)$product->product_id . ' ORDER BY
ordering';
$this->db->setQuery($query);
$oldCategories = $this->db->loadColumn();
}
$extra_categories = $vendorClass->getExtraCategories($vendor);
$product->categories =
$vendorClass->filterCategories($product->categories, $vendor_chroot,
$oldCategories, $extra_categories);
}
if(empty($product->categories))
$product->categories = array($rootCategory);
if($vendor_id > 1) {
$vendor_limitation = $config->vendorget($vendor,
'product_max_categories_per_product', 0);
if($vendor_limitation > 0 && count($product->categories)
> $vendor_limitation) {
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_MAX_CATEGORIES_PER_PRODUCT_MSG',
$vendor_limitation), 'error');
return false;
}
}
} else if($new) {
$rootCategory = 0;
$category_explorer = $config->get('show_category_explorer',
1);
if($category_explorer)
$rootCategory =
$app->getUserState(HIKAMARKET_COMPONENT.'.product.listing_cid');
if(empty($rootCategory) || !is_numeric($rootCategory)){
$rootCategory = $vendorClass->getRootCategory($vendor_id);
if(empty($rootCategory)) {
$rootCategory = 'product';
$categoryClass = hikamarket::get('shop.class.category');
$categoryClass->getMainElement($rootCategory);
}
}
if(!empty($rootCategory)) {
$product->categories = array($rootCategory);
}
} else {
unset( $product->categories );
}
if(hikamarket::acl($aclKey.'related')) {
$related = @$formProduct['related'];
$product->related = array();
if(!empty($related)) {
$k = 0;
foreach($related as $r) {
$obj = new stdClass();
$obj->product_related_id = (int)$r;
$obj->product_related_ordering = $k++;
$product->related[] = $obj;
}
}
if($vendor_id > 1) {
$vendor_limitation = (int)$config->vendorget($vendor,
'product_max_related_per_product', 0);
if($vendor_limitation > 0 && count($product->related)
> $vendor_limitation) {
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_MAX_RELATED_PER_PRODUCT_MSG',
$vendor_limitation), 'error');
$ret = false;
}
}
} else {
unset($product->related);
}
if(hikamarket::acl($aclKey.'options')) {
$options = @$formProduct['options'];
$product->options = array();
if(!empty($options)) {
$k = 0;
foreach($options as $r) {
$obj = new stdClass();
$obj->product_related_id = (int)$r;
$obj->product_related_ordering = $k++;
$product->options[] = $obj;
}
}
if($vendor_id > 1) {
$vendor_limitation = (int)$config->vendorget($vendor,
'product_max_options_per_product', 0);
if($vendor_limitation > 0 && count($product->options)
> $vendor_limitation) {
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_MAX_OPTIONS_PER_PRODUCT_MSG',
$vendor_limitation), 'error');
$ret = false;
}
}
} else {
unset($product->options);
}
if(hikashop_level(1) &&
hikamarket::acl($aclKey.'bundle')) {
$options = @$formProduct['bundle'];
$product->bundle = array();
if(!empty($options)) {
$k = 0;
foreach($options as $pid => $r) {
if(empty($r))
continue;
$obj = new stdClass();
$obj->product_related_id = (int)$pid;
$obj->product_related_quantity = (int)$r;
$obj->product_related_ordering = $k++;
$product->bundle[] = $obj;
}
}
} else {
unset($product->bundle);
}
if(hikamarket::acl($aclKey.'price')) {
$acls = array(
'value' =>
hikamarket::acl($aclKey.'price/value'),
'tax' => hikamarket::acl($aclKey.'price/tax'),
'currency' =>
hikamarket::acl($aclKey.'price/currency'),
'quantity' =>
hikamarket::acl($aclKey.'price/quantity'),
'acl' => hikashop_level(2) &&
hikamarket::acl($aclKey.'price/acl'),
'user' => hikashop_level(2) &&
hikamarket::acl($aclKey.'price/user'),
'date' => hikashop_level(2) &&
hikamarket::acl($aclKey.'price/date'),
);
if(!empty($oldProduct) && !empty($oldProduct->product_id)) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.price').' WHERE
price_product_id = ' . (int)$oldProduct->product_id;
$this->db->setQuery($query);
$oldProduct->prices = $this->db->loadObjectList();
}
$priceData = hikaInput::get()->get('price', array(),
'array');
if(!empty($oldProduct) && !empty($oldProduct->product_type)
&& $oldProduct->product_type == 'variant')
$priceData = hikaInput::get()->get('variantprice',
array(), 'array');
$product->prices = array();
foreach($priceData as $k => $value) {
if((int)$k == 0 && $k !== 0 && $k !== '0')
continue;
$price_id = (int)@$value['price_id'];
if(!empty($oldProduct) && !empty($price_id) &&
!empty($oldProduct->prices)) {
foreach($oldProduct->prices as $p) {
if($p->price_id == $price_id) {
$product->prices[$k] = $p;
break;
}
}
}
if(empty($product->prices[$k]))
$product->prices[$k] = new stdClass();
if(($acls['value'] || $acls['tax']) &&
isset($value['price_value']))
$product->prices[$k]->price_value =
hikamarket::toFloat($value['price_value']);
if($acls['acl'] &&
isset($value['price_access']))
$product->prices[$k]->price_access =
preg_replace('#[^a-z0-9,]#i', '',
$value['price_access']);
if($acls['user'] &&
isset($value['price_users'])) {
if(is_array($value['price_users']))
$value['price_users'] = implode(',',
$value['price_users']);
$value['price_users'] = preg_replace('#[^0-9,]#i',
'', trim($value['price_users'], ','));
if(!empty($value['price_users']))
$value['price_users'] =
','.$value['price_users'].',';
$product->prices[$k]->price_users =
$value['price_users'];
}
if($acls['date']) {
$product->prices[$k]->price_start_date =
isset($value['price_start_date']) ?
hikamarket::getTime($value['price_start_date']) : '';
$product->prices[$k]->price_end_date =
isset($value['price_end_date']) ?
hikamarket::getTime($value['price_end_date']) : '';
}
if($acls['currency'] &&
isset($value['price_currency_id']))
$product->prices[$k]->price_currency_id =
(int)$value['price_currency_id'];
if(empty($product->prices[$k]->price_currency_id))
$product->prices[$k]->price_currency_id =
$shopConfig->get('main_currency',1);
if($acls['quantity'] &&
isset($value['price_min_quantity'])) {
$product->prices[$k]->price_min_quantity =
(int)$value['price_min_quantity'];
if($product->prices[$k]->price_min_quantity == 1)
$product->prices[$k]->price_min_quantity = 0;
}
if(empty($product->prices[$k]->price_min_quantity))
$product->prices[$k]->price_min_quantity = 0;
}
if($vendor_id > 1) {
$vendor_limitation = (int)$config->vendorget($vendor,
'product_max_prices_per_product', 0);
if($vendor_limitation > 0 && count($product->prices) >
$vendor_limitation) {
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_MAX_PRICES_PER_PRODUCT_MSG',
$vendor_limitation), 'error');
$ret = false;
}
$limit_min_price = $config->vendorget($vendor,
'product_min_price', null);
$limit_max_price = $config->vendorget($vendor,
'product_max_price', null);
if(!empty($limit_min_price)) $limit_min_price =
json_decode($limit_min_price, true);
if(!empty($limit_max_price)) $limit_max_price =
json_decode($limit_max_price, true);
if(!empty($limit_min_price) || !empty($limit_max_price)) {
$currencyClass = hikamarket::get('shop.class.currency');
foreach($product->prices as $p) {
$min = (isset($limit_min_price[$p->price_currency_id]) &&
$p->price_value < $limit_min_price[$p->price_currency_id]);
$max = (isset($limit_max_price[$p->price_currency_id]) &&
$p->price_value > $limit_max_price[$p->price_currency_id]);
if(!$min && !$max)
continue;
if($min) {
$min_price =
$currencyClass->format($limit_min_price[$p->price_currency_id],
$p->price_currency_id);
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_MIN_PRICE_MSG',
$min_price), 'error');
} else {
$max_price =
$currencyClass->format($limit_max_price[$p->price_currency_id],
$p->price_currency_id);
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_MAX_PRICE_MSG',
$max_price), 'error');
}
$ret = false;
}
if(empty($product->prices) && !empty($limit_min_price)) {
foreach($limit_min_price as $curr_id => $price_value) {
$min_price = $currencyClass->format($price_value, $curr_id);
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_MIN_PRICE_MSG',
$min_price), 'error');
}
$ret = false;
}
}
}
} else {
unset($product->prices);
}
unset($product->images);
unset($product->imagesorder);
if(hikamarket::acl($aclKey.'images')) {
$product->images = @$formProduct['product_images'];
hikamarket::toInteger($product->images);
$product->imagesorder = array();
foreach($product->images as $k => $v) {
$product->imagesorder[$v] = $k;
}
if($vendor_id > 1) {
$vendor_limitation = (int)$config->vendorget($vendor,
'product_max_images_per_product', 0);
if($vendor_limitation > 0 && count($product->images) >
$vendor_limitation) {
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_MAX_IMAGES_PER_PRODUCT_MSG',
$vendor_limitation), 'error');
$ret = false;
}
}
}
unset($product->product_images);
unset($product->files);
if(hikamarket::acl($aclKey.'files')) {
$product->files = @$formProduct['product_files'];
hikamarket::toInteger($product->files);
}
unset($product->product_files);
if(hikamarket::acl($aclKey.'saledates')) {
if(!empty($product->product_sale_start)){
$product->product_sale_start =
hikamarket::getTime($product->product_sale_start);
}
if(!empty($product->product_sale_end)){
$product->product_sale_end =
hikamarket::getTime($product->product_sale_end);
}
} else {
unset($product->product_sale_start);
unset($product->product_sale_end);
}
if(!empty($product->product_code))
$product->product_code = trim($product->product_code);
unset($product->characteristics);
unset($product->characteristic);
if(hikamarket::acl($aclKey.'characteristics') &&
!empty($formData['characteristics']) &&
is_array($formData['characteristics'])) {
$characteristics = $formData['characteristics'];
hikamarket::toInteger($characteristics);
if($new) {
$characteristics =
$this->checkProductCharacteristics($characteristics, $vendor_id, true);
if(!empty($characteristics))
$product->characteristics = $characteristics;
} else
$product->characteristics = $characteristics;
}
if($new) {
$template_id = 0;
if(!empty($vendor->vendor_template_id)) {
$template_id = $vendor->vendor_template_id;
} else if((int)$config->get('default_template_id', 0) >
0) {
$template_id = (int)$config->get('default_template_id',
0);
}
$app->triggerEvent('onProductTemplateLoad', array($product,
$vendor, $formData, &$template_id));
$template = null;
if(!empty($template_id))
$template = $this->getRaw($template_id, true);
if(!empty($template)) {
$exclude_template_fields = array(
'product_type','product_code','product_alias','product_hit','product_created','product_modified',
'product_last_seen_date','product_sales','product_canonical','product_alias',
'product_vendor_id','product_vendor_params','product_sort_price','product_average_score','product_total_vote'
);
foreach($template as $k => $v) {
if(!in_array($k, $exclude_template_fields) &&
!isset($product->$k))
$product->$k = $v;
}
}
}
if($shopConfig->get('alias_auto_fill', 1) &&
(empty($product->product_alias) &&
empty($product->old->product_alias)) &&
!empty($product->product_name)) {
$productClass->addAlias($product);
if($shopConfig->get('sef_remove_id', 0) &&
(int)$product->alias > 0)
$product->alias = $shopConfig->get('alias_prefix',
'p') . $product->alias;
$product->product_alias = $product->alias;
unset($product->alias);
}
$autoKeyMeta =
$shopConfig->get('auto_keywords_and_metadescription_filling',
0);
if($autoKeyMeta) {
$seoHelper = hikamarket::get('shop.helper.seo');
$seoHelper->autoFillKeywordMeta($product, 'product');
}
if(isset($product->product_name) &&
empty($product->product_name)) {
$app->enqueueMessage(JText::sprintf('HIKAM_FIELD_IS_REQUIRED',
JText::_('PRODUCT_NAME')), 'error');
$ret = false;
}
if(!empty($product->product_code) &&
!$config->get('avoid_duplicate_product_code', 0)) {
$query = 'SELECT product_id FROM
'.hikamarket::table('shop.product').
' WHERE product_type =
'.$this->db->Quote('main').' AND product_code =
'.$this->db->Quote($product->product_code);
if(!empty($product->product_id))
$query .= ' AND product_id !=
'.(int)$product->product_id;
$this->db->setQuery($query);
if($this->db->loadResult()) {
$app->enqueueMessage(JText::_('DUPLICATE_PRODUCT'),
'error');
$ret = false;
}
} else if(empty($product->product_code) &&
!empty($oldProduct->product_code)) {
$product->product_code = $oldProduct->product_code;
}
if(!$ret) {
hikaInput::get()->set('fail', $product);
return false;
}
$status = $this->save($product);
if(!$status) {
hikaInput::get()->set('fail', $product);
if(empty($product->product_id) &&
empty($product->product_code) &&
empty($product->product_name)) {
$app->enqueueMessage(JText::_('SPECIFY_NAME_AND_CODE'),
'error');
} else {
$query = 'SELECT product_id FROM
'.hikamarket::table('shop.product').' WHERE
product_code = '.$this->db->Quote($product->product_code) .
' AND NOT (product_id = ' . (int)(@$product->product_id) .
')';
$this->db->setQuery($query, 0, 1);
if($this->db->loadResult())
$app->enqueueMessage(JText::_('DUPLICATE_PRODUCT'),
'error');
else
$app->enqueueMessage(JText::_('PRODUCT_SAVE_UNKNOWN_ERROR'),
'error');
}
return $status;
}
if(hikamarket::acl($aclKey.'category') || $new)
$productClass->updateCategories($product, $status);
if(hikamarket::acl($aclKey.'price') || ($new &&
!empty($product->prices)))
$productClass->updatePrices($product, $status);
if(hikamarket::acl($aclKey.'files') || ($new &&
!empty($product->files)))
$productClass->updateFiles($product, $status, 'files');
if(hikamarket::acl($aclKey.'images') || ($new &&
!empty($product->images)))
$productClass->updateFiles($product, $status, 'images',
$product->imagesorder);
if(hikamarket::acl($aclKey.'related') || ($new &&
!empty($product->related)))
$productClass->updateRelated($product, $status,
'related');
if(hikamarket::acl($aclKey.'options') || ($new &&
!empty($product->options)))
$productClass->updateRelated($product, $status,
'options');
if(hikashop_level(1) &&
(hikamarket::acl($aclKey.'bundle') || ($new &&
!empty($product->bundle))))
$productClass->updateRelated($product, $status, 'bundle');
if((hikamarket::acl($aclKey.'characteristics') || $new)
&& !empty($product->characteristics)) {
if($new) {
$product->product_type = 'main';
$productClass->updateCharacteristics($product, $status, 0);
} else {
$query = 'UPDATE ' .
hikamarket::table('shop.variant') . ' SET ordering = CASE
variant_characteristic_id ';
foreach($product->characteristics as $key => $val) {
$query .= ' WHEN ' . (int)$val . ' THEN ' . ($key
+ 1);
}
$query .= ' ELSE ordering END WHERE variant_characteristic_id IN
('.implode(',', $product->characteristics).') AND
variant_product_id = ' . (int)$status;
$this->db->setQuery($query);
$this->db->execute();
}
if(!empty($product->product_code) &&
!empty($oldProduct->product_code) && $product->product_code
!= $oldProduct->product_code) {
if(HIKASHOP_J30)
$product_code = "'" .
$this->db->escape($oldProduct->product_code, true) .
"%'";
else
$product_code = "'" .
$this->db->getEscaped($oldProduct->product_code, true) .
"%'";
$query = 'UPDATE
'.hikamarket::table('shop.product').
' SET `product_code` = REPLACE(`product_code`,' .
$this->db->Quote($oldProduct->product_code) . ',' .
$this->db->Quote($product->product_code) . ')'.
' WHERE `product_code` LIKE '.$product_code.' AND
product_parent_id = '.(int)$product->product_id.' AND
product_type = '.$this->db->Quote('variant');
$this->db->setQuery($query);
$this->db->execute();
}
}
if(hikamarket::acl('product/variant') &&
!empty($formData['variant']))
$this->frontSaveVariantForm();
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'),
'success');
if($vendor_id > 1 ||
$config->get('always_send_product_email', 0)) {
$mailClass = hikamarket::get('class.mail');
$infos = new stdClass;
$infos->vendor = hikamarket::loadVendor(true);
$infos->user = hikamarket::loadUser(true);
$infos->product =& $product;
if($new)
$mail = $mailClass->load('product_creation', $infos);
else
$mail = $mailClass->load('product_modification', $infos);
if(!empty($mail) && $mail->published) {
if(!empty($mail->subject))
$mail->subject = JText::sprintf($mail->subject, HIKASHOP_LIVE);
else if($new)
$mail->subject =
JText::sprintf('EMAIL_MARKET_PRODUCT_CREATION', HIKASHOP_LIVE);
else
$mail->subject =
JText::sprintf('EMAIL_MARKET_PRODUCT_UPDATE', HIKASHOP_LIVE);
if(empty($mail->from_email)) {
$mail->from_email = $shopConfig->get('from_email');
$mail->from_name = $shopConfig->get('from_name');
}
if(HIKASHOP_J30) {
$mail->mailer->addReplyTo($mailClass->cleanEmail($infos->user->user_email),
$infos->user->name);
} else {
$mail->mailer->addReplyTo(array($infos->user->user_email,
$infos->user->name));
}
if(!empty($infos->email))
$mail->dst_email = $infos->email;
else
$mail->dst_email = $shopConfig->get('from_email');
if(!empty($infos->name))
$mail->dst_name = $infos->name;
else
$mail->dst_name = $shopConfig->get('from_name');
if(!empty($mail->dst_email))
$mailClass->sendMail($mail);
}
}
return $status;
}
public function frontSaveVariantForm() {
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$product_id = hikamarket::getCID('variant_id');
$parent_product_id = hikaInput::get()->getInt('product_id',
0);
$productClass = hikamarket::get('shop.class.product');
$fieldsClass = hikamarket::get('shop.class.field');
$vendorClass = hikamarket::get('class.vendor');
$vendor = hikamarket::loadVendor(true, false);
$vendor_id = $vendor->vendor_id;
$formData = hikaInput::get()->get('data', array(),
'array');
$formVariant = array();
if(!empty($formData['variant'])){
$formVariant = $formData['variant'];
}
if(!empty($formData['product'])) {
$product_id = (int)$formVariant['product_id'];
}
if(!hikamarket::acl('product/variant'))
return false;
$new = false;
$oldProduct = null;
$productParent = null;
if(empty($product_id))
$new = true;
if(!$new) {
$oldProduct = $productClass->get($product_id);
$editAllVendors = false;
if($vendor_id == 1 &&
hikamarket::acl('product/subvendor'))
$editAllVendors = true;
if($oldProduct->product_type != 'variant')
return false;
if((int)$oldProduct->product_parent_id != $parent_product_id
&& $parent_product_id > 0)
return false;
$parent_product_id = (int)$oldProduct->product_parent_id;
$productParent = $productClass->get($parent_product_id);
$productVendorId = (int)$oldProduct->product_vendor_id;
if($productVendorId == 0)
$productVendorId = (int)$productParent->product_vendor_id;
if($productVendorId != $vendor_id && !$editAllVendors &&
($productVendorId > 1 || $vendor_id > 1))
return false;
} else {
if(!hikamarket::acl('product/add'))
return false;
if(empty($parent_product_id))
return false;
$productParent = $productClass->get($parent_product_id);
if($productParent->product_type != 'main')
return false;
$productVendorId = (int)$productParent->product_vendor_id;
if($productVendorId != $vendor_id && !$editAllVendors &&
($productVendorId > 1 || $vendor_id > 1))
return false;
}
$product = $fieldsClass->getInput('variant', $oldProduct,
true, 'data', false, 'display:vendor_product_edit');
if(empty($product))
return false;
$this->db->setQuery('SELECT field.* FROM
'.hikamarket::table('shop.field').' as field WHERE
field.field_table =
'.$this->db->Quote('product').' ORDER BY
field.`field_ordering` ASC');
$all_fields =
$this->db->loadObjectList('field_namekey');
$edit_fields =
hikamarket::acl('product/variant/customfields');
foreach($all_fields as $fieldname => $field) {
if(!$edit_fields || empty($field->field_published) ||
(strpos($field->field_display, ';vendor_product_edit=1') ===
false) ) {
unset($product->$fieldname);
}
}
$product->product_id = $product_id;
$product->product_type = 'variant';
$product->product_parent_id = $parent_product_id; // TODO
if( !hikamarket::level(1) || ($vendor_id > 1 &&
isset($product->product_vendor_id) &&
$product->product_vendor_id != $vendor_id) || ($vendor_id == 1
&& !hikamarket::acl('product/edit/vendor')) ) {
unset($product->product_vendor_id);
}
if(hikamarket::acl('product/variant/characteristics')) {
$product->characteristics = array();
unset($product->characteristic);
$query = 'SELECT v.*, c.* FROM
'.hikamarket::table('shop.variant').' AS v '.
' INNER JOIN
'.hikamarket::table('shop.characteristic').' as c ON
v.variant_characteristic_id = c.characteristic_id '.
' WHERE variant_product_id = ' . (int)$parent_product_id;
$this->db->setQuery($query);
$characteristics =
$this->db->loadObjectList('characteristic_id');
$characteristic_ids = array();
foreach($characteristics as $characteristic) {
if((int)$characteristic->characteristic_parent_id == 0)
$characteristic_ids[(int)$characteristic->characteristic_id] =
(int)$characteristic->characteristic_id;
else
$characteristics[(int)$characteristic->characteristic_parent_id]->default
= (int)$characteristic->characteristic_id;
}
$query = 'SELECT c.* FROM ' .
hikamarket::table('shop.characteristic') . ' AS c '.
' WHERE c.characteristic_parent_id IN
('.implode(',', $characteristic_ids).')';
$this->db->setQuery($query);
$characteristics_values =
$this->db->loadObjectList('characteristic_id');
foreach($characteristics as $characteristic) {
if((int)$characteristic->characteristic_parent_id == 0) {
$i = (int)$characteristic->characteristic_id;
$v = (int)@$formVariant['characteristic'][$i];
if(isset($characteristics_values[$v]) &&
$characteristics_values[$v]->characteristic_parent_id = $i)
$product->characteristics[$v] = $i;
else
$product->characteristics[$characteristic->default] = $i;
}
}
} else {
unset($product->characteristics);
unset($product->characteristic);
}
if(!hikamarket::acl('product/variant/name')) {
unset($product->product_name); }
if(!hikamarket::acl('product/variant/code')) {
unset($product->product_code); }
if(!hikamarket::acl('product/variant/weight')) {
unset($product->product_weight); }
if(!hikamarket::acl('product/variant/volume')) {
unset($product->product_volume); }
if(!hikamarket::acl('product/variant/published')) {
unset($product->product_published); }
if(!hikamarket::acl('product/variant/acl')) {
unset($product->product_access); }
if(!hikamarket::acl('product/variant/quantity')) {
unset($product->product_quantity); }
if(hikamarket::acl('product/variant/qtyperorder')) {
if(isset($product->product_max_per_order))
$product->product_max_per_order =
(int)$product->product_max_per_order;
if(isset($product->product_min_per_order))
$product->product_min_per_order =
(int)$product->product_min_per_order;
} else {
unset($product->product_max_per_order);
unset($product->product_min_per_order);
}
$removeFields = array(
'manufacturer_id', 'page_title', 'url',
'meta_description', 'keywords', 'alias',
'msrp', 'canonical',
'contact', 'delay_id', 'tax_id',
'waitlist', 'display_quantity_field',
'status', 'hit', 'created',
'modified', 'last_seen_date', 'sales',
'layout', 'average_score', 'total_vote',
'warehouse_id', 'group_after_purchase',
);
foreach($removeFields as $rf) {
$rf = 'product_'.$rf;
unset($product->$rf);
}
unset($product->categories);
unset($product->related);
unset($product->options);
if(hikamarket::acl('product/variant/description')) {
$product->product_description =
hikaInput::get()->getRaw('product_variant_description',
'');
$product->product_description_raw =
hikaInput::get()->getRaw('product_variant_description_raw',
null);
$default_description_type =
$shopConfig->get('default_description_type', '');
if($new && !empty($default_description_type))
$product->product_description_type = $default_description_type;
if($new && isset($productParent->product_description_type))
$product->product_description_type =
$productParent->product_description_type;
if(!empty($oldProduct->product_description_type))
$product->product_description_type =
$oldProduct->product_description_type;
if($product->product_description_raw !== null &&
!empty($product->product_description_type) &&
$product->product_description_type != 'html') {
$contentparserType =
hikamarket::get('shop.type.contentparser');
$description_types = $contentparserType->load();
if(isset($description_types[ $product->product_description_type ]))
{
$product->product_description =
$product->product_description_raw;
JPluginHelper::importPlugin('hikashop');
$app->triggerEvent('onHkContentParse', array(
&$product->product_description,
$product->product_description_type ));
} else {
$product->product_description_type = null;
unset($product->product_description);
}
}
if((int)$config->get('vendor_safe_product_description', 1))
{
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$product->product_description =
$safeHtmlFilter->clean($product->product_description,
'string');
}
$strip_tags =
$config->get('vendor_striptags_product_description',
'');
if(!empty($strip_tags)) {
$product->product_description =
strip_tags($product->product_description, $strip_tags);
}
}
if(hikamarket::acl('product/variant/price')) {
$acls = array(
'value' =>
hikamarket::acl('product/variant/price/value'),
'tax' =>
hikamarket::acl('product/variant/price/tax'),
'currency' =>
hikamarket::acl('product/variant/price/currency'),
'quantity' =>
hikamarket::acl('product/variant/price/quantity'),
'acl' => hikashop_level(2) &&
hikamarket::acl('product/variant/price/acl'),
'user' => hikashop_level(2) &&
hikamarket::acl('product/variant/price/user'),
'date' => hikashop_level(2) &&
hikamarket::acl('product/variant/price/date')
);
if(!empty($oldProduct)) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.price').' WHERE
price_product_id = ' . (int)$oldProduct->product_id;
$this->db->setQuery($query);
$oldProduct->prices = $this->db->loadObjectList();
}
$priceData = hikaInput::get()->get('variantprice', array(),
'array');
$product->prices = array();
foreach($priceData as $k => $value) {
if((int)$k == 0 && $k !== 0 && $k !== '0')
continue;
$price_id = (int)@$value['price_id'];
if(!empty($oldProduct) && !empty($price_id) &&
!empty($oldProduct->prices)) {
foreach($oldProduct->prices as $p) {
if($p->price_id == $price_id) {
$product->prices[$k] = $p;
break;
}
}
}
if(empty($product->prices[$k]))
$product->prices[$k] = new stdClass();
if(($acls['value'] || $acls['tax']) &&
isset($value['price_value']))
$product->prices[$k]->price_value =
hikamarket::toFloat($value['price_value']);
if($acls['acl'] &&
isset($value['price_access']))
$product->prices[$k]->price_access =
preg_replace('#[^a-z0-9,]#i', '',
$value['price_access']);
if($acls['currency'] &&
isset($value['price_currency_id']))
$product->prices[$k]->price_currency_id =
(int)$value['price_currency_id'];
if(empty($product->prices[$k]->price_currency_id))
$product->prices[$k]->price_currency_id =
$shopConfig->get('main_currency',1);
if($acls['quantity'] &&
isset($value['price_min_quantity'])) {
$product->prices[$k]->price_min_quantity =
(int)$value['price_min_quantity'];
if($product->prices[$k]->price_min_quantity == 1)
$product->prices[$k]->price_min_quantity = 0;
}
if($acls['date']) {
$product->prices[$k]->price_start_date =
!empty($value['price_start_date']) ?
hikamarket::getTime($value['price_start_date']) : '';
$product->prices[$k]->price_end_date =
!empty($value['price_end_date']) ?
hikamarket::getTime($value['price_end_date']) : '';
}
if(empty($product->prices[$k]->price_min_quantity))
$product->prices[$k]->price_min_quantity = 0;
}
} else {
unset($product->prices);
}
if(hikamarket::acl('product/variant/images')) {
$product->images = @$formVariant['product_images'];
hikamarket::toInteger($product->images);
$product->imagesorder = array();
foreach($product->images as $k => $v) {
$product->imagesorder[$v] = $k;
}
} else {
unset($product->imagesorder);
}
unset($product->product_images);
if(hikamarket::acl('product/variant/files')) {
$product->files = @$formVariant['product_files'];
hikamarket::toInteger($product->files);
} else {
unset($product->files);
}
unset($product->product_files);
if(hikamarket::acl('product/variant/saledates')) {
if(!empty($product->product_sale_start)){
$product->product_sale_start =
hikamarket::getTime($product->product_sale_start);
}
if(!empty($product->product_sale_end)){
$product->product_sale_end =
hikamarket::getTime($product->product_sale_end);
}
} else {
unset($product->product_sale_start);
unset($product->product_sale_end);
}
if(!empty($product->product_code))
$product->product_code = trim($product->product_code);
$status = $this->save($product);
if($status) {
if(hikamarket::acl('product/variant/price'))
$productClass->updatePrices($product, $status);
if(hikamarket::acl('product/variant/files'))
$productClass->updateFiles($product, $status, 'files');
if(hikamarket::acl('product/variant/images'))
$productClass->updateFiles($product, $status, 'images',
$product->imagesorder);
if(hikamarket::acl('product/variant/characteristics'))
$productClass->updateCharacteristics($product, $status);
} else {
hikaInput::get()->set('fail', $product);
if(empty($product->product_id) &&
empty($product->product_code) &&
empty($product->product_name)) {
$app->enqueueMessage(JText::_('SPECIFY_NAME_AND_CODE'),
'error');
} else {
$query = 'SELECT product_id FROM
'.hikamarket::table('shop.product').' WHERE
product_code = '.$this->db->Quote($product->product_code) .
' AND NOT (product_id = ' . (int)(@$product->product_id) .
')';
$this->db->setQuery($query, 0, 1);
if($this->db->loadResult()) {
$app->enqueueMessage(JText::_('DUPLICATE_PRODUCT'),
'error');
} else {
$app->enqueueMessage(JText::_('PRODUCT_SAVE_UNKNOWN_ERROR'),
'error');
}
}
}
return $product_id;
}
public function addCharacteristic($product_id, $characteristic_id,
$characteristic_value_id, $vendor_id = 0) {
if((int)$product_id <= 0 || (int)$characteristic_id <= 0 ||
(int)$characteristic_value_id <= 0)
return false;
$product_characteristics =
$this->getProductCharacteristics($product_id);
if(in_array((int)$characteristic_id, $product_characteristics))
return false;
$new_characteristics = array_merge($product_characteristics,
array((int)$characteristic_id));
$query = 'SELECT c.characteristic_id, c.characteristic_value,
c.characteristic_parent_id FROM ' .
hikamarket::table('shop.characteristic') . ' AS c '.
' WHERE (c.characteristic_parent_id =
'.$characteristic_id.' AND c.characteristic_vendor_id IN (0,
'.(int)$vendor_id.'))';
if(!empty($product_characteristics))
$query .= 'OR (c.characteristic_parent_id IN (' .
implode(',', $product_characteristics) . '))';
$this->db->setQuery($query);
$characteristic_values =
$this->db->loadObjectList('characteristic_id');
if(!isset($characteristic_values[ (int)$characteristic_value_id ]) ||
(int)$characteristic_values[ (int)$characteristic_value_id
]->characteristic_parent_id != (int)$characteristic_id)
return false;
$query = 'SELECT c.characteristic_id, c.characteristic_parent_id
FROM ' . hikamarket::table('shop.characteristic') . '
AS c '.
' INNER JOIN ' . hikamarket::table('shop.variant') .
' AS v ON v.variant_characteristic_id = c.characteristic_id '.
' WHERE c.characteristic_parent_id > 0 AND v.variant_product_id
= ' . (int)$product_id;
$this->db->setQuery($query);
$default_values =
$this->db->loadObjectList('characteristic_parent_id');
if(empty($default_values))
$default_values = array();
$e = new stdClass();
$e->characteristic_id = (int)$characteristic_value_id;
$e->characteristic_parent_id = (int)$characteristic_id;
$default_values[ (int)$characteristic_id ] = $e;
$query = 'SELECT product_code FROM ' .
hikamarket::table('shop.product') . ' WHERE product_id =
' . (int)$product_id;
$this->db->setQuery($query);
$product = $this->db->loadObject();
$elem = new stdClass();
$elem->product_type = 'main';
$elem->product_id = $product_id;
$elem->product_code = $product->product_code;
$elem->oldCharacteristics = $product_characteristics;
$elem->characteristics = array();
$i = 1;
foreach($new_characteristics as $c) {
$e = new stdClass();
$e->characteristic_id = (int)$c;
$e->ordering = $i++;
$e->default_id = $default_values[ (int)$c ]->characteristic_id;
$e->values = array();
$elem->characteristics[ (int)$c ] = $e;
}
foreach($characteristic_values as $k => $v) {
if(!isset($elem->characteristics[
(int)$v->characteristic_parent_id ]))
continue;
$elem->characteristics[ (int)$v->characteristic_parent_id
]->values[ (int)$k ] = $v->characteristic_value;
}
$shopProductClass = hikamarket::get('shop.class.product');
$ret = $shopProductClass->updateCharacteristics($elem,
(int)$product_id, 0);
if(!$ret)
return false;
return ($i - 1);
}
public function populateVariant($product_id, $characteristic_data) {
if((int)$product_id <= 0)
return false;
if(empty($characteristic_data['variant_add']))
return false;
$product_characteristics =
$this->getProductCharacteristics($product_id);
foreach($characteristic_data['variant_add'] as $k => $v) {
if(!in_array($k, $product_characteristics))
return false;
}
if(count($characteristic_data['variant_add']) !=
count($product_characteristics))
return false;
$query = 'SELECT product_code FROM ' .
hikamarket::table('shop.product') . ' WHERE product_id =
' . (int)$product_id;
$this->db->setQuery($query);
$product = $this->db->loadObject();
$elem = new stdClass();
$elem->product_type = 'main';
$elem->product_id = $product_id;
$elem->product_code = $product->product_code;
$elem->oldCharacteristics = $product_characteristics;
$elem->characteristics = array();
$i = 1;
foreach($characteristic_data['variant_add'] as $k => $v) {
$e = new stdClass();
$e->characteristic_id = (int)$k;
$e->default_id = null;
$e->ordering = null;
hikamarket::toInteger($v);
$e->values = array_combine($v, $v);
$elem->characteristics[ (int)$k ] = $e;
}
$shopProductClass = hikamarket::get('shop.class.product');
$ret = $shopProductClass->updateCharacteristics($elem,
(int)$product_id, 2);
return $ret;
}
public function duplicateVariant($product_id, $cid, $data) {
if((int)$product_id <= 0)
return false;
if(empty($cid) || empty($data['variant_duplicate']) ||
empty($data['variant_duplicate']['characteristic']) ||
empty($data['variant_duplicate']['variants']))
return false;
$product_characteristics =
$this->getProductCharacteristics($product_id);
$characteristic_id =
(int)$data['variant_duplicate']['characteristic'];
if(!in_array((int)$characteristic_id, $product_characteristics))
return false;
if(!in_array($characteristic_id, $product_characteristics))
return false;
$query = 'SELECT product_code FROM ' .
hikamarket::table('shop.product') . ' WHERE product_id =
' . (int)$product_id;
$this->db->setQuery($query);
$product = $this->db->loadObject();
$elem = new stdClass();
$elem->product_type = 'main';
$elem->product_id = $product_id;
$elem->product_code = $product->product_code;
$elem->oldCharacteristics = $product_characteristics;
$elem->duplicateVariants = $cid;
$elem->characteristics = array();
$i = 1;
$e = new stdClass();
$e->characteristic_id = (int)$characteristic_id;
$e->default_id = null;
$e->ordering = null;
hikamarket::toInteger($data['variant_duplicate']['variants']);
$e->values =
array_combine($data['variant_duplicate']['variants'],
$data['variant_duplicate']['variants']);
$elem->characteristics[ $characteristic_id ] = $e;
$shopProductClass = hikamarket::get('shop.class.product');
return $shopProductClass->updateCharacteristics($elem,
(int)$product_id, 2);
}
public function removeCharacteristic($product_id, $characteristic_id) {
if((int)$product_id <= 0 || (int)$characteristic_id <= 0)
return false;
$product_characteristics =
$this->getProductCharacteristics($product_id);
if(!in_array((int)$characteristic_id, $product_characteristics))
return false;
$query = 'SELECT c.characteristic_id, c.characteristic_value,
c.characteristic_parent_id FROM ' .
hikamarket::table('shop.characteristic') . ' AS c '.
' WHERE c.characteristic_parent_id IN (' .
implode(',', $product_characteristics) . ')';
$this->db->setQuery($query);
$characteristic_values =
$this->db->loadObjectList('characteristic_id');
$query = 'SELECT c.characteristic_id, c.characteristic_parent_id
FROM ' . hikamarket::table('shop.characteristic') . '
AS c '.
' INNER JOIN ' . hikamarket::table('shop.variant') .
' AS v ON v.variant_characteristic_id = c.characteristic_id '.
' WHERE c.characteristic_parent_id > 0 AND v.variant_product_id
= ' . (int)$product_id;
$this->db->setQuery($query);
$default_values =
$this->db->loadObjectList('characteristic_parent_id');
if(empty($default_values))
$default_values = array();
$query = 'SELECT product_code FROM ' .
hikamarket::table('shop.product') . ' WHERE product_id =
' . (int)$product_id;
$this->db->setQuery($query);
$product = $this->db->loadObject();
$elem = new stdClass();
$elem->product_type = 'main';
$elem->product_id = $product_id;
$elem->product_code = $product->product_code;
$elem->oldCharacteristics = $product_characteristics;
$elem->characteristics = array();
$i = 1;
foreach($product_characteristics as $c) {
if($c == (int)$characteristic_id)
continue;
$e = new stdClass();
$e->characteristic_id = (int)$c;
$e->ordering = $i++;
$e->default_id = $default_values[ (int)$c ]->characteristic_id;
$e->values = array();
$elem->characteristics[ (int)$c ] = $e;
}
foreach($characteristic_values as $k => $v) {
if(!isset($elem->characteristics[
(int)$v->characteristic_parent_id ]))
continue;
$elem->characteristics[ (int)$v->characteristic_parent_id
]->values[ (int)$k ] = $v->characteristic_value;
}
$shopProductClass = hikamarket::get('shop.class.product');
$ret = $shopProductClass->updateCharacteristics($elem,
(int)$product_id, 1);
if(!$ret)
return false;
return ($i - 1);
}
public function deleteVariants($product_id, $variant_ids) {
if((int)$product_id <= 0)
return false;
if(empty($variant_ids))
return false;
hikamarket::toInteger($variant_ids);
$query = 'SELECT p.product_id FROM ' .
hikamarket::table('shop.product') . ' AS p '.
' WHERE p.product_type = ' .
$this->db->Quote('variant') . ' AND
p.product_parent_id = ' . (int)$product_id.
' AND p.product_id IN (' . implode(',',
$variant_ids) . ')';
$this->db->setQuery($query);
$ids = $this->db->loadColumn();
if(empty($ids))
return false;
hikamarket::toInteger($ids);
$shopProductClass = hikamarket::get('shop.class.product');
$ret = $shopProductClass->delete($ids);
return $ret;
}
private function getProductCharacteristics($product_id) {
if((int)$product_id <= 0)
return false;
$query = 'SELECT c.characteristic_id FROM ' .
hikamarket::table('shop.variant') . ' AS v '.
' INNER JOIN ' .
hikamarket::table('shop.characteristic') . ' AS c ON
v.variant_characteristic_id = c.characteristic_id '.
' WHERE c.characteristic_parent_id = 0 AND v.variant_product_id =
' . (int)$product_id.' '.
' ORDER BY v.ordering ASC';
$this->db->setQuery($query);
$ret = $this->db->loadColumn();
if(empty($ret))
$ret = array();
else
hikamarket::toInteger($ret);
return $ret;
}
public function backSaveForm(&$product) {
if(!isset($product->product_id))
return;
$product_id = (int)$product->product_id;
$formData = hikaInput::get()->get('market', array(),
'array');
if(empty($formData) || empty($formData['form']))
return;
if(!empty($formData['product_fee'])) {
$feeClass = hikamarket::get('class.fee');
if($feeClass) {
$f =
isset($formData['product_fee'][$product->product_type]) ?
$formData['product_fee'][$product->product_type] :
$formData['product_fee'];
$feeClass->saveProduct($product->product_id, $f);
}
}
}
public function save(&$product) {
$this->checkProductCode($product);
if(empty($product->product_id) &&
empty($product->product_type))
$product->product_type = ((!isset($product->product_parent_id) ||
empty($product->product_parent_id)) ? 'main' :
'variant');
if(isset($product->product_quantity) &&
!is_numeric($product->product_quantity))
$product->product_quantity = -1;
JPluginHelper::importPlugin('hikamarket');
$productClass = hikamarket::get('shop.class.product');
$status = $productClass->save($product);
return $status;
}
protected function checkProductCode(&$product) {
$config = hikamarket::config();
$prefix = null;
$vendor_id = hikamarket::loadVendor(false, false);
$vendor_prefix = $config->get('prefix_product_code', null);
if(!empty($product->product_code) && !empty($vendor_prefix)
&& $vendor_id > 1) {
$prefix = 'v' . $vendor_id . '_';
if(is_string($vendor_prefix)) {
$prefix = $vendor_prefix . $vendor_id . '_';
if(strpos($vendor_prefix, '%d') !== false)
$prefix = sprintf($vendor_prefix, (int)$vendor_id);
}
if(substr($product->product_code, 0, strlen($prefix)) != $prefix)
$product->product_code = $prefix . $product->product_code;
}
if(!$config->get('avoid_duplicate_product_code', 0))
return;
if(!empty($product->product_id)) {
$futur_product_id = $product->product_id;
} else {
$query = 'SELECT MAX(`product_id`) FROM
'.hikamarket::table('shop.product');
$this->db->setQuery($query);
$futur_product_id = (1 + (int)$this->db->loadResult());
if(empty($product->product_code)) {
$test = '';
if(!empty($product->product_name)) {
$search =
explode(',','ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u');
$replace =
explode(',','c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u');
$test = str_replace($search, $replace, $product->product_name);
$test = preg_replace('#[^a-z0-9_-]#i', '',
$test);
}
if(empty($test)) {
$product->product_code = 'product_' . $futur_product_id;
} else {
$test = str_replace($search, $replace, $product->product_name);
$product->product_code = preg_replace('#[^a-z0-9_-]#i',
'_', $test);
}
if(!empty($vendor_prefix) && substr($product->product_code,
0, strlen($prefix)) != $prefix)
$product->product_code = $prefix . $product->product_code;
}
}
if(empty($product->product_code))
return;
if(empty($product->product_id)) {
$query = 'SELECT COUNT(*) FROM
'.hikamarket::table('shop.product').' WHERE
product_code = '.$this->db->Quote($product->product_code);
} else {
$query = 'SELECT COUNT(*) FROM
'.hikamarket::table('shop.product').' WHERE
product_code =
'.$this->db->Quote($product->product_code).' AND
product_id != '.(int)$product->product_id;
}
$this->db->setQuery($query);
$isSame = ((int)$this->db->loadResult() > 0);
if(!$isSame)
return;
if(HIKASHOP_J30)
$productCodeEscaped = "'" .
$this->db->escape($product->product_code . '_', true) .
"%'";
else
$productCodeEscaped = "'" .
$this->db->getEscaped($product->product_code . '_',
true) . "%'";
$query = 'SELECT product_code FROM
'.hikamarket::table('shop.product').' WHERE
product_code LIKE '.$productCodeEscaped;
if(!empty($product->product_id)) {
$query .= ' AND product_id != '.(int)$product->product_id;
}
$query .= ' ORDER BY product_code DESC';
$this->db->setQuery($query, 0, 1);
$last_product_code = $this->db->loadResult();
$suffix = substr($last_product_code, 0, strlen($product->product_code)
+ 1);
if(!empty($suffix) && (int)$suffix > 0)
$product->product_code .= '_' . ((int)$suffix + 1);
else
$product->product_code .= '_' . $futur_product_id;
$warning_key = 'WARNING_DUPLICATE_PRODUCT_CODE_MODIFIED';
$warning_message = JText::_($warning_key);
if(!empty($warning_message) && $warning_message != $warning_key)
{
$app = JFactory::getApplication();
$app->enqueueMessage($warning_message);
}
}
public function setDefaultVariant($product_id, $variant_id) {
if(!hikamarket::acl('product/variant'))
return false;
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$vendor = hikamarket::loadVendor(true, false);
$vendor_id = $vendor->vendor_id;
if(!hikamarket::isVendorProduct($product_id))
return false;
$productClass = hikamarket::get('shop.class.product');
$variant = $productClass->get((int)$variant_id);
if((int)$variant->product_parent_id != $product_id)
return false;
$query = 'SELECT variant.*, characteristic.* FROM
'.hikamarket::table('shop.variant').' as variant
'.
' LEFT JOIN
'.hikamarket::table('shop.characteristic').' AS
characteristic ON variant.variant_characteristic_id =
characteristic.characteristic_id '.
' WHERE variant.variant_product_id = '.(int)$product_id;
$this->db->setQuery($query);
$original_data =
$this->db->loadObjectList('characteristic_id');
$query = 'SELECT variant.*, characteristic.* FROM
'.hikamarket::table('shop.variant').' as variant
'.
' LEFT JOIN
'.hikamarket::table('shop.characteristic').' AS
characteristic ON variant.variant_characteristic_id =
characteristic.characteristic_id '.
' WHERE variant.variant_product_id = '.(int)$variant_id;
$this->db->setQuery($query);
$variant_data = $this->db->loadObjectList();
$values = array();
foreach($variant_data as $v) {
$values[ (int)$v->characteristic_parent_id ] =
(int)$v->characteristic_parent_id;
$values[ (int)$v->characteristic_id ] =
(int)$v->characteristic_id;
}
unset($values[0]);
unset($variant_data);
$query = 'DELETE FROM
'.hikamarket::table('shop.variant').' WHERE
variant_product_id = '.(int)$product_id;
$this->db->setQuery($query);
$this->db->execute();
$query = 'INSERT INTO
'.hikamarket::table('shop.variant').'
(`variant_characteristic_id`,`variant_product_id`,`ordering`) VALUES
';
foreach($values as $k => $value) {
$ordering = '0';
if(isset($original_data[$k]))
$ordering = $original_data[$k]->ordering;
$values[$k] =
'('.$k.','.$product_id.','.$ordering.')';
}
unset($original_data);
$this->db->setQuery($query . implode(',', $values) );
$this->db->execute();
unset($values);
unset($query);
return true;
}
public function checkProductCharacteristics($characteristics, $vendor_id =
0, $complete_return = false) {
$query = 'SELECT c.characteristic_id, c.characteristic_value,
c.characteristic_parent_id '.
' FROM ' . hikamarket::table('shop.characteristic')
. ' AS c '.
' WHERE c.characteristic_id IN (' . implode(',',
$characteristics) . ') AND c.characteristic_vendor_id IN (0,
'.(int)$vendor_id.')';
$this->db->setQuery($query);
$characteristics =
$this->db->loadObjectList('characteristic_id');
foreach($characteristics as $k => $c) {
$c->characteristic_parent_id = (int)$c->characteristic_parent_id;
if($c->characteristic_parent_id == 0)
continue;
if(isset($characteristics[$c->characteristic_parent_id]) &&
empty($characteristics[$c->characteristic_parent_id]->checked))
$characteristics[$c->characteristic_parent_id]->checked = $k;
else
unset($characteristics[$k]);
}
foreach($characteristics as $k => $c) {
if($c->characteristic_parent_id > 0)
continue;
if(empty($c->checked))
unset($characteristics[$k]);
}
if(empty($characteristics))
return false;
if(!$complete_return)
return array_keys($characteristics);
$ret = array();
$i = 1;
foreach($characteristics as $c) {
if($c->characteristic_parent_id > 0)
continue;
$e = new stdClass();
$e->characteristic_id = (int)$c->characteristic_id;
$e->ordering = $i++;
$e->default_id = $c->checked;
$e->values = array();
$ret[ $e->characteristic_id ] = $e;
}
return $ret;
}
public function approve($product_id = 0, $action = 'approve',
$options = array()) {
$app = JFactory::getApplication();
if(!in_array($action, array('approve', 'decline')))
return false;
if(is_array($product_id) && $app->isAdmin())
return $this->approveMultiple($product_id, $action);
$config = hikamarket::config();
$productClass = hikamarket::get('shop.class.product');
if(!$app->isAdmin()) {
$vendor = hikamarket::loadVendor(true, false);
$vendor_id = $vendor->vendor_id;
} else
$vendor_id = 1;
$oldProduct = $productClass->get($product_id);
if(empty($oldProduct) || $oldProduct->product_type !=
'waiting_approval')
return false;
if(!$app->isAdmin() &&
!hikamarket::acl('product/approve'))
return false;
$productVendorId = (int)$oldProduct->product_vendor_id;
$editAllVendors = ($vendor_id == 1 &&
hikamarket::acl('product/subvendor'));
if(!$app->isAdmin() && $productVendorId != $vendor_id
&& !$editAllVendors && ($productVendorId > 1 ||
$vendor_id > 1))
return false;
$do = true;
$updateProduct = new stdClass();
$updateProduct->product_id = (int)$product_id;
if($action == 'approve') {
$updateProduct->product_type = 'main';
} else if($action == 'decline') {
$updateProduct->product_published = '0';
}
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikamarket');
$app->triggerEvent('onBeforeProductApproval',
array(&$oldProduct, &$do, $action));
if(!$do)
return false;
$status = $productClass->save($updateProduct);
if(!$status || (int)$oldProduct->product_vendor_id <= 1)
return $status;
if(isset($options['notify']) &&
empty($options['notify']))
return $status;
if($action == 'approve') {
$oldProduct->product_type = 'main';
} else if($action == 'decline') {
$oldProduct->product_published = '0';
}
$mailClass = hikamarket::get('class.mail');
$vendorClass = hikamarket::get('class.vendor');
$shopConfig = hikamarket::config(false);
$infos = new stdClass;
$infos->vendor =
$vendorClass->get($oldProduct->product_vendor_id);
$infos->product =& $oldProduct;
$infos->message = @$options['message'];
$mail = null;
if($action == 'approve') {
$mail = $mailClass->load('product_approval', $infos);
} else if($action == 'decline') {
$mail = $mailClass->load('product_decline', $infos);
}
if(empty($mail) || !$mail->published)
return $status;
$mail_title = ($action == 'decline') ?
'EMAIL_MARKET_PRODUCT_DECLINE' :
'EMAIL_MARKET_PRODUCT_APPROVAL';
if(!empty($mail->subject))
$mail->subject = JText::sprintf($mail->subject, HIKASHOP_LIVE);
else
$mail->subject = JText::sprintf($mail_title, HIKASHOP_LIVE);
$mail->from_email = $shopConfig->get('from_email');
$mail->from_name = $shopConfig->get('from_name');
$mail->dst_email = $infos->vendor->vendor_email;
$mail->dst_name = $infos->vendor->vendor_name;
$mailClass->setVendorNotifyEmails($mail, $infos->vendor);
if(!empty($mail->dst_email))
$mailClass->sendMail($mail);
return $status;
}
protected function approveMultiple($ids, $action = 'approve',
$options = array()) {
$app = JFactory::getApplication();
if(!in_array($action, array('approve', 'decline')))
return false;
if(!is_array($ids) && !$app->isAdmin())
return false;
hikamarket::toInteger($ids);
$db = JFactory::getDBO();
$query = 'SELECT product.* FROM ' .
hikamarket::table('shop.product') . ' AS product WHERE
product.product_id IN ('.implode(',', $ids).') AND
product.product_type = ' .
$db->Quote('waiting_approval');
$db->setQuery($query);
$products = $db->loadObjectList('product_id');
$do = true;
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikamarket');
$app->triggerEvent('onBeforeProductsApproval',
array(&$products, &$do, $action));
if(!$do || empty($products))
return false;
$product_ids = array_keys($products);
if($action == 'approve') {
$query = 'UPDATE ' .
hikamarket::table('shop.product') .
' SET product_type = ' . $db->Quote('main') .
' WHERE product_id IN ('.implode(',',
$product_ids).') AND product_type = ' .
$db->Quote('waiting_approval');
} else if($action == 'decline') {
$query = 'UPDATE ' .
hikamarket::table('shop.product') .
' SET product_publishe = 0'.
' WHERE product_id IN ('.implode(',',
$product_ids).') AND product_type = ' .
$db->Quote('waiting_approval');
}
$db->setQuery($query);
$status = $db->execute();
if(!$status)
return $status;
if(isset($options['notify']) &&
empty($options['notify']))
return $status;
$vendors_products = array();
foreach($products as $k => $product) {
if((int)$product->product_vendor_id <= 1)
continue;
$v = (int)$product->product_vendor_id;
if(!isset($vendors_products[$v]))
$vendors_products[$v] = array();
$vendors_products[$v][$k] = $k;
}
if(empty($vendors_products))
return count($product_ids);
$query = 'SELECT * FROM ' .
hikamarket::table('vendor') . ' WHERE vendor_id IN (' .
implode(',', array_keys($vendors_products)) . ') AND
vendor_published = 1';
$db->setQuery($query);
$vendors = $db->loadObjectList('vendor_id');
$mailClass = hikamarket::get('class.mail');
$shopConfig = hikamarket::config(false);
if($action == 'approve') {
$mail_name = 'product_approval';
$mail_title = 'EMAIL_MARKET_PRODUCT_APPROVAL';
} else if($action == 'decline') {
$mail_name = 'product_decline';
$mail_title = 'EMAIL_MARKET_PRODUCT_DECLINE';
} else
return count($product_ids);
foreach($vendors_products as $vendor_id => $vendor_products) {
if(!isset($vendors[$vendor_id]))
continue;
$infos = new stdClass;
$infos->vendor = $vendors[$vendor_id];
$infos->message = @$options['message'];
$infos->products = array();
foreach($vendor_products as $id) {
if(!isset($products[$id]))
continue;
$infos->products[$id] =& $products[$id];
}
if(count($infos->products) == 1) {
$infos->product = reset($infos->products);
unset($infos->products);
}
$mail = $mailClass->load($mail_name, $infos);
if(empty($mail) || !$mail->published)
break;
if(!empty($mail->subject))
$mail->subject = JText::sprintf($mail->subject, HIKASHOP_LIVE);
else
$mail->subject = JText::sprintf($mail_title, HIKASHOP_LIVE);
if(empty($mail->from_email))
$mail->from_email = $shopConfig->get('from_email');
if(empty($mail->from_name))
$mail->from_name = $shopConfig->get('from_name');
$mail->dst_email = $infos->vendor->vendor_email;
$mail->dst_name = $infos->vendor->vendor_name;
$mailClass->setVendorNotifyEmails($mail, $infos->vendor);
if(!empty($mail->dst_email))
$mailClass->sendMail($mail);
}
return count($product_ids);
}
public function decline($product_id = 0, $options = array()) {
return $this->approve($product_id, 'decline', $options);
}
public function getProduct($product_id, $options) {
$product_id = (int)$product_id;
if($product_id <= 0)
return false;
$query = 'SELECT p.* FROM ' .
hikamarket::table('shop.product') . ' AS p ' .
' WHERE p.product_id = ' . (int)$product_id;
$this->db->setQuery($query);
$ret = $this->db->loadObject();
if(empty($ret) || !in_array($ret->product_type,
array('main', 'variant')))
return false;
if($ret->product_type == 'variant') {
$ret->product_parent_id = (int)$ret->product_parent_id;
if(empty($ret->product_parent_id))
return false;
$query = 'SELECT p.* FROM ' .
hikamarket::table('shop.product') . ' AS p ' .
' WHERE p.product_type = \'main\' AND p.product_id =
' . (int)$ret->product_parent_id;
$this->db->setQuery($query);
$parent = $this->db->loadObject();
$variant_name = htmlentities( ((!preg_match('!!u',
$ret->product_name)) ? utf8_encode($ret->product_name) :
$ret->product_name), ENT_QUOTES, "UTF-8");
foreach(get_object_vars($ret) as $k => $v) {
if(!empty($ret->$k))
continue;
$ret->$k = $parent->$k;
}
if(empty($variant_name)) {
$characteristic_separator =
JText::_('HIKA_VARIANT_SEPARATOR');
if($characteristic_separator == 'HIKA_VARIANT_SEPARATOR')
$characteristic_separator = ': ';
$variant_separator =
JText::_('HIKA_VARIANTS_MIDDLE_SEPARATOR');
if($variant_separator == 'HIKA_VARIANTS_MIDDLE_SEPARATOR')
$variant_separator = ' ';
$characteristics =
$this->getCharacteristics($ret->product_parent_id,
$ret->product_id);
$product_name = htmlentities( ((!preg_match('!!u',
$ret->product_name)) ? utf8_encode($ret->product_name) :
$ret->product_name), ENT_QUOTES, "UTF-8");
$variant_name = $product_name . $characteristic_separator;
foreach($characteristics[ (int)$ret->product_parent_id ] as $k =>
$c) {
if($k > 0)
$variant_name .= $variant_separator;
$variant_name .= $characteristics[ (int)$ret->product_id ][
(int)$c->characteristic_id ]->characteristic_value;
}
$ret->product_name = $variant_name;
}
}
if(!empty($options['price'])) {
$shopConfig = hikamarket::config(false);
$currencyClass = hikamarket::get('shop.class.currency');
$main_currency = (int)$shopConfig->get('main_currency',
1);
$discount_before_tax =
(int)$shopConfig->get('discount_before_tax', 0);
$user_id = isset($options['price']['user']) ?
$options['price']['user'] : 0;
$currency_id = isset($options['price']['currency'])
? $options['price']['currency'] : null; //
$zone_id = isset($options['price']['zone']) ?
$options['price']['zone'] : null; //
$qty = isset($options['price']['qty']) ?
$options['price']['qty'] : 0;
$rows = array($ret);
$ids = array($product_id);
if($ret->product_type == 'variant') {
$ids[] = (int)$ret->product_parent_id;
$parent = new stdClass();
$parent->product_id = (int)$ret->product_parent_id;
$parent->product_tax_id = (int)$ret->product_tax_id;
$rows[] = $parent;
}
$currencyClass->getPrices($rows, $ids, $currency_id, $main_currency,
$zone_id, $discount_before_tax, $user_id);
if(empty($rows[0]->prices) && $ret->product_type ==
'variant') {
$rows[0]->prices = $rows[1]->prices;
}
$currencyClass->pricesSelection($rows[0]->prices, $qty);
}
return $ret;
}
protected function getCharacteristics($products, $variants) {
if(!is_array($products))
$products = array($products);
if(!is_array($variants))
$variants = array($variants);
$ids = array_merge($products, $variants);
$query = 'SELECT v.variant_product_id as product_id, c.* '.
' FROM ' . hikamarket::table('shop.characteristic')
. ' AS c ' .
' INNER JOIN ' . hikamarket::table('shop.variant')
. ' AS v ON v.variant_characteristic_id = c.characteristic_id '
.
' WHERE v.variant_product_id IN ('.implode(',',
$ids).') '.
' ORDER BY v.ordering ASC, c.characteristic_ordering ASC';
$this->db->setQuery($query);
$characteristic_data = $this->db->loadObjectList();
$characteristics = array();
foreach($characteristic_data as $k => $v) {
$p = (int)$v->product_id;
if(!isset($characteristics[ $p ]))
$characteristics[ $p ] = array();
if(in_array($p, $products)) { // isset($product_ids[ $p ])) {
if((int)$v->characteristic_parent_id > 0)
continue;
$characteristics[ $p ][] = $v;
} else {
$characteristics[ $p ][ (int)$v->characteristic_parent_id ] = $v;
}
}
unset($characteristic_data);
return $characteristics;
}
public function &getNameboxData(&$typeConfig, &$fullLoad,
$mode, $value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$app = JFactory::getApplication();
$fullLoad = false;
$tree_mode = (!isset($typeConfig['mode']) ||
$typeConfig['mode'] == 'tree');
$displayFormat = !empty($options['displayFormat']) ?
$options['displayFormat'] :
@$typeConfig['displayFormat'];
$depth = (int)@$options['depth'];
$start = (int)@$options['start'];
$page = (int)@$options['page'];
$limit = (int)@$options['limit'];
$unfold = (int)@$options['unfold'];
$load_variants = (int)@$options['variants'];
$is_root = false;
$set_no_selection =
empty($typeConfig['options']['onlyNode']);
if(empty($start) && !empty($options['root'])) {
$start = (int)$options['root'];
$is_root = true;
}
if($load_variants) {
$typeConfig['options']['tree_url'] .=
'&variants='.$load_variants;
$typeConfig['url'] .=
'&variants='.$load_variants;
}
if($depth <= 0)
$depth = 1;
if($limit <= 0 && $tree_mode)
$limit = 200;
if($limit <= 0 && !$tree_mode)
$limit = 20;
if(!$tree_mode)
$limit++;
if(!empty($search)) {
$searchStr = "'%" . ((HIKASHOP_J30) ?
$this->db->escape($search, true) :
$this->db->getEscaped($search, true) ) . "%'";
}
$vendorFilter = '';
$category_filter = '';
if(!$app->isAdmin()) {
$vendor_id = hikamarket::loadVendor(false);
if($vendor_id === null || $vendor_id === false)
return $ret;
if($vendor_id > 1) {
if(empty($options['allvendors'])) {
$vendorFilter = ' AND p.product_vendor_id = ' .
(int)$vendor_id . ' ';
} else {
$vendorFilter = ' AND (p.product_vendor_id = ' .
(int)$vendor_id . ' OR p.product_published = 1) ';
$typeConfig['options']['tree_url'] .=
'&allvendors=1';
}
$vendorClass = hikamarket::get('class.vendor');
$rootCategory_id = $vendorClass->getRootCategory($vendor_id);
if(!empty($rootCategory_id)) {
$query = 'SELECT c.* FROM ' .
hikamarket::table('shop.category') . ' AS c WHERE
category_id = ' . $rootCategory_id;
$this->db->setQuery($query);
$rootCategory = $this->db->loadObject();
$category_filter = ' AND (c.category_left >= ' .
(int)$rootCategory->category_left . ' AND c.category_right <=
' . (int)$rootCategory->category_right . ') ';
}
}
}
if($tree_mode) {
if(empty($search)) {
$query = 'SELECT c.*, 0 as `base_depth`' .
' FROM ' . hikamarket::table('shop.category') .
' AS c ' .
' WHERE c.category_type IN
(\'product\',\'manufacturer\',\'vendor\',\'root\')
AND c.category_depth >= 0 AND c.category_depth <= ' . $depth .
$category_filter .
' ORDER BY c.category_left ASC, c.category_name ASC';
if($start > 0) {
$query = 'SELECT c.*, basecat.category_depth as
`base_depth`' .
' FROM ' . hikamarket::table('shop.category') .
' AS c ' .
' INNER JOIN ' .
hikamarket::table('shop.category') . ' AS basecat ON
c.category_left >= basecat.category_left AND c.category_right <=
basecat.category_right'.
' WHERE basecat.category_id = ' . $start . ' AND
c.category_type IN
(\'product\',\'manufacturer\',\'vendor\',\'root\')
AND c.category_depth >= basecat.category_depth AND c.category_depth
<= (basecat.category_depth + ' . $depth . ')'.
$category_filter .
' ORDER BY c.category_left ASC, c.category_name ASC';
}
} else {
$query = 'SELECT c.*, 0 as `base_depth` '.
' FROM ' . hikamarket::table('shop.category') .
' AS c ' .
(($start > 0) ? ' INNER JOIN ' .
hikamarket::table('shop.category') . ' AS c2 ON
c.category_left >= c2.category_left AND c.category_right <=
c2.category_right' : '') .
' WHERE c.category_type IN
(\'product\',\'manufacturer\',\'vendor\',\'root\')
AND (( c.category_name LIKE ' . $searchStr .
(($start > 0) ? 'AND c2.category_id = ' . $start .
') OR ( c.category_id = ' . $start : '') .
'))' .
$category_filter .
' ORDER BY c.category_left ASC, c.category_name ASC';
}
$this->db->setQuery($query);
$category_elements =
$this->db->loadObjectList('category_id');
$categories = array();
$base_depth = 0;
$lookup_categories = array($start => $start);
}
if(!empty($category_elements) && empty($search)) {
$base_depth = (int)@$category_elements[$start]->category_depth +
$depth;
foreach($category_elements as $k => $v) {
if($k == $start && !$is_root)
continue;
$o = new stdClass();
$o->status = 3;
$o->name = JText::_($v->category_name);
$o->value = $k;
$o->data = array();
if($set_no_selection)
$o->noselection = 1;
if($depth > 1 && $v->category_depth < $base_depth) {
$lookup_categories[$k] = $k;
$o->status = $unfold ? 2: 1;
}
if(empty($v->category_parent_id) || $k == $start) {
$o->status = 5;
$o->icon = 'world';
$ret[0][] =& $o;
} else if((int)$v->category_parent_id == 1 ||
(int)$v->category_parent_id == $start ||
!isset($categories[(int)$v->category_parent_id])) {
$ret[0][] =& $o;
} else {
$categories[(int)$v->category_parent_id]->data[] =& $o;
}
$categories[$k] =& $o;
unset($o);
}
}
$product_elements = array();
if(!empty($lookup_categories) && empty($search)) {
$query = 'SELECT p.*, c.category_id FROM ' .
hikamarket::table('shop.product') . ' AS p '.
' INNER JOIN ' .
hikamarket::table('shop.product_category') . ' AS pc ON
p.product_id = pc.product_id '.
' INNER JOIN ' . hikamarket::table('shop.category')
. ' AS c ON c.category_id = pc.category_id '.
' WHERE pc.category_id IN (' . implode(',',
$lookup_categories) . ') ' . $vendorFilter .
' ORDER BY c.category_left ASC, c.category_name ASC,
p.product_name ASC';
$this->db->setQuery($query, 0, $limit);
$product_elements = $this->db->loadObjectList();
} else if(!empty($search)) {
if($start > 0)
$is_root = true;
$query = 'SELECT p.*, c.category_id, c.category_right,
c.category_left FROM ' . hikamarket::table('shop.product') .
' AS p '.
' INNER JOIN ' .
hikamarket::table('shop.product_category') . ' AS pc ON
p.product_id = pc.product_id '.
' INNER JOIN ' . hikamarket::table('shop.category')
. ' AS c ON c.category_id = pc.category_id '.
' WHERE (p.product_name LIKE '.$searchStr.' OR
p.product_code LIKE '.$searchStr.') '. $vendorFilter .
' ORDER BY p.product_name ASC';
$this->db->setQuery($query, 0, $limit);
$product_elements = $this->db->loadObjectList();
$base = '';
$ref = array(0,-1);
if($start > 0) {
$base = '(c.category_left >= ' .
(int)$category_elements[$start]->category_left . ' AND
c.category_right <= ' .
(int)$category_elements[$start]->category_right . ') AND ';
$ref = array((int)$category_elements[$start]->category_left,
(int)$category_elements[$start]->category_right);
}
if(isset($rootCategory) && $rootCategory->category_id !=
$start) {
$base .= '(c.category_left >= ' .
(int)$rootCategory->category_left . ' AND c.category_right <=
' . (int)$rootCategory->category_right . ') AND ';
if($rootCategory->category_left > $ref[0] &&
$rootCategory->category_right < $ref[1])
$ref = array((int)$rootCategory->category_left,
(int)$rootCategory->category_right);
}
$lookup_categories = array();
foreach($category_elements as $c) {
if(!empty($lookup_categories[ (int)$c->category_id ]))
continue;
if(!empty($ref[0]) && ($c->category_left < $ref[0] ||
$c->category_right > $ref[1]))
continue;
$lookup_categories[ (int)$c->category_id ] =
(int)$c->category_left . ' AND c.category_right >= ' .
(int)$c->category_right;
}
foreach($product_elements as $k => $p) {
if(!empty($lookup_categories[ (int)$p->category_id ]))
continue;
if(!empty($ref[0]) && ($p->category_left < $ref[0] ||
$p->category_right > $ref[1])) {
unset($product_elements[$k]);
continue;
}
$lookup_categories[ (int)$p->category_id ] =
(int)$p->category_left . ' AND c.category_right >= ' .
(int)$p->category_right;
if(isset($category_elements[ (int)$p->category_id ]))
$category_elements[ (int)$p->category_id ]->isproduct = true;
}
unset($ref);
$query = 'SELECT c.* ' .
' FROM ' . hikamarket::table('shop.category') .
' AS c ' .
' WHERE ' . $base . '((c.category_left <=
'.implode(') OR (c.category_left <= ',
$lookup_categories) . '))';
$this->db->setQuery($query);
$category_tree =
$this->db->loadObjectList('category_id');
foreach($category_tree as $k => $v) {
if($k == $start && !$is_root)
continue;
$o = new stdClass();
$o->status = 2;
$o->name = JText::_($v->category_name);
$o->value = $k;
$o->data = array();
if($set_no_selection)
$o->noselection = 1;
if(isset($category_elements[$k]) &&
empty($category_elements[$k]->isproduct))
$o->status = 3;
if(empty($v->category_parent_id) || $k == $start) {
$o->status = 5;
$o->icon = 'world';
$ret[0][] =& $o;
} else if((int)$v->category_parent_id == 1 ||
(int)$v->category_parent_id == $start ||
!isset($categories[(int)$v->category_parent_id])) {
$ret[0][] =& $o;
} else {
$categories[(int)$v->category_parent_id]->data[] =& $o;
}
$categories[$k] =& $o;
unset($o);
}
} else {
$product_types = array();
$product_type = array('main');
if(!empty($typeConfig['params']['product_type']))
$product_type =
$typeConfig['params']['product_type'];
if(!empty($options['product_type']))
$product_type = $options['product_type'];
if(is_string($product_type))
$product_type = explode(',', $product_type);
foreach($product_type as &$type) {
$type = trim($type);
$product_types[] = $this->db->Quote($type);
}
unset($type);
$query = 'SELECT p.* FROM ' .
hikamarket::table('shop.product') . ' AS p '.
' WHERE p.product_type IN (' . implode(',',
$product_types) . ' ) '.
' ORDER BY p.product_name ASC';
$this->db->setQuery($query, $page, $limit);
$product_elements =
$this->db->loadObjectList('product_id');
}
$displayFormat_tags = null;
if(!preg_match_all('#{([-_a-zA-Z0-9]+)}#U', $displayFormat,
$displayFormat_tags))
$displayFormat_tags = null;
if(!empty($product_elements) && $tree_mode) {
$product_ids = array();
if($load_variants) {
foreach($product_elements as $p) {
$product_ids[(int)$p->product_id] = array();
}
$query = 'SELECT p.* FROM ' .
hikamarket::table('shop.product') . ' AS p '.
' WHERE p.product_type = ' .
$this->db->Quote('variant') . ' AND
p.product_parent_id IN ('.implode(',',
array_keys($product_ids)).')'.
' ORDER BY p.product_parent_id ASC, p.product_name ASC';
$this->db->setQuery($query);
$variants = $this->db->loadObjectList('product_id');
foreach($variants as $v) {
$product_ids[ (int)$v->product_parent_id ][] =
(int)$v->product_id;
}
$characteristics =
$this->getCharacteristics(array_keys($product_ids),
array_keys($variants));
$characteristic_separator =
JText::_('HIKA_VARIANT_SEPARATOR');
if($characteristic_separator == 'HIKA_VARIANT_SEPARATOR')
$characteristic_separator = ': ';
$variant_separator =
JText::_('HIKA_VARIANTS_MIDDLE_SEPARATOR');
if($variant_separator == 'HIKA_VARIANTS_MIDDLE_SEPARATOR')
$variant_separator = ' ';
}
foreach($product_elements as $p) {
$o = new stdClass();
$o->status = 0;
$o->value = (int)$p->product_id;
if(!preg_match('!!u', $p->product_name))
$product_name = htmlentities(utf8_encode($p->product_name),
ENT_QUOTES, 'UTF-8');
else
$product_name = htmlentities($p->product_name, ENT_QUOTES,
'UTF-8');
if(!empty($displayFormat) && !empty($displayFormat_tags)) {
if($p->product_quantity == -1)
$p->product_quantity = JText::_('UNLIMITED');
$p->product_name = $product_name;
$o->name = $displayFormat;
foreach($displayFormat_tags[1] as $key) {
$o->name = str_replace('{'.$key.'}',
$p->$key, $o->name);
}
}
if(empty($o->name)) {
$o->name = $product_name;
if(empty($o->name))
$o->name = '['.$p->product_id.']';
}
if(!empty($product_ids[ (int)$p->product_id ])) {
$o->status = 1;
$o->icon = 'node';
$o->data = array();
foreach($product_ids[ (int)$p->product_id ] as $id) {
$o2 = new stdClass();
$o2->status = 0;
$o2->value = (int)$id;
$v = $variants[$id];
$variant_name = htmlentities( ((!preg_match('!!u',
$v->product_name)) ? utf8_encode($v->product_name) :
$v->product_name), ENT_QUOTES, "UTF-8");
if(empty($variant_name)) {
$variant_name = $product_name . $characteristic_separator;
foreach($characteristics[ (int)$p->product_id ] as $k => $c)
{
if($k > 0)
$variant_name .= $variant_separator;
$variant_name .= $characteristics[ (int)$v->product_id ][
(int)$c->characteristic_id ]->characteristic_value;
}
}
if(!empty($displayFormat) && !empty($displayFormat_tags)) {
if($v->product_quantity == -1)
$v->product_quantity = JText::_('UNLIMITED');
$v->product_name = $variant_name;
$o2->name = $displayFormat;
foreach($displayFormat_tags[1] as $key) {
$o2->name = str_replace('{'.$key.'}',
$v->$key, $o2->name);
}
}
if(empty($o2->name)) {
$o2->name = !empty($variant_name) ? $variant_name :
$product_name;
if(empty($o2->name))
$o2->name = '['.$v->product_id.']';
}
$o->data[] =& $o2;
unset($o2);
}
}
if($p->category_id == $start)
$ret[0][] =& $o;
else if($p->category_id != $start &&
isset($categories[(int)$p->category_id]))
$categories[(int)$p->category_id]->data[] =& $o;
else if(empty($search))
$ret[0][] =& $o;
unset($o);
}
} else if(!empty($product_elements)) {
foreach($product_elements as &$p) {
if(!preg_match('!!u', $p->product_name))
$product_name = htmlentities(utf8_encode($p->product_name),
ENT_QUOTES, 'UTF-8');
else
$product_name = htmlentities($p->product_name, ENT_QUOTES,
'UTF-8');
if($p->product_quantity == -1)
$p->product_quantity = JText::_('UNLIMITED');
$p->product_name = $product_name;
if(empty($p->name)) {
$p->name = $product_name;
if(empty($p->name))
$p->name = '['.$p->product_id.']';
}
}
unset($p);
if(count($product_elements) < $limit) {
$fullLoad = true;
} else {
array_pop($product_elements);
}
$ret[0] = $product_elements;
}
if(!empty($value)) {
if(!is_array($value))
$value = array($value);
if(is_object(reset($value))) {
$values = array();
foreach($value as $v) {
$values[] = (int)$v->product_id;
}
$value = $values;
}
$filter = array();
foreach($value as $v) {
$filter[] = (int)$v;
}
$query = 'SELECT p.* '.
' FROM ' . hikamarket::table('shop.product') .
' AS p ' .
' WHERE p.product_id IN ('.implode(',',
$filter).') ' . $vendorFilter;
$this->db->setQuery($query);
$products = $this->db->loadObjectList('product_id');
$variant_data = array(
'product' => array(),
'variant' => array()
);
if(!empty($products)) {
foreach($products as $p) {
if($p->product_type != 'variant' ||
!empty($p->product_name))
continue;
$variant_data['product'][ (int)$p->product_parent_id ] =
(int)$p->product_parent_id;
$variant_data['variant'][ (int)$p->product_id ] =
(int)$p->product_id;
}
}
if(!empty($variant_data['product'])) {
$query = 'SELECT p.product_id, p.product_name FROM ' .
hikamarket::table('shop.product') . ' AS p WHERE
p.product_id IN (' . implode(',',
$variant_data['product']) . ');';
$this->db->setQuery($query);
$parents = $this->db->loadObjectList('product_id');
$characteristics =
$this->getCharacteristics($variant_data['product'],
$variant_data['variant']);
$characteristic_separator =
JText::_('HIKA_VARIANT_SEPARATOR');
if($characteristic_separator == 'HIKA_VARIANT_SEPARATOR')
$characteristic_separator = ': ';
$variant_separator =
JText::_('HIKA_VARIANTS_MIDDLE_SEPARATOR');
if($variant_separator == 'HIKA_VARIANTS_MIDDLE_SEPARATOR')
$variant_separator = ' ';
foreach($products as &$p) {
if($p->product_type != 'variant' ||
!empty($p->product_name))
continue;
$parent = isset($parents[ $p->product_parent_id ]) ? $parents[
$p->product_parent_id ] : $p;
$product_name = htmlentities( ((!preg_match('!!u',
$parent->product_name)) ? utf8_encode($parent->product_name) :
$parent->product_name), ENT_QUOTES, "UTF-8");
$variant_name = $product_name . $characteristic_separator;
foreach($characteristics[ (int)$p->product_parent_id ] as $k =>
$c) {
if($k > 0)
$variant_name .= $variant_separator;
$variant_name .= $characteristics[ (int)$p->product_id ][
(int)$c->characteristic_id ]->characteristic_value;
}
$p->product_name_orig = $p->product_name;
$p->product_name = $variant_name;
}
unset($p);
}
if(!empty($products)) {
$ret[1] = array();
foreach($value as $v) {
$ret[1][(int)$v] = $products[(int)$v];
}
}
if($mode == hikamarketNameboxType::NAMEBOX_SINGLE)
$ret[1] = reset($ret[1]);
}
return $ret;
}
public function toggleId($task, $value = null) {
if($value !== null) {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value == 0 ||
empty($this->toggle[$task]) || ( empty($this->toggleAcl[$task])
&& !hikamarket::acl('product/edit/'.$task) ) || (
!empty($this->toggleAcl[$task]) &&
!hikamarket::acl($this->toggleAcl[$task]) ) ||
!hikamarket::isVendorProduct((int)$value) ))
return false;
}
if(!empty($this->toggle[$task]))
return $this->toggle[$task];
return false;
}
public function toggleDelete($value1 = '', $value2 =
'') {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value1 == 0 ||
!hikamarket::acl('product/delete') ||
!hikamarket::isVendorProduct((int)$value1)))
return false;
if(empty($this->deleteToggle))
return false;
if($app->isAdmin()) {
$db = JFactory::getDBO();
$query = 'SELECT product_id, product_type WHERE product_id =
'.(int)$value1.' AND product_type =
'.$db->Quote('waiting_approval');
$db->setQuery($query);
$product = $db->loadObject();
if(empty($product) || empty($product->product_id))
return false;
}
if((int)$value1 > 0 && empty($value2)) {
$productClass = hikamarket::get('shop.class.product');
$product_id = (int)$value1;
$ret = $productClass->delete($product_id);
return (!empty($ret) && $ret > 0);
}
return $this->deleteToggle;
}
public function processView(&$view) {
$app = JFactory::getApplication();
if($app->isAdmin())
return $this->processViewBack($view);
return $this->processViewFront($view);
}
public function processViewFront(&$view) {
$layout = $view->getLayout();
if(!in_array($layout,
array('show','listing','contact')))
return;
$currentVendorid = hikamarket::loadVendor(false);
$app = JFactory::getApplication();
$config = hikamarket::config();
$show_sold_by = $config->get('show_sold_by', 0);
$show_sold_by_me = $config->get('show_sold_by_me', 0);
$show_edit_btn = $config->get('show_edit_btn', 0);
$editAllVendors = false;
if($currentVendorid == 1 &&
hikamarket::acl('product/subvendor')) {
$editAllVendors = true;
}
if($currentVendorid == 0 || !hikamarket::acl('product/edit'))
{
$show_edit_btn = false;
}
$url_itemid = $config->get('vendor_default_menu', 0);
if(!empty($url_itemid))
$url_itemid = '&Itemid=' . (int)$url_itemid;
else
$url_itemid = '';
if($layout == 'show') {
if(!isset($view->element->product_vendor_id))
return;
$vendor_id = (int)$view->element->product_vendor_id;
if(isset($view->element->main) &&
isset($view->element->main->product_vendor_id))
$vendor_id = (int)$view->element->main->product_vendor_id;
if($vendor_id <= 1)
$vendor_id = 1;
$query = 'SELECT * FROM
'.hikamarket::table('vendor').' WHERE vendor_id =
' . $vendor_id;
$this->db->setQuery($query);
$vendor = $this->db->loadObject();
$view->element->vendor =& $vendor;
$vendor->alias = (empty($vendor->vendor_alias)) ?
$vendor->vendor_name : $vendor->vendor_alias;
$stringSafe = (method_exists($app, 'stringURLSafe'));
if($stringSafe)
$vendor->alias =
$app->stringURLSafe(strip_tags($vendor->alias));
else
$vendor->alias =
JFilterOutput::stringURLSafe(strip_tags($vendor->alias));
if(!isset($view->element->extraData))
$view->element->extraData = new stdClass();
if(empty($view->element->extraData->topEnd))
$view->element->extraData->topEnd = array();
$slot = 'vendor';
if($show_sold_by && ($vendor->vendor_id > 1 ||
$show_sold_by_me)) {
$vendorLink = '<a
href="'.hikamarket::completeLink('vendor&task=show&cid='
. $vendor->vendor_id . '&name=' . $vendor->alias .
$url_itemid).'">' . $vendor->vendor_name .
'</a>';
$view->element->extraData->topEnd[$slot] = '<span
class="hikamarket_vendor">'.JText::sprintf('SOLD_BY_VENDOR',
$vendorLink).'</span>';
}
if($show_edit_btn) {
if(empty($view->element->extraData->topBegin))
$view->element->extraData->topBegin = array();
$slot = 'vendor_edit';
if($editAllVendors || $currentVendorid == $vendor->vendor_id) {
$product_id = $view->element->product_id;
if(isset($view->element->main->product_id))
$product_id = $view->element->main->product_id;
$vendorLink = '<a
href="'.hikamarket::getProductEditionUrl($product_id).'"><i
class="fas fa-pencil-alt"></i></a>';
$tooltip_data = '';
$tooltip_title = JText::_('HIKAM_EDIT_PRODUCT');
if(!empty($tooltip_title) && $tooltip_title !=
'HIKAM_EDIT_PRODUCT') {
hikamarket::loadJslib('tooltip');
$tooltip_data = ' data-toggle="hk-tooltip"
data-title="' . htmlspecialchars($tooltip_title, ENT_COMPAT,
'UTF-8') . '"';
}
$view->element->extraData->topBegin[$slot] = '<span
class="hikamarket_show_edit"'.$tooltip_data.'>'.$vendorLink.'</span>';
} else if(isset($view->element->main) ||
isset($view->element->characteristics)) {
$found = false;
if(!empty($view->element->variants)) {
foreach($view->element->variants as $variant) {
if((int)$variant->product_id !=
(int)$view->element->main->product_id &&
$variant->product_vendor_id == $currentVendorid) {
$vendorLink = '<a
href="'.hikamarket::getProductEditionUrl($variant->product_id).'"><i
class="fas fa-pencil-alt"></i></a>';
$view->element->extraData->topBegin[$slot] =
'<span
class="hikamarket_show_edit">'.$vendorLink.'</span>';
$found = true;
break;
}
}
}
if(!$found) {
$product_id = (int)$view->element->product_id;
if(isset($view->element->main->product_id))
$product_id = (int)$view->element->main->product_id;
$characteristics = @$view->element->characteristics;
if(isset($view->element->main->characteristics))
$characteristics = $view->element->main->characteristics;
foreach($characteristics as $characteristic) {
if(empty($characteristic->characteristic_alias) ||
$characteristic->characteristic_alias != 'vendor')
continue;
$vendorLink = '<a
href="'.hikamarket::getProductEditionUrl($product_id,
'duplicate=1').'"><i class="far
fa-plus-square"></i></a>';
$view->element->extraData->topBegin[$slot] = '<span
class="hikamarket_show_edit">'.$vendorLink.'</span>';
}
}
}
}
return;
}
if($layout == 'listing') {
$hide_sold_by = (isset($view->hikamarket->hide_sold_by) &&
$view->hikamarket->hide_sold_by);
if(!$hide_sold_by) {
$paramsOpt = $view->params->get('market_show_sold_by',
'');
if($paramsOpt === '0')
$hide_sold_by = true;
}
$vendorsId = array();
foreach($view->rows as $row) {
if(isset($row->product_vendor_id)) {
$id = (int)$row->product_vendor_id;
if($id <= 1)
$id = 1;
$vendorsId[$id] = $id;
}
}
if(!empty($vendorsId)) {
$query = 'SELECT * FROM
'.hikamarket::table('vendor').' WHERE vendor_id IN
(' . implode(',', $vendorsId).')';
$this->db->setQuery($query);
$vendors = $this->db->loadObjectList('vendor_id');
$stringSafe = (method_exists($app, 'stringURLSafe'));
foreach($vendors as &$vendor) {
$vendor->alias = (empty($vendor->vendor_alias)) ?
$vendor->vendor_name : $vendor->vendor_alias;
if($stringSafe)
$vendor->alias =
$app->stringURLSafe(strip_tags($vendor->alias));
else
$vendor->alias =
JFilterOutput::stringURLSafe(strip_tags($vendor->alias));
}
unset($vendor);
$tooltip_data = null;
foreach($view->rows as &$row) {
$singleInLine = true;
if(isset($row->product_vendor_id)) {
$id = (int)$row->product_vendor_id;
if($id <= 1)
$id = 1;
$row->vendor = null;
if(isset($vendors[$id]))
$row->vendor =& $vendors[$id];
if(!$hide_sold_by && !empty($vendors[$id]->vendor_name))
{
if(!isset($row->extraData))
$row->extraData = new stdClass();
$slot = 'soldby';
if(empty($row->extraData->afterProductName))
$row->extraData->afterProductName = array($slot =>
'');
elseif(empty($row->extraData->afterProductName[$slot]))
$row->extraData->afterProductName[$slot] = '';
if($show_sold_by && ($id > 1 || $show_sold_by_me)) {
$vendorLink = '<a
href="'.hikamarket::completeLink('vendor&task=show&cid='
. $vendors[$id]->vendor_id .'&name=' .
$vendors[$id]->alias . $url_itemid).'">' .
$vendors[$id]->vendor_name . '</a>';
$row->extraData->afterProductName[$slot] .= '<span
class="hikamarket_vendor">'.JText::sprintf('SOLD_BY_VENDOR',
$vendorLink).'</span>';
$singleInLine = false;
}
ksort($row->extraData->afterProductName);
}
}
if($show_edit_btn && ($editAllVendors || $currentVendorid ==
$row->product_vendor_id)) {
$slot = 'vendor_edit';
if(!isset($row->extraData))
$row->extraData = new stdClass();
if(empty($row->extraData->afterProductName))
$row->extraData->afterProductName = array($slot =>
'');
elseif(empty($row->extraData->afterProductName[$slot]))
$row->extraData->afterProductName[$slot] = '';
if($tooltip_data === null) {
$tooltip_data = '';
$tooltip_title = JText::_('HIKAM_EDIT_PRODUCT');
if(!empty($tooltip_title) && $tooltip_title !=
'HIKAM_EDIT_PRODUCT') {
hikamarket::loadJslib('tooltip');
$tooltip_data = ' data-toggle="hk-tooltip"
data-title="' . htmlspecialchars($tooltip_title, ENT_COMPAT,
'UTF-8') . '"';
}
}
$vendorLink = '<a href="'.
hikamarket::getProductEditionUrl($row->product_id).'"><i
class="fas fa-pencil-alt"></i></a>';
if($singleInLine)
$row->extraData->afterProductName[$slot] .= '<span
class="hikamarket_list_edit hikamarket_list_single_edit"' .
$tooltip_data . '>'.$vendorLink.'</span>';
else
$row->extraData->afterProductName[$slot] .= '<span
class="hikamarket_list_edit"' . $tooltip_data .
'>'.$vendorLink.'</span>';
ksort($row->extraData->afterProductName);
}
}
unset($row);
}
}
if($layout == 'contact') {
$target = hikaInput::get()->getCmd('target',
'');
$vendor_id = hikaInput::get()->getInt('vendor_id', 0);
if($target == 'vendor' && !empty($vendor_id)) {
if($vendor_id <= 1)
$vendor_id = 1;
$query = 'SELECT * FROM
'.hikamarket::table('vendor').' WHERE vendor_id =
' . $vendor_id;
$this->db->setQuery($query);
$vendor = $this->db->loadObject();
$view->title = '';
$imageHelper = hikamarket::get('shop.helper.image');
$img = $imageHelper->getThumbnail($vendor->vendor_image,
array(50,50), array('default' => true), true);
if($img->success) {
$view->title .= '<img
src="'.$img->url.'" alt=""
style="vertical-align:middle"/> ';
}
$view->title .= $vendor->vendor_name;
if(!isset($view->extra_data)) $view->extra_data = array();
if(empty($view->extra_data['hidden']))
$view->extra_data['hidden'] = array();
$view->extra_data['hidden']['target'] =
$target;
$view->extra_data['hidden']['vendor_id'] =
$vendor_id;
}
}
}
public function processViewBack(&$view) {
$layout = $view->getLayout();
if(!in_array($layout, array('form')))
return;
if(empty($view->product->product_type) ||
$view->product->product_type != 'waiting_approval')
return;
$cancel_redirect =
hikaInput::get()->getString('cancel_redirect', '');
if(!empty($cancel_redirect))
$cancel_redirect = '&cancel_redirect=' .
urlencode($cancel_redirect);
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('PRODUCT_WAITING_FOR_APPROVAL'));
$add_tools = array(
array(
'name' => 'link',
'icon' => 'publish',
'alt' => JText::_('HIKAM_APPROVE'),
'url' =>
hikamarket::completeLink('product&task=approve&cid='.$view->product->product_id.'&'.hikamarket::getFormToken().'=1'.$cancel_redirect)
)
);
if(hikamarket::level(1)) {
$add_tools[] = array(
'name' => 'link',
'icon' => 'unpublish',
'alt' => JText::_('HIKAM_DECLINE'),
'url' =>
hikamarket::completeLink('product&task=decline&cid='.$view->product->product_id.'&'.hikamarket::getFormToken().'=1'.$cancel_redirect)
);
}
$view->toolbar = array_merge($add_tools, $view->toolbar);
}
public function processListing(&$filters, &$order, &$view,
&$select, &$select2, &$ON_a, &$ON_b, &$ON_c) {
if(!$view->module)
return;
$option =
hikaInput::get()->getString('option','');
$ctrl = hikaInput::get()->getString('ctrl','');
$task = hikaInput::get()->getString('task','');
if($option == HIKAMARKET_COMPONENT && $ctrl ==
'vendor') {
$content_synchronize =
$view->params->get('content_synchronize');
$product_synchronize =
(int)$view->params->get('product_synchronize', 0);
$vendor_id = hikamarket::getCID('vendor_id');
if($content_synchronize) {
if($vendor_id == 1) {
$filters[] = '(b.product_vendor_id = 1 OR b.product_vendor_id =
0)';
} else {
$filters[] = 'b.product_vendor_id = '.$vendor_id;
}
if(empty($view->hikamarket))
$view->hikamarket = new stdClass();
$view->hikamarket->hide_sold_by = true;
}
}
if($option == HIKASHOP_COMPONENT && $ctrl == 'product'
&& $task == 'show') {
$same_vendor =
(int)$view->params->get('market_filter_same_vendor', 0);
$currentVendor = 0;
if($same_vendor) {
$cid = hikamarket::getCID('product_id');
$shopProductClass = hikamarket::get('shop.class.product');
$p = $shopProductClass->get($cid);
if(!empty($p) && !empty($p->product_vendor_id))
$currentVendor = (int)$p->product_vendor_id;
}
if(!empty($currentVendor))
$filters['current_vendor'] = '(hikam_vendor.vendor_id =
'.$currentVendor.')';
}
}
public function loadVendorProductCharacteristics(&$product,
&$mainCharacteristics, &$characteristics, $push_variants = false)
{
$characteristic = null;
$product->characteristics =
@$mainCharacteristics[$product->product_id][0];
foreach($product->characteristics as $k => $c) {
if(empty($c->values) && $c->characteristic_alias ==
'vendor') {
$characteristic = $k;
break;
}
}
if(empty($characteristic) || empty($product->variants))
return;
$characteristic_id =
(int)$product->characteristics[$characteristic]->characteristic_id;
$vendor_products = array();
foreach($product->variants as $v) {
if((int)$v->product_vendor_id > 0)
$vendor_products[ (int)$v->product_id ] =
(int)$v->product_vendor_id;
}
if(empty($vendor_products))
return;
$query = 'SELECT vendor_id, vendor_name FROM ' .
hikamarket::table('vendor') . ' WHERE vendor_id IN
('.implode(',', $vendor_products).') AND
vendor_published = 1';
$this->db->setQuery($query);
$vendors = $this->db->loadObjectList('vendor_id');
foreach($vendor_products as $p => $v) {
$id = $characteristic_id . 'v' . $v;
$c = new stdClass();
$c->variant_characteristic_id = $id;
$c->variant_product_id = $p;
$c->ordering = 0;
$c->characteristic_id = $id;
$c->characteristic_ordering = 0;
$c->characteristic_display_type = '';
$c->characteristic_params = '';
$c->characteristic_parent_id = $characteristic_id;
$c->characteristic_value = $vendors[$v]->vendor_name;
$c->characteristic_alias = $vendors[$v]->vendor_name;
$c->characteristic_vendor_id = $v;
if(!isset($mainCharacteristics[$product->product_id][$characteristic_id]))
{
$mainCharacteristics[$product->product_id][$characteristic_id] =
array(
$id => &$c
);
}
$characteristics[] =& $c;
unset($c);
}
if(!$push_variants)
return;
foreach($product->variants as &$v) {
if(empty($v->characteristics))
$v->characteristics = array();
$id = (int)$v->product_vendor_id;
$c = new stdClass();
$c->id = 'v' . $id;
$c->value = $vendors[$id]->vendor_name;
$v->characteristics[$characteristic_id] = $c;
}
unset($v);
}
public function loadVendorProductCharacteristicsData($product_id,
$new_variants_ids, $element) {
}
public function handleTranslation(&$product) {
if(empty($product) || empty($product->product_id))
return false;
$data = array();
$translationHelper =
hikamarket::get('shop.helper.translation');
$formData = hikaInput::get()->get('translation', array(),
'array');
$languages = $translationHelper->loadLanguages();
$fields_acl = array(
'product_name' => 'name',
'product_page_title' => 'pagetitle',
'product_url' => 'url',
'product_alias' => 'alias',
'product_canonical' => 'canonical',
'product_meta_description' => 'metadescription',
'product_keywords' => 'keywords',
'product_description' => 'description',
);
if(hikamarket::acl('product/edit/customfields')) {
$fieldsClass = hikamarket::get('shop.class.field');
$product_fields =
$fieldsClass->getFields('display:vendor_product_edit=1',
$product, 'product', 'field&task=state');
foreach($product_fields as $f) {
$fields_acl[ $f->field_namekey ] = true;
}
}
foreach($formData as $field => $trans) {
if(!isset($fields_acl[$field]))
continue;
if(is_string($fields_acl[$field]))
$fields_acl[$field] =
hikamarket::acl('product/edit/'.$fields_acl[$field]);
if(!$fields_acl[$field])
continue;
foreach($trans as $lg => $value) {
$lg = (int)$lg;
if($lg == 0 || !isset($languages[$lg]) || empty($value))
continue;
if(empty($data[$field]))
$data[$field] = array();
$data[$field][$lg] = $value;
}
}
foreach($_POST as $name => $value) {
if(!preg_match('#^translation_([a-z_]+)_([0-9]+)$#i', $name,
$match))
continue;
$html_element = trim(hikaInput::get()->getRaw($name, ''));
if(empty($html_element))
continue;
$lg = (int)$match[2];
$field = hikashop_secureField($match[1]);
$value = $html_element;
if(!isset($fields_acl[$field]) || !isset($languages[$lg]))
continue;
if(is_string($fields_acl[$field]))
$fields_acl[$field] =
hikamarket::acl('product/edit/'.$fields_acl[$field]);
if(!$fields_acl[$field])
continue;
if(empty($data[$field]))
$data[$field] = array();
$data[$field][$lg] = $value;
}
$translationHelper =
hikamarket::get('shop.helper.translation');
$translationHelper->handleTranslations('product',
$product->product_id, $product, 'hikashop_', $data);
return true;
}
}
classes/shipping.php000064400000045563151160562270010555 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketShippingClass extends hikamarketClass {
protected $tables = array('shop.shipping');
protected $pkeys = array('shipping_id');
protected $toggle = array('shipping_published' =>
'shipping_id');
protected $toggleAcl = array('shipping' =>
'shipping_published');
protected $deleteToggle = array('shop.shipping' =>
array('shipping_id', 'shipping_type'));
public function save(&$element) {
$shopClass = hikamarket::get('shop.class.shipping');
return $shopClass->save($element);
}
public function onShippingWarehouseFilter(&$shipping_groups,
&$order, &$rates) {
$config = hikamarket::config();
if(!$config->get('shipping_per_vendor', 1))
return;
$orderClass = hikamarket::get('class.order');
$assignedProducts = $orderClass->getProductVendorAttribution($order);
$singlegroup = (count($shipping_groups) == 1);
$new_groups = array();
$vendors = array();
$moveGroups = array();
foreach($shipping_groups as $group_id => $shipping_group) {
foreach($shipping_group->products as $k => $product) {
$vendor_id = (int)$product->product_vendor_id;
if(isset($assignedProducts[(int)$product->cart_product_id])
&&
!empty($assignedProducts[(int)$product->cart_product_id]['vendor']))
$vendor_id =
(int)$assignedProducts[(int)$product->cart_product_id]['vendor'];
if($vendor_id > 1) {
$key = $group_id . ';' . $vendor_id;
if(!isset($new_groups[$key])) {
$new_groups[$key] = new stdClass();
$new_groups[$key]->products = array();
$new_groups[$key]->shippings = array();
}
$new_groups[$key]->products[] = $product;
$vendors[] = $vendor_id;
unset($shipping_group->products[$k]);
}
}
if(!empty($shipping_group->products))
$moveGroups[] = $group_id;
}
foreach($moveGroups as $group_id) {
$move_shipping_group =& $shipping_groups[$group_id];
unset($shipping_groups[$group_id]);
$shipping_groups[$group_id.'v1'] =& $move_shipping_group;
unset($move_shipping_group);
}
if(!empty($new_groups)) {
$query = 'SELECT vendor_id, vendor_name, vendor_access FROM
'.hikamarket::table('vendor').' WHERE vendor_id in
(' . implode(',', $vendors).')';
$this->db->setQuery($query);
$vendorNames = $this->db->loadObjectList('vendor_id');
foreach($new_groups as $key => $new_group) {
list($group_id, $vendor_id) = explode(';', $key, 2);
$vendor_id = (int)$vendor_id;
$vendor_access = explode(',',
$vendorNames[$vendor_id]->vendor_access);
foreach($vendor_access as $k => &$v) {
if(substr($v, 0, 1) != '@') {
unset($vendor_access[$k]);
continue;
}
$v = (int)substr($v, 1);
}
unset($v);
$new_group->name = JText::sprintf('SOLD_BY_VENDOR',
$vendorNames[$vendor_id]->vendor_name);
$new_group->vendor_id = $vendor_id;
$new_group->vendor_groups = $vendor_access;
$shipping_groups[$group_id.'v'.$vendor_id] = $new_group;
}
if($singlegroup) {
$vendorClass = hikamarket::get('class.vendor');
$mainVendor = $vendorClass->get(1);
if(isset($shipping_groups['0v1']))
$shipping_groups['0v1']->name =
JText::sprintf('SOLD_BY_VENDOR', $mainVendor->vendor_name);
else {
$id = array_keys($shipping_groups);
$id = reset($id);
$shipping_groups[$id]->name =
JText::sprintf('SOLD_BY_VENDOR', $mainVendor->vendor_name);
}
}
}
}
public function onShippingDisplay(&$order, &$rates,
&$usable_rates, &$errors) {
$warehouse_key = null;
if(isset($order->shipping_warehouse_id)) {
$warehouse_key = $order->shipping_warehouse_id;
} else {
$keys = array_keys($order->shipping_groups);
$warehouse_key = reset($keys);
unset($keys);
}
if(strpos($warehouse_key, 'v') === false)
return;
$vendor_id = (int)substr($warehouse_key, strpos($warehouse_key,
'v') + 1);
$shipping_group = $order->shipping_groups[$warehouse_key];
if(!empty($rates)) {
foreach($rates as $k => &$rate) {
if(isset($rate->shipping_published) &&
$rate->shipping_published == false)
continue;
if(!$this->checkRate($rate, $vendor_id, $warehouse_key,
$shipping_group)) {
$rate->shipping_published = false;
unset($rates[$k]);
}
}
unset($rate);
}
if(!empty($usable_rates)) {
foreach($usable_rates as $k => &$rate) {
if(isset($rate->shipping_published) &&
$rate->shipping_published == false)
continue;
if(!$this->checkRate($rate, $vendor_id, $warehouse_key,
$shipping_group)) {
$rate->shipping_published = false;
unset($usable_rates[$k]);
}
}
unset($rate);
}
}
private function checkRate(&$rate, $vendor_id, $warehouse_key,
$shipping_group) {
if(empty($rate->shipping_params->shipping_vendorgroup_filter))
return true;
$groups = explode(',',
$rate->shipping_params->shipping_vendorgroup_filter);
hikamarket::toInteger($groups);
if(empty($shipping_group->vendor_groups))
return false;
$intersect = array_intersect($shipping_group->vendor_groups,
$groups);
if(empty($intersect) && !in_array(0, $groups))
return false;
return true;
}
public function onPluginConfiguration(&$plugin, &$element,
&$extra_config, &$extra_blocks) {
$app = JFactory::getApplication();
$current_vendor_id = 0;
$vendor_id = '';
$vendor_groups = '';
if(!$app->isAdmin())
$current_vendor_id = hikamarket::loadVendor(false);
if(!empty($element->shipping_params->shipping_warehouse_filter)) {
if(strpos($element->shipping_params->shipping_warehouse_filter,
'v') !== false) {
list($data, $vendor_id) = explode('v',
$element->shipping_params->shipping_warehouse_filter, 2);
if(substr($vendor_id, 0, 1) == '@') {
$vendor_groups = substr($vendor_id, 1);
} else {
$vendor_id = (int)$vendor_id;
}
if($vendor_id === 0)
$vendor_id = '';
$element->shipping_params->shipping_warehouse_filter = $data;
}
}
if($current_vendor_id > 1)
return;
if(empty($vendor_id) && isset($element->shipping_vendor_id))
$vendor_id = (int)$element->shipping_vendor_id;
$nameboxType = hikamarket::get('type.namebox');
$aclType = hikamarket::get('type.joomla_acl');
$acl_min = !empty($vendorgroups);
$extra_blocks[] = '
<div class="hikashop_backend_tile_edition">
<div class="hkc-xl-12 hikashop_tile_block"><div
style="min-height: 150px;">
<div class="hikashop_tile_title">' .
JText::_('MAIN_INFORMATION') . '</div>
<dl class="hika_options">
<dt class="hikamarket_shipping_vendor_filter"><label
for="data[vendor][vendor_name]">' .
JText::_('HIKA_VENDOR') . '</label></dt>
<dd class="hikamarket_shipping_vendor_filter">'.
$nameboxType->display(
'data[shipping][shipping_params][shipping_vendor_filter]',
(int)$vendor_id,
hikamarketNameboxType::NAMEBOX_SINGLE,
'vendor',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>'
)
).
'</dd>
<dt class="hikamarket_vendor_name"><label
for="data[vendor][vendor_name]">' .
JText::_('HIKAM_VENDOR_GROUP') . '</label></dt>
<dd class="hikamarket_vendor_name input_large">'.
$aclType->displayList('data[shipping][shipping_params][shipping_vendorgroup_filter]',
@$element->shipping_params->shipping_vendorgroup_filter,
'HIKA_NONE').
'</dd>
</dl>
</div></div>
</div>
<div style="clear:both"></div>
';
}
public function onBeforePluginSave(&$element, &$do, $new = false)
{
$app = JFactory::getApplication();
if($app->isAdmin()) {
if(isset($element->shipping_params->shipping_vendor_filter))
$element->shipping_vendor_id =
(int)$element->shipping_params->shipping_vendor_filter;
} else {
if(isset($element->shipping_params) &&
isset($element->shipping_vendor_id) &&
(!isset($element->shipping_params->shipping_vendor_filter) ||
(int)$element->shipping_vendor_id > 1))
$element->shipping_params->shipping_vendor_filter =
(int)$element->shipping_vendor_id;
}
if(empty($element->shipping_params->shipping_vendor_filter)
&&
empty($element->shipping_params->shipping_vendorgroup_filter))
return;
if(!empty($element->shipping_params->shipping_vendor_filter)
&&
!empty($element->shipping_params->shipping_vendorgroup_filter)) {
$app->enqueueMessage('Please do not assign a vendor and a vendor
group in the same time', 'error');
$do = false;
return;
}
if(!empty($element->shipping_params->shipping_vendor_filter)) {
$shipping_vendor_filter =
(int)$element->shipping_params->shipping_vendor_filter;
if(!empty($element->shipping_params->shipping_warehouse_filter))
$element->shipping_params->shipping_warehouse_filter .=
'v' . $shipping_vendor_filter;
else
$element->shipping_params->shipping_warehouse_filter =
'0v' . $shipping_vendor_filter;
}
}
public function loadConfigurationFields() {
$main_form = array(
'shipping_price' => array(
'name' => 'PRICE',
'type' => 'price',
'format' => 'float',
'link' => 'shipping_currency_id',
'data' => 'shipping_currency_id',
'linkformat' => 'int',
),
'params.shipping_percentage' => array(
'name' => 'DISCOUNT_PERCENT_AMOUNT',
'type' => 'input',
'format' => 'float',
'append' => '%'
),
'params.shipping_tax' => array(
'name' => 'AUTOMATIC_TAXES',
'type' => 'boolean',
'format' => 'boolean',
'default' => '0'
),
'shipping_tax_id' => array(
'name' => 'TAXATION_CATEGORY',
'type' => 'tax',
'format' => 'int',
'display' => array(
'params.shipping_tax' => array(null, 0)
)
),
'params.shipping_per_product' => array(
'name' => 'USE_PRICE_PER_PRODUCT',
'type' => 'boolean',
'format' => 'boolean',
'default' => '0'
),
'params.shipping_price_per_product' => array(
'name' => 'PRICE_PER_PRODUCT',
'type' => 'input',
'format' => 'float',
'display' => array(
'params.shipping_per_product' => 1
)
),
'params.shipping_override_address' => array(
'name' => 'OVERRIDE_SHIPPING_ADDRESS',
'type' => 'list',
'format' => 'int',
'data' => array(
0 => 'HIKASHOP_NO',
1 => 'STORE_ADDRESS',
2 => 'HIKA_HIDE',
3 => 'TEXT_VERSION',
4 => 'HTML_VERSION'
)
),
'params.shipping_override_address_text' => array(
'name' => 'OVERRIDE_SHIPPING_ADDRESS_TEXT',
'type' => 'textarea',
'format' => 'string',
'display' => array(
'params.shipping_override_address' => array(3, 4)
)
),
'params.override_tax_zone' => array(
'name' => 'OVERRIDE_TAX_ZONE',
'type' => 'zone',
'format' => 'string'
)
);
$restriction_form = array(
'shipping_zone_namekey' => array(
'name' => 'ZONE',
'type' => 'zone',
'format' => 'string',
'category' => 'zone'
),
'shipping_currency' => array(
'name' => 'CURRENCY',
'type' => 'currencies',
'format' => 'arrayInt',
'category' => 'currency'
),
'params.shipping_warehouse_filter' => array(
'name' => 'WAREHOUSE',
'type' => 'warehouse',
'format' => 'string',
'category' => 'warehouse'
),
'params.shipping_min_price' => array(
'name' => 'SHIPPING_MIN_PRICE',
'type' => 'input',
'format' => 'float',
'category' => 'price'
),
'params.shipping_max_price' => array(
'name' => 'SHIPPING_MAX_PRICE',
'type' => 'input',
'format' => 'float',
'category' => 'price'
),
'params.shipping_virtual_included' => array(
'name' => 'INCLUDE_VIRTUAL_PRODUCTS_PRICE',
'type' => 'boolean',
'format' => 'boolean',
'default' => '0',
'category' => 'price',
'category_check' => false
),
'params.shipping_price_use_tax' => array(
'name' => 'WITH_TAX',
'type' => 'boolean',
'format' => 'boolean',
'default' => '1',
'category' => 'price',
'category_check' => false
),
'params.shipping_min_quantity' => array(
'name' => 'SHIPPING_MIN_QUANTITY',
'type' => 'input',
'format' => 'int',
'category' => 'quantity'
),
'params.shipping_max_quantity' => array(
'name' => 'SHIPPING_MAX_QUANTITY',
'type' => 'input',
'format' => 'int',
'category' => 'quantity'
),
'params.shipping_min_weight' => array(
'name' => 'SHIPPING_MIN_WEIGHT',
'type' => 'weight',
'format' => 'float',
'link' => 'shipping_weight_unit',
'linkformat' => 'string',
'category' => 'weight'
),
'params.shipping_max_weight' => array(
'name' => 'SHIPPING_MAX_WEIGHT',
'type' => 'weight',
'format' => 'float',
'link' => 'shipping_weight_unit',
'linkformat' => 'string',
'category' => 'weight'
),
'params.shipping_min_volume' => array(
'name' => 'SHIPPING_MIN_VOLUME',
'type' => 'volume',
'format' => 'float',
'link' => 'shipping_size_unit',
'linkformat' => 'string',
'category' => 'volume'
),
'params.shipping_max_volume' => array(
'name' => 'SHIPPING_MAX_VOLUME',
'type' => 'volume',
'format' => 'float',
'link' => 'shipping_size_unit',
'linkformat' => 'string',
'category' => 'volume'
),
'params.shipping_zip_prefix' => array(
'name' => 'SHIPPING_PREFIX',
'type' => 'input',
'format' => 'string',
'category' => 'postcode'
),
'params.shipping_min_zip' => array(
'name' => 'SHIPPING_MIN_ZIP',
'type' => 'input',
'format' => 'string',
'category' => 'postcode'
),
'params.shipping_max_zip' => array(
'name' => 'SHIPPING_MAX_ZIP',
'type' => 'input',
'format' => 'string',
'category' => 'postcode'
),
'params.shipping_zip_suffix' => array(
'name' => 'SHIPPING_SUFFIX',
'type' => 'input',
'format' => 'string',
'category' => 'postcode'
),
);
if(hikashop_level(2)) {
$restriction_form['shipping_access'] = array(
'name' => 'ACCESS_LEVEL',
'type' => 'acl',
'format' => 'acl',
'category' => 'acl',
'empty_value' => 'all'
);
}
return array(
'main' => $main_form,
'restriction' => $restriction_form
);
}
public function onBeforeHikaPluginConfigurationListing($type,
&$filters, &$order, &$searchMap, &$extrafilters,
&$view) {
}
public function onAfterHikaPluginConfigurationListing($type, &$rows,
&$listing_columns, &$view) {
$vendors = array();
$groups = array();
foreach($rows as &$row) {
if(is_string($row->shipping_params))
$row->shipping_params =
hikamarket::unserialize($row->shipping_params);
if(empty($row->shipping_vendor_id) &&
!empty($row->shipping_params->shipping_vendor_id))
$row->shipping_vendor_id =
(int)$row->shipping_params->shipping_vendor_id;
if(empty($row->shipping_vendor_group) &&
!empty($row->shipping_params->shipping_vendorgroup_filter))
$row->shipping_vendor_group =
(int)$row->shipping_params->shipping_vendorgroup_filter;
if(!empty($row->shipping_vendor_id)) {
$id = (int)$row->shipping_vendor_id;
$vendors[$id] = $id;
}
if(!empty($row->shipping_vendor_group)) {
$id = (int)$row->shipping_vendor_group;
$groups[$id] = $id;
}
}
unset($row);
if(empty($vendors) && empty($groups))
return;
$listing_columns['vendor'] = array(
'name' => 'HIKA_VENDOR',
'col' => 'vendor_name'
);
if(!empty($vendors)) {
$db = JFactory::getDBO();
$query = 'SELECT * FROM ' .
hikamarket::table('vendor') . ' WHERE vendor_id IN
('.implode(',', $vendors) . ')';
$db->setQuery($query);
$vendors = $db->loadObjectList('vendor_id');
}
if(!empty($groups)) {
$joomlaAclType = hikamarket::get('type.joomla_acl');
$groupList = $joomlaAclType->getList();
foreach($groupList as $g) {
if(!isset($groups[$g->id]))
continue;
$groups[$g->id] = $g->text;
}
unset($groupList);
}
foreach($rows as &$row) {
$row->vendor_name = '';
if(!empty($row->shipping_vendor_id)) {
$id = (int)$row->shipping_vendor_id;
if(isset($vendors[ $id ]))
$row->vendor_name = $vendors[ $id ]->vendor_name;
else
$row->vendor_name = $id;
}
if(!empty($row->shipping_vendor_group)) {
if(!empty($row->vendor_name))
$row->vendor_name .= '<br/>';
$id = (int)$row->shipping_vendor_group;
if(isset($groups[ $id ]))
$row->vendor_name .= '@'.$groups[ $id ];
else
$row->vendor_name .= '@'.$id;
}
}
unset($row);
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$query = 'SELECT * FROM ' .
hikamarket::table('shop.shipping') . ' WHERE
shipping_published = 1';
$this->db->setQuery($query);
$methods = $this->db->loadObjectList('shipping_id');
foreach($methods as $method) {
$plugin = null;
if($method->shipping_type != 'manual')
$plugin = hikamarket::import('hikashopshipping',
$method->shipping_type);
if(!empty($plugin) && method_exists($plugin,
'shippingMethods')) {
if(is_string($method->shipping_params) &&
!empty($method->shipping_params))
$method->shipping_params =
hikamarket::unserialize($method->shipping_params);
$instances = $plugin->shippingMethods($method);
if(!empty($instances)) {
foreach($instances as $id => $instance) {
$shipping_namekey = $method->shipping_type . '_' . $id;
$ret[0][$shipping_namekey] = $method->shipping_name . ' -
' . $instance;
}
}
} else {
$shipping_namekey = $method->shipping_type . '_' .
$method->shipping_id;
$ret[0][$shipping_namekey] = $method->shipping_name;
}
}
if(!empty($value)) {
if($mode == hikamarketNameboxType::NAMEBOX_SINGLE) {
$ret[1] = $ret[0][$value];
} else {
if(!is_array($value))
$value = array($value);
foreach($value as $v) {
if(isset($ret[0][$v]))
$ret[1][$v] = $ret[0][$v];
}
}
}
return $ret;
}
public function toggleId($task, $value = null) {
if($value !== null) {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value == 0 ||
empty($this->toggle[$task]) ||
!hikamarket::acl('shippingplugin/edit/'.str_replace('shipping_',
'', $task)) || !hikamarket::isVendorPlugin((int)$value,
'shipping') ))
return false;
}
if(!empty($this->toggle[$task]))
return $this->toggle[$task];
return false;
}
public function toggleDelete($value1 = '', $value2 =
'') {
$app = JFactory::getApplication();
if(!$app->isAdmin() && ((int)$value1 == 0 ||
!hikamarket::acl('shippingplugin/delete') ||
!hikamarket::isVendorPlugin((int)$value1, 'shipping')))
return false;
if(!empty($this->deleteToggle))
return $this->deleteToggle;
return false;
}
}
classes/statistics.php000064400000153120151160562270011113
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketStatisticsClass extends hikamarketClass {
protected $tables = array();
protected $pkeys = array();
protected $toggle = array();
public $timeoffset = '';
public function __construct($config = array()) {
parent::__construct($config);
$this->config = hikamarket::config();
$this->joomlaConfig = JFactory::getConfig();
$this->shopConfig = hikamarket::config(false);
if(!HIKASHOP_J30)
$offset =
$this->joomlaConfig->getValue('config.offset');
else
$offset = $this->joomlaConfig->get('offset');
if(!is_numeric($offset)) {
$tz = new
DateTimeZone(JFactory::getUser()->getParam('timezone',
$offset));
$date = JFactory::getDate('now', $tz);
$offset = $date->getOffsetFromGmt(true);
}
$this->timeoffset = ((int)$offset)*3600;
$this->timeoffsetStr = ''.$this->timeoffset;
if($this->timeoffset == 0)
$this->timeoffsetStr = '';
else if($this->timeoffset > 0)
$this->timeoffsetStr = '+' . $this->timeoffset ;
}
public function getVendor($vendor) {
if(is_int($vendor) || is_string($vendor))
$vendor_id = (int)$vendor;
else
$vendor_id = (int)$vendor->vendor_id;
$app = JFactory::getApplication();
$order_type = 'subsale';
if($vendor_id == 1) {
$vendor_id = 0;
$order_type = 'sale';
}
$valid_order_statuses = explode(',',
$this->config->get('stats_valid_order_statuses',
'confirmed,shipped'));
$created_status = false;
foreach($valid_order_statuses as &$status) {
if(trim($status) == 'created')
$created_status = true;
$status = $this->db->Quote(trim($status));
}
unset($status);
$ret = array();
$ret['products_count'] = array(
'slot' => 0,
'container' => 6,
'order' => 0,
'published' => 1,
'type' => 'text',
'format' => 'number',
'label' =>
JText::_('HIKAM_STATS_TOTAL_PRODUCTS'),
'text' => 'HIKAM_X_PRODUCTS',
'query' => array(
'get' => 'single',
'select' => 'COUNT(*) as value',
'tables' => hikamarket::table('shop.product') .
' AS product ',
'filters' => array(
'product_published' => 'product.product_published =
1',
'product_type' => 'product.product_type = ' .
$this->db->Quote('main'),
'product_vendor_id' => ('product.product_vendor_id =
' . (int)$vendor_id)
)
),
'vendor_id' => (int)$vendor_id
);
$ret['sales_count'] = array(
'slot' => 0,
'container' => 6,
'order' => 1,
'published' => 1,
'type' => 'dynamic',
'format' => 'text',
'label' => JText::_('HIKAM_STATS_TOTAL_ORDERS'),
'prefix' => '<table style="width:100%"
class="hikamarket_stat_table"><thead><tr><th>'.JText::_('HIKAM_STAT_PERIOD').'</th><th>'.JText::_('HIKAM_STAT_NUMBER').'</th></thead><tbody>',
'dynamic' =>
'<tr><td>{name}</td><td>{value}</td></tr>',
'suffix' => '</tbody></table>',
'vars' => array(
array(
'name' => JText::_('HIKAM_STAT_ALL'),
'DATE_START' => 0,
'DATE_END' => -1
),
array(
'name' => JText::_('HIKAM_STAT_YEAR'),
'DATE_RANGE' => 'this.year'
),
array(
'name' => JText::_('HIKAM_STAT_MONTH'),
'DATE_RANGE' => 'this.month'
),
array(
'name' => JText::_('HIKAM_STAT_WEEK'),
'DATE_RANGE' => 'this.week'
)
),
'query' => array(
'get' => 'object',
'select' => 'COUNT(*) as value',
'tables' => hikamarket::table('shop.order') .
' AS hk_order ',
'filters' => array(
'order_type' => 'hk_order.order_type =
\''.$order_type.'\'',
'order_vendor_id' => ('hk_order.order_vendor_id =
' . (int)$vendor_id),
'order_status' => ('hk_order.order_status IN
('.implode(',', $valid_order_statuses).')'),
'order_created' => ($created_status ?
'hk_order.order_created >= {DATE_START} AND ({DATE_END} <=
0 OR hk_order.order_created <= {DATE_END})' :
'hk_order.order_invoice_created >= {DATE_START} AND
({DATE_END} <= 0 OR hk_order.order_invoice_created <=
{DATE_END})'),
)
),
'vendor_id' => (int)$vendor_id
);
$ret['sales_avg'] = array(
'slot' => 0,
'container' => 6,
'order' => 2,
'published' => 1,
'type' => 'list',
'format' => 'price',
'label' =>
JText::_('HIKAM_STATS_AVERAGE_ORDER_PRICE'),
'vars' => array(
'DATE_RANGE' => 'all'
),
'query' => array(
'get' => 'list',
'select' => array(
(($vendor_id == 0) ? 'AVG(hk_order.order_full_price) as
value' : 'AVG( CASE WHEN hk_order.order_vendor_price >= 0 THEN
hk_order.order_vendor_price ELSE (hk_order.order_full_price +
hk_order.order_vendor_price) END ) as value'),
'hk_order.order_currency_id as currency'
),
'tables' => hikamarket::table('shop.order') .
' AS hk_order ',
'filters' => array(
'order_type' => 'hk_order.order_type =
\''.$order_type.'\'',
'order_vendor_id' => ('hk_order.order_vendor_id =
' . (int)$vendor_id),
'order_status' => ('hk_order.order_status IN
('.implode(',', $valid_order_statuses).')'),
'order_created' => ($created_status ?
'hk_order.order_created >= {DATE_START} AND ({DATE_END} <=
0 OR hk_order.order_created <= {DATE_END})':
'hk_order.order_invoice_created >= {DATE_START} AND
({DATE_END} <= 0 OR hk_order.order_invoice_created <=
{DATE_END})'),
),
'group' => 'hk_order.order_currency_id'
),
'vendor_id' => (int)$vendor_id
);
$ret['sales_sum'] = array(
'slot' => 0,
'container' => 6,
'order' => 3,
'published' => 1,
'type' => 'list',
'format' => 'price',
'label' =>
JText::_('HIKAM_STATS_ORDERS_THIS_MONTH'),
'vars' => array(
'DATE_RANGE' => 'this.month'
),
'query' => array(
'get' => 'object',
'select' => array(
(($vendor_id == 0) ? 'SUM(hk_order.order_full_price) as
value' : 'SUM( CASE WHEN hk_order.order_vendor_price >= 0 THEN
hk_order.order_vendor_price ELSE (hk_order.order_full_price +
hk_order.order_vendor_price) END ) as value'),
'hk_order.order_currency_id as currency'
),
'tables' => hikamarket::table('shop.order') .
' AS hk_order ',
'filters' => array(
'order_type' => 'hk_order.order_type =
\''.$order_type.'\'',
'order_vendor_id' => ('hk_order.order_vendor_id =
' . (int)$vendor_id),
'order_status' => ('hk_order.order_status IN
('.implode(',', $valid_order_statuses).')'),
'order_created' => ($created_status ?
'hk_order.order_created >= {DATE_START} AND ({DATE_END} <=
0 OR hk_order.order_created <= {DATE_END})':
'hk_order.order_invoice_created >= {DATE_START} AND
({DATE_END} <= 0 OR hk_order.order_invoice_created <=
{DATE_END})'),
)
),
'vendor_id' => (int)$vendor_id
);
$ret['orders_total_unpaid'] = array(
'slot' => 0,
'container' => 6,
'order' => 4,
'published' => 1,
'type' => 'dynamic',
'dynamic' => '{value:price} ({count})',
'format' => 'text',
'label' => JText::_('ORDERS_UNPAID'),
'vars' => array(
'DATE_END' => -1,
),
'query' => array(
'get' => 'list',
'select' => array(
'value' =>
'SUM(hk_transaction.order_transaction_price) as value',
'count' =>
'COUNT(hk_transaction.order_transaction_paid) as count',
'currency' =>
'hk_transaction.order_transaction_currency_id as currency'
),
'tables' =>
hikamarket::table('order_transaction') . ' AS hk_transaction
',
'filters' => array(
'transaction_vendor_id' => (($vendor_id == 0) ?
'hk_transaction.vendor_id > 1' :
('hk_transaction.vendor_id = ' . (int)$vendor_id)),
'transaction_paid' =>
'hk_transaction.order_transaction_paid = 0',
'transaction_price' =>
'hk_transaction.order_transaction_price != 0.0',
'transaction_valid' =>
'hk_transaction.order_transaction_valid > 0',
'transaction_created' => '({DATE_END} <= 0 OR
hk_transaction.order_transaction_created <= {DATE_END})',
),
'group' =>
'hk_transaction.order_transaction_currency_id'
),
'vendor_id' => (int)$vendor_id
);
if(false &&
(int)$this->config->get('days_payment_request', 0) > 0)
{
$now = explode('-', date('m-d-Y'), 3);
$days = (int)$this->config->get('days_payment_request',
0) - 1;
$ret['orders_total_unpaid']['vars']['DATE_END']
= mktime(0, 0, 0, $now[0], $now[1], $now[2]) - ($days * 24 * 3600) +
$this->timeoffset;
}
$ret['last_orders'] = array(
'slot' => 0,
'container' => 6,
'order' => 5,
'published' => 1,
'type' => 'dynamic',
'label' => JText::_('HIKAM_STATS_LAST_ORDERS'),
'vars' => array(
'COUNTER' => 5
),
'prefix' => '<table style="width:100%"
class="hikamarket_stat_table"><thead><tr><th>'.JText::_('ORDER_NUMBER').'</th><th>'.JText::_('ORDER_STATUS').'</th><th>'.JText::_('PRICE').'</th></thead><tbody>',
'dynamic' =>
'<tr><td>{order_number:order_link}</td><td>{order_status:order_status}</td><td>{order_full_price:price}</td></tr>',
'suffix' => '</tbody></table>',
'format' => 'text',
'query' => array(
'get' => 'list',
'select' => 'hk_order.*, hk_user.*,
hk_order.order_currency_id as currency',
'tables' => array(
hikamarket::table('shop.order') . ' AS hk_order',
'INNER JOIN
'.hikamarket::table('shop.user').' AS hk_user ON
hk_order.order_user_id = hk_user.user_id'
),
'filters' => array(
'order_type' => 'hk_order.order_type =
\''.$order_type.'\'',
'order_vendor_id' => ('hk_order.order_vendor_id =
' . (int)$vendor_id),
),
'order' => 'hk_order.order_created DESC',
'limit' => '{COUNTER}'
),
'vendor_id' => (int)$vendor_id
);
$ret['orders_history'] = array(
'slot' => 1,
'container' => 12,
'order' => 7,
'published' => 1,
'type' => 'graph',
'label' => JText::_('ORDERS'),
'graph' => array(
'cols' => 'currency',
'axis' => 'date',
),
'vars' => array(
'DATE_RANGE' => 'this.year',
'DATE_GROUP' => 'day',
'DATE_START' => 0,
'DATE_END' => -1,
),
'query' => array(
'get' => 'list',
'select' => array(
'value' => (($vendor_id == 0) ?
'SUM(hk_order.order_full_price) as value' : 'SUM( CASE WHEN
hk_order.order_vendor_price >= 0 THEN hk_order.order_vendor_price ELSE
(hk_order.order_full_price + hk_order.order_vendor_price) END ) as
value'),
'axis' => ($created_status ?
'DATE_FORMAT(FROM_UNIXTIME(CAST(hk_order.order_created AS
SIGNED)'.$this->timeoffsetStr.'),\'{DATE_FORMAT}\')
as axis':
'DATE_FORMAT(FROM_UNIXTIME(CAST(hk_order.order_invoice_created
AS
SIGNED)'.$this->timeoffsetStr.'),\'{DATE_FORMAT}\')
as axis'),
'currency' => 'currencies.currency_code as
currency'
),
'tables' => array(
hikamarket::table('shop.order') . ' AS hk_order',
'INNER JOIN
'.hikamarket::table('shop.currency').' AS currencies ON
hk_order.order_currency_id = currencies.currency_id'
),
'filters' => array(
'order_type' => 'hk_order.order_type =
\''.$order_type.'\'',
'order_vendor_id' => ('hk_order.order_vendor_id =
' . (int)$vendor_id),
'order_status' => ('hk_order.order_status IN
('.implode(',', $valid_order_statuses).')'),
'order_created' => ($created_status ?
'hk_order.order_created >= {DATE_START} AND ({DATE_END} <=
0 OR hk_order.order_created <= {DATE_END})':
'hk_order.order_invoice_id > 0 AND
hk_order.order_invoice_created > 0 AND hk_order.order_invoice_created
>= {DATE_START} AND ({DATE_END} <= 0 OR
hk_order.order_invoice_created <= {DATE_END})'),
),
'group' => 'axis, hk_order.order_currency_id',
'order' => 'axis ASC'
),
'vendor_id' => (int)$vendor_id
);
$ret['product_compare'] = array(
'slot' => 1,
'container' => 12,
'order' => 8,
'published' => 1,
'type' => 'pie',
'label' =>
JText::_('HIKAM_STATS_PRODUCT_COMPARE'),
'pie' => array(
'key' => 'order_product_name',
'text' => 'value',
'donut' => true,
'3d' => false,
'legend' => true
),
'vars' => array(
'DATE_RANGE' => 'this.month',
'LIMIT' => 15
),
'query' => array(
'get' => 'list',
'select' => array(
'key' => 'hk_product.product_id as
product_id',
'name' => 'hk_product.order_product_name',
'value' => 'ROUND(SUM(hk_product.order_product_price
* hk_product.order_product_quantity),2) AS value',
'counter' => 'COUNT(hk_order.order_id) AS
orders_count'
),
'tables' => array(
hikamarket::table('shop.order_product') . ' AS
hk_product',
'INNER JOIN '. hikamarket::table('shop.order') .
' AS hk_order ON hk_order.order_id = hk_product.order_id'
),
'filters' => array(
'order_type' => 'hk_order.order_type =
\''.$order_type.'\'',
'order_vendor_id' => ('hk_order.order_vendor_id =
' . (int)$vendor_id),
'order_status' => ('hk_order.order_status IN
('.implode(',', $valid_order_statuses).')'),
'order_created' => ($created_status ?
'hk_order.order_created >= {DATE_START} AND ({DATE_END} <=
0 OR hk_order.order_created <= {DATE_END})':
'hk_order.order_invoice_created >= {DATE_START} AND
({DATE_END} <= 0 OR hk_order.order_invoice_created <=
{DATE_END})'),
),
'group' => 'hk_product.product_id',
'order' => 'value DESC',
'limit' => '{LIMIT}'
),
'vendor_id' => (int)$vendor_id
);
$ret['geo_sales'] = array(
'slot' => 1,
'container' => 12,
'order' => 9,
'published' => 0,
'type' => 'geo',
'label' => JText::_('HIKAM_STATS_GEO_SALES'),
'geo' => array(
'key' => 'zone',
'text' => 'value',
),
'vars' => array(
'DATE_RANGE' => 'this.month',
),
'query' => array(
'get' => 'list',
'select' => array(
'COUNT(hk_order.order_id) AS value',
'hk_zone.zone_name_english AS zone'
),
'tables' => array(
hikamarket::table('shop.order') . ' AS hk_order
',
' INNER JOIN ' . hikamarket::table('shop.address')
. ' AS hk_address ON hk_order.order_shipping_address_id =
hk_address.address_id',
' INNER JOIN ' . hikamarket::table('shop.zone') .
' AS hk_zone ON hk_zone.zone_namekey =
hk_address.address_country',
),
'filters' => array(
'order_type' => 'hk_order.order_type =
\''.$order_type.'\'',
'order_vendor_id' => ('hk_order.order_vendor_id =
' . (int)$vendor_id),
'order_status' => ('hk_order.order_status IN
('.implode(',', $valid_order_statuses).')'),
'order_created' => ($created_status ?
'hk_order.order_created >= {DATE_START} AND ({DATE_END} <=
0 OR hk_order.order_created <= {DATE_END})':
'hk_order.order_invoice_created >= {DATE_START} AND
({DATE_END} <= 0 OR hk_order.order_invoice_created <=
{DATE_END})'),
),
'group' => 'hk_address.address_country'
),
'vendor_id' => (int)$vendor_id
);
JPluginHelper::importPlugin('hikamarket');
$extra_list =
$app->triggerEvent('onHikamarketStatisticPluginList', array(
$vendor_id,
array(
'created' => $created_status,
'valid' => $valid_order_statuses,
'offset' => $this->timeoffsetStr
)
));
if(!empty($extra_list)) {
foreach($extra_list as $v) {
if(!isset($v['name']))
continue;
if(!isset($v['vendor_id']))
$v['vendor_id'] = (int)$vendor_id;
$k = 'plugin.'.$v['name'];
$ret[$k] = $v;
}
}
return $ret;
}
public function getDashboard() {
$ret = array();
$ret['vendor_count'] = array(
'slot' => 0,
'order' => 1,
'published' => 1,
'class' => 'hkc-lg-4 hkc-md-6',
'label' => JText::_('HIKA_STATS_TOTAL_VENDOR'),
'format' => 'number',
'type' => 'tile',
'tile' => array(
'icon' => array('type' => 'fa',
'value' => 'industry'),
'view' =>
hikamarket::completeLink('vendor&task=listing'),
),
'query' => array(
'get' => 'single',
'select' => 'COUNT(*) as value',
'tables' => hikamarket::table('vendor') . '
AS hk_vendor ',
'filters' => array(
'vendor_published' => 'hk_vendor.vendor_published =
1'
)
)
);
$ret['orders_total_unpaid'] = array(
'slot' => 0,
'order' => 2,
'published' => 1,
'class' => 'hkc-lg-4 hkc-md-6',
'label' => JText::_('ORDERS_UNPAID'),
'type' => 'tile',
'format' => '{value:price} ({count})',
'vars' => array(
'DATE_END' => -1,
),
'tile' => array(
'icon' => array('type' => 'fa',
'value' => 'money fa-money-bill-alt'),
'view' =>
hikamarket::completeLink('vendor&task=listing'),
),
'query' => array(
'get' => 'list',
'select' => array(
'value' =>
'SUM(hk_transaction.order_transaction_price) as value',
'count' =>
'COUNT(hk_transaction.order_transaction_paid) as count',
'currency' =>
'hk_transaction.order_transaction_currency_id as currency'
),
'tables' =>
hikamarket::table('order_transaction') . ' AS hk_transaction
',
'filters' => array(
'transaction_vendor_id' => 'hk_transaction.vendor_id
> 1',
'transaction_paid' =>
'hk_transaction.order_transaction_paid = 0',
'transaction_price' =>
'hk_transaction.order_transaction_price != 0.0',
'transaction_valid' =>
'hk_transaction.order_transaction_valid > 0',
'transaction_created' => '({DATE_END} <= 0 OR
hk_transaction.order_transaction_created <= {DATE_END})',
),
'group' =>
'hk_transaction.order_transaction_currency_id'
)
);
$config = hikamarket::config();
$use_approval = (int)$config->get('product_approval', 0);
$ret['waiting_approval'] = array(
'slot' => 0,
'order' => 3,
'published' => $use_approval,
'class' => 'hkc-lg-4 hkc-md-6',
'label' => JText::_('WAITING_APPROVAL_LIST'),
'type' => 'tile',
'format' => 'number',
'tile' => array(
'icon' => array('type' => 'fa',
'value' => 'hourglass'),
'view' =>
hikamarket::completeLink('product&task=waitingapproval'),
),
'query' => array(
'get' => 'single',
'select' => 'COUNT(*) as value',
'tables' =>
hikamarket::table('shop.product').' AS hk_product ',
'filters' => array(
'product_type' => 'hk_product.product_type =
'.$this->db->Quote('waiting_approval')
)
)
);
return $ret;
}
public function getAjaxData($vendor_id, $name, $value) {
$statistics = $this->getVendor($vendor_id);
$buttons = array();
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikamarket');
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikashoppayment');
$app->triggerEvent('onVendorPanelDisplay',
array(&$buttons, &$statistics));
if(empty($statistics[$name]))
return false;
if(empty($statistics[$name]['type']) ||
!in_array($statistics[$name]['type'], array('graph',
'pie', 'geo')))
return false;
if($statistics[$name]['type'] == 'graph')
$dateRange = $this->getDateRangeList(true);
else
$dateRange = $this->getDateRangeList();
if(!isset($dateRange[$value]))
return false;
$vendor_statistics =
$this->config->get('vendor_statistics', null);
if(!empty($vendor_statistics)) {
foreach($statistics as $key => &$stat) {
$stat['published'] = false;
}
unset($stat);
$vendor_statistics =
hikamarket::unserialize(base64_decode($vendor_statistics));
foreach($vendor_statistics as $key => $stat_conf) {
if(!isset($statistics[$key]))
continue;
if(isset($stat_conf['slot']))
$statistics[$key]['slot'] =
(int)$stat_conf['slot'];
if(isset($stat_conf['container']))
$statistics[$key]['container'] =
(int)$stat_conf['container'];
if(isset($stat_conf['order']))
$statistics[$key]['order'] =
(int)$stat_conf['order'];
if(isset($stat_conf['published']))
$statistics[$key]['published'] =
$stat_conf['published'];
if(!empty($stat_conf['vars'])) {
foreach($stat_conf['vars'] as $k => $v)
$statistics[$key]['vars'][$k] = $v;
}
}
}
if(empty($statistics[$name]) ||
empty($statistics[$name]['published']))
return false;
$stat = $statistics[$name];
unset($statistics);
$stat['vars']['DATE_RANGE'] = $value;
switch($stat['type']) {
case 'graph':
list($headerData, $chartData) = $this->processGraphData($stat);
break;
case 'pie':
list($headerData, $chartData) = $this->processPieData($stat);
break;
case 'geo':
list($headerData, $chartData) = $this->processGeoData($stat);
break;
}
if($stat['type'] == 'graph' &&
(count($headerData) == 1 || empty($chartData)))
return '[[],[]]';
return '['.
'["' . implode('","', $headerData).
'"]'.
(empty($chartData) ? '' : ',[') .
implode('],[', $chartData).
(empty($chartData) ? '' : ']') .
']';
}
public function setDateRange(&$conf, $mode, $base = 0) {
$dates = $this->getDates($mode, $base);
if(isset($conf['vars'])) {
$conf['vars']['DATE_START'] =
$dates['start'];
$conf['vars']['DATE_END'] =
$dates['end'];
if(isset($dates['group']))
$conf['vars']['DATE_GROUP'] =
$dates['group'];
} else {
$conf['DATE_START'] = $dates['start'];
$conf['DATE_END'] = $dates['end'];
if(isset($dates['group']))
$conf['DATE_GROUP'] = $dates['group'];
}
}
public function getDates($mode, $base = 0) {
$now = explode('-', hikamarket::getDate(time(),
'm-d-Y'), 3);
$ret = array('start' => 0, 'end' => -1);
if(strpos($mode, ':') !== false) {
list($mode, $group) = explode(':', $mode, 2);
if(in_array($group, array('day', 'week',
'month', 'year')))
$ret['group'] = $group;
}
$manualProcess = false;
switch($mode) {
case '':
case 'all':
$ret['start'] = 0;
$ret['end'] = -1;
break;
case 'this.year':
$ret['start'] = gmmktime(0, 0, 0, 1, 1, $now[2]) -
$this->timeoffset;
$ret['end'] = gmmktime(23, 59, 59, $now[0], $now[1], $now[2])
- $this->timeoffset;
break;
case 'this.month':
$ret['start'] = gmmktime(0, 0, 0, $now[0], 1, $now[2]) -
$this->timeoffset;
$ret['end'] = gmmktime(23, 59, 59, $now[0], $now[1], $now[2])
- $this->timeoffset;
break;
case 'this.week':
$ret['start'] = gmmktime(0, 0, 0, $now[0], $now[1], $now[2])
- (date('N')-1)*24*3600 - $this->timeoffset;
$ret['end'] = gmmktime(23, 59, 59, $now[0], $now[1], $now[2])
- $this->timeoffset;
break;
case 'this.day':
$ret['start'] = gmmktime(0, 0, 0, $now[0], $now[1], $now[2])
- $this->timeoffset;
$ret['end'] = gmmktime(23, 59, 59, $now[0], $now[1], $now[2])
- $this->timeoffset;
break;
case 'past.year':
$ret['end'] = gmmktime(23, 59, 59, $now[0], $now[1], $now[2])
- $this->timeoffset;
$ret['start'] = strtotime('-1 year',
$ret['end'])+1;
break;
case 'past.month':
$ret['end'] = gmmktime(23, 59, 59, $now[0], $now[1], $now[2])
- $this->timeoffset;
$ret['start'] = strtotime('-1 month',
$ret['end'])+1;
break;
case 'past.month-1':
$ret['end'] = gmmktime(23, 59, 59, $now[0], $now[1], $now[2])
- $this->timeoffset;
$ret['end'] = strtotime('-1 month',
$ret['end'])+1;
$ret['start'] = strtotime('-1 month',
$ret['end'])+1;
break;
case 'past.week':
$ret['end'] = gmmktime(23, 59, 59, $now[0], $now[1], $now[2])
- $this->timeoffset;
$ret['start'] = strtotime('-1 week',
$ret['end'])+1;
break;
case 'past.day':
$ret['end'] = time() - $this->timeoffset;
$ret['start'] = $ret['end'] - 24*3600;
break;
case 'previous.year':
$ret['start'] = gmmktime(0, 0, 0, 1, 1, (int)$now[2]-1) -
$this->timeoffset;
$ret['end'] = gmmktime(23, 59, 59, 12, 31, (int)$now[2]-1) -
$this->timeoffset;
break;
case 'previous.month':
$ret['end'] = gmmktime(0, 0, 0, $now[0], 1, $now[2]) - 1 -
$this->timeoffset;
$ret['start'] = strtotime('-1 month',
$ret['end']) + 1;
break;
case 'previous.week':
$ret['end'] = gmmktime(0, 0, 0, $now[0], $now[1], $now[2]) -
(date('N')-1)*24*3600 - 1 - $this->timeoffset;
$ret['start'] = strtotime('-1 week',
$ret['end']) + 1;
break;
case 'previous.day':
$ret['end'] = gmmktime(0, 0, 0, $now[0], $now[1], $now[2]) -
$this->timeoffset;
$ret['start'] = $ret['end'] - 24*3600;
break;
default:
$manualProcess = true;
break;
}
if($manualProcess) {
}
return $ret;
}
public function getDateRangeList($group = false) {
$periods =
array('this','past','previous');
$zones =
array('year','month','week','day');
$ret = array(
'all' => 'HIKAM_PERIOD_ALL'
);
if($group === true) {
$ret = array();
foreach($zones as $z) {
$ret['all:'.$z] =
JText::_('HIKAM_PERIOD_ALL').'
('.JText::_('HIKAM_PERIOD_BY_'.strtoupper($z)).')';
}
}
foreach($periods as $period) {
foreach($zones as $zone) {
$ret[$period.'.'.$zone] =
'HIKAM_PERIOD_'.strtoupper($period).'_'.strtoupper($zone);
if($group != true)
continue;
$m = $zone;
foreach($zones as $z) {
if($z === $m) {
$m = true;
continue;
}
if($m !== true)
continue;
$ret[$period.'.'.$zone.':'.$z] =
JText::_('HIKAM_PERIOD_'.strtoupper($period).'_'.strtoupper($zone)).'
('.JText::_('HIKAM_PERIOD_BY_'.strtoupper($z)).')';
}
}
}
return $ret;
}
protected function processQuery($queryData, $vars = array(), $limit =
null) {
if(empty($queryData['get']))
$queryData['get'] = 'single';
$select = $queryData['select'];
if(is_array($select))
$select = implode(', ', $select);
$tables = $queryData['tables'];
if(is_array($tables))
$tables = implode(' ', $tables);
$query = 'SELECT ' . $select . ' FROM ' . $tables;
if(!empty($queryData['filters'])) {
$query .= ' WHERE (' . implode(') AND (',
$queryData['filters']) . ') ';
}
if(!empty($queryData['group']))
$query .= ' GROUP BY ' .
(is_array($queryData['group']) ? implode(',',
$queryData['group']) : $queryData['group']);
if(!empty($queryData['order']))
$query .= ' ORDER BY ' .
(is_array($queryData['order']) ? implode(',',
$queryData['order']) : $queryData['order']);
if(!empty($vars)) {
if(isset($vars['DATE_RANGE'])) {
$this->setDateRange($vars, $vars['DATE_RANGE']);
$vars['_DATE_RANGE'] = $vars['DATE_RANGE'];
unset($vars['DATE_RANGE']);
}
$keys = array_keys($vars);
foreach($keys as &$key) { $key = '{'.$key.'}'; }
unset($key);
$values = array_values($vars);
$query = str_replace($keys, $values, $query);
if(isset($queryData['offset']))
$queryData['offset'] = str_replace($keys, $values,
$queryData['offset']);
if(isset($queryData['limit']))
$queryData['limit'] = str_replace($keys, $values,
$queryData['limit']);
unset($keys);
unset($values);
if(!isset($vars['DATE_FORMAT']) &&
isset($vars['DATE_GROUP'])) {
$dateformat_key = '{DATE_FORMAT}';
switch($vars['DATE_GROUP']) {
case 'year':
$dateformat_value = '%Y';
break;
case 'month':
$dateformat_value = '%Y-%m';
break;
case 'week':
$dateformat_value = '%Y %u';
break;
case 'day':
default:
$dateformat_value = '%Y-%m-%d';
break;
}
$query = str_replace($dateformat_key, $dateformat_value, $query);
}
}
$offset = 0;
if(!empty($queryData['offset']))
$offset = (int)$queryData['offset'];
if(!empty($queryData['limit']) && $limit === null)
$limit = (int)$queryData['limit'];
if($limit === null)
$limit = -1;
$this->db->setQuery('SET @@session.time_zone =
\'+00:00\'');
$this->db->execute();
$this->db->setQuery($query, $offset, $limit);
switch($queryData['get']) {
case 'object':
$ret = $this->db->loadObject();
break;
case 'list':
$ret = $this->db->loadObjectList();
break;
case 'single':
default:
$ret = $this->db->loadResult();
break;
}
return $ret;
}
protected function initJS($vendor_id = null) {
static $init = false;
if($init) return;
$app = JFactory::getApplication();
$url =
hikamarket::completeLink('vendor&task=reports&tmpl=ajax',
false, false, true);
if($app->isAdmin()) {
if(empty($vendor_id) && $vendor_id === 0)
$vendor_id = 1;
if((int)$vendor_id > 0)
$url =
hikamarket::completeLink('vendor&task=reports&cid='.(int)$vendor_id.'&tmpl=ajax',
false, false, true);
}
$dateRanges = array(
'data' => array( 'all' => 0, 'year'
=> 1, 'month' => 2, 'week' => 3,
'day' => 4 ),
'text' => array( 'year' =>
JText::_('HIKAM_PERIOD_BY_YEAR'), 'month' =>
JText::_('HIKAM_PERIOD_BY_MONTH'), 'week' =>
JText::_('HIKAM_PERIOD_BY_WEEK'), 'day' =>
JText::_('HIKAM_PERIOD_BY_DAY') )
);
$doc = JFactory::getDocument();
$doc->addScript('https://www.google.com/jsapi');
$doc->addScriptDeclaration('
if(!window.localPage)
window.localPage = {};
window.localPage.chartsInit = [];
window.localPage.charts = {};
window.localPage.dateRanges = '.json_encode($dateRanges).';
window.localPage.changeChartData = function(type,id,name,value,el) {
var chart = window.localPage.charts[id];
if(!chart) return false;
var dataValue = value;
if(type == "graph") {
if(value.substring(0,1) != ":")
dataValue = window.localPage.getRangeValue(value);
else
dataValue = chart.period + value;
}
var url = "'.$url.'",
postdata =
"chart="+encodeURIComponent(name)+"&value="+encodeURIComponent(dataValue);
window.Oby.xRequest(url, {mode:"POST",data:postdata},
function(x,p) {
var d = window.Oby.evalJSON(x.responseText) || false;
if(!d) return;
chart.data = google.visualization.arrayToDataTable(d);
chart.max = (d.length - 1);
if(type == "graph") {
chart.options.hAxis.viewWindow.min = 0;
chart.options.hAxis.viewWindow.max = chart.max;
chart.period = dataValue.substring(0,
dataValue.indexOf(":"));
chart.periodGroup = value.substring(value.indexOf(":") + 1);
}
chart.chart.draw(chart.data, chart.options);
window.localPage.changeChartDropText(id, value, dataValue, el);
});
return false;
};
window.localPage.changeChartDropText = function(id,value,dataValue,el) {
if(!el) return;
if(value.substring(0,1) != ":") {
var s =
document.getElementById("hikamarket_chart_"+id+"_range");
if(!s) return;
s.innerHTML = el.innerHTML;
var p = dataValue.indexOf(":");
if(p >= 0)
value = dataValue.substring(p);
}
if(value.substring(0,1) == ":") {
var s =
document.getElementById("hikamarket_chart_"+id+"_group");
if(!s) return;
s.innerHTML = window.localPage.dateRanges.text[ value.substring(1) ];
}
};
window.localPage.getRangeValue = function(value) {
var r = window.localPage.dateRanges, ret = value;
if(value.indexOf(".") >= 0)
value = value.substring(value.indexOf(".")+1);
if(r.data[value] === undefined)
return ret;
var v = (r.data[value] + 1);
for(var k in r.data) {
if(r.data.hasOwnProperty(k) && r.data[k] === v)
return ret + ":" + k;
}
return ret;
};
window.localPage.refreshGraphs = function() {
for(var i in window.localPage.charts) {
if(!window.localPage.charts.hasOwnProperty(i))
continue;
var chart = window.localPage.charts[i];
chart.chart.draw(chart.data, chart.options);
}
};
google.load("visualization", "1",
{packages:["corechart","geochart"]});
google.setOnLoadCallback(function(){
for(var i = 0; i < window.localPage.chartsInit.length; i++) {
var f = window.localPage.chartsInit[i];
f();
}
});
jQuery(window).on("resize", function(){
if(window.localPage.resizeTimer)
clearTimeout(window.localPage.resizeTimer);
window.localPage.resizeTimer = setTimeout(window.localPage.refreshGraphs,
250);
});
');
$init = true;
}
public function display($data, $doText = true) {
if(empty($data['type']))
$data['type'] = 'text';
$ret = '';
if(!empty($data['query']) &&
(!isset($data['value']) || $data['value'] === null)) {
if(!empty($data['vars'])) {
$vars = reset($data['vars']);
if(is_array($vars)) {
$vars = $data['vars'];
$ret = array();
foreach($vars as $v) {
$data['vars'] = $v;
$data['value'] = null;
$ret[] = $this->display($data, false);
}
$data['type'] = 'aggreg';
unset($data['value']);
$data['value'] = $ret;
} else
$data['value'] =
$this->processQuery($data['query'], $data['vars']);
} else
$data['value'] =
$this->processQuery($data['query']);
}
$ret = '';
switch($data['type']) {
case 'dynamic':
$ret = $this->displayDynamic($data);
break;
case 'tile':
$ret = $this->displayTile($data);
break;
case 'graph':
$ret = $this->displayGraph($data);
break;
case 'pie':
$ret = $this->displayPie($data);
break;
case 'geo':
$ret = $this->displayGeo($data);
break;
case 'list':
$ret = $this->displayList($data);
break;
case 'raw':
$ret = $data['value'];
break;
case 'aggreg':
$sep = '';
if(!empty($data['separator']))
$sep = $data['separator'];
$ret = implode($sep, $data['value']);
break;
case 'plugin':
JPluginHelper::importPlugin('hikamarket');
$app = JFactory::getApplication();
$ret =
$app->triggerEvent('onHikamarketStatisticPluginDisplay',
array($data));
if(!empty($ret) && is_array($ret)) {
$arr = $ret;
$ret = reset($ret);
if(empty($ret)) {
while(empty($ret) && !empty($arr)) {
$ret = array_shift($arr);
}
}
unset($arr);
}
break;
case 'text':
default:
$ret = $this->getFormatedValue($data['value'],
$data['format']);
break;
}
if($doText) {
if(!empty($data['prefix']))
$ret = $data['prefix'] . $ret;
if(!empty($data['text'])) {
$tmp = JText::_($data['text']);
if($tmp != $data['text'])
$ret = JText::sprintf($data['text'], $ret);
}
if(!empty($data['suffix']))
$ret = $ret . $data['suffix'];
}
return $ret;
}
protected function displayList($data) {
if(is_object($data['value']))
$data['value'] = array($data['value']);
$ret = array();
foreach($data['value'] as $value) {
$ret[] = $this->getFormatedValue($value, $data['format']);
}
if(count($ret) > 1)
return '<ul><li>'.
implode('</li><li>', $ret) .
'</li></ul>';
return reset($ret);
}
protected function displayDynamic($data) {
if(empty($data['value']))
return '';
if(is_object($data['value']))
$data['value'] = array($data['value']);
$ret = array();
foreach($data['value'] as $value) {
$content = $data['dynamic'];
if(preg_match_all('#{([-:. _A-Z0-9a-z]+)}#U', $content, $out))
{
foreach($out[1] as $key) {
if(strpos($key, ':') !== false) {
list($col, $format) = explode(':', $key, 2);
} else {
$col = $key;
$format = $data['format'];
}
if(isset($value->$col))
$content = str_replace('{'.$key.'}',
$this->getFormatedValue($value->$col, $format, $value), $content);
else {
$v = '';
if(isset($data['vars'][$key]))
$v = $data['vars'][$key];
$content = str_replace('{'.$key.'}', $v,
$content);
}
}
}
$ret[] = $content;
}
if(count($ret) > 1) {
if(!empty($data['prefix']) &&
!empty($data['suffix']))
return implode("\r\n", $ret);
return '<ul><li>'.
implode('</li><li>', $ret) .
'</li></ul>';
}
return reset($ret);
}
protected function displayTile($data) {
if(!is_array($data['value']))
$data['value'] = array($data['value']);
if(isset($data['vars-2'])) {
$data['value'][] =
$this->processQuery($data['query'],
$data['vars-2']);
}
if(isset($data['format']) && $data['format']
== 'percentage' && count($data['value']) == 2)
{
$a = hikamarket::toFloat($data['value'][0]);
$b = hikamarket::toFloat($data['value'][1]);
$data['value'] = array(0);
if($b > 0)
$data['value'] = array( round($a / $b * 100) );
}
$d = array();
foreach($data['value'] as $value) {
$d[] = $this->getFormatedValue($value, @$data['format']);
}
$value = $this->getMergedValue($d, @$data['format']);
if(!empty($data['tile']['mode']) &&
$data['tile']['mode'] == 'small') {
$background = '';
if(isset($value->image)) {
$imageHelper = hikamarket::get('shop.helper.image');
$img = $imageHelper->getThumbnail($value->image, array(150,150),
array('default' => true), true);
$background = '<img src="'.$img->url.'"
alt=""/>';
} elseif(isset($data['tile']['background'])
&&
$data['tile']['background']['value'] ==
'fa') {
$background = '<i class="fa
fa-'.$data['tile']['background']['value'].'"></i>';
}
if(empty($value->name) &&
isset($data['tile']['name'])) {
foreach($data['tile']['name'] as $k) {
if(isset($value->$k) && !empty($value->$k))
$value->name = $value->$k;
}
}
if(!is_object($value)) {
$tmp = $value;
$value = new stdClass;
$value->name = $tmp;
unset($tmp);
}
if(!empty($data['tile']['translate']))
$value->name = hikashop_translate($value->name);
return '
<div class="cpanel-smalltile-block">
<div
class="cpanel-tile-background">'.$background.'</div>
<div
class="cpanel-tile-header">'.$data['label'].'</div>
<div
class="cpanel-tile-name">'.$value->name.'</div>
<div class="cpanel-tile-details"></div>
</div>
';
}
$icon = '';
$compare = '';
$footer = '';
$extra_class = '';
if(!empty($data['tile']['icon']['type'])
&& $data['tile']['icon']['type'] ==
'fa') {
hikashop_loadJsLib('font-awesome');
$icon = '<i class="fa
fa-'.$data['tile']['icon']['value'].'"></i>';
}
if(!empty($data['tile']['view'])) {
$t = JText::_('HIKA_VIEW_MORE');
$l = '#';
if(is_string($data['tile']['view'])) {
$l = $data['tile']['view'];
} elseif(is_array($data['tile']['view'])) {
if(isset($data['tile']['view']['title']))
$t = $data['tile']['view']['title'];
if(isset($data['tile']['view']['link']))
$l = $data['tile']['view']['link'];
if(!empty($data['tile']['view']['process'])
&&
!empty($data['tile']['view']['value'])) {
$l = $data['tile']['view']['value'];
foreach($value as $k => $v) {
$l = str_replace('{'.strtoupper($k).'}', $v,
$l);
}
$l = hikamarket::completeLink($l);
}
}
$footer = '<a
href="'.$l.'">'.$t.'</a>';
}
$text = $value;
if(is_object($value)) {
$text = '';
if(empty($data['tile']['name']))
$data['tile']['name'] = array('name');
if(!is_array($data['tile']['name']))
$data['tile']['name'] =
array($data['tile']['name']);
foreach($data['tile']['name'] as $k) {
if(isset($value->$k) && !empty($value->$k))
$text = $value->$k;
}
}
if(!empty($data['tile']['class']))
$extra_class = '
'.trim($data['tile']['class']);
if(empty($footer))
$footer = '<div
class="cpanel-tile-footer-empty"></div>';
else
$footer = '<div
class="cpanel-tile-footer">'.$footer.'</div>';
return '
<div class="cpanel-tile-block'.$extra_class.'">
<div class="cpanel-tile-header">
'.$data['label'].'
<span
class="cpanel-right">'.$compare.'</span>
</div>
<div class="cpanel-tile-body">
'.$icon.'
<h2 class="cpanel-right">'.$text.'</h2>
</div>
'.$footer.'
<div style="clear:both"></div>
</div>';
}
protected function displayGraph($data) {
$this->initJS(@$data['vendor_id']);
$id = uniqid();
list($headerData, $chartData) = $this->processGraphData($data);
$viewport =
',hAxis:{viewWindow:{min:0,max:'.count($chartData).'}}';
$theme = ',chartArea:{width:"90%"}';
$ranges = $this->getDateRangeList();
$currentRange = isset($data['vars']['DATE_RANGE']) ?
$data['vars']['DATE_RANGE'] :
@$data['vars']['_DATE_RANGE'];
$currentGroup = 'day';
if(strpos($currentRange, ':') !== false)
list($currentRange, $currentGroup) = explode(':',
$currentRange, 2);
$js = '
window.localPage.chartsInit[window.localPage.chartsInit.length] =
function() {
var data = google.visualization.arrayToDataTable(['.
'["' . implode('","', $headerData).
'"]'.
(empty($chartData) ? '' : ',[') .
implode('],[', $chartData).
(empty($chartData) ? '' : ']') .
']);
var options =
{legend:{position:"bottom"},focusTarget:"category",animation:{duration:500,easing:"in"}'.$theme.$viewport.'};
var chart = new
google.visualization.LineChart(document.getElementById("hikamarket_chart_'.$id.'_div"));
chart.draw(data, options);
window.localPage.charts["'.$id.'"] = {chart: chart,
options:options, data:data, max:'.count($chartData).',
period:"'.$currentRange.'",periodGroup:"'.$currentGroup.'"};
};
';
unset($chartData);
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
$dropdownHelper = hikamarket::get('helper.dropdown');
$groups =
array('year'=>'','month'=>'','week'=>'','day'=>'');
foreach($groups as $k => &$v) {
$v = array(
'name' =>
JText::_('HIKAM_PERIOD_BY_'.strtoupper($k)),
'link' => '#'.$k,
'click' => 'return
window.localPage.changeChartData(\'graph\',\''.$id.'\',\''.$data['key'].'\',\':'.$k.'\',
this);'
);
}
unset($v);
$dropData = array();
foreach($ranges as $k => $v) {
if(strpos($k, '.day') !== false)
continue;
$dropData[] = array('name' => JText::_($v),
'link' => '#'.$k, 'click' =>
'return
window.localPage.changeChartData(\'graph\',\''.$id.'\',\''.$data['key'].'\',\''.$k.'\',
this);');
}
$drop = $dropdownHelper->display(JText::_($ranges[ $currentRange ]),
$dropData, array('type' => '','right'
=> true,'up' => false, 'label-id' =>
'hikamarket_chart_'.$id.'_range')).
$dropdownHelper->display(JText::_('HIKAM_PERIOD_BY_'.strtoupper($currentGroup)),
$groups, array('type' => '','right' =>
true,'up' => false, 'label-id' =>
'hikamarket_chart_'.$id.'_group'));
return '
<div class="hikamarket_chart_data_selector"
style="float:right">'.$drop.'</div><div
style="clear:both"></div>
<div id="hikamarket_chart_'.$id.'_div"
style="width:100%; height: 250px;"><div
class="hikamarket_empty_chart">'.JText::_('HIKAM_LOADING_CHART').'</div></div>';
}
protected function processGraphData($data) {
if(empty($data['type']) || $data['type'] !=
'graph')
return array(false,false);
if(!empty($data['query']) &&
(!isset($data['value']) || $data['value'] === null)) {
if(!empty($data['vars'])) {
$data['value'] =
$this->processQuery($data['query'], $data['vars']);
} else
$data['value'] =
$this->processQuery($data['query']);
}
$col = $data['graph']['cols'];
$headerData = array('Date');
$default = array();
if(!empty($data['value'])) {
foreach($data['value'] as $value) {
if(!isset($headerData[ 'col_'.$value->$col ])) {
$headerData[ 'col_'.$value->$col ] = $value->$col;
$default[$value->$col] = '0';
}
}
} else if(!empty($data['query']) &&
!empty($data['vars']) &&
isset($data['vars']['DATE_START'])) {
$vars = $data['vars'];
$vars['DATE_START'] = 0;
$vars['DATE_END'] = -1;
$vars['_DATE_RANGE'] = $vars['DATE_RANGE'];
unset($vars['DATE_RANGE']);
$headerValues = $this->processQuery($data['query'], $vars,
1);
foreach($headerValues as $value) {
if(!isset($headerData[ 'col_'.$value->$col ])) {
$headerData[ 'col_'.$value->$col ] = $value->$col;
$default[$value->$col] = '0';
}
}
}
$chartData = array();
if(count($headerData) == 1)
return array($headerData, $chartData);
if(!empty($data['graph']['axis']) &&
$data['graph']['axis'] == 'date') {
if(!empty($data['vars']['DATE_RANGE']))
$this->setDateRange($data,
$data['vars']['DATE_RANGE']);
if(empty($data['vars']['DATE_START'])) {
$first = reset($data['value']);
$first = $first->axis;
$d = explode('-', $first, 3);
if(!isset($d[2])) $d[2] = 1;
if(!isset($d[1])) $d[1] = 1;
$first = mktime(1,0,0,(int)$d[1],(int)$d[2],(int)$d[0]) -
$this->timeoffset;
} else {
$first = $data['vars']['DATE_START'] -
$this->timeoffset;
}
if(empty($data['vars']['DATE_END']) ||
$data['vars']['DATE_END'] < 0) {
$end = end($data['value']);
$end = $end->axis;
$d = explode('-', $end, 3);
if(!isset($d[2])) $d[2] = 1;
if(!isset($d[1])) $d[1] = 1;
$end = mktime(1,0,0,(int)$d[1],(int)$d[2],(int)$d[0]) -
$this->timeoffset;
} else {
$end = $data['vars']['DATE_END'] -
$this->timeoffset;
}
$now = $end;
if($now >= $first) {
$inc = 86400;
$format = 'Y-m-d';
switch(@$data['vars']['DATE_GROUP']) {
case 'year':
$format = 'Y';
$inc = 8640000;
break;
case 'month':
$format = 'Y-m';
$inc = 864000;
break;
case 'week':
$format = 'Y W';
$inc = 604800;
break;
}
do {
$chartData[ date($format, $first) ] = (array)$default;
$first += $inc;
} while($first < $now);
if(!isset($chartData[ date($format, $now) ]))
$chartData[ date($format, $now) ] = (array)$default;
}
}
foreach($data['value'] as $value) {
if(!isset($chartData[ $value->axis ])) {
$chartData[ $value->axis ] = (array)($default);
}
$chartData[ $value->axis ][ $value->$col ] =
strip_tags($value->value);
}
ksort($chartData);
foreach($chartData as $k => &$d) {
$d = '"' .
strip_tags(str_replace('"','\\"', $k)) .
'",' . strip_tags(implode(',', $d));
}
unset($d);
return array($headerData, $chartData);
}
protected function displayPie($data) {
$this->initJS(@$data['vendor_id']);
$id = uniqid();
list($headerData, $chartData) = $this->processPieData($data);
$options = '';
if(!empty($data['pie']['donut']))
$options .= ',pieHole:0.4';
if(!empty($data['pie']['3d']))
$options .= ',is3D:true';
if(isset($data['pie']['legend']) &&
$data['pie']['legend'] === false)
$options .= ',legend:"none"';
if(!empty($data['pie']['text']) &&
in_array($data['pie']['text'],
array('label','percentage','value')))
$options .=
',pieSliceText:"'.$data['pie']['text'].'"';
$js = '
window.localPage.chartsInit[window.localPage.chartsInit.length] =
function() {
var data = google.visualization.arrayToDataTable(['.
'["' . implode('","', $headerData).
'"]'.
(empty($chartData) ? '' : ',[') .
implode('],[', $chartData).
(empty($chartData) ? '' : ']') .
']);
var options =
{animation:{duration:500,easing:"in"}'.$options.'};
var chart = new
google.visualization.PieChart(document.getElementById("hikamarket_chart_'.$id.'_div"));
chart.draw(data, options);
window.localPage.charts["'.$id.'"] = {chart: chart,
options:options, data:data, max:'.count($chartData).'};
};
';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
$dropdownHelper = hikamarket::get('helper.dropdown');
$ranges = $this->getDateRangeList();
$dropData = array();
$currentRange = '';
if(isset($data['vars']['DATE_RANGE']))
$currentRange = JText::_($ranges[
$data['vars']['DATE_RANGE'] ]);
else if(isset($data['vars']['_DATE_RANGE']))
$currentRange = JText::_($ranges[
$data['vars']['_DATE_RANGE'] ]);
foreach($ranges as $k => $v) {
$dropData[] = array('name' => JText::_($v),
'link' => '#'.$k, 'click' =>
'return
window.localPage.changeChartData(\'pie\',\''.$id.'\',\''.$data['key'].'\',\''.$k.'\',
this);');
}
$drop = $dropdownHelper->display($currentRange, $dropData,
array('type' => '','right' =>
true,'up' => false, 'label-id' =>
'hikamarket_chart_'.$id.'_range'));
return '
<div class="hikamarket_chart_data_selector"
style="float:right">'.$drop.'</div><div
style="clear:both"></div>
<div id="hikamarket_chart_'.$id.'_div"
style="width:100%; height: 250px;"><div
class="hikamarket_empty_chart">'.JText::_('HIKAM_LOADING_CHART').'</div></div>';
}
protected function processPieData($data) {
if(empty($data['type']) || $data['type'] !=
'pie')
return array(false,false);
if(!empty($data['query']) &&
(!isset($data['value']) || $data['value'] === null)) {
if(!empty($data['vars'])) {
$data['value'] =
$this->processQuery($data['query'], $data['vars']);
} else
$data['value'] =
$this->processQuery($data['query']);
}
$headerData = array('Key','Value');
if(isset($data['pie']['header']))
$headerData = $data['pie']['header'];
$chartData = array();
$key = $data['pie']['key'];
foreach($data['value'] as $value) {
$chartData[ $value->$key ] = $value->value;
}
if(empty($chartData))
return array($headerData, $chartData);
foreach($chartData as $k => &$d) {
if(is_array($d))
$d =
'"'.strip_tags(str_replace('"','\\"',
$k)) . '",' . strip_tags(implode(',', $d));
else
$d = '"' .
strip_tags(str_replace('"','\\"', $k)) .
'",' . strip_tags($d);
}
unset($d);
return array($headerData, $chartData);
}
protected function displayGeo($data) {
$this->initJS(@$data['vendor_id']);
$id = uniqid();
list($headerData, $chartData) = $this->processGeoData($data);
$options = array();
$js = '
window.localPage.chartsInit[window.localPage.chartsInit.length] =
function() {
var data = google.visualization.arrayToDataTable(['.
'["' . implode('","', $headerData).
'"]'.
(empty($chartData) ? '' : ',[') .
implode('],[', $chartData).
(empty($chartData) ? '' : ']') .
']);
var options = {'.implode(',', $options).'};
var chart = new
google.visualization.GeoChart(document.getElementById("hikamarket_chart_'.$id.'_div"));
chart.draw(data, options);
window.localPage.charts["'.$id.'"] = {chart:chart,
options:options, data:data};
};
';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
$dropdownHelper = hikamarket::get('helper.dropdown');
$ranges = $this->getDateRangeList();
$dropData = array();
$currentRange = '';
if(isset($data['vars']['DATE_RANGE']))
$currentRange = JText::_($ranges[
$data['vars']['DATE_RANGE'] ]);
else if(isset($data['vars']['_DATE_RANGE']))
$currentRange = JText::_($ranges[
$data['vars']['_DATE_RANGE'] ]);
foreach($ranges as $k => $v) {
$dropData[] = array('name' => JText::_($v),
'link' => '#'.$k, 'click' =>
'return
window.localPage.changeChartData(\'geo\',\''.$id.'\',\''.$data['key'].'\',\''.$k.'\',
this);');
}
$drop = $dropdownHelper->display($currentRange, $dropData,
array('type' => '','right' =>
true,'up' => false, 'label-id' =>
'hikamarket_chart_'.$id.'_range'));
return '
<div class="hikamarket_chart_data_selector"
style="float:right">'.$drop.'</div><div
style="clear:both"></div>
<div id="hikamarket_chart_'.$id.'_div"
style="width:100%; height: 250px;"><div
class="hikamarket_empty_chart">'.JText::_('HIKAM_LOADING_CHART').'</div></div>';
}
protected function processGeoData($data) {
if(empty($data['type']) || $data['type'] !=
'geo')
return array(false,false);
if(!empty($data['query']) &&
(!isset($data['value']) || $data['value'] === null)) {
if(!empty($data['vars'])) {
$data['value'] =
$this->processQuery($data['query'], $data['vars']);
} else
$data['value'] =
$this->processQuery($data['query']);
}
$headerData = array('Country','Value');
if(isset($data['geo']['header']))
$headerData = $data['geo']['header'];
$chartData = array();
$key = $data['geo']['key'];
foreach($data['value'] as $value) {
$chartData[ $value->$key ] = $value->value;
}
if(empty($chartData))
return array($headerData, $chartData);
foreach($chartData as $k => &$d) {
if(is_array($d))
$d =
'"'.strip_tags(str_replace('"','\\"',
$k)) . '",' . strip_tags(implode(',', $d));
else
$d = '"' .
strip_tags(str_replace('"','\\"', $k)) .
'",' . strip_tags($d);
}
unset($d);
return array($headerData, $chartData);
}
protected function getFormatedValue($value, $format, $data = array()) {
$ret = null;
switch($format) {
case 'number':
$ret = (int)$value;
break;
case 'date':
$ret = hikashop_getDate($value);
break;
case 'price':
if(empty($this->currencyClass))
$this->currencyClass =
hikamarket::get('shop.class.currency');
$currency_id = 0;
if(!empty($data) && is_array($data))
$currency_id = (int)@$data['currency'];
if(!empty($data) && is_object($data))
$currency_id = (int)@$data->currency;
if(is_object($value)) {
if(isset($value->currency))
$currency_id = $value->currency;
$value = $value->value;
}
$ret = str_replace(' ', ' ',
$this->currencyClass->format($value, $currency_id));
break;
case 'percentage':
$ret = round(hikashop_toFloat($value), 2).'%';
break;
case 'translation':
case 'trans':
$ret = JText::_($value);
break;
case 'order_status':
$ret = '<span class="order-label order-label-' .
preg_replace('#[^a-z_0-9]#i', '_', str_replace('
','_', $value)).'">' .
hikamarket::orderStatus($value) . '</span>';
break;
case 'order_link':
$order_id = 0;
if(hikamarket::acl('order/show') && !empty($data)) {
if(is_array($data)) $order_id = (int)@$data['order_id'];
if(is_object($data)) $order_id = (int)@$data->order_id;
}
if($order_id > 0) {
$ret = '<a
href="'.hikamarket::completeLink('order&task=show&cid='.$order_id).'">'.$value.'</a>';
} else
$ret = $value;
break;
case 'string':
case '':
$ret = $value;
break;
default:
if(preg_match_all('#{([-:. _A-Z0-9a-z]+)}#U', $format, $out))
{
$ret = $format;
foreach($out[1] as $key) {
if(strpos($key, ':') !== false) {
list($col, $f) = explode(':', $key, 2);
} else {
$col = $key;
$f = 'string';
}
if(isset($value->$col))
$ret = str_replace('{'.$key.'}',
$this->getFormatedValue($value->$col, $f, $value), $ret);
else {
$v = '';
if(isset($data['vars'][$key]))
$v = $data['vars'][$key];
$ret = str_replace('{'.$key.'}', $v, $ret);
}
}
} else {
$ret = $value;
}
break;
}
return $ret;
}
protected function getMergedValue($value, $format, $data = array()) {
$f = reset($value);
if(is_object($f))
return $f;
return implode('<br/>', $value);
}
}
classes/toolbar.php000064400000002207151160562270010362 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketToolbarClass extends hikamarketClass {
protected $tables = array();
protected $pkeys = array();
protected $toggle = array();
public function processView(&$view) {
if(empty($view->toolbar))
return;
if(!empty($view->ctrl))
$ctrl = $view->ctrl;
else
$ctrl = hikaInput::get()->getCmd('ctrl', '');
$task = $view->getLayout();
if($ctrl == 'order' && ($task == 'form' ||
$task == 'show') && !empty($view->order) &&
!empty($view->order->order_parent_id)) {
$order_id = $view->order->order_id;
$order_parent_id = $view->order->order_parent_id;
array_unshift(
$view->toolbar,
array(
'name' => 'link',
'url' =>
hikamarket::completeLink('shop.order&task=edit&cid='.$order_parent_id),
'icon' => 'tree-2',
'alt' => JText::_('HIKAM_PARENT_ORDER')
)
);
}
}
}
classes/user.php000064400000036075151160562270007710 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketUserClass extends hikamarketClass {
protected $tables = array('shop.user');
protected $pkeys = array('user_id');
protected $userClass = null;
public function frontSaveForm() {
$app = JFactory::getApplication();
if($app->isAdmin())
return false;
$vendor_id = hikamarket::loadVendor(false, false);
if($vendor_id > 1) return false;
if(!hikamarket::acl('user/edit')) return false;
$ret = false;
$fieldsClass = hikamarket::get('class.field');
$shopfieldsClass = hikamarket::get('shop.class.field');
$user_id = hikamarket::getCID('user_id');
$oldUser = null;
if(!empty($user_id))
$oldUser = $this->get($user_id);
$area =
'display:vendor_user_show=1;display:vendor_user_edit=1';
$user = $fieldsClass->getFilteredInput('user', $oldUser,
false, 'data', false, $area);
if(empty($user))
return false;
$user->user_id = $user_id;
$formData = hikaInput::get()->get('data', array(),
'array');
if(hikamarket::acl('user/edit/email') &&
isset($formData['user']['user_email']))
$user->user_email =
$formData['user']['user_email'];
else
unset($user->user_email);
unset($user->default_address);
$ret = $this->save($user);
if($ret && hikamarket::acl('user/edit/address')) {
if(!empty($formData['user']['default_address'])) {
$default_address =
(int)$formData['user']['default_address'];
$this->setDefaultAddress($default_address, $user_id);
}
if(!empty($formData['user']['default_billing'])) {
$address_id =
(int)$formData['user']['default_billing'];
$this->setDefaultAddress($address_id, $user_id,
'billing');
}
if(!empty($formData['user']['shipping_default'])) {
$address_id =
(int)$formData['user']['shipping_default'];
$this->setDefaultAddress($address_id, $user_id,
'shipping');
}
}
return $ret;
}
protected function setDefaultAddress($id, $user_id, $type = null) {
$vendor_id = hikamarket::loadVendor(false, false);
if($vendor_id > 1) return false;
if(!hikamarket::acl('user/edit') ||
!hikamarket::acl('user/edit/address')) return false;
$addressClass = hikamarket::get('class.address');
$newDefault = $addressClass->get($id);
if(empty($newDefault) || empty($newDefault->address_published) ||
(int)$newDefault->address_user_id != $user_id ||
!empty($newDefault->address_default))
return;
$addr = new stdClass();
$addr->address_id = (int)$id;
$addr->address_default = 1;
if(empty($type))
return $addressClass->save($addr);
return $addressClass->save($addr, $type);
}
public function get($id, $type = 'hikashop', $geoloc = false) {
if(empty($this->userClass))
$this->userClass = hikamarket::get('shop.class.user');
return $this->userClass->get($id, $type, $geoloc);
}
public function register($redirect = false) {
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$user = clone(JFactory::getUser());
$authorize = JFactory::getACL();
jimport('joomla.application.component.helper');
$usersConfig = JComponentHelper::getParams('com_users');
if($usersConfig->get('allowUserRegistration') ==
'0') {
throw new JAccessExceptionNotallowed(JText::_('Access
Forbidden'), 403);
return false;
}
$newUsertype = $usersConfig->get('new_usertype');
if(!$newUsertype)
$newUsertype = 2;
$userGroupRegistration =
$config->get('user_group_registration', '');
if(!empty($userGroupRegistration) && (int)$userGroupRegistration
> 0) {
$newUsertype = (int)$userGroupRegistration;
}
$fieldClass = hikamarket::get('shop.class.field');
if(empty($this->userClass))
$this->userClass = hikamarket::get('shop.class.user');
$old = null;
$registerData = $fieldClass->getInput('register', $old,
true); // , 'data', false,
'display:vendor_registration=1');
$userData = $fieldClass->getFilteredInput('user', $old,
true, 'data', false, 'display:vendor_registration=1');
$addressData = new stdClass();
if($shopConfig->get('address_on_registration',1)) {
$addressData = $fieldClass->getFilteredInput('address',
$old, true);
}
if($registerData === false || $addressData === false || $userData ===
false)
return false;
if(empty($registerData->name)) {
$registerData->name = @$addressData->address_firstname .
(!empty($addressData->address_middle_name) ? ' ' .
$addressData->address_middle_name : '') .
(!empty($addressData->address_lastname) ? ' ' .
$addressData->address_lastname : '');
if(empty($registerData->name) &&
!empty($registerData->email)) {
$parts = explode('@', $registerData->email);
$registerData->name = array_shift($parts);
}
}
if($config->get('registration_ask_password', 1) == 0) {
$registerData->username = $registerData->email;
jimport('joomla.user.helper');
$registerData->password = JUserHelper::genRandomPassword();
$registerData->password2 = $registerData->password;
}
if($config->get('registration_email_is_username', 0) == 1)
$registerData->username = $registerData->email;
$data = array(
'name' => @$registerData->name,
'username' => @$registerData->username,
'email' => @$registerData->email,
'password' => @$registerData->password,
'password2' => @$registerData->password2
);
hikaInput::get()->set('main_user_data', $data);
jimport('joomla.mail.helper');
if(empty($registerData->email) ||
(method_exists('JMailHelper', 'isEmailAddress')
&& !JMailHelper::isEmailAddress($registerData->email))) {
$app->enqueueMessage(JText::_('EMAIL_INVALID'),
'error');
return false;
}
if((int)$config->get('registration_ask_password', 1) > 0
&& !$this->checkPasswordRules($registerData)) {
return false;
}
if(!empty($addressData->address_vat)) {
$vat = hikamarket::get('shop.helper.vat');
if(!$vat->isValid($addressData)) {
$app->enqueueMessage(JText::_('VAT_NUMBER_NOT_VALID'));
return false;
}
}
$data['groups'] = array( $newUsertype => $newUsertype );
$jconfig = JFactory::getConfig();
if(HIKASHOP_J30)
$locale = $jconfig->get('language');
else
$locale = $jconfig->getValue('config.language');
$data['params'] = array(
'site_language' => $locale,
'language' => $locale
);
if(!$user->bind($data, 'usertype')) {
$app->enqueueMessage($user->getError(), 'error');
return false;
}
$user->set('id', 0);
$date = JFactory::getDate();
if(HIKASHOP_J30)
$user->set('registerDate', $date->toSql());
else
$user->set('registerDate', $date->toMySQL());
$useractivation = (int)$usersConfig->get('useractivation');
if($useractivation > 0) {
jimport('joomla.user.helper');
if(HIKASHOP_J30) {
$user->set('activation', JApplication::getHash(
JUserHelper::genRandomPassword()) );
} else {
$user->set('activation', JUtility::getHash(
JUserHelper::genRandomPassword()) );
}
$user->set('block', '1');
}
if( !$user->save() ) {
$app->enqueueMessage(JText::_($user->getError()),
'warning');
return false;
}
$this->userClass->get(false);
$newUser = $this->userClass->get($user->id, 'cms');
if(!empty($newUser)) {
$userData->user_id = $newUser->user_id;
} elseif(!empty($user->id)) {
$userData->user_cms_id = $user->id;
} else {
$userData->user_email = $registerData->email;
}
if($shopConfig->get('affiliate_registration', 0)) {
if(hikaInput::get()->getInt('hikashop_affiliate_checkbox',
0)) {
$userData->user_partner_activated = 1;
$registerData->user_partner_activated = 1;
}
}
$this->user_id = $this->userClass->save($userData);
if($shopConfig->get('address_on_registration', 1)) {
if(isset($addressData->address_id)) {
unset($addressData->address_id);
}
$registerData->user_id = $this->user_id;
if(!empty($addressData)) {
$addressData->address_user_id = $this->user_id;
$addressClass = hikamarket::get('shop.class.address');
$this->address_id = $addressClass->save($addressData);
}
}
$mailClass = hikamarket::get('shop.class.mail');
$registerData->user_data =& $userData;
$registerData->address_data =& $addressData;
$registerData->password = preg_replace('/[\x00-\x1F\x7F]/',
'', @$registerData->password); // Disallow control chars in
the email
$registerData->active = $useractivation;
$vars = '';
if(function_exists('json_encode')) {
$vars = urlencode( base64_encode( json_encode( array(
'passwd' => $registerData->password,
'username' => $registerData->username
))));
}
global $Itemid;
$url = '';
if(!empty($Itemid)) {
$url = '&Itemid=' . $Itemid;
}
$lang = JFactory::getLanguage();
$lang->load('com_user', JPATH_SITE);
$locale = strtolower(substr($lang->get('tag'), 0, 2));
$registerData->activation_url = HIKASHOP_LIVE .
'index.php?option=com_hikamarket&ctrl=vendor&task=activate&activation='.urlencode($user->get('activation')).'&infos='.$vars.'&id='.$this->user_id.$url.'&lang='.$locale;
$mail = $mailClass->get('user_account', $registerData);
if(!empty($registerData->email)) {
$mail->subject = JText::sprintf($mail->subject,
@$registerData->name, HIKASHOP_LIVE);
$mail->dst_email =& $registerData->email;
if(!empty($registerData->name)) {
$mail->dst_name =& $registerData->name;
} else {
$mail->dst_name = '';
}
$mailClass->sendMail($mail);
jimport('joomla.application.component.helper');
$params = JComponentHelper::getParams('com_users');
if($params->get('mail_to_admin', '0')) {
$mail = $mailClass->get('user_account_admin_notification',
$registerData);
$mail->subject = JText::sprintf($mail->subject,
@$registerData->name, HIKASHOP_LIVE);
if(empty($mail->dst_email))
$mail->dst_email = explode(',',
$shopConfig->get('from_email'));
$mailClass->sendMail($mail);
}
}
if($useractivation > 0 && $redirect) {
$message = JText::_('HIKA_REG_COMPLETE_ACTIVATE');
$app->enqueueMessage($message);
if($page == 'checkout') {
$message = JText::_('WHEN_CLICKING_ACTIVATION');
$app->enqueueMessage($message);
}
$app->redirect(hikamarket::completeLink('shop.checkout&task=activate_page&lang='.$locale,
false, true));
}
elseif(file_exists(JPATH_ROOT.DS.'components'.DS.'com_comprofiler'.DS.'comprofiler.php'))
{
$newUser = $this->userClass->get($this->user_id);
$this->userClass->addAndConfirmUserInCB($newUser, $addressData);
}
return $registerData;
}
private function checkPasswordRules($registerData) {
$app = JFactory::getApplication();
$usersConfig = JComponentHelper::getParams('com_users');
if(empty($registerData->password)) {
$app->enqueueMessage(JText::_('JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED'),
'error');
return false;
}
$minimumLength = (int)$usersConfig->get('minimum_length');
$minimumIntegers =
(int)$usersConfig->get('minimum_integers');
$minimumSymbols =
(int)$usersConfig->get('minimum_symbols');
$minimumUppercase =
(int)$usersConfig->get('minimum_uppercase');
$language = JFactory::getLanguage();
$language->load('com_users', JPATH_SITE,
$language->getTag(), true);
if(!empty($minimumLength) &&
strlen((string)$registerData->password) < $minimumLength) {
$app->enqueueMessage(JText::plural('COM_USERS_MSG_PASSWORD_TOO_SHORT_N',
$minimumLength), 'warning');
return false;
}
$checks = array(
'COM_USERS_MSG_NOT_ENOUGH_INTEGERS_N' =>
array($minimumIntegers, '/[0-9]/'),
'COM_USERS_MSG_NOT_ENOUGH_SYMBOLS_N' =>
array($minimumSymbols, '[\W]'),
'COM_USERS_MSG_NOT_ENOUGH_UPPERCASE_LETTERS_N' =>
array($minimumUppercase, '/[A-Z]/'),
);
foreach($checks as $k => $v) {
if(empty($v[0]))
continue;
$n = preg_match_all($v[1], $registerData->password, $m);
if($n >= $v[0])
continue;
$app->enqueueMessage(JText::plural($k, $v[0]), 'warning');
return false;
}
return true;
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$sqlJoins = array();
$sqlFilters = array('juser.block = 0');
if(!empty($options['filters'])) {
foreach($options['filters'] as $filter) {
}
}
$app = JFactory::getApplication();
$vendor_id = hikamarket::loadVendor(false);
if($vendor_id > 1 && !$app->isAdmin()) {
$sqlJoins['customer_vendor'] = 'INNER JOIN ' .
hikamarket::table('customer_vendor') . ' AS customer ON
user.user_id = customer.customer_id';
$sqlFilters['vendor'] = 'customer.vendor_id = ' .
(int)$vendor_id;
}
if(!empty($search)) {
$searchMap = array('user.user_id', 'juser.name',
'user.user_email');
$searchVal = '\'%' .
$this->db->escape(HikaStringHelper::strtolower($search), true) .
'%\'';
$sqlFilters['search'] = '('.implode(' LIKE
'.$searchVal.' OR ', $searchMap).' LIKE
'.$searchVal.')';
}
$sqlSort = 'user.user_id';
if(!empty($options['sort']) &&
$options['sort'] == 'name')
$sqlSort = 'user.user_name';
$start = 0;
$max = 30;
if(isset($options['start']) &&
(int)$options['start'] > 0)
$start = (int)$options['start'];
$query = 'SELECT user.user_id, (CASE WHEN juser.name IS NULL THEN
user.user_email ELSE juser.name END) AS name, user.user_email '.
' FROM ' . hikamarket::table('shop.user') . '
AS user '.
' LEFT JOIN ' . hikamarket::table('joomla.users') .
' AS juser ON user.user_cms_id = juser.id ' . implode('
', $sqlJoins) .
' WHERE ('.implode(') AND (', $sqlFilters).')
'.
' ORDER BY '.$sqlSort;
$this->db->setQuery($query, $start, $max+1);
$users = $this->db->loadObjectList('user_id');
if(count($users) > $max) {
$fullLoad = false;
array_pop($users);
}
if(!empty($value) && !is_array($value) && (int)$value
> 0) {
$value = (int)$value;
if(isset($users[$value])) {
$ret[1] = $users[$value];
} else {
$query = 'SELECT user.user_id, (CASE WHEN juser.name IS NULL THEN
user.user_email ELSE juser.name END) AS name, user.user_email '.
' FROM ' . hikamarket::table('shop.user') . '
AS user '.
' LEFT JOIN ' . hikamarket::table('joomla.users')
. ' AS juser ON user.user_cms_id = juser.id'.
' WHERE user.user_id = ' . $value;
$this->db->setQuery($query);
$ret[1] = $this->db->loadObject();
}
} else if(!empty($value) && is_array($value)) {
hikamarket::toInteger($value);
$query = 'SELECT user.user_id, (CASE WHEN juser.name IS NULL THEN
user.user_email ELSE juser.name END) AS name, user.user_email '.
' FROM ' . hikamarket::table('shop.user') . '
AS user '.
' LEFT JOIN ' . hikamarket::table('joomla.users') .
' AS juser ON user.user_cms_id = juser.id'.
' WHERE user.user_id IN (' . implode(',', $value) .
')';
$this->db->setQuery($query);
$ret[1] = $this->db->loadObjectList('user_id');
}
if(!empty($users))
$ret[0] = $users;
return $ret;
}
}
classes/vendor.php000064400000200320151160562270010211 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketVendorClass extends hikamarketClass {
protected $tables = array('vendor');
protected $pkeys = array('vendor_id');
protected $toggle = array('vendor_published' =>
'vendor_id');
private $rootCategoriesCache = array();
public function saveForm() {
$vendor_id = hikamarket::getCID('vendor_id');
$formData = hikaInput::get()->get('data', array(),
'array');
$app = JFactory::getApplication();
$config = hikamarket::config();
if(!empty($formData['vendor']['vendor_params']['notif_order_statuses']))
$formData['vendor']['vendor_params']['notif_order_statuses']
=
implode(',',$formData['vendor']['vendor_params']['notif_order_statuses']);
if(!empty($formData['vendor']['vendor_params']['extra_categories']))
$formData['vendor']['vendor_params']['extra_categories']
=
implode(',',$formData['vendor']['vendor_params']['extra_categories']);
hikaInput::get()->set('data', $formData);
$oldVendor = null;
if(!empty($vendor_id))
$oldVendor = $this->get($vendor_id);
$fieldsClass = hikamarket::get('shop.class.field');
$vendor =
$fieldsClass->getInput(array('vendor','plg.hikamarket.vendor'),
$oldVendor, false);
$status = true;
if($vendor === false) {
if(!$app->isAdmin() || $config->get('fields_block_save',
0))
$status = false;
$vendor = $_SESSION['hikashop_plg.hikamarket.vendor_data'];
if(!empty($fieldsClass->error_fields)) {
$app = JFactory::getApplication();
$fields = array();
foreach($fieldsClass->error_fields as $error_field) {
$fields[] = $fieldsClass->trans($error_field->field_realname);
}
if(count($fields) > 1)
$app->enqueueMessage(JText::sprintf('PLEASE_FILL_THE_FIELDS',
implode(', ', $fields)), 'error');
else
$app->enqueueMessage(JText::sprintf('PLEASE_FILL_THE_FIELD',
reset($fields)), 'error');
} else {
$app->enqueueMessage('ERROR_GETTING_VENDOR_DATA',
'error');
}
}
if(empty($vendor))
$vendor = new stdClass();
$vendor->vendor_id = $vendor_id;
$vendor->vendor_description =
hikaInput::get()->getRaw('vendor_description', '');
$vendor->vendor_terms =
hikaInput::get()->getRaw('vendor_terms', '');
if(!empty($oldVendor->vendor_params)) {
foreach($oldVendor->vendor_params as $k => $v) {
if(!isset($vendor->vendor_params->$k))
$vendor->vendor_params->$k = $v;
}
}
if(!empty($vendor->vendor_zone_id)) {
$zoneClass = hikamarket::get('shop.class.zone');
$zone = $zoneClass->get($vendor->vendor_zone_id);
$vendor->vendor_zone_id = $zone->zone_id;
}
if(isset($vendor->vendor_location_lat))
$vendor->vendor_location_lat =
(float)hikamarket::toFloat(trim($vendor->vendor_location_lat));
if(isset($vendor->vendor_location_long))
$vendor->vendor_location_long =
(float)hikamarket::toFloat(trim($vendor->vendor_location_long));
$isVendorImage =
hikaInput::get()->getInt('data_vendor_image', 0);
if(empty($vendor->vendor_image) && $isVendorImage)
$vendor->vendor_image = '';
if(!$app->isAdmin()) {
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$vendor->vendor_description =
$safeHtmlFilter->clean($vendor->vendor_description,
'string');
$vendor->vendor_terms =
$safeHtmlFilter->clean($vendor->vendor_terms, 'string');
}
$users = array();
if(!empty($formData['users'])) {
foreach($formData['users'] as $val) {
$userid = (int)$val;
if($userid > 0 )
$users[$userid] = $userid;
}
}
$acls = array();
$userData = hikaInput::get()->get('user', array(),
'array');
if(!empty($userData)) {
foreach($userData as $k => $v) {
if((int)$k <= 0 || !isset($users[(int)$k]) ||
!isset($v['user_access']))
continue;
if(empty($acls[$v['user_access']]))
$acls[$v['user_access']]= array();
$acls[$v['user_access']][] = (int)$k;
}
}
$vendor->vendor_access = '';
$marketaclType = hikamarket::get('type.market_acl');
$vendor_access = hikaInput::get()->get('vendor_access',
array(), 'array');
$vendor_access_inherit =
hikaInput::get()->getInt('vendor_access_inherit', 1);
if(!$vendor_access_inherit) {
if(count($vendor_access) == 1) {
$vendor_access = reset($vendor_access);
if($vendor_access == 'none') {
$vendor->vendor_access = '';
} else if($vendor_access == 'all' || $vendor_access ==
'*') {
$vendor->vendor_access = '*';
} else {
$vendor->vendor_access =
$marketaclType->compile(explode(',', $vendor_access));
}
} else {
$vendor->vendor_access =
$marketaclType->compile($vendor_access);
}
}
$vendor_group = hikaInput::get()->getString('vendor_group',
'');
if(!empty($vendor_group) && $vendor_group != 'none'
&& $vendor_group != 'all') {
$vendor_groups = explode(',', $vendor_group);
foreach($vendor_groups as $k => $v) {
if((int)$v > 0)
$vendor_groups[$k] = '@' . (int)$v;
else
unset($vendor_groups[$k]);
}
if(!empty($vendor_groups)) {
if($vendor_access_inherit)
$vendor->vendor_access = '@0';
if(!empty($vendor->vendor_access))
$vendor->vendor_access .= ',';
$vendor->vendor_access .= implode(',', $vendor_groups);
}
}
if($status) {
$status = $this->save($vendor);
} else {
hikaInput::get()->set('fail[vendor]', $vendor);
return $status;
}
if(!$status) {
hikaInput::get()->set('fail[vendor]', $vendor);
if(!empty($this->message)) {
$app->enqueueMessage($this->message, 'error');
unset($this->message);
}
return $status;
}
if($status > 1) {
if(empty($formData['vendor_fee']))
$formData['vendor_fee'] = array();
$feeClass = hikamarket::get('class.fee');
$feeClass->saveVendor($status, $formData['vendor_fee']);
}
if(!empty($vendor->vendor_id_previous)) {
$query = 'UPDATE '.hikamarket::table('shop.user').
' SET user_vendor_id = 0, user_vendor_access =
'.$this->db->Quote('').
' WHERE user_vendor_id = '.$vendor->vendor_id_previous;
if(!empty($users))
$query .= ' AND user_id NOT IN ('.implode(',',
$users).')';
$this->db->setQuery($query);
$this->db->execute();
}
if((int)$config->get('user_multiple_vendor', 0)) {
$this->assignUsersToVendor($vendor, $users, $acls);
return $status;
}
if(empty($users))
return $status;
$query = 'UPDATE
'.hikamarket::table('shop.user').' SET user_vendor_id =
'.$vendor->vendor_id.' WHERE user_id IN
('.implode(',',$users).') AND (user_vendor_id IS NULL
OR user_vendor_id = 0)';
$this->db->setQuery($query);
$this->db->execute();
if(!empty($acls)) {
foreach($acls as $acl => $u) {
$query = 'UPDATE
'.hikamarket::table('shop.user').' SET
user_vendor_access = ' . $this->db->Quote($acl) . ' WHERE
user_id IN ('.implode(',',$u).') AND (user_vendor_id =
'.$vendor->vendor_id.')';
$this->db->setQuery($query);
$this->db->execute();
}
}
return $status;
}
public function save(&$vendor) {
$new = false;
$do = true;
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
if(empty($vendor->vendor_id)) {
$new = true;
$vendor->vendor_created = time();
if(empty($vendor->vendor_currency_id)) {
$shopConfig = hikamarket::config(false);
$vendor->vendor_currency_id =
$shopConfig->get('main_currency', 1);
}
} else {
$vendor->vendor_modified = time();
$vendor->old = $this->get((int)$vendor->vendor_id);
}
if(!empty($vendor->vendor_id) && $vendor->vendor_id == 1)
{
$vendor->vendor_published = true;
$vendor->vendor_admin_id = 0;
}
if(!empty($vendor->vendor_params))
$vendor->vendor_params = serialize($vendor->vendor_params);
if($shopConfig->get('alias_auto_fill', 1) &&
empty($vendor->vendor_alias) &&
empty($vendor->old->vendor_alias)) {
$vendor->vendor_alias = !empty($vendor->vendor_name) ?
$vendor->vendor_name : $vendor->old->vendor_name;
$jconfig = JFactory::getConfig();
$app = JFactory::getApplication();
if(!$jconfig->get('unicodeslugs')) {
$lang = JFactory::getLanguage();
$vendor->vendor_alias =
$lang->transliterate($vendor->vendor_alias);
}
if(method_exists($app,'stringURLSafe'))
$vendor->vendor_alias =
$app->stringURLSafe($vendor->vendor_alias);
else
$vendor->vendor_alias =
JFilterOutput::stringURLSafe($vendor->vendor_alias);
if($shopConfig->get('sef_remove_id', 0)) {
$int_at_the_beginning = (int)$vendor->vendor_alias;
if($int_at_the_beginning)
$vendor->vendor_alias =
$shopConfig->get('alias_prefix', 'v') .
$vendor->vendor_alias;
}
}
if(!empty($vendor->vendor_address_vat) &&
(empty($vendor->old) || $vendor->old->vendor_address_vat !=
$vendor->vendor_address_vat)) {
$vatHelper = hikamarket::get('shop.helper.vat');
if(!$vatHelper->isValid($vendor->vendor_address_vat)) {
$this->message = @$vatHelper->message;
return false;
}
}
JPluginHelper::importPlugin('hikamarket');
if($new)
$app->triggerEvent('onBeforeVendorCreate',
array(&$vendor, &$do));
else
$app->triggerEvent('onBeforeVendorUpdate',
array(&$vendor, &$do));
if(!$do)
return false;
$status = parent::save($vendor);
if($status) {
self::get(false);
if(!$new)
$vendor->vendor_id_previous = $vendor->vendor_id;
$vendor->vendor_id = $status;
$config = hikamarket::config();
if($config->get('vendor_create_category', 0) &&
$vendor->vendor_id > 1) {
$category_id = false;
$parentCategory = $config->get('vendor_parent_category',
0);
if($parentCategory <= 0)
$parentCategory = 1;
if(!$new) {
$query = 'SELECT category_id FROM ' .
hikamarket::table('shop.category') . ' WHERE
category_namekey = ' . $this->db->Quote('vendor_' .
$vendor->vendor_id);
$this->db->setQuery($query);
$category_id = $this->db->loadResult();
}
if(empty($vendor->vendor_name)) {
$fullVendor = $this->get($vendor->vendor_id);
} else {
$fullVendor = &$vendor;
}
$category = new stdClass();
$category->category_name = $fullVendor->vendor_name;
if(isset($fullVendor->vendor_published))
$category->category_published = $fullVendor->vendor_published;
if(isset($fullVendor->vendor_description))
$category->category_description =
$fullVendor->vendor_description;
if($new || !$category_id) {
$category->category_type = 'vendor';
$category->category_parent_id = $parentCategory;
$category->category_namekey = 'vendor_' .
$vendor->vendor_id;
} else {
$category->category_id = $category_id;
}
$do = true;
if($new || !$category_id)
$app->triggerEvent('onBeforeVendorCategoryCreate',
array(&$fullVendor, &$category, &$do));
else
$app->triggerEvent('onBeforeVendorCategoryUpdate',
array(&$fullVendor, &$category, &$do));
if($do) {
$categoryClass = hikamarket::get('shop.class.category');
$categoryClass->save($category);
}
}
if(!$new && (int)$config->get('allow_registration',
0) == 1 && empty($vendor->old->vendor_published) &&
!empty($vendor->vendor_published)) {
$user_id = (isset($vendor->vendor_admin_id) ?
(int)$vendor->vendor_admin_id :
(int)$vendor->old->vendor_admin_id);
$userClass = hikamarket::get('shop.class.user');
$shopuser = $userClass->get($user_id);
$mailClass = hikamarket::get('shop.class.mail');
$mailClass->mail_folder = HIKAMARKET_MEDIA . 'mail' . DS;
$infos = new stdClass;
$infos->vendor =& $vendor;
$infos->vendor_name = isset($vendor->vendor_name) ?
$vendor->vendor_name : $vendor->old->vendor_name;
$infos->vendor_email = isset($vendor->vendor_email) ?
$vendor->vendor_email : $vendor->old->vendor_email;
$infos->user =& $shopuser;
$infos->name = $infos->user->name;
$mail = $mailClass->get('market.vendor_registration',
$infos);
if(!empty($mail)) {
$mail->subject = JText::sprintf($mail->subject, HIKASHOP_LIVE);
$mail->from_name = $shopConfig->get('from_name');
$mail->from_email = $shopConfig->get('from_email');
$mail->dst_email = (!empty($infos->email)) ? $infos->email :
$infos->vendor_email;
$mail->dst_name = (!empty($infos->name)) ? $infos->name :
$infos->vendor_name;
if(!empty($mail->dst_email))
$mailClass->sendMail($mail);
}
}
if($new)
$app->triggerEvent('onAfterVendorCreate',
array(&$vendor));
else
$app->triggerEvent('onAfterVendorUpdate',
array(&$vendor));
}
return $status;
}
public function get($id, $type = 'vendor') {
static $data = array();
if($id === false) {
$data = array();
$true = true;
return $true;
}
if(!in_array($type,
array('vendor','admin','cms','user')))
return false;
if(!empty($data[$type.'_'.$id])) {
return $data[$type.'_'.$id];
}
$links = array(
'vendor' => 'v.vendor_id',
'admin' => 'v.vendor_admin_id',
'cms' => 'u.user_cms_id',
'user' => 'u.user_id',
);
$where = array(
'main' => $links[$type] . '=' . (int)$id
);
$select = array(
'vendor' => 'v.*'
);
$table_join = array();
if( in_array($type, array('user', 'cms')) ) {
$select['user'] = 'u.*';
$table_join['user'] = 'LEFT JOIN
'.hikamarket::table('shop.user').' AS u ON (
v.vendor_admin_id = u.user_id OR v.vendor_id = u.user_vendor_id )';
}
$query = 'SELECT '.implode(',', $select) .
' FROM ' . hikamarket::table('vendor') . ' AS v
' .
implode(' ', $table_join) .
' WHERE (' . implode(') AND (', $where) .
')';
$this->db->setQuery($query);
$vendor = $this->db->loadObjectList();
if(count($vendor) == 1) {
$vendor = reset($vendor);
} else {
$vendors = $vendor;
$vendor = reset($vendors);
foreach($vendors as $v) {
if((int)$v->vendor_admin_id == $id) {
$vendor = $v;
break;
}
}
unset($vendors);
}
if(empty($vendor) && in_array($type, array('user',
'cms'))) {
$select['vendor_user'] = 'vu.user_access as
vendor_user_access';
$table_join['user'] = ' INNER JOIN
'.hikamarket::table('vendor_user') . ' AS vu ON
(v.vendor_id = vu.vendor_id)' .
' INNER JOIN
'.hikamarket::table('shop.user').' AS u ON (u.user_id =
vu.user_id)';
$query = 'SELECT '.implode(',', $select) .
' FROM ' . hikamarket::table('vendor') . ' AS
v ' .
implode(' ', $table_join) .
' WHERE (' . implode(') AND (', $where) . ')
ORDER BY v.vendor_id ASC';
$this->db->setQuery($query);
$vendor = $this->db->loadObject();
}
if(!empty($vendor)) {
if(!empty($vendor->user_params))
$vendor->user_params =
hikamarket::unserialize($vendor->user_params);
$vendor->vendor_location_lat =
(float)hikamarket::toFloat($vendor->vendor_location_lat);
$vendor->vendor_location_long =
(float)hikamarket::toFloat($vendor->vendor_location_long);
if(!empty($vendor->vendor_params)) {
$vendor->vendor_params =
hikamarket::unserialize($vendor->vendor_params);
} else {
$vendor->vendor_params = null;
}
}
$data[$type.'_'.$id] =& $vendor;
return $data[$type.'_'.$id];
}
public function getUserVendors($user_id = null) {
if(empty($user_id))
$user_id = hikamarket::loadUser(false);
if(empty($user_id))
return false;
$ret = array();
$select = array(
'vendor' => 'v.*',
'user' => 'u.*',
);
$where = array(
'main' => 'u.user_id = ' . (int)$user_id
);
$query = 'SELECT '.implode(',', $select) .
' FROM ' . hikamarket::table('vendor') . ' AS v
' .
' LEFT JOIN '.hikamarket::table('shop.user').'
AS u ON ( v.vendor_admin_id = u.user_id OR v.vendor_id = u.user_vendor_id
)' .
' WHERE (' . implode(') AND (', $where) .
')';
$this->db->setQuery($query);
$ret = $this->db->loadObjectList('vendor_id');
$select = array(
'vendor' => 'v.*',
'vendor_user' => 'vu.*',
);
$where = array(
'main' => 'vu.user_id = ' . (int)$user_id
);
$query = 'SELECT '.implode(',', $select) .
' FROM ' . hikamarket::table('vendor') . ' AS v
' .
' INNER JOIN '.hikamarket::table('vendor_user') .
' AS vu ON (v.vendor_id = vu.vendor_id)' .
' WHERE (' . implode(') AND (', $where) .
')'.
' ORDER BY v.vendor_id ASC';
$this->db->setQuery($query);
$vendors = $this->db->loadObjectList('vendor_id');
foreach($vendors as $vendor_id => $vendor) {
if(!isset($ret[$vendor_id]))
$ret[$vendor_id] = $vendor;
}
unset($vendors);
return $ret;
}
public function switchVendor($vendor_id) {
$app = JFactory::getApplication();
if($app->isAdmin())
return false;
$user_id = hikamarket::loadUser(false);
if(empty($user_id))
return false;
$current_vendor_id =
(int)$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_id',
0);
if(empty($current_vendor_id))
return false;
if($vendor_id == $current_vendor_id)
return true;
$vendors = $this->getList($user_id);
if(!isset($vendors[$vendor_id]))
return false;
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_id',
$vendor_id);
return true;
}
public function &getNameboxData(&$typeConfig, &$fullLoad,
$mode, $value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$sqlFilters = array('vendor.vendor_published = 1');
if(!empty($options['filters'])) {
foreach($options['filters'] as $filter) {
}
}
$app = JFactory::getApplication();
if(!$app->isAdmin()) {
if(isset($typeConfig['options']['olist']))
unset($typeConfig['options']['olist']);
$typeConfig['displayFormat'] = '{vendor_name}';
}
if(!empty($search)) {
$searchMap = array('vendor.vendor_id',
'vendor.vendor_name', 'vendor.vendor_email');
$searchVal = '\'%' .
$this->db->escape(HikaStringHelper::strtolower($search), true) .
'%\'';
$sqlFilters[] = '('.implode(' LIKE
'.$searchVal.' OR ', $searchMap).' LIKE
'.$searchVal.')';
}
$sqlSort = 'vendor.vendor_id';
if(!empty($options['sort']) &&
is_string($options['sort']) && $options['sort']
=== 'name') // Conflict with "sort" parameter of
Namebox for drag'n'drop
$sqlSort = 'vendor.vendor_name';
$max = 30;
$start = (int)@$options['page'];
$query = 'SELECT vendor.vendor_id, vendor.vendor_name,
vendor.vendor_email '.
' FROM ' . hikamarket::table('vendor') . ' AS
vendor '.
' WHERE ('.implode(') AND (', $sqlFilters).')
'.
' ORDER BY '.$sqlSort;
$this->db->setQuery($query, $start, $max+1);
$vendors = $this->db->loadObjectList('vendor_id');
if(count($vendors) > $max) {
$fullLoad = false;
array_pop($vendors);
}
if(!empty($value) && !is_array($value) && (int)$value
> 0) {
$value = (int)$value;
if(isset($vendors[$value])) {
$ret[1] = $vendors[$value];
} else {
$query = 'SELECT vendor.vendor_id, vendor.vendor_name,
vendor.vendor_email '.
' FROM ' . hikamarket::table('vendor') . ' AS
vendor '.
' WHERE vendor_id = ' . $value;
$this->db->setQuery($query);
$ret[1] = $this->db->loadObject();
}
} else if(!empty($value) && is_array($value)) {
hikamarket::toInteger($value);
$query = 'SELECT vendor.vendor_id, vendor.vendor_name,
vendor.vendor_email '.
' FROM ' . hikamarket::table('vendor') . ' AS
vendor '.
' WHERE vendor_id IN (' . implode(',', $value) .
')';
$this->db->setQuery($query);
$ret[1] = $this->db->loadObjectList('vendor_id');
}
if(!empty($vendors))
$ret[0] = $vendors;
return $ret;
}
public function getRootCategory($vendor, $type = null) {
$config = hikamarket::config();
if($type === null)
$vendor_chroot_category =
(int)$config->get('vendor_chroot_category', 0);
else
$vendor_chroot_category = (int)$type;
if($vendor_chroot_category == 0)
return 0;
if(isset($vendor->vendor_id))
$vendor_id = (int)$vendor->vendor_id;
else
$vendor_id = (int)$vendor;
if(empty($vendor_id) || $vendor_id <= 1)
return 0;
if($vendor_chroot_category == 1) {
if(!isset($this->rootCategoriesCache[$vendor_id])) {
$this->db->setQuery('SELECT category_id FROM
'.hikamarket::table('shop.category').' WHERE
category_namekey = ' .
$this->db->Quote('vendor_'.$vendor_id));
$this->rootCategoriesCache[$vendor_id] =
(int)$this->db->loadResult();
}
return $this->rootCategoriesCache[$vendor_id];
}
if($vendor_chroot_category == 2) {
if(!isset($vendor->vendor_id))
$vendor = $this->get($vendor_id);
if(!empty($vendor->vendor_params->vendor_root_category))
return (int)$vendor->vendor_params->vendor_root_category;
return (int)$config->get('vendor_root_category', 0);
}
return 0;
}
public function getExtraCategories($vendor) {
if(!isset($vendor->vendor_id)) {
$vendor_id = (int)$vendor;
$vendor = $this->get($vendor_id);
} else
$vendor_id = (int)$vendor->vendor_id;
if(empty($vendor_id) || $vendor_id <= 1)
return array();
$config = hikamarket::config();
$categories = explode(',',
$config->get('vendor_extra_categories', ''));
if(!empty($vendor->vendor_params->extra_categories)) {
$c = explode(',',
$vendor->vendor_params->extra_categories);
$categories = array_merge($categories, $c);
}
hikamarket::toInteger($categories);
array_unique($categories);
sort($categories);
$categories = array_combine($categories, $categories);
if(isset($categories[0]))
unset($categories[0]);
return $categories;
}
public function filterCategories($categories, $rootCategory,
$oldCategories, $extraCategories = array()) {
if(empty($rootCategory) || (int)$rootCategory == 0)
return $categories;
hikamarket::toInteger($oldCategories);
$filteredCategories = array_diff($categories, $oldCategories);
if(empty($filteredCategories))
return $categories;
$filters = array(
'root' => 'rootcat.category_id = ' .
(int)$rootCategory,
'cat' => 'cat.category_id IN ('.
implode(',', $filteredCategories) . ')',
);
if(!empty($extraCategories)) {
$extraCategories = array_merge(array($rootCategory), $extraCategories);
hikamarket::toInteger($extraCategories);
array_unique($extraCategories);
sort($extraCategories);
$filters['root'] = 'rootcat.category_id IN (' .
implode(',', $extraCategories) . ')';
}
$query = 'SELECT cat.category_id '.
' FROM ' . hikamarket::table('shop.category') .
' as cat '.
' INNER JOIN ' . hikamarket::table('shop.category')
. ' as rootcat ON cat.category_left >= rootcat.category_left AND
cat.category_right <= rootcat.category_right '.
' WHERE (' . implode(') AND (', $filters) .
')';
$this->db->setQuery($query);
$ret = $this->db->loadColumn();
hikamarket::toInteger($ret);
$keepCategories = array_intersect($categories, $oldCategories);
$addedCategories = array_intersect($categories, $ret);
return array_unique(array_merge($keepCategories, $addedCategories));
}
public function delete(&$elements) {
if(empty($elements))
return false;
if(!is_array($elements))
$elements = array($elements);
foreach($elements as $k => $e) {
$e = (int)$e;
if( $e <= 1 )
unset($elements[$k]);
else
$elements[$k] = (int)$e;
}
if(empty($elements))
return false;
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikamarket');
$do = true;
$app->triggerEvent('onBeforeVendorDelete',
array(&$elements, &$do));
if(!$do)
return false;
$status = parent::delete($elements);
if($status) {
$query = 'UPDATE
'.hikamarket::table('shop.product').' SET
product_vendor_id = 0 WHERE product_vendor_id IN
('.implode(',', $elements).')';
$this->db->setQuery($query);
$this->db->execute();
$query = 'UPDATE
'.hikamarket::table('shop.user').' SET user_vendor_id =
0 WHERE user_vendor_id IN ('.implode(',',
$elements).')';
$this->db->setQuery($query);
$this->db->execute();
$app->triggerEvent('onAfterVendorDelete',
array(&$elements));
return count($elements);
}
return $status;
}
public function register($shopuser = false) {
$currentUser = hikamarket::loadUser(true);
if(!empty($currentUser))
$shopuser = $currentUser;
JSession::checkToken() || die('Invalid Token');
$do = true;
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$old = null;
$fieldClass = hikamarket::get('shop.class.field');
$vendor = $fieldClass->getInput(
array('vendorregister','plg.hikamarket.vendor'), $old,
true, 'data', false, 'display:vendor_registration=1');
if($vendor === false) {
$do = false;
$vendor =
@$_SESSION['hikashop_'.'plg.hikamarket.vendor'.'_data'];
if(empty($vendor))
$vendor = new stdClass();
}
if(!empty($vendor->vendor_params) &&
is_array($vendor->vendor_params)) {
$params = new stdClass();
foreach($vendor->vendor_params as $k => $v) {
$params->$k = $v;
}
$vendor->vendor_params = $params;
} elseif(empty($vendor->vendor_params)) {
$vendor->vendor_params = new stdClass();
}
if($config->get('register_paypal_required', 0) &&
empty($vendor->vendor_params->paypal_email) &&
$config->get('register_ask_paypal', 1)) {
$do = false;
$app->enqueueMessage(JText::_('HIKAM_ERR_PAYPAL_EMAIL_EMPTY'),
'error');
}
if($config->get('register_ask_description', 1)) {
$vendor->vendor_description =
hikaInput::get()->getRaw('vendor_description', '');
$vendor->vendor_description =
$safeHtmlFilter->clean($vendor->vendor_description,
'string');
}
if($config->get('register_ask_terms', 0)) {
$vendor->vendor_terms =
hikaInput::get()->getRaw('vendor_terms', '');
$vendor->vendor_terms =
$safeHtmlFilter->clean(trim($vendor->vendor_terms),
'string');
if($config->get('register_terms_required', 0) &&
empty($vendor->vendor_terms)) {
$do = false;
$app->enqueueMessage(JText::_('HIKAM_ERR_TERMS_EMPTY'),
'error');
}
}
if(!$do) {
$old = null;
$fieldClass->getInput('register', $old, true);
$fieldClass->getInput('user', $old, true);
if($shopConfig->get('address_on_registration', 1))
$fieldClass->getInput('address', $old, true);
hikaInput::get()->set('fail[vendor]', $vendor);
return false;
}
$user_activated = true;
if(empty($shopuser)) {
$userClass = hikamarket::get('class.user');
$status = $userClass->register(false);
if(!$status) {
hikaInput::get()->set('fail[vendor]', $vendor);
return false;
}
$user_activated = ($status->active === 0); // $status->active =
the Joomla setting for user activation
$shopuser = $userClass->get($userClass->user_id);
}
$vendor->vendor_admin_id = $shopuser->user_id;
$vendor->vendor_published =
($config->get('allow_registration', 0) == 2 &&
$user_activated);
if(empty($vendor->vendor_name))
$vendor->vendor_name = $shopuser->name;
if(empty($vendor->vendor_email))
$vendor->vendor_email = $shopuser->user_email;
if($config->get('register_paypal_required', 0) &&
empty($vendor->vendor_params->paypal_email)) {
$vendor->vendor_params->paypal_email = $vendor->vendor_email;
}
if(!empty($vendor->vendor_params)) {
$accepted_params = array(
'paypal_email',
'invoice_number_format'
);
$vars = array_keys(get_object_vars($vendor->vendor_params));
foreach($vars as $var) {
if(!empty($var) && !in_array($var, $accepted_params))
unset($vendor->vendor_params->$var);
}
}
$query = 'SELECT * FROM
'.hikamarket::table('shop.field').' WHERE field_table =
\'plg.hikamarket.vendor\' AND field_frontcomp = 1 AND
field_published = 1 ORDER BY field_ordering';
$this->db->setQuery($query);
$vendorFields = $this->db->loadObjectList();
if(!empty($vendorFields)) {
foreach($vendorFields as $vendorField) {
$namekey = $vendorField->field_namekey;
if(substr($namekey, 0, 7) != 'vendor_')
continue;
$name = substr($namekey, 7);
if(isset($status->address_data) &&
isset($status->address_data->$name)) {
$vendor->$namekey = $status->address_data->$name;
}
}
}
if($config->get('link_admin_groups', 0)) {
jimport('joomla.access.access');
$groups = JAccess::getGroupsByUser($shopuser->user_cms_id,
(bool)$shopConfig->get('inherit_parent_group_access'));
$accesses = array('@0');
if(!empty($groups)) {
$accesses = array();
foreach($groups as $group) {
$accesses[] = '@' . $group;
}
}
$vendor->vendor_access = implode(',', $accesses);
}
$status = $this->save($vendor);
if(!$status) {
hikaInput::get()->set('fail[vendor]', $vendor);
return false;
}
hikamarket::loadVendor(false, true);
$mailClass = hikamarket::get('shop.class.mail');
$mailClass->mail_folder = HIKAMARKET_MEDIA . 'mail' . DS;
$infos = new stdClass;
$infos->vendor =& $vendor;
$infos->vendor_name = $vendor->vendor_name;
$infos->user =& $shopuser;
$infos->name = $infos->user->name;
$mail = $mailClass->get('market.vendor_admin_registration',
$infos);
if(!empty($mail)) {
$mail->subject = JText::sprintf($mail->subject, HIKASHOP_LIVE);
if(!empty($infos->email))
$mail->dst_email = $infos->email;
else
$mail->dst_email = $shopConfig->get('from_email');
if(!empty($infos->name))
$mail->dst_name = $infos->name;
else
$mail->dst_name = $shopConfig->get('from_name');
$mailClass->sendMail($mail);
}
$mail = $mailClass->get('market.vendor_registration',
$infos);
if(!empty($mail)) {
$mail->subject = JText::sprintf($mail->subject, HIKASHOP_LIVE);
$mail->from_name = $shopConfig->get('from_name');
$mail->from_email = $shopConfig->get('from_email');
if(!empty($infos->email))
$mail->dst_email = $infos->email;
else
$mail->dst_email = $vendor->vendor_email;
if(!empty($infos->name))
$mail->dst_name = $infos->name;
else
$mail->dst_name = $vendor->vendor_name;
if(!empty($mail->dst_email))
$mailClass->sendMail($mail);
}
return $status;
}
public function frontSaveForm() {
$vendor_id = hikamarket::getCID('vendor_id');
$formData = hikaInput::get()->get('data', array(),
'array');
$config = hikamarket::config();
$user = hikamarket::loadUser();
$userVendor = hikamarket::loadVendor(true);
if($vendor_id != $userVendor->vendor_id ||
!hikamarket::acl('vendor/edit')) {
return false;
}
$fieldClass = hikamarket::get('shop.class.field');
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$status = true;
$oldVendor = $this->get($vendor_id);
$vendor =
$fieldClass->getFilteredInput(array('vendor','plg.hikamarket.vendor'),
$oldVendor);
if($vendor === false) {
$status = false;
$vendor = $_SESSION['hikashop_plg.hikamarket.vendor_data'];
}
$vendor->vendor_id = $vendor_id;
$loadFields = array(
'vendor_name', 'vendor_image',
'vendor_email', 'vendor_currency_id'
);
foreach($loadFields as $loadField) {
if(isset($formData['vendor'][$loadField]) &&
is_string($formData['vendor'][$loadField]))
$vendor->{$loadField} =
strip_tags(trim($formData['vendor'][$loadField]));
}
if(isset($formData['vendor']['vendor_params'])) {
$null = array();
$fieldClass->checkFields($formData['vendor']['vendor_params'],
$vendor->vendor_params, 'plg.hikamarket.vendor', $null);
}
if(!hikamarket::acl('vendor/edit/image')) {
unset($vendor->vendor_image);
} else if(empty($vendor->vendor_image)) {
$vendor->vendor_image = '';
}
if(!empty($vendor->vendor_image) &&
$oldVendor->vendor_image != $vendor->vendor_image) {
$shopConfig = hikamarket::config(false);
$uploadFolder =
ltrim(JPath::clean(html_entity_decode($shopConfig->get('uploadfolder'))),DS);
$uploadFolder = rtrim($uploadFolder,DS).DS;
$clean_filename =
JPath::clean(realpath(JPATH_ROOT.DS.$uploadFolder.$vendor->vendor_image));
if(!file_exists($clean_filename) || ($vendor_id > 1 &&
strpos(str_replace(array('\\/','\\','//'),
'/', $vendor->vendor_image),
'vendor'.$vendor_id.'/') !== 0))
$vendor->vendor_image = '';
}
if(hikamarket::acl('vendor/edit/location') &&
isset($formData['vendor']['vendor_location_lat'])) {
if(trim($formData['vendor']['vendor_location_lat'])
== '' ||
trim($formData['vendor']['vendor_location_long']) ==
'') {
$vendor->vendor_location_lat = 0.0;
$vendor->vendor_location_long = 0.0;
} else {
$vendor->vendor_location_lat =
(float)hikamarket::toFloat($formData['vendor']['vendor_location_lat']);
$vendor->vendor_location_long =
(float)hikamarket::toFloat($formData['vendor']['vendor_location_long']);
}
} else {
unset($vendor->vendor_location_lat);
unset($vendor->vendor_location_long);
}
if($vendor->vendor_id > 1 &&
$config->get('register_paypal_required', 0) &&
empty($vendor->vendor_params->paypal_email)) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('HIKAM_ERR_PAYPAL_EMAIL_EMPTY'));
$status = false;
}
$users = array();
if(!empty($formData['users'])) {
foreach($formData['users'] as $val) {
$userid = (int)$val;
if($userid > 0 && $userid != $user)
$users[$userid] = $userid;
}
}
$acls = array();
$userData = hikaInput::get()->get('user', array(),
'array');
if(!empty($userData)) {
foreach($userData as $k => $v) {
$k = (int)$k;
if($k <= 0 || $k == $user)
continue;
if(isset($users[$k]) && isset($v['user_access'])) {
if(empty($acls[$v['user_access']]))
$acls[$v['user_access']]= array();
$acls[$v['user_access']][] = $k;
}
}
}
if(isset($vendor->vendor_params)) {
$new_params = $vendor->vendor_params;
$vendor->vendor_params = $oldVendor->vendor_params;
$accepted_params = array(
'paypal_email',
'invoice_number_format'
);
$vars = array_keys(get_object_vars($new_params));
foreach($vars as $var) {
if(!empty($var) && !in_array($var, $accepted_params))
unset($new_params->$var);
}
foreach($new_params as $k => $v) {
$vendor->vendor_params->$k = $v;
}
}
$vendor->vendor_description =
hikaInput::get()->getRaw('vendor_description', '');
$vendor->vendor_description =
$safeHtmlFilter->clean($vendor->vendor_description,
'string');
if(hikamarket::acl('vendor/edit/terms')) {
$vendor->vendor_terms =
hikaInput::get()->getRaw('vendor_terms', '');
$vendor->vendor_terms =
$safeHtmlFilter->clean(trim($vendor->vendor_terms),
'string');
if($config->get('register_terms_required', 0) &&
empty($vendor->vendor_terms)) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('HIKAM_ERR_TERMS_EMPTY'));
$status = false;
}
}
if($status) {
$status = $this->save($vendor);
} else {
hikaInput::get()->set('fail[vendor]', $vendor);
return $status;
}
if(!$status)
return $status;
hikamarket::loadVendor(false, true);
if(empty($formData['users']) ||
!hikamarket::acl('vendor/edit/users'))
return $status;
if(!empty($vendor->vendor_id_previous)) {
$query = 'UPDATE '.hikamarket::table('shop.user').
' SET user_vendor_id = 0, user_vendor_access =
'.$this->db->Quote('').
' WHERE (user_id != '.(int)$user.') AND (user_vendor_id
= '.$vendor->vendor_id_previous.')';
if(!empty($users))
$query .= ' AND user_id NOT IN ('.implode(',',
$users).')';
$this->db->setQuery($query);
$this->db->execute();
}
if((int)$config->get('user_multiple_vendor', 0)) {
$this->assignUsersToVendor($vendor, $users, $acls);
return $status;
}
if(empty($users))
return $status;
$query = 'UPDATE
'.hikamarket::table('shop.user').' SET user_vendor_id =
'.$vendor->vendor_id.' WHERE user_id IN
('.implode(',',$users).') AND (user_vendor_id IS NULL
OR user_vendor_id = 0)';
$this->db->setQuery($query);
$this->db->execute();
if(!empty($acls)) {
foreach($acls as $acl => $u) {
$query = 'UPDATE
'.hikamarket::table('shop.user').' SET
user_vendor_access = ' . $this->db->Quote($acl) . ' WHERE
user_id IN ('.implode(',',$u).') AND (user_vendor_id =
'.$vendor->vendor_id.')';
$this->db->setQuery($query);
$this->db->execute();
}
}
return $status;
}
public function checkProductLimitation($vendor, $display = true) {
$config = hikamarket::config();
if(is_numeric($vendor))
$vendor = $this->get($vendor);
$vendor_id = $vendor->vendor_id;
$config_limitation =
(int)$config->get('vendor_product_limitation', 0);
$vendor_params = (!empty($vendor->vendor_params) &&
is_string($vendor->vendor_params)) ?
hikamarket::unserialize($vendor->vendor_params) :
$vendor->vendor_params;
$vendor_limitation = (int)@$vendor_params->product_limitation;
if($vendor_id > 1 && $vendor_limitation == 0) {
$vendor_limitation = $config->vendorget($vendor,
'product_limitation', 0);
}
if($vendor_id > 1 && ($vendor_limitation > 0 ||
$config_limitation > 0)) {
$limitation = $vendor_limitation;
if($limitation == 0)
$limitation = $config_limitation;
$query = 'SELECT count(*) as `products` FROM ' .
hikamarket::table('shop.product') . ' as product WHERE
product.product_type = ' . $this->db->Quote('main') .
' AND product.product_vendor_id = ' . $vendor_id;
$this->db->setQuery($query);
$count_products = (int)$this->db->loadResult();
if($count_products >= $limitation) {
if($display) {
$app = JFactory::getApplication();
if($limitation > 1)
$app->enqueueMessage(JText::sprintf('VENDOR_PRODUCT_LIMITATION_X_REACHED',
$limitation), 'error');
else
$app->enqueueMessage(JText::_('VENDOR_PRODUCT_LIMITATION_REACHED'),
'error');
}
return $limitation;
}
}
return true;
}
public function checkVendorCompletion($vendor, $display = true) {
$config = hikamarket::config();
if(!$config->get('check_vendor_completion', 0))
return true;
if(is_numeric($vendor))
$vendor = $this->get($vendor);
$vendor_id = $vendor->vendor_id;
if($vendor_id == 0 || $vendor_id == 1)
return true;
$fieldsClass = hikamarket::get('shop.class.field');
$this->report = $display;
$allCat =
$fieldsClass->getCategories('plg.hikamarket.vendor',
$vendor);
$fields =& $fieldsClass->getData('frontcomp',
'plg.hikamarket.vendor', false, $allCat);
$data = new stdClass();
$formData = array();
$fieldCheck = $fieldsClass->_checkOneInput($fields, $formData, $data,
'plg.hikamarket.vendor', $vendor);
if($config->get('register_paypal_required', 0)) {
$vendor_params = (!empty($vendor->vendor_params) &&
is_string($vendor->vendor_params)) ?
hikamarket::unserialize($vendor->vendor_params) :
$vendor->vendor_params;
if(empty($vendor_params->paypal_email)) {
if($display) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::sprintf('PLEASE_FILL_THE_FIELD',
JText::_('PAYPAL_EMAIL')), 'error');
}
$fieldCheck = false;
}
}
if($config->get('register_terms_required', 0) &&
empty($vendor->vendor_terms)) {
if($display) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::sprintf('PLEASE_FILL_THE_FIELD',
JText::_('HIKASHOP_CHECKOUT_TERMS')), 'error');
}
$fieldCheck = false;
}
if(!$fieldCheck)
return false;
return true;
}
public function getAddressId($vendor) {
if(empty($vendor->vendor_id)) {
$vendor_id = (int)$vendor;
if(!empty($vendor_id)) {
$vendor = $this->get($vendor_id);
} else
return false;
}
if(empty($vendor))
return false;
$address = new stdClass();
$address->address_user_id = 0;
$address->address_published = 0;
$address->address_default = 0;
$query = 'SELECT field_namekey FROM ' .
hikamarket::table('shop.field'). ' WHERE field_table =
' . $this->db->Quote('address');
$this->db->setQuery($query);
$tableStruct = $this->db->loadColumn();
$search = array();
foreach($tableStruct as $field) {
$vendorField = 'vendor_' . $field;
if(isset($vendor->$vendorField)) {
$address->$field = $vendor->$vendorField;
$search[] = $field . ' = ' .
$this->db->Quote($vendor->$vendorField);
} else {
$search[] = '(' . $field . ' IS NULL OR ' . $field
. ' = \'\')';
}
}
$query = 'SELECT address_id FROM ' .
hikamarket::table('shop.address') . ' WHERE address_user_id
= 0 AND address_published = 0 AND address_default = 0 AND ' .
implode(' AND ', $search);
$this->db->setQuery($query, 0, 1);
$status = (int)$this->db->loadResult();
if(empty($status)) {
$address->address_user_id = (int)$vendor->vendor_admin_id;
$addressClass = hikamarket::get('shop.class.address');
$status = $addressClass->save($address, 1);
}
return $status;
}
public function onAfterUserCreate(&$user, $manual = false) {
$config = hikamarket::config();
$auto_registration = $config->get('allow_registration', 0);
if($auto_registration < 3)
return false;
if(empty($user->user_cms_id))
return false;
$old = null;
$fieldClass = hikamarket::get('shop.class.field');
$userClass = hikamarket::get('shop.class.user');
$fullUser = $userClass->get($user->user_cms_id, 'cms');
$user_group_filter = $config->get('auto_registration_group',
'all');
if(!empty($user_group_filter) && $user_group_filter !=
'all') {
jimport('joomla.access.access');
$shopConfig = hikamarket::config(false);
$userGroups = JAccess::getGroupsByUser($fullUser->user_cms_id,
(bool)$shopConfig->get('inherit_parent_group_access'));
$user_group_filter = explode(',', $user_group_filter);
hikamarket::toInteger($user_group_filter);
hikamarket::toInteger($userGroups);
if(count(array_intersect($userGroups, $user_group_filter)) == 0)
return false;
}
return $this->createVendor($user, $fullUser, $manual);
}
public function onAfterUserUpdate($user) {
return;
}
public function onAfterStoreUser($user, $isnew, $success, $msg, $oldUser)
{
$config = hikamarket::config();
$auto_registration = (int)$config->get('allow_registration',
0);
if(empty($user['id']))
return;
$vendor = $this->get($user['id'], 'cms');
if(empty($vendor) && $auto_registration < 3)
return;
$shouldHaveVendor = ((int)$user['block'] == 0);
$groups = @$user['groups'];
if(empty($groups)) {
jimport('joomla.access.access');
$shopConfig = hikamarket::config(false);
$groups = JAccess::getGroupsByUser($user['id'],
(bool)$shopConfig->get('inherit_parent_group_access'));
}
$user_group_filter = $config->get('auto_registration_group',
'all');
if($auto_registration == 3 && $shouldHaveVendor &&
!empty($user_group_filter) && $user_group_filter !=
'all') {
$user_group_filter = explode(',', $user_group_filter);
$userGroups = $groups;
hikamarket::toInteger($user_group_filter);
hikamarket::toInteger($userGroups);
$shouldHaveVendor = (count(array_intersect($userGroups,
$user_group_filter)) > 0);
}
if(empty($vendor) && $shouldHaveVendor) {
$userClass = hikamarket::get('shop.class.user');
$fullUser = $userClass->get($user['id'], 'cms');
if(!empty($fullUser))
$this->createVendor($user, $fullUser, true);
return;
}
if(empty($vendor) || (int)$vendor->vendor_admin_id !=
(int)$vendor->user_id)
return;
$do = false;
$vendor_update = new stdClass();
$vendor_update->vendor_id = $vendor->vendor_id;
if($vendor->vendor_published != $shouldHaveVendor &&
$auto_registration > 1) {
$vendor_update->vendor_published = $shouldHaveVendor;
$do = true;
}
if($config->get('link_admin_groups', 0)) {
$vendor_access = ',' . $vendor->vendor_access .
',';
$vendor_access = preg_replace('#,\@[0-9]+,#iU', ',',
$vendor_access);
$accesses = array('@0');
if(!empty($user['groups'])) {
$accesses = array();
foreach($user['groups'] as $group) {
$accesses[] = '@' . $group;
}
}
$vendor_access = implode(',', $accesses) . ',' .
trim($vendor_access, ',');
$do = true;
$vendor_update->vendor_access = trim($vendor_access, ',');
}
if($do)
$this->save($vendor_update);
}
public function onLoginUser($user_id, $user, $groups) {
$u = array_merge($user, array());
if(empty($u['id']))
$u['id'] = $user_id;
$u['groups'] = $groups;
$this->onAfterStoreUser($user, false, true, '', null);
}
private function createVendor($user, $fullUser, $manual = false) {
if(!$manual) {
$fieldClass = hikamarket::get('shop.class.field');
$registerData = $fieldClass->getInput('register', $old,
false);
$userData = $fieldClass->getFilteredInput('user', $old,
false);
$addressData = $fieldClass->getFilteredInput('address',
$old, false);
}
if(empty($registerData) && !$manual)
return false;
$vendor = new stdClass();
$vendor->vendor_name = $fullUser->name;
$vendor->vendor_admin_id = $fullUser->user_id;
$vendor->vendor_email = $fullUser->email;
$vendor->vendor_currency_id = hikamarket::getCurrency();
$vendor->vendor_params = new stdClass();
$config = hikamarket::config();
if($config->get('register_paypal_required', 0))
$vendor->vendor_params->paypal_email = $fullUser->email;
$joomlaUser = JFactory::getUser($fullUser->user_cms_id);
$vendor->vendor_published = ($joomlaUser->block == 0);
$query = 'SELECT * FROM
'.hikamarket::table('shop.field').' WHERE field_table =
\'plg.hikamarket.vendor\' AND field_frontcomp = 1 AND
field_published = 1 ORDER BY field_ordering';
$this->db->setQuery($query);
$vendorFields = $this->db->loadObjectList();
if(!empty($vendorFields)) {
foreach($vendorFields as $vendorField) {
$namekey = $vendorField->field_namekey;
if(substr($namekey, 0, 7) == 'vendor_') {
$name = substr($namekey, 7);
if(isset($addressData) && isset($addressData->$name))
$vendor->$namekey = $addressData->$name;
}
}
}
$ret = $this->save($vendor);
if($ret === false)
return false;
return $vendor;
}
private function assignUsersToVendor($vendor, $users, $acls) {
$app = JFactory::getApplication();
$user = hikamarket::loadUser(false);
$query = 'DELETE FROM
'.hikamarket::table('vendor_user').' WHERE vendor_id =
'.(int)$vendor->vendor_id;
if(!$app->isAdmin())
$query .= ' AND user_id != '.$user;
if(!empty($users))
$query .= ' AND user_id NOT IN ('.implode(',',
$users).')';
$this->db->setQuery($query);
$this->db->execute();
if(empty($users))
return;
$query = 'INSERT IGNORE INTO
'.hikamarket::table('vendor_user').' (vendor_id,
user_id, user_access) '.
'SELECT '.(int)$vendor->vendor_id.', u.user_id,
'.$this->db->Quote('').' FROM
'.hikamarket::table('shop.user').' as u WHERE u.user_id
IN ('.implode(',', $users).')';
$this->db->setQuery($query);
$this->db->execute();
if(empty($acls))
return;
foreach($acls as $acl => $u) {
$query = 'UPDATE
'.hikamarket::table('vendor_user').' SET user_access =
' . $this->db->Quote($acl) . ' WHERE user_id IN
('.implode(',',$u).') AND (vendor_id =
'.$vendor->vendor_id.')';
$this->db->setQuery($query);
$this->db->execute();
}
}
public function pay($id, $transactions = array(), $filters = null) {
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$shopOrderClass = hikamarket::get('shop.class.order');
$currencyClass = hikamarket::get('shop.class.currency');
$userClass = hikamarket::get('shop.class.user');
$paymentMethodType = hikamarket::get('type.paymentmethods');
$valid_statuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
foreach($valid_statuses as &$status) {
$status = $this->db->Quote(trim($status));
}
$createdStatus = $shopConfig->get('order_created_status',
'created');
$confirmedStatus =
$shopConfig->get('order_confirmed_status',
'confirmed');
$vendor_ids = $id;
if(!is_array($vendor_ids))
$vendor_ids = array($vendor_ids);
$ret = array();
foreach($vendor_ids as $vendor_id) {
$vendor = $this->get((int)$vendor_id);
if(empty($vendor))
continue;
$sql_filters = array(
't.vendor_id = '. (int)$vendor_id,
't.order_transaction_paid = 0',
't.order_transaction_valid > 0',
);
if(!empty($transactions)) {
hikamarket::toInteger($orders);
$sql_filters[] = 't.order_transaction_id IN (' .
implode(',', $transactions) . ')';
}
if(!empty($filters)) {
if(!empty($filters['start'])) {
$parts = explode(' ', $filters['start']);
$parts = explode('-', $parts[0]);
if(count($parts) == 3) {
$start = hikamarket::getTime(mktime(0, 0, 0, $parts[1], $parts[2],
$parts[0]));
$sql_filters[] = 't.order_transaction_created >= ' .
(int)$start;
}
}
if(!empty($filters['end'])) {
$parts = explode(' ', $filters['end']);
$parts = explode('-', $parts[0]);
if(count($parts) == 3) {
$end = hikamarket::getTime(mktime(0, 0, 0, $parts[1], $parts[2],
$parts[0]));
$sql_filters[] = 't.order_transaction_created <= ' .
(int)$end;
}
}
}
$query = 'SELECT t.*, o.order_id as `vendor_order_id`,
o.order_number, o.order_payment_price, o.order_shipping_price,
o.order_discount_price, o.order_discount_price, o.order_discount_tax,
o.order_vendor_params, o.order_payment_params '.
' FROM
'.hikamarket::table('order_transaction').' AS t
'.
' LEFT JOIN
'.hikamarket::table('shop.order').' AS o ON t.order_id
= o.order_parent_id AND t.vendor_id = o.order_vendor_id '.
' WHERE (' . implode(') AND (', $sql_filters) .
')';
$this->db->setQuery($query);
$pay_transactions =
$this->db->loadObjectList('order_transaction_id');
if(empty($pay_transactions))
continue;
$transaction_ids = array_keys($pay_transactions);
hikamarket::toInteger($transaction_ids);
$order_ids = array();
$order_currencies = array();
foreach($pay_transactions as &$transaction) {
$transaction->order_payment_params =
is_string($transaction->order_payment_params) ?
hikamarket::unserialize($transaction->order_payment_params) :
$transaction->order_payment_params;
$transaction->order_vendor_params =
is_string($transaction->order_vendor_params) ?
hikamarket::unserialize($transaction->order_vendor_params) :
$transaction->order_vendor_params;
$order_currencies[ (int)$transaction->vendor_order_id ] =
(int)$transaction->order_transaction_currency_id;
if(isset($transaction->order_payment_params->market_mode)
&& $transaction->order_payment_params->market_mode ===
false)
continue;
if((int)$transaction->order_transaction_valid == 1)
$order_ids[ (int)$transaction->vendor_order_id ] =
(int)$transaction->vendor_order_id;
}
unset($transaction);
$order = new stdClass();
$order->order_parent_id = 0;
$order->order_partner_id = 0;
$order->order_partner_price = 0.0;
$order->order_discount_price = 0.0;
$order->order_discount_tax = 0.0;
$order->order_shipping_price = 0.0;
$order->order_shipping_tax = 0.0;
$order->order_payment_price = 0.0;
$order->order_payment_tax = 0.0;
$order->order_status = $createdStatus;
$order->order_vendor_id = $vendor->vendor_id;
$order->order_payment_id = 0;
$order->order_billing_address_id = $this->getAddressId($vendor);
$order->order_shipping_address_id = 0;
$order->history = new stdClass();
$order->history->history_reason =
JText::_('ORDER_CREATED');
$order->history->history_notified = 0;
$order->history->history_type = 'creation';
$order->order_user_id = $vendor->vendor_admin_id;
$order->order_currency_id = $vendor->vendor_currency_id;
$order->cart = new stdClass();
$order->cart->products = array();
$pay_total = 0.0;
foreach($pay_transactions as $t) {
if($vendor->vendor_currency_id ==
$t->order_transaction_currency_id)
$pay_total += hikamarket::toFloat( $t->order_transaction_price );
else
$pay_total +=
(float)$currencyClass->convertUniquePrice((float)hikamarket::toFloat($order->order_transaction_price),
(int)$t->order_transaction_currency_id,
(int)$vendor->vendor_currency_id);
}
$feeMode = ($pay_total >= 0.0) ? true : false;
if($feeMode) {
$vendorPayOrderType = 'vendorpayment';
$payment_method =
hikaInput::get()->getInt('payment_method', 0);
$payment_method_name =
$paymentMethodType->get($vendor->vendor_id, $payment_method);
$order->order_payment_id = $payment_method;
$order->order_payment_method = $payment_method_name;
} else {
$vendorPayOrderType = 'sale';
$order->history->history_notified = 1;
if(empty($order->hikamarket))
$order->hikamarket = new stdClass();
$order->hikamarket->do_not_process = true;
}
$order->order_type = $vendorPayOrderType;
$mul = 1;
if(!$feeMode)
$mul = -1;
$vendorPayContent = $config->get('vendor_pay_content',
'orders');
if($vendorPayContent == 'products') {
$order_products = array();
$db_order_products = array();
if(!empty($order_ids)) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.order_product').' AS
order_product WHERE order_product.order_id IN
('.implode(',', $order_ids).')';
$this->db->setQuery($query);
$db_order_products = $this->db->loadObjectList();
}
foreach($db_order_products as $op) {
$key = $op->product_id;
if(empty($key))
$key = 'code_' . $op->order_product_code;
if($op->order_product_code == 'order additional'
&& (float)hikamarket::toFloat($op->order_product_vendor_price)
== 0.0)
continue;
if((int)$vendor->vendor_currency_id != $order_currencies[
(int)$op->order_id ])
$op->order_product_vendor_price =
$currencyClass->convertUniquePrice((float)hikamarket::toFloat($op->order_product_vendor_price),
$order_currencies[ (int)$op->order_id ],
(int)$vendor->vendor_currency_id);
if(!isset($order_products[ $key ])) {
$order_products[$key] = array(
'name' => $op->order_product_name,
'code' => $op->order_product_code,
'qty' => (int)$op->order_product_quantity,
'price' =>
((float)hikamarket::toFloat($op->order_product_vendor_price) *
(int)$op->order_product_quantity)
);
} else {
$order_products[$key]['price'] +=
(float)hikamarket::toFloat($op->order_product_vendor_price) *
(int)$op->order_product_quantity;
$order_products[$key]['qty'] +=
(int)$op->order_product_quantity;
}
}
unset($db_order_products);
foreach($order_products as $key => $op) {
$p = new stdClass();
$p->product_id = 0;
if(is_int($key))
$p->product_id = $key;
if(empty($op['qty']))
$op['qty'] = 1;
$p->order_product_name = $op['name'];
$p->order_product_code = $op['code'];
$p->order_product_quantity = (int)$op['qty'];
$p->order_product_price = (float)((float)$op['price'] /
(int)$op['qty']);
$p->order_product_tax = 0;
$p->order_product_options = '';
$p->cart_product_id = 0;
$order->cart->products[] = $p;
}
foreach($pay_transactions as $transaction) {
if((int)$transaction->order_transaction_valid == 1 &&
(!isset($transaction->order_payment_params->market_mode) ||
$transaction->order_payment_params->market_mode != false))
continue;
$p = new stdClass();
$p->product_id = 0;
$number = $transaction->order_id;
if(!empty($transaction->order_number))
$number = $transaction->order_number;
$p->order_product_price =
(float)hikamarket::toFloat($transaction->order_transaction_price) *
$mul;
if($vendor->vendor_currency_id !=
$transaction->order_transaction_currency_id)
$p->order_product_price =
$currencyClass->convertUniquePrice((float)hikamarket::toFloat($p->order_product_price),
(int)$transaction->order_transaction_currency_id,
(int)$vendor->vendor_currency_id);
$p->order_product_quantity = 1;
$p->order_product_tax = 0.0;
$p->order_product_options = '';
$p->cart_product_id = 0;
if((int)$transaction->order_transaction_valid == 2 &&
$p->order_product_price < 0.0) {
$p->order_product_name =
JText::sprintf('HIKAM_VENDOR_PAY_REFUND', $number);
$p->order_product_code =
'vendor_refund_'.$transaction->order_transaction_id;
} elseif((int)$transaction->order_transaction_valid == 2) {
$p->order_product_name =
JText::sprintf('HIKAM_VENDOR_PAY_ADJUST', $number);
$p->order_product_code =
'vendor_adjust_'.$transaction->order_transaction_id;
} else {
$p->order_product_name =
JText::sprintf('HIKAM_VENDOR_PAY_FEE', $number);
$p->order_product_code =
'vendor_fee_'.$transaction->order_transaction_id;
}
$order->cart->products[] = $p;
}
$additionals = array(
'payment' => 0.0,
'shipping' => 0.0,
'discount' => 0.0,
'fees' => 0.0
);
$config_tax =
$config->get('calculate_vendor_price_with_tax', false);
foreach($pay_transactions as $t) {
if((int)$transaction->order_transaction_valid == 2)
continue;
if(!empty($t->order_vendor_params->fees->shipping)) {
$additionals['shipping'] +=
$t->order_vendor_params->fees->shipping;
} else if(!empty($t->order_shipping_price)) {
$additionals['shipping'] +=
(float)hikamarket::toFloat($t->order_shipping_price);
}
if(!empty($t->order_payment_price))
$additionals['payment'] +=
(float)hikamarket::toFloat($t->order_payment_price);
if(!empty($t->order_discount_price))
$additionals['discount'] -=
(float)hikamarket::toFloat($t->order_discount_price);
if($config_tax) {
if(!empty($order->order_shipping_tax))
$additionals['shipping'] +=
(float)hikamarket::toFloat($order->order_discount_price);
if(!empty($order->order_discount_tax))
$additionals['discount'] -=
(float)hikamarket::toFloat($order->order_discount_tax);
}
if(!empty($t->order_vendor_params->fees->fixed)) {
foreach($order_vendor_params->fees->fixed as $fixedFee) {
$additionals['fees'] -=
(float)hikamarket::toFloat($fixedFee);
}
}
}
foreach($additionals as $k => $v) {
if(empty($v) || $v == 0.0)
continue;
$p = new stdClass();
$p->product_id = 0;
$p->cart_product_id = 0;
$p->order_product_name =
JText::_('HIKAM_VENDOR_PAY_'.strtoupper($k));
$p->order_product_code = 'vendor_'.$k;
$p->order_product_price = $v;
$p->order_product_quantity = 1;
$p->order_product_tax = 0.0;
$p->order_product_options = '';
$order->cart->products[] = $p;
}
} else {
foreach($pay_transactions as $t) {
$product = new stdClass();
$product->product_id = 0;
$product->cart_product_id = 0;
$product->order_product_name =
JText::sprintf('VENDOR_TRANSACTION_PAYMENT',
$t->order_transaction_id,
$currencyClass->format($t->order_transaction_price,
$t->order_transaction_currency_id));
$product->order_product_code = '#' .
$t->order_transaction_id;
$product->order_product_price =
(float)hikamarket::toFloat($t->order_transaction_price) * $mul;
if($vendor->vendor_currency_id !=
$t->order_transaction_currency_id)
$product->order_product_price =
$currencyClass->convertUniquePrice($t->order_transaction_price *
$mul, $t->order_transaction_currency_id,
$vendor->vendor_currency_id);
$product->order_product_quantity = 1;
$product->order_product_tax = 0.0;
$product->order_product_options = '';
$order->cart->products[] = $product;
}
}
$shopOrderClass->recalculateFullPrice($order,
$order->cart->products);
JPluginHelper::importPlugin('hikamarket');
$do = true;
$app->triggerEvent('onBeforeVendorPay', array(&$order,
&$vendor, &$order_ids, &$pay_transactions, &$do));
if(!$do || empty($order->order_full_price)) {
$status = false;
continue;
}
$shopOrderClass->sendEmailAfterOrderCreation = !$feeMode;
$status = $shopOrderClass->save($order);
$ret[$vendor->vendor_id] = $status;
if($status) {
if(empty($order->hikamarket))
$order->hikamarket = new stdClass();
$order->hikamarket->send_email = $feeMode;
$app->triggerEvent('onAfterVendorPay', array(&$order,
&$vendor, &$order_ids, &$pay_transactions));
if($order->hikamarket->send_email) {
$mailClass = hikamarket::get('class.mail');
$mailClass->sendVendorPaymentEmail($order, $vendor);
}
$query = 'UPDATE ' .
hikamarket::table('order_transaction') . ' SET
order_transaction_paid = ' . $status . ' WHERE
order_transaction_id IN
('.$status.','.implode(',',$transaction_ids).')';
$this->db->setQuery($query);
$this->db->execute();
}
}
if(!is_array($id))
return $status;
return $ret;
}
public function getUnpaidOrders($vendor) {
if(is_object($vendor))
$vendor_id = (int)$vendor->vendor_id;
else
$vendor_id = (int)$vendor;
if(empty($vendor_id) || $vendor_id <= 1)
return false;
static $unpaidOrdersCache = array();
if(isset($unpaidOrdersCache[$vendor_id]))
return $unpaidOrdersCache[$vendor_id];
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$valid_statuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
foreach($valid_statuses as &$status) {
$status = $this->db->Quote(trim($status));
}
unset($status);
$createdStatus = $shopConfig->get('order_created_status',
'created');
$confirmedStatus =
$shopConfig->get('order_confirmed_status',
'confirmed');
$vendorrefund_quoted = $this->db->Quote('vendorrefund');
$min_date = 0;
if((int)$config->get('days_payment_request', 0) > 0) {
$joomlaConfig = JFactory::getConfig();
if(!HIKASHOP_J30)
$timeoffset =
((int)$joomlaConfig->getValue('config.offset'))*3600;
else
$timeoffset = ((int)$joomlaConfig->get('offset'))*3600;
$now = explode('-', date('m-d-Y'), 3);
$days = (int)$config->get('days_payment_request', 0) - 1;
$min_date = mktime(0, 0, 0, $now[0], $now[1], $now[2]) - ($days * 24 *
3600) + $timeoffset;
}
$q = array(
'select' => array(
'value' => ' SUM(t.order_transaction_price) AS
value',
'count' => 'COUNT(t.order_transaction_paid) AS
count',
'vendor' => 't.vendor_id AS vendor_id',
'currency' => 't.order_transaction_currency_id as
currency'
),
'tables' =>
hikamarket::table('order_transaction').' AS t ',
'filters' => array(
'vendor_id' => 't.vendor_id = ' . $vendor_id,
'transaction_paid' => 't.order_transaction_paid =
0',
'transaction_valid' => 't.order_transaction_valid
> 0',
'transaction_price' => 't.order_transaction_price !=
0.0',
'transaction_created' => 't.order_transaction_created
< ' . $min_date,
),
'group' => array('t.vendor_id',
't.order_transaction_currency_id')
);
if($min_date <= 0)
unset($q['filters']['transaction_created']);
$select = $q['select'];
if(is_array($select))
$select = implode(', ', $select);
$tables = $q['tables'];
if(is_array($tables))
$tables = implode(' ', $tables);
$query = 'SELECT ' . $select . ' FROM ' . $tables;
if(!empty($q['filters'])) {
$query .= ' WHERE (' . implode(') AND (',
$q['filters']) . ') ';
}
if(!empty($q['group']))
$query .= ' GROUP BY ' . (is_array($q['group']) ?
implode(',', $q['group']) : $q['group']);
if(!empty($q['order']))
$query .= ' ORDER BY ' . (is_array($q['order']) ?
implode(',', $q['order']) : $q['order']);
$this->db->setQuery($query);
$unpaidOrdersCache[$vendor_id] = $this->db->loadObjectList();
return $unpaidOrdersCache[$vendor_id];
}
public function getList($filters = array(), $sort = 'id') {
static $vendorList = array();
$key = 'default';
if(!empty($filters) && $sort != 'vendor_id')
$key = md5(serialize($filters).$sort);
if(isset($vendorList[$key]))
return $vendorList[$key];
$sqlFilters = array('vendor.vendor_published = 1');
foreach($filters as $filter) {
}
$sqlSort = 'vendor.vendor_id';
if($sort == 'name')
$sqlSort = 'vendor.vendor_name';
$query = 'SELECT vendor.vendor_id, vendor.vendor_name '.
' FROM ' . hikamarket::table('vendor') . ' AS
vendor '.
' WHERE ('.implode(') AND (', $sqlFilters).')
'.
' ORDER BY '.$sqlSort;
$this->db->setQuery($query);
$vendorList[$key] =
$this->db->loadObjectList('vendor_id');
foreach($vendorList[$key] as &$vendor) {
$vendor = $vendor->vendor_name;
}
unset($vendor);
return $vendorList[$key];
}
}
classes/warehouse.php000064400000013062151160562270010723 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketWarehouseClass extends hikamarketClass {
protected $tables = array('shop.warehouse');
protected $pkeys = array('warehouse_id');
protected $toggle = array('warehouse_published' =>
'warehouse_id');
protected $toggleAcl = array('warehouse_published' =>
'warehouse_edit_published');
protected $deleteToggle = array('shop.warehouse' =>
'warehouse_id');
public function get($key, $default = null) {
static $cachedElements = array();
if($key === 'reset_cache') {
$cachedElements = array();
return null;
}
if(!isset($cachedElements[0])) {
$o = new stdClass();
$o->warehouse_id = 0;
$o->warehouse_name = '';
$o->warehouse_published = 1;
$cachedElements[0] = $o;
}
$shipping_group_struct = array();
if(preg_match_all('#([a-zA-Z])*([0-9]+)#iu', $key, $keys)) {
hikamarket::toInteger($keys[2]);
$shipping_group_struct = array_combine($keys[1], $keys[2]);
}
$cache_key = (int)$key;
if(!empty($shipping_group_struct)) {
$cache_key = $shipping_group_struct[''];
unset($shipping_group_struct['']);
}
if(!isset($cachedElements[$cache_key])) {
$cachedElements[$cache_key] = parent::get($cache_key, $default);
}
$ret = clone($cachedElements[$cache_key]);
$ret->struct = $shipping_group_struct;
if(!empty($shipping_group_struct) &&
isset($shipping_group_struct['v'])) {
$vendorClass = hikamarket::get('class.vendor');
$shipping_group_struct['v'] =
(int)$shipping_group_struct['v'];
if(empty($shipping_group_struct['v']))
$shipping_group_struct['v'] = 1;
$vendor = $vendorClass->get($shipping_group_struct['v']);
$ret->name = JText::sprintf('SOLD_BY_VENDOR',
$vendor->vendor_name);
if(!empty($ret->warehouse_name))
$ret->name .= ' (' . $ret->warehouse_name .
')';
unset($shipping_group_struct['v']);
}
if(!empty($shipping_group_struct)) {
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikashopshipping');
$ret->name = $ret->warehouse_name;
$app->triggerEvent('onVirtualWarehouseGet',
array(&$ret, $shipping_group_struct));
}
return $ret;
}
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$db = JFactory::getDBO();
$limit = (int)@$typeConfig['limit'];
if(!empty($options['limit']))
$limit = (int)$options['limit'];
if(empty($limit))
$limit = 30;
if(!empty($search)) {
$searchStr = "'%" . ((HIKASHOP_J30) ?
$db->escape($search, true) : $db->getEscaped($search, true) ) .
"%'";
$query = 'SELECT warehouse_id, warehouse_name '.
' FROM ' . hikamarket::table('shop.warehouse') .
' WHERE warehouse_published = 1 AND warehouse_name LIKE ' .
$searchStr .
' ORDER BY warehouse_name';
} else {
$query = 'SELECT warehouse_id, warehouse_name '.
' FROM ' . hikamarket::table('shop.warehouse') .
' WHERE warehouse_published = 1 '.
' ORDER BY warehouse_name';
}
$db->setQuery($query, 0, $limit);
$warehouses = $db->loadObjectList('warehouse_id');
foreach($warehouses as $warehouse) {
$ret[0][$warehouse->warehouse_id] = $warehouse;
}
if(count($warehouses) == $limit)
$fullLoad = false;
if(!empty($value)) {
if(!is_array($value))
$value = array($value);
if($fullLoad) {
foreach($value as $v) {
if(isset($ret[0][(int)$v]))
$ret[1][(int)$v] = $ret[0][(int)$v];
}
} else {
hikamarket::toInteger($value);
$query = 'SELECT warehouse_id, warehouse_name '.
' FROM ' . hikamarket::table('shop.warehouse') .
' WHERE warehouse_id IN ('.implode(',',
$value).') '.
' ORDER BY warehouse_name';
$db->setQuery($query);
$ret[1] = $db->loadObjectList('warehouse_id');
}
}
return $ret;
}
public function getTreeList($serialized = false, $display = '',
$limit = 20) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.warehouse');
if($limit > 0)
$this->db->setQuery($query, 0, $limit);
else
$this->db->setQuery($query);
$warehouses = $this->db->loadObjectList();
if(!$serialized)
return $warehouses;
$elements = array();
foreach($warehouses as $element) {
$obj = new stdClass();
$obj->status = 0;
$obj->name = $element->warehouse_name;
$obj->value = $element->warehouse_id;
$elements[] =& $obj;
unset($obj);
}
return $elements;
}
public function findTreeList($search = '', $serialized = false,
$display = '', $limit = 20) {
if(HIKASHOP_J30)
$searchStr = "'%" . $this->db->escape($search,
true) . "%'";
else
$searchStr = "'%" . $this->db->getEscaped($search,
true) . "%'";
$query = 'SELECT * FROM
'.hikamarket::table('shop.warehouse').' WHERE
warehouse_name LIKE '.$search.'';
if($limit > 0)
$this->db->setQuery($query, 0, $limit);
else
$this->db->setQuery($query);
$warehouses = $this->db->loadObjectList();
if(!$serialized)
return $warehouses;
$elements = array();
foreach($warehouses as $element) {
$obj = new stdClass();
$obj->status = 0;
$obj->name = $element->warehouse_name;
$obj->value = $element->warehouse_id;
$elements[] =& $obj;
unset($obj);
}
return $elements;
}
}
classes/zone.php000064400000011752151160562270007700 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketZoneClass extends hikamarketClass {
protected $tables = array('shop.zone');
protected $pkeys = array('zone_id');
protected $toggle = array('zone_published' =>
'zone_id');
protected $toggleAcl = array('zone_published' =>
'zone_edit_published');
protected $deleteToggle = array('shop.zone' =>
'zone_id');
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$zones = null;
$fullLoad = false;
if(!empty($search)) {
$limit = 40;
$searchStr = "'%" . ((HIKASHOP_J30) ?
$this->db->escape($search, true) :
$this->db->getEscaped($search, true) ) . "%'";
$query = 'SELECT z.*, zp.zone_namekey as zone_parent_namekey,
zp.zone_name_english as zone_parent_name_english, zp.zone_type as
zone_parent_type '.
' FROM ' . hikamarket::table('shop.zone') . '
AS z '.
' LEFT JOIN ' . hikamarket::table('shop.zone_link')
. ' AS zl ON z.zone_namekey = zl.zone_child_namekey '.
' LEFT JOIN ' . hikamarket::table('shop.zone') .
' AS zp ON zp.zone_namekey = zl.zone_parent_namekey '.
' WHERE z.zone_published = 1 AND (zp.zone_published IS NULL OR
zp.zone_published = 1) AND z.zone_name_english LIKE '.$searchStr.
' ORDER BY zp.zone_name_english, z.zone_name_english';
$this->db->setQuery($query, 0, $limit);
$zones = $this->db->loadObjectList('zone_namekey');
$containers = array();
foreach($zones as $element) {
if(!empty($element->zone_parent_namekey) &&
!isset($containers[ $element->zone_parent_namekey ])) {
$obj = new stdClass();
$obj->status = 2;
$obj->name = $element->zone_parent_name_english;
$obj->value = $element->zone_parent_namekey;
$obj->data = array();
$ret[0][] =& $obj;
$containers[ $element->zone_parent_namekey ] =& $obj;
unset($obj);
}
$obj = new stdClass();
if($element->zone_type == 'state')
$obj->status = 0;
else
$obj->status = 4;
$obj->name = $element->zone_name_english;
$obj->value = $element->zone_namekey;
if(!empty($element->zone_parent_namekey)) {
$containers[ $element->zone_parent_namekey ]->data[] =&
$obj;
} else {
$ret[0][] =& $obj;
}
unset($obj);
}
return $ret;
}
if(empty($options['zone_key'])) {
$zone_types = array('country' => 'COUNTRY',
'ship' => 'SHIPPING');
$zone_types_db = array();
foreach($zone_types as $k => $v) {
$zone_types_db[] = $this->db->Quote($k);
$o = new stdClass();
$o->status = 1;
$o->name = JText::_($v);
$o->value = 0;
$o->data = array();
$o->noselection = 1;
$ret[0][] =& $o;
$zone_types[$k] =& $o;
unset($o);
}
$zone_types_db = implode(',', $zone_types_db);
$query = 'SELECT zone_id, zone_namekey, zone_name,
zone_name_english, zone_code_2, zone_code_3, zone_type '.
' FROM ' . hikamarket::table('shop.zone').
' WHERE zone_published = 1 AND zone_type IN
('.$zone_types_db.')'.
' ORDER BY zone_name_english';
} else {
$zone_key = $options['zone_key'];
$query = 'SELECT z.* '.
' FROM '.hikamarket::table('shop.zone').' as
z '.
' INNER JOIN ' .
hikamarket::table('shop.zone_link') . ' as zl ON
z.zone_namekey = zl.zone_child_namekey '.
' WHERE z.zone_published = 1 AND zl.zone_parent_namekey = '
. $this->db->Quote($zone_key).
' ORDER BY z.zone_name_english';
}
$this->db->setQuery($query);
$zones = $this->db->loadObjectList('zone_id');
if(!empty($zones)) {
foreach($zones as $zone) {
$o = new stdClass();
$o->name = $zone->zone_name_english;
$o->value = $zone->zone_namekey;
if(isset($zone_types) && isset($zone_types[ $zone->zone_type
])) {
$o->status = 3;
$zone_types[ $zone->zone_type ]->data[] =& $o;
} else {
$o->status = 0;
$ret[0][] =& $o;
}
unset($o);
}
}
unset($zones);
if(!empty($value)) {
if(!is_array($value))
$value = array($value);
$search = array();
foreach($value as $v) {
$search[] = $this->db->Quote($v);
}
$query = 'SELECT zone_id, zone_namekey, zone_name,
zone_name_english, zone_code_2, zone_code_3, zone_type '.
' FROM ' . hikamarket::table('shop.zone').
' WHERE zone_published = 1 AND zone_namekey IN
('.implode(',', $search).')';
$this->db->setQuery($query);
$zones = $this->db->loadObjectList('zone_id');
if(!empty($zones)) {
foreach($zones as $zone) {
$zone->name = $zone->zone_name_english;
$ret[1][$zone->zone_namekey] = $zone;
}
}
unset($zones);
if($mode == hikamarketNameboxType::NAMEBOX_SINGLE)
$ret[1] = reset($ret[1]);
}
return $ret;
}
}
config.xml000064400000001013151160562330006530 0ustar00<?xml
version="1.0" encoding="utf-8" ?>
<config>
<fieldset name="permissions"
label="JCONFIG_PERMISSIONS_LABEL"
description="JCONFIG_PERMISSIONS_DESC">
<field name="rules" type="rules"
label="JCONFIG_PERMISSIONS_LABEL" filter="rules"
component="com_hikamarket" section="component">
<action name="core.admin" title="JACTION_ADMIN"
description="JACTION_ADMIN_COMPONENT_DESC" />
<action name="core.manage" title="JACTION_MANAGE"
description="JACTION_MANAGE_COMPONENT_DESC" />
</field>
</fieldset>
</config>controllers/category.php000064400000003462151160562330011447
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class categoryMarketController extends hikamarketController {
protected $type = 'category';
protected $rights = array(
'display' => array('gettree'),
'add' => array(),
'edit' => array(),
'modify' => array(),
'delete' => array()
);
public function getTree() {
$category_id = hikaInput::get()->getInt('category_id', 0);
$displayFormat =
hikaInput::get()->getString('displayFormat', '');
$search = hikaInput::get()->getVar('search', null);
$nameboxType = hikamarket::get('type.namebox');
$options = array(
'start' => $category_id,
'displayFormat' => $displayFormat
);
$ret = $nameboxType->getValues($search, 'category',
$options);
if(!empty($ret)) {
echo json_encode($ret);
exit;
}
echo '[]';
exit;
}
public function findList() {
$search = hikaInput::get()->getVar('search', '');
$start = hikaInput::get()->getInt('start', 0);
$type = hikaInput::get()->getString('category_type',
'');
$displayFormat =
hikaInput::get()->getString('displayFormat', '');
$types = array(
'manufacturer' => 'brand',
'order_status' => 'order_status'
);
if(!isset($types[$type])) {
echo '[]';
exit;
}
$type = $types[$type];
$options = array();
if(!empty($displayFormat))
$options['displayFormat'] = $displayFormat;
if($start > 0)
$options['page'] = $start;
$nameboxType = hikamarket::get('type.namebox');
$elements = $nameboxType->getValues($search, $type, $options);
echo json_encode($elements);
exit;
}
}
controllers/config.php000064400000025075151160562330011103
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class configMarketController extends hikamarketController {
protected $rights = array(
'display' =>
array('display','config','cancel','listing','sql','language','css','acl'),
'add' => array(),
'edit' => array('toggle','delete'),
'modify' =>
array('save','apply','share','send','savelanguage','savecss','saveacl','applyacl'),
'delete' => array()
);
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('config');
}
public function display($tpl = null, $params = null) {
hikaInput::get()->set('layout', 'config');
return parent::display();
}
public function cancel(){
$this->setRedirect(
hikamarket::completeLink('dashboard',false,true) );
}
public function save() {
$this->store();
return $this->cancel();
}
public function apply() {
$this->store();
return $this->display();
}
public function store() {
JSession::checkToken('request') || die('Invalid
Token');
$app = JFactory::getApplication();
$config = hikamarket::config();
$formData = hikaInput::get()->post->get('config',
array(), 'array');
if(isset($formData['store_default_access'])) {
if($formData['store_default_access'] == 'none') {
$formData['store_default_access'] = '';
} else if($formData['store_default_access'] == 'all'
|| $formData['store_default_access'] == '*') {
$formData['store_default_access'] = '*';
} else {
$marketaclType = hikamarket::get('type.market_acl');
if(strpos($formData['store_default_access'], '/')
=== false)
$formData['store_default_access'] =
str_replace('_', '/',
$formData['store_default_access']);
$formData['store_default_access'] =
$marketaclType->compile(explode(',',
$formData['store_default_access']));
}
}
$status = $config->save($formData);
hikaInput::get()->set('vendor_id', 1);
$vendorClass = hikamarket::get('class.vendor');
$vendorStatus = $vendorClass->saveForm();
if(hikamarket::level(1)) {
$vendor_fees = array();
if(!empty($formData['vendor_fee']))
$vendor_fees = $formData['vendor_fee'];
$feeClass = hikamarket::get('class.fee');
$feeStatus = $feeClass->saveConfig($vendor_fees);
}
if($status) {
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'),
'message');
} else {
$app->enqueueMessage(JText::_('ERROR_SAVING'),
'error');
}
if(!$vendorStatus) {
$app->enqueueMessage(JText::_('ERROR_SAVING_VENDOR'),
'error');
}
$config->load();
}
public function acl() {
hikaInput::get()->set('layout', 'acl');
return parent::display();
}
public function saveacl() {
$status = $this->acl_save();
if($status)
hikaInput::get()->set('acl_type', null);
return $this->acl();
}
public function applyacl() {
$this->acl_save();
return $this->acl();
}
private function acl_save() {
JSession::checkToken('request') || die('Invalid
Token');
$app = JFactory::getApplication();
$aclClass = hikamarket::get('class.acl');
$status = $aclClass->saveForm();
if($status) {
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'),
'message');
} else {
$app->enqueueMessage(JText::_('ERROR_SAVING'),
'error');
}
return $status;
}
public function sql() {
$user = JFactory::getUser();
$iAmSuperAdmin = $user->authorise('core.admin');
hikaInput::get()->set('layout', 'sql');
if(!$iAmSuperAdmin) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::sprintf('HIKA_SUPER_ADMIN_REQUIRE_FOR_TASK',
'sql'), 'error'); //
_('HIKA_SUPER_ADMIN_REQUIRE_FOR_TASK')
hikaInput::get()->set('layout', 'config');
}
return parent::display();
}
public function language() {
hikaInput::get()->set('layout', 'language');
return parent::display();
}
public function savelanguage() {
JSession::checkToken('request') || die('Invalid
Token');
$this->savelng();
return $this->language();
}
public function share() {
JSession::checkToken('request') || die('Invalid
Token');
if($this->savelng()) {
hikaInput::get()->set('layout', 'share');
return parent::display();
}
return $this->language();
}
public function send() {
JSession::checkToken('request') || die('Invalid
Token');
$code = hikaInput::get()->getString('code');
hikaInput::get()->set('code', $code);
if(empty($code))
return;
$bodyEmail = hikaInput::get()->getString('mailbody');
$true = true;
$mailClass = hikamarket::get('shop.class.mail');
$shopConfig = hikamarket::config(false);
$config = hikamarket::config();
$user = hikamarket::loadUser(true);
$addedName = $shopConfig->get('add_names',true) ?
$mailClass->cleanText(@$user->name) : '';
$mail = $mailClass->get('language', $true);
$mailClass->mailer->AddAddress($user->user_email, $addedName);
$mailClass->mailer->AddAddress('translate-hikamarket@hikashop.com',
'HikaMarket Translation Team');
$mail->subject = '[HIKAMARKET LANGUAGE FILE] ' . $code;
$mail->altbody = 'The website '.HIKASHOP_LIVE.' using
HikaMarket '.$config->get('level') .
$config->get('version') . ' sent a language file :
'.$code;
$mail->altbody .= "\n\n\n" . $bodyEmail;
$mail->html = 0;
jimport('joomla.filesystem.file');
$path = JPath::clean(hikashop_getLanguagePath(JPATH_ROOT) . DS . $code .
DS . $code . '.' . HIKAMARKET_COMPONENT . '.ini');
$mailClass->mailer->AddAttachment($path);
$result = $mailClass->sendMail($mail);
if($result) {
hikamarket::display(JText::_('THANK_YOU_SHARING'),
'success');
}
}
private function savelng() {
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
$code = hikaInput::get()->getString('code');
hikaInput::get()->set('code', $code);
$content = hikaInput::get()->getRaw('content',
'');
if(empty($code))
return;
$content_override =
hikaInput::get()->getRaw('content_override', '');
$folder = hikashop_getLanguagePath(JPATH_ROOT) . DS .
'overrides';
if(!JFolder::exists($folder)) {
JFolder::create($folder);
}
if(JFolder::exists($folder)) {
$path = $folder . DS . $code . '.override.ini';
$result = JFile::write($path, $content_override);
if(!$result) {
hikamarket::display(JText::sprintf('FAIL_SAVE', $path),
'error');
}
}
if(empty($content))
return;
$path = hikashop_getLanguagePath(JPATH_ROOT) . DS . $code . DS . $code .
'.' . HIKAMARKET_COMPONENT . '.ini';
$result = JFile::write($path, $content);
if($result) {
hikamarket::display(JText::_('HIKASHOP_SUCC_SAVED'),
'success');
$updateHelper = hikamarket::get('helper.update');
$updateHelper->installMenu($code);
$js =
'window.top.document.getElementById("image'.$code.'").src
= "'.HIKASHOP_IMAGES.'icons/icon-16-edit.png"';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
} else {
hikamarket::display(JText::sprintf('FAIL_SAVE', $path),
'error');
}
return $result;
}
public function css() {
hikaInput::get()->set('layout', 'css');
return parent::display();
}
public function savecss() {
JSession::checkToken('request') || die('Invalid
Token');
$type = hikaInput::get()->getCmd('var', '');
if(!in_array($type, array('frontend', 'backend',
'style'))) {
hikamarket::display('Invalid content');
exit;
}
$new = hikaInput::get()->getInt('new', 0);
if(!$new) {
$file = hikaInput::get()->getCmd('file');
if(!preg_match('#^([-_a-z0-9]*)_([-_a-z0-9]*)$#i', $file,
$result)) {
hikamarket::display('Could not load the file ' . $file .
' properly', 'error');
return false;
}
if($result[1] != $type) {
hikamarket::display('Invalid content', 'error');
return false;
}
$filename = $result[2];
} else {
$filename = hikaInput::get()->getCmd('filename');
if(!preg_match('#^([-_a-z0-9]*)_([-_a-z0-9]*)$#i', $type .
'_' . $filename, $result)) {
hikamarket::display('Could not load the file ' . $type .
'_' . $filename . ' properly', 'error');
return false;
}
$path = HIKAMARKET_MEDIA . 'css' . DS . $type . '_'
. $filename.'.css';
if(file_exists($path)) {
hikamarket::display('Invalid content: file "'.$type
. '_' . $filename.'" already exists',
'error');
return $this->css();
}
}
jimport('joomla.filesystem.file');
$path = HIKAMARKET_MEDIA . 'css' . DS . $type . '_' .
$filename.'.css';
$csscontent = hikaInput::get()->getString('csscontent');
$alreadyExists = file_exists($path);
if(JFile::write($path, $csscontent)) {
$configName = 'css_' . $type;
$config = hikamarket::config();
$newConfig = new stdClass();
$newConfig->$configName = $filename;
$config->save($newConfig);
hikamarket::display(JText::_('HIKASHOP_SUCC_SAVED'));
if(!$alreadyExists) {
$js = '
var optn = document.createElement("OPTION");
optn.text = "'.$filename.'";
optn.value = "'.$filename.'";
mydrop =
window.parent.document.getElementById("css_'.$type.'_choice");
if(mydrop) {
mydrop.options.add(optn);
lastid = 0;
while(mydrop.options[lastid+1]){ lastid++; }
mydrop.selectedIndex = lastid;
mydrop.onchange();
}
';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
}
if($new) {
hikaInput::get()->set('new', 0);
hikaInput::get()->set('file',
$type.'_'.$filename);
}
} else {
hikamarket::display(JText::sprintf('FAIL_SAVE', $path),
'error');
}
return $this->css();
}
public function getUploadSetting($upload_key, $caller = '') {
if(empty($upload_key))
return false;
$upload_value = null;
$upload_keys = array(
'default_vendor_image' => array(
'type' => 'image',
'field' => 'config[default_vendor_image]'
)
);
if(empty($upload_keys[$upload_key]))
return false;
$upload_value = $upload_keys[$upload_key];
return array(
'limit' => 1,
'type' => $upload_value['type'],
'options' => array(),
'extra' => array(
'field_name' => $upload_value['field']
)
);
}
public function manageUpload($upload_key, &$ret, $uploadConfig,
$caller = '') {
if(empty($ret) || empty($ret->name))
return;
$upload_keys = array(
'default_vendor_image' => true
);
if(empty($upload_keys[$upload_key]))
return;
$data = array(
$upload_key => $ret->name
);
$config = hikamarket::config();
$config->save($data);
}
}
controllers/dashboard.php000064400000001332151160562330011553
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class dashboardMarketController extends hikamarketController {
protected $rights = array(
'display' => array('listing','cpanel'),
'add' => array(),
'edit' => array(),
'modify' => array(),
'delete' => array()
);
public function __construct($config = array()) {
parent::__construct($config);
}
public function cpanel() {
hikaInput::get()->set('layout', 'cpanel');
return $this->display();
}
}
controllers/dev.php000064400000004413151160562330010405 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class devMarketController extends hikamarketController {
protected $rights = array(
'display' => array('listing',
'generate_orders'),
'add' => array(),
'edit' => array(),
'modify' => array('apply','save'),
'delete' => array()
);
public function __construct($config = array()) {
parent::__construct($config);
}
public function generate_orders() {
return $this->renderingLayout('generate_orders');
}
public function apply() {
$status = $this->store();
$subtask = hikaInput::get()->getCmd('subtask',
'');
switch($subtask) {
case 'generate_orders':
return $this->renderingLayout('generate_orders');
}
return $this->listing();
}
public function store() {
$subtask = hikaInput::get()->getCmd('subtask',
'');
switch($subtask) {
case 'generate_orders':
return $this->process_generate_orders();
}
return false;
}
protected function process_generate_orders() {
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$shopOrderClass = hikamarket::get('class.order');
$formData = hikaInput::get()->get('data', array(),
'array');
if(empty($formData['generate_orders'])) {
$app->enqueueMessage('Invalid data', 'error');
return false;
}
$user = (int)@$formData['generate_orders']['user'];
if(empty($user))
$user = hikamarket::loadUser(false);
$currency_id = hikashop_getCurrency();
$order_status =
@$formData['generate_orders']['order_status'];
if(empty($order_status))
$order_status = $shopConfig->get('order_created_status',
'created');
$products =
$formData['generate_orders']['products'];
hikamarket::toInteger($products);
$order = new stdClass();
$order->order_type = 'sale';
$order->order_user_id = $user;
$order->order_status = $order_status;
$order->order_currency_id = $currency_id;
$order->cart = new stdClass();
$order->cart->products = $products;
return true;
}
}
controllers/documentation.php000064400000002512151160562330012476
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class documentationMarketController extends hikashopBridgeController {
const name = 'DOCUMENTATION';
const ctrl = 'documentation';
const icon = 'life-ring';
protected $rights = array(
'display' => array('listing'),
'add' => array(),
'edit' => array(),
'modify' => array(),
'delete' => array()
);
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('listing');
}
function listing() {
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl);
$bar = JToolBar::getInstance('toolbar');
$bar->appendButton('Link', HIKAMARKET_LNAME,
JText::_('HIKASHOP_CPANEL'),
hikamarket::completeLink('dashboard'));
$config = hikamarket::config();
$level = $config->get('level');
$url = HIKAMARKET_HELPURL.'documentation&level='.$level;
echo '<div id="hikamarket_div"><iframe
allowtransparency="true" scrolling="auto"
height="450px" frameborder="0" width="100%"
name="hikamarket_frame" id="hikamarket_frame"
src="'.$url.'"></iframe></div>';
}
}
controllers/index.html000064400000000032151160562330011104
0ustar00<html><body></body></html>controllers/layout.php000064400000001604151160562330011143
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class layoutMarketController extends hikamarketController {
protected $type = 'layout';
protected $toggle = array('layout_published' =>
'layout_id');
protected $rights = array(
'display' => array('display', 'show',
'listing'),
'add' => array('add'),
'edit' => array('edit', 'toggle',
'publish', 'unpublish'),
'modify' => array('save', 'apply'),
'delete' => array('delete')
);
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('listing');
}
public function store() {
return parent::adminStore();
}
}
controllers/menus.php000064400000003576151160562330010767 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class menusMarketController extends hikamarketController {
protected $type = 'menus';
protected $rights = array(
'display' => array('display', 'show',
'listing', 'cancel'),
'add' => array(),
'edit' => array('edit', 'toggle',
'add_module'),
'modify' => array('save', 'apply'),
'delete' => array('remove')
);
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('listing');
}
public function add_module() {
$id = hikamarket::getCID('id');
$menuClass = hikamarket::get('class.menus');
$menu->attachAssocModule($id);
$this->edit();
}
public function store() {
$app = JFactory::getApplication();
if($app->isAdmin())
return $this->adminStore();
return false;
}
public function remove() {
$app = JFactory::getApplication();
if($app->isAdmin())
return $this->adminRemove();
return false;
}
public function edit() {
$id = hikamarket::getCID('id');
$app = JFactory::getApplication();
if(HIKASHOP_J30) {
if(!empty($id))
$app->redirect(
JRoute::_('index.php?option=com_menus&view=item&layout=edit&id='.$id,
false) );
else
$app->redirect( JRoute::_('index.php?option=com_menus',
false) );
}
if(hikaInput::get()->getInt('fromjoomla') &&
!empty($id)) {
$context = 'com_menus.edit.item';
$values = (array)$app->getUserState($context . '.id');
$index = array_search((int)$id, $values, true);
if(is_int($index)) {
unset($values[$index]);
$app->setUserState($context . '.id', $values);
}
}
return parent::edit();
}
}
controllers/modules.php000064400000004400151160562330011273
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class modulesMarketController extends hikamarketController {
protected $type = 'modules';
protected $rights = array(
'display' => array('display', 'show',
'listing', 'cancel', 'getvalues'),
'add' => array('add'),
'edit' => array('edit', 'toggle'),
'modify' => array('save', 'apply'),
'delete' => array('remove')
);
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('listing');
}
public function store() {
$app = JFactory::getApplication();
if($app->isAdmin())
return $this->adminStore();
return false;
}
public function remove() {
$app = JFactory::getApplication();
if($app->isAdmin())
return $this->adminRemove();
return false;
}
public function edit() {
$app = JFactory::getApplication();
$id = hikamarket::getCID('id');
if(HIKASHOP_J30) {
if(!empty($id))
$app->redirect(
JRoute::_('index.php?option=com_modules&view=module&layout=edit&id='.$id,
false) );
else
$app->redirect(
JRoute::_('index.php?option=com_modules&view=module', false)
);
}
if(hikaInput::get()->getInt('fromjoomla') &&
!empty($id)) {
$context = 'com_modules.edit.item';
$values = (array)$app->getUserState($context . '.id');
$index = array_search((int)$id, $values, true);
if(is_int($index)) {
unset($values[$index]);
$app->setUserState($context . '.id', $values);
}
}
return parent::edit();
}
public function getValues() {
$displayFormat = hikaInput::get()->getVar('displayFormat',
'');
$search = hikaInput::get()->getVar('search', null);
$start = hikaInput::get()->getInt('start', 0);
$nameboxType = hikamarket::get('type.namebox');
$options = array(
'displayFormat' => $displayFormat
);
if($start > 0)
$options['page'] = $start;
$ret = $nameboxType->getValues($search, 'modules',
$options);
if(!empty($ret)) {
echo json_encode($ret);
exit;
}
echo '[]';
exit;
}
}
controllers/order.php000064400000002476151160562330010751 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class orderMarketController extends hikamarketController {
protected $type = 'order';
protected $rights = array(
'display' => array('show',
'checkstatus'),
'add' => array(),
'edit' => array(),
'modify' => array(),
'delete' => array()
);
public function show() {
hikaInput::get()->set('layout',
'show_order_back_show');
$tmpl = hikaInput::get()->getString('tmpl', '');
if($tmpl === 'component') {
ob_end_clean();
parent::display();
exit;
}
return parent::display();
}
public function checkstatus() {
hikamarket::headerNoCache();
$order_id = hikamarket::getCID('order_id');
$order_status = '';
if(!empty($order_id)) {
$orderClass = hikamarket::get('class.order');
$order = $orderClass->getRaw($order_id);
$order_status = $order->order_status;
}
$tmpl = hikaInput::get()->getString('tmpl', '');
if($tmpl === 'component' || $tmpl == 'json') {
ob_end_clean();
echo $order_status;
exit;
}
echo $order_status;
return false;
}
}
controllers/plugins.php000064400000006310151160562330011306
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class pluginsMarketController extends hikamarketController {
protected $type = 'plugins';
protected $rights = array(
'display' =>
array('show','listing','trigger'),
'add' => array('add'),
'edit' => array('edit','toggle'),
'modify' => array('save','apply'),
'delete' => array('delete')
);
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('listing');
}
public function trigger() {
$cid = hikaInput::get()->getInt('cid', 0);
$function = hikaInput::get()->getString('function',
'');
if(empty($cid) || empty($function)){
return false;
}
$pluginsClass = hikamarket::get('class.plugins');
$plugin = $pluginsClass->get($cid);
if(empty($plugin)) {
return false;
}
$plugin = hikamarket::import($plugin->folder, $plugin->element);
if(method_exists($plugin, $function))
return $plugin->$function();
return false;
}
public function store() {
$this->plugin = hikaInput::get()->getCmd('name',
'');
$this->plugin_type =
hikaInput::get()->getCmd('plugin_type', 'plugin');
if(empty($this->plugin) || !in_array($this->plugin_type,
array('plugin'))) {
return false;
}
$data = hikamarket::import('hikamarket'.$this->plugin_type,
$this->plugin);
$element = null;
$id = hikamarket::getCID($this->plugin_type.'_id');
$formData = hikaInput::get()->get('data', array(),
'array');
$params_name = $this->plugin_type.'_params';
if(!empty($formData[$this->plugin_type])) {
$plugin_id = $this->plugin_type.'_id';
$element->$plugin_id = $id;
foreach($formData[$this->plugin_type] as $column => $value) {
hikamarket::secureField($column);
if(is_array($value)) {
if($column == $params_name) {
$element->$params_name = null;
foreach($formData[$this->plugin_type][$column] as $key=>$val)
{
hikamarket::secureField($key);
$element->$params_name->$key = strip_tags($val);
}
}
}else{
$element->$column = strip_tags($value);
}
}
$plugin_description = $this->plugin_type.'_description';
$plugin_description_data =
hikaInput::get()->getRaw($plugin_description, '');
$element->$plugin_description = $plugin_description_data;
}
$function =
'on'.ucfirst($this->plugin_type).'ConfigurationSave';
if(method_exists($data, $function)) {
$data->$function($element);
}
if(!empty($element)) {
$pluginClass =
hikamarket::get('class.'.$this->plugin_type);
if(isset($element->$params_name)) {
$element->$params_name = serialize($element->$params_name);
}
$status = $pluginClass->save($element);
if(!$status) {
hikaInput::get()->set('fail', $element);
} else {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'),
'message');
if(empty($id)) {
hikaInput::get()->set($this->plugin_type.'_id',
$status);
}
}
}
}
}
controllers/product.php000064400000014545151160562330011316
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class productMarketController extends hikamarketController {
protected $type = 'product';
protected $rights = array(
'display' =>
array('gettree','waitingapproval'),
'add' => array('new_template'),
'edit' => array('approve','decline'),
'modify' => array(),
'delete' => array('remove')
);
public function new_template() {
$productClass = hikamarket::get('shop.class.product');
$product = new stdClass();
$product->product_type = 'template';
$product->product_code = '@template-' . uniqid();
$status = $productClass->save($product);
if($status) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('PRODUCT_TEMPLATE_CREATED'));
$app->redirect(
hikamarket::completeLink('shop.product&task=edit&cid=' .
$status, false, true) );
}
return false;
}
public function waitingapproval() {
$config = hikamarket::config();
if(!$config->get('product_approval', 0))
return false;
hikaInput::get()->set('layout',
'waitingapproval');
return parent::display();
}
protected function confirm_action($action = null) {
hikaInput::get()->set('action_to_confirm', $action);
hikaInput::get()->set('layout',
'confirm_action');
return parent::display();
}
protected function checkConfirmation($action) {
$product_ids = hikaInput::get()->get('cid', array(),
'array');
hikamarket::toInteger($product_ids);
asort($product_ids);
$confirmation =
md5($action.'{'.implode(':',$product_ids).'}');
$user_confirmation =
hikaInput::get()->getString('confirmation', null);
return ($confirmation == $user_confirmation);
}
public function approve() {
$product_id = hikaInput::get()->get('cid', array(),
'array');
if(empty($product_id))
$product_id = hikamarket::getCID('product_id');
if(empty($product_id)) {
$app->redirect(hikamarket::completeLink('product&task=waitingapproval',
false, true));
return false;
}
if(!empty($product_id) &&
!$this->checkConfirmation('approve'))
return $this->confirm_action('approve');
JSession::checkToken('request') || die('invalid
token');
if(is_array($product_id) && count($product_id) == 1)
$product_id = (int)reset($product_id);
if(is_array($product_id))
hikamarket::toInteger($product_id);
$app = JFactory::getApplication();
$productClass = hikamarket::get('class.product');
$formData = hikaInput::get()->get('data', array(),
'array');
$options = null;
if(isset($formData['notify'])) {
$options = array(
'notify' =>
(int)@$formData['notify']['send'],
'message' =>
$formData['notify']['msg']
);
}
$status = $productClass->approve($product_id, 'approve',
$options);
if($status) {
if(is_array($product_id))
$app->enqueueMessage(JText::sprintf('HIKAMARKET_X_PRODUCTS_APPROVED',
$status));
else
$app->enqueueMessage(JText::_('HIKAMARKET_PRODUCT_APPROVED'));
}
$this->approveDeclineRedirect($product_id);
}
public function decline() {
$product_id = hikaInput::get()->get('cid', array(),
'array');
if(empty($product_id))
$product_id = hikamarket::getCID('product_id');
if(empty($product_id)) {
$app->redirect(hikamarket::completeLink('product&task=waitingapproval',
false, true));
return false;
}
if(!empty($product_id) &&
!$this->checkConfirmation('decline'))
return $this->confirm_action('decline');
JSession::checkToken('request') || die('invalid
token');
if(is_array($product_id) && count($product_id) == 1)
$product_id = (int)reset($product_id);
if(is_array($product_id))
hikamarket::toInteger($product_id);
$app = JFactory::getApplication();
$productClass = hikamarket::get('class.product');
$formData = hikaInput::get()->get('data', array(),
'array');
$options = null;
if(isset($formData['notify'])) {
$options = array(
'notify' =>
(int)@$formData['notify']['send'],
'message' =>
$formData['notify']['msg']
);
}
$status = $productClass->decline($product_id, $options);
if($status) {
if(is_array($product_id))
$app->enqueueMessage(JText::sprintf('HIKAMARKET_X_PRODUCTS_DECLINED',
$status));
else
$app->enqueueMessage(JText::_('HIKAMARKET_PRODUCT_DECLINED'));
}
$this->approveDeclineRedirect();
}
protected function approveDeclineRedirect($product_id = 0) {
$app = JFactory::getApplication();
$redirect = hikaInput::get()->getString('redirect',
'');
if(empty($product_id) || is_array($product_id))
$redirect = 'waitingapproval';
if(!empty($redirect)) {
switch($redirect) {
case 'waitingapproval':
$app->redirect(hikamarket::completeLink('product&task=waitingapproval',
false, true));
return;
}
}
$cancel_redirect =
hikaInput::get()->getString('cancel_redirect', '');
if(!empty($cancel_redirect))
$cancel_redirect = '&cancel_redirect='
.urlencode($cancel_redirect);
$app->redirect(
hikamarket::completeLink('shop.product&task=edit&cid='.$product_id.$cancel_redirect,
false, true) );
}
public function remove() {
if(!$this->checkConfirmation('remove'))
return $this->confirm_action('remove');
$this->adminRemove();
$app = JFactory::getApplication();
$app->redirect(hikamarket::completeLink('product&task=waitingapproval',
false, true));
}
public function getTree() {
$category_id = hikaInput::get()->getInt('category_id', 0);
$displayFormat =
hikaInput::get()->getString('displayFormat', '');
$variants = hikaInput::get()->getInt('variants', 0);
$search = hikaInput::get()->getVar('search', null);
$start = hikaInput::get()->getInt('start', 0);
$namebox_mode = hikaInput::get()->getCmd('namebox_mode',
'product');
if(!in_array($namebox_mode, array('product',
'product_template')))
$namebox_mode = 'product';
$nameboxType = hikamarket::get('type.namebox');
$options = array(
'start' => $category_id,
'page' => $start,
'displayFormat' => $displayFormat,
'variants' => $variants
);
$ret = $nameboxType->getValues($search, $namebox_mode, $options);
if(!empty($ret)) {
echo json_encode($ret);
exit;
}
echo '[]';
exit;
}
}
controllers/toggle.php000064400000007133151160562340011113
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class toggleMarketController extends hikashopBridgeController {
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('toggle');
if(!headers_sent()) {
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
}
}
public function authorize($task) {
return true;
}
public function toggle() {
$completeTask = hikaInput::get()->getCmd('task');
$task = substr($completeTask, 0, strrpos($completeTask, '-'));
$elementPkey = substr($completeTask, strrpos($completeTask,
'-') + 1);
$value = hikaInput::get()->getCmd('value', '');
$controllerName = hikaInput::get()->getWord('table',
'');
$controller = hikamarket::get('controller.'.$controllerName);
if(empty($controller)) {
echo 'No controller';
exit;
}
if(!$controller->authorize('toggle')) {
echo 'Forbidden';
exit;
}
$function = $controllerName.$task;
if(method_exists($this, $function)) {
$this->$function($elementPkey, $value);
} else {
$class = hikamarket::get('class.'.$controllerName);
if(!$class->toggleId($task)) {
echo 'Forbidden';
exit;
}
$obj = new stdClass();
$obj->$task = $value;
$id = $class->toggleId($task);
$obj->$id = $elementPkey;
if(!$class->save($obj)) {
if(method_exists($class,'getTable')) {
$table = $class->getTable();
} else {
$table = hikamarket::table($controllerName);
}
$db = JFactory::getDBO();
$db->setQuery('SELECT '.$task.' FROM
'.$table.' WHERE '.$id.' =
'.$db->Quote($elementPkey).' LIMIT 1');
$value = $db->loadResult();
}
}
$toggleClass = hikamarket::get('helper.toggle');
$extra = hikaInput::get()->get('extra', array(),
'array');
if(!empty($extra)) {
foreach($extra as $key => $val) {
$extra[$key] = urldecode($val);
}
}
echo
$toggleClass->toggle(hikaInput::get()->getCmd('task',
''), $value, $controllerName, $extra);
exit;
}
public function delete() {
while(ob_get_level())
@ob_end_clean();
$value2 = '';
if(strpos(hikaInput::get()->getCmd('value'), '-')
!== false)
list($value1, $value2) = explode('-',
hikaInput::get()->getCmd('value'));
else
$value1 = hikaInput::get()->getCmd('value');
$table = hikaInput::get()->getWord('table', '');
$controller = hikamarket::get('controller.'.$table);
if(empty($controller)) {
echo 'No controller';
exit;
}
if(!$controller->authorize('delete')) {
echo 'Forbidden';
exit;
}
$function = 'delete'.ucfirst($table);
if(method_exists($this, $function)) {
$this->$function($value1, $value2);
exit;
}
$destClass = hikamarket::get('class.'.$table);
$deleteToggle = $destClass->toggleDelete($value1, $value2);
if(empty($deleteToggle)) {
echo 'Forbidden';
exit;
}
if($deleteToggle === true) {
echo '1';
exit;
}
$key2 = '';
$v = reset($deleteToggle);
if(is_array($v) && count($v) > 1)
list($key1, $key2) = reset($deleteToggle);
else
$key1 = reset($deleteToggle);
$table = key($deleteToggle);
if(empty($key1) || empty($value1) || (!empty($key2) &&
empty($value2)) ) {
echo 'No value';
exit;
}
echo '1';
exit;
}
}
controllers/update.php000064400000004547151160562340011122
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class updateMarketController extends hikashopBridgeController {
public function __construct($config = array()){
parent::__construct($config);
$this->registerDefaultTask('update');
}
public function install() {
hikamarket::setTitle(HIKAMARKET_NAME, 'sync',
'update');
$newConfig = new stdClass();
$newConfig->installcomplete = 1;
$config = hikamarket::config();
$config->save($newConfig);
$updateHelper = hikamarket::get('helper.update');
$updateHelper->addJoomfishElements();
$updateHelper->addDefaultData();
$updateHelper->createUploadFolders();
$updateHelper->installMenu();
$updateHelper->installExtensions();
$updateHelper->addUpdateSite();
$fieldsClass = hikamarket::get('class.field');
$fieldsClass->initFields();
$bar = JToolBar::getInstance('toolbar');
$bar->appendButton('Link', HIKAMARKET_LNAME,
JText::_('HIKASHOP_CPANEL'),
hikamarket::completeLink('dashboard'));
$this->showIframe(HIKAMARKET_UPDATEURL.'install&fromversion='.hikaInput::get()->getCmd('fromversion'));
return false;
}
public function update() {
$config = hikamarket::config();
if($config->get('website') != HIKASHOP_LIVE){
$updateHelper = hikamarket::get('helper.update');
$updateHelper->addUpdateSite();
}
hikamarket::setTitle(JText::_('UPDATE_ABOUT'),
'sync', 'update');
$bar = JToolBar::getInstance('toolbar');
$bar->appendButton('Link', HIKAMARKET_LNAME,
JText::_('HIKASHOP_CPANEL'),
hikamarket::completeLink('dashboard'));
$this->showIframe(HIKAMARKET_UPDATEURL.'update');
return false;
}
private function showIframe($url) {
$config = hikamarket::config();
if(hikashop_isSSL())
$url = str_replace('http://', 'https://', $url);
echo '<div id="hikashop_div"><iframe
allowtransparency="true" scrolling="auto"
height="450px" frameborder="0" width="100%"
name="hikamarket_frame" id="hikamarket_frame" '.
'src="'.$url.'&level='.$config->get('level').'&component='.HIKAMARKET_LNAME.'&version='.$config->get('version').'&li='.urlencode(base64_encode(HIKASHOP_LIVE)).'"></iframe></div>';
}
}
controllers/upload.php000064400000027156151160562340011125
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class uploadMarketController extends hikamarketController {
protected $rights = array(
'display' =>
array('upload','image','galleryimage'),
'add' => array(),
'edit' =>
array('addimage','galleryselect'),
'modify' => array('upload'),
'delete' => array()
);
protected $controller = null;
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('galleryimage');
$controllerName = hikaInput::get()->getCmd('uploader',
'');
if(!empty($controllerName)) {
$this->controller =
hikamarket::get('controller.'.$controllerName);
if(!method_exists($this->controller, 'getUploadSetting'))
$this->controller = null;
}
}
public function image() {
$upload_key = hikaInput::get()->getVar('field',
'');
if(empty($this->controller))
return false;
$uploadConfig = $this->controller->getUploadSetting($upload_key);
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() {
$upload_key = hikaInput::get()->getVar('field',
'');
if(empty($this->controller))
return false;
$uploadConfig = $this->controller->getUploadSetting($upload_key);
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() {
$upload_key = hikaInput::get()->getVar('field',
'');
if(empty($this->controller))
return false;
$uploadConfig = $this->controller->getUploadSetting($upload_key);
if($uploadConfig === false)
return false;
if(!empty($uploadConfig['type']) &&
$uploadConfig['type'] != 'image')
return false;
$layout = 'uploadmarket';
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 = hikamarket::get('helper.upload');
$ret = $uploadHelper->processFallback($options);
$output = '[]';
if($ret !== false && empty($ret->error)) {
$helperImage = null;
if($type == 'image') {
$helperImage = hikamarket::get('shop.helper.image');
}
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 = $r->name;
$file->file_url = $options['upload_url'];
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') {
$img = $helperImage->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'] .
$file->file_name);
}
foreach($extra_data as $k => $v) {
$params->$k = $v;
}
$r->params = $params;
$this->controller->manageUpload($upload_key, $r, $uploadConfig,
'addimage');
if(empty($r->html))
$r->html = hikamarket::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() {
$upload_key = hikaInput::get()->getVar('field',
'');
if(empty($this->controller))
return false;
$uploadConfig = $this->controller->getUploadSetting($upload_key,
'galleryselect');
if($uploadConfig === false)
return false;
if(!empty($uploadConfig['type']) &&
$uploadConfig['type'] != 'image')
return false;
$layout = 'uploadmarket';
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;
$filesData = hikaInput::get()->get('files', array(),
'array');
$output = '[]';
if(!empty($filesData)) {
$helperImage = hikamarket::get('shop.helper.image');
$ret = array();
foreach($filesData as $filename) {
$r = new stdClass();
$r->name = $filename;
$r->url = $options['upload_url'].rawurlencode($filename);
$r->path = $options['upload_dir'].$filename;
$r->type = $type;
$r->size = filesize($r->path);
$params = new stdClass();
$params->file_path = $filename;
$params->file_name = $filename;
$params->file_url = $r->url;
foreach($extra_data as $k => $v) {
$params->$k = $v;
}
$r->params = $params;
$this->controller->manageUpload($upload_key, $r, $uploadConfig,
'galleryselect');
if(empty($r->html))
$r->html = hikamarket::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('request') || die('Invalid
Token');
$config = hikamarket::config();
$upload_key = hikaInput::get()->getVar('field',
'');
if(empty($this->controller))
exit;
$uploadConfig = $this->controller->getUploadSetting($upload_key,
'upload');
if($uploadConfig === false)
exit;
$layout = 'uploadmarket';
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;
$uploadHelper = hikamarket::get('helper.upload');
$ret = $uploadHelper->process($options);
if($ret === false || !empty($ret->error) || !empty($ret->partial))
{
if($ret !== false) {
unset($ret->path);
unset($ret->params);
}
echo json_encode($ret);
exit;
}
$helperImage = null;
if($type == 'image') {
$helperImage = hikamarket::get('shop.helper.image');
}
$file = new stdClass();
$file->file_description = '';
$file->file_name = $ret->name;
$file->file_type = $type;
$file->file_path = $ret->name;
$file->file_url = $options['upload_url'];
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->html = '';
$js = '';
if($type == 'image') {
$img = $helperImage->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'] .
$file->file_name);
}
foreach($extra_data as $k => $v) {
$params->$k = $v;
}
$ret->params = $params;
$this->controller->manageUpload($upload_key, $ret, $uploadConfig,
'upload');
if(empty($ret->html))
$ret->html = hikamarket::getLayout($layout, $viewName,
$ret->params, $js);
unset($ret->path);
unset($ret->params);
echo json_encode($ret);
exit;
}
private function processUploadOption(&$options, $type =
'image') {
$shopConfig = hikamarket::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;
$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($app->isAdmin()) {
$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;
}
}
controllers/user.php000064400000002031151160562340010600 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class userMarketController extends hikamarketController {
protected $type = 'user';
protected $rights = array(
'display' => array('getvalues'),
'add' => array(),
'edit' => array(),
'modify' => array(),
'delete' => array()
);
public function getValues() {
$displayFormat = hikaInput::get()->getVar('displayFormat',
'');
$search = hikaInput::get()->getVar('search', null);
$start = hikaInput::get()->getInt('start', 0);
$nameboxType = hikamarket::get('type.namebox');
$options = array(
'displayFormat' => $displayFormat,
'start' => $start,
);
$ret = $nameboxType->getValues($search, 'user', $options);
if(!empty($ret)) {
echo json_encode($ret);
exit;
}
echo '[]';
exit;
}
}
controllers/vendor.php000064400000025726151160562340011137
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class vendorMarketController extends hikamarketController {
protected $type = 'vendor';
protected $toggle = array('vendor_published' =>
'vendor_id');
protected $rights = array(
'display' => array('display', 'show',
'cancel', 'listing', 'admin',
'products', 'invoices', 'pay',
'paymanual', 'geninvoice', 'dogeninvoice',
'selection', 'useselection', 'getprice',
'searchfields', 'getvalues', 'reports'),
'add' => array('add'),
'edit' =>
array('edit','toggle','publish','unpublish'),
'modify' =>
array('save','apply','dopay'),
'delete' => array('remove')
);
public function __construct($config = array()) {
parent::__construct($config);
$this->registerDefaultTask('listing');
}
public function store() {
return parent::adminStore();
}
public function remove() {
$confirm = hikaInput::get()->getVar('confirm',
'');
$cid = hikaInput::get()->post->get('cid', array(),
'array');
hikamarket::toInteger($cid);
if(!empty($confirm)) {
sort($cid);
$check = md5(implode(';', $cid));
if($confirm != $check || in_array(1, $cid)) {
$confirm = null;
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('INCORRECT_DATA'));
}
}
if(empty($confirm)) {
hikaInput::get()->set('layout', 'delete');
return parent::display();
}
return parent::adminRemove();
}
public function cancel(){
$this->setRedirect(
hikamarket::completeLink('vendor',false,true) );
}
public function admin() {
hikaInput::get()->set('layout', 'admin');
return parent::display();
}
public function products() {
hikaInput::get()->set('layout', 'products');
return parent::display();
}
public function pay() {
$config = hikamarket::config();
$vendor_id = hikamarket::getCID('vendor_id');
$vendor_ids = hikaInput::get()->get('cid', array(),
'array');
if(!empty($vendor_ids) && count($vendor_ids) > 1) {
$vendor_id = $vendor_ids;
hikamarket::toInteger($vendor_id);
}
if(!empty($vendor_id))
hikaInput::get()->set('layout', 'pay');
if(is_array($vendor_id) &&
hikaInput::get()->getInt('report', 0) != 0) {
hikaInput::get()->set('layout', 'payreport');
return parent::display();
}
$orders = hikaInput::get()->get('orders', array(),
'array');
if(!empty($orders) && !is_array($vendor_id)) {
JSession::checkToken('request') || die('Invalid
Token');
$vendorClass = hikamarket::get('class.vendor');
$status = $vendorClass->pay($vendor_id, $orders);
if($status) {
$app = JFactory::getApplication();
$app->redirect(hikamarket::completeLink('shop.order&task=edit&cid[]='.$status,
false, true));
}
}
return parent::display();
return false;
}
public function dopay() {
JSession::checkToken('request') || die('Invalid
Token');
$app = JFactory::getApplication();
$vendor_id = hikamarket::getCID();
$vendor_ids = hikaInput::get()->get('cid', array(),
'array');
hikamarket::toInteger($vendor_ids);
hikaInput::get()->set('layout', 'listing');
if(empty($vendor_id))
return parent::display();
if(count($vendor_ids) > 1) {
$filter_start = hikaInput::get()->getVar('filter_start',
null);
$filter_end = hikaInput::get()->getVar('filter_end',
null);
$session_filter_start =
$app->getUserState(HIKAMARKET_COMPONENT.'.vendormarket.pay.filter_start',
null);
$session_filter_end =
$app->getUserState(HIKAMARKET_COMPONENT.'.vendormarket.pay.filter_end',
null);
if($filter_start != $session_filter_start || $filter_end !=
$session_filter_end) {
$app->enqueueMessage(JText::_('HIKAM_THE_FILTER_HAS_CHANGED'));
hikaInput::get()->set('layout', 'pay');
return parent::display();
}
$filters = array(
'start' => $filter_start,
'end' => $filter_end
);
$vendorClass = hikamarket::get('class.vendor');
$status = $vendorClass->pay($vendor_ids, null, $filters);
if(!empty($status)) {
if(!is_array($status)) {
$app->redirect(hikamarket::completeLink('shop.order&task=edit&cid[]='
. (int)$status, false, true));
}
$vendor_errors = array();
foreach($status as $k => $v) {
if($v !== false)
continue;
unset($status[$k]);
$vendor_errors[] = (int)$k;
}
if(!empty($vendor_errors)) {
$query = 'SELECT vendor_name FROM ' .
hikamarket::table('vendor') . ' WHERE vendor_id IN
('.implode(',', $vendor_errors).')';
$db = JFactory::getDBO();
$vendors = $db->loadColumn();
$app->enqueueMessage(JText::sprint('CANNOT_PAY_VENDORS',
implode(', ', $vendors)), 'error');
}
if(count($status) == 1)
$status[] = 0;
$app->redirect(hikamarket::completeLink('vendor&task=pay&report=1&cid[]='
. implode('&cid[]=', $status), false, true));
}
hikaInput::get()->set('layout', 'pay');
$app->enqueueMessage(JText::_('INVALID_DATA'),
'error');
} else {
$orders = hikaInput::get()->get('orders', array(),
'array');
if(!empty($orders)) {
JSession::checkToken('request') || die('Invalid
Token');
$vendorClass = hikamarket::get('class.vendor');
$status = $vendorClass->pay($vendor_id, $orders);
if(!is_array($status))
$status = array($status);
if(count($status) == 1)
$status[] = 0;
$app->redirect(hikamarket::completeLink('vendor&task=pay&report=1&cid[]='
. implode('&cid[]=', $status), false, true));
}
}
return parent::display();
return false;
}
public function geninvoice() {
return self::pay();
}
public function dogeninvoice() {
return self::dopay();
}
public function paymanual() {
$vendor_id = hikamarket::getCID('vendor_id');
$order_id = hikaInput::get()->getInt('order_id', 0);
$payment_method =
hikaInput::get()->getString('payment_method',
'manual');
if(empty($order_id) || empty($vendor_id)) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('INVALID_DATA'),
'error');
return false;
}
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($vendor_id);
if(empty($vendor)) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('INVALID_DATA'),
'error');
return false;
}
if($payment_method == 'paypal' &&
empty($vendor->vendor_params->paypal_email)) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('HIKAM_ERR_PAYPAL_EMAIL_EMPTY'),
'error');
return false;
}
$formData = hikaInput::get()->get('data', array(),
'array');
if(!empty($formData) && $payment_method == 'manual'
&& !empty($formData['validation'])) {
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$confirmed_status =
$config->get('vendorpayment_confirmed_status', '');
if(empty($confirmed_status))
$confirmed_status =
$shopConfig->get('order_confirmed_status',
'confirmed');
$update_order = new stdClass();
$update_order->order_id = (int)$order_id;
$update_order->order_status = $confirmed_status;
$update_order->history = new stdClass();
$update_order->history->history_reason =
JText::_('MANUAL_VALIDATION');
$update_order->history->history_notified = false;
if(!empty($formData['notify']))
$update_order->history->history_notified = true;
$orderClass = hikamarket::get('shop.class.order');
$status = $orderClass->save($update_order);
$data = array(
'result' => ($status ? $confirmed_status :
'error')
);
echo '<html><body>'.
'<script
type="text/javascript">'."\r\n".
'window.parent.hikamarket.submitBox('.json_encode($data).');'."\r\n".
'</script>'."\r\n".
'</body></html>';
exit;
}
hikaInput::get()->set('layout', 'paymanual');
return parent::display();
return false;
}
public function selection() {
hikaInput::get()->set('layout', 'selection');
return parent::display();
}
public function useselection() {
hikaInput::get()->set('layout', 'useselection');
return parent::display();
}
public function searchfields() {
hikaInput::get()->set('layout', 'searchfields');
return parent::display();
}
public function reports() {
$tmpl = hikaInput::get()->getCmd('tmpl', '');
if($tmpl == 'ajax') {
return $this->reportsAjax();
}
hikaInput::get()->set('layout', 'reports');
return parent::display();
}
protected function reportsAjax() {
$vendor_id = hikamarket::getCID('vendor_id', 0);
$statName = hikaInput::get()->getCmd('chart',
'');
$statValue = hikaInput::get()->getString('value',
'');
if(empty($vendor_id) || empty($statName) || empty($statValue)) {
echo '{}';
exit;
}
$statisticsClass = hikamarket::get('class.statistics');
$ret = $statisticsClass->getAjaxData($vendor_id, $statName,
$statValue);
if($ret === false) {
echo '{}';
exit;
}
echo $ret;
exit;
}
public function getUploadSetting($upload_key, $caller = '') {
$vendor_id = hikaInput::get()->getInt('vendor_id');
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($vendor_id);
if(empty($upload_key) || (empty($vendor) && !empty($vendor_id)))
return false;
$upload_value = null;
$upload_keys = array(
'vendor_image' => array(
'type' => 'image',
'field' => 'data[vendor][vendor_image]'
)
);
if(empty($upload_keys[$upload_key]))
return false;
$upload_value = $upload_keys[$upload_key];
return array(
'limit' => 1,
'type' => $upload_value['type'],
'options' => array(),
'extra' => array(
'vendor_id' => $vendor_id,
'field_name' => $upload_value['field']
)
);
}
public function manageUpload($upload_key, &$ret, $uploadConfig,
$caller = '') {
if(empty($ret) || empty($ret->name) ||
empty($uploadConfig['extra']['vendor_id']))
return;
$vendorClass = hikamarket::get('class.vendor');
$vendor = new stdClass();
$vendor->vendor_id =
(int)$uploadConfig['extra']['vendor_id'];
$vendor->vendor_image = $ret->name;
$vendorClass->save($vendor);
}
public function getPrice() {
$currency_id = hikaInput::get()->getInt('currency_id', 0);
$price_id = hikaInput::get()->getFloat('value', 0);
$currencyClass = hikamarket::get('shop.class.currency');
echo $currencyClass->format($price_id, $currency_id);
exit;
}
public function getValues() {
$displayFormat = hikaInput::get()->getVar('displayFormat',
'');
$search = hikaInput::get()->getVar('search', null);
$start = hikaInput::get()->getInt('start', 0);
$nameboxType = hikamarket::get('type.namebox');
$options = array(
'displayFormat' => $displayFormat
);
if($start > 0)
$options['page'] = $start;
$ret = $nameboxType->getValues($search, 'vendor',
$options);
if(!empty($ret)) {
echo json_encode($ret);
exit;
}
echo '[]';
exit;
}
}
controllers/zone.php000064400000002330151160562350010600 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class zoneMarketController extends hikamarketController {
protected $rights = array(
'display' => array('gettree'),
'add' => array(),
'edit' => array(),
'modify' => array(),
'delete' => array()
);
protected $type = 'zone';
protected $config = null;
public function __construct($config = array(), $skip = false) {
parent::__construct($config, $skip);
$this->config = hikamarket::config();
}
public function getTree() {
$zone_key = hikaInput::get()->getVar('zone_key', null);
$displayFormat = hikaInput::get()->getVar('displayFormat',
'');
$search = hikaInput::get()->getVar('search', null);
$nameboxType = hikamarket::get('type.namebox');
$options = array(
'zone_key' => $zone_key,
'displayFormat' => $displayFormat
);
$ret = $nameboxType->getValues($search, 'zone', $options);
if(!empty($ret)) {
echo json_encode($ret);
exit;
}
echo '[]';
exit;
}
}
extensions/index.html000064400000000032151160562350010737
0ustar00<html><body></body></html>extensions/mod_hikamarket/index.html000064400000000032151160562350013716
0ustar00<html><body></body></html>extensions/mod_hikamarket/mod_hikamarket.php000064400000003202151160562350015413
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php')){
echo 'This module can not work without the HikaMarket
Component';
return;
}
$js = '';
$params->set('show_limit',0);
$params->set('from_module', $module->id);
hikamarket::initModule();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$moduleClass = hikamarket::get('shop.class.modules');
$moduleClass->loadParams($module);
$module_options = @$module->params['market'];
if(empty($module_options)) {
$key_name = 'params_' . $module->id;
$module_options = $config->get($key_name);
}
if(empty($module_options))
$module_options = $config->get('default_params');
if(empty($module_options))
return;
if(!in_array($module_options['content_type'],
array('vendor')))
$module_options['content_type'] = 'vendor';
$type = $module_options['content_type'] . 'market';
foreach($module_options as $key => $option) {
if($key != 'moduleclass_sfx')
$params->set($key,$option);
}
foreach(get_object_vars($module) as $k => $v) {
if(!is_object($v) && $params->get($k,null) == null)
$params->set($k,$v);
}
$html = trim(hikamarket::getLayout($type, 'listing', $params,
$js));
require(JModuleHelper::getLayoutPath('mod_hikamarket'));
extensions/mod_hikamarket/mod_hikamarket.xml000064400000002743151160562350015435
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5"
method="upgrade">
<name>HikaMarket Module</name>
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>contact@obsidev.com</authorEmail>
<authorUrl>http://www.hikashop.com</authorUrl>
<copyright>(C) 2011-2020 OBSIDEV. All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>Content display for HikaMarket</description>
<files>
<filename
module="mod_hikamarket">mod_hikamarket.php</filename>
<folder>tmpl</folder>
<filename>index.html</filename>
</files>
<params addpath="/components/com_hikamarket/params">
<param name="hikamarketmodule"
type="hikamarketmodule" default="module"
label="hikamarket" description="HikaMarket options"
/>
<param name="moduleclass_sfx" type="text"
default="" label="Module Class Suffix"
description="PARAMMODULECLASSSUFFIX" />
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikamarket/fields">
<fieldset name="basic">
<field name="moduleclass_sfx" type="text"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" />
</fieldset>
<fieldset name="HikaMarket" label="Vendor
listing">
<field id="hikamarketmodule" name="market"
multiple="true" type="hikamarketmodule"
label="HikaMarket options"/>
</fieldset>
</fields>
</config>
</extension>
extensions/mod_hikamarket/tmpl/default.php000064400000000752151160562350015043
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!empty($html)) {
?>
<div id="hikashop_module_<?php echo $module->id;?>"
class="hikamarket_module <?php echo
@$module->params['moduleclass_sfx']; ?>"><?php
echo $html;
?></div>
<?php
}
extensions/mod_hikamarket/tmpl/index.html000064400000000032151160562350014672
0ustar00<html><body></body></html>extensions/mod_market_locationsearch/index.html000064400000000032151160562350016137
0ustar00<html><body></body></html>extensions/mod_market_locationsearch/mod_market_locationsearch.php000064400000004260151160562350022062
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php'))
{
echo '<div>This module can not work without the HikaMarket
Component</div>';
return;
}
$params->set('from_module', $module->id);
$marketConfig = hikamarket::config();
$module_options =
$marketConfig->get('params_'.$module->id);
if(empty($module_options)) {
$shopConfig = hikamarket::config(false);
$module_options = $shopConfig->get('default_params');
}
foreach($module_options as $key => $option) {
if($key != 'moduleclass_sfx')
$params->set($key,$option);
}
foreach(get_object_vars($module) as $k => $v) {
if(!is_object($v))
$params->set($k,$v);
}
$menu_id = $params->get('menu_id');
$search_button = $params->get('search_button');
$app = JFactory::getApplication();
$menus = $app->getMenu();
$menu = null;
if(!empty($menu_id)) {
$menu = $menus->getItem($menu_id);
}
$app = JFactory::getApplication();
$location_search =
$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.search',
null);
$opt = hikaInput::get()->getString('option');
$ctrl = hikaInput::get()->getString('ctrl');
$task = hikaInput::get()->getString('task');
if($opt != 'com_hikashop' || ($ctrl != 'product'
&& $ctrl != 'category') || $task != 'listing'
|| $params->get('force_menu')) {
$url = '';
if(!empty($menu->query['option']))
$url =
JRoute::_('index.php?option='.$menu->query['option'].'&Itemid='.$menu_id);
if(empty($url))
$url = JRoute::_(@$menu->link.'&Itemid='.$menu_id);
} else {
$url = hikashop_currentUrl();
}
$block_empty_search = false;
$script = '';
if(@$params->get('block_empty_search')) {
$block_empty_search = true;
$script = ' onsubmit="return
window.localPage.locationsearchSubmit(this);"';
}
require(JModuleHelper::getLayoutPath('mod_market_locationsearch'));
extensions/mod_market_locationsearch/mod_market_locationsearch.xml000064400000005200151160562350022066
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5.0"
method="upgrade">
<name>HikaMarket Location Search module</name>
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>contact@obsidev.com</authorEmail>
<authorUrl>http://www.hikashop.com</authorUrl>
<copyright>(C) 2011-2020 OBSIDEV. All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>Display the location search field for HikaMarket
filtering</description>
<files>
<filename
module="mod_market_locationsearch">mod_market_locationsearch.php</filename>
<folder>tmpl</folder>
<filename>index.html</filename>
</files>
<params addpath="/components/com_hikamarket/params">
<param name="menu_id" type="menuitem"
disable="separator" default="" label="Targeted
menu" description="" state="1" />
<param name="force_menu" type="radio"
default="0" label="Force menu"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="block_empty_search" type="radio"
default="0" label="Block empty search"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="placeholder" type="text"
default="" label="Placeholder"
description="Placeholder text" />
<param name="search_button" type="text"
default="" label="Search button"
description="Search button text (hide if empty)" />
<param name="moduleclass_sfx" type="text"
default="" label="Module Class Suffix"
description="PARAMMODULECLASSSUFFIX" />
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikamarket/fields">
<fieldset name="basic">
<field name="menu_id" type="menuitem"
disable="separator" default="" label="Targeted
menu" description="" />
<field name="force_menu" type="radio"
default="0" label="Force menu"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="block_empty_search" type="radio"
default="0" label="Block empty search"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="placeholder" type="text"
default="" label="Placeholder"
description="Placeholder text" />
<field name="search_button" type="text"
default="" label="Search button"
description="Search button text (hide if empty)" />
<field name="moduleclass_sfx" type="text"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" />
</fieldset>
</fields>
</config>
</extension>
extensions/mod_market_locationsearch/tmpl/default.php000064400000002772151160562350017270
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="hikamarket_vendor_module"
id="hikamarket_vendor_locationsearch">
<form action="<?php echo $url; ?>"<?php echo
$script; ?> method="POST">
<div>
<input name="location_search" type="text"
value="<?php echo $location_search; ?>"
id="hikamarket_vendor_locationsearch_input"
placeholder="<?php echo @$params->get('placeholder');
?>" />
<?php if(!empty($search_button)) { ?>
<input type="submit" value="<?php echo
JText::_($search_button); ?>" />
<?php } ?>
</div>
<div id="hikamarket_vendor_locationsearch_error"
style="display:none;">
<span><?php echo
JText::_('PLEASE_INDICATE_YOUR_LOCATION'); ?></span>
</div>
</form>
<?php if($block_empty_search) { ?>
<script type="text/javascript">
if(!window.localPage) window.localPage = {};
window.localPage.locationsearchSubmit = function(form) {
var d = document, el =
d.getElementById('hikamarket_vendor_locationsearch_input');
if(!el)
return true;
var v = el.value.replace(/^\s*|\s*$/g, '');
if(v != '')
return true;
el.className = 'hikamarket_location_search_error';
var err_el =
d.getElementById('hikamarket_vendor_locationsearch_error');
if(err_el)
err_el.style.display = '';
return false;
};
</script>
<?php } ?>
</div>
extensions/mod_market_locationsearch/tmpl/index.html000064400000000032151160562360017114
0ustar00<html><body></body></html>extensions/plg_hikamarket_duplicateproducts/duplicateproducts.php000064400000007200151160562360022016
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikamarketDuplicateproducts extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
public function onAfterVendorCreate(&$vendor) {
$pluginsClass = hikamarket::get('shop.class.plugins');
$plugin = $pluginsClass->getByName('hikamarket',
'duplicateproducts');
if(empty($plugin->params['category_id']))
return;
$category_id = (int)$plugin->params['category_id'];
$db = JFactory::getDBO();
$config = hikamarket::config();
$productClass = hikamarket::get('shop.class.product');
$importHelper = hikamarket::get('shop.helper.import');
$vendorClass = hikamarket::get('class.vendor');
$query = 'SELECT c.* FROM
'.hikamarket::table('shop.category').' AS c '.
' INNER JOIN
'.hikamarket::table('shop.category').' AS d ON
c.category_left >= d.category_left AND c.category_right <=
d.category_right '.
' where d.category_id = ' . (int)$category_id;
$db->setQuery($query);
$categories = $db->loadObjectList('category_id');
if(empty($categories))
return;
$categories_id = array_keys($categories);
$category_translated = array();
$vendor_category_id = $vendorClass->getRootCategory($vendor, 1);
if(empty($vendor_category_id)) {
$vendor_category_id = 2;
}
if(version_compare(PHP_VERSION, '5.2.0', '>')) {
$category_translated = array_fill_keys($categories_id,
$vendor_category_id);
} else {
$tmp = array_fill(0, count($categories_id), $vendor_category_id);
$category_translated = array_combine($categories_id, $tmp);
unset($tmp);
}
unset($categories);
$query = 'SELECT pc.product_id FROM ' .
hikamarket::table('shop.product_category') . ' AS pc
'.
' INNER JOIN ' . hikamarket::table('shop.product') .
' AS p ON pc.product_id = p.product_id '.
' WHERE p.product_vendor_id = 0 AND pc.category_id IN ('.
implode(',', $categories_id).')';
$db->setQuery($query);
$product_ids = $db->loadColumn();
foreach($product_ids as $product_id) {
$importHelper->addTemplate($product_id);
if(empty($importHelper->template))
continue;
$newProduct = new stdClass();
$newProduct->product_code =
$importHelper->template->product_code.'_vendor'.(int)$vendor->vendor_id;
$importHelper->_checkData($newProduct);
$newProduct->categories = array();
if(!empty($importHelper->template->categories)) {
foreach($importHelper->template->categories as $cat_id) {
if(isset($category_translated[$cat_id]))
$newProduct->categories[] = $category_translated[$cat_id];
else
$newProduct->categories[] = $cat_id;
}
}
if(empty($newProduct->categories))
$newProduct->categories[] = $vendor_category_id;
$newProduct->product_vendor_id = (int)$vendor->vendor_id;
$products = array($newProduct);
if(!empty($importHelper->template->variants)) {
foreach($importHelper->template->variants as $variant) {
$copy = clone($variant);
$copy->product_parent_id = $newProduct->product_code;
$copy->product_code =
$copy->product_code.'_vendor'.(int)$vendor->vendor_id;
$copy->product_vendor_id = (int)$vendor->vendor_id;
unset($copy->product_id);
$products[] = $copy;
}
}
$importHelper->_insertProducts($products);
unset($newProduct);
unset($products);
unset($importHelper->template);
}
}
}
extensions/plg_hikamarket_duplicateproducts/duplicateproducts.xml000064400000002511151160562360022027
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikamarket">
<name>HikaMarket - Duplicate products</name>
<hikainstall ordering="1" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin duplicated products from a category each
time a vendor is created</description>
<files>
<filename
plugin="duplicateproducts">duplicateproducts.php</filename>
</files>
<params addpath="/components/com_hikamarket/params">
<param name="category_id" type="text"
size="50" default="" label="Category id"
description="The category id which contains the products to
duplicate" />
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikamarket/fields">
<fieldset name="basic">
<field
name="category_id"
type="text"
label="Category id"
size="50"
default=""
description="The category id which contains the products to
duplicate" />
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikamarket_duplicateproducts/index.html000064400000000032151160562360017540
0ustar00<html><body></body></html>extensions/plg_hikamarket_mangopay/index.html000064400000000032151160562360015615
0ustar00<html><body></body></html>extensions/plg_hikamarket_mangopay/language/en-GB/en-GB.plg_hikamarket_mangopay.ini000064400000004535151160562360024554
0ustar00; MangoPay
HIKAM_MANGOPAY="MangoPay"
HIKAM_MANGOPAY_TITLE="MangoPay"
HIKAM_MANGO_WALLET="Wallet"
HIKAM_MANGO_BANK="Bank account"
HIKAM_MANGO_PROFILE="Profile"
HIKAM_MANGO_DOCUMENTS="Documents"
MANGOPAY_BALANCE="Balance"
MANGOPAY_PAYOUT="Payout"
MANGOPAY_DO_PAYOUT="make a payout"
MANGOPAY_NO_PAYOUT="-"
MANGOPAY_ADD_BANKACCOUNT="Add a bank account"
MANGOPAY_NO_BANKACOUNT="You don't have registered a bank
account"
MANGOPAY_EMAIL="Email"
MANGOPAY_HEADQUARTERSADDRESS="Headquarter Address"
MANGOPAY_LEGALPERSONTYPE="Vendor type"
MANGOPAY_PERSONTYPE_BUSINESS="Business"
MANGOPAY_PERSONTYPE_ORGANIZATION="Organization"
MANGOPAY_PERSONTYPE_SOLETRADER="Sole Trader"
MANGOPAY_STATUTE="Statute"
MANGOPAY_PROOF_REGISTRATION="Proof of registration"
MANGOPAY_SHAREHOLDER_DECLARATION="Shareholder declaration"
MANGOPAY_ADD_DOCUMENT="Add document"
MANGOPAY_LEGALREPRESENTATIVE="Legal Representative"
MANGOPAY_LEGALREPRESENTATIVEFIRSTNAME="Firstname"
MANGOPAY_LEGALREPRESENTATIVELASTNAME="Lastname"
MANGOPAY_LEGALREPRESENTATIVEADDRESS="Address"
MANGOPAY_LEGALREPRESENTATIVEEMAIL="Email"
MANGOPAY_LEGALREPRESENTATIVEBIRTHDAY="Birthday"
MANGOPAY_LEGALREPRESENTATIVENATIONALITY="Nationality"
MANGOPAY_LEGALREPRESENTATIVECOUNTRYOFRESIDENCE="Country of
residence"
MANGOPAY_SAVE_BANKACCOUNT="Save bank account"
MANGOPAY_BANK_TYPE="Bank type"
MANGOPAY_BANK_TYPE_IBAN="IBAN"
MANGOPAY_BANK_TYPE_GB="GB"
MANGOPAY_BANK_TYPE_US="US"
MANGOPAY_BANK_TYPE_CA="CA"
MANGOPAY_BANK_TYPE_OTHER="Other"
MANGOPAY_BANK_OWNER_NAME="Owner name"
MANGOPAY_BANK_OWNER_ADDRESS="Owner address"
MANGOPAY_BANK_IBAN="IBAN"
MANGOPAY_BANK_BIC="BIC"
MANGOPAY_BANK_ACCOUNTNUMBER="Account number"
MANGOPAY_BANK_SORTCODE="Sort code"
MANGOPAY_BANK_ABA="ABA"
MANGOPAY_BANK_BANKNAME="Bank name"
MANGOPAY_BANK_INSTITUTIONNUMBER="Institution number"
MANGOPAY_BANK_BRANCHCODE="Branch code"
MANGOPAY_BANK_COUNTRY="Country"
MANGOPAY_DOCUMENT_TYPE="Document type"
MANGOPAY_DOCUMENT_FILE="Document file"
MANGOPAY_DOC_IDENTITY_PROOF="Proof of identity"
MANGOPAY_DOC_REGISTRATION_PROOF="Proof of registration"
MANGOPAY_DOC_ARTICLES_OF_ASSOCIATION="Articles of association"
MANGOPAY_DOC_SHAREHOLDER_DECLARATION="Shareholder declaration"
MANGOPAY_CURRENT_BALANCE="Wallet balance"
MANGOPAY_AUTHORIZED_PAYOUT="Authorized value"
MANGOPAY_PAYOUT_VALUE="Transfer"
MANGOPAY_PAYOUT_BANK="Bank
account"extensions/plg_hikamarket_mangopay/language/en-GB/index.html000064400000000032151160562360020270
0ustar00<html><body></body></html>extensions/plg_hikamarket_mangopay/language/en-GB/nl-BE.plg_hikamarket_mangopay.ini000064400000004443151160562360024557
0ustar00; MangoPay
HIKAM_MANGOPAY="MangoPay"
HIKAM_MANGOPAY_TITLE="MangoPay"
HIKAM_MANGO_WALLET="Portemonnee"
HIKAM_MANGO_BANK="Bankrekening"
HIKAM_MANGO_PROFILE="Profiel"
HIKAM_MANGO_DOCUMENTS="Documenten"
MANGOPAY_BALANCE="Saldo"
MANGOPAY_PAYOUT="Uitbetaling"
MANGOPAY_DO_PAYOUT="maak een uitbetaling"
MANGOPAY_NO_PAYOUT="-"
MANGOPAY_ADD_BANKACCOUNT="Voeg een bankrekening toe"
MANGOPAY_NO_BANKACOUNT="U heeft geen bankrekening geregistreerd"
MANGOPAY_EMAIL="E-mail"
MANGOPAY_HEADQUARTERSADDRESS="Hoofdkwartier Adres"
MANGOPAY_LEGALPERSONTYPE="Verkoper type"
MANGOPAY_PERSONTYPE_BUSINESS="Bedrijf"
MANGOPAY_PERSONTYPE_ORGANIZATION="Organisatie"
MANGOPAY_STATUTE="Statuut"
MANGOPAY_PROOF_REGISTRATION="Bewijs van inschrijving"
MANGOPAY_SHAREHOLDER_DECLARATION="Aandeelhouder verklaring"
MANGOPAY_ADD_DOCUMENT="Document toevoegen"
MANGOPAY_LEGALREPRESENTATIVE="Wettelijke vertegenwoordiger"
MANGOPAY_LEGALREPRESENTATIVEFIRSTNAME="Voornaam"
MANGOPAY_LEGALREPRESENTATIVELASTNAME="Achternaam"
MANGOPAY_LEGALREPRESENTATIVEADDRESS="Adres"
MANGOPAY_LEGALREPRESENTATIVEEMAIL="E-mail"
MANGOPAY_LEGALREPRESENTATIVEBIRTHDAY="Verjaardag"
MANGOPAY_LEGALREPRESENTATIVENATIONALITY="Nationaliteit"
MANGOPAY_LEGALREPRESENTATIVECOUNTRYOFRESIDENCE="Land van
Verblijf"
MANGOPAY_SAVE_BANKACCOUNT="Opslaan bankrekening"
MANGOPAY_BANK_TYPE="Bank soort"
MANGOPAY_BANK_TYPE_IBAN="IBAN"
MANGOPAY_BANK_TYPE_GB="GB"
MANGOPAY_BANK_TYPE_US="ONS"
MANGOPAY_BANK_TYPE_CA="CA"
MANGOPAY_BANK_TYPE_OTHER="Ander"
MANGOPAY_BANK_OWNER_NAME="Naam van de eigenaar"
MANGOPAY_BANK_OWNER_ADDRESS="Eigenaar adres"
MANGOPAY_BANK_IBAN="IBAN"
MANGOPAY_BANK_BIC="BIC"
MANGOPAY_BANK_ACCOUNTNUMBER="Rekeningnummer"
MANGOPAY_BANK_SORTCODE="Sorteercode"
MANGOPAY_BANK_ABA="ABA"
MANGOPAY_BANK_BANKNAME="Banknaam"
MANGOPAY_BANK_INSTITUTIONNUMBER="Instelling aantal"
MANGOPAY_BANK_BRANCHCODE="Filiaalcode"
MANGOPAY_BANK_COUNTRY="Land"
MANGOPAY_DOCUMENT_TYPE="Documenttype"
MANGOPAY_DOCUMENT_FILE="Document bestand"
MANGOPAY_DOC_IDENTITY_PROOF="Identiteitsbewijs"
MANGOPAY_DOC_REGISTRATION_PROOF="Bewijs van inschrijving"
MANGOPAY_DOC_ARTICLES_OF_ASSOCIATION="Statuten"
MANGOPAY_DOC_SHAREHOLDER_DECLARATION="Aandeelhouder verklaring"
MANGOPAY_CURRENT_BALANCE="Portemonnee balans"
MANGOPAY_AUTHORIZED_PAYOUT="Geautoriseerde waarde"
MANGOPAY_PAYOUT_VALUE="Overdracht"
MANGOPAY_PAYOUT_BANK="Bankrekening"
extensions/plg_hikamarket_mangopay/language/index.html000064400000000032151160562360017400
0ustar00<html><body></body></html>extensions/plg_hikamarket_mangopay/mangopay.php000064400000003536151160562360016160
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikamarketMangopay extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
public function onHikamarketPluginController($ctrl) {
if($ctrl != 'mangopay')
return;
$app = JFactory::getApplication();
$this->loadLanguage('plg_hikamarket_mangopay',
JPATH_ADMINISTRATOR);
return array(
'type' => 'hikamarket',
'name' => 'mangopay',
'prefix' => ($app->isAdmin() ? 'backend' :
'ctrl')
);
}
public function onMarketAclPluginListing(&$categories) {
if(empty($categories['root']['plugins']))
$categories['root']['plugins'] = array();
$categories['root']['plugins'][] =
'mangopay';
}
public function onVendorPanelDisplay(&$buttons, &$statistics) {
global $Itemid;
$url_itemid = '';
if(!empty($Itemid))
$url_itemid = '&Itemid=' . $Itemid;
$this->loadLanguage('plg_hikamarket_mangopay',
JPATH_ADMINISTRATOR);
$doc = JFactory::getDocument();
jimport('joomla.filesystem.file');
if(JFile::exists(HIKASHOP_MEDIA . 'css' . DS .
'mangopay.css'))
$doc->addStyleSheet(HIKASHOP_CSS .
'mangopay.css?v='.HIKAMARKET_RESSOURCE_VERSION);
else
$doc->addStyleSheet(JURI::base(true).'/plugins/hikamarket/mangopay/media/mangopay.css?v='.HIKAMARKET_RESSOURCE_VERSION);
$buttons['mangopay'] = array(
'url' =>
hikamarket::completeLink('mangopay'.$url_itemid),
'level' => 1,
'icon' => 'iconM-48-mangopay',
'name' => JText::_('HIKAM_MANGOPAY'),
'description' => '',
'display' => hikamarket::acl('plugins/mangopay')
);
}
}
extensions/plg_hikamarket_mangopay/mangopay.xml000064400000002354151160562360016166
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikamarket">
<name>HikaMarket - MangoPay integration</name>
<hikainstall ordering="1" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin allow the front-end interface for
MangoPay</description>
<files>
<filename
plugin="mangopay">mangopay.php</filename>
<filename>mangopay_ctrl.php</filename>
<filename>mangopay_class.php</filename>
<filename>mangopay_backend.php</filename>
<folder>views</folder>
<folder>media</folder>
</files>
<languages>
<language
tag="en-GB">language/en-GB/en-GB.plg_hikamarket_mangopay.ini</language>
</languages>
<params addpath="/components/com_hikamarket/params">
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikamarket/fields">
<fieldset name="basic">
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikamarket_mangopay/mangopay_backend.php000064400000001236151160562360017622
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
include_once dirname(__FILE__) . DS . 'mangopay_class.php';
class mangopayMarketController extends hikamarketController {
protected $rights = array(
'display' => array(),
'add' => array(),
'edit' => array(),
'modify' => array(),
'delete' => array()
);
protected $pluginCtrl = array('hikamarket',
'mangopay');
protected $type = 'plg_mangopay';
}
extensions/plg_hikamarket_mangopay/mangopay_class.php000064400000027272151160562360017350
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketPlg_mangopayClass extends JObject {
protected static $currentMangoVendor = null;
protected static $mangopayPlugin = null;
protected static $mangopayAPI = null;
public function getMangoPlugin() {
if(empty(self::$mangopayPlugin))
self::$mangopayPlugin = hikamarket::import('hikashoppayment',
'mangopay');
return self::$mangopayPlugin;
}
public function getMangoVendor() {
if(!empty(self::$currentMangoVendor))
return self::$currentMangoVendor;
$mangopayPlugin = $this->getMangoPlugin();
$vendor = hikamarket::loadVendor(true, false);
self::$currentMangoVendor = $mangopayPlugin->getVendor($vendor);
return self::$currentMangoVendor;
}
public function getMangoAPI() {
if(!empty(self::$mangopayAPI))
return self::$mangopayAPI;
$mangopayPlugin = $this->getMangoPlugin();
self::$mangopayAPI = $mangopayPlugin->getAPI();
return self::$mangopayAPI;
}
public function debug($e, $r = false) {
$mangopayPlugin = $this->getMangoPlugin();
$mangopayPlugin->mangoDebug($e, $r);
}
public function mangoDebug($e, $r = false) { return $this->debug($e,
$r); }
public function saveForm() {
$formData = hikaInput::get()->get('mango', array(),
'array');
if(empty($formData))
return false;
$api = $this->getMangoAPI();
$mango_vendor = $this->getMangoVendor();
if(empty($mango_vendor) || empty($mango_vendor->Id))
return false;
$user = new MangoPay\UserLegal();
$user->Id = $mango_vendor->Id;
if(!empty($formData['name']))
$user->Name = substr($formData['name'], 0, 254);
if(!empty($formData['legalpersontype']) &&
in_array($formData['legalpersontype'],
array('BUSINESS', 'ORGANIZATION',
'SOLETRADER')))
$user->LegalPersonType = $formData['legalpersontype'];
if(!empty($formData['email']))
$user->Email = substr($formData['email'], 0, 254);
if(!empty($formData['headquartersaddress']))
$user->HeadquartersAddress =
substr($formData['headquartersaddress'], 0, 254);
if(!empty($formData['legalrepresentativefirstname']))
$user->LegalRepresentativeFirstName =
substr($formData['legalrepresentativefirstname'], 0, 99);
if(!empty($formData['legalrepresentativelastname']))
$user->LegalRepresentativeLastName =
substr($formData['legalrepresentativelastname'], 0, 99);
if(!empty($formData['legalrepresentativeaddress']))
$user->LegalRepresentativeAddress =
substr($formData['legalrepresentativeaddress'], 0, 254);
if(!empty($formData['legalrepresentativeemail']))
$user->LegalRepresentativeEmail =
substr($formData['legalrepresentativeemail'], 0, 254);
if(!empty($formData['legalrepresentativebirthday']))
$user->LegalRepresentativeBirthday =
hikamarket::getTime($formData['legalrepresentativebirthday']);
if(!empty($formData['legalrepresentativenationality']))
$user->LegalRepresentativeNationality =
strtoupper(substr(trim($formData['legalrepresentativenationality']),
0, 2));
if(!empty($formData['legalrepresentativecountryofresidence']))
$user->LegalRepresentativeCountryOfResidence =
strtoupper(substr(trim($formData['legalrepresentativecountryofresidence']),
0, 2));
$result = false;
try {
$result = $api->Users->Update($user);
}
catch (MangoPay\ResponseException $e) { $this->debug($e, true); }
catch (MangoPay\Exception $e) { $this->debug($e, false); }
catch (Exception $e) {}
if(empty($result) || empty($result->Id))
return false;
return $result->Id;
}
public function addBank() {
$formData = hikaInput::get()->get('mangobank', array(),
'array');
if(empty($formData))
return false;
if(empty($formData['type']) ||
!in_array($formData['type'],
array('IBAN','GB','US','CA','OTHER')))
return false;
$api = $this->getMangoAPI();
$mango_vendor = $this->getMangoVendor();
$bank = new MangoPay\BankAccount();
$bank->Type = $formData['type'];
$bank->OwnerName = $formData['ownername'];
$bank->OwnerAddress = $formData['owneraddress'];
switch($bank->Type) {
case 'IBAN':
$bank->Details = new MangoPay\BankAccountDetailsIBAN();
$bank->Details->IBAN =
$formData['iban']['iban'];
$bank->Details->BIC =
$formData['iban']['bic'];
break;
case 'GB':
$bank->Details = new MangoPay\BankAccountDetailsGB();
$bank->Details->AccountNumber =
$formData['gb']['accountnumber'];
$bank->Details->SortCode =
$formData['gb']['sortcode'];
break;
case 'US':
$bank->Details = new MangoPay\BankAccountDetailsUS();
$bank->Details->AccountNumber =
$formData['us']['accountnumber'];
$bank->Details->ABA =
$formData['us']['aba'];
break;
case 'CA':
$bank->Details = new MangoPay\BankAccountDetailsCA();
$bank->Details->BankName =
$formData['ca']['bankname'];
$bank->Details->InstitutionNumber =
$formData['ca']['institutionnumber'];
$bank->Details->BranchCode =
$formData['ca']['branchcode'];
$bank->Details->AccountNumber =
$formData['ca']['accountnumber'];
break;
case 'OTHER':
$bank->Details = new MangoPay\BankAccountDetailsOTHER();
$bank->Details->Country =
$formData['other']['country'];
$bank->Details->BIC =
$formData['other']['bic'];
$bank->Details->AccountNumber =
$formData['other']['accountnumber'];
break;
}
$result = false;
try {
$result = $api->Users->CreateBankAccount($mango_vendor->Id,
$bank);
}
catch (MangoPay\ResponseException $e) { $this->debug($e, true); }
catch (MangoPay\Exception $e) { $this->debug($e, false); }
catch (Exception $e) {}
if(empty($result) || empty($result->Id))
return false;
return $result->Id;
}
public function addDocument() {
$formData = hikaInput::get()->get('mangodoc', array(),
'array');
if(empty($formData))
return false;
$api = $this->getMangoAPI();
$mango_vendor = $this->getMangoVendor();
$document_type = strtoupper(trim($formData['type']));
if(!in_array($document_type, array('IDENTITY_PROOF',
'REGISTRATION_PROOF', 'ARTICLES_OF_ASSOCIATION',
'SHAREHOLDER_DECLARATION', 'IDENTITY_PROOF',
'ADDRESS_PROOF')))
return false;
if(empty($_FILES) || empty($_FILES['mangodoc_page']))
return false;
$file = $_FILES['mangodoc_page'];
$kyc_document = new MangoPay\KycDocument();
$kyc_document->Type = $document_type;
$createdDocument = false;
try {
$createdDocument =
$api->Users->CreateKycDocument($mango_vendor->Id, $kyc_document);
}
catch (MangoPay\ResponseException $e) { $this->debug($e, true); }
catch (MangoPay\Exception $e) { $this->debug($e, false); }
catch (Exception $e) {}
if(empty($createdDocument) || empty($createdDocument->Id))
return false;
$createdPage = false;
try {
$api->Users->CreateKycPageFromFile($mango_vendor->Id,
$createdDocument->Id, $file);
$createdPage = true;
}
catch (MangoPay\ResponseException $e) { $this->debug($e, true); }
catch (MangoPay\Exception $e) { $this->debug($e, false); }
catch (Exception $e) {}
if(empty($createdPage))
return false;
$kyc_document = new MangoPay\KycDocument();
$kyc_document->Id = $createdDocument->Id;
$kyc_document->Status = 'VALIDATION_ASKED';
$updatedDocument = false;
try {
$updatedDocument =
$api->Users->UpdateKycDocument($mango_vendor->Id, $kyc_document);
}
catch (MangoPay\ResponseException $e) { $this->debug($e, true); }
catch (MangoPay\Exception $e) { $this->debug($e, false); }
catch (Exception $e) {}
if(empty($updatedDocument))
return false;
return true;
}
public function doPayout() {
$formData = hikaInput::get()->get('payout', array(),
'array');
if(empty($formData))
return false;
$walletId = (int)trim(@$formaData['wallet']);
if(empty($walletId))
return false;
$value = (float)hikashop_toFloat(@$formData['value']);
if($value <= 0.0)
return false;
$api = $this->getMangoAPI();
$vendor = hikamarket::loadVendor(true, false);
$mango_vendor = $this->getMangoVendor();
$mangopayPlugin = $this->getMangoPlugin();
$mango_wallets = $mangopayPlugin->getVendorWallets($vendor);
$mango_wallet = null;
foreach($mango_wallets as $mango_wallet) {
if((int)$mango_wallet->Id == $walletId) {
$mango_wallet = $mango_wallet;
break;
}
}
$duration = 31;
if(isset($mangopayPlugin->params))
$duration =
(int)$mangopayPlugin->params->get('payout_waiting_duration',
31);
if($duration <= 0)
$duration = 31;
$transactions = $this->getTransactions($mango_wallet->Id,
$duration);
$transactions_total = 0.0;
foreach($transactions as $transaction) {
if($transaction->Nature == 'REGULAR')
$transactions_total += ($transaction->CreditedFunds->Amount /
100);
if($transaction->Nature == 'REFUND')
$transactions_total -= ($transaction->CreditedFunds->Amount /
100);
}
if($transactions_total < 0)
$transactions_total = 0.0;
$maximum_authorized = ($mango_wallet->Balance->Amount / 100) -
$transactions_total;
if($maximum_authorized < 0)
$maximum_authorized = 0.0;
if($value > $maximum_authorized)
return false;
$bank_account = (int)@$formData['bank'];
if(empty($bank_account))
return false;
try {
$mango_bank_account =
$api->Users->GetBankAccount($mango_vendor->Id, $bank_account);
}
catch (MangoPay\ResponseException $e) { $this->debug($e, true); }
catch (MangoPay\Exception $e) { $this->debug($e, false); }
catch (Exception $e) {}
if(empty($mango_bank_account))
return false;
$payout = new MangoPay\PayOut();
$payout->AuthorId = $mango_vendor->Id;
$payout->DebitedWalletId = $mango_wallet->Id;
$payout->PaymentType = 'BANK_WIRE';
$payout->DebitedFunds = new MangoPay\Money();
$payout->DebitedFunds->Currency = $mango_wallet->Currency;
$payout->DebitedFunds->Amount = $value * 100;
$payout->Fees = new MangoPay\Money();
$payout->Fees->Currency = $mango_wallet->Currency;
$payout->Fees->Amount = 0;
$payout->MeanOfPaymentDetails = new
MangoPay\PayOutPaymentDetailsBankWire();
$payout->MeanOfPaymentDetails->BankAccountId =
$mango_bank_account->Id;
$payoutResult = null;
try {
$payoutResult = $api->PayOuts->Create($payout);
}
catch (MangoPay\ResponseException $e) { $this->debug($e, true); }
catch (MangoPay\Exception $e) { $this->debug($e, false); }
catch (Exception $e) {}
if(empty($payoutResult) || empty($payoutResult->Id))
return false;
if(isset($payoutResult->Status) && $payoutResult->Status ==
'FAILED') {
switch(@$payoutResult->ResultCode) {
case '002998':
$this->errors[] = 'The bank account needs to be KYC verified.
Please contact the side owner for more details.';
break;
case '002999':
$this->errors[] = 'The account needs to be KYC verified.
Please contact the side owner for more details.';
break;
}
return false;
}
return $payoutResult;
}
public function getTransactions($wallet_id, $duration = 31) {
$api = $this->getMangoAPI();
$transactions = false;
try {
$pagination = null;
$filter = new MangoPay\FilterTransactions();
if($duration > 1)
$filter->AfterDate = time() - ($duration * 86400);
$filter->Status = 'SUCCEEDED';
$filter->Type = 'TRANSFER';
$transactions = $api->Wallets->GetTransactions($wallet_id,
$pagination, $filter);
}
catch (MangoPay\ResponseException $e) { $this->debug($e, true); }
catch (MangoPay\Exception $e) { $this->debug($e, false); }
catch (Exception $e) {}
return $transactions;
}
}
extensions/plg_hikamarket_mangopay/mangopay_ctrl.php000064400000012610151160562360017175
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
include_once dirname(__FILE__) . DS . 'mangopay_class.php';
class mangopayMarketController extends hikamarketController {
protected $rights = array(
'display' => array('show'),
'add' =>
array('bank','document','payout'),
'edit' =>
array('save','addbank','adddocument','dopayout'),
'modify' => array(),
'delete' => array()
);
protected $pluginCtrl = array('hikamarket',
'mangopay');
protected $type = 'plg_mangopay';
public function __construct($config = array(), $skip = false) {
parent::__construct($config, $skip);
if(!$skip)
$this->registerDefaultTask('show');
$this->config = hikamarket::config();
}
public function show() {
if(!hikamarket::loginVendor())
return false;
if(!$this->config->get('frontend_edition',0))
return false;
if(!hikamarket::acl('plugins/mangopay'))
return hikamarket::deny('vendor',
JText::sprintf('HIKAM_ACTION_DENY', 'MangoPay'));
hikaInput::get()->set('layout', 'show');
return parent::display();
}
public function bank() {
if(!hikamarket::loginVendor())
return false;
if(!$this->config->get('frontend_edition',0))
return false;
if(!hikamarket::acl('plugins/mangopay'))
return hikamarket::deny('vendor',
JText::sprintf('HIKAM_ACTION_DENY', 'MangoPay'));
hikaInput::get()->set('layout', 'bank');
return parent::display();
}
public function document() {
if(!hikamarket::loginVendor())
return false;
if(!$this->config->get('frontend_edition',0))
return false;
if(!hikamarket::acl('plugins/mangopay'))
return hikamarket::deny('vendor',
JText::sprintf('HIKAM_ACTION_DENY', 'MangoPay'));
hikaInput::get()->set('layout', 'document');
return parent::display();
}
public function payout() {
if(!hikamarket::loginVendor())
return false;
if(!$this->config->get('frontend_edition',0))
return false;
if(!hikamarket::acl('plugins/mangopay'))
return hikamarket::deny('vendor',
JText::sprintf('HIKAM_ACTION_DENY', 'MangoPay'));
hikaInput::get()->set('layout', 'payout');
return parent::display();
}
public function addbank() {
if(!hikamarket::loginVendor())
return false;
if( !$this->config->get('frontend_edition', 0) )
return false;
if(!hikamarket::acl('plugins/mangopay'))
return hikamarket::deny('vendor',
JText::sprintf('HIKAM_ACTION_DENY', 'MangoPay'));
$app = JFactory::getApplication();
JSession::checkToken() || die('Invalid Token');
$mangoClass = hikamarket::get('class.plg_mangopay');
$status = $mangoClass->addBank();
if($status) {
$app->enqueueMessage(JText::_('HIKAM_SUCC_SAVED'),
'message');
hikaInput::get()->set('cid', $status);
hikaInput::get()->set('fail', null);
return $this->show();
}
$app->enqueueMessage(JText::_('ERROR_SAVING'),
'error');
if(!empty($mangoClass->errors)) {
foreach($mangoClass->errors as $err) {
$app->enqueueMessage($err, 'error');
}
}
return $this->bank();
}
public function adddocument() {
if(!hikamarket::loginVendor())
return false;
if( !$this->config->get('frontend_edition', 0) )
return false;
if(!hikamarket::acl('plugins/mangopay'))
return hikamarket::deny('vendor',
JText::sprintf('HIKAM_ACTION_DENY', 'MangoPay'));
$app = JFactory::getApplication();
JSession::checkToken() || die('Invalid Token');
$mangoClass = hikamarket::get('class.plg_mangopay');
$status = $mangoClass->adddocument();
if($status) {
$app->enqueueMessage(JText::_('HIKAM_SUCC_SAVED'),
'message');
hikaInput::get()->set('cid', $status);
hikaInput::get()->set('fail', null);
return $this->show();
}
$app->enqueueMessage(JText::_('ERROR_SAVING'),
'error');
if(!empty($mangoClass->errors)) {
foreach($mangoClass->errors as $err) {
$app->enqueueMessage($err, 'error');
}
}
return $this->document();
}
public function dopayout() {
if(!hikamarket::loginVendor())
return false;
if( !$this->config->get('frontend_edition', 0) )
return false;
if(!hikamarket::acl('plugins/mangopay'))
return hikamarket::deny('vendor',
JText::sprintf('HIKAM_ACTION_DENY', 'MangoPay'));
$app = JFactory::getApplication();
JSession::checkToken() || die('Invalid Token');
$mangoClass = hikamarket::get('class.plg_mangopay');
$status = $mangoClass->doPayout();
if($status) {
$app->enqueueMessage(JText::_('MANGO_PAYOUT_DONE'),
'message');
hikaInput::get()->set('cid', $status);
hikaInput::get()->set('fail', null);
return $this->show();
}
$app->enqueueMessage(JText::_('MANGO_ERROR_PAYOU'),
'error');
if(!empty($mangoClass->errors)) {
foreach($mangoClass->errors as $err) {
$app->enqueueMessage($err, 'error');
}
}
return $this->payout();
}
public function save() {
$this->store();
return $this->show();
}
public function store() {
if(!hikamarket::loginVendor())
return false;
if( !$this->config->get('frontend_edition',0) )
return false;
if(!hikamarket::acl('plugins/mangopay'))
return hikamarket::deny('vendor',
JText::sprintf('HIKAM_ACTION_DENY', 'MangoPay'));
return $this->adminStore(true);
}
}
extensions/plg_hikamarket_mangopay/media/index.html000064400000000032151160562360016674
0ustar00<html><body></body></html>extensions/plg_hikamarket_mangopay/media/mangopay.css000064400000000116151160562360017227
0ustar00/* MangoPay CSS */
.iconM-48-mangopay
{background-image:url(./mangopay.png);}extensions/plg_hikamarket_mangopay/media/mangopay.png000064400000007111151160562360017225
0ustar00�PNG
IHDR00W�� pHYs��~�
�IDATh���yt�E�ǿ��~oM^��
�-�:4:c�veuilT��`�hT�eZ��vEqA�-
�p����n�B��dO^�K�U՝?~/!���s�sRU��U�nU������3C���N���a�Tef�5���b�@w�5B��,�%�x�9������q��l�w<������9kl�+(�G���KS��:�b��BD�t�_�W�_���L
XC'}�j[�Ÿ�{S�p*�w��c���_5����|!
����U��ն���-���W�)��:��5�j����ixP��sr��٥����n��.G�[�lk�Q|�]/��+=xs0<�i]E�m���e��VC'$��E]c�$�V��W�~��*�:߉Y�(���O~�z�� ?pl���%����v,�g�."�G�!�+(����u��5@��Z:|�vd<xp�
���
�+zz����nc�
2��I��ʘsƽ��n)=��IkmS
���~2<q��S_?��Sc`�U���]q��d�JY�;���ʸ:��q��[?W�����/�;��9���#�D�4�'+m��y˹��H�0�3hĶ��E��MƼH�CD����+cΰYc�)S��N�]M*E죏&��v��t$�HD^@3�[mS�\ƍ�&C���hN7�;��0ty�8��Xz�����awLPC?��
"��BE�Ɇm�~S�۩+8��
겈��66���i�
Pa
6�A�RH
k�3�쭡���nS�=�~�� j��L%�Aø�RѨ۰u�ҩ�y"����x�֦���7� 2�;H�Bj��!�~���H&b0Zq�<��~�����Z��F��`����>���i/��v)��[eS;\��?����|'&��!�m ]=<`v���~�v�_`�I
�' ۲�Ʋ�i/��$Й�6�
����J'?�l�u��){�@F�J�;xO�f�[��8�mkc��Q�m�pzIa�,6^MՑ�C"��Օ������'?���7�*�#֍���ج�����_9k�M�s����X��R�a�eZ_�&��1�65}r¢E�k?���o�LY��pGөE�
I�jS�g����?oT�D� �*CN�ؤ7
5j��Ɣ~�;�ʽay
�)�:��ṛ�܇�2l�D{E3|c�',ZtId�j'k6m���iӞfk-���`�
�6նd����_O�2Z�&}D�}�FC�>�iJ�h�`<x]�e���ٚ�P���>���d��b��6տ��)e��H
k�ml���'��$��mC��Ɛ����ߞ��idk
j-Bx�B�S��E��Jf��]�@�����
�o4T�S�&?H
�NJ�}�+�z�F=��O��7w�*��d
��צغWzCHZ{�E��~�H|v�
�"��TPʂ������OUo�0�d��%`�Z"!BjSkJ�\�0Ѵc��9�Y+j�YiG3�J��|�.&�+����6e;NH���]}2�>8�z"h��5���9ců�&�0��M$>��K"��T��J���]W:=z����o�O_��-�����Jo|,��;����Z��tAҀ��+��E�A�{H8���`|���B��@�4�m{̞�����y�7կ_�%|~a��v�z|�Ȭ�c�YkIJ�-��]W9yy�jݺ�%3f,`A���+_H4~9G����<�1$�'��:8�lUuI|嬿q���y�"#����P�W��tw�痍�;��|����VN~��Z�~�7S�>�Z����h��CR'i�0�8!ʗv�Q�1�൛B�SF��٦;"�D���Ks��������[�j�T�}�"
fi�
_�n�/�^}
�^�Q��y$�a��O��͕�nE����Ԁg�)$�H(��N��P�ߞԦV�E��IJ�D����m�����)=�6��}�b(�K蔂�ms��e�w�������8��"�UP^4sS��=H��8�939�v++Ut%�/�^&�`X�d����Y���OiS����fW��)��u�����M�/����GT��&>z1ds$Zov�td�����q��2�]YƩ��Pư���|�asq>9��A,@�c��r7��K��
"/RD,�k�̑���x{��bmj}D��V@m|wt��ok�x������҃קz�!4�Q�j'��tb�e��v�=62s�5e��!�^����":���6m�`��3ǁ[Q��;��~K�L�����
fX�d��W�rf�?h�1�
(+�?��Tپs�ۮI�!�_sK�I���H���EB�v�J�L}ݿ�02r��R�ZBR�X�
��`p�{
�Ilۜ+�.I�nErG�^���ߒ-�o��/��̕�����ો�fn�j��]7~��"B�9�,t�C�
h'�|����<22rٵ�l�$)�O��*�E
x������\�����#_�ti! !�l[�$�3���*�G�V���3�~������T�c��Dh�~6�,|ݓ#��l�1�Q�˯��ڕ$���<k���Q>�p{�9×x��HJ���E���f
�̰P2���Y�@88�ccA]��H�w��}D_G9����R�')a���y�OO\�t!)��5S��]*�`f�~'W<{rf��S:������V+��zo�z���a�'�\qas���y@9ZWW��9,��~C��vߡ
�D|Yb���S2Bǿ��#�;��+mv�s^��;ד/#Bi��J����/^)ӵR�}�����
q��=�&R��h�tI@kA_�8k�]7g�[�n$8
�gӹ�g�'�3������]�.�vկZ�@��9���N��W�\��d����Z���ř��������<Pl_���|���bR��C^b��"�N��b]|��
���z��SU��y�K=<7���y:<|���犳��uC8�c�k!�S��n>��v{1d
ӫX��q
Xk)���x}��D�+��R���@p�9+{>�l��]����b[�r��!sn���)�
�o�`w��&����m-�J��� 'ּP�\��3F�{���'��;������;�
��%"���*���?:��m��H�,�.�
�"U���79
砫RK�#L����T�CK�pS��k�#> �E�Cq��d��e�Iem]
|Æ�%��?z�l��G�BC�2[���o䊫)�s
R
��k��*gЩ�Gfͻ�����GnG����QFo�]��Z�{�ݠ
��i�:�<umd���X��h�I��32Qf_�p�D{��&@:�ICފ̞5C&�HxL�@w�7����_�P����^$�A*=m~>d}�·��@Hw�盭{^�[D��˯�@�:N����*5`pqd�CWQ(�M��Ժ���3��)�%ן�z��_p�}���x������X��_�?��U_d�WLy�T�F*xf�K����0�IEND�B`�extensions/plg_hikamarket_mangopay/views/index.html000064400000000032151160562360016752
0ustar00<html><body></body></html>extensions/plg_hikamarket_mangopay/views/mangopaymarket/index.html000064400000000032151160562360021771
0ustar00<html><body></body></html>extensions/plg_hikamarket_mangopay/views/mangopaymarket/tmpl/bank.php000064400000011656151160562360022412
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><h1><?php echo JText::_('HIKAM_MANGOPAY_TITLE');
?></h1>
<form action="<?php echo
hikamarket::completeLink('mangopay');?>"
method="post" name="hikamarket_form"
id="hikamarket_mangopay_bank_form">
<dl class="mangopay_bank_addition dl-horizontal">
<dt><?php echo JText::_('MANGOPAY_BANK_TYPE');
?></dt>
<dd><?php
$values = array(
'IBAN' => JHTML::_('select.option',
'IBAN', JText::_('MANGOPAY_BANK_TYPE_IBAN')),
'GB' => JHTML::_('select.option',
'GB', JText::_('MANGOPAY_BANK_TYPE_GB')),
'US' => JHTML::_('select.option',
'US', JText::_('MANGOPAY_BANK_TYPE_US')),
'CA' => JHTML::_('select.option',
'CA', JText::_('MANGOPAY_BANK_TYPE_CA')),
'OTHER' => JHTML::_('select.option',
'OTHER', JText::_('MANGOPAY_BANK_TYPE_OTHER')),
);
echo JHTML::_('select.genericlist', $values,
'mangobank[type]', '
onchange="window.localPage.setBankType(this);"',
'value', 'text', 'IBAN');
?></dd>
<dt><?php echo JText::_('MANGOPAY_BANK_OWNER_NAME');
?></dt>
<dd>
<input type="text" name="mangobank[ownername]"
value=""/>
</dd>
<dt><?php echo
JText::_('MANGOPAY_BANK_OWNER_ADDRESS'); ?></dt>
<dd>
<input type="text" name="mangobank[owneraddress]"
value=""/>
</dd>
</dl>
<dl id="mangopay_bank_iban"
class="mangopay_bank_addition dl-horizontal">
<dt><?php echo JText::_('MANGOPAY_BANK_IBAN');
?></dt>
<dd>
<input type="text" name="mangobank[iban][iban]"
value=""/>
</dd>
<dt><?php echo JText::_('MANGOPAY_BANK_BIC');
?></dt>
<dd>
<input type="text" name="mangobank[iban][bic]"
value=""/>
</dd>
</dl>
<dl id="mangopay_bank_gb" class="mangopay_bank_addition
dl-horizontal" style="display:none;">
<dt><?php echo
JText::_('MANGOPAY_BANK_ACCOUNTNUMBER'); ?></dt>
<dd>
<input type="text"
name="mangobank[gb][accountnumber]" value=""/>
</dd>
<dt><?php echo JText::_('MANGOPAY_BANK_SORTCODE');
?></dt>
<dd>
<input type="text" name="mangobank[gb][sortcode]"
value=""/>
</dd>
</dl>
<dl id="mangopay_bank_us" class="mangopay_bank_addition
dl-horizontal" style="display:none;">
<dt><?php echo
JText::_('MANGOPAY_BANK_ACCOUNTNUMBER'); ?></dt>
<dd>
<input type="text"
name="mangobank[us][accountnumber]" value=""/>
</dd>
<dt><?php echo JText::_('MANGOPAY_BANK_ABA');
?></dt>
<dd>
<input type="text" name="mangobank[us][aba]"
value=""/>
</dd>
</dl>
<dl id="mangopay_bank_ca" class="mangopay_bank_addition
dl-horizontal" style="display:none;">
<dt><?php echo JText::_('MANGOPAY_BANK_BANKNAME');
?></dt>
<dd>
<input type="text" name="mangobank[ca][bankname]"
value=""/>
</dd>
<dt><?php echo
JText::_('MANGOPAY_BANK_INSTITUTIONNUMBER'); ?></dt>
<dd>
<input type="text"
name="mangobank[ca][institutionnumber]" value=""/>
</dd>
<dt><?php echo JText::_('MANGOPAY_BANK_BRANCHCODE');
?></dt>
<dd>
<input type="text"
name="mangobank[ca][branchcode]" value=""/>
</dd>
<dt><?php echo
JText::_('MANGOPAY_BANK_ACCOUNTNUMBER'); ?></dt>
<dd>
<input type="text"
name="mangobank[ca][accountnumber]" value=""/>
</dd>
</dl>
<dl id="mangopay_bank_other"
class="mangopay_bank_addition dl-horizontal"
style="display:none;">
<dt><?php echo JText::_('MANGOPAY_BANK_COUNTRY');
?></dt>
<dd>
<input type="text"
name="mangobank[other][country]" value=""/>
</dd>
<dt><?php echo JText::_('MANGOPAY_BANK_BIC');
?></dt>
<dd>
<input type="text" name="mangobank[other][bic]"
value=""/>
</dd>
<dt><?php echo
JText::_('MANGOPAY_BANK_ACCOUNTNUMBER'); ?></dt>
<dd>
<input type="text"
name="mangobank[other][accountnumber]" value=""/>
</dd>
</dl>
<div>
<input class="btn btn-primary" value="<?php echo
JText::_('MANGOPAY_SAVE_BANKACCOUNT'); ?>"
type="submit" onclick="return
window.hikamarket.submitform('addbank','hikamarket_mangopay_bank_form');"/>
<div style="float:right">
<a class="btn btn-info" href="<?php echo
hikamarket::completeLink('mangopay'); ?>"><?php
echo JText::_('HIKA_CANCEL'); ?></a>
</div>
</div>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>"/>
<input type="hidden" name="task"
value="bank"/>
<input type="hidden" name="ctrl"
value="mangopay"/>
<?php echo JHTML::_('form.token'); ?>
</form>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.bankType = 'iban';
window.localPage.setBankType = function(el) {
var d = document, e = null;
e = d.getElementById('mangopay_bank_' +
window.localPage.bankType);
if(e) e.style.display = 'none';
window.localPage.bankType = el.value.toLowerCase();
e = d.getElementById('mangopay_bank_' +
window.localPage.bankType);
if(e) e.style.display = '';
};
</script>
extensions/plg_hikamarket_mangopay/views/mangopaymarket/tmpl/document.php000064400000004062151160562360023306
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><h1><?php echo JText::_('HIKAM_MANGOPAY_TITLE');
?></h1>
<form action="<?php echo
hikamarket::completeLink('mangopay');?>"
method="post" name="hikamarket_form"
id="hikamarket_mangopay_document_form"
enctype="multipart/form-data">
<dl class="mangopay_documents dl-horizontal">
<dt><?php
echo JText::_('MANGOPAY_DOCUMENT_TYPE');
?></dt>
<dd><?php
$values = array(
'IDENTITY_PROOF' => JHTML::_('select.option',
'IDENTITY_PROOF',
JText::_('MANGOPAY_DOC_IDENTITY_PROOF')),
'REGISTRATION_PROOF' =>
JHTML::_('select.option', 'REGISTRATION_PROOF',
JText::_('MANGOPAY_DOC_REGISTRATION_PROOF')),
'ARTICLES_OF_ASSOCIATION' =>
JHTML::_('select.option', 'ARTICLES_OF_ASSOCIATION',
JText::_('MANGOPAY_DOC_ARTICLES_OF_ASSOCIATION')),
'SHAREHOLDER_DECLARATION' =>
JHTML::_('select.option', 'SHAREHOLDER_DECLARATION',
JText::_('MANGOPAY_DOC_SHAREHOLDER_DECLARATION')),
);
echo JHTML::_('select.genericlist', $values,
'mangodoc[type]', '', 'value',
'text', '');
?></dd>
<dt><?php
echo JText::_('MANGOPAY_DOCUMENT_FILE');
?></dt>
<dd>
<input type="file" name="mangodoc_page"/>
</dd>
</dl>
<div>
<input class="btn btn-primary" value="<?php echo
JText::_('MANGOPAY_ADD_DOCUMENT'); ?>"
type="submit" onclick="return
window.hikamarket.submitform('adddocument','hikamarket_mangopay_document_form');"/>
<div style="float:right">
<a class="btn btn-info" href="<?php echo
hikamarket::completeLink('mangopay'); ?>"><?php
echo JText::_('HIKA_CANCEL'); ?></a>
</div>
</div>
<div style="clear:both"></div>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>"/>
<input type="hidden" name="task"
value="bank"/>
<input type="hidden" name="ctrl"
value="mangopay"/>
<?php echo JHTML::_('form.token'); ?>
</form>
extensions/plg_hikamarket_mangopay/views/mangopaymarket/tmpl/index.html000064400000000032151160562360022745
0ustar00<html><body></body></html>extensions/plg_hikamarket_mangopay/views/mangopaymarket/tmpl/payout.php000064400000005077151160562360023020
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><h1><?php echo JText::_('HIKAM_MANGOPAY_TITLE');
?></h1>
<form action="<?php echo
hikamarket::completeLink('mangopay');?>"
method="post" name="hikamarket_form"
id="hikamarket_mangopay_payout_form">
<dl class="mangopay_payout dl-horizontal">
<dt><?php echo JText::_('MANGOPAY_CURRENT_BALANCE');
?></dt>
<dd><?php echo
$this->currencyClass->format($this->mango_wallet->Balance->Amount
/ 100, $this->currency_id); ?></dd>
<dt><?php echo JText::_('MANGOPAY_AUTHORIZED_PAYOUT');
?></dt>
<dd><?php echo
$this->currencyClass->format($this->maximum_authorized,
$this->currency_id); ?></dd>
</dl>
<dl class="mangopay_payout dl-horizontal">
<dt><?php echo JText::_('MANGOPAY_PAYOUT_VALUE');
?></dt>
<dd>
<input type="text" value="<?php echo
number_format($this->maximum_authorized, 2, '.',
''); ?>" placeholder="<?php echo
number_format($this->maximum_authorized, 2, '.',
''); ?>" name="payout[value]"/>
<?php echo $this->mango_wallet->Balance->Currency;?>
</dd>
<dt><?php echo JText::_('MANGOPAY_PAYOUT_BANK');
?></dt>
<dd><?php
if(empty($this->mango_bank_accounts)) {
echo '<em>' .
JText::_('MANGOPAY_NO_BANK_ACCOUNT') . '</em>';
} else {
$bank_accounts = array();
foreach($this->mango_bank_accounts as $bank_account) {
$bank_accounts[] = JHTML::_('select.option',
$bank_account->Id, $bank_account->OwnerName . ' ' .
$bank_account->OwnerAddress . ' (' . $bank_account->Type .
')');
}
echo JHTML::_('select.genericlist', $bank_accounts,
'payout[bank]', ' style="width:100%"',
'value', 'text', '');
}
?></dd>
</dl>
<div>
<input class="btn btn-primary" value="<?php echo
JText::_('MANGOPAY_PAYOUT'); ?>" type="submit"
onclick="return
window.hikamarket.submitform('dopayout','hikamarket_mangopay_payout_form');"/>
<div style="float:right">
<a class="btn btn-info" href="<?php echo
hikamarket::completeLink('mangopay'); ?>"><?php
echo JText::_('HIKA_CANCEL'); ?></a>
</div>
</div>
<div style="clear:both"></div>
<input type="hidden" name="payout[wallet]"
value="<?php echo $this->walletId; ?>"/>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>"/>
<input type="hidden" name="task"
value="payout"/>
<input type="hidden" name="ctrl"
value="mangopay"/>
<?php echo JHTML::_('form.token'); ?>
</form>
extensions/plg_hikamarket_mangopay/views/mangopaymarket/tmpl/show.php000064400000022460151160562360022452
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><h1><?php echo JText::_('HIKAM_MANGOPAY_TITLE');
?></h1>
<form action="<?php echo
hikamarket::completeLink('mangopay');?>"
method="post" name="hikamarket_form"
id="hikamarket_mangopay_form">
<ul class="hikam_tabs"
rel="tabs:hikamarket_mangopay_tab_">
<li class="active"><a href="#wallet"
rel="tab:1" onclick="return
window.hikamarket.switchTab(this);"><?php echo
JText::_('HIKAM_MANGO_WALLET'); ?></a></li>
<li><a href="#bank" rel="tab:2"
onclick="return window.hikamarket.switchTab(this);"><?php
echo JText::_('HIKAM_MANGO_BANK'); ?></a></li>
<li><a href="#profile" rel="tab:3"
onclick="return window.hikamarket.switchTab(this);"><?php
echo JText::_('HIKAM_MANGO_PROFILE'); ?></a></li>
<li><a href="#document" rel="tab:4"
onclick="return window.hikamarket.switchTab(this);"><?php
echo JText::_('HIKAM_MANGO_DOCUMENTS');
?></a></li>
</ul>
<div style="clear:both"></div>
<div id="hikamarket_mangopay_tab_1">
<?php
if(count($this->mango_wallets) == 1) {
$wallet = reset($this->mango_wallets);
?>
<dl class="mangopay_wallet_details dl-horizontal">
<dt><?php echo JText::_('CURRENCY'); ?></dt>
<dd><?php echo $wallet->Currency; ?></dd>
<dt><?php echo JText::_('MANGOPAY_BALANCE');
?></dt>
<dd><?php
$currency_id =
$this->convertCurrency($wallet->Balance->Currency);
$amount = (float)hikamarket::toFloat($wallet->Balance->Amount) /
100;
echo $this->currencyClass->format($amount, $currency_id);
?></dd>
<dt><?php echo JText::_('MANGOPAY_PAYOUT');
?></dt>
<dd><?php
if($amount > 0)
echo '<a
href="'.hikamarket::completeLink('mangopay&task=payout&wallet='.(int)$wallet->Id).'">'.JText::_('MANGOPAY_DO_PAYOUT').'</a>';
else
echo
'<em>'.JText::_('MANGOPAY_NO_PAYOUT').'</em>';
?></dd>
</dl>
<?php
} else {
?>
<table class="hikam_listing <?php echo
(HIKASHOP_RESPONSIVE)?'table table-striped
table-hover':'hikam_table'; ?>"
style="width:100%">
<thead>
<tr>
<th><?php echo JText::_('CURRENCY');
?></th>
<th><?php echo JText::_('MANGOPAY_BALANCE');
?></th>
<th><?php echo JText::_('MANGOPAY_PAYOUT');
?></th>
</tr>
</thead>
<tbody>
<?php
foreach($this->mango_wallets as $wallet) {
?>
<tr>
<td><?php echo $wallet->Currency; ?></td>
<td><?php
$currency_id =
$this->convertCurrency($wallet->Balance->Currency);
$amount = (float)hikamarket::toFloat($wallet->Balance->Amount) /
100;
echo $this->currencyClass->format($amount, $currency_id);
?></td>
<td><?php
if($amount > 0)
echo '<a class="btn btn-success"
href="'.hikamarket::completeLink('mangopay&task=payout&wallet='.(int)$wallet->Id).'">'.JText::_('MANGOPAY_DO_PAYOUT').'</a>';
else
echo
'<em>'.JText::_('MANGOPAY_NO_PAYOUT').'</em>';
?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php
}
?>
</div>
<div id="hikamarket_mangopay_tab_2"
style="display:none;">
<?php
if(!empty($this->mango_bank_accounts)) {
?>
<table class="hikam_listing <?php echo
(HIKASHOP_RESPONSIVE)?'table table-striped
table-bordered':'hikam_table'; ?>"
style="width:100%">
<thead>
<tr>
<th><?php echo JText::_('MANGOPAY_BANK_TYPE');
?></th>
<th><?php echo JText::_('MANGOPAY_BANK_OWNER_NAME');
?></th>
<th><?php echo
JText::_('MANGOPAY_BANK_OWNER_ADDRESS'); ?></th>
</tr>
</thead>
<tbody>
<?php
foreach($this->mango_bank_accounts as $bank) {
?>
<tr>
<td><?php echo $this->escape($bank->Type);
?></td>
<td><?php echo $this->escape($bank->OwnerName);
?></td>
<td><?php echo $this->escape($bank->OwnerAddress);
?></td>
</tr>
<tr><td colspan="3">
<dl class="mangopay_bank_details
dl-horizontal"><?php
foreach($bank->Details as $k => $v) {
echo
'<dt>'.JText::_('MANGOPAY_BANK_'.$k).'</dt>'.
'<dd>'.$this->escape($v).'</dd>';
}
?></dl>
</td></tr>
<?php
}
?>
</tbody>
</table>
<?php
} else {
echo
'<p><em>'.JText::_('MANGOPAY_NO_BANKACOUNT').'</em></p>';
}
?>
<a class="btn btn-info" href="<?php echo
hikamarket::completeLink('mangopay&task=bank');
?>"><?php echo
JText::_('MANGOPAY_ADD_BANKACCOUNT'); ?></a>
</div>
<div id="hikamarket_mangopay_tab_3"
style="display:none;">
<dl class="mangopay_profile_main dl-horizontal">
<dt><?php
echo JText::_('HIKA_NAME');
?></dt>
<dd><input type="text" name="mango[name]"
value="<?php echo
$this->escape($this->mango_vendor->Name);
?>"/></dd>
<dt><?php
echo JText::_('MANGOPAY_EMAIL');
?></dt>
<dd><input type="text" name="mango[email]"
value="<?php echo
$this->escape($this->mango_vendor->Email);
?>"/></dd>
<dt><?php
echo JText::_('MANGOPAY_LEGALPERSONTYPE');
?></dt>
<dd><?php
$values = array(
'BUSINESS' => JHTML::_('select.option',
'BUSINESS', JText::_('MANGOPAY_PERSONTYPE_BUSINESS')),
'ORGANIZATION' => JHTML::_('select.option',
'ORGANIZATION',
JText::_('MANGOPAY_PERSONTYPE_ORGANIZATION')),
'SOLETRADER' => JHTML::_('select.option',
'SOLETRADER',
JText::_('MANGOPAY_PERSONTYPE_SOLETRADER')),
);
echo JHTML::_('select.genericlist', $values,
'mango[legalpersontype]', '', 'value',
'text', $this->mango_vendor->LegalPersonType);
?></dd>
<dt><?php
echo JText::_('MANGOPAY_HEADQUARTERSADDRESS');
?></dt>
<dd><input type="text"
name="mango[headquartersaddress]" value="<?php echo
$this->escape($this->mango_vendor->HeadquartersAddress);
?>"/></dd>
</dl>
<h3><?php echo
JText::_('MANGOPAY_LEGALREPRESENTATIVE'); ?></h3>
<dl class="mangopay_profile_legal dl-horizontal">
<dt><?php
echo JText::_('MANGOPAY_LEGALREPRESENTATIVEFIRSTNAME');
?></dt>
<dd><input type="text"
name="mango[legalrepresentativefirstname]" value="<?php
echo
$this->escape($this->mango_vendor->LegalRepresentativeFirstName);
?>"/></dd>
<dt><?php
echo JText::_('MANGOPAY_LEGALREPRESENTATIVELASTNAME');
?></dt>
<dd><input type="text"
name="mango[legalrepresentativelastname]" value="<?php
echo
$this->escape($this->mango_vendor->LegalRepresentativeLastName);
?>"/></dd>
<dt><?php
echo JText::_('MANGOPAY_LEGALREPRESENTATIVEADDRESS');
?></dt>
<dd><input type="text"
name="mango[legalrepresentativeaddress]" value="<?php
echo
$this->escape($this->mango_vendor->LegalRepresentativeAddress);
?>"/></dd>
<dt><?php
echo JText::_('MANGOPAY_LEGALREPRESENTATIVEEMAIL');
?></dt>
<dd><input type="text"
name="mango[legalrepresentativeemail]" value="<?php echo
$this->escape($this->mango_vendor->LegalRepresentativeEmail);
?>"/></dd>
<dt><?php
echo JText::_('MANGOPAY_LEGALREPRESENTATIVEBIRTHDAY');
?></dt>
<dd><?php
$birthday =
(int)$this->mango_vendor->LegalRepresentativeBirthday;
if(empty($birthday))
$birthday = time();
echo JHTML::_('calendar',
hikamarket::getDate($birthday,'%Y-%m-%d'),
'mango[legalrepresentativebirthday]','mango_legalrepresentativebirthday','%Y-%m-%d',array('size'
=> '20'));
?></dd>
<dt><?php
echo JText::_('MANGOPAY_LEGALREPRESENTATIVENATIONALITY');
?></dt>
<dd><?php
$countries = $this->getCountryList();
echo JHTML::_('select.genericlist', $countries,
'mango[legalrepresentativenationality]', '',
'value', 'text',
$this->mango_vendor->LegalRepresentativeNationality);
?></dd>
<dt><?php
echo
JText::_('MANGOPAY_LEGALREPRESENTATIVECOUNTRYOFRESIDENCE');
?></dt>
<dd><?php
echo JHTML::_('select.genericlist', $countries,
'mango[legalrepresentativecountryofresidence]', '',
'value', 'text',
$this->mango_vendor->LegalRepresentativeCountryOfResidence);
?></dd>
</dl>
<input class="btn btn-primary" value="<?php echo
JText::_('HIKA_SAVE'); ?>" type="submit"
onclick="return
window.hikamarket.submitform('save','hikamarket_mangopay_form');"/>
</div>
<div id="hikamarket_mangopay_tab_4"
style="display:none;">
<dl class="mangopay_profile_documents dl-horizontal">
<dt><?php
echo JText::_('MANGOPAY_STATUTE');
?></dt>
<dd><?php
if($this->mango_vendor->Statute == null) {
echo '<em>' . JText::_('HIKA_NONE') .
'</em>';
} else {
echo $this->escape($this->mango_vendor->Statute);
}
?></dd>
<dt><?php
echo JText::_('MANGOPAY_PROOF_REGISTRATION');
?></dt>
<dd><?php
if($this->mango_vendor->ProofOfRegistration == null) {
echo '<em>' . JText::_('HIKA_NONE') .
'</em>';
} else {
echo $this->escape($this->mango_vendor->ProofOfRegistration);
}
?></dd>
<?php
if($this->mango_vendor->LegalPersonType == 'BUSINESS') {
?>
<dt><?php
echo JText::_('MANGOPAY_SHAREHOLDER_DECLARATION');
?></dt>
<dd><?php
if($this->mango_vendor->ShareholderDeclaration == null) {
echo '<em>' . JText::_('HIKA_NONE') .
'</em>';
} else {
echo
$this->escape($this->mango_vendor->ShareholderDeclaration);
}
?></dd>
<?php
}
?>
</dl>
<a class="btn btn-info" href="<?php echo
hikamarket::completeLink('mangopay&task=document');
?>"><?php echo JText::_('MANGOPAY_ADD_DOCUMENT');
?></a>
</div>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>"/>
<input type="hidden" name="task"
value="show"/>
<input type="hidden" name="ctrl"
value="mangopay"/>
<?php echo JHTML::_('form.token'); ?>
</form>
extensions/plg_hikamarket_mangopay/views/mangopaymarket/view.html.php000064400000013655151160562360022441
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class mangopaymarketViewmangopaymarket extends HikamarketView {
public function display($tpl = null, $params = array()) {
$this->params =& $params;
$fct = $this->getLayout();
if(method_exists($this, $fct)) {
if($this->$fct() === false)
return;
}
parent::display($tpl);
}
protected function loadCSS() {
$doc = JFactory::getDocument();
$doc->addStyleSheet(JURI::base(true).'/plugins/hikamarket/mangopay/media/mangopay.css?v='.HIKAMARKET_RESSOURCE_VERSION);
}
public function show() {
$this->loadCSS();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$this->vendor = hikamarket::loadVendor(true);
if(is_string($this->vendor->vendor_params) &&
!empty($this->vendor->vendor_params))
$this->vendor->vendor_params =
hikamarket::unserialize($this->vendor->vendor_params);
$this->currencyClass =
hikamarket::get('shop.class.currency');
$this->mangoClass = hikamarket::get('class.plg_mangopay');
$this->mangopayPlugin = $this->mangoClass->getMangoPlugin();
$this->api = $this->mangoClass->getMangoAPI();
$this->mango_vendor = null;
$this->mango_wallets = null;
$this->mango_bank_accounts = null;
$this->mango_vendor =
$this->mangopayPlugin->getVendor($this->vendor);
if(!empty($this->mango_vendor->Id)) {
$this->mango_wallets =
$this->mangopayPlugin->getVendorWallets($this->vendor);
if(empty($this->mango_wallets)) {
$wallet =
$this->mangopayPlugin->getVendorWallet($this->vendor, null,
true);
$this->mango_wallets[ strtolower($wallet->Currency) ] = $wallet;
}
try {
$this->mango_bank_accounts =
$this->api->Users->GetBankAccounts($this->mango_vendor->Id);
}
catch (MangoPay\ResponseException $e) {
$this->mangoClass->mangoDebug($e, true); }
catch (MangoPay\Exception $e) { $this->mangoClass->mangoDebug($e,
false); }
catch (Exception $e) {}
}
$this->toolbar = array(
array(
'icon' => 'back',
'name' => JText::_('HIKA_BACK'),
'url' => hikamarket::completeLink('vendor')
)
);
}
public function payout() {
$this->loadCSS();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$app = JFactory::getApplication();
$this->vendor = hikamarket::loadVendor(true);
if(is_string($this->vendor->vendor_params) &&
!empty($this->vendor->vendor_params))
$this->vendor->vendor_params =
hikamarket::unserialize($this->vendor->vendor_params);
$walletId = hikaInput::get()->getInt('wallet', 0);
if(empty($walletId)) {
$app->enqueueMessage(JText::_('MANGO_INVALID_REQUEST'));
$app->redirect( hikamarket::completeLink('mangopay', false,
true, false) );
}
$this->currencyClass =
hikamarket::get('shop.class.currency');
$this->mangoClass = hikamarket::get('class.plg_mangopay');
$this->mangopayPlugin = $this->mangoClass->getMangoPlugin();
$this->mango_vendor =
$this->mangopayPlugin->getVendor($this->vendor);
if(empty($this->mango_vendor->Id)) {
$app->enqueueMessage(JText::_('MANGO_INVALID_REQUEST'));
$app->redirect( hikamarket::completeLink('mangopay', false,
true, false) );
}
$this->api = $this->mangoClass->getMangoAPI();
$this->mango_wallets = null;
$this->mango_bank_accounts = null;
$mango_wallets =
$this->mangopayPlugin->getVendorWallets($this->vendor);
$this->mango_wallet = null;
foreach($mango_wallets as $mango_wallet) {
if((int)$mango_wallet->Id == $walletId) {
$this->mango_wallet = $mango_wallet;
break;
}
}
if(empty($this->mango_wallet)) {
$app->enqueueMessage(JText::_('MANGO_INVALID_WALLET'));
$app->redirect( hikamarket::completeLink('mangopay', false,
true, false) );
}
$this->assignRef('walletId', $walletId);
$duration = 31;
if(isset($this->mangopayPlugin->params))
$duration =
(int)$this->mangopayPlugin->params->get('payout_waiting_duration',
31);
if($duration <= 0)
$duration = 31;
$this->currency_id =
$this->convertCurrency($this->mango_wallet->Balance->Currency);
$this->transactions =
$this->mangoClass->getTransactions($this->mango_wallet->Id,
$duration);
$this->transactions_total = 0.0;
foreach($this->transactions as $transaction) {
if($transaction->Nature == 'REGULAR')
$this->transactions_total +=
($transaction->CreditedFunds->Amount / 100);
if($transaction->Nature == 'REFUND')
$this->transactions_total -=
($transaction->CreditedFunds->Amount / 100);
}
if($this->transactions_total < 0)
$this->transactions_total = 0.0;
$this->maximum_authorized =
($this->mango_wallet->Balance->Amount / 100) -
$this->transactions_total;
if($this->maximum_authorized < 0)
$this->maximum_authorized = 0.0;
try {
$this->mango_bank_accounts =
$this->api->Users->GetBankAccounts($this->mango_vendor->Id);
}
catch (MangoPay\ResponseException $e) {
$this->mangoClass->mangoDebug($e, true); }
catch (MangoPay\Exception $e) { $this->mangoClass->mangoDebug($e,
false); }
catch (Exception $e) {}
}
public function document() {
}
public function getCountryList() {
if(empty($this->mangopayPlugin))
$this->mangopayPlugin = $this->mangoClass->getMangoPlugin();
$countries = $this->mangopayPlugin->getCountryList();
$ret = array();
foreach($countries as $country) {
$ret[] = JHTML::_('select.option', $country, $country);
}
return $ret;
}
protected function convertCurrency($currency_code) {
$db = JFactory::getDBO();
$query = 'SELECT currency_id FROM ' .
hikamarket::table('shop.currency') . ' WHERE currency_code =
' . $db->Quote(strtoupper(trim($currency_code)));
$db->setQuery($query);
$ret = (int)$db->loadResult();
return $ret;
}
}
extensions/plg_hikamarket_vendorlocationfilter/index.html000064400000000032151160562360020236
0ustar00<html><body></body></html>extensions/plg_hikamarket_vendorlocationfilter/vendorlocationfilter.php000064400000013224151160562360023215
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikamarketVendorlocationfilter extends JPlugin {
protected $db = null;
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
if(!isset($this->params)) {
$plugin = JPluginHelper::getPlugin('hikamarket',
'vendorlocationfilter');
$this->params = new JRegistry($plugin->params);
}
}
public function init() {
static $init = null;
if($init !== null)
return $init;
$use_search_module =
(int)$this->params->get('use_search_module', 1);
if(!$use_search_module) {
$init = false;
return false;
}
$this->db = JFactory::getDBO();
$init = true;
return true;
}
private function dbEscape($data) {
if(empty($this->db))
$this->db = JFactory::getDBO();
if(HIKASHOP_J30)
return $this->db->escape($data, true);
return $this->db->getEscaped($data, true);
}
public function onBeforeVendorListingDisplay(&$view, &$params) {
$app = JFactory::getApplication();
if($app->isAdmin() || !$this->init())
return;
$use_search_module =
(int)$this->params->get('use_search_module', 1);
$empty_is_all = (int)$this->params->get('empty_is_all',
1);
$hide_for_guest =
(int)$this->params->get('hide_for_guest', 0);
$location_search = null;
if($use_search_module) {
$location_search =
hikaInput::get()->getVar('location_search', null);
if($location_search !== null) {
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.search',
$location_search);
} else {
$location_search =
$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.search',
null);
}
if(empty($location_search))
$location_search = null;
}
$filter_mode = $this->params->get('filter_mode',
'zip;city');
if(empty($filter_mode)) $filter_mode = 'zip;city';
$filter_mode = explode(';', trim($filter_mode));
$vendorZipColumn =
$this->params->get('vendor_zip_column',
'accepted_zip');
if(empty($vendorZipColumn)) $vendorZipColumn = 'accepted_zip';
$vendorZipColumn = $this->db->quoteName($vendorZipColumn);
$vendorCitiesColumn =
$this->params->get('vendor_city_column',
'accepted_cities');
if(empty($vendorCitiesColumn)) $vendorCitiesColumn =
'accepted_cities';
$vendorCitiesColumn = $this->db->quoteName($vendorCitiesColumn);
$user_id = hikashop_loadUser();
if(empty($user_id) && !$use_search_module) {
if(!empty($hide_for_guest)) {
$this->pushEmptyFilter($params, $filter_mode, $vendorZipColumn,
$vendorCitiesColumn);
$this->mergeFilters($params);
}
return;
}
$addressClass = hikashop_get('class.address');
if(!empty($user_id))
$addresses = $addressClass->loadUserAddresses($user_id);
$userZip = 0;
$userCity = '';
if(!empty($addresses)) {
$address = reset($addresses);
if(!empty($address->address_post_code))
$userZip = trim($address->address_post_code);
if(!empty($address->address_city))
$userCity = trim($address->address_city);
}
if((int)$this->params->get('zipcode_digits', 0))
$userZip = '' . ((int)$userZip);
$zipMode = in_array('zip', $filter_mode);
$cityMode = in_array('city', $filter_mode);
if($location_search === null && (!$zipMode || empty($userZip))
&& (!$cityMode || empty($userCity))) {
$this->pushEmptyFilter($params, $filter_mode, $vendorZipColumn,
$vendorCitiesColumn);
$this->mergeFilters($params);
return;
}
if(in_array('zip', $filter_mode)) {
$f = array();
$stars = '*';
if($location_search !== null || !empty($userZip)) {
if($location_search !== null) {
$f[] = 'vendor.'.$vendorZipColumn.' LIKE
\'%'.$this->dbEscape($location_search).'%\'';
} else {
$f[] = 'vendor.'.$vendorZipColumn.' LIKE
\'%'.$this->dbEscape($userZip).'%\'';
}
if(!empty($userZip)) {
for($i = strlen($userZip) - 1; $i > 1; $i--) {
$z = substr($userZip, 0, $i) . $stars;
$f[] = 'vendor.'.$vendorZipColumn.' LIKE
\'%'.$this->dbEscape($z).'%\'';
$stars .= '*';
}
}
}
unset($stars);
if(!empty($f))
$params['filter']['zip_filter'] =
'('.implode(') OR (', $f).')';
}
if(in_array('city', $filter_mode) && ($location_search
!== null || !empty($userCity))) {
if($location_search !== null) {
$params['filter']['city_filter'] =
'vendor.'.$vendorCitiesColumn.' LIKE
\'%'.$this->dbEscape($location_search).'%\'';
} else {
$params['filter']['city_filter'] =
'vendor.'.$vendorCitiesColumn.' LIKE
\'%'.$this->dbEscape($userCity).'%\'';
}
}
$this->mergeFilters($params);
}
private function pushEmptyFilter(&$params, $filter_mode,
$vendorZipColumn, $vendorCitiesColumn) {
if(in_array('zip', $filter_mode))
$params['filter']['hide_zip_guest'] =
'(vendor.'. $vendorZipColumn.' IS NULL OR vendor.'.
$vendorZipColumn.' = \'\' OR vendor.'.
$vendorZipColumn.' = \'*\')';
if(in_array('city', $filter_mode))
$params['filter']['hide_city_guest'] =
'(vendor.'. $vendorCitiesColumn.' IS NULL OR vendor.'.
$vendorCitiesColumn.' = \'\' OR vendor.'.
$vendorCitiesColumn.' = \'*\')';
}
private function mergeFilters(&$params) {
if(isset($params['filter']['zip_filter']) &&
isset($params['filter']['city_filter'])) {
$params['filter']['location_filter'] = '('
. $params['filter']['zip_filter'] . ') OR ('
. $params['filter']['city_filter'] . ')';
unset($params['filter']['zip_filter']);
unset($params['filter']['city_filter']);
}
}
}
extensions/plg_hikamarket_vendorlocationfilter/vendorlocationfilter.xml000064400000007300151160562360023224
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="hikamarket" method="upgrade">
<name>HikaMarket Vendor User Location Filter</name>
<hikainstall ordering="0" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>contact@obsidev.com</authorEmail>
<authorUrl>http://www.hikashop.com</authorUrl>
<copyright>(C) 2011-2020 OBSIDEV. All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaMarket Vendor User Location
Filter</description>
<files>
<filename
plugin="vendorlocationfilter">vendorlocationfilter.php</filename>
</files>
<params addpath="/components/com_hikamarket/params">
<param name="use_search_module" type="radio"
default="1" label="Use search module"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="filter_mode" type="list"
default="zip" label="Filter Mode"
description="">
<option value="zip">Zip</option>
<option value="city">City</option>
<option value="zip;city">Both</option>
</param>
<param name="vendor_zip_column" type="text"
label="Vendor Zips field" size="30"
default="accepted_zip" description="The vendor custom field
column name for the list of zip" />
<param name="vendor_city_column" type="text"
label="Vendor City field" size="30"
default="accepted_cities" description="The vendor custom
field column name for the list of cities" />
<param name="empty_is_all" type="radio"
default="1" label="Empty field means *all*"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="hide_for_guest" type="radio"
default="0" label="Hide for guest"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="zipcode_digits" type="radio"
default="0" label="Zips are only digits"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikamarket/fields">
<fieldset name="basic">
<field name="use_search_module" type="radio"
default="1" label="Use search module"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="filter_mode" type="list"
default="zip" label="Filter Mode"
description="">
<option value="zip">Zip</option>
<option value="city">City</option>
<option value="zip;city">Both</option>
</field>
<field name="vendor_zip_column" type="text"
label="Vendor Zips field" size="30"
default="accepted_zip" description="The vendor custom field
column name for the list of zip" />
<field name="vendor_city_column" type="text"
label="Vendor City field" size="30"
default="accepted_cities" description="The vendor custom
field column name for the list of cities" />
<field name="empty_is_all" type="radio"
default="1" label="Empty field means *all*"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="hide_for_guest" type="radio"
default="0" label="Hide for guest"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="zipcode_digits" type="radio"
default="0" label="Zips are only digits"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikamarket_vendorpaytaxes/index.html000064400000000032151160562370017057
0ustar00<html><body></body></html>extensions/plg_hikamarket_vendorpaytaxes/vendorpaytaxes.php000064400000003727151160562370020665
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikamarketVendorpaytaxes extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
private function init() {
if(isset($this->params))
return;
$plugin = JPluginHelper::getPlugin('hikamarket',
'vendorpaytaxes');
$this->params = new JRegistry(@$plugin->params);
}
public function onBeforeVendorPay(&$order, &$vendor, &$orders,
&$pay_orders, &$do) {
$this->init();
$config = hikamarket::config();
$shopOrderClass = hikamarket::get('shop.class.order');
$currencyClass = hikamarket::get('shop.class.currency');
$addressClass = hikamarket::get('shop.class.address');
$zoneClass = hikamarket::get('shop.class.zone');
$tax_id = (int)$this->params->get('tax_id', 0);
if(empty($tax_id))
return;
$config =& hikashop_config();
$config->set('floating_tax_prices', 0);
$address = $addressClass->get($order->order_billing_address_id);
$field = 'address_country';
if(!empty($address->address_state))
$field = 'address_state';
$zones[$address->$field] = $zoneClass->get($address->$field);
$zone_id = $zones[$address->$field]->zone_id;
$round = $currencyClass->getRounding($order->order_currency_id,
true);
$feeMode = ($config->get('market_mode', 'fee') ==
'fee');
foreach($order->cart->products as &$p) {
if(!empty($p->order_product_tax))
continue;
$p->order_product_tax =
$currencyClass->getTaxedPrice($p->order_product_price, $zone_id,
$tax_id, $round) - $p->order_product_price;
$p->order_product_tax_info = $currencyClass->taxRates;
}
unset($product);
$shopOrderClass->recalculateFullPrice($order,
$order->cart->products);
}
}
extensions/plg_hikamarket_vendorpaytaxes/vendorpaytaxes.xml000064400000002277151160562370020675
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikamarket">
<name>HikaMarket - Taxes for vendor payment</name>
<hikainstall ordering="1" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin add a fixed tax when a vendor is
paid</description>
<files>
<filename
plugin="vendorpaytaxes">vendorpaytaxes.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
<param name="tax_id" type="hikanamebox"
namebox_type="tax_category" default="0" label="Tax
category" description=""/>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
<fieldset name="basic">
<field name="tax_id" type="hikanamebox"
namebox_type="tax_category" default="0" label="Tax
category" description=""/>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikamarket_vendorusergroup/index.html000064400000000032151160562370017254
0ustar00<html><body></body></html>extensions/plg_hikamarket_vendorusergroup/vendorusergroup.php000064400000004226151160562370021252
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikamarketVendorUsergroup extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
public function onAfterVendorCreate(&$vendor) {
$vendorGroup = (int)$this->params->get('vendor_group',
0);
if(empty($vendorGroup))
return;
$move_user = (int)$this->params->get('move_user', 0);
$default_group = (int)$this->params->get('default_group',
0);
if(!$move_user)
$default_group = 0;
$userClass = hikamarket::get('shop.class.user');
$user = $userClass->get($vendor->vendor_admin_id);
$user_updated = $this->updateGroup($user->user_cms_id,
$vendorGroup, $default_group);
$logout_user = (int)$this->params->get('logout_user',
0);
if(!empty($logout_user) && $user_updated) {
$jconf = JFactory::getConfig();
if($jconf->get('session_handler', 'none') ==
'database') {
$db = JFactory::getDBO();
$db->setQuery('DELETE FROM ' .
hikamarket::table('session', false).' WHERE client_id = 0
AND userid = ' . (int)$user->user_cms_id);
$db->execute();
}
$app = JFactory::getApplication();
if(!$app->isAdmin())
$app->logout($user->user_cms_id);
}
}
private function updateGroup($user_id, $new_group_id, $remove_group_id =
0) {
$user = clone(JFactory::getUser($user_id));
$user_update = false;
jimport('joomla.access.access');
$userGroups = $user->groups;
if(empty($userGroups))
$userGroups = JAccess::getGroupsByUser($user_id, true);
if(!in_array($new_group_id, $userGroups)) {
$userGroups[] = $new_group_id;
$user_update = true;
}
if(!empty($remove_group_id)) {
$key = array_search($remove_group_id, $userGroups);
if(is_int($key)) {
$user_update = true;
unset($userGroups[$key]);
}
}
$user->set('groups', $userGroups);
if($user_update)
$user->save();
return $user_update;
}
}
extensions/plg_hikamarket_vendorusergroup/vendorusergroup.xml000064400000004110151160562370021253
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="hikamarket">
<name>HikaMarket vendor user group</name>
<hikainstall ordering="1" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaMarket vendor user group</description>
<files>
<filename
plugin="vendorusergroup">vendorusergroup.php</filename>
</files>
<params addpath="/components/com_hikamarket/params">
<param name="vendor_group" type="usergroup"
label="Select a joomla user group for your vendors" />
<param name="logout_user" type="radio"
default="0" label="Logout the user"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param type="spacer" />
<param name="move_user" type="radio"
default="0" label="Move user group"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="default_group" type="usergroup"
label="Select the default user group for generic users" />
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikamarket/fields">
<fieldset name="basic">
<field name="vendor_group" type="usergroup"
label="Select a joomla user group for your vendors" />
<field name="logout_user" type="radio"
default="0" label="Logout the user"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field type="spacer" />
<field name="move_user" type="radio"
default="0" label="Move user group"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="default_group" type="usergroup"
label="Select the default user group for generic users" />
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikashoppayment_mangopay/index.html000064400000000032151160562370016702
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_mangopay/js/index.html000064400000000032151160562370017316
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_mangopay/js/mango-kit.min.js000064400000010460151160562370020335
0ustar00var
mangoPay={cardRegistration:{baseURL:"https://api.sandbox.mangopay.com",clientId:"",init:function(a){this._cardRegisterData=a},registerCard:function(a,b,c){if(!mangoPay.browser.corsSupport()){c({"ResultCode":"009999","ResultMessage":"Browser
does not support making cross-origin Ajax calls"});return}var
d=mangoPay.cardRegistration._validateCardData(a);if(d!==true){c(d);return};mangoPay.cardRegistration._tokenizeCard(a,mangoPay.cardRegistration._finishRegistration,b,c)},_validateCardData:function(a){var
b=mangoPay._validation._cardNumberValidator._validate(a.cardNumber);if(b!==true)return
b;var
c=mangoPay._validation._expirationDateValidator._validate(a.cardExpirationDate,new
Date());if(c!==true)return c;var
d=mangoPay._validation._cvvValidator._validate(a.cardCvx,a.cardType);if(d!==true)return
d;return
true},_tokenizeCard:function(c,d,e,f){mangoPay._networking._ajax({type:"post",url:this._cardRegisterData.cardRegistrationURL,crossDomain:true,data:{data:this._cardRegisterData.preregistrationData,accessKeyRef:this._cardRegisterData.accessKey,cardNumber:c.cardNumber,cardExpirationDate:c.cardExpirationDate,cardCvx:c.cardCvx},success:function(a){var
b="";if(a===null){f({"ResultCode":"001599","ResultMessage":"Token
processing
error"});return}b={Id:mangoPay.cardRegistration._cardRegisterData.Id,RegistrationData:a};d(b,e,f)},error:function(a){f({"ResultCode":"001599","ResultMessage":"Token
processing
error"});return}})},_finishRegistration:function(d,e,f){mangoPay._networking._ajax({type:"post",crossDomain:true,url:mangoPay.cardRegistration.baseURL+'/v2/'+mangoPay.cardRegistration.clientId+'/CardRegistrations/'+d.Id,data:d,success:function(a){try{a=JSON.parse(a)}catch(err){f({"ResultCode":"101699","ResultMessage":"CardRegistration
should return a valid JSON
response"});return}if(a.ResultCode==="000000"){e(a)}else{f(a)}},error:function(a){var
b="CardRegistration error";if(a.response){try{var
c=JSON.parse(a.response);if(c.Message){b=c.Message}}catch(err){}}f({"ResultCode":"101699","ResultMessage":b})}})}},_validation:{_cvvValidator:{_validate:function(a,b){a=a?a.trim():"";b=b?b.trim():"";if(mangoPay._validation._helpers._validateNumericOnly(a)===true){if(b==="AMEX"&&(a.length===3||a.length===4)){return
true}if(b==="CB_VISA_MASTERCARD"&&a.length===3){return
true}}return{"ResultCode":"105204","ResultMessage":"CVV_FORMAT_ERROR"}}},_expirationDateValidator:{_validate:function(a,b){a=a?a.trim():"";if(a.length===4){var
c=parseInt(a.substr(2,2))+2000;var
d=parseInt(a.substr(0,2));if(d>0&&d<=12){var
e=b.getFullYear();if(e<c)return true;if(e===c){var
f=b.getMonth()+1;if(f<=d)return
true}return{"ResultCode":"105203","ResultMessage":"PAST_EXPIRY_DATE_ERROR"}}}return{"ResultCode":"105203","ResultMessage":"EXPIRY_DATE_FORMAT_ERROR"}}},_cardNumberValidator:{_validate:function(a){a=a?a.trim():"";if(mangoPay._validation._helpers._validateNumericOnly(a)===false){return{"ResultCode":"105202","ResultMessage":"CARD_NUMBER_FORMAT_ERROR"}}if(this._validateCheckDigit(a)===false){return{"ResultCode":"105202","ResultMessage":"CARD_NUMBER_FORMAT_ERROR"}}return
true},_validateCheckDigit:function(a){var b=0;var c=0;var d=false;var
e=a.replace(/\D/g,"");for(var n=e.length-1;n>=0;n--){var
f=e.charAt(n),c=parseInt(f,10);if(d){if((c*=2)>9)c-=9}b+=c;d=!d}return(b%10)===0},},_helpers:{_validateNumericOnly:function(a){var
b=/^[0-9]+$/;if(a.match(b)){return true}return
false}}},_networking:{_ajax:function(a){var b=new XMLHttpRequest();var
c="";for(key in
a.data){c+=(c.length>0?'&':'')+key+"="+encodeURIComponent(a.data[key])}var
d=a.url;if(a.type==="get"){d=a.url+(a.url.indexOf("?")>-1?'&':'?')+c}if(a.crossDomain&&!("withCredentials"in
b)&&window.XDomainRequest){xdr=new
XDomainRequest();xdr.onerror=function(){a.error(xdr)};xdr.onload=function(){a.success(xdr.responseText)};xdr.open(a.type,d);xdr.send(a.type==="post"?c:null);return}b.onreadystatechange=function(){if(b.readyState==4){if(/^2[0-9][0-9]$/.test(b.status)){a.success(b.responseText)}else{a.error(b,b.status,b.statusText)}}};b.open(a.type,d,true);if(a.type==="post"){b.setRequestHeader("Content-type","application/x-www-form-urlencoded")}b.send(a.type==="post"?c:null)},},browser:{corsSupport:function(){if("withCredentials"in
new XMLHttpRequest()){return true}if(window.XDomainRequest){return
true}return
false}}};if(!String.prototype.trim){String.prototype.trim=function(){return
this.replace(/^\s+|\s+$/g,'')}}extensions/plg_hikashoppayment_mangopay/mangolib/common/common.inc000064400000002047151160562370021760
0ustar00<?php
/**
* Function to auto include files with entities and types
* @param String $className
*/
function mangoPay_Autoload($className){
$fileName = substr(strrchr($className, '\\'), 1);
// include entities files
if (mangoPay_AutoloadCheckAndInclude($fileName, 'entities'))
return;
// include types files
if (mangoPay_AutoloadCheckAndInclude($fileName, 'types'))
return;
// include tools files
if (mangoPay_AutoloadCheckAndInclude($fileName, 'tools'))
return;
// include exceptions files
if (mangoPay_AutoloadCheckAndInclude($fileName,
'types/exceptions'))
return;
}
function mangoPay_AutoloadCheckAndInclude($fileName, $module) {
$path = __DIR__ . '/../' . $module . '/' .
lcfirst($fileName) . '.inc';
if (file_exists($path)){
include_once $path;
return true;
}
return false;
}
// register auto load function
spl_autoload_register('mangoPay_Autoload');
// include file with enums
require_once __DIR__ . '/../tools/enums.inc';
extensions/plg_hikashoppayment_mangopay/mangolib/common/index.html000064400000000032151160562370021762
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_mangopay/mangolib/entities/bankAccount.inc000064400000002674151160562370023262
0ustar00<?php
namespace MangoPay;
/**
* Bank Account entity
*/
class BankAccount extends EntityBase {
/**
* User identifier
* @var LeetchiId
*/
public $UserId;
/**
* Type of bank account
* @var string
*/
public $Type;
/**
* Owner name
* @var string
*/
public $OwnerName;
/**
* Owner address
* @var string
*/
public $OwnerAddress;
/**
* One of BankAccountDetails implementations, depending on $Type
* @var object
*/
public $Details;
/**
* Get array with mapping which property depends on other property
* @return array
*/
public function GetDependsObjects() {
return array(
'Type' => array(
'_property_name' => 'Details',
'IBAN' =>
'\MangoPay\BankAccountDetailsIBAN',
'GB' =>
'\MangoPay\BankAccountDetailsGB',
'US' =>
'\MangoPay\BankAccountDetailsUS',
'CA' =>
'\MangoPay\BankAccountDetailsCA',
'OTHER' =>
'\MangoPay\BankAccountDetailsOTHER',
)
);
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'UserId' );
array_push( $properties, 'Type' );
return $properties;
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/entities/card.inc000064400000001423151160562370021732
0ustar00<?php
namespace MangoPay;
/**
* Card entity
*/
class Card extends EntityBase {
/**
* Expiration date
* @var string
*/
public $ExpirationDate;
/**
* Alias
* @var string
*/
public $Alias;
/**
* Card type
* @var string
*/
public $CardType;
/**
* Product
* @var string
*/
public $Product ;
/**
* Bank code
* @var string
*/
public $BankCode;
/**
* Active
* @var bool
*/
public $Active;
/**
* Currency
* @var string
*/
public $Currency;
/**
* Validity
* @var \MangoPay\CardValidity
*/
public $Validity;
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/cardPreAuthorization.inc000064400000006107151160562370025166
0ustar00<?php
namespace MangoPay;
/**
* Pre-authorization entity
*/
class CardPreAuthorization extends EntityBase {
/**
* The user Id of the author of the pre-authorization
* @var string
*/
public $AuthorId;
/**
* It represents the amount debited on the bank account
* of the Author.DebitedFunds = Fees + CreditedFunds
* (amount received on wallet)
* @var \MangoPay\Money
*/
public $DebitedFunds;
/**
* Status of the PreAuthorization: CREATED, SUCCEEDED, FAILED
* @var string
*/
public $Status;
/**
* The status of the payment after the PreAuthorization:
* WAITING, CANCELED, EXPIRED, VALIDATED
* @var string
*/
public $PaymentStatus;
/**
* The PreAuthorization result code
* @var string
*/
public $ResultCode;
/**
* The PreAuthorization result Message explaining the result code
* @var string
*/
public $ResultMessage;
/**
* How the PreAuthorization has been executed.
* Only on value for now: CARD
* @var string
*/
public $ExecutionType;
/**
* The SecureMode correspond to '3D secure' for CB Visa and
MasterCard
* or 'Amex Safe Key' for American Express.
* This field lets you activate it manually.
* @var string
*/
public $SecureMode;
/**
* The ID of the registered card (Got through CardRegistration object)
* @var string
*/
public $CardId;
/**
* Boolean. The value is 'true' if the SecureMode was used
* @var string
*/
public $SecureModeNeeded;
/**
* This is the URL where to redirect users to proceed
* to 3D secure validation
* @var string
*/
public $SecureModeRedirectURL;
/**
* This is the URL where users are automatically redirected
* after 3D secure validation (if activated)
* @var string
*/
public $SecureModeReturnURL;
/**
* The date when the payment is processed
* @var Timestamp
*/
public $ExpirationDate;
/**
* The date when the payment was authorized
* @var Timestamp
*/
public $AuthorizationDate;
/**
* The type of pre-authorization ("CARD" is the only
acceptable value at present
* @var string
*/
public $PaymentType;
/**
* The Id of the associated PayIn
* @var string
*/
public $PayInId;
/**
* Get array with mapping which property is object and what type of
object
* @return array
*/
public function GetSubObjects() {
return array(
'DebitedFunds' => '\MangoPay\Money'
);
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'Status' );
array_push( $properties, 'ResultCode' );
array_push( $properties, 'ResultMessage' );
return $properties;
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/entities/cardRegistration.inc000064400000003251151160562370024326
0ustar00<?php
namespace MangoPay;
/**
* CardRegistration entity
*/
class CardRegistration extends EntityBase {
/**
* User Id
* @var string
*/
public $UserId;
/**
* Access key
* @var string
*/
public $AccessKey;
/**
* Preregistration data
* @var string
*/
public $PreregistrationData;
/**
* Card registration URL
* @var string
*/
public $CardRegistrationURL;
/**
* Card Id
* @var string
*/
public $CardId;
/**
* Card registration data
* @var string
*/
public $RegistrationData;
/**
* The result code of the object
* @var string
*/
public $ResultCode;
/**
* The message explaning the result code
* @var string
*/
public $ResultMessage;
/**
* Currency
* @var string
*/
public $Currency;
/**
* Status
* @var string
*/
public $Status;
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'AccessKey' );
array_push( $properties, 'PreregistrationData' );
array_push( $properties, 'CardRegistrationURL' );
array_push( $properties, 'CardId' );
array_push( $properties, 'ResultCode' );
array_push( $properties, 'ResultMessage' );
array_push( $properties, 'Status' );
return $properties;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/client.inc000064400000000657151160562370022307
0ustar00<?php
namespace MangoPay;
/**
* Client entity
*/
class Client extends EntityBase {
/**
* Client identifier
* @var String
*/
public $ClientId;
/**
* Name of client
* @var String
*/
public $Name;
/**
* Email of client
* @var String
*/
public $Email;
/**
* Password for client
* @var String
*/
public $Passphrase;
}
extensions/plg_hikashoppayment_mangopay/mangolib/entities/entityBase.inc000064400000001346151160562370023134
0ustar00<?php
namespace MangoPay;
/**
* Abstract class with common properties
*/
abstract class EntityBase extends Dto {
/**
* @var Int Unique identifier
* (At this moment type is Integer - in the feature will be GUID)
*/
public $Id;
/**
* @var String Custom data
*/
public $Tag;
/**
* @var Time Date of creation
*/
public $CreationDate;
/**
* Construct
* @param type $id Entity identifier
*/
function __construct($id = null) {
$this->Id = $id;
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
return array( 'Id', 'CreationDate' );
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/entities/event.inc000064400000000523151160562370022142
0ustar00<?php
namespace MangoPay;
/**
* Event entity
*/
class Event extends Dto {
/**
* Resource ID
* @var string
*/
public $ResourceId;
/**
* Event type
* @var \MangoPay\EventType
*/
public $EventType;
/**
* Date of event
* @var Date
*/
public $Date;
}
extensions/plg_hikashoppayment_mangopay/mangolib/entities/hook.inc000064400000000776151160562370021773
0ustar00<?php
namespace MangoPay;
/**
* Hooks and Notifications entity
*/
class Hook extends EntityBase {
/**
* This is the URL where your receive notification for each EventType
* @var string
*/
public $Url;
/**
* Status: ENABLED, DISABLED
* @var string
*/
public $Status;
/**
* Validity: VALID, INVALID
* @var string
*/
public $Validity;
/**
* EventType
* @var EventType
*/
public $EventType;
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/index.html000064400000000032151160562370022316
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_mangopay/mangolib/entities/kycDocument.inc000064400000001125151160562370023305
0ustar00<?php
namespace MangoPay;
/**
* KYC document entity
*/
class KycDocument extends EntityBase {
/**
* Document type
* @var \MangoPay\KycDocumentType
*/
public $Type;
/**
* Document status
* @var \MangoPay\KycDocumentStatus
*/
public $Status;
/**
* Refused reason type
* @var type string
*/
public $RefusedReasonType;
/**
* Refused reason message
* @var type string
*/
public $RefusedReasonMessage;
/**
* User identifier
* @var type string
*/
public $UserId;
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/kycPage.inc000064400000000267151160562370022411
0ustar00<?php
namespace MangoPay;
/**
* KYC page entity for Kyc document
*/
class KycPage extends Dto {
/**
* Image base64
* @var type string
*/
public $File;
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/payIn.inc000064400000004045151160562370022104
0ustar00<?php
namespace MangoPay;
/**
* Pay-in entity
*/
class PayIn extends Transaction {
/**
* Credited wallet Id
* @var int
*/
public $CreditedWalletId;
/**
* PaymentType {CARD, BANK_WIRE, AUTOMATIC_DEBIT, DIRECT_DEBIT }
* @var string
*/
public $PaymentType;
/**
* One of PayInPaymentDetails implementations, depending on
$PaymentType
* @var object
*/
public $PaymentDetails;
/**
* ExecutionType { WEB, TOKEN, DIRECT, PREAUTHORIZED,
RECURRING_ORDER_EXECUTION }
* @var string
*/
public $ExecutionType;
/**
* One of PayInExecutionDetails implementations, depending on
$ExecutionType
* @var object
*/
public $ExecutionDetails;
/**
* Get array with mapping which property depends on other property
* @return array
*/
public function GetDependsObjects() {
return array(
'PaymentType' => array(
'_property_name' =>
'PaymentDetails',
'CARD' =>
'\MangoPay\PayInPaymentDetailsCard',
'PREAUTHORIZED' =>
'\MangoPay\PayInPaymentDetailsPreAuthorized',
'BANK_WIRE' =>
'\MangoPay\PayInPaymentDetailsBankWire',
'DIRECT_DEBIT' =>
'\MangoPay\PayInPaymentDetailsDirectDebit',
// ...and more in future...
),
'ExecutionType' => array(
'_property_name' =>
'ExecutionDetails',
'WEB' =>
'\MangoPay\PayInExecutionDetailsWeb',
'DIRECT' =>
'\MangoPay\PayInExecutionDetailsDirect',
// ...and more in future...
)
);
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'PaymentType' );
array_push( $properties, 'ExecutionType' );
return $properties;
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/entities/payOut.inc000064400000002224151160562370022302
0ustar00<?php
namespace MangoPay;
/**
* PayOut entity
*/
class PayOut extends Transaction {
/**
* Debited wallet Id
* @var int
*/
public $DebitedWalletId;
/**
* PaymentType (BANK_WIRE, MERCHANT_EXPENSE, AMAZON_GIFTCARD)
* @var string
*/
public $PaymentType;
/**
* One of PayOutPaymentDetails implementations, depending on
$PaymentType
* @var object
*/
public $MeanOfPaymentDetails;
/**
* Get array with mapping which property depends on other property
* @return array
*/
public function GetDependsObjects() {
return array(
'PaymentType' => array(
'_property_name' =>
'MeanOfPaymentDetails',
'BANK_WIRE' =>
'\MangoPay\PayOutPaymentDetailsBankWire',
// ...and more in future...
)
);
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'PaymentType' );
return $properties;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/refund.inc000064400000000627151160562370022311
0ustar00<?php
namespace MangoPay;
/**
* Refund entity
*/
class Refund extends Transaction {
/**
* Initial transaction Id
* @var string
*/
public $InitialTransactionId;
/**
* Debited wallet Id
* @var string
*/
public $DebitedWalletId;
/**
* Credited wallet Id
* @var string
*/
public $CreditedWalletId;
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/temporaryImmediatePayIn.inc000064400000000732151160562370025625
0ustar00<?php
namespace MangoPay;
/**
* WARNING!!
* It's temporary entity and it will be removed in the future.
* Please, contact with support before using these features or if you have
any questions.
*
* Temporary immediate pay-in entity.
*/
class TemporaryImmediatePayIn extends Transaction {
/**
* Payment card Id
* @var string
*/
public $PaymentCardId;
/**
* Credited wallet Id
* @var string
*/
public $CreditedWalletId;
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/temporaryPaymentCard.inc000064400000001377151160562370025203
0ustar00<?php
namespace MangoPay;
/**
* WARNING!!
* It's temporary entity and it will be removed in the future.
* Please, contact with support before using these features or if you have
any questions.
*
* Temporary Payment Card entity.
*/
class TemporaryPaymentCard extends EntityBase {
/**
* User Id
* @var string
*/
public $UserId;
/**
* Culture
* @var string
*/
public $Culture;
/**
* Return URL
* @var string
*/
public $ReturnURL;
/**
* Template URL
* @var string
*/
public $TemplateURL;
/**
* Redirect URL
* @var string
*/
public $RedirectURL;
/**
* Alias
* @var string
*/
public $Alias;
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/transaction.inc000064400000003632151160562370023352
0ustar00<?php
namespace MangoPay;
/**
* Transaction entity.
* Base class for: PayIn, PayOut, Transfer.
*/
class Transaction extends EntityBase {
/**
* Author Id
* @var int
*/
public $AuthorId;
/**
* Credited user Id
* @var int
*/
public $CreditedUserId;
/**
* Debited funds
* @var \MangoPay\Money
*/
public $DebitedFunds;
/**
* Credited funds
* @var \MangoPay\Money
*/
public $CreditedFunds;
/**
* Fees
* @var \MangoPay\Money
*/
public $Fees;
/**
* TransactionStatus {CREATED, SUCCEEDED, FAILED}
* @var string
*/
public $Status;
/**
* Result code
* @var string
*/
public $ResultCode;
/**
* The PreAuthorization result Message explaining the result code
* @var string
*/
public $ResultMessage;
/**
* Execution date;
* @var date
*/
public $ExecutionDate;
/**
* TransactionType {PAYIN, PAYOUT, TRANSFER}
* @var string
*/
public $Type;
/**
* TransactionNature { REGULAR, REFUND, REPUDIATION }
* @var string
*/
public $Nature;
/**
* Get array with mapping which property is object and what type of
object
* @return array
*/
public function GetSubObjects() {
return array(
'DebitedFunds' => '\MangoPay\Money' ,
'CreditedFunds' => '\MangoPay\Money' ,
'Fees' => '\MangoPay\Money'
);
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'Status' );
array_push( $properties, 'ResultCode' );
array_push( $properties, 'ExecutionDate' );
return $properties;
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/entities/transfer.inc000064400000000426151160562370022647
0ustar00<?php
namespace MangoPay;
/**
* Transfer entity
*/
class Transfer extends Transaction {
/**
* Debited wallet Id
* @var int
*/
public $DebitedWalletId;
/**
* Credited wallet Id
* @var int
*/
public $CreditedWalletId;
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/user.inc000064400000001335151160562370022001
0ustar00<?php
namespace MangoPay;
/**
* User entity
*/
abstract class User extends EntityBase {
/**
* Type of user
* @var String
*/
public $PersonType;
/**
* Email address
* @var String
*/
public $Email;
/**
* Construct
* @param string $personType String with type of person
*/
protected function SetPersonType($personType) {
$this->PersonType = $personType;
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'PersonType' );
return $properties;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/userLegal.inc000064400000003453151160562370022751
0ustar00<?php
namespace MangoPay;
/**
* UserLegal entity
*/
class UserLegal extends User {
/**
* Name of user
* @var String
*/
public $Name;
/**
* Type for legal user. Possible: ‘BUSINESS’, ’ORGANIZATION’
* @var String
*/
public $LegalPersonType;
/**
*
* @var String
*/
public $HeadquartersAddress;
/**
*
* @var String
*/
public $LegalRepresentativeFirstName;
/**
*
* @var String
*/
public $LegalRepresentativeLastName;
/**
*
* @var String
*/
public $LegalRepresentativeAddress;
/**
*
* @var String
*/
public $LegalRepresentativeEmail;
/**
*
* @var Unix timestamp
*/
public $LegalRepresentativeBirthday;
/**
*
* @var String
*/
public $LegalRepresentativeNationality;
/**
*
* @var String
*/
public $LegalRepresentativeCountryOfResidence;
/**
*
* @var String
*/
public $Statute;
/**
*
* @var String
*/
public $ProofOfRegistration;
/**
*
* @var String
*/
public $ShareholderDeclaration;
/**
* Construct
*/
function __construct($id = null) {
parent::__construct($id);
$this->SetPersonType(PersonType::Legal);
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'Statute' );
array_push( $properties, 'ProofOfRegistration' );
array_push( $properties, 'ShareholderDeclaration' );
return $properties;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/userNatural.inc000064400000002666151160562370023340
0ustar00<?php
namespace MangoPay;
/**
* UserNatural entity
*/
class UserNatural extends User {
/**
* First name for user
* @var String
*/
public $FirstName;
/**
* Last name for user
* @var String
*/
public $LastName;
/**
* Address for user
* @var String
*/
public $Address;
/**
* Date of birth
* @var Unix timestamp
*/
public $Birthday;
/**
* User's country
* @var String
*/
public $Nationality;
/**
* Country of residence
* @var String
*/
public $CountryOfResidence;
/**
* User's occupation
* @var String
*/
public $Occupation;
/**
*
* @var Int
*/
public $IncomeRange;
/**
*
* @var String
*/
public $ProofOfIdentity;
/**
*
* @var String
*/
public $ProofOfAddress;
/**
* Construct
*/
function __construct($id = null) {
parent::__construct($id);
$this->SetPersonType(PersonType::Natural);
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'ProofOfIdentity' );
array_push( $properties, 'ProofOfAddress' );
return $properties;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/entities/wallet.inc000064400000001662151160562370022316
0ustar00<?php
namespace MangoPay;
/**
* Wallet entity
*/
class Wallet extends EntityBase {
/**
* Array with owners identities
* @var array
*/
public $Owners;
/**
* Wallet description
* @var string
*/
public $Description;
/**
* Money in wallet
* @var Money
*/
public $Balance;
/**
* Currency code in ISO
* @var string
*/
public $Currency;
/**
* Get array with mapping which property is object and what type of
object
* @return array
*/
public function GetSubObjects() {
return array( 'Balance' => '\MangoPay\Money'
);
}
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'Balance' );
return $properties;
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/index.html000064400000000032151160562370020472
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_mangopay/mangolib/mangoPayApi.inc000064400000006242151160562370021406
0ustar00<?php
namespace MangoPay;
require_once __DIR__ . '/common/common.inc';
/**
* MangoPay API main entry point.
* Provides managers to connect, send and read data from MangoPay API
* as well as holds configuration/authorization data.
*/
class MangoPayApi {
/////////////////////////////////////////////////
// Config/authorization related props
/////////////////////////////////////////////////
/**
* Authorization token methods
* @var \MangoPay\AuthorizationTokenManager
*/
public $OAuthTokenManager;
/**
* Configuration instance
* @var \MangoPay\Configuration
*/
public $Config;
/////////////////////////////////////////////////
// API managers props
/////////////////////////////////////////////////
/**
* OAuth methods
* @var ApiOAuth
*/
public $AuthenticationManager;
/**
* Clients methods
* @var Client
*/
public $Clients;
/**
* Users methods
* @var ApiUsers
*/
public $Users;
/**
* Wallets methods
* @var ApiWallets
*/
public $Wallets;
/**
* Transfers methods
* @var ApiTransfers
*/
public $Transfers;
/**
* Pay-in methods
* @var ApiPayIns
*/
public $PayIns;
/**
* Pay-out methods
* @var ApiPayOuts
*/
public $PayOuts;
/**
* Refund methods
* @var ApiRefunds
*/
public $Refunds;
/**
* Card registration methods
* @var ApiCardRegistrations
*/
public $CardRegistrations;
/**
* Pre-authorization methods
* @var ApiCardPreAuthorization
*/
public $CardPreAuthorizations;
/**
* Card methods
* @var ApiCards
*/
public $Cards;
/**
* Events methods
* @var ApiEvents
*/
public $Events;
/**
* Hooks methods
* @var ApiHooks
*/
public $Hooks;
/**
* Kyc documents list
* @var ApiKycDocuments
*/
public $KycDocuments;
/**
* Constructor
*/
function __construct() {
// default config setup
$this->Config = new Configuration();
$this->OAuthTokenManager = new
AuthorizationTokenManager($this);
// API managers
$this->AuthenticationManager = new ApiOAuth($this);
$this->Clients = new ApiClients($this);
$this->Users = new ApiUsers($this);
$this->Wallets = new ApiWallets($this);
$this->Transfers = new ApiTransfers($this);
$this->PayIns = new ApiPayIns($this);
$this->PayOuts = new ApiPayOuts($this);
$this->Refunds = new ApiRefunds($this);
$this->CardRegistrations = new ApiCardRegistrations($this);
$this->Cards = new ApiCards($this);
$this->Events = new ApiEvents($this);
$this->Hooks = new ApiHooks($this);
$this->CardPreAuthorizations = new
ApiCardPreAuthorizations($this);
$this->KycDocuments = new ApiKycDocuments($this);
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiBase.inc000064400000037106151160562370021710
0ustar00<?php
namespace MangoPay;
/**
* Base class for MangoPay API managers
*/
abstract class ApiBase {
/**
* Root/parent instance that holds the OAuthToken and Configuration
instance
* @var \MangoPay\MangoPayApi
*/
protected $_root;
/**
* Array with REST url and request type
* @var array
*/
private $_methods = array(
'authentication_base' => array(
'/api/clients/', RequestType::POST ),
'authentication_oauth' => array( '/oauth/token
', RequestType::POST ),
'events_all' => array( '/events',
RequestType::GET ),
'hooks_create' => array( '/hooks',
RequestType::POST ),
'hooks_all' => array( '/hooks',
RequestType::GET ),
'hooks_get' => array( '/hooks/%s',
RequestType::GET ),
'hooks_save' => array( '/hooks/%s',
RequestType::PUT ),
'cardregistration_create' => array(
'/cardregistrations', RequestType::POST ),
'cardregistration_get' => array(
'/cardregistrations/%s', RequestType::GET ),
'cardregistration_save' => array(
'/cardregistrations/%s', RequestType::PUT ),
'preauthorization_create' => array(
'/preauthorizations/card/direct', RequestType::POST ),
'preauthorization_get' => array(
'/preauthorizations/%s', RequestType::GET ),
'preauthorization_save' => array(
'/preauthorizations/%s', RequestType::PUT ),
'card_get' => array( '/cards/%s',
RequestType::GET ),
'card_save' => array( '/cards/%s',
RequestType::PUT ),
// pay ins URLs
'payins_card-web_create' => array(
'/payins/card/web/', RequestType::POST ),
'payins_card-direct_create' => array(
'/payins/card/direct/', RequestType::POST ),
'payins_preauthorized-direct_create' => array(
'/payins/preauthorized/direct/', RequestType::POST ),
'payins_bankwire-direct_create' => array(
'/payins/bankwire/direct/', RequestType::POST ),
'payins_directdebit-web_create' => array(
'/payins/directdebit/web', RequestType::POST ),
'payins_get' => array( '/payins/%s',
RequestType::GET ),
'payins_getrefunds' => array(
'/payins/%s/refunds', RequestType::GET ),
'payins_createrefunds' => array(
'/payins/%s/refunds', RequestType::POST ),
'payouts_bankwire_create' => array(
'/payouts/bankwire/', RequestType::POST ),
'payouts_get' => array( '/payouts/%s',
RequestType::GET ),
'refunds_get' => array( '/refunds/%s',
RequestType::GET ),
'transfers_create' => array( '/transfers',
RequestType::POST ),
'transfers_get' => array( '/transfers/%s',
RequestType::GET ),
'transfers_getrefunds' => array(
'/transfers/%s/refunds', RequestType::GET ),
'transfers_createrefunds' => array(
'/transfers/%s/refunds', RequestType::POST ),
'users_createnaturals' => array(
'/users/natural', RequestType::POST ),
'users_createlegals' => array(
'/users/legal', RequestType::POST ),
'users_createbankaccounts_iban' => array(
'/users/%s/bankaccounts/iban', RequestType::POST ),
'users_createbankaccounts_gb' => array(
'/users/%s/bankaccounts/gb', RequestType::POST ),
'users_createbankaccounts_us' => array(
'/users/%s/bankaccounts/us', RequestType::POST ),
'users_createbankaccounts_ca' => array(
'/users/%s/bankaccounts/ca', RequestType::POST ),
'users_createbankaccounts_other' => array(
'/users/%s/bankaccounts/other', RequestType::POST ),
'users_all' => array( '/users',
RequestType::GET ),
'users_allwallets' => array(
'/users/%s/wallets', RequestType::GET ),
'users_allbankaccount' => array(
'/users/%s/bankaccounts', RequestType::GET ),
'users_allcards' => array(
'/users/%s/cards', RequestType::GET ),
'users_alltransactions' => array(
'/users/%s/transactions', RequestType::GET ),
'users_allkycdocuments' => array(
'/users/%s/KYC/documents', RequestType::GET ),
'users_get' => array( '/users/%s',
RequestType::GET ),
'users_getnaturals' => array(
'/users/natural/%s', RequestType::GET ),
'users_getlegals' => array(
'/users/legal/%s', RequestType::GET ),
'users_getbankaccount' => array(
'/users/%s/bankaccounts/%s', RequestType::GET ),
'users_savenaturals' => array(
'/users/natural/%s', RequestType::PUT ),
'users_savelegals' => array(
'/users/legal/%s', RequestType::PUT ),
'wallets_create' => array( '/wallets',
RequestType::POST ),
'wallets_alltransactions' => array(
'/wallets/%s/transactions', RequestType::GET ),
'wallets_get' => array( '/wallets/%s',
RequestType::GET ),
'wallets_save' => array( '/wallets/%s',
RequestType::PUT ),
'kyc_documents_create' => array(
'/users/%s/KYC/documents/', RequestType::POST ),
'kyc_documents_get' => array(
'/users/%s/KYC/documents/%s', RequestType::GET ),
'kyc_documents_save' => array(
'/users/%s/KYC/documents/%s', RequestType::PUT ),
'kyc_page_create' => array(
'/users/%s/KYC/documents/%s/pages', RequestType::POST ),
'kyc_documents_all' => array(
'/KYC/documents', RequestType::GET ),
// These are temporary functions and WILL be removed in the future.
// Please, contact with support before using these features or if
you have any questions.
'temp_paymentcards_create' => array(
'/temp/paymentcards', RequestType::POST ),
'temp_paymentcards_get' => array(
'/temp/paymentcards/%s', RequestType::GET ),
'temp_immediatepayins_create' => array(
'/temp/immediate-payins', RequestType::POST )
);
/**
* Constructor
* @param \MangoPay\MangoPayApi Root/parent instance that holds the
OAuthToken and Configuration instance
*/
function __construct($root) {
$this->_root = $root;
}
/**
* Get URL for REST Mango Pay API
* @param string $key Key with data
* @return string
*/
protected function GetRequestUrl($key){
return $this->_methods[$key][0];
}
/**
* Get request type for REST Mango Pay API
* @param string $key Key with data
* @return RequestType
*/
protected function GetRequestType($key){
return $this->_methods[$key][1];
}
/**
* Create object in API
* @param string $methodKey Key with request data
* @param object $entity Entity object
* @param object $responseClassName Name of entity class from response
* @param int $entityId Entity identifier
* @return object Response data
*/
protected function CreateObject($methodKey, $entity, $responseClassName
= null, $entityId = null, $subEntityId = null) {
if (is_null($entityId))
$urlMethod = $this->GetRequestUrl($methodKey);
elseif (is_null($subEntityId))
$urlMethod = sprintf($this->GetRequestUrl($methodKey),
$entityId);
else
$urlMethod = sprintf($this->GetRequestUrl($methodKey),
$entityId, $subEntityId);
$requestData = null;
if (!is_null($entity))
$requestData = $this->BuildRequestData($entity);
$rest = new RestTool(true, $this->_root);
$response = $rest->Request($urlMethod,
$this->GetRequestType($methodKey), $requestData);
if (!is_null($responseClassName))
return $this->CastResponseToEntity($response,
$responseClassName);
return $response;
}
/**
* Get entity object from API
* @param string $methodKey Key with request data
* @param int $entityId Entity identifier
* @param object $responseClassName Name of entity class from response
* @param int $secondEntityId Entity identifier for second entity
* @return object Response data
*/
protected function GetObject($methodKey, $entityId, $responseClassName
= null, $secondEntityId = null) {
$urlMethod = sprintf($this->GetRequestUrl($methodKey),
$entityId, $secondEntityId);
$rest = new RestTool(true, $this->_root);
$response = $rest->Request($urlMethod,
$this->GetRequestType($methodKey));
if (!is_null($responseClassName))
return $this->CastResponseToEntity($response,
$responseClassName);
return $response;
}
/**
* Get lst with entities object from API
* @param string $methodKey Key with request data
* @param \MangoPay\Pagination $pagination Pagination object
* @param object $responseClassName Name of entity class from response
* @param int $entityId Entity identifier
* @param object $filter Object to filter data
* @return object Response data
*/
protected function GetList($methodKey, & $pagination,
$responseClassName = null, $entityId = null, $filter = null, $sorting =
null) {
$urlMethod = sprintf($this->GetRequestUrl($methodKey),
$entityId);
if (is_null($pagination) || !is_object($pagination) ||
get_class($pagination) != 'MangoPay\Pagination') {
$pagination = new Pagination();
}
$rest = new RestTool(true, $this->_root);
$additionalUrlParams = array();
if (!is_null($filter))
$additionalUrlParams["filter"] = $filter;
if (!is_null($sorting)){
if (!is_a($sorting, "\MangoPay\Sorting"))
throw new Exception('Wrong type of sorting
object');
$additionalUrlParams["sort"] =
$sorting->GetSortParameter();
}
$response = $rest->Request($urlMethod,
$this->GetRequestType($methodKey), null, $pagination,
$additionalUrlParams);
if (!is_null($responseClassName))
return $this->CastResponseToEntity($response,
$responseClassName);
return $response;
}
/**
* Save object in API
* @param string $methodKey Key with request data
* @param object $entity Entity object to save
* @param object $responseClassName Name of entity class from response
* @return object Response data
*/
protected function SaveObject($methodKey, $entity, $responseClassName =
null, $secondEntityId = null) {
if (is_null($secondEntityId))
$urlMethod = sprintf($this->GetRequestUrl($methodKey),
$entity->Id);
else
$urlMethod = sprintf($this->GetRequestUrl($methodKey),
$secondEntityId, $entity->Id);
$requestData = $this->BuildRequestData($entity);
$rest = new RestTool(true, $this->_root);
$response = $rest->Request($urlMethod,
$this->GetRequestType($methodKey), $requestData);
if (!is_null($responseClassName))
return $this->CastResponseToEntity($response,
$responseClassName);
return $response;
}
/**
* Cast response object to entity object
* @param object $response Object from API response
* @param string $entityClassName Name of entity class to cast
* @return \MangoPay\$entityClassName Return entity object
*/
protected function CastResponseToEntity($response, $entityClassName,
$asDependentObject = false)
{
if (is_array($response)) {
$list = array();
foreach ($response as $responseObject) {
array_push($list,
$this->CastResponseToEntity($responseObject, $entityClassName));
}
return $list;
}
if (is_string($entityClassName)) {
$entity = new $entityClassName();
} else {
throw new Exception('Cannot cast response to entity
object. Wrong entity class name');
}
$responseReflection = new \ReflectionObject($response);
$entityReflection = new \ReflectionObject($entity);
$responseProperties = $responseReflection->getProperties();
$subObjects = $entity->GetSubObjects();
$dependsObjects = $entity->GetDependsObjects();
foreach ($responseProperties as $responseProperty) {
$responseProperty->setAccessible(true);
$name = $responseProperty->getName();
$value = $responseProperty->getValue($response);
if ($entityReflection->hasProperty($name)) {
$entityProperty =
$entityReflection->getProperty($name);
$entityProperty->setAccessible(true);
// is sub object?
if (isset($subObjects[$name])) {
if (is_null($value))
$object = null;
else
$object = $this->CastResponseToEntity($value,
$subObjects[$name]);
$entityProperty->setValue($entity, $object);
} else {
$entityProperty->setValue($entity, $value);
}
// has dependent object?
if (isset($dependsObjects[$name])) {
$dependsObject = $dependsObjects[$name];
$entityDependProperty =
$entityReflection->getProperty($dependsObject['_property_name']);
$entityDependProperty->setAccessible(true);
$entityDependProperty->setValue($entity,
$this->CastResponseToEntity($response, $dependsObject[$value], true));
}
} else {
if ($asDependentObject || !empty($dependsObjects)) {
continue;
}
else {
/* UNCOMMENT THE LINE BELOW TO ENABLE RESTRICTIVE REFLECTION MODE */
//throw new Exception('Cannot cast response to entity object.
Missing property ' . $name .' in entity ' .
$entityClassName);
continue;
}
}
}
return $entity;
}
/**
* Get array with request data
* @param object $entity Entity object to send as request data
* @return array
*/
protected function BuildRequestData($entity) {
$entityProperties = get_object_vars($entity);
$blackList = $entity->GetReadOnlyProperties();
$requestData = array();
foreach ($entityProperties as $propertyName => $propertyValue)
{
if (in_array($propertyName, $blackList))
continue;
if ($this->CanReadSubRequestData($entity, $propertyName)) {
$subRequestData =
$this->BuildRequestData($propertyValue);
foreach ($subRequestData as $key => $value) {
$requestData[$key] = $value;
}
} else {
if (isset($propertyValue))
$requestData[$propertyName] = $propertyValue;
}
}
return $requestData;
}
private function CanReadSubRequestData($entity, $propertyName) {
if (get_class($entity) == 'MangoPay\PayIn' &&
($propertyName == 'PaymentDetails' ||
$propertyName == 'ExecutionDetails')) {
return true;
}
if (get_class($entity) == 'MangoPay\PayOut' &&
$propertyName == 'MeanOfPaymentDetails') {
return true;
}
if (get_class($entity) == 'MangoPay\BankAccount'
&& $propertyName == 'Details' ) {
return true;
}
return false;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiCardPreAuthorizations.inc000064400000002551151160562370025316
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for pre-authorization process
*/
class ApiCardPreAuthorizations extends ApiBase {
/**
* Create new pre-authorization object
* @param \MangoPay\CardPreAuthorization $cardPreAuthorization
PreAuthorization object to create
* @return \MangoPay\CardPreAuthorization PreAuthorization object
returned from API
*/
public function Create($cardPreAuthorization) {
return $this->CreateObject('preauthorization_create',
$cardPreAuthorization, '\MangoPay\CardPreAuthorization');
}
/**
* Get pre-authorization object
* @param int $cardPreAuthorizationId PreAuthorization identifier
* @return \MangoPay\CardPreAuthorization Card registration object
returned from API
*/
public function Get($cardPreAuthorizationId) {
return $this->GetObject('preauthorization_get',
$cardPreAuthorizationId, '\MangoPay\CardPreAuthorization');
}
/**
* Update pre-authorization object
* @param \MangoPay\CardPreAuthorization $preAuthorization
PreAuthorization object to save
* @return \MangoPay\CardPreAuthorization PreAuthorization object
returned from API
*/
public function Update($cardPreAuthorization) {
return $this->SaveObject('preauthorization_save',
$cardPreAuthorization, '\MangoPay\CardPreAuthorization');
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiCardRegistrations.inc000064400000002460151160562370024460
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for card registrations
*/
class ApiCardRegistrations extends ApiBase {
/**
* Create new card registration
* @param \MangoPay\CardRegistration $cardRegistration Card
registration object to create
* @return \MangoPay\CardRegistration Card registration object returned
from API
*/
public function Create($cardRegistration) {
return $this->CreateObject('cardregistration_create',
$cardRegistration, '\MangoPay\CardRegistration');
}
/**
* Get card registration
* @param int $cardRegistrationId Card Registration identifier
* @return \MangoPay\CardRegistration Card registration object
returned from API
*/
public function Get($cardRegistrationId) {
return $this->GetObject('cardregistration_get',
$cardRegistrationId, '\MangoPay\CardRegistration');
}
/**
* Update card registration
* @param \MangoPay\CardRegistration $cardRegistration Card
registration object to save
* @return \MangoPay\CardRegistration Card registration object returned
from API
*/
public function Update($cardRegistration) {
return $this->SaveObject('cardregistration_save',
$cardRegistration, '\MangoPay\CardRegistration');
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiCards.inc000064400000003444151160562370022070
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for cards
*/
class ApiCards extends ApiBase {
/**
* Get card
* @param int $cardId Card identifier
* @return \MangoPay\Card object returned from API
*/
public function Get($cardId) {
return $this->GetObject('card_get', $cardId,
'\MangoPay\Card');
}
/**
* Update card
* @param \MangoPay\Card $card Card object to save
* @return \MangoPay\Card Card object returned from API
*/
public function Update($card) {
return $this->SaveObject('card_save', $card,
'\MangoPay\Card');
}
/**
* WARNING!!
* It's temporary entity and it will be removed in the future.
* Please, contact with support before using these features or if you
have any questions.
*
* Create new temporary payment card
* @param \MangoPay\TemporaryPaymentCard $paymentCard Payment card
object to create
* @return \MangoPay\TemporaryPaymentCard Card registration object
returned from API
*/
public function CreateTemporaryPaymentCard($paymentCard) {
return $this->CreateObject('temp_paymentcards_create',
$paymentCard, '\MangoPay\TemporaryPaymentCard');
}
/**
* WARNING!!
* It's temporary entity and it will be removed in the future.
* Please, contact with support before using these features or if you
have any questions.
*
* Get temporary payment card
* @param string $paymentCardId Card identifier
* @return \MangoPay\TemporaryPaymentCard object returned from API
*/
public function GetTemporaryPaymentCard($paymentCardId) {
return $this->GetObject('temp_paymentcards_get',
$paymentCardId, '\MangoPay\TemporaryPaymentCard');
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiClients.inc000064400000001750151160562370022433
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for users
*/
class ApiClients extends ApiBase {
/**
* Get client data for Basic Access Authentication
* @param string $clientId Client identifier
* @param string $clientName Beautiful name for presentation
* @param string $clientEmail Client's email
* @return \MangoPay\Client Client object
*/
public function Create($clientId, $clientName, $clientEmail) {
$urlMethod =
$this->GetRequestUrl('authentication_base');
$requestType =
$this->GetRequestType('authentication_base');
$requestData = array(
'ClientId' => $clientId,
'Name' => $clientName,
'Email' => $clientEmail,
);
$rest = new RestTool(false, $this->_root);
$response = $rest->Request($urlMethod, $requestType,
$requestData);
return $this->CastResponseToEntity($response,
'\MangoPay\Client');
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiEvents.inc000064400000000762151160562370022300
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for cards
*/
class ApiEvents extends ApiBase {
/**
* Get events
* @param \MangoPay\Pagination $pagination Pagination object
* @param \MangoPay\FilterEvents $filter Object to filter data
* @return \MangoPay\Event[] Events list
*/
public function GetAll(& $pagination = null, $filter = null) {
return $this->GetList('events_all', $pagination,
'\MangoPay\Event', null, $filter);
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiHooks.inc000064400000002263151160562370022115
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for hooks and notifications
*/
class ApiHooks extends ApiBase {
/**
* Create new hook
* @param Hook $hook
* @return \MangoPay\Hook Hook object returned from API
*/
public function Create($hook) {
return $this->CreateObject('hooks_create', $hook,
'\MangoPay\Hook');
}
/**
* Get hook
* @param type $hookId Hook identifier
* @return \MangoPay\Hook Wallet object returned from API
*/
public function Get($hookId) {
return $this->GetObject('hooks_get', $hookId,
'\MangoPay\Hook');
}
/**
* Save hook
* @param type $hook Hook object to save
* @return \MangoPay\Hook Hook object returned from API
*/
public function Update($hook) {
return $this->SaveObject('hooks_save', $hook,
'\MangoPay\Hook');
}
/**
* Get all hooks
* @param \MangoPay\Pagination $pagination Pagination object
* @return \MangoPay\Hook[] Array with objects returned from API
*/
public function GetAll(& $pagination = null) {
return $this->GetList('hooks_all', $pagination,
'\MangoPay\Hook');
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiKycDocuments.inc000064400000001077151160562370023444
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for KYC document list
*/
class ApiKycDocuments extends ApiBase {
/**
* Get all KYC documents
* @param \MangoPay\Pagination $pagination Pagination object
* @param \MangoPay\Sorting $sorting Object to sorting data
* @return \MangoPay\KycDocument[] Array with objects returned from API
*/
public function GetAll(& $pagination = null, $sorting = null) {
return $this->GetList('kyc_documents_all',
$pagination, '\MangoPay\KycDocument', null, null, $sorting);
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiOAuth.inc000064400000002173151160562370022052
0ustar00<?php
namespace MangoPay;
/**
* Authentication manager
*/
class ApiOAuth extends ApiBase {
/**
* Get token information to OAuth Authentication
* @return \MangoPay\OAuthToken OAuthToken object with token
information
*/
public function CreateToken() {
$urlMethod =
$this->GetRequestUrl('authentication_oauth');
$requestType =
$this->GetRequestType('authentication_oauth');
$requestData = array(
'grant_type' => 'client_credentials'
);
$rest = new RestTool(false, $this->_root);
$authHlp = new AuthenticationHelper($this->_root);
$urlDetails = parse_url($this->_root->Config->BaseUrl);
$rest->AddRequestHttpHeader('Host: ' .
@$urlDetails['host']);
$rest->AddRequestHttpHeader('Authorization: Basic ' .
$authHlp->GetHttpHeaderBasicKey());
$rest->AddRequestHttpHeader('Content-Type:
application/x-www-form-urlencoded');
$response = $rest->Request($urlMethod, $requestType,
$requestData);
return $this->CastResponseToEntity($response,
'\MangoPay\OAuthToken');
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiPayIns.inc000064400000005666151160562370022247
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for pay-ins
*/
class ApiPayIns extends ApiBase {
/**
* Create new pay-in object
* @param \MangoPay\PayIn $payIn \MangoPay\PayIn object
* @return \MangoPay\PayIn Object returned from API
*/
public function Create($payIn) {
$paymentKey = $this->GetPaymentKey($payIn);
$executionKey = $this->GetExecutionKey($payIn);
return $this->CreateObject('payins_' . $paymentKey .
'-' . $executionKey . '_create', $payIn,
'\MangoPay\PayIn');
}
/**
* Get pay-in object
* @param $payInId Pay-in identifier
* @return \MangoPay\PayIn Object returned from API
*/
public function Get($payInId) {
return $this->GetObject('payins_get', $payInId,
'\MangoPay\PayIn');
}
/**
* Create refund for pay-in object
* @param type $payInId Pay-in identifier
* @param \MangoPay\Refund $refund Refund object to create
* @return \MangoPay\Refund Object returned by REST API
*/
public function CreateRefund($payInId, $refund) {
return $this->CreateObject('payins_createrefunds',
$refund, '\MangoPay\Refund', $payInId);
}
/**
* Get refund for pay-in object
* @param type $payInId Pay-in identifier
* @return \MangoPay\Refund Object returned by REST API
*/
public function GetRefund($payInId) {
return $this->GetObject('payins_getrefunds', $payInId,
'\MangoPay\Refund');
}
/**
* WARNING!!
* It's temporary entity and it will be removed in the future.
* Please, contact with support before using these features or if you
have any questions.
*
* Create new temporary immediate pay-in
* @param \MangoPay\TemporaryImmediatePayIn $immediatePayIn Immediate
pay-in object to create
* @return \MangoPay\TemporaryImmediatePayIn Immediate pay-in object
returned from API
*/
public function CreateTemporaryImmediatePayIn($immediatePayIn) {
return
$this->CreateObject('temp_immediatepayins_create',
$immediatePayIn, '\MangoPay\TemporaryImmediatePayIn');
}
private function GetPaymentKey($payIn) {
if (!isset($payIn->PaymentDetails) ||
!is_object($payIn->PaymentDetails))
throw new Exception ('Payment is not defined or it is not
object type');
$className = str_replace('MangoPay\\PayInPaymentDetails',
'', get_class($payIn->PaymentDetails));
return strtolower($className);
}
private function GetExecutionKey($payIn) {
if (!isset($payIn->ExecutionDetails) ||
!is_object($payIn->ExecutionDetails))
throw new Exception ('Execution is not defined or it is
not object type');
$className =
str_replace('MangoPay\\PayInExecutionDetails', '',
get_class($payIn->ExecutionDetails));
return strtolower($className);
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiPayOuts.inc000064400000002161151160562370022433
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for pay-outs
*/
class ApiPayOuts extends ApiBase {
/**
* Create new pay-out
* @param PayOut $payOut
* @return \MangoPay\PayOut Object returned from API
*/
public function Create($payOut) {
$paymentKey = $this->GetPaymentKey($payOut);
return $this->CreateObject('payouts_' . $paymentKey .
'_create', $payOut, '\MangoPay\PayOut');
}
/**
* Get pay-out object
* @param $payOutId PayOut identifier
* @return \MangoPay\PayOut Object returned from API
*/
public function Get($payOutId) {
return $this->GetObject('payouts_get', $payOutId,
'\MangoPay\PayOut');
}
private function GetPaymentKey($payOut) {
if (!isset($payOut->MeanOfPaymentDetails) ||
!is_object($payOut->MeanOfPaymentDetails))
throw new Exception('Mean of payment is not defined or it
is not object type');
$className =
str_replace('MangoPay\\PayOutPaymentDetails', '',
get_class($payOut->MeanOfPaymentDetails));
return strtolower($className);
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiRefunds.inc000064400000000627151160562370022442
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for refunds
*/
class ApiRefunds extends ApiBase {
/**
* Get refund object
* @param string $refundId Refund Id
* @return \MangoPay\Refund Refund object returned from API
*/
public function Get($refundId) {
return $this->GetObject('refunds_get', $refundId,
'\MangoPay\Refund');
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiTransfers.inc000064400000002670151160562370023003
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for transfers
*/
class ApiTransfers extends ApiBase {
/**
* Create new transfer
* @param \MangoPay\Transfer $transfer
* @return \MangoPay\Transfer Transfer object returned from API
*/
public function Create($transfer) {
return $this->CreateObject('transfers_create',
$transfer, '\MangoPay\Transfer');
}
/**
* Get transfer
* @param type $transferId Transfer identifier
* @return \MangoPay\Transfer Transfer object returned from API
*/
public function Get($transfer) {
return $this->GetObject('transfers_get', $transfer,
'\MangoPay\Transfer');
}
/**
* Create refund for transfer object
* @param type $transferId Transfer identifier
* @param \MangoPay\Refund $refund Refund object to create
* @return \MangoPay\Refund Object returned by REST API
*/
public function CreateRefund($transferId, $refund) {
return $this->CreateObject('transfers_createrefunds',
$refund, '\MangoPay\Refund', $transferId);
}
/**
* Get refund for transfer object
* @param type $transferId Transfer identifier
* @return \MangoPay\Refund Object returned by REST API
*/
public function GetRefund($transferId) {
return $this->GetObject('transfers_getrefunds',
$transferId, '\MangoPay\Refund');
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiUsers.inc000064400000024164151160562370022137
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for users
*/
class ApiUsers extends ApiBase {
/**
* Create a new user
* @param UserLegal/UserNatural $user
* @return UserLegal/UserNatural User object returned from API
*/
public function Create($user) {
$className = get_class($user);
if ($className == 'MangoPay\UserNatural')
$methodKey = 'users_createnaturals';
elseif ($className == 'MangoPay\UserLegal')
$methodKey = 'users_createlegals';
else
throw new Exception('Wrong entity class for user');
$response = $this->CreateObject($methodKey, $user);
return $this->GetUserResponse($response);
}
/**
* Get all users
* @param \MangoPay\Pagination $pagination Pagination object
* @return array Array with users
*/
public function GetAll(& $pagination = null) {
$usersList = $this->GetList('users_all',
$pagination);
$users = array();
if (is_array($usersList)) {
foreach ($usersList as $user) {
array_push($users, $this->GetUserResponse($user));
}
}
return $users;
}
/**
* Get natural or legal user by ID
* @param Int/GUID $userId User identifier
* @return UserLegal/UserNatural User object returned from API
*/
public function Get($userId) {
$response = $this->GetObject('users_get', $userId);
return $this->GetUserResponse($response);
}
/**
* Get natural user by ID
* @param Int/GUID $userId User identifier
* @return UserLegal/UserNatural User object returned from API
*/
public function GetNatural($userId) {
$response = $this->GetObject('users_getnaturals',
$userId);
return $this->GetUserResponse($response);
}
/**
* Get legal user by ID
* @param Int/GUID $userId User identifier
* @return UserLegal/UserNatural User object returned from API
*/
public function GetLegal($userId) {
$response = $this->GetObject('users_getlegals',
$userId);
return $this->GetUserResponse($response);
}
/**
* Save user
* @param UserLegal/UserNatural $user
* @return UserLegal/UserNatural User object returned from API
*/
public function Update($user) {
$className = get_class($user);
if ($className == 'MangoPay\UserNatural')
$methodKey = 'users_savenaturals';
elseif ($className == 'MangoPay\UserLegal')
$methodKey = 'users_savelegals';
else
throw new Exception('Wrong entity class for user');
$response = $this->SaveObject($methodKey, $user);
return $this->GetUserResponse($response);
}
/**
* Create bank account for user
* @param int $userId User Id
* @param \MangoPay\BankAccount $bankAccount Entity of bank account
object
* @return \MangoPay\BankAccount Create bank account object
*/
public function CreateBankAccount($userId, $bankAccount) {
$type = $this->GetBankAccountType($bankAccount);
return $this->CreateObject('users_createbankaccounts_'
. $type, $bankAccount, '\MangoPay\BankAccount', $userId);
}
/**
* Get all bank accounts for user
* @param int $userId User Id
* @param \MangoPay\Pagination $pagination Pagination object
* @param \MangoPay\Sorting $sorting Object to sorting data
* @return array Array with bank account entities
*/
public function GetBankAccounts($userId, & $pagination = null,
$sorting = null) {
return $this->GetList('users_allbankaccount',
$pagination, 'MangoPay\BankAccount', $userId, null, $sorting);
}
/**
* Get bank account for user
* @param int $userId User Id
* @param int $bankAccountId Bank account Id
* @return \MangoPay\BankAccount Entity of bank account object
*/
public function GetBankAccount($userId, $bankAccountId) {
return $this->GetObject('users_getbankaccount',
$userId, 'MangoPay\BankAccount', $bankAccountId);
}
/**
* Get all wallets for user
* @param int $userId User Id
* @param \MangoPay\Pagination $pagination Pagination object
* @param \MangoPay\Sorting $sorting Object to sorting data
* @return \MangoPay\Wallet[] Array with objects returned from API
*/
public function GetWallets($userId, & $pagination = null, $sorting
= null) {
return $this->GetList('users_allwallets', $pagination,
'MangoPay\Wallet', $userId, null, $sorting);
}
/**
* Get all transactions for user
* @param int $userId User Id
* @param \MangoPay\Pagination $pagination Pagination object
* @param \MangoPay\FilterTransactions $filter Object to filter data
* @param \MangoPay\Sorting $sorting Object to sorting data
* @return \MangoPay\Transaction[] Transactions for user returned from
API
*/
public function GetTransactions($userId, & $pagination = null,
$filter = null, $sorting = null) {
return $this->GetList('users_alltransactions',
$pagination, '\MangoPay\Transaction', $userId, $filter,
$sorting);
}
/**
* Get all cards for user
* @param int $userId User Id
* @param \MangoPay\Pagination $pagination Pagination object
* @param \MangoPay\Sorting $sorting Object to sorting data
* @return \MangoPay\Card[] Cards for user returned from API
*/
public function GetCards($userId, & $pagination = null, $sorting =
null) {
return $this->GetList('users_allcards', $pagination,
'\MangoPay\Card', $userId, null, $sorting);
}
/**
* Create new KYC document
* @param int $userId User Id
* @param \MangoPay\KycDocument $kycDocument
* @return \MangoPay\KycDocument Document returned from API
*/
public function CreateKycDocument($userId, $kycDocument) {
return $this->CreateObject('kyc_documents_create',
$kycDocument, '\MangoPay\KycDocument', $userId);
}
/**
* Get all KYC documents for user
* @param int $userId User Id
* @param \MangoPay\Pagination $pagination Pagination object
* @param \MangoPay\Sorting $sorting Object to sorting data
* @return array Array with KYC documents entities
*/
public function GetKycDocuments($userId, & $pagination = null,
$sorting = null) {
return $this->GetList('users_allkycdocuments',
$pagination, 'MangoPay\KycDocument', $userId, null, $sorting);
}
/**
* Get KYC document
* @param int $userId User Id
* @param string $kycDocumentId Document identifier
* @return \MangoPay\KycDocument Document returned from API
*/
public function GetKycDocument($userId, $kycDocumentId) {
return $this->GetObject('kyc_documents_get', $userId,
'\MangoPay\KycDocument', $kycDocumentId);
}
/**
* Save KYC document
* @param int $userId User Id
* @param \MangoPay\KycDocument $kycDocument Document to save
* @return \MangoPay\KycDocument Document returned from API
*/
public function UpdateKycDocument($userId, $kycDocument) {
return $this->SaveObject('kyc_documents_save',
$kycDocument, '\MangoPay\KycDocument', $userId);
}
/**
* Create page for Kyc document
* @param int $userId User Id
* @param \MangoPay\KycPage $page Kyc
*/
public function CreateKycPage($userId, $kycDocumentId, $kycPage) {
try{
$this->CreateObject('kyc_page_create', $kycPage,
null, $userId, $kycDocumentId);
} catch (\MangoPay\ResponseException $exc) {
if ($exc->getCode() != 204)
throw $exc;
}
}
/**
* Create page for Kyc document from file
* @param int $userId User Id
* @param \MangoPay\KycPage $page Kyc
*/
public function CreateKycPageFromFile($userId, $kycDocumentId, $file)
{
$filePath = $file;
if (is_array($file)) {
$filePath = $file['tmp_name'];
}
if (empty($filePath))
throw new \MangoPay\Exception('Path of file cannot be
empty');
if (!file_exists($filePath))
throw new \MangoPay\Exception('File not exist');
$kycPage = new \MangoPay\KycPage();
$kycPage->File = base64_encode(file_get_contents($filePath));
if (empty($kycPage->File))
throw new \MangoPay\Exception('Content of the file cannot
be empty');
$this->CreateKycPage($userId, $kycDocumentId, $kycPage);
}
/**
* Get correct user object
* @param object $response Response from API
* @return UserLegal/UserNatural User object returned from API
* @throws \MangoPay\Exception If occur unexpected response from API
*/
private function GetUserResponse($response) {
if (isset($response->PersonType)) {
switch ($response->PersonType) {
case PersonType::Natural:
return $this->CastResponseToEntity($response,
'\MangoPay\UserNatural');
case PersonType::Legal:
return $this->CastResponseToEntity($response,
'\MangoPay\UserLegal');
default:
throw new Exception('Unexpected response. Wrong
PersonType value');
}
} else {
throw new Exception('Unexpected response. Missing
PersonType property');
}
}
private function GetBankAccountType($bankAccount) {
if (!isset($bankAccount->Details) ||
!is_object($bankAccount->Details))
throw new Exception ('Details is not defined or it is not
object type');
$className = str_replace('MangoPay\\BankAccountDetails',
'', get_class($bankAccount->Details));
return strtolower($className);
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/tools/apiWallets.inc000064400000003025151160562370022442
0ustar00<?php
namespace MangoPay;
/**
* Class to management MangoPay API for wallets
*/
class ApiWallets extends ApiBase {
/**
* Create new wallet
* @param Wallet $wallet
* @return \MangoPay\Wallet Wallet object returned from API
*/
public function Create($wallet) {
return $this->CreateObject('wallets_create', $wallet,
'\MangoPay\Wallet');
}
/**
* Get wallet
* @param int $walletId Wallet identifier
* @return \MangoPay\Wallet Wallet object returned from API
*/
public function Get($walletId) {
return $this->GetObject('wallets_get', $walletId,
'\MangoPay\Wallet');
}
/**
* Save wallet
* @param Wallet $wallet Wallet object to save
* @return \MangoPay\Wallet Wallet object returned from API
*/
public function Update($wallet) {
return $this->SaveObject('wallets_save', $wallet,
'\MangoPay\Wallet');
}
/**
* Get transactions for the wallet
* @param type $walletId Wallet identifier
* @param \MangoPay\Pagination $pagination Pagination object
* @param \MangoPay\FilterTransactions $filter Object to filter data
* @param \MangoPay\Sorting $sorting Object to sorting data
* @return \MangoPay\Transaction[] Transactions for wallet returned
from API
*/
public function GetTransactions($walletId, & $pagination = null,
$filter = null, $sorting = null) {
return $this->GetList('wallets_alltransactions',
$pagination, '\MangoPay\Transaction', $walletId, $filter,
$sorting);
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/tools/authenticationHelper.inc000064400000004754151160562370024526
0ustar00<?php
namespace MangoPay;
class AuthenticationHelper {
/**
* Root/parent instance that holds the OAuth token and Configuration
instance
* @var \MangoPay\MangoPayApi
*/
private $_root;
/**
* Constructor
* @param \MangoPay\MangoPayApi Root/parent instance that holds the
OAuth token and Configuration instance
*/
function __construct($root) {
$this->_root = $root;
}
/**
* Get HTTP header value with authorization string
* @return string Authorization string
*/
public function GetHttpHeaderKey(){
return $this->GetHttpHeaderStrong();
}
/**
* Get basic key for HTTP header
* @return string
* @throws \MangoPay\Exception If MangoPay_ClientId or
MangoPay_ClientPassword is not defined
*/
public function GetHttpHeaderBasicKey() {
if (is_null($this->_root->Config->ClientId) ||
strlen($this->_root->Config->ClientId) == 0)
throw new Exception ('MangoPayApi.Config.ClientId is not
set.');
if (is_null($this->_root->Config->ClientPassword) ||
strlen($this->_root->Config->ClientPassword) == 0)
throw new Exception ('MangoPayApi.Config.ClientPassword is
not set.');
$signature = $this->_root->Config->ClientId .
':' . $this->_root->Config->ClientPassword;
return base64_encode($signature);
}
/**
* Get HTTP header value with authorization string for basic
authentication
*
* @return string Value for HTTP header with authentication string
* @throws \MangoPay\Exception If required constants are not defined.
*/
private function GetHttpHeaderBasic() {
return 'Authorization: Basic ' .
$this->GetHttpHeaderBasicKey();
}
/**
* Get HTTP header value with authorization string for strong
authentication
*
* @return string Value for HTTP header with authentication string
* @throws \MangoPay\Exception If OAuth token is not created (or is
invalid) for strong authentication.
*/
private function GetHttpHeaderStrong() {
$token = $this->_root->OAuthTokenManager->GetToken();
if (is_null($token) || !isset($token->access_token) ||
!isset($token->token_type))
throw new Exception ('OAuth token is not created (or is
invalid) for strong authentication');
return 'Authorization: ' . $token->token_type . '
' . $token->access_token;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/authorizationTokenManager.inc000064400000003465151160562370025541
0ustar00<?php
namespace MangoPay;
/**
* Authorization token manager
*/
class AuthorizationTokenManager extends ApiBase {
/**
* Storage object
* @var \MangoPay\IStorageStrategy
*/
private $_storageStrategy;
function __construct($root) {
$this->_root = $root;
$this->RegisterCustomStorageStrategy(new
DefaultStorageStrategy($this->_root->Config));
}
/**
* Gets the current authorization token.
* In the very first call, this method creates a new token before
returning.
* If currently stored token is expired, this method creates a new
one.
* @return \MangoPay\OAuthToken Valid OAuthToken instance.
*/
public function GetToken() {
$token = $this->_storageStrategy->get();
if (is_null($token) || $token->IsExpired()) {
$this->storeToken($this->_root->AuthenticationManager->createToken());
}
return $this->_storageStrategy->get();
}
/**
* Stores authorization token passed as an argument in the underlying
* storage strategy implementation.
* @param \MangoPay\OAuthToken $token Token instance to be stored.
*/
public function StoreToken($token) {
$this->_storageStrategy->Store($token);
}
/**
* Registers custom storage strategy implementation.
* By default, the DefaultStorageStrategy instance is used.
* There is no need to explicitly call this method until some more
complex
* storage implementation is needed.
* @param \MangoPay\IStorageStrategy $customStorageStrategy
IStorageStrategy interface implementation.
*/
public function RegisterCustomStorageStrategy($customStorageStrategy)
{
$this->_storageStrategy = $customStorageStrategy;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/defaultStorageStrategy.inc000064400000004115151160562370025032
0ustar00<?php
namespace MangoPay;
/**
* Default storage strategy implementation.
*/
class DefaultStorageStrategy implements IStorageStrategy {
private $_prefixContent = '<?php exit(); ?>';
private $_fileName = 'MangoPaySdkStorage.tmp.php';
private $_config;
function __construct($config) {
$this->_config = $config;
}
/**
* Gets the current authorization token.
* @return \MangoPay\OAuthToken Currently stored token instance or
null.
*/
public function Get() {
$filename = $this->GetPathToFile();
if (!file_exists($filename))
return null;
$data = file_get_contents($filename);
if ($data === false)
return null;
$serialized = str_replace($this->_prefixContent, '',
$data);
return unserialize($serialized);
}
/**
* Stores authorization token passed as an argument.
* @param \MangoPay\OAuthToken $token Token instance to be stored.
*/
public function Store($token) {
if (!is_writable($this->GetPathToTemporaryFolder()))
throw new \MangoPay\Exception('Cannot create or write to
file ' . $this->GetPathToTemporaryFolder());
$serialized = serialize($token);
$result = file_put_contents($this->GetPathToFile(),
$this->_prefixContent . $serialized, LOCK_EX);
if ($result === false)
throw new \MangoPay\Exception('Cannot put token to
file');
}
/**
* Get path to storage file
* @return string
*/
private function GetPathToFile() {
return $this->GetPathToTemporaryFolder() . DIRECTORY_SEPARATOR .
$this->_fileName;
}
/**
* Get path to temporary folder
* @return string
*/
private function GetPathToTemporaryFolder() {
if (is_null($this->_config->TemporaryFolder))
throw new \MangoPay\Exception('Path to temporary folder is
not defined');
return $this->_config->TemporaryFolder;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/enums.inc000064400000004333151160562370021467
0ustar00<?php
namespace MangoPay;
/**
* Request type enum
*/
class RequestType {
const GET = 'GET';
const POST = 'POST';
const PUT = 'PUT';
const DELETE = 'DELETE';
}
/**
* Person type for users
*/
class PersonType {
const Natural = 'NATURAL';
const Legal = 'LEGAL';
}
/**
* Event types
*/
class EventType {
const KycCreated = "KYC_CREATED";
const KycSucceeded = "KYC_SUCCEEDED";
const KycFailed = "KYC_FAILED";
const KycValidationAsked = "KYC_VALIDATION_ASKED ";
const PayinNormalCreated = "PAYIN_NORMAL_CREATED";
const PayinNormalSucceeded = "PAYIN_NORMAL_SUCCEEDED";
const PayinNormalFailed = "PAYIN_NORMAL_FAILED";
const PayoutNormalCreated = "PAYOUT_NORMAL_CREATED";
const PayoutNormalSucceeded = "PAYOUT_NORMAL_SUCCEEDED";
const PayoutNormalFailed = "PAYOUT_NORMAL_FAILED";
const TransferNormalCreated = "TRANSFER_NORMAL_CREATED";
const TransferNormalSucceeded = "TRANSFER_NORMAL_SUCCEEDED";
const TransferNormalFailed = "TRANSFER_NORMAL_FAILED";
const PayinRefundCreated = "PAYIN_REFUND_CREATED";
const PayinRefundSucceeded = "PAYIN_REFUND_SUCCEEDED";
const PayinRefundFailed = "PAYIN_REFUND_FAILED";
const PayoutRefundCreated = "PAYOUT_REFUND_CREATED";
const PayoutRefundSucceeded = "PAYOUT_REFUND_SUCCEEDED";
const PayoutRefundFailed = "PAYOUT_REFUND_FAILED";
const TransferRefundCreated = "TRANSFER_REFUND_CREATED";
const TransferRefundSucceeded = "TRANSFER_REFUND_SUCCEEDED";
const TransferRefundFailed = "TRANSFER_REFUND_FAILED";
}
/**
* KYC document types
*/
class KycDocumentType {
const IdentityProof = 'IDENTITY_PROOF';
const RegistrationProof = 'REGISTRATION_PROOF';
const ArticlesOfAssociation = 'ARTICLES_OF_ASSOCIATION';
const ShareholderDeclaration = 'SHAREHOLDER_DECLARATION';
const AddressProof = 'ADDRESS_PROOF';
}
/**
* KYC document statuses
*/
class KycDocumentStatus{
const Created = 'CREATED';
const ValidationAsked = 'VALIDATION_ASKED';
const Validated = 'VALIDATED';
const Refused = 'REFUSED';
}
class CardValidity {
const Unknown = 'UNKNOWN';
const Valid = 'VALID';
const Invalid = 'INVALID';
}
class SortDirection {
const DESC = 'desc';
const ASC = 'asc';
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/filterBase.inc000064400000000630151160562400022406
0ustar00<?php
namespace MangoPay;
/**
* Base filter object
*/
class FilterBase extends Dto {
/**
* Start date in unix format:
* return only records that have CreationDate BEFORE this date
* @var time
*/
public $BeforeDate;
/**
* End date in unix format:
* return only records that have CreationDate AFTER this date
* @var time
*/
public $AfterDate;
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/filterEvents.inc000064400000000304151160562400022776
0ustar00<?php
namespace MangoPay;
/**
* Filter for event list
*/
class FilterEvents extends FilterBase {
/**
* Event type
* @var \MangoPay\EventType
*/
public $EventType;
}
extensions/plg_hikashoppayment_mangopay/mangolib/tools/filterTransactions.inc000064400000001061151160562400024203
0ustar00<?php
namespace MangoPay;
/**
* Filter for transaction list
*/
class FilterTransactions extends FilterBase {
/**
* TransactionStatus {CREATED, SUCCEEDED, FAILED}
* @var string
*/
public $Status;
/**
* TransactionType {PAYIN, PAYOUT, TRANSFER}
* @var string
*/
public $Type;
/**
* TransactionNature { REGULAR, REFUND, REPUDIATION }
* @var string
*/
public $Nature;
/**
* TransactionDirection {DEBIT, CREDIT}
* @var string
*/
public $Direction;
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/index.html000064400000000032151160562400021624
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_mangopay/mangolib/tools/iStorageStrategy.inc000064400000000707151160562400023633
0ustar00<?php
namespace MangoPay;
/**
* Storage strategy interface.
*/
interface IStorageStrategy {
/**
* Gets the current authorization token.
* @return \MangoPay\OAuthToken Currently stored token instance or
null.
*/
function Get();
/**
* Stores authorization token passed as an argument.
* @param \MangoPay\OAuthToken $token Token instance to be stored.
*/
function Store($token);
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/logs.inc000064400000000460151160562400021273
0ustar00<?php
namespace MangoPay;
/**
* Class to manage debug logs in MangoPay SDK
*/
class Logs {
public static function Debug($message, $data){
print '<pre>';
print $message . ': ';
print_r($data);
print
'<br/>-------------------------------</pre>';
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/restTool.inc000064400000023514151160562400022147
0ustar00<?php
namespace MangoPay;
/**
* Class to prepare HTTP request, call the request and decode the response
*/
class RestTool {
/**
* Root/parent instance that holds the OAuthToken and Configuration
instance
* @var \MangoPay\MangoPayApi
*/
private $_root;
/**
* Variable to flag that in request authentication data are required
* @var bool
*/
private $_authRequired;
/**
* Array with HTTP header to send with request
* @var array
*/
private $_requestHttpHeaders;
/**
* cURL handle
* @var resource
*/
private $_curlHandle;
/**
* Request type for current request
* @var RequestType
*/
private $_requestType;
/**
* Array with data to pass in the request
* @var array
*/
private $_requestData;
/**
* Code get from response
* @var int
*/
private $_responseCode;
/**
* Pagination object
* @var MangoPay\Pagination
*/
private $_pagination;
private $_requestUrl;
private static $_JSON_HEADER = 'Content-Type:
application/json';
/**
* Constructor
* @param bool $authRequired Variable to flag that in request the
authentication data are required
* @param \MangoPay\MangoPayApi Root/parent instance that holds the
OAuthToken and Configuration instance
*/
function __construct($authRequired = true, $root) {
$this->_authRequired = $authRequired;
$this->_root = $root;
}
public function AddRequestHttpHeader($httpHeader) {
if (is_null($this->_requestHttpHeaders))
$this->_requestHttpHeaders = array();
array_push($this->_requestHttpHeaders, $httpHeader);
}
/**
* Call request to MangoPay API
* @param string $urlMethod Type of method in REST API
* @param \MangoPay\RequestType $requestType Type of request
* @param array $requestData Data to send in request
* @param \MangoPay\Pagination $pagination Pagination object
* @param array Array with additional parameters to URL. Expected keys:
"sort" and "filter"
* @return object Response data
*/
public function Request($urlMethod, $requestType, $requestData = null,
& $pagination = null, $additionalUrlParams = null) {
$this->_requestType = $requestType;
$this->_requestData = $requestData;
$this->BuildRequest($urlMethod, $pagination,
$additionalUrlParams);
$responseResult = $this->RunRequest();
if(!is_null($pagination)){
$pagination = $this->_pagination;
}
return $responseResult;
}
/**
* Execute request and check response
* @return object Response data
* @throws Exception If cURL has error
*/
private function RunRequest() {
$result = curl_exec($this->_curlHandle);
if ($result === false && curl_errno($this->_curlHandle)
!= 0)
throw new Exception('cURL error: ' .
curl_error($this->_curlHandle));
$this->_responseCode = (int)curl_getinfo($this->_curlHandle,
CURLINFO_HTTP_CODE);
curl_close($this->_curlHandle);
$logClass = $this->_root->Config->LogClass;
if ($this->_root->Config->DebugMode)
$logClass::Debug('Response JSON', $result);
$response = json_decode($result);
if ($this->_root->Config->DebugMode)
$logClass::Debug('Response object', $response);
$this->CheckResponseCode($response);
return $response;
}
/**
* Prepare all parameter to request
* @param String $urlMethod Type of method in REST API
* @throws Exception If some parameters are not set
*/
private function BuildRequest($urlMethod, $pagination,
$additionalUrlParams = null) {
$urlTool = new UrlTool($this->_root);
$restUrl = $urlTool->GetRestUrl($urlMethod,
$this->_authRequired, $pagination, $additionalUrlParams);
$this->_requestUrl = $urlTool->GetFullUrl($restUrl);
$logClass = $this->_root->Config->LogClass;
if ($this->_root->Config->DebugMode)
$logClass::Debug('FullUrl', $this->_requestUrl);
$this->_curlHandle = curl_init($this->_requestUrl);
if ($this->_curlHandle === false)
throw new Exception('Cannot initialize cURL
session');
curl_setopt($this->_curlHandle, CURLOPT_RETURNTRANSFER, true);
if ($this->_root->Config->CertificatesFilePath ==
'')
curl_setopt($this->_curlHandle, CURLOPT_SSL_VERIFYPEER,
false);
else {
curl_setopt($this->_curlHandle, CURLOPT_SSL_VERIFYPEER,
true);
curl_setopt($this->_curlHandle, CURLOPT_CAINFO,
$this->_root->Config->CertificatesFilePath);
}
if (!is_null($pagination)) {
curl_setopt($this->_curlHandle, CURLOPT_HEADERFUNCTION,
array(&$this, 'ReadResponseHeader'));
$this->_pagination = $pagination;
}
switch ($this->_requestType) {
case RequestType::POST:
curl_setopt($this->_curlHandle, CURLOPT_POST, true);
break;
case RequestType::PUT:
curl_setopt($this->_curlHandle, CURLOPT_CUSTOMREQUEST,
'PUT');
break;
case RequestType::DELETE:
curl_setopt($this->_curlHandle, CURLOPT_CUSTOMREQUEST,
"DELETE");
break;
}
if ($this->_root->Config->DebugMode)
$logClass::Debug('RequestType',
$this->_requestType);
$httpHeaders = $this->GetHttpHeaders();
curl_setopt($this->_curlHandle, CURLOPT_HTTPHEADER,
$httpHeaders);
if ($this->_root->Config->DebugMode)
$logClass::Debug('HTTP Headers', $httpHeaders);
if (!is_null($this->_requestData)) {
if ($this->_root->Config->DebugMode)
$logClass::Debug('RequestData object',
$this->_requestData);
// encode to json if needed
if (in_array(self::$_JSON_HEADER, $httpHeaders)) {
$this->_requestData =
json_encode($this->_requestData);
if ($this->_root->Config->DebugMode)
$logClass::Debug('RequestData JSON',
$this->_requestData);
}
curl_setopt($this->_curlHandle, CURLOPT_POSTFIELDS,
$this->_requestData);
}
}
/**
* Callback to read response headers
* @param resource $handle cURL handle
* @param string $header Header from response
* @return int Length of header
*/
private function ReadResponseHeader($handle, $header) {
$logClass = $this->_root->Config->LogClass;
if ($this->_root->Config->DebugMode)
$logClass::Debug('Response headers', $header);
if (strpos($header, 'X-Number-Of-Pages:') !== false) {
$this->_pagination->TotalPages =
(int)trim(str_replace('X-Number-Of-Pages:', '',
$header));
}
if (strpos($header, 'X-Number-Of-Items:') !== false) {
$this->_pagination->TotalItems =
(int)trim(str_replace('X-Number-Of-Items:', '',
$header));
}
if (strpos($header, 'Link: ') !== false) {
$strLinks = trim(str_replace('Link:', '',
$header));
$arrayLinks = explode(',', $strLinks);
if ($arrayLinks !== false) {
$this->_pagination->Links = array();
foreach ($arrayLinks as $link) {
$tmp = str_replace(array('<"',
'">', ' rel="', '"'),
'', $link);
$oneLink = explode(';', $tmp);
if (is_array($oneLink) && isset($oneLink[0])
&& isset($oneLink[1]))
$this->_pagination->Links[$oneLink[1]] =
$oneLink[0];
}
}
}
return strlen($header);
}
/**
* Get HTTP header to use in request
* @return array Array with HTTP headers
*/
private function GetHttpHeaders(){
// return if already created...
if (!is_null($this->_requestHttpHeaders))
return $this->_requestHttpHeaders;
// ...or initialize with default headers
$this->_requestHttpHeaders = array();
// content type
array_push($this->_requestHttpHeaders, self::$_JSON_HEADER);
// Authentication http header
if ($this->_authRequired) {
$authHlp = new AuthenticationHelper($this->_root);
array_push($this->_requestHttpHeaders,
$authHlp->GetHttpHeaderKey());
}
return $this->_requestHttpHeaders;
}
/**
* Check response code
* @param object $response Response from REST API
* @throws ResponseException If response code not OK
*/
private function CheckResponseCode($response){
if ($this->_responseCode != 200) {
if (isset($response) && is_object($response) &&
isset($response->Message)) {
$error = new Error();
$error->Message = $response->Message;
$error->Errors = property_exists($response,
'Errors')
? $response->Errors
: property_exists($response, 'errors') ?
$response->errors : null;
throw new ResponseException($this->_requestUrl,
$this->_responseCode, $error);
} else
throw new ResponseException($this->_requestUrl,
$this->_responseCode);
}
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/sorting.inc000064400000002271151160562400022016
0ustar00<?php
namespace MangoPay;
/**
* Base sorting object
*/
class Sorting {
/**
* Fields separator in sort parameters in URL
*/
const SortFieldSeparator = "_";
/**
* Fields separator in sort parameters in URL
*/
const SortUrlParameterName = "Sort";
/**
* Array with fileds to sort
* @var type Array
*/
private $_sortFields;
/**
* Add filed to sort
* @param string $filedName Property name to sort
* @param \MangoPay\SortDirection $sortDirection Sort direction
*/
public function AddFiled($filedName, $sortDirection) {
$this->_sortFields[$filedName] = $sortDirection;
}
/**
* Get sort parametrs to URL
* @return array
*/
public function GetSortParameter() {
return array(self::SortUrlParameterName =>
$this->_getFields());
}
private function _getFields() {
$sortValues = "";
foreach ($this->_sortFields as $key => $value) {
if (!empty($sortValues))
$sortValues .= self::SortFieldSeparator;
$sortValues .= $key . ":" . $value;
}
return $sortValues;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/tools/urlTool.inc000064400000004026151160562410021772
0ustar00<?php
namespace MangoPay;
class UrlTool {
/**
* Root/parent instance that holds the OAuthToken and Configuration
instance
* @var \MangoPay\MangoPayApi
*/
private $_root;
/**
* Constructor
* @param \MangoPay\MangoPayApi Root/parent instance that holds the
OAuthToken and Configuration instance
*/
function __construct($root) {
$this->_root = $root;
}
private function GetHost(){
if (is_null($this->_root->Config->BaseUrl) ||
strlen($this->_root->Config->BaseUrl) == 0)
throw new Exception ('Neither MangoPay_BaseUrl constant
nor BaseUrl config setting is defined.');
$baseUrl = $this->_root->Config->BaseUrl;
if (strpos($baseUrl, '/', strlen($baseUrl) - 1 ))
$baseUrl = substr ($baseUrl, 0, strlen($baseUrl) - 1);
return $baseUrl;
}
public function GetRestUrl($urlKey, $addClientId = true, $pagination =
null, $additionalUrlParams = null) {
if (!$addClientId) {
$url = '/v2' . $urlKey;
} else {
$url = '/v2/' .
$this->_root->Config->ClientId . $urlKey;
}
$paramsAdded = false;
if (!is_null($pagination)) {
$url .= '?page=' . $pagination->Page .
'&per_page=' . $pagination->ItemsPerPage;
$paramsAdded = true;
}
if (!is_null($additionalUrlParams)) {
if (array_key_exists("sort", $additionalUrlParams)) {
$url .= $paramsAdded ? '&' : '?';
$url .=
http_build_query($additionalUrlParams["sort"]);
$paramsAdded = true;
}
if (array_key_exists("filter", $additionalUrlParams))
{
$url .= $paramsAdded ? '&' : '?';
$url .=
http_build_query($additionalUrlParams["filter"]);
$paramsAdded = true;
}
}
return $url;
}
public function GetFullUrl($restUrl) {
return $this->GetHost() . $restUrl;
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/bankAccountDetails.inc000064400000000215151160562410024070
0ustar00<?php
namespace MangoPay;
/**
* Marker interface for classes with details option in BankAccount entity
*/
interface BankAccountDetails {
}extensions/plg_hikashoppayment_mangopay/mangolib/types/bankAccountDetailsCA.inc000064400000001015151160562410024273
0ustar00<?php
namespace MangoPay;
/**
* Class represents CA bank account type for in BankAccount entity
*/
class BankAccountDetailsCA extends Dto implements BankAccountDetails {
/**
* Bank name
* @var string
*/
public $BankName;
/**
* Institution number
* @var string
*/
public $InstitutionNumber;
/**
* Branch code
* @var string
*/
public $BranchCode;
/**
* Account number
* @var string
*/
public $AccountNumber;
}extensions/plg_hikashoppayment_mangopay/mangolib/types/bankAccountDetailsGB.inc000064400000000527151160562410024307
0ustar00<?php
namespace MangoPay;
/**
* Class represents GB bank account type for in BankAccount entity
*/
class BankAccountDetailsGB extends Dto implements BankAccountDetails {
/**
* Account number
* @var string
*/
public $AccountNumber;
/**
* Sort code
* @var string
*/
public $SortCode;
}extensions/plg_hikashoppayment_mangopay/mangolib/types/bankAccountDetailsIBAN.inc000064400000000504151160562410024523
0ustar00<?php
namespace MangoPay;
/**
* Class represents IBAN bank account type for in BankAccount entity
*/
class BankAccountDetailsIBAN extends Dto implements BankAccountDetails {
/**
* IBAN number
* @var string
*/
public $IBAN;
/**
* BIC
* @var string
*/
public $BIC;
}extensions/plg_hikashoppayment_mangopay/mangolib/types/bankAccountDetailsOTHER.inc000064400000001105151160562410024671
0ustar00<?php
namespace MangoPay;
/**
* Class represents OTHER bank account type for in BankAccount entity
*/
class BankAccountDetailsOTHER extends Dto implements BankAccountDetails {
/**
* Type
* @var string
*/
public $Type;
/**
* The Country associate to the BankAccount,
* ISO 3166-1 alpha-2 format is expected
* @var string
*/
public $Country;
/**
* Valid BIC format
* @var string
*/
public $BIC;
/**
* Account number
* @var string
*/
public $AccountNumber;
}extensions/plg_hikashoppayment_mangopay/mangolib/types/bankAccountDetailsUS.inc000064400000000514151160562410024342
0ustar00<?php
namespace MangoPay;
/**
* Class represents US bank account type for in BankAccount entity
*/
class BankAccountDetailsUS extends Dto implements BankAccountDetails {
/**
* Account number
* @var string
*/
public $AccountNumber;
/**
* ABA
* @var string
*/
public $ABA;
}extensions/plg_hikashoppayment_mangopay/mangolib/types/configuration.inc000064400000002052151160562410023202
0ustar00<?php
namespace MangoPay;
/**
* Configuration settings
*/
class Configuration {
/**
* Client Id
* @var string
*/
public $ClientId;
/**
* Client password
* @var string
*/
public $ClientPassword;
/**
* Base URL to MangoPay API
* @var string
*/
/**Producion URL changes to {public $BaseUrl =
'https://api.mangopay.com';}**/
public $BaseUrl = 'https://api.sandbox.mangopay.com';
/**
* Path to folder with temporary files (with permissions to write)
*/
public $TemporaryFolder = null;
/**
* Absolute path to file holding one or more certificates to verify the
peer with.
* If empty - don't verifying the peer's certificate.
* @var string
*/
public $CertificatesFilePath = '';
/**
* [INTERNAL USAGE ONLY]
* Switch debug mode: log all request and response data
*/
public $DebugMode = false;
/**
* Set the logging class if DebugMode is enabled
*/
public $LogClass = 'MangoPay\Logs';
}extensions/plg_hikashoppayment_mangopay/mangolib/types/dto.inc000064400000001517151160562410021126
0ustar00<?php
namespace MangoPay;
/**
* Abstract class for all DTOs (entities and their composites)
*/
abstract class Dto {
/**
* Get array with mapping which property is object and what type of
object.
* To be overridden in child class if has any sub objects.
* @return array
*/
public function GetSubObjects() { return array(); }
/**
* Get array with mapping which property depends on other property
* To be overridden in child class if has any dependent objects.
* @return array
*/
public function GetDependsObjects() { return array(); }
/**
* Get array with read only properties - not used in response
* To be overridden in child class if has any read-only properties.
* @return array
*/
public function GetReadOnlyProperties() { return array(); }
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/error.inc000064400000000516151160562410021467
0ustar00<?php
namespace MangoPay;
/**
* Class represents error object
*/
class Error {
/**
* Error message
* @var String
* @access public
*/
public $Message;
/**
* Array with errors information
* @var KeyValueArray
* @access public
*/
public $Errors;
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/exceptions/exception.inc000064400000000102151160562410024504
0ustar00<?php
namespace MangoPay;
class Exception extends \Exception {
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/exceptions/index.html000064400000000032151160562410024012
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_mangopay/mangolib/types/exceptions/responseException.inc000064400000003171151160562410026234
0ustar00<?php
namespace MangoPay;
/**
* Response exception class
*/
class ResponseException extends Exception {
/**
* Array with response code and corresponding response message
* @var array
*/
private $_responseCodes = array(
200 => 'OK',
206 => 'PartialContent',
400 => 'Bad request',
401 => 'Unauthorized',
403 => 'Prohibition to use the method',
404 => 'Not found',
405 => 'Method not allowed',
413 => 'Request entity too large',
422 => 'Unprocessable entity',
500 => 'Internal server error',
501 => 'Not implemented'
);
/**
* Error details
* @var Error
*/
private $_errorInfo;
/**
* Request URL
* @var string
*/
public $RequestUrl;
/**
* Construct
* @param int $code Response code
* @param Error $errorInfo Details with the error
*/
function __construct($requestUrl, $code, $errorInfo = null) {
$this->RequestUrl = $requestUrl;
$this->_code = $code;
if (isset($this->_responseCodes[$code])) {
$errorMsg = $this->_responseCodes[$code];
} else {
$errorMsg = 'Unknown response error';
}
if (!is_null($errorInfo)) {
$errorMsg .= '. ' . $errorInfo->Message;
$this->_errorInfo = $errorInfo;
}
parent::__construct($errorMsg, $code);
}
/**
* Get Error object returned by REST API
* @return Error
*/
public function GetErrorDetails(){
return $this->_errorInfo;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/types/index.html000064400000000032151160562410021631
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_mangopay/mangolib/types/keyValueArray.inc000064400000000501151160562410023114
0ustar00<?php
namespace MangoPay;
/**
* Class represents tabular values
*/
class KeyValueArray {
/**
* Key for tabular variable
* @var String
* @access public
*/
public $Key;
/**
* Value for tabular variable
* @var String
* @access public
*/
public $Value;
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/money.inc000064400000000500151160562410021456
0ustar00<?php
namespace MangoPay;
/**
* Class represents money value with currency
*/
class Money extends Dto {
/**
* Text with currency code with ISO 4217 standard
* @var String
*/
public $Currency;
/**
* The currency amount of money
* @var Long
*/
public $Amount;
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/oAuthToken.inc000064400000001450151160562410022415
0ustar00<?php
namespace MangoPay;
/**
* OAuthToken
*/
class OAuthToken extends Dto {
/**
* Created time
* @var int
*/
private $create_time;
/**
* Value of token
* @var string
*/
public $access_token;
/**
* Token type
* @var string
*/
public $token_type;
/**
* Expires time for the token
* @var int
*/
public $expires_in;
/**
* Constructor
*/
function __construct() {
$this->create_time = time() - 5;
}
/**
* Check that current tokens are expire and return true if yes
* @return bool
*/
public function IsExpired() {
return (time() >= ($this->create_time +
$this->expires_in));
}
}extensions/plg_hikashoppayment_mangopay/mangolib/types/pagination.inc000064400000001774151160562410022476
0ustar00<?php
namespace MangoPay;
/**
* Class represents pagination information
*/
class Pagination extends Dto {
/**
* Page number
* @var Int
*/
public $Page;
/**
* Number of items per page
* @var Int
*/
public $ItemsPerPage;
/**
* Number of total pages
* @var Int
*/
public $TotalPages;
/**
* Number of total items
* @var Int
*/
public $TotalItems;
/**
* Array with links to navigation.
* All values optional. Format:
* array(
* first => http url
* prev => http url
* next => http url
* last => http url
* )
* @var array
*/
public $Links = array();
/**
* Construct
* @param int $page Number of page
* @param int $itemsPerPage Number of items on one page
*/
function __construct($page = 1, $itemsPerPage = 10) {
$this->Page = $page;
$this->ItemsPerPage = $itemsPerPage;
}
}extensions/plg_hikashoppayment_mangopay/mangolib/types/payInExecutionDetails.inc000064400000000230151160562410024601
0ustar00<?php
namespace MangoPay;
/**
* Marker interface for classes with details of execution option in PayIn
entity
*/
interface PayInExecutionDetails { }
extensions/plg_hikashoppayment_mangopay/mangolib/types/payInExecutionDetailsDirect.inc000064400000001005151160562410025735
0ustar00<?php
namespace MangoPay;
/**
* Class represents Web type for execution option in PayIn entity
*/
class PayInExecutionDetailsDirect extends Dto implements
PayInExecutionDetails {
/**
* SecureMode { DEFAULT, FORCE }
* @var string
*/
public $SecureMode;
/**
* SecureModeReturnURL
* @var string
*/
public $SecureModeReturnURL;
/**
* SecureModeRedirectURL
* @var string
*/
public $SecureModeRedirectURL;
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/payInExecutionDetailsWeb.inc000064400000003116151160562410025245
0ustar00<?php
namespace MangoPay;
/**
* Class represents Web type for execution option in PayIn entity
*/
class PayInExecutionDetailsWeb extends Dto implements PayInExecutionDetails
{
/**
* URL format expected
* @var string
*/
public $RedirectURL;
/**
* URL format expected
* @var string
*/
public $ReturnURL;
/**
* URL format expected.
* @var string
*/
public $TemplateURL;
/**
* The URL where you host the iFramed template.
* For CB, Visa, MasterCard you need to specify PAYLINE: before your
URL
* with the iFramed template
* ex: PAYLINE: https://www.maysite.com/payline_template/
* Used for:
* - direct debit web type pay-in.
*
* @var PayInTemplateURLOptions
*/
public $TemplateURLOptions;
/**
* @var string
*/
public $Culture;
/**
* Mode3DSType { DEFAULT, FORCE }
* @var string
*/
public $SecureMode;
/**
* Get array with read-only properties
* @return array
*/
public function GetReadOnlyProperties() {
$properties = parent::GetReadOnlyProperties();
array_push( $properties, 'RedirectURL' );
return $properties;
}
/**
* Get array with mapping which property is object and what type of
object
* @return array
*/
public function GetSubObjects() {
return array(
'TemplateURLOptions' =>
'\MangoPay\PayInTemplateURLOptions'
);
}
}extensions/plg_hikashoppayment_mangopay/mangolib/types/payInPaymentDetails.inc000064400000000226151160562410024260
0ustar00<?php
namespace MangoPay;
/**
* Marker interface for classes with details of means of payment in PayIn
entity
*/
interface PayInPaymentDetails { }
extensions/plg_hikashoppayment_mangopay/mangolib/types/payInPaymentDetailsBankWire.inc000064400000001661151160562410025707
0ustar00<?php
namespace MangoPay;
/**
* Class represents BankWire type for mean of payment in PayIn entity
*/
class PayInPaymentDetailsBankWire extends Dto implements
PayInPaymentDetails {
/**
* Declared debited funds
* @var \MangoPay\Money
*/
public $DeclaredDebitedFunds;
/**
* Declared fees
* @var \MangoPay\Money
*/
public $DeclaredFees;
/**
* Bank account details
* @var \MangoPay\BankAccount
*/
public $BankAccount;
/**
* Wire reference
* @var string
*/
public $WireReference;
/**
* Get array with mapping which property is object and what type of
object
* @return array
*/
public function GetSubObjects() {
return array(
'DeclaredDebitedFunds' =>
'\MangoPay\Money' ,
'DeclaredFees' => '\MangoPay\Money' ,
'BankAccount' => '\MangoPay\BankAccount'
);
}
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/payInPaymentDetailsCard.inc000064400000000570151160562410025054
0ustar00<?php
namespace MangoPay;
/**
* Class represents Card type for mean of payment in PayIn entity
*/
class PayInPaymentDetailsCard extends Dto implements PayInPaymentDetails {
/**
* CardType { CB_VISA_MASTERCARD, AMEX }
* @var string
*/
public $CardType;
/**
* CardId
* @var string
*/
public $CardId;
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/payInPaymentDetailsDirectDebit.inc000064400000000462151160562410026365
0ustar00<?php
namespace MangoPay;
/**
* Class represents direct debit type for mean of payment in PayIn entity
*/
class PayInPaymentDetailsDirectDebit extends Dto implements
PayInPaymentDetails {
/**
* Direct debit type {SOFORT, ELV, GIROPAY}
* @var string
*/
public $DirectDebitType;
}
extensions/plg_hikashoppayment_mangopay/mangolib/types/payInPaymentDetailsPreAuthorized.inc000064400000000457151160562410026774
0ustar00<?php
namespace MangoPay;
/**
* Class represents Web type for execution option in PayIn entity
*/
class PayInPaymentDetailsPreAuthorized extends Dto implements
PayInPaymentDetails {
/**
* The ID of the Preauthorization object
* @var string
*/
public $PreauthorizationId;
}extensions/plg_hikashoppayment_mangopay/mangolib/types/payInTemplateURLOptions.inc000064400000000327151160562410025051
0ustar00<?php
namespace MangoPay;
/**
* Class represents template URL options
*/
class PayInTemplateURLOptions extends Dto {
/**
* PAYLINE options
*
* @var string
*/
public $PAYLINE;
}extensions/plg_hikashoppayment_mangopay/mangolib/types/payOutPaymentDetails.inc000064400000000230151160562410024454
0ustar00<?php
namespace MangoPay;
/**
* Marker interface for classes with details of means of payment in PayOut
entity
*/
interface PayOutPaymentDetails { }
extensions/plg_hikashoppayment_mangopay/mangolib/types/payOutPaymentDetailsBankWire.inc000064400000000645151160562410026111
0ustar00<?php
namespace MangoPay;
/**
* Class represents BankWire type for mean of payment in PayOut entity
*/
class PayOutPaymentDetailsBankWire extends Dto implements
PayOutPaymentDetails {
/**
* Bank account Id
* @var string
*/
public $BankAccountId;
/**
* A custom reference you wish to appear on the user’s bank statement
* @var string
*/
public $BankWireRef;
}
extensions/plg_hikashoppayment_mangopay/mangopay.php000064400000116146151160562410017242
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashoppaymentMangopay extends hikashopPaymentPlugin
{
public $accepted_currencies = array(
'EUR','USD','GBP','CHF',
'SEK','NOK','DKK','PLN',
);
public $multiple = true;
public $name = 'mangopay';
public $doc_form = 'mangopay';
public $market_support = true;
var $pluginConfig = array(
'client_id' => array('ClientId', 'html',
'Please configure credentials in the Joomla plugin manager
side'),
'payment_mode' => array('Payment Mode',
'list', array(
'web' => 'Web'
)),
'debug' => array('DEBUG',
'boolean','0'),
'cancel_url' => array('CANCEL_URL',
'input'),
'return_url' => array('RETURN_URL',
'input'),
'invalid_status' => array('INVALID_STATUS',
'orderstatus', 'cancelled'),
'pending_status' => array('PENDING_STATUS',
'orderstatus', 'created'),
'verified_status' => array('VERIFIED_STATUS',
'orderstatus', 'confirmed'),
);
protected $api = null;
private function initMarket() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
public function getAPI() {
if(!empty($this->api))
return $this->api;
if(version_compare(PHP_VERSION, '5.3', '<'))
return false;
require_once
dirname(__FILE__).DS.'mangolib'.DS.'mangoPayApi.inc';
$this->api = new MangoPay\MangoPayApi();
if(!isset($this->params)) {
$plugin = JPluginHelper::getPlugin('hikashoppayment',
'mangopay');
$this->params = new JRegistry(@$plugin->params);
}
if($this->params->get('clientid', false)) {
$this->api->Config->ClientId =
$this->params->get('clientid');
$this->api->Config->ClientPassword =
$this->params->get('clientpassword');
if((int)$this->params->get('sandbox', 0)) {
$this->api->Config->BaseUrl =
'https://api.sandbox.mangopay.com';
$this->api->Config->TemporaryFolder =
dirname(__FILE__).DS.'tmp'.DS.'debug'.DS;
} else {
$this->api->Config->BaseUrl =
'https://api.mangopay.com';
$this->api->Config->TemporaryFolder =
dirname(__FILE__).DS.'tmp'.DS.'prod'.DS;
}
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
if(!JFolder::exists($this->api->Config->TemporaryFolder))
JFolder::create($this->api->Config->TemporaryFolder);
$content = 'deny from all';
if(!JFile::exists($this->api->Config->TemporaryFolder.'.htaccess'))
JFile::write($this->api->Config->TemporaryFolder.'.htaccess',
$content);
}
return $this->api;
}
public function checkPaymentDisplay(&$method, &$order) {
if(version_compare(PHP_VERSION, '5.3', '<'))
return false;
return true;
}
public function onBeforeOrderCreate(&$order, &$do) {
if(parent::onBeforeOrderCreate($order, $do) === true)
return true;
$this->getAPI();
if(empty($order->user))
$order->user = $this->user;
$mangoUser = $this->getUser($order);
if(!empty($mangoUser->Id))
return true;
$do = false;
$this->app->enqueueMessage('Error during the creation of your
MangoPay customer profile', 'error');
return false;
}
public function onAfterOrderConfirm(&$order, &$methods,
$method_id) {
parent::onAfterOrderConfirm($order, $methods, $method_id);
$notify_url =
HIKASHOP_LIVE.'mangopay_'.$method_id.'.php?order_id='.$order->order_id
. $this->url_itemid;
$this->getAPI();
if(empty($order->user))
$order->user = $this->user;
$mangoUser = $this->getUser($order);
if(empty($this->payment_params->payment_mode) ||
!in_array($this->payment_params->payment_mode,
array('direct', 'web')))
$this->payment_params->payment_mode = 'web';
$update_order = new stdClass();
$update_order->order_id = $order->order_id;
$update_order->order_payment_params =
@$order->order_payment_params;
if(empty($update_order->order_payment_params))
$update_order->order_payment_params = new stdClass();
if(empty($order->order_payment_params->mangopay))
$update_order->order_payment_params->mangopay = new stdClass();
if($this->payment_params->payment_mode == 'direct') {
$cardRegister = new MangoPay\CardRegistration();
$cardRegister->UserId = $mangoUser->Id;
$cardRegister->Currency =
strtoupper($this->currency->currency_code);
try {
$createdCardRegister =
$this->api->CardRegistrations->Create($cardRegister);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
$update_order->order_payment_params->mangopay->cardRegisterId =
$createdCardRegister->Id;
$this->return_url = $notify_url;
$this->createdCardRegister = $createdCardRegister;
$db = JFactory::getDBO();
$query = 'UPDATE ' . hikashop_table('order') .
' SET order_payment_params = ' .
$db->Quote(serialize($update_order->order_payment_params)) .
' WHERE order_id = ' . (int)$update_order->order_id;
$db->setQuery($query);
$db->execute();
return $this->showPage('end');
}
if($this->payment_params->payment_mode == 'web') {
$wallet = new MangoPay\Wallet();
$wallet->Owners = array( $mangoUser->Id );
$wallet->Currency =
strtoupper($this->currency->currency_code);
$wallet->Description = $order->order_number;
$wallet->Tag = 'order#' . $order->order_id;
$createdWallet = false;
try {
$createdWallet = $this->api->Wallets->Create($wallet);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
$lang = JFactory::getLanguage();
$locale = strtoupper(substr($lang->get('tag'), 0, 2));
$PayIn = new MangoPay\PayIn();
$PayIn->CreditedWalletId = $createdWallet->Id;
$PayIn->AuthorId = $mangoUser->Id;
$PayIn->PaymentType = 'CARD';
$PayIn->PaymentDetails = new MangoPay\PayInPaymentDetailsCard();
$PayIn->PaymentDetails->CardType =
'CB_VISA_MASTERCARD';
$PayIn->DebitedFunds = new MangoPay\Money();
$PayIn->DebitedFunds->Currency =
strtoupper($this->currency->currency_code);
$PayIn->DebitedFunds->Amount = round($order->order_full_price *
100);
$PayIn->Fees = new MangoPay\Money();
$PayIn->Fees->Currency =
strtoupper($this->currency->currency_code);
$PayIn->Fees->Amount = 0;
$PayIn->ExecutionType = 'WEB';
$PayIn->ExecutionDetails = new MangoPay\PayInExecutionDetailsWeb();
$PayIn->ExecutionDetails->ReturnURL = $notify_url;
$PayIn->ExecutionDetails->Culture = $locale;
$PayIn->Tag = 'order#' . $order->order_id;
$createdPayIn = null;
try {
$createdPayIn = $this->api->PayIns->Create($PayIn);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
$update_order->order_payment_params->mangopay->payInId =
$createdPayIn->Id;
$update_order->order_payment_params->mangopay->walletId =
$createdWallet->Id;
$this->return_url =
$createdPayIn->ExecutionDetails->RedirectURL;
$this->createdPayIn = $createdPayIn;
$db = JFactory::getDBO();
$query = 'UPDATE ' . hikashop_table('order') .
' SET order_payment_params = ' .
$db->Quote(serialize($update_order->order_payment_params)) .
' WHERE order_id = ' . (int)$update_order->order_id;
$db->setQuery($query);
$db->execute();
$app = JFactory::getApplication();
$app->redirect( $createdPayIn->ExecutionDetails->RedirectURL
);
}
}
public function onAfterOrderUpdate(&$order) {
if(empty($order->order_status))
return;
$order_payment_method = !empty($order->order_payment_method) ?
$order->order_payment_method :
@$order->old->order_payment_method;
if($order_payment_method != 'mangopay')
return;
$order_type = !empty($order->order_type) ? $order->order_type :
@$order->old->order_type;
if($order_type != 'sale')
return;
$order_payment_params = !empty($order->order_payment_params) ?
$order->order_payment_params : $order->old->order_payment_params;
if(is_string($order_payment_params))
$order_payment_params = unserialize($order_payment_params);
if(!empty($order_payment_params->mangopay->paid))
return;
if(!isset($this->params)) {
$plugin = JPluginHelper::getPlugin('hikashoppayment',
'mangopay');
$this->params = new JRegistry(@$plugin->params);
}
$confirmed = explode(',',
trim($this->params->get('order_status', ''),
','));
if(count($confirmed) == 1 && empty($confirmed[0]))
$confirmed = array();
$shopConfig = hikashop_config();
if(empty($confirmed)) {
$confirmed = explode(',',
trim($shopConfig->get('invoice_order_statuses'),
','));
if(empty($confirmed))
$confirmed = array('confirmed','shipped');
}
$refund_statuses = explode(',',
trim($shopConfig->get('cancelled_order_status'),
','));
if(in_array($order->order_status, $confirmed)) {
$this->payVendors($order);
}
return;
}
public function checkOrderStatuses(&$messages) {
return;
}
public function onPaymentNotification(&$statuses) {
$order_id = (int)@$_GET['order_id'];
$transaction_id = (int)@$_GET['transactionId'];
if(!empty($order_id) && !empty($transaction_id))
return $this->paymentNotificationSecureReturn($transaction_id,
$order_id, $statuses);
if(!empty($order_id))
return $this->paymentNotificationCardReturn($order_id, $statuses);
return false;
}
protected function paymentNotificationCardReturn($order_id,
&$statuses) {
$dbOrder = $this->getOrder((int)$order_id);
$this->loadPaymentParams($dbOrder);
if(empty($this->payment_params))
return false;
$this->loadOrderData($dbOrder);
if(is_string($dbOrder->order_payment_params))
$dbOrder->order_payment_params =
unserialize($dbOrder->order_payment_params);
$cancel_url = HIKASHOP_LIVE .
'index.php?option=com_hikashop&ctrl=order&task=cancel_order&order_id='
. $dbOrder->order_id . $this->url_itemid;
$confirm_url = HIKASHOP_LIVE .
'index.php?option=com_hikashop&ctrl=checkout&task=after_end&order_id='
. $dbOrder->order_id . $this->url_itemid;
if(empty($dbOrder->order_payment_params->mangopay->cardRegisterId)
&&
!empty($dbOrder->order_payment_params->mangopay->walletId)) {
if($dbOrder->order_status ==
$this->payment_params->invalid_status) {
$this->app->redirect($cancel_url);
exit;
}
$this->app->redirect($confirm_url);
exit;
}
if(empty($dbOrder->order_payment_params->mangopay->cardRegisterId))
die('Invalid order');
$payment_id = (int)$dbOrder->order_payment_id;
$this->getAPI();
try {
$cardRegister =
$this->api->CardRegistrations->Get($dbOrder->order_payment_params->mangopay->cardRegisterId);
$cardRegister->RegistrationData = isset($_GET['data']) ?
'data=' . $_GET['data'] : 'errorCode=' .
$_GET['errorCode'];
$updatedCardRegister =
$this->api->CardRegistrations->Update($cardRegister);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(!isset($updatedCardRegister) || $updatedCardRegister->Status !=
'VALIDATED' || !isset($updatedCardRegister->CardId))
die('Cannot create virtual card. Payment has not been
created.');
$card = false;
try {
$card =
$this->api->Cards->Get($updatedCardRegister->CardId);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(empty($card))
die('An error occured, please contact the administrator in order to
have more details. (Card Get)');
$wallet = new MangoPay\Wallet();
$wallet->Owners = array( $updatedCardRegister->UserId );
$wallet->Currency = strtoupper($this->currency->currency_code);
$wallet->Description = $dbOrder->order_number;
$wallet->Tag = 'order#' . $dbOrder->order_id;
$createdWallet = false;
try {
$createdWallet = $this->api->Wallets->Create($wallet);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(empty($createdWallet))
die('An error occured, please contact the administrator in order to
have more details. (Wallet Creation)');
$payIn = new MangoPay\PayIn();
$payIn->Tag = 'order#' . (int)$dbOrder->order_id;
$payIn->CreditedWalletId = $createdWallet->Id;
$payIn->AuthorId = $updatedCardRegister->UserId;
$payIn->DebitedFunds = new MangoPay\Money();
$payIn->DebitedFunds->Amount = round($dbOrder->order_full_price
* 100);
$payIn->DebitedFunds->Currency =
strtoupper($this->currency->currency_code);
$payIn->Fees = new MangoPay\Money();
$payIn->Fees->Amount = 0;
$payIn->Fees->Currency =
strtoupper($this->currency->currency_code);
$payIn->PaymentDetails = new MangoPay\PayInPaymentDetailsCard();
$payIn->PaymentDetails->CardType = $card->CardType;
$payIn->ExecutionDetails = new
MangoPay\PayInExecutionDetailsDirect();
$payIn->ExecutionDetails->CardId = $card->Id;
$payIn->ExecutionDetails->SecureModeReturnURL =
HIKASHOP_LIVE.'mangopay_'.$payment_id.'.php';
try {
$createdPayIn = $this->api->PayIns->Create($payIn);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
$update_order = new stdClass();
$update_order->order_id = (int)$dbOrder->order_id;
$update_order->order_number = $dbOrder->order_number;
$update_order->order_payment_params =
$dbOrder->order_payment_params;
$update_order->order_payment_params->mangopay->cardRegisterId =
null;
$update_order->order_payment_params->mangopay->payInId =
$createdPayIn->Id;
$update_order->order_payment_params->mangopay->walletId =
$createdWallet->Id;
$email = false;
$history = new stdClass();
$history->notified = 0;
$history->amount = $dbOrder->order_full_price;
$history->data = 'MangoPay Status:
'.$createdPayIn->Status;
if(isset($createdPayIn->SecureModeNeeded) &&
isset($createdPayIn->Status) &&
!empty($createdPayIn->ExecutionDetails->SecureModeNeeded) &&
$createdPayIn->Status != 'FAILED') {
$order_status = $this->payment_params->pending_status;
$redirect_url =
$createdPayIn->ExecutionDetails->SecureModeRedirectURL;
} if(isset($createdPayIn->Status) && $createdPayIn->Status
== 'SUCCEEDED') {
$history->notified = 1;
$email = true;
$order_status = $this->payment_params->verified_status;
$redirect_url = $confirm_url;
} else {
$order_status = $this->payment_params->invalid_status;
$email = true;
$redirect_url = $cancel_url;
}
if($this->payment_params->debug) {
$dbg = 'MangoPay - PayIn' . "\r\n".
'<pre>'.print_r($createdPayIn,
true).'</pre>';
$this->writeToLog($dbg);
}
$this->modifyOrder($update_order, $order_status, $history, true);
$orderClass = hikashop_get('class.order');
$orderClass->save($update_order);
$this->app->redirect($redirect_url);
}
protected function paymentNotificationSecureReturn($transaction_id,
$order_id, &$statuses) {
$notif_id = (int)$_GET['notif_id'];
if($this->pluginParams($notif_id))
$this->payment_params =& $this->plugin_params;
$this->getAPI();
$payIn = null;
try {
$payIn = $this->api->PayIns->Get($transaction_id);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if($payIn === null) {
$this->writeToLog('Invalid payIn: ' . $transaction_id);
return false;
}
$tag_order_id = (int)str_replace('order#', '',
$payIn->Tag);
if($tag_order_id > 0 && $tag_order_id != $order_id) {
$this->writeToLog('Wrong payIn (' . $transaction_id
.') : '. $payIn->Tag);
return false;
} else if($tag_order_id == 0) {
}
$redirect_url = HIKASHOP_LIVE .
'index.php?option=com_hikashop&ctrl=order&task=cancel_order&order_id='
. (int)$order_id;
if(isset($payIn->Status) && $payIn->Status ==
'SUCCEEDED') {
$dbOrder = $this->getOrder((int)$order_id);
$order_status = $this->payment_params->verified_status;
$history = new stdClass();
$history->notified = 1;
$history->data = 'MangoPay Secure Return:
'.$payIn->Status;
$this->modifyOrder($order_id, $order_status, $history, true);
$redirect_url = HIKASHOP_LIVE .
'index.php?option=com_hikashop&ctrl=checkout&task=after_end&order_id='
. $dbOrder->order_id;
} elseif(isset($payIn->Status) && $payIn->Status ==
'FAILED') {
$order_status = $this->payment_params->invalid_status;
$history = new stdClass();
$history->notified = 0;
$history->data = 'MangoPay Secure Return:
'.$payIn->Status;
$this->modifyOrder($order_id, $order_status, $history, true);
}
if(empty($this->app))
$this->app = JFactory::getApplication();
$this->app->redirect($redirect_url);
}
protected function payVendors(&$order) {
$db = JFactory::getDBO();
$suborders = array();
$vendors = array();
$order_id = (int)$order->order_id;
if(empty($order_id))
return false;
$order_payment_params = !empty($order->order_payment_params) ?
$order->order_payment_params : $order->old->order_payment_params;
if(is_string($order_payment_params))
$order_payment_params = unserialize($order_payment_params);
if(empty($order_payment_params->mangopay->walletId))
return false;
if(!$this->initMarket() || !$this->getAPI())
return false;
$this->currency = 0;
$currency_id = (isset($order->order_currency_id) ?
(int)$order->order_currency_id :
(int)$order->old->order_currency_id);
if(!empty($currency_id)) {
$currencyClass = hikashop_get('class.currency');
$currencies = null;
$currencies = $currencyClass->getCurrencies($currency_id,
$currencies);
$this->currency = $currencies[$currency_id];
}
$currency_code = strtolower($this->currency->currency_code);
$query = 'SELECT v.*, o.* FROM ' .
hikamarket::table('shop.order') . ' AS o '.
' LEFT JOIN ' . hikamarket::table('vendor') . '
AS v ON o.order_vendor_id = v.vendor_id '.
' WHERE o.order_parent_id = ' . $order_id;
$db->setQuery($query);
$suborders = $db->loadObjectList();
$suborders_id = array();
$transaction_vendors = array();
$userClass = hikamarket::get('shop.class.user');
$order_user_id = isset($order->order_user_id) ?
(int)$order->order_user_id : (int)$order->old->order_user_id;
$order->user = $userClass->get($order_user_id);
$mangoCustomerId = $order->user->user_params->mangopay_id;
$full_price = isset($order->order_full_price) ?
$order->order_full_price : $order->old->order_full_price;
if(!empty($suborders)) {
$vendors = array();
$total = 0.0;
foreach($suborders as $k => $suborder) {
$price = round(hikamarket::toFloat($suborder->order_vendor_price),
(int)$this->currency->currency_locale['int_frac_digits']);
if($price < 0)
$price = round(hikamarket::toFloat($suborder->order_vendor_price) +
hikamarket::toFloat($full_price),
(int)$this->currency->currency_locale['int_frac_digits']);
if($price == 0)
continue;
$total += (float)hikamarket::toFloat($suborder->order_full_price);
$suborders_id[] = (int)$suborder->order_id;
$transaction_vendors[ (int)$suborder->order_vendor_id ] =
(int)$suborder->order_vendor_id;
$mango_id = null;
$wallets = null;
if(!empty($suborder->vendor_params))
$suborder->vendor_params =
unserialize($suborder->vendor_params);
if(!empty($suborder->vendor_params->mangopay_id))
$mango_id = (int)$suborder->vendor_params->mangopay_id;
if(!empty($suborder->vendor_params->mangopay_wallets))
$wallets = $suborder->vendor_params->mangopay_wallets;
if(empty($mango_id)) {
$mango_user = $this->createVendor($suborder);
$mango_id = $mango_user->Id;
$suborder->vendor_params->mangopay_id = (int)$mango_id;
}
if(empty($wallets) || empty($wallets[$currency_code])) {
if(empty($wallets))
$wallets = array();
$wallets[$currency_code] = $this->getVendorWallet($suborder,
$currency_code);
}
$vendors[ (int)$suborder->order_vendor_id ] = array(
'price' => $price,
'full_price' =>
(float)hikamarket::toFloat($suborder->order_full_price),
'mango_id' => (int)$mango_id,
'wallet' => (int)$wallets[$currency_code],
);
}
foreach($vendors as $k => $v) {
$this->transfert(
$mangoCustomerId, // $v['mango_id']
$order_payment_params->mangopay->walletId,
$v['wallet'],
$v['full_price'],
$v['full_price'] - $v['price'],
$currency_code
);
}
$order_full_price = (float)hikamarket::toFloat($full_price);
if($order_full_price - $total > 0) {
$vendorClass = hikamarket::get('class.vendor');
$mainVendor = $vendorClass->get(1);
$mainVendorWallet = $this->getVendorWallet($mainVendor);
$this->transfert(
$mangoCustomerId, // $mainVendor->vendor_params->mangopay_id,
$order_payment_params->mangopay->walletId,
$mainVendorWallet,
(float)($order_full_price - $total),
0,
$currency_code
);
}
} else {
$vendorClass = hikamarket::get('class.vendor');
$mainVendor = $vendorClass->get(1);
$mainVendorWallet = $this->getVendorWallet($mainVendor);
$this->transfert(
$mangoCustomerId, // $mainVendor->vendor_params->mangopay_id,
$order_payment_params->mangopay->walletId,
$mainVendorWallet,
(float)hikamarket::toFloat($full_price),
0,
$currency_code
);
}
$new_order_payment_params = hikamarket::cloning($order_payment_params);
unset($new_order_payment_params->mangopay->walletId);
$new_order_payment_params->mangopay->paid = true;
$query = 'UPDATE ' . hikashop_table('order') .
' SET order_payment_params = ' .
$db->Quote(serialize($new_order_payment_params)) .
' WHERE order_id = ' . (int)$order->order_id;
$db->setQuery($query);
$db->execute();
if(!empty($transaction_vendors)) {
$query = 'UPDATE
'.hikamarket::table('order_transaction').
' SET order_transaction_paid = order_id '.
' WHERE order_id = '.(int)$order->order_id.' AND
vendor_id IN ('.implode(',',
$transaction_vendors).')';
$db->setQuery($query);
$db->execute();
}
}
protected function getUser(&$order, $update = true) {
if(!$this->getAPI())
return false;
if(empty($order->user)) {
if(empty($this->user)) {
hikashop_loadUser(true, true);
$this->user = hikashop_loadUser(true);
}
$order->user = $this->user;
}
if(empty($order->user->user_params->mangopay_id))
return $this->createUser($order);
$mangoUser_id = (int)$order->user->user_params->mangopay_id;
$mangoUser = null;
try {
$mangoUser = $this->api->Users->Get($mangoUser_id);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(empty($mangoUser))
return $this->createUser($order);
if($update) {
$billing_address = $order->cart->billing_address;
$mangoUser->FirstName =
substr($billing_address->address_firstname, 0, 99);
$mangoUser->LastName = substr($billing_address->address_lastname,
0, 99);
$mangoUser->Email = $order->user->user_email;
$mangoUser->Address = substr($billing_address->address_street .
' ' . $billing_address->address_city, 0, 254);
$mangoUser->CountryOfResidence =
$billing_address->address_country->zone_code_2;
try {
$this->api->Users->Update($mangoUser);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
}
return $mangoUser;
}
protected function createUser(&$order) {
if(!$this->getAPI())
return false;
$billing_address = $order->cart->billing_address;
$user = new MangoPay\UserNatural();
$user->FirstName = substr($billing_address->address_firstname, 0,
99);
$user->LastName = substr($billing_address->address_lastname, 0,
99);
$user->Email = $order->user->user_email;
$user->Address = substr($billing_address->address_street . '
' . $billing_address->address_city, 0, 254);
$user->CountryOfResidence =
$billing_address->address_country->zone_code_2;
$user->tag = 'hkId:' . (!empty($order->order_user_id) ?
$order->order_user_id : @$order->user->user_id);
$user->Nationality =
$billing_address->address_country->zone_code_2;
$user->Birthday = time();
$mangoUser = null;
try {
$mangoUser = $this->api->Users->Create($user);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(!empty($mangoUser->Id)) {
$hkUser = new stdClass();
$hkUser->user_params = new stdClass();
if(!empty($order->user->user_params) &&
is_object($order->user->user_params))
$hkUser->user_params = $order->user->user_params;
if(isset($order->user) &&
isset($order->user->user_params) &&
is_object($order->user->user_params))
$order->user->user_params->mangopay_id = $mangoUser->Id;
if(isset($this->user) &&
isset($this->user->user_params) &&
is_object($this->user->user_params))
$this->user->user_params->mangopay_id = $mangoUser->Id;
$hkUser->user_id = $order->user->user_id;
$hkUser->user_params->mangopay_id = $mangoUser->Id;
$userClass = hikashop_get('class.user');
$userClass->save($hkUser);
}
return $mangoUser;
}
public function getUserCards(&$user) {
if(!empty($user->user_params) &&
is_string($user->user_params))
$user->user_params = unserialize($user->user_params);
if(empty($user->user_params->mangopay_id))
return false;
if(empty($this->api))
$this->getAPI();
$cards = array();
try {
$cards =
$this->api->Users->getCards($user->user_params->mangopay_id);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
return $cards;
}
public function getVendor(&$vendor, $update = false) {
if(empty($vendor->vendor_params->mangopay_id))
return $this->createVendor($vendor);
if(empty($this->api))
$this->getAPI();
$mangoUser_id = (int)$vendor->vendor_params->mangopay_id;
$mangoUser = null;
try {
$mangoUser = $this->api->Users->Get($mangoUser_id);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(empty($mangoUser))
return $this->createVendor($vendor);
return $mangoUser;
}
protected function createVendor(&$vendor) {
if(empty($this->api))
$this->getAPI();
$user = new MangoPay\UserLegal();
$user->Name = $vendor->vendor_name;
$user->LegalPersonType = 'BUSINESS';
$user->Email = $vendor->vendor_email;
$user->HeadquartersAddress = substr($vendor->vendor_address_street
. ' ' . $vendor->vendor_address_city, 0, 254);
$user->tag = 'hkVendorId:'.$vendor->vendor_id;
$billing_address = null;
$app = JFactory::getApplication();
if(!empty($vendor->vendor_admin_id) &&
(int)$vendor->vendor_admin_id > 0) {
$addressClass = hikamarket::get('shop.class.address');
$addresses =
$addressClass->loadUserAddresses((int)$vendor->vendor_admin_id);
$billing_address = reset($addresses);
} else if($app->isAdmin() && $vendor->vendor_id == 1) {
$addressClass = hikamarket::get('shop.class.address');
$current_user_id = hikashop_loadUser();
$addresses = $addressClass->loadUserAddresses($current_user_id);
$billing_address = reset($addresses);
}
$user->LegalRepresentativeFirstName =
substr(@$billing_address->address_firstname, 0, 99);
$user->LegalRepresentativeLastName =
substr(@$billing_address->address_lastname, 0, 99);
$user->LegalRepresentativeAdress =
substr(trim(@$billing_address->address_street . ' ' .
@$billing_address->address_city), 0, 254);
$user->LegalRepresentativeCountryOfResidence =
@$billing_address->address_country->zone_code_2;
$user->LegalRepresentativeNationality =
@$billing_address->address_country->zone_code_2;
$user->LegalRepresentativeBirthday = time();
if(empty($user->Email)) {
$shopConfig = hikamarket::config(false);
$user->Email = $shopConfig->get('from_email');
}
if(empty($user->LegalRepresentativeNationality))
$user->LegalRepresentativeNationality = 'US';
if(empty($user->LegalRepresentativeCountryOfResidence))
$user->LegalRepresentativeCountryOfResidence = 'US';
$mangoUser = null;
try {
$mangoUser = $this->api->Users->Create($user);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(!empty($mangoUser->Id)) {
$hkVendor = new stdClass();
$hkVendor->vendor_params = new stdClass();
if(!empty($vendor->vendor_params) &&
is_object($vendor->vendor_params))
$hkVendor->vendor_params = $vendor->vendor_params;
$hkVendor->vendor_id = (int)$vendor->vendor_id;
$hkVendor->vendor_params->mangopay_id = $mangoUser->Id;
$vendorClass = hikamarket::get('class.vendor');
$vendorClass->save($hkVendor);
}
return $mangoUser;
}
public function getVendorWallet(&$vendor, $currency = null, $full =
false) {
if(!empty($vendor->vendor_params) &&
is_string($vendor->vendor_params))
$vendor->vendor_params = unserialize($vendor->vendor_params);
if(empty($vendor->vendor_params->mangopay_id)) {
$mango_user = $this->createVendor($vendor);
$vendor->vendor_params->mangopay_id = (int)$mango_user->Id;
}
if(empty($currency)) {
$currencyClass = hikamarket::get('shop.class.currency');
if(!empty($vendor->vendor_params->vendor_currency_id)) {
$vendor_currency =
$currencyClass->get($vendor->vendor_params->vendor_currency_id);
if(!empty($vendor_currency))
$currency = strtolower($vendor_currency->currency_code);
}
if(empty($currency)) {
$shopConfig = hikamarket::config(false);
$main_currency_id = $shopConfig->get('main_currency', 1);
$main_currency = $currencyClass->get($main_currency_id);
$currency = strtolower($main_currency->currency_code);
}
}
if(!empty($vendor->vendor_params->mangopay_wallets[$currency]))
return $vendor->vendor_params->mangopay_wallets[$currency];
if(empty($this->api))
$this->getAPI();
$wallet_id = null;
$retWallet = null;
$userWallets = null;
try {
$userWallets = $this->api->Users->GetWallets(
(int)$vendor->vendor_params->mangopay_id );
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(!empty($userWallets)) {
foreach($userWallets as $userWallet) {
if(strtoupper($userWallet->Currency) == strtoupper($currency)) {
$wallet_id = $userWallet->Id;
$retWallet = $userWallet;
}
}
}
if(empty($wallet_id)) {
$wallet = new MangoPay\Wallet();
$wallet->Owners = array(
(int)$vendor->vendor_params->mangopay_id );
$wallet->Currency = strtoupper($currency);
$wallet->Description = $vendor->vendor_name;
$wallet->Tag = 'vendor#'.$vendor->vendor_id;
try {
$retWallet = $this->api->Wallets->Create($wallet);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(empty($retWallet->Id))
return null;
$wallet_id = $retWallet->Id;
}
if(!empty($wallet_id)) {
$hkVendor = new stdClass();
$hkVendor->vendor_params = new stdClass();
if(!empty($vendor->vendor_params) &&
is_object($vendor->vendor_params))
$hkVendor->vendor_params = $vendor->vendor_params;
$hkVendor->vendor_id = (int)$vendor->vendor_id;
if(empty($hkVendor->vendor_params->mangopay_wallets))
$hkVendor->vendor_params->mangopay_wallets = array();
$hkVendor->vendor_params->mangopay_wallets[$currency] =
$wallet_id;
$vendorClass = hikamarket::get('class.vendor');
$vendorClass->save($hkVendor);
}
if($full)
return $retWallet;
return $wallet_id;
}
public function getVendorWallets(&$vendor) {
if(!empty($vendor->vendor_params) &&
is_string($vendor->vendor_params))
$vendor->vendor_params = unserialize($vendor->vendor_params);
if(empty($vendor->vendor_params->mangopay_id)) {
$mango_user = $this->createVendor($vendor);
$vendor->vendor_params->mangopay_id = (int)$mango_user->Id;
}
if(empty($vendor->vendor_params->mangopay_wallets))
return array();
if(empty($this->api))
$this->getAPI();
$wallets = array();
foreach($vendor->vendor_params->mangopay_wallets as $currency =>
$wallet_id) {
try {
$wallet = $this->api->Wallets->Get( (int)$wallet_id );
if(in_array($vendor->vendor_params->mangopay_id,
$wallet->Owners))
$wallets[$currency] = $wallet;
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
}
return $wallets;
}
public function transfert($author, $src_wallet, $dst_wallet, $full_price,
$fee, $currency_code) {
if(empty($author))
return false;
$currency_code = strtoupper($currency_code);
$transfer = new MangoPay\Transfer();
$transfer->AuthorId = $author;
$transfer->DebitedFunds = new MangoPay\Money();
$transfer->DebitedFunds->Currency = $currency_code;
$transfer->DebitedFunds->Amount = $full_price * 100;
$transfer->Fees = new MangoPay\Money();
$transfer->Fees->Currency = $currency_code;
$transfer->Fees->Amount = $fee * 100;
$transfer->DebitedWalletID = $src_wallet;
$transfer->CreditedWalletId = $dst_wallet;
try {
$result = $this->api->Transfers->Create($transfer);
}
catch (MangoPay\ResponseException $e) { $this->mangoDebug($e, true);
}
catch (MangoPay\Exception $e) { $this->mangoDebug($e, false); }
catch (Exception $e) {}
if(empty($result) || empty($result->Id))
return false;
return $result->Id;
}
public function getCountryList() {
return array(
'AD','AE','AF','AG','AI','AL','AM','AO','AQ','AR','AS','AT','AU','AW','AX','AZ','BA','BB','BD','BE','BF','BG','BH','BI','BJ','BL','BM','BN','BO',
'BQ','BR','BS','BT','BV','BW','BY','BZ','CA','CC','CD','CF','CG','CH','CI','CK','CL','CM','CN','CO','CR','CU','CV','CW','CX','CY','CZ','DE','DJ',
'DK','DM','DO','DZ','EC','EE','EG','EH','ER','ES','ET','FI','FJ','FK','FM','FO','FR','GA','GB','GD','GE','GF','GG','GH','GI','GL','GM','GN','GP',
'GQ','GR','GS','GT','GU','GW','GY','HK','HM','HN','HR','HT','HU','ID','IE','IL','IM','IN','IO','IQ','IR','IS','IT','JE','JM','JO','JP','KE','KG',
'KH','KI','KM','KN','KP','KR','KW','KY','KZ','LA','LB','LC','LI','LK','LR','LS','LT','LU','LV','LY','MA','MC','MD','ME','MF','MG','MH','MK','ML',
'MM','MN','MO','MP','MQ','MR','MS','MT','MU','MV','MW','MX','MY','MZ','NA','NC','NE','NF','NG','NI','NL','NO','NP','NR','NU','NZ','OM','PA','PE',
'PF','PG','PH','PK','PL','PM','PN','PR','PS','PT','PW','PY','QA','RE','RO','RS','RU','RW','SA','SB','SC','SD','SE','SG','SH','SI','SJ','SK','SL',
'SM','SN','SO','SR','SS','ST','SV','SX','SY','SZ','TC','TD','TF','TG','TH','TJ','TK','TL','TM','TN','TO','TR','TT','TV','TW','TZ','UA','UG','UM',
'US','UY','UZ','VA','VC','VE','VG','VI','VN','VU','WF','WS','YE','YT','ZA','ZM','ZW'
);
}
public function mangoDebug($e, $r = false) {
ob_start();
if($r) {
MangoPay\Logs::Debug('MangoPay\ResponseException Code',
$e->GetCode());
MangoPay\Logs::Debug('Message', $e->GetMessage());
MangoPay\Logs::Debug('Details', $e->GetErrorDetails());
} else {
MangoPay\Logs::Debug('MangoPay\Exception Message',
$e->GetMessage());
}
$dbg = ob_get_clean();
$this->writeToLog($dbg);
return;
}
public function onHikashopCronTrigger(&$messages) {
if(!$this->cronCheck())
return;
$this->checkOrderStatuses($messages);
}
public function onPaymentConfiguration(&$element) {
parent::onPaymentConfiguration($element);
if(version_compare(PHP_VERSION, '5.3', '<')) {
$app = JFactory::getApplication();
$app->enqueueMessage('To work correctly, MangoPay API requires
PHP 5.3 or higher', 'error');
}
}
public function getPaymentDefaultValues(&$element) {
$element->payment_name = 'MangoPay';
$element->payment_description = '';
$element->payment_images = 'MasterCard,VISA,Credit_card';
$element->payment_params->clientid = '';
$element->payment_params->clientpassword = '';
$element->payment_params->invalid_status = 'cancelled';
$element->payment_params->pending_status = 'created';
$element->payment_params->verified_status = 'confirmed';
}
public function onPaymentConfigurationSave(&$element) {
$ret = parent::onPaymentConfigurationSave($element);
jimport('joomla.filesystem.file');
$lang = JFactory::getLanguage();
$locale = strtolower(substr($lang->get('tag'), 0, 2));
$opts = array(
'option' => 'com_hikashop',
'tmpl' => 'component',
'ctrl' => 'checkout',
'task' => 'notify',
'notif_payment' => $this->name,
'format' => 'html',
'local' => $locale,
'notif_id' => $element->payment_id,
);
$content = '<?php' . "\r\n";
foreach($opts as $k => $v) {
$v = str_replace(array('\'','\\'),
'', $v);
$content .=
'$_GET[\''.$k.'\']=\''.$v.'\';'."\r\n".
'$_REQUEST[\''.$k.'\']=\''.$v.'\';'."\r\n";
}
$content .=
'include(\'index.php\');'."\r\n";
JFile::write(JPATH_ROOT.DS.$this->name.'_'.$element->payment_id.'.php',
$content);
$app = JFactory::getApplication();
if(!$this->initMarket()) {
$app->enqueueMessage('HikaMarket is not present in your website
; you need HikaMarket to use the MangoPay plugin',
'error');
} else {
$api = $this->getAPI();
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get(1);
$already_exist = !empty($vendor->vendor_params->mangopay_id);
$main_vendor = $this->GetVendor($vendor);
if(empty($main_vendor)) {
$app->enqueueMessage('Failed to get/create the legal user for
your main vendor.<br/>Please check that you right set your MangoPay
credentials in the plugin (Joomla site)<br/>Please also check that
your account have a valid published address', 'error');
} else if(!$already_exist) {
$app->enqueueMessage('We create a MangoPay legal user for your
main vendor ; you should finish the configuration of that user in the
HikaMarket front-end interface', 'message');
}
}
return $ret;
}
}
extensions/plg_hikashoppayment_mangopay/mangopay.xml000064400000004710151160562410017244
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikashoppayment">
<name>Hikashop (market) MangoPay Payment Plugin</name>
<hikainstall ordering="0" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin enables you to setup your MangoPay payment
system</description>
<files>
<filename
plugin="mangopay">mangopay.php</filename>
<filename>mangopay_checkout.php</filename>
<filename>mangopay_end.php</filename>
<folder>mangolib</folder>
</files>
<params addpath="/components/com_hikamarket/params">
<param name="clientid" type="text"
default="" label="Client Id"
description=""/>
<param name="clientpassword" type="text"
default="" label="Client Password"
description=""/>
<param name="sandbox" type="radio"
default="0" label="Sandbox"
description=""><option
value="0">No</option><option
value="1">Yes</option></param>
<param name="payout_waiting_duration" type="text"
default="31" label="Payout waiting duration"
description="Number of day to wait before payout a
transaction"/>
<param name="order_status" type="text"
default="" label="Order statuses for wallet transfer"
description="If the field is empty, it will use the value of the
HikaShop option: Invoice order statuses"/>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikamarket/fields">
<fieldset name="basic">
<field name="clientid" type="text"
default="" label="Client Id"
description=""/>
<field name="clientpassword" type="text"
default="" label="Client Password"
description=""/>
<field name="sandbox" type="radio"
default="0" label="Sandbox"
description=""><option
value="0">No</option><option
value="1">Yes</option></field>
<field name="payout_waiting_duration"
type="text" default="31" label="Payout waiting
duration" description="Number of day to wait before payout a
transaction"/>
<field name="order_status" type="text"
default="" label="Order statuses for wallet transfer"
description="If the field is empty, it will use the value of the
HikaShop option: Invoice order statuses"/>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikashoppayment_mangopay/mangopay_checkout.php000064400000000447151160562410021123
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
extensions/plg_hikashoppayment_mangopay/mangopay_end.php000064400000002471151160562410020063
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!empty($this->createdCardRegister)) {
?>
<form action="<?php echo
$this->createdCardRegister->CardRegistrationURL; ?>"
method="post">
<input type="hidden" name="data"
value="<?php echo
$this->createdCardRegister->PreregistrationData; ?>" />
<input type="hidden" name="accessKeyRef"
value="<?php echo $this->createdCardRegister->AccessKey;
?>" />
<input type="hidden" name="returnURL"
value="<?php echo $this->return_url; ?>" />
<label for="cardNumber"><?php echo
JText::_('CARD_NUMBER'); ?></label>
<input type="text" autocomplete="off"
name="cardNumber" value="" />
<div class="clear"></div>
<label for="cardExpirationDate"><?php echo
JText::_('EXPIRATION_DATE'); ?></label>
<input type="text" autocomplete="off"
name="cardExpirationDate" value=""
placeholder="MMYY"/>
<div class="clear"></div>
<label for="cardCvx"><?php echo
JText::_('CVV'); ?></label>
<input type="text" autocomplete="off"
name="cardCvx" value="" />
<div class="clear"></div>
<input type="submit" value="Pay" />
</form>
<?php
}
extensions/plg_hikashoppayment_paypaladaptive/index.html000064400000000032151160562410020066
0ustar00<html><body></body></html>extensions/plg_hikashoppayment_paypaladaptive/paypaladaptive.php000064400000131220151160562410021612
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashoppaymentPaypalAdaptive extends hikashopPaymentPlugin
{
public $accepted_currencies = array(
'AUD','BRL','CAD','CHF','CZK','DKK','EUR','GBP','HKD','HUF','ILS','JPY',
'MYR','MXN','NOK','NZD','PHP','PLN','SGD','SEK','TWD','THB','TRY','USD'
);
public $multiple = true;
public $name = 'paypaladaptive';
public $doc_form = 'paypaladaptive';
public $market_support = true;
private $payment_urls = array(
'production' =>
'https://svcs.paypal.com/AdaptivePayments/Pay',
'sandbox' =>
'https://svcs.sandbox.paypal.com/AdaptivePayments/Pay'
);
private $return_urls = array(
'redirect' => array(
'production' =>
'https://www.paypal.com/webscr?cmd=_ap-payment',
'sandbox' =>
'https://www.sandbox.paypal.com/webscr?cmd=_ap-payment',
),
'popup' => array(
'production' =>
'https://www.paypal.com/webapps/adaptivepayment/flow/pay',
'sandbox' =>
'https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay'
)
);
private $communication_formats = array(
'nv' => 'NV',
'xml' => 'XML',
'json' => 'JSON'
);
private $fees_formats = array(
'each' => 'EACHRECEIVER', // default
'sender' => 'SENDER',
'primary' => 'PRIMARYRECEIVER', // chained payment
only
'secondary' => 'SECONDARYONLY' // chained payment
only
);
private $display_modes = array(
'redirect',
'popup'
);
private function initMarket() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
public function checkPaymentDisplay(&$method, &$order) {
if(!function_exists('curl_init')) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('CURL_NOT_FOUND'),
'error');
return false;
}
return true;
}
public function onAfterOrderConfirm(&$order, &$methods,
$method_id) {
parent::onAfterOrderConfirm($order, $methods, $method_id);
if(!empty($this->payment_params->classical)) {
return $this->afterOrderConfirm_Classical($order, $methods,
$method_id);
}
return $this->afterOrderConfirm_Adaptive($order, $methods,
$method_id);
}
private function afterOrderConfirm_Adaptive(&$order, &$methods,
$method_id) {
if(empty($this->payment_params->username) ||
empty($this->payment_params->password) ||
empty($this->payment_params->signature) ||
empty($this->payment_params->email)) {
$this->app->enqueueMessage('Please check your
"paypal adaptive" plugin configuration');
return false;
}
if($this->currency->currency_locale['int_frac_digits']
> 2)
$this->currency->currency_locale['int_frac_digits'] =
2;
if(!isset($this->payment_params->sandbox) &&
isset($this->payment_params->debug))
$this->payment_params->sandbox =
$this->payment_params->debug;
$ip = hikashop_getIp();
if(empty($ip)) $ip = '127.0.0.1';
if(strpos($ip, ':') !== false)
$ip = '';
$url = $this->payment_urls[ $this->payment_params->sandbox ?
'sandbox' : 'production' ];
$format = 'nv';
if(empty($this->payment_params->fee_mode))
$this->payment_params->fee_mode = 'each';
if(empty($this->payment_params->payment_mode))
$this->payment_params->payment_mode = 'chained';
if(empty($this->payment_params->store_secondary))
$this->payment_params->store_secondary = false;
$display_mode = @$this->payment_params->display_mode;
if(!in_array($display_mode, $this->display_modes))
$display_mode = reset($this->display_modes);
$notify_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify¬if_payment='.$this->name.'&order_id='.$order->order_id.'&tmpl=component&lang='.$this->locale
. $this->url_itemid;
if($display_mode == 'redirect') {
$return_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=after_end&order_id='.$order->order_id
. $this->url_itemid;
$cancel_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=order&task=cancel_order&order_id='.$order->order_id
. $this->url_itemid;
} else {
$return_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify¬if_payment='.$this->name.'&mode=popup&subtask=after_end&order_id='.$order->order_id.'&tmpl=component&lang='.$this->locale
. $this->url_itemid;
$cancel_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify¬if_payment='.$this->name.'&mode=popup&subtask=cancel_order&order_id='.$order->order_id.'&tmpl=component&lang='.$this->locale
. $this->url_itemid;
}
if($this->payment_params->sandbox)
$this->payment_params->applicationid =
'APP-80W284485P519543T';
if(!isset($this->fees_formats[ $this->payment_params->fee_mode
]) || ($this->payment_params->payment_mode != 'chained'
&& in_array($this->payment_params->payment_mode,
array('primary','secondary'))))
$this->payment_params->fee_mode = 'each';
$fee = $this->fees_formats[ $this->payment_params->fee_mode ];
$headers = array(
'X-PAYPAL-SECURITY-USERID: ' .
$this->payment_params->username, //
'tok261_biz_api.abc.com'
'X-PAYPAL-SECURITY-PASSWORD: ' .
$this->payment_params->password, // '1244612379'
'X-PAYPAL-SECURITY-SIGNATURE: ' .
$this->payment_params->signature, // 'lkfg9groingghb4uw5'
'X-PAYPAL-DEVICE-IPADDRESS: ' . $ip,
'X-PAYPAL-REQUEST-DATA-FORMAT: ' .
$this->communication_formats[$format],
'X-PAYPAL-RESPONSE-DATA-FORMAT: ' .
$this->communication_formats[$format],
'X-PAYPAL-APPLICATION-ID: ' .
$this->payment_params->applicationid, //
'APP-80W284485P519543T'
);
if(empty($ip))
unset($headers[3]);
$struct = array(
'requestEnvelope' => array(
'errorLanguage' => 'en_US'
),
'actionType' => 'PAY',
'currencyCode' => $this->currency->currency_code,
'receiverList' => array(),
'feesPayer' => $fee,
'trackingId' =>
$order->order_id.'#'.uniqid(),
'cancelUrl' => $cancel_url,
'returnUrl' => $return_url,
'ipnNotificationUrl' => $notify_url,
'reverseAllParallelPaymentsOnError' =>
(@$this->payment_params->reverse_all_on_error ? 'true' :
'false'),
'clientDetails' => array(
'applicationId' =>
$this->payment_params->applicationid,
'ipAddress' => $ip,
'customerId' => $this->user->user_id
)
);
if(empty($ip))
unset($struct['clientDetails']['ipAddress']);
$db = JFactory::getDBO();
$suborders = array();
$vendors = array();
$order_id = $order->order_id;
if($order_id > 0 && $this->initMarket()) {
$query = 'SELECT b.*, a.* FROM ' .
hikamarket::table('shop.order') . ' AS a LEFT JOIN ' .
hikamarket::table('vendor') . ' AS b ON a.order_vendor_id =
b.vendor_id WHERE a.order_parent_id = ' . $order_id;
$db->setQuery($query);
$suborders = $db->loadObjectList();
}
if(!empty($suborders)) {
$full_amount =
round($order->cart->full_total->prices[0]->price_value_with_tax,
(int)$this->currency->currency_locale['int_frac_digits']);
$store_amount = $full_amount;
if($this->payment_params->payment_mode != 'chained' ||
!empty($this->payment_params->store_secondary)) {
foreach($suborders as $k => $suborder) {
if((int)$suborder->order_vendor_id <= 1)
continue;
$paypal_email = $suborder->vendor_email;
if(!empty($suborder->vendor_params))
$suborder->vendor_params =
unserialize($suborder->vendor_params);
if(!empty($suborder->vendor_params->paypal_email))
$paypal_email = $suborder->vendor_params->paypal_email;
$paypal_email = trim($paypal_email);
if(strpos($paypal_email, '@') === false)
continue;
$p = round(hikashop_toFloat($suborder->order_vendor_price),
(int)$this->currency->currency_locale['int_frac_digits']);
if($p >= 0) {
$store_amount -= $p;
} else {
$store_amount -=
round(hikashop_toFloat($suborder->order_vendor_price) +
$order->cart->full_total->prices[0]->price_value_with_tax,
(int)$this->currency->currency_locale['int_frac_digits']);
}
}
}
$e = array(
'email' => $this->payment_params->email,
'amount' => $store_amount
);
if($this->payment_params->payment_mode == 'chained')
$e['primary'] =
empty($this->payment_params->store_secondary) ? 'true' :
'false';
if($store_amount > 0)
$struct['receiverList'][] = $e;
$vendor_primary = empty($this->payment_params->store_secondary) ?
'false' : 'true';
foreach($suborders as $k => $suborder) {
$price = round(hikashop_toFloat($suborder->order_vendor_price),
(int)$this->currency->currency_locale['int_frac_digits']);
if($price < 0) {
$price = round(hikashop_toFloat($suborder->order_vendor_price) +
$order->cart->full_total->prices[0]->price_value_with_tax,
(int)$this->currency->currency_locale['int_frac_digits']);
}
if($suborder->order_vendor_price == 0.0 ||
(int)$suborder->order_vendor_id <= 1)
continue;
$paypal_email = $suborder->vendor_email;
if(!empty($suborder->vendor_params) &&
is_string($suborder->vendor_params))
$suborder->vendor_params =
unserialize($suborder->vendor_params);
if(!empty($suborder->vendor_params->paypal_email))
$paypal_email = $suborder->vendor_params->paypal_email;
$paypal_email = trim($paypal_email);
if(strpos($paypal_email, '@') === false)
continue;
$vendors[$suborder->order_vendor_id] = array(
'email' => $paypal_email,
'name' => $suborder->vendor_name,
'params' => $suborder->vendor_params
);
$e = array(
'email' => $paypal_email,
'amount' => $price
);
if($this->payment_params->payment_mode == 'chained') {
$e['primary'] = $vendor_primary;
if($vendor_primary == 'true')
$e['amount'] = $full_amount;
}
$vendor_primary = 'false';
$struct['receiverList'][] = $e;
}
if($vendor_primary == 'true' ||
count($struct['receiverList']) == 1) {
foreach($struct['receiverList'] as $k => $receiver) {
unset($struct['receiverList'][$k]['primary']);
}
}
} else {
$struct['receiverList'][] = array(
'email' => $this->payment_params->email,
'amount' =>
round($order->cart->full_total->prices[0]->price_value_with_tax,
(int)$this->currency->currency_locale['int_frac_digits'])
);
}
if(!empty($this->payment_params->debug)) {
echo '<pre>';
print_r($struct);
echo '</pre>';
}
$res = $this->submitPaypalData($url, $headers, $struct, $format);
if(isset($res['responseEnvelope.ack']) &&
strtolower($res['responseEnvelope.ack']) == 'failure')
{
$removed_vendors = array();
do {
$something_removed = false;
$failure = false;
$e = 0;
$errCode = $res['error('.$e.').errorId'];
if($errCode == '520009') {
$errParameter =
trim(urldecode($res['error('.$e.').parameter(0)']));
if($errParameter == $this->payment_params->email)
return false;
foreach($struct['receiverList'] as $k => $receiver) {
if($receiver['email'] == $errParameter) {
if($struct['receiverList'][$k]['primary'] !=
'true') {
$something_removed = true;
unset($struct['receiverList'][$k]);
}
}
}
if(!empty($vendors) && $something_removed) {
foreach($vendors as $id => $vendor) {
if($vendor['email'] == $errParameter) {
if(empty($vendor['params']))
$vendor['params'] = new stdClass();
$vendor['params']->paypal_email = 'no paypal
account';
$params = serialize($vendor['params']);
$db->setQuery('UPDATE
'.hikamarket::table('vendor').' SET vendor_params =
' . $db->Quote($params) . ' WHERE vendor_id = ' . $id);
$db->execute();
unset($params);
if(!empty($this->payment_params->notify_wrong_emails))
$removed_vendors[$id] = $vendor;
}
}
}
$res = $this->submitPaypalData($url, $headers, $struct, $format);
$failure = (isset($res['responseEnvelope.ack']) &&
strtolower($res['responseEnvelope.ack']) ==
'failure');
}
} while($failure && $something_removed);
if(!empty($removed_vendors)) {
$email = new stdClass();
$email->subject =
JText::_('INCORRECT_VENDOR_PAYPAL_EMAILS');
$email->body = str_replace('<br/>',
"\r\n",
JText::_('SOME_VENDORS_HAD_INCORRECT_PAYPAL_EMAILS')) .
"\r\n";
foreach($removed_vendors as $id => $removed_vendor) {
$email->body .= $removed_vendor['name'] . ' ('
. $id . ') : ' . $removed_vendor['email'] .
"\r\n";
}
$o = false;
$this->modifyOrder($o, null, null, $email);
}
}
if(!empty($this->payment_params->debug)) {
echo '<pre>';
print_r($res);
echo '</pre>';
}
$this->target = '';
if(isset($res['payKey'])) {
$this->paykey = $res['payKey'];
$this->display_mode = $display_mode;
if($display_mode == 'popup')
$this->target = 'PPDGFrame';
$this->return_url = $this->return_urls[ $this->display_mode ][
$this->payment_params->sandbox ? 'sandbox' :
'production' ];
} else {
if(isset($res['error(0).message'])) {
$this->app->enqueueMessage(
urldecode($res['error(0).message']) );
}
return false;
}
return $this->showPage('end');
}
private function afterOrderConfirm_Classical(&$order, &$methods,
$method_id) {
if($this->currency->currency_locale['int_frac_digits']
> 2)
$this->currency->currency_locale['int_frac_digits'] =
2;
$notify_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify¬if_payment='.$this->name.'&order_id='.$order->order_id.'&tmpl=component&lang='.$this->locale
. $this->url_itemid;
$return_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=after_end&order_id='.$order->order_id
. $this->url_itemid;
$cancel_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=order&task=cancel_order&order_id='.$order->order_id
. $this->url_itemid;
if(!isset($this->payment_params->sandbox) &&
isset($this->payment_params->debug))
$this->payment_params->sandbox =
$this->payment_params->debug;
$tax_total = '';
$discount_total = '';
$debug = @$this->payment_params->debug;
$sandbox = @$this->payment_params->sandbox;
if(!isset($this->payment_params->no_shipping))
$this->payment_params->no_shipping = 1;
if(!empty($this->payment_params->rm))
$this->payment_params->rm = 2;
$vars = array(
'cmd' => '_ext-enter',
'redirect_cmd' => '_cart',
'upload' => '1',
'business' => $this->payment_params->email,
'receiver_email' => $this->payment_params->email,
'invoice' => $order->order_id,
'currency_code' => $this->currency->currency_code,
'return' => $return_url,
'notify_url' => $notify_url,
'cancel_return' => $cancel_url,
'undefined_quantity' => '0',
'test_ipn' => $sandbox,
'no_shipping' => $this->payment_params->no_shipping,
'no_note' => !@$this->payment_params->notes,
'charset' => 'utf-8',
'rm' => (int)@$this->payment_params->rm,
'bn' => 'ObsidevHikaMarket_Cart_WPS'
);
$db = JFactory::getDBO();
$suborders = array();
$order_id = $order->order_id;
if($order_id > 0 && $this->initMarket()) {
$query = 'SELECT b.*, a.* FROM ' .
hikamarket::table('shop.order') . ' AS a LEFT JOIN ' .
hikamarket::table('vendor') . ' AS b ON a.order_vendor_id =
b.vendor_id ' .
' WHERE a.order_type = ' .
$db->quote('subsale') . ' AND a.order_parent_id = '
. $order_id;
$db->setQuery($query);
$suborders = $db->loadObjectList();
}
if(!empty($suborders)) {
$cpt = 0;
$suborder_id = -1;
foreach($suborders as $k => $suborder) {
if($suborder->order_vendor_price == 0.0 ||
(int)$suborder->order_vendor_id <= 1)
continue;
$suborder_id = $k;
$cpt++;
}
if($cpt == 1) {
$suborder = $suborders[$suborder_id];
$suborder_id = (int)$suborder->order_id;
if(is_string($suborder->vendor_params) &&
!empty($suborder->vendor_params))
$suborder->vendor_params =
unserialize($suborder->vendor_params);
$paypal_email = @$suborder->vendor_params->paypal_email;
if(!empty($paypal_email)) {
$vars['business'] = $paypal_email;
$vars['receiver_email'] = $paypal_email;
$order_vendor_price =
(float)hikamarket::toFloat($suborder->order_vendor_price);
if($order_vendor_price > 0) {
$order_vendor_price = $order_vendor_price -
$order->order_full_price;
$order_payment_params = $suborder->order_payment_params;
if(!empty($order_payment_params) &&
is_string($order_payment_params))
$order_payment_params = unserialize($order_payment_params);
else
$order_payment_params = new stdClass();
$order_payment_params->market_mode = 'commission';
$order_payment_params = serialize($order_payment_params);
$query = 'UPDATE ' .
hikamarket::table('shop.order') . ' SET order_vendor_price =
'.$db->Quote($order_vendor_price) . ', order_payment_params =
' . $db->Quote($order_payment_params).' WHERE order_id =
'.(int)$suborder_id;
$db->setQuery($query);
$db->execute();
}
}
}
}
if(!empty($this->payment_params->address_type)) {
$address_type = $this->payment_params->address_type .
'_address';
$address = $this->app->getUserState(HIKASHOP_COMPONENT .
'.' . $address_type);
if(!empty($address)) {
if(!isset($this->payment_params->address_override)) {
$this->payment_params->address_override = '1';
}
$vars['address_override'] =
$this->payment_params->address_override;
$vars['first_name'] =
@$order->cart->$address_type->address_firstname;
$vars['last_name'] =
@$order->cart->$address_type->address_lastname;
$address1 = '';
$address2 = '';
if(!empty($order->cart->$address_type->address_street2))
$address2 =
substr($order->cart->$address_type->address_street2, 0, 99);
if(!empty($order->cart->$address_type->address_street)) {
if(strlen($order->cart->$address_type->address_street) >
100) {
$address1 =
substr($order->cart->$address_type->address_street, 0, 99);
if(empty($address2))
$address2 =
substr($order->cart->$address_type->address_street, 99, 199);
} else {
$address1 = $order->cart->$address_type->address_street;
}
}
$vars['address1'] = $address1;
$vars['address2'] = $address2;
$vars['zip'] =
@$order->cart->$address_type->address_post_code;
$vars['city'] =
@$order->cart->$address_type->address_city;
if((!isset($order->cart->$address_type->address_state->zone_code_3)
||
is_numeric($order->cart->$address_type->address_state->zone_code_3))
&&
!empty($order->cart->$address_type->address_country->zone_name)){
$vars['state'] =
@$order->cart->$address_type->address_state->zone_name;
}else{
$vars['state'] =
@$order->cart->$address_type->address_state->zone_code_3;
}
$vars['country'] =
@$order->cart->$address_type->address_country->zone_code_2;
$vars['email'] = $this->user->user_email;
$vars['night_phone_b'] =
@$order->cart->$address_type->address_telephone;
}
elseif(!empty($order->cart->billing_address->address_country->zone_code_2))
{
$vars['lc'] =
$order->cart->billing_address->address_country->zone_code_2;
}
}
elseif(!empty($order->cart->billing_address->address_country->zone_code_2))
{
$vars['lc'] =
$order->cart->billing_address->address_country->zone_code_2;
}
if(!empty($this->payment_params->cpp_header_image)) {
$vars['cpp_header_image'] =
$this->payment_params->cpp_header_image;
}
if(empty($this->payment_params->details)) {
$vars['amount_1'] =
round($order->cart->full_total->prices[0]->price_value_with_tax,
(int)$this->currency->currency_locale['int_frac_digits']);
$vars['item_name_1'] =
JText::_('CART_PRODUCT_TOTAL_PRICE');
} else {
$i = 1;
$tax = 0;
$config =& hikashop_config();
$group = $config->get('group_options',0);
foreach($order->cart->products as $product) {
if($group && $product->order_product_option_parent_id)
continue;
$vars['item_name_' . $i] =
substr(strip_tags($product->order_product_name), 0, 127);
$vars['item_number_' . $i] =
$product->order_product_code;
$vars['amount_'.$i] = round($product->order_product_price,
(int)$this->currency->currency_locale['int_frac_digits']);
$vars['quantity_' . $i] =
$product->order_product_quantity;
$tax += round($product->order_product_tax,
(int)$this->currency->currency_locale['int_frac_digits']) *
$product->order_product_quantity;
$i++;
}
if(!empty($order->order_shipping_price) &&
bccomp($order->order_shipping_price, 0, 5)) {
$vars['item_name_' . $i] =
JText::_('HIKASHOP_SHIPPING');
$vars['amount_' . $i] = round($order->order_shipping_price
- @$order->order_shipping_tax,
(int)$this->currency->currency_locale['int_frac_digits']);
$tax += round($order->order_shipping_tax,
(int)$this->currency->currency_locale['int_frac_digits']);
$vars['quantity_' . $i] = 1;
$i++;
}
if(!empty($order->order_payment_price) &&
bccomp($order->order_payment_price, 0, 5)) {
$vars['item_name_' . $i] =
JText::_('HIKASHOP_PAYMENT');
$vars['amount_' . $i] = round($order->order_payment_price
- @$order->order_payment_tax,
(int)$this->currency->currency_locale['int_frac_digits']);
$tax += round($order->order_payment_tax,
(int)$this->currency->currency_locale['int_frac_digits']);
$vars['quantity_' . $i] = 1;
$i++;
}
if(bccomp($tax, 0, 5))
$vars['tax_cart'] = $tax;
if(!empty($order->cart->coupon))
$vars['discount_amount_cart'] =
round($order->order_discount_price,
(int)$this->currency->currency_locale['int_frac_digits']);
}
if((isset($this->payment_params->validation) &&
$this->payment_params->validation) ||
(isset($this->payment_params->enable_validation) &&
!$this->payment_params->enable_validation)) {
$vars['paymentaction'] = 'authorization';
}
if($sandbox)
$this->return_url =
'https://www.sandbox.paypal.com/cgi-bin/websc';
else
$this->return_url =
'https://www.paypal.com/cgi-bin/webscr';
$this->vars = $vars;
return $this->showPage('end');
}
public function onPaymentNotification(&$statuses) {
$order_id = 0;
$order_text = '';
if(!isset($this->payment_params->sandbox) &&
isset($this->payment_params->debug))
$this->payment_params->sandbox =
$this->payment_params->debug;
if(hikaInput::get()->getCmd('mode', '') ==
'popup' &&
hikaInput::get()->getCmd('subtask', '') !=
'') {
$order_id = (int)@$_GET['order_id'];
$task = hikaInput::get()->getCmd('subtask', '');
$doc = JFactory::getDocument();
$itemId = hikaInput::get()->getInt('Itemid', 0);
if($itemId > 0)
$itemId = '&Itemid'.$itemid;
else
$itemId = '';
if($task == 'after_end') {
$url =
hikashop_completeLink('checkout&task=after_end&order_id='
. $order_id . $itemId);
} else {
$url =
hikashop_completeLink('order&task=cancel_order&order_id='
. $order_id . $itemId);
}
$doc->addScriptDeclaration('
window.hikashop.ready(function() {
var fct = top.validatePaypalBox || top.opener.top.validatePaypalBox;
var dgFlow = top.dgFlow || top.opener.top.dgFlow;
fct("'.$url.'");
dgFlow.closeFlow();
top.close();
});');
return true;
}
$raw_data = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA :
file_get_contents('php://input');
$ipndata = $this->processIPNdata($raw_data);
$order_id = (int)@$_GET['order_id'];
if(isset($ipndata['tracking_id']))
$order_id = (int)substr($ipndata['tracking_id'], 0,
strpos($ipndata['tracking_id'], '#'));
$dbOrder = $this->getOrder((int)$order_id);
$this->loadPaymentParams($dbOrder);
if(empty($this->payment_params))
return false;
$this->loadOrderData($dbOrder);
if(!isset($ipndata['status']) &&
empty($this->payment_params->classical)) {
echo 'Paypal classic IPN, not adaptive one';
return false;
}
if($this->payment_params->debug)
echo print_r($ipndata, true) . "\r\n\r\n";
if(empty($dbOrder)) {
echo 'Could not load any order for your notification ' .
$order_id;
return false;
}
$order_text = "\r\n\r\n" . 'Order Id: ' . $order_id;
if(!empty($this->payment_params->ips)) {
$ip = hikashop_getIP();
$ips = str_replace(array('.', '*', ','),
array('\.', '[0-9]+', '|'),
$this->payment_params->ips);
if(!preg_match('#('.implode('|',$ips).')#',
$ip)) {
$email = new stdClass();
$email->subject =
JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER',
'Paypal') . ' ' .
JText::sprintf('IP_NOT_VALID', $dbOrder->order_number);
$email->body = str_replace('<br/>',
"\r\n", JText::sprintf('NOTIFICATION_REFUSED_FROM_IP',
'Paypal', $ip, implode("\r\n",
$this->payment_params->ips))) .
"\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION',
HIKASHOP_HELPURL . 'payment-paypal-error#ip') . $order_text;
$o = false;
$this->modifyOrder($o, null, null, $email);
if(HIKASHOP_J30) {
throw new JAccessExceptionNotallowed(JText::_('Access
Forbidden'), 403);
} else {
JError::raiseError(403, JText::_('Access Forbidden'));
}
return false;
}
$order_text .= "\r\n" . 'IP Address: ' . $ip;
}
if($this->payment_params->debug)
echo print_r($dbOrder, true) . "\r\n\r\n";
$ipnConfirm = $this->verifyIPN();
if(empty($response) || !preg_match('#VERIFIED#i', $response))
{
$notif_urls = array(
'production' =>
'https://www.paypal.com/webscr',
'sandbox' =>
'https://www.sandbox.paypal.com/webscr',
);
$notif_url = $notif_urls[ $this->payment_params->sandbox ?
'sandbox' : 'production' ];
$ipnConfirm = $this->sendIPNconfirm($notif_url, $raw_data .
'&cmd=_notify-validate');
}
if($this->payment_params->debug)
echo $ipnConfirm;
$db = JFactory::getDBO();
$suborders = array();
if($order_id > 0 && $this->initMarket()) {
$query = 'SELECT b.*, a.* FROM ' .
hikamarket::table('shop.order') . ' AS a LEFT JOIN ' .
hikamarket::table('vendor') . ' AS b ON a.order_vendor_id =
b.vendor_id WHERE a.order_parent_id = ' . $order_id;
$db->setQuery($query);
$suborders = $db->loadObjectList();
}
$verified = preg_match('#VERIFIED#i', $ipnConfirm);
if(!$verified) {
if(empty($raw_data))
$order_text .= "\r\n" . 'Warning: Empty data
received.';
$email = new stdClass();
if(preg_match('#INVALID#i', $ipnConfirm)) {
$email->subject =
JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER',
'Paypal') . ' invalid transaction';
$email->body = JText::sprintf("Hello,\r\n A paypal notification
was refused because it could not be verified by the paypal server").
"\r\n\r\n".JText::sprintf('CHECK_DOCUMENTATION',
HIKASHOP_HELPURL . 'payment-paypal-error#invalidtnx') .
$order_text;
if($this->payment_params->debug)
echo 'invalid transaction'."\n\n\n";
} else {
$email->subject =
JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER',
'Paypal') . ' invalid response';
$email->body = JText::sprintf("Hello,\r\n A paypal notification
was refused because the response from the paypal server was
invalid").
"\r\n\r\n".JText::sprintf('CHECK_DOCUMENTATION',
HIKASHOP_HELPURL . 'payment-paypal-error#invalidresponse') .
$order_text;
if($this->payment_params->debug)
echo 'invalid response'."\n\n\n";
}
$o = false;
$this->modifyOrder($o, null, null, $email);
return false;
}
if(!empty($this->payment_params->classical)) {
$ipndata['status'] = $ipndata['payment_status'];
}
$completed = preg_match('#Completed#i',
$ipndata['status']);
$pending = preg_match('#Pending#i',
$ipndata['status']);
if(!$completed && !$pending) {
$email = new stdClass();
$email->subject =
JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER',
'Paypal', $ipndata['status'],
$dbOrder->order_number);
$email->body =
str_replace('<br/>',"\r\n",JText::sprintf('PAYMENT_NOTIFICATION_STATUS',
'Paypal', $ipndata['status'])) .
' ' . JText::_('STATUS_NOT_CHANGED') .
"\r\n\r\n" .
JText::sprintf('CHECK_DOCUMENTATION',HIKASHOP_HELPURL.'payment-paypal-error#status')
. $order_text;
$o = false;
$this->modifyOrder($o, null, null, $email);
if($this->payment_params->debug)
echo 'payment ' . $ipndata['status'] .
"\r\n\r\n";
return false;
}
$paypal_ids = array();
$amount = 0;
if(empty($this->payment_params->classical)) {
$receiver_emails = array();
foreach($ipndata['transaction'] as $transaction) {
$paypal_ids[] = $transaction['id'];
$receiver_emails[] = $transaction['receiver'];
}
$amount = $ipndata['transaction'][0]['amount'];
} else {
$paypal_ids[] = $ipndata['txn_id'];
$amount = @$ipndata['mc_gross'] .
@$ipndata['mc_currency'];
}
echo 'PayPal transaction id: '.implode(', ',
$paypal_ids) . "\r\n\r\n";
$history = new stdClass();
$history->notified = 0;
$history->amount = $amount;
$history->data = ob_get_clean();
if($this->currency->currency_locale['int_frac_digits']
> 2)
$this->currency->currency_locale['int_frac_digits'] =
2;
$price_check = round($dbOrder->order_full_price,
(int)$this->currency->currency_locale['int_frac_digits']);
if(!empty($this->payment_params->classical) &&
($price_check != @$ipndata['mc_gross'] ||
$this->currency->currency_code !=
@$ipndata['mc_currency'])) {
$email = new stdClass();
$email->subject =
JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER','Paypal').JText::_('INVALID_AMOUNT');
$email->body = str_replace('<br/>', "\r\n",
JText::sprintf('AMOUNT_RECEIVED_DIFFERENT_FROM_ORDER',
'Paypal', $history->amount, $price_check .
$this->currency->currency_code)) . "\r\n\r\n" .
JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL .
'payment-paypal-error#amount') . $order_text;
$this->modifyOrder($order_id,
$this->payment_params->invalid_status, $history, $email);
return false;
}
if($completed) {
$order_status = $this->payment_params->verified_status;
} else {
$order_status = $this->payment_params->pending_status;
$order_text = JText::sprintf('CHECK_DOCUMENTATION',
HIKASHOP_HELPURL . 'payment-paypal-error#pending') .
"\r\n\r\n" . $order_text;
}
if($dbOrder->order_status == $order_status)
return true;
$config = hikashop_config();
if($config->get('order_confirmed_status',
'confirmed') == $order_status)
$history->notified = 1;
$email = new stdClass();
$email->subject =
JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER',
'Paypal', $ipndata['status'],
$dbOrder->order_number);
$email->body =
str_replace('<br/>',"\r\n",JText::sprintf('PAYMENT_NOTIFICATION_STATUS',
'Paypal', $ipndata['status'])).'
'.JText::sprintf('ORDER_STATUS_CHANGED',$order->mail_status)."\r\n\r\n".$order_text;
$this->modifyOrder($order_id, $order_status, $history, $email);
if(!empty($suborders) &&
empty($this->payment_params->classical)) {
$suborders_id = array();
$vendor_ids = array();
foreach($suborders as $suborder) {
$paypal_email = $suborder->vendor_email;
if(!empty($suborder->vendor_params) &&
is_string($suborder->vendor_params))
$suborder->vendor_params =
unserialize($suborder->vendor_params);
if(!empty($suborder->vendor_params->paypal_email))
$paypal_email = $suborder->vendor_params->paypal_email;
if(in_array($paypal_email, $receiver_emails)) {
$suborders_id[] = $suborder->order_id;
$vendor_ids[] = $suborder->order_vendor_id;
}
}
if(!empty($vendor_ids)) {
$query = 'UPDATE ' .
hikamarket::table('order_transaction') . ' SET
order_transaction_paid = order_id WHERE order_id =
'.(int)$order_id.' AND vendor_id IN (' .
implode(',', $vendor_ids) . ')';
$db->setQuery($query);
$db->execute();
}
}
return true;
}
public function onPaymentConfiguration(&$element) {
$subtask = hikaInput::get()->getCmd('subtask',
'');
if($subtask == 'ips') {
$ips = null;
echo implode(',', $this->getIPList($ips));
exit;
}
parent::onPaymentConfiguration($element);
$this->address = hikashop_get('type.address');
if(empty($element->payment_params->username)) {
$app = JFactory::getApplication();
$lang = JFactory::getLanguage();
$locale = strtolower(substr($lang->get('tag'), 0, 2));
$app->enqueueMessage(JText::sprintf('ENTER_INFO_REGISTER_IF_NEEDED',
'PayPal', JText::_('HIKA_EMAIL'), 'PayPal',
'https://www.paypal.com/' . $locale .
'/mrb/pal=SXL9FKNKGAEM8'));
}
if(!function_exists('curl_init')) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('CURL_NOT_FOUND'),
'error');
}
}
public function onPaymentConfigurationSave(&$element) {
$ret = parent::onPaymentConfigurationSave($element);
if($ret) {
$element->payment_params->market_support = true;
if(!empty($element->payment_params->ips))
$element->payment_params->ips = explode(',',
$element->payment_params->ips);
}
return $ret;
}
private function convertStruct($struct, $format = 'nv') {
if($format != 'nv')
return '';
$output = array();
foreach($struct as $k => $v) {
if(is_array($v)) {
foreach($v as $l => $w) {
if(is_numeric($l)) {
foreach($w as $n => $x) {
$output[] = $k . '.' . str_replace('List',
'', $k) . '(' . $l . ').' . $n .
'=' . urlencode($x);
}
} else {
$output[] = $k . '.' . $l . '=' . urlencode($w);
}
}
} else {
$output[] = $k . '=' . urlencode($v);
}
}
return implode('&', $output);
}
private function parseResponse($data, $format = 'nv') {
if($format != 'nv')
return $data;
$res = array();
$tmp = explode('&', $data);
foreach($tmp as $t) {
if(strpos($t, '=') === false)
continue;
list($k,$v) = explode('=', $t, 2);
$res[$k] = $v;
}
unset($tmp);
return $res;
}
private function submitPaypalData($url, $headers, $struct, $format =
'nv') {
$data = $this->convertStruct($struct, $format);
if(!empty($this->payment_params->use_fsock))
return $this->submitPaypalData_socket($url, $headers, $data,
$format);
$session = curl_init();
curl_setopt($session, CURLOPT_FRESH_CONNECT, true);
curl_setopt($session, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($session, CURLOPT_FAILONERROR, true);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_USERAGENT,
'HikaMarket-Paypal-Adaptive');
curl_setopt($session, CURLOPT_TIMEOUT, 60);
curl_setopt($session, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($session, CURLOPT_COOKIEFILE, '');
curl_setopt($session, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($session, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($session, CURLOPT_SSLVERSION, 6);
curl_setopt($session, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
curl_setopt($session, CURLOPT_URL, $url);
curl_setopt($session, CURLOPT_POST, true);
curl_setopt($session, CURLOPT_POSTFIELDS, $data);
$curl_version = curl_version();
$sslVersion = isset($curl_version['ssl_version']) ?
$curl_version['ssl_version'] : '';
if(substr($sslVersion, 0, 4) != 'NSS/') {
curl_setopt($session, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
}
$result = trim(curl_exec($session));
$error = curl_error($session);
curl_close($session);
$ret = $this->parseResponse($result, $format);
if(empty($ret) && !empty($error) &&
!empty($this->payment_params->debug)) {
$app = JFactory::getApplication();
$app->enqueueMessage($error, 'error');
}
return $ret;
}
private function submitPaypalData_socket($dest_url, $headers, $data,
$format) {
$url = parse_url($dest_url);
if(!isset($url['query']))
$url['query'] = '';
if(!isset($url['port'])) {
if(!empty($url['scheme']) &&
in_array($url['scheme'], array('https',
'ssl'))) {
$url['port'] = 443;
} else {
$url['port'] = 80;
}
}
if(!empty($url['scheme']) &&
in_array($url['scheme'], array('https',
'ssl'))) {
$url['host_socket'] = 'ssl://' .
$url['host'];
} else {
$url['host_socket'] = $url['host'];
}
$fp = fsockopen($url['host_socket'], $url['port'],
$errno, $errstr, 30);
if(!$fp)
return false;
if(empty($headers)) {
$headers = '';
} else {
$headers = implode("\r\n", $headers) . "\r\n";
}
$uri = $url['path'] . ($url['query'] != ''
? '?' . $url['query'] : '');
$header = 'POST '.$uri.' HTTP/1.1'."\r\n".
'User-Agent: PHP/'.phpversion()."\r\n".
'Server:
'.$_SERVER['SERVER_SOFTWARE']."\r\n".
'Host: '.$url['host']."\r\n".
'Content-Type:
application/x-www-form-urlencoded'."\r\n".
'Content-Length: '.strlen($data)."\r\n".
'Accept: */'.'*'."\r\n".$headers.
'Connection: close'."\r\n\r\n";
fwrite($fp, $header . $data);
$response = '';
while(!feof($fp)) {
$response .= @fgets($fp, 4096);
}
fclose ($fp);
$result = substr($response, strpos($response, "\r\n\r\n") +
strlen("\r\n\r\n"));
$lines = explode("\n", $result);
if(strpos($lines[0], '&') === false)
array_shift($lines);
$result = reset($lines);
return $this->parseResponse($result, $format);
}
private function processIPNdata($data = '') {
if(empty($data))
return array();
$ret = array();
$elements = explode('&', $data);
foreach($elements as $element) {
if(strpos($element, '=') === false)
continue;
list($k, $v) = explode('=', $element, 2);
$k = urldecode($k);
$v = urldecode($v);
preg_match('/(\w+)(?:\[(\d+)\])?(?:\.(\w+))?/', $k, $parts);
switch(count($parts)) {
case 4:
if(!isset($ret[ $parts[1] ]))
$ret[ $parts[1] ] = array();
if(!isset($ret[ $parts[1] ][ $parts[2] ]))
$ret[ $parts[1] ][ $parts[2] ] = array();
$ret[ $parts[1] ][ $parts[2] ][ $parts[3] ] = $v;
break;
case 3:
if(!isset($ret[$parts[1]]))
$ret[ $parts[1] ] = array();
$ret[ $parts[1] ][ $parts[2] ] = $v;
break;
default:
$ret[$k] = $v;
break;
}
}
return $ret;
}
private function sendIPNconfirm($notif_url, $data = '') {
$url = parse_url($notif_url);
if(!isset($url['query']))
$url['query'] = '';
if(!isset($url['port'])) {
if(!empty($url['scheme']) &&
in_array($url['scheme'], array('https',
'ssl'))) {
$url['port'] = 443;
} else {
$url['port'] = 80;
}
}
if(!empty($url['scheme']) &&
in_array($url['scheme'], array('https',
'ssl'))) {
$url['host_socket'] = 'ssl://' .
$url['host'];
} else {
$url['host_socket'] = $url['host'];
}
if(!empty($this->payment_params->use_fsock))
return $this->sendIPNconfirm_socket($url, $data);
return $this->sendIPNconfirm_socket($url, $data);
}
private function sendIPNconfirm_socket($url, $data = '') {
$fp = fsockopen($url['host_socket'], $url['port'],
$errno, $errstr, 30);
if(!$fp)
return false;
$uri = $url['path'] . ($url['query'] != ''
? '?' . $url['query'] : '');
$header = 'POST '.$uri.' HTTP/1.1'."\r\n".
'User-Agent: PHP/'.phpversion()."\r\n".
'Referer: '.hikashop_currentURL()."\r\n".
'Server:
'.$_SERVER['SERVER_SOFTWARE']."\r\n".
'Host: '.$url['host']."\r\n".
'Content-Type:
application/x-www-form-urlencoded'."\r\n".
'Content-Length: '.strlen($data)."\r\n".
'Accept: */'.'*'."\r\n".
'Connection: close'."\r\n\r\n";
fwrite($fp, $header . $data);
$response = '';
while(!feof($fp)) {
$response .= fgets($fp, 1024);
}
fclose ($fp);
$response = substr($response, strpos($response, "\r\n\r\n") +
strlen("\r\n\r\n"));
return $response;
}
private function sendIPNconfirm_CURL($url, $data = '') {
if(!function_exists('curl_version')) {
if($this->payment_params->debug)
echo 'CURL is not available'. "\r\n\r\n";
return false;
}
$uri = $url['scheme'] . '://' .
$url['host'] . $url['path'] . ($url['query']
!= '' ? '?' . $url['query'] : '');
$ch = curl_init($uri);
if(!$ch){
if($this->payment_params->debug)
echo 'CURL could not be initialized'. "\r\n\r\n";
return false;
}
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection:
Close'));
curl_setopt($ch, CURLOPT_FAILONERROR,true);
if($this->payment_params->debug) {
echo print_r($data, true) . "\r\n\r\n";
}
$response = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
curl_close($ch);
if (!$response) {
if($this->payment_params->debug)
echo 'CURL request didn\t return any data'.
"\r\n\r\n";
return false;
}
if($errno){
if($this->payment_params->debug) {
echo 'CURL error number: '.$errno. "\r\n\r\n";
echo 'CURL error message: '.$error. "\r\n\r\n";
}
}
if($this->payment_params->debug) {
echo print_r($response, true) . "\r\n\r\n";
}
return $response;
}
protected function verifyIPN() {
if(!function_exists('curl_version'))
return false;
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
$keyval = explode('=', $keyval);
if (count($keyval) == 2) {
if ($keyval[0] === 'payment_date') {
if (substr_count($keyval[1], '+') === 1) {
$keyval[1] = str_replace('+', '%2B',
$keyval[1]);
}
}
$myPost[$keyval[0]] = urldecode($keyval[1]);
}
}
$req = 'cmd=_notify-validate';
$get_magic_quotes_exists = false;
if (function_exists('get_magic_quotes_gpc')) {
$get_magic_quotes_exists = true;
}
foreach ($myPost as $key => $value) {
if ($get_magic_quotes_exists == true && get_magic_quotes_gpc()
== 1) {
$value = urlencode(stripslashes($value));
} else {
$value = urlencode($value);
}
$req .= "&$key=$value";
}
if(empty($this->payment_params->url))
$this->payment_params->url =
'https://www.paypal.com/cgi-bin/webscr';
if(strpos($this->payment_params->url, 'sandbox') ===
false) {
$url = 'https://ipnpb.paypal.com/cgi-bin/webscr';
} else {
$url = 'https://ipnpb.sandbox.paypal.com/cgi-bin/webscr';
}
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection:
Close'));
$res = curl_exec($ch);
if ( ! ($res)) {
$errno = curl_errno($ch);
$errstr = curl_error($ch);
curl_close($ch);
$this->writeToLog("cURL error: [$errno] $errstr");
return false;
}
$info = curl_getinfo($ch);
$http_code = $info['http_code'];
if ($http_code != 200) {
$this->writeToLog("PayPal responded with http code
$http_code");
return false;
}
curl_close($ch);
return $res;
}
public function getPaymentDefaultValues(&$element) {
$element->payment_name = 'PayPal';
$element->payment_description = 'You can pay by credit card or
paypal using this payment method';
$element->payment_images =
'MasterCard,VISA,Credit_card,PayPal';
$element->payment_params->username = '';
$element->payment_params->password = '';
$element->payment_params->signature = '';
$element->payment_params->ips = '';
$element->payment_params->invalid_status = 'cancelled';
$element->payment_params->pending_status = 'created';
$element->payment_params->verified_status = 'confirmed';
}
private function getIPList(&$ipList) {
$hosts = array(
'www.paypal.com',
'notify.paypal.com',
'ipn.sandbox.paypal.com'
);
$ipList = array();
foreach($hosts as $host) {
$ips = gethostbynamel($host);
if(empty($ips))
continue;
if(empty($ipList))
$ipList = $ips;
else
$ipList = array_merge($ipList, $ips);
}
if(empty($ipList))
return $ipList;
$newList = array();
foreach($ipList as $k => $ip) {
$ipParts = explode('.', $ip);
if(count($ipParts) == 4) {
array_pop($ipParts);
$ip = implode('.', $ipParts) . '.*';
}
if(!in_array($ip, $newList))
$newList[] = $ip;
}
return $newList;
}
}
extensions/plg_hikashoppayment_paypaladaptive/paypaladaptive.xml000064400000002523151160562410021626
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikashoppayment">
<name>Hikashop (market) Paypal Adaptive Payment Plugin</name>
<hikainstall ordering="0" enable="1"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin enables you to setup your paypal adaptive
payment system</description>
<files>
<filename
plugin="paypaladaptive">paypaladaptive.php</filename>
<filename>paypaladaptive_configuration.php</filename>
<filename>paypaladaptive_end.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
<param name="pluginoptions" type="pluginoptions"
default="plugin" label="hikashop"
description="HikaShop options" />
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
<fieldset name="basic">
<field id="pluginoptions" name="pluginoptions"
type="pluginoptions" label="hikashop"
description="HikaShop options" />
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikashoppayment_paypaladaptive/paypaladaptive_configuration.php000064400000022751151160562410024551
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><tr>
<td class="key">
<label
for="data[payment][payment_params][email]"><?php
echo JText::_('HIKA_EMAIL');
?></label>
</td>
<td>
<input type="text"
name="data[payment][payment_params][email]" value="<?php
echo $this->escape(@$this->element->payment_params->email);
?>" />
</td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][classical]"><?php
echo JText::_('PAYPAL_CLASSICAL');
?></label>
</td>
<td><?php
if(!isset($this->element->payment_params->classical))
$this->element->payment_params->classical = false;
echo JHTML::_('hikaselect.booleanlist',
"data[payment][payment_params][classical]" , '
onchange="pp_adative_classical(this);"',
$this->element->payment_params->classical);
?>
<script type="text/javascript">
function pp_adative_classical(el) {
var value = (el.value == "1"), elements =
document.getElementsByTagName('tr');
for (var i = 0; i < elements.length; i++) {
if(elements[i].className == "pp_adative_opt")
elements[i].style.display = (value ? 'none' : '');
}
}
window.hikashop.ready(function(){
var el = {value:<?php echo
(int)$this->element->payment_params->classical; ?>};
pp_adative_classical(el);
});
</script>
</td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][username]"><?php
echo JText::_('HIKA_USERNAME');
?></label>
</td>
<td>
<input type="text"
name="data[payment][payment_params][username]"
value="<?php echo
$this->escape(@$this->element->payment_params->username);
?>" />
</td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][password]"><?php
echo JText::_('HIKA_PASSWORD');
?></label>
</td>
<td>
<input type="text"
name="data[payment][payment_params][password]"
value="<?php echo
$this->escape(@$this->element->payment_params->password);
?>" />
</td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][signature]"><?php
echo JText::_('SIGNATURE');
?></label>
</td>
<td>
<input type="text"
name="data[payment][payment_params][signature]"
value="<?php echo
$this->escape(@$this->element->payment_params->signature);
?>" />
</td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][applicationid]"><?php
echo 'Application Id';
?></label>
</td>
<td>
<input type="text"
name="data[payment][payment_params][applicationid]"
value="<?php echo
$this->escape(@$this->element->payment_params->applicationid);
?>" />
</td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][reverse_all_on_error]"><?php
echo 'Reverse all on error';
?></label>
</td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"data[payment][payment_params][reverse_all_on_error]" ,
'',
@$this->element->payment_params->reverse_all_on_error);
?></td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][payment_mode]"><?php
echo 'Payment mode';
?></label>
</td>
<td><?php
$arr = array(
JHTML::_('select.option', 'chained',
'Chained'),
JHTML::_('select.option', 'parallel',
'Parallel'),
);
echo JHTML::_('hikaselect.genericlist', $arr,
"data[payment][payment_params][payment_mode]", '',
'value', 'text',
@$this->element->payment_params->payment_mode);
?></td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][display_mode]"><?php
echo 'Display mode';
?></label>
</td>
<td><?php
$arr = array(
JHTML::_('select.option', 'redirect',
'Redirect'),
JHTML::_('select.option', 'popup',
'Popup'),
);
echo JHTML::_('hikaselect.genericlist', $arr,
"data[payment][payment_params][display_mode]", '',
'value', 'text',
@$this->element->payment_params->display_mode);
?></td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][fee_mode]"><?php
echo 'Fee mode';
?></label>
</td>
<td><?php
$arr = array(
JHTML::_('select.option', 'each', 'Each
Receiver'),
JHTML::_('select.option', 'sender',
'Sender'),
JHTML::_('select.option', 'primary', 'Primary
Receiver'),
JHTML::_('select.option', 'secondary',
'Secondary Receiver(s)'),
);
echo JHTML::_('hikaselect.genericlist', $arr,
"data[payment][payment_params][fee_mode]", '',
'value', 'text',
@$this->element->payment_params->fee_mode);
?></td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][store_secondary]"><?php
echo 'Put store as a secondary receiver';
?></label>
</td>
<td>
<?php echo JHTML::_('hikaselect.booleanlist',
"data[payment][payment_params][store_secondary]" , '',
@$this->element->payment_params->store_secondary); ?>
<p>
<em><strong>Important</strong>: This option is not
recommended.<br/>
It won't work correctly if you have several vendors in a single
order.</em>
</p>
</td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][debug]"><?php
echo JText::_('DEBUG');
?></label>
</td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"data[payment][payment_params][debug]" , '',
@$this->element->payment_params->debug);
?></td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][sandbox]"><?php
echo JText::_('SANDBOX');
?></label>
</td>
<td><?php
if(!isset($this->element->payment_params->sandbox) &&
isset($this->element->payment_params->debug))
$this->element->payment_params->sandbox =
$this->element->payment_params->debug;
echo JHTML::_('hikaselect.booleanlist',
"data[payment][payment_params][sandbox]" , '',
@$this->element->payment_params->sandbox);
?></td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][notify_wrong_emails]"><?php
echo 'Notify for wrong emails';
?></label>
</td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"data[payment][payment_params][notify_wrong_emails]" ,
'',
@$this->element->payment_params->notify_wrong_emails);
?></td>
</tr>
<tr class="pp_adative_opt">
<td class="key">
<label
for="data[payment][payment_params][use_fsock]"><?php
echo 'Use Raw sockets instead of cURL';
?></label>
</td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"data[payment][payment_params][use_fsock]" , '',
@$this->element->payment_params->use_fsock);
?></td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][validation]"><?php
echo JText::_('ENABLE_VALIDATION').' (Classical
only)'
?></label>
</td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'data[payment][payment_params][validation]', '',
@$this->element->payment_params->validation);
?></td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][cancel_url]"><?php
echo JText::_('CANCEL_URL');
?></label>
</td>
<td>
<input type="text"
name="data[payment][payment_params][cancel_url]"
value="<?php echo
$this->escape(@$this->element->payment_params->cancel_url);
?>" />
</td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][return_url]"><?php
echo JText::_('RETURN_URL');
?></label>
</td>
<td>
<input type="text"
name="data[payment][payment_params][return_url]"
value="<?php echo
$this->escape(@$this->element->payment_params->return_url);
?>" />
</td>
</tr>
<tr>
<td class="key">
<label for="data[payment][payment_params][ips]"><?php
echo JText::_('IPS');
?></label>
</td>
<td>
<textarea id="paypal_ips"
name="data[payment][payment_params][ips]" ><?php echo
(!empty($this->element->payment_params->ips) &&
is_array($this->element->payment_params->ips)?trim(implode(',',$this->element->payment_params->ips)):'');
?></textarea>
<br/>
<a href="#" onclick="return
paypal_refreshIps();"><?php echo
JText::_('REFRESH_IPS');?></a>
<script type="text/javascript">
function paypal_refreshIps() {
var w = window, d = document, o = w.Oby;
o.xRequest('<?php echo
hikashop_completeLink('plugins&plugin_type=payment&task=edit&name='.$this->data['name'].'&subtask=ips',true,true);?>',
null, function(xhr) {
d.getElementById('paypal_ips').value = xhr.responseText;
});
return false;
}
</script>
</td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][invalid_status]"><?php
echo JText::_('INVALID_STATUS');
?></label>
</td>
<td><?php
echo
$this->data['order_statuses']->display("data[payment][payment_params][invalid_status]",
@$this->element->payment_params->invalid_status);
?></td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][pending_status]"><?php
echo JText::_('PENDING_STATUS');
?></label>
</td>
<td><?php
echo
$this->data['order_statuses']->display("data[payment][payment_params][pending_status]",
@$this->element->payment_params->pending_status);
?></td>
</tr>
<tr>
<td class="key">
<label
for="data[payment][payment_params][verified_status]"><?php
echo JText::_('VERIFIED_STATUS');
?></label>
</td>
<td><?php
echo
$this->data['order_statuses']->display("data[payment][payment_params][verified_status]",
@$this->element->payment_params->verified_status);
?></td>
</tr>
extensions/plg_hikashoppayment_paypaladaptive/paypaladaptive_end.php000064400000005075151160562410022450
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="hikashop_paypal_end"
id="hikashop_paypal_end">
<span id="hikashop_paypal_end_message"
class="hikashop_paypal_end_message">
<?php
if(!empty($this->display_mode) && $this->display_mode ==
'popup') {
echo JText::sprintf('PLEASE_WAIT_BEFORE_SUBMISSION_TO_X',
$this->payment_name).'<br/>'.
JText::_('CLICK_ON_BUTTON_IF_NOTHING');
} else {
echo JText::sprintf('PLEASE_WAIT_BEFORE_REDIRECTION_TO_X',
$this->payment_name).'<br/>'.
JText::_('CLICK_ON_BUTTON_IF_NOT_REDIRECTED');
}
?>
</span>
<span id="hikashop_paypal_end_spinner"
class="hikashop_paypal_end_spinner
hikashop_checkout_end_spinner"></span>
<br/>
<form id="hikashop_paypal_form"
name="hikashop_paypal_form" action="<?php echo
$this->return_url;?>" target="<?php echo
@$this->target; ?>" method="<?php
if(!empty($this->display_mode) && $this->display_mode ==
'popup') { echo 'GET'; } else { echo 'POST';
} ?>">
<?php
if(empty($this->payment_params->classical)) {
?>
<input id="paykey" type="hidden"
name="paykey" value="<?php echo $this->paykey;
?>">
<?php if(!empty($this->display_mode) &&
$this->display_mode == 'popup') { ?>
<input id="type" type="hidden"
name="expType" value="light"> <!-- or
"mini" -->
<?php }
} else {
foreach($this->vars as $name => $value ) {
echo '<input type="hidden"
name="'.$name.'"
value="'.htmlspecialchars((string)$value).'"
/>';
}
}
?>
<div id="hikashop_paypal_end_image"
class="hikashop_paypal_end_image">
<input id="hikashop_paypal_button" type="submit"
class="hikabtn hikabtn-primary" value="<?php echo
JText::_('PAY_NOW');?>" name=""
alt="<?php echo JText::_('PAY_NOW');?>" />
</div>
<?php
hikaInput::get()->set('noform', 1);
?>
</form>
<?php if(!empty($this->display_mode) &&
$this->display_mode == 'popup') { ?>
<script
src="https://www.paypalobjects.com/js/external/dg.js"></script>
<script>
<!--
var dgFlow = new PAYPAL.apps.DGFlow({ trigger:
"hikashop_paypal_button" });
function validatePaypalBox(url) {
window.location = url;
}
//-->
</script>
<?php
}
if(!$this->payment_params->debug) {
?>
<script type="text/javascript">
<!--
document.getElementById('hikashop_paypal_form').submit();
//-->
</script>
<?php
} else {
echo '<p><strong>[Debug mode] Please do a manual
validation</strong></p>';
}
?>
</div>
extensions/plg_hikashop_market/index.html000064400000000032151160562410014747
0ustar00<html><body></body></html>extensions/plg_hikashop_market/market.php000064400000105321151160562410014755
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopMarket extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
private function init() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
public function onProductFormDisplay(&$product, &$html) {
if(!$this->init())
return;
$params = new HikaParameter('');
$params->set('product_id', 0);
$params->set('product_type', '');
$params->set('product_vendor_id', 0);
if(!empty($product->product_vendor_id))
$params->set('product_vendor_id',
(int)$product->product_vendor_id);
if(!empty($product->product_type))
$params->set('product_type', $product->product_type);
if(!empty($product->product_id))
$params->set('product_id', (int)$product->product_id);
$js = '';
$ret = hikamarket::getLayout('productmarket',
'shop_form', $params, $js);
if(!empty($ret)) {
$html[] = array(
'name' => 'hikamarket_vendor',
'label' => 'HIKA_VENDOR',
'content' => $ret
);
}
}
public function onProductBlocksDisplay(&$product, &$html) {
if(!$this->init())
return;
$params = new HikaParameter('');
$params->set('product_id', 0);
$params->set('product_type', '');
if(!empty($product->product_type))
$params->set('product_type', $product->product_type);
if(!empty($product->product_id))
$params->set('product_id', (int)$product->product_id);
$js = '';
$ret = hikamarket::getLayout('productmarket',
'shop_block', $params, $js);
if(!empty($ret)) {
$html[] = $ret;
}
}
public function onAfterProductCreate(&$product) {
$app = JFactory::getApplication();
if(!$app->isAdmin())
return;
if(!$this->init())
return;
$productClass = hikamarket::get('class.product');
$productClass->backSaveForm($product);
}
public function onAfterProductUpdate(&$product) {
$app = JFactory::getApplication();
if(!$app->isAdmin())
return;
if(!$this->init())
return;
$productClass = hikamarket::get('class.product');
$productClass->backSaveForm($product);
}
public function onBeforeProductCreate(&$product, &$do) {
$this->onBeforeProductUpdate($product, $do);
}
public function onBeforeProductUpdate(&$product, &$do) {
if(!isset($product->product_vendor_params))
return;
if(!is_string($product->product_vendor_params)) {
$product->product_vendor_params =
serialize($product->product_vendor_params);
} else {
$formData = hikaInput::get()->get('data', array(),
'array');
if(!empty($formData) &&
!empty($formData['product']['product_vendor_params']))
{
$product->product_vendor_params =
serialize($formData['product']['product_vendor_params']);
} else {
$product->product_vendor_params = '';
}
}
}
public function onBeforeProductExport( &$products, &$categories,
&$view) {
$db = JFactory::getDBO();
$db->setQuery('SELECT * FROM
'.hikashop_table('category').' AS a WHERE
(a.category_type=\'product\' OR
a.category_type=\'vendor\') ORDER BY a.category_left ASC');
$categories = $db->loadObjectList('category_id');
$db->setQuery('SELECT * FROM
'.hikashop_table('file').' AS a WHERE
a.file_type=\'category\' AND a.file_ref_id IN
('.implode(',',array_keys($categories)).')');
$files = $db->loadObjectList('file_ref_id');
foreach($categories as $id => $cat){
if(isset($files[$id])){
$categories[$id]->file_path=$files[$id]->file_path;
}
}
}
public function onAfterOrderProductsListingDisplay(&$order, $type) {
if(!$this->init())
return;
if($type == 'order_back_show') {
$params = new HikaParameter('');
if(isset($order->order_id)) {
$params->set('order_id', $order->order_id);
} else {
$params->set('order_id',
$order->products[0]->order_id);
}
$js = '';
echo hikamarket::getLayout('ordermarket',
'show_'.$type, $params, $js);
}
}
public function onBeforeOrderCreate(&$order, &$do) {
if(!$this->init())
return;
$orderClass = hikamarket::get('class.order');
$orderClass->beforeCreate($order, $do);
}
public function onAfterOrderCreate(&$order, &$send_email) {
if(!$this->init())
return;
$orderClass = hikamarket::get('class.order');
$orderClass->afterCreate($order, $send_email);
$app = JFactory::getApplication();
$app->setUserState(HIKAMARKET_COMPONENT.'.checkout_terms',
null);
}
public function onBeforeOrderProductsUpdate(&$order, &$do) {
if(!$this->init())
return;
$orderClass = hikamarket::get('class.order');
$orderClass->beforeProductsUpdate($order, $do);
}
public function onBeforeOrderUpdate(&$order, &$do) {
if(!$this->init())
return;
$orderClass = hikamarket::get('class.order');
$orderClass->beforeUpdate($order, $do);
}
public function onAfterOrderUpdate(&$order, &$send_email) {
if(!$this->init())
return;
$orderClass = hikamarket::get('class.order');
$orderClass->afterUpdate($order, $send_email);
}
public function onBeforeOrderDelete(&$elements, &$do) {
if(!$this->init())
return;
$orderClass = hikamarket::get('class.order');
$orderClass->beforeDelete($elements, $do);
}
public function onAfterOrderDelete(&$elements) {
if(!$this->init())
return;
$orderClass = hikamarket::get('class.order');
$orderClass->afterDelete($elements);
}
public function onHikashopLanguageChange($locale) {
$path =
hikashop_getLanguagePath(JPATH_ROOT).DS.$locale.DS.$locale.'.com_hikamarket.ini';
if(file_exists($path))
hikashop_loadTranslationFile($path);
}
public function onBeforeMailPrepare(&$mail, &$mailer, &$do) {
if(!$this->init())
return;
$mailClass = hikamarket::get('class.mail');
$mailClass->beforeMailPrepare($mail, $mailer, $do);
}
public function onHkProcessMailTemplate(&$mail, &$data,
&$content, &$vars, &$texts, &$templates) {
if(!$this->init())
return;
$mailClass = hikamarket::get('class.mail');
$mailClass->processMailTemplate($mail, $data, $content, $vars, $texts,
$templates);
}
public function onBeforeSendContactRequest(&$element, &$send) {
$target = hikaInput::get()->getCmd('target', '');
$vendor_id = hikaInput::get()->getInt('vendor_id', 0);
if($target == 'vendor' && !empty($vendor_id)) {
$element->target = $target;
$element->vendor_id = $vendor_id;
if(!$send) {
if(!$this->init())
return;
$config = hikamarket::config();
$send = $config->get('display_vendor_contact', 0);
}
}
}
public function onAfterUserCreate(&$user) {
if(!$this->init())
return;
$vendorClass = hikamarket::get('class.vendor');
$vendorClass->onAfterUserCreate($user);
}
public function onAfterUserUpdate(&$user) {
if(!$this->init())
return;
$vendorClass = hikamarket::get('class.vendor');
$vendorClass->onAfterUserUpdate($user);
}
public function onShippingWarehouseFilter(&$shipping_groups,
&$order, &$rates) {
if(!$this->init() || !hikamarket::level(1))
return;
$shippingClass = hikamarket::get('class.shipping');
$shippingClass->onShippingWarehouseFilter($shipping_groups, $order,
$rates);
}
public function onShippingDisplay(&$order, &$rates,
&$usable_methods, &$errors) {
if(!$this->init() || !hikamarket::level(1))
return;
$shippingClass = hikamarket::get('class.shipping');
$shippingClass->onShippingDisplay($order, $rates, $usable_methods,
$errors);
}
public function onPaymentDisplay(&$order, &$methods,
&$usable_methods) {
if(!$this->init() || !hikamarket::level(1))
return;
$paymentClass = hikamarket::get('class.payment');
$paymentClass->onPaymentDisplay($order, $methods, $usable_methods);
}
public function onHikaPluginConfiguration($type, &$plugin,
&$element, &$extra_config, &$extra_blocks) {
if(!in_array($type, array('payment', 'shipping')))
return;
if(!$this->init() || !hikamarket::level(1))
return;
$pluginClass = null;
if($type == 'shipping')
$pluginClass = hikamarket::get('class.shipping');
if($type == 'payment')
$pluginClass = hikamarket::get('class.payment');
if(!empty($pluginClass))
$pluginClass->onPluginConfiguration($plugin, $element, $extra_config,
$extra_blocks);
}
public function onBeforeHikaPluginCreate($type, &$element, &$do)
{
if(!in_array($type, array('payment', 'shipping')))
return;
if(!$this->init() || !hikamarket::level(1))
return;
$pluginClass = null;
if($type == 'shipping')
$pluginClass = hikamarket::get('class.shipping');
if($type == 'payment')
$pluginClass = hikamarket::get('class.payment');
if(!empty($pluginClass))
$pluginClass->onBeforePluginSave($element, $do, true);
}
public function onBeforeHikaPluginUpdate($type, &$element, &$do)
{
if(!in_array($type, array('payment', 'shipping')))
return;
if(!$this->init() || !hikamarket::level(1))
return;
$pluginClass = null;
if($type == 'shipping')
$pluginClass = hikamarket::get('class.shipping');
if($type == 'payment')
$pluginClass = hikamarket::get('class.payment');
if(!empty($pluginClass))
$pluginClass->onBeforePluginSave($element, $do, false);
}
public function onViewsListingFilter(&$views, $client) {
if(!$this->init())
return;
switch($client){
case 0:
$views[] = array(
'client_id' => 0,
'name' => HIKAMARKET_NAME,
'component' => HIKAMARKET_COMPONENT,
'view' => HIKAMARKET_FRONT.'views'.DS
);
break;
case 1:
$views[] = array(
'client_id' => 1,
'name' => HIKAMARKET_NAME,
'component' => HIKAMARKET_COMPONENT,
'view' => HIKAMARKET_BACK.'views'.DS
);
break;
default:
$views[] = array(
'client_id' => 0,
'name' => HIKAMARKET_NAME,
'component' => HIKAMARKET_COMPONENT,
'view' => HIKAMARKET_FRONT.'views'.DS
);
$views[] = array(
'client_id' => 1,
'name' => HIKAMARKET_NAME,
'component' => HIKAMARKET_COMPONENT,
'view' => HIKAMARKET_BACK.'views'.DS
);
break;
}
}
public function onBeforeHikaPluginConfigurationListing($type,
&$filters, &$order, &$searchMap, &$extrafilters,
&$view) {
if(!in_array($type, array('payment', 'shipping')) ||
!$this->init() || !hikamarket::level(1))
return;
if($type == 'payment') {
$paymentClass = hikamarket::get('class.payment');
return $paymentClass->onBeforeHikaPluginConfigurationListing($type,
$filters, $order, $searchMap, $extrafilters, $view);
}
if($type == 'shipping') {
$shippingClass = hikamarket::get('class.shipping');
return $shippingClass->onBeforeHikaPluginConfigurationListing($type,
$filters, $order, $searchMap, $extrafilters, $view);
}
}
public function onAfterHikaPluginConfigurationListing($type, &$rows,
&$listing_columns, &$view) {
if(!in_array($type, array('payment', 'shipping')) ||
!$this->init() || !hikamarket::level(1))
return;
if($type == 'payment') {
$paymentClass = hikamarket::get('class.payment');
return $paymentClass->onAfterHikaPluginConfigurationListing($type,
$rows, $listing_columns, $view);
}
if($type == 'shipping') {
$shippingClass = hikamarket::get('class.shipping');
return $shippingClass->onAfterHikaPluginConfigurationListing($type,
$rows, $listing_columns, $view);
}
}
public function onMailListing(&$files) {
if(!$this->init())
return;
jimport('joomla.filesystem.folder');
$emailFiles = JFolder::files(HIKAMARKET_MEDIA.'mail'.DS,
'^([-_A-Za-z]*)(\.html)?\.php$');
if(empty($emailFiles))
return;
foreach($emailFiles as $emailFile) {
$file = str_replace(array('.html.php', '.php'),
'', $emailFile);
if(substr($file, -9) == '.modified')
continue;
$key = strtoupper($file);
$files[] = array(
'folder' => HIKAMARKET_MEDIA.'mail'.DS,
'name' => JText::_('MARKET_' . $key),
'filename' => $file,
'file' => 'market.'.$file
);
}
}
public function onMailTemplateListing(&$files, $mail_name) {
if(!$this->init())
return;
jimport('joomla.filesystem.folder');
$emailFiles =
JFolder::files(HIKAMARKET_MEDIA.'mail'.DS.'template'.DS,
'^([-_A-Za-z]*)(\.html)?\.php$');
if(empty($emailFiles))
return;
foreach($emailFiles as $emailFile) {
$file = str_replace(array('.html.php', '.php'),
'', $emailFile);
if(substr($file, -9) == '.modified')
continue;
$key = strtoupper($file);
$files[$file] = array(
'folder' =>
HIKAMARKET_MEDIA.'mail'.DS.'template'.DS,
'name' => JText::_('MARKET_MAIL_TPL_' . $key),
'filename' => $file,
'file' => $file
);
}
}
public function onHikashopBeforeDisplayView(&$viewObj) {
$app = JFactory::getApplication();
if(!empty($viewObj->toolbar)) {
if($app->isAdmin() && $this->init()) {
$toolbarClass = hikamarket::get('class.toolbar');
$toolbarClass->processView($viewObj);
}
}
$viewName = $viewObj->getName();
$views = array(
'menu' => array('menu', 1),
'product' => array('product', 0),
'category' => array('category', 2),
'order' => array('order', 0),
'contact' => array('contact', 2)
);
if(isset($views[$viewName])) {
if(!$this->init())
return;
if(($views[$viewName][1] == 1 && !$app->isAdmin()) ||
($views[$viewName][1] == 2 && $app->isAdmin()))
return;
$processClass =
hikamarket::get('class.'.$views[$viewName][0]);
$processClass->processView($viewObj);
return;
}
if($viewName == 'characteristic' && $app->isAdmin())
{
$layout = $viewObj->getLayout();
if(($layout != 'listing' && $layout !=
'form') || !$this->init() || !hikamarket::level(1))
return;
if((!empty($viewObj->rows) ||
!empty($viewObj->element->values)) &&
empty($viewObj->pageInfo->filter->filter_vendor)) {
$db = JFactory::getDBO();
$vendors = array();
if(isset($viewObj->rows))
$rows =& $viewObj->rows;
else
$rows =& $viewObj->element->values;
foreach($rows as $row) {
$vendors[(int)$row->characteristic_vendor_id] =
(int)$row->characteristic_vendor_id;
}
unset($vendors[0]);
if(!empty($vendors)) {
$query = 'SELECT a.* FROM ' .
hikamarket::table('vendor').' AS a WHERE a.vendor_id IN
('.implode(',',$vendors).')';
$db->setQuery($query);
$vendors = $db->loadObjectList('vendor_id');
foreach($rows as &$row) {
if(!empty($vendors[(int)$row->characteristic_vendor_id])) {
$v = $vendors[(int)$row->characteristic_vendor_id];
$row->vendor_id = (int)$row->characteristic_vendor_id;
$row->vendor_name = $v->vendor_name;
$row->vendor_email = $v->vendor_email;
} else {
$row->vendor_id = 0;
$row->vendor_name = '';
$row->vendor_email = '';
}
}
unset($row);
$fieldName = new stdClass();
$fieldName->name = JText::_('HIKA_VENDOR');
$fieldName->value = 'vendor_name';
$viewObj->extrafields['vendor_name'] = $fieldName;
}
}
}
}
public function onBeforeOrderListing($paramBase, &$extrafilters,
&$pageInfo, &$filters) {
if(!$this->init() || !hikamarket::level(1))
return;
$app = JFactory::getApplication();
if(!$app->isAdmin())
return;
$pageInfo->filter->filter_vendor =
(int)$app->getUserStateFromRequest($paramBase.".filter_vendor",
'filter_vendor', '', 'int');
$extrafilters['filter_vendor'] =& $this;
if(!empty($pageInfo->filter->filter_vendor)) {
foreach($filters as $k => $filter) {
if($filter == 'b.order_type=\'sale\'')
unset($filters[$k]);
}
if($pageInfo->filter->filter_vendor > 0) {
$filters[] = 'b.order_vendor_id = ' .
(int)$pageInfo->filter->filter_vendor;
}
$pageInfo->filter->filter_vendorinvoice =
(int)$app->getUserStateFromRequest($paramBase.".filter_vendorinvoice",
'filter_vendorinvoice', '', 'int');
if(!$pageInfo->filter->filter_vendorinvoice) {
$vendorOrderType = 'subsale';
} else {
$vendorOrderType = 'vendorpayment';
}
$filters[] =
'b.order_type=\''.$vendorOrderType.'\'';
}
}
public function onAfterOrderListing(&$rows, &$extrafields,
$pageInfo) {
if(!$this->init() || !hikamarket::level(1))
return;
if(!empty($rows) &&
!empty($pageInfo->filter->filter_vendor)) {
$fieldTotal = new stdClass();
$fieldTotal->name = JText::_('VENDOR_TOTAL');
$fieldTotal->obj =& $this;
$extrafields['vendor_total'] = $fieldTotal;
$db = JFactory::getDBO();
$vendors = array();
foreach($rows as $row) {
$vendors[$row->order_vendor_id] = $row->order_vendor_id;
}
$query = 'SELECT a.* FROM ' .
hikamarket::table('vendor').' AS a WHERE a.vendor_id IN
('.implode(',',$vendors).')';
$db->setQuery($query);
$vendors = $db->loadObjectList('vendor_id');
foreach($rows as &$row) {
if(!empty($vendors[$row->order_vendor_id])) {
$v = $vendors[$row->order_vendor_id];
$row->vendor_name = $v->vendor_name;
$row->vendor_email = $v->vendor_email;
} else {
$row->vendor_name = '';
$row->vendor_email = '';
}
}
$fieldName = new stdClass();
$fieldName->name = JText::_('HIKA_VENDOR');
$fieldName->value = 'vendor_name';
$extrafields['vendor_name'] = $fieldName;
}
}
public function onBeforeOrderExportQuery(&$filters, $paramBase) {
if(!$this->init() || !hikamarket::level(1))
return;
$app = JFactory::getApplication();
$filter_vendor = (int)$app->getUserStateFromRequest($paramBase .
'.filter_vendor', 'filter_vendor', '',
'int');
if(!empty($filter_vendor)) {
$filter_vendorinvoice = (int)$app->getUserStateFromRequest($paramBase
. '.filter_vendorinvoice', 'filter_vendorinvoice',
'', 'int');
$vendorOrderType = (!$filter_vendorinvoice) ? 'subsale' :
'vendorpayment';
$filters['order_type'] = 'hk_order.order_type =
\''.$vendorOrderType.'\'';
if($filter_vendor > 0) {
$filters['order_vendor_id'] = 'hk_order.order_vendor_id
= ' . (int)$filter_vendor;
}
}
}
public function onBeforeProductListingLoad(&$filters, &$order,
&$view, &$select, &$select2, &$ON_a, &$ON_b,
&$ON_c) {
$app = JFactory::getApplication();
if($app->isAdmin() || !$this->init() || !hikamarket::level(1))
return;
$ON_c .= ' LEFT JOIN ' .
hikamarket::table('vendor').' AS hikam_vendor ON
b.product_vendor_id = hikam_vendor.vendor_id ';
$filters['active_vendor'] =
'(hikam_vendor.vendor_published IS NULL OR
hikam_vendor.vendor_published = 1)';
if((int)$view->params->get('market_filter_same_vendor',
'0') == 1) {
$currentVendor = 0;
$option =
hikaInput::get()->getString('option','');
$ctrl = hikaInput::get()->getString('ctrl','');
$task = hikaInput::get()->getString('task','');
if($option == HIKAMARKET_COMPONENT && $ctrl ==
'vendor' && $task == 'show')
$currentVendor = hikamarket::getCID('vendor_id');
else if(isset($view->product->vendor))
$currentVendor = (int)$view->product->vendor->vendor_id;
if(!empty($currentVendor) && $currentVendor == 1) {
$filters['current_vendor'] = '(hikam_vendor.vendor_id IS
NULL OR hikam_vendor.vendor_id <= 1)';
} else if(!empty($currentVendor)) {
$filters['current_vendor'] = '(hikam_vendor.vendor_id =
'.$currentVendor.')';
}
}
foreach($filters as &$filter) {
if(strpos($filter, 'b.product_vendor_id LIKE \'%') !==
false) {
$filter = str_replace('b.product_vendor_id LIKE',
'hikam_vendor.vendor_name LIKE', $filter);
}
}
unset($filter);
if($view->module) {
$productClass = hikamarket::get('class.product');
$productClass->processListing($filters, $order, $view, $select,
$select2, $ON_a, $ON_b, $ON_c);
}
}
public function onAfterProductCharacteristicsLoad(&$product,
&$mainCharacteristics, &$characteristics) {
$app = JFactory::getApplication();
if($mainCharacteristics === null && $app->isAdmin() &&
$this->init() && hikamarket::level(1)) {
$tmp = array(
$product->product_id => array(0 =>
&$product->characteristics)
);
$productClass = hikamarket::get('class.product');
$productClass->loadVendorProductCharacteristics($product, $tmp,
$characteristics, true);
return;
}
if(empty($mainCharacteristics[$product->product_id][0]) ||
$app->isAdmin() || !$this->init() || !hikamarket::level(1))
return;
$process = false;
foreach($mainCharacteristics[$product->product_id][0] as $c) {
if(empty($c->values)) {
$process = true;
break;
}
}
if(!$process)
return;
$productClass = hikamarket::get('class.product');
$productClass->loadVendorProductCharacteristics($product,
$mainCharacteristics, $characteristics);
}
public function onNameboxCharacteristicsLoad($typeConfig, &$fullLoad,
$mode, $value, $search, $options, &$ret) {
$app = JFactory::getApplication();
if(!$app->isAdmin() || !$this->init() || !hikamarket::level(1))
return;
$vendorConfig = array();
$vendorClass = hikamarket::get('class.vendor');
$vendorsRet = $vendorClass->getNameboxData($vendorConfig, $fulvendl,
$mode, null, null, array());
foreach($vendorsRet[0] as $k => $v) {
$ret[0]['v'.$k] = $v;
$ret[0]['v'.$k]->characteristic_id = 0;
$ret[0]['v'.$k]->characteristic_value = $v->vendor_name
. ' (' . $k . ')';
$ret[0]['v'.$k]->name = $v->vendor_name;
}
ksort($ret[0]);
}
public function onAfterVariantsCreation($product_id, $new_variants_ids,
$element) {
$app = JFactory::getApplication();
if(!$app->isAdmin() || !empty($new_variants_ids) || !$this->init()
|| !hikamarket::level(1))
return;
$productClass = hikamarket::get('class.product');
$productClass->populateVendorCharacteristics($product_id,
$new_variants_ids, $element);
}
public function onBeforeCategoryCreate(&$category, &$do) {
if(!$this->init() || !hikamarket::level(1))
return;
$categoryClass = hikamarket::get('class.category');
$categoryClass->beforeCategoryCreate($category, $do);
}
public function onBeforeCategoryUpdate(&$category, &$do) {
if(!$this->init() || !hikamarket::level(1))
return;
$categoryClass = hikamarket::get('class.category');
$categoryClass->beforeCategoryUpdate($category, $do);
}
public function onBeforeCategoryListingLoad(&$filters, &$order,
&$view, &$leftjoin) {
$app = JFactory::getApplication();
if($app->isAdmin() || !$this->init() || !hikamarket::level(1))
return;
if(isset($view->module) && $view->module) {
$option =
hikaInput::get()->getString('option','');
$ctrl = hikaInput::get()->getString('ctrl','');
$viewName = $view->getName();
if($option == HIKAMARKET_COMPONENT && $ctrl ==
'vendor' && $viewName == 'category') {
$categoryClass = hikamarket::get('class.category');
$categoryClass->processListing($filters, $order, $view, $leftjoin);
}
}
}
public function onBeforeCharacteristicListing($paramBase,
&$extrafilters, &$pageInfo, &$filters) {
if(!$this->init() || !hikamarket::level(1))
return;
$app = JFactory::getApplication();
$pageInfo->filter->filter_vendor =
(int)$app->getUserStateFromRequest($paramBase.".filter_vendor",
'filter_vendor', '', 'int');
$extrafilters['filter_vendor'] =& $this;
if(!empty($pageInfo->filter->filter_vendor) &&
$pageInfo->filter->filter_vendor > 0) {
$filters[] = 'a.characteristic_vendor_id = ' .
(int)$pageInfo->filter->filter_vendor;
}
}
public function onTableFieldsLoad(&$values) {
if(!$this->init())
return;
$fieldClass = hikamarket::get('class.field');
$fieldClass->tableFieldsLoad($values);
}
public function onFieldFileDownload(&$found, $name, $field_table,
$field_namekey, $options) {
if(substr($field_table, 0, 15) != 'plg.hikamarket.' &&
!in_array($field_table, array('order', 'item')))
return;
if(!$this->init())
return;
$fieldClass = hikamarket::get('class.field');
$fieldClass->fieldFileDownload($found, $name, $field_table,
$field_namekey, $options);
}
public function onCustomfieldEdit(&$field, &$view) {
if(!$this->init())
return;
$fieldClass = hikamarket::get('class.field');
$fieldClass->customfieldEdit($field, $view);
}
public function displayFilter($name, $filter) {
$vendorFilterType = hikamarket::get('type.filter_vendor');
if(isset($filter->filter_vendorinvoice))
return $vendorFilterType->display('filter_vendor',
@$filter->filter_vendor, 'filter_vendorinvoice',
@$filter->filter_vendorinvoice);
return $vendorFilterType->display('filter_vendor',
@$filter->filter_vendor);
}
public function showField($container, $name, &$row) {
$ret = '';
switch($name) {
case 'vendor_total':
$ret .=
$container->currencyHelper->format($row->order_vendor_price,
$row->order_currency_id);
break;
}
return $ret;
}
public function onAfterCartProductsLoad(&$cart) {
if(!$this->init())
return;
$cartClass = hikamarket::get('class.cart');
return $cartClass->onAfterCartProductsLoad($cart);
}
public function onAfterProductCheckQuantities(&$products, &$cart,
$options) {
if(!$this->init())
return;
$cartClass = hikamarket::get('class.cart');
return $cartClass->onAfterProductCheckQuantities($products, $cart,
$options);
}
public function onAfterCheckCartQuantities(&$cart, $parent_products,
&$ret) {
if(!$this->init())
return;
$cartClass = hikamarket::get('class.cart');
return $cartClass->onAfterCheckCartQuantities($cart, $parent_products,
$ret);
}
public function onBeforeCouponCheck(&$coupon, &$total,
&$zones, &$products, &$display_error, &$error_message,
&$do) {
if(empty($coupon->discount_target_vendor) ||
$coupon->discount_target_vendor == 1)
return;
if(!$this->init())
return;
$discountClass = hikamarket::get('class.discount');
return $discountClass->beforeCouponCheck($coupon, $total, $zones,
$products, $display_error, $error_message, $do);
}
public function onAfterCouponCheck(&$coupon, &$total, &$zones,
&$products, &$display_error, &$error_message, &$do) {
if(!$do)
return;
if(isset($coupon->discount_percent_amount)) {
$coupon->discount_percent_amount_orig =
$coupon->discount_percent_amount;
$coupon->discount_coupon_nodoubling_orig =
$coupon->discount_coupon_nodoubling;
}
if(empty($coupon->discount_target_vendor) ||
$coupon->discount_target_vendor == 1)
return;
if(!$this->init())
return;
if(empty($this->discountClass))
$this->discountClass = hikamarket::get('class.discount');
return $this->discountClass->afterCouponCheck($coupon, $total,
$zones, $products, $display_error, $error_message, $do);
}
public function onSelectDiscount(&$product, &$discountsSelected,
&$discounts, $zone_id, &$parent) {
if(empty($discounts) || !$this->init())
return;
if(empty($this->discountClass))
$this->discountClass = hikamarket::get('class.discount');
return $this->discountClass->onSelectDiscount($product,
$discountsSelected, $discounts, $zone_id, $parent);
}
public function onDiscountBlocksDisplay(&$discount, &$html) {
if(!$this->init())
return;
$discountClass = hikamarket::get('class.discount');
return $discountClass->discountBlocksDisplay($discount, $html);
}
public function onHkContentParamsDisplay($container, $control, $element,
&$ret) {
if(!$this->init() || !hikamarket::level(1))
return;
if($container == 'menu' || $container == 'module') {
if(empty($ret['products']))
$ret['products'] = array();
if(empty($ret['products']['market_show_sold_by']))
{
$arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKASHOP_YES')),
JHTML::_('select.option', '0',
JText::_('HIKASHOP_NO')),
);
if(!isset($element->hikashop_params['market_show_sold_by']))
$element->hikashop_params['market_show_sold_by'] =
'-1';
$ret['products']['market_show_sold_by'] = array(
'HIKAM_FRONT_SHOW_SOLD_BY',
JHTML::_('hikaselect.radiolist', $arr,
$control.'[market_show_sold_by]' , '',
'value', 'text',
@$element->hikashop_params['market_show_sold_by'])
);
if(!isset($element->hikashop_params['market_filter_same_vendor']))
$element->hikashop_params['market_filter_same_vendor'] =
'0';
$ret['products']['market_filter_same_vendor'] =
array(
'HIKAM_FRONT_FILTER_SAME_VENDOR',
JHTML::_('hikaselect.booleanlist',
$control.'[market_filter_same_vendor]', '',
@$element->hikashop_params['market_filter_same_vendor'])
);
}
if(empty($ret['categories']))
$ret['categories'] = array();
if(empty($ret['categories']['market_vendor_categories']))
{
$arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKASHOP_YES')),
JHTML::_('select.option', '0',
JText::_('HIKASHOP_NO')),
);
if(!isset($element->hikashop_params['market_vendor_categories']))
$element->hikashop_params['market_vendor_categories'] =
'-1';
$ret['products']['market_vendor_categories'] =
array(
'HIKAM_VENDOR_CATEGORY_TO_VENDOR_PAGE',
JHTML::_('hikaselect.radiolist', $arr,
$control.'[market_vendor_categories]' , '',
'value', 'text',
@$element->hikashop_params['market_vendor_categories'])
);
}
}
}
public function onUploadControllerGet($controllerName, &$controller)
{
if(substr($controllerName, 0, 11) != 'plg.market.')
return;
if(!$this->init())
return;
$ctrl = substr($controllerName, 11);
$controller = hikamarket::get('controller.' . $ctrl, array(),
true);
}
public function onBeforeVoteUpdate(&$element, &$do,
&$currentElement) {
if(!isset($element->vote_type) || $element->vote_type !=
'vendor')
return;
if(!$this->init() || !hikamarket::level(1))
return;
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($element->vote_ref_id);
if(!$vendor) {
$do = false;
return;
}
$currentElement->vote_type = 'vendor';
$currentElement->vote_ref_id = (int)$element->vote_ref_id;
}
public function onAfterVoteUpdate(&$element, $return_data) {
if(!isset($element->vote_type) || $element->vote_type !=
'vendor')
return;
if(!$this->init() || !hikamarket::level(1))
return;
$vendor = new stdClass();
$vendor->vendor_id = (int)$element->vote_ref_id;
$vendor->vendor_average_score =
(float)hikamarket::toFloat($return_data['average']);
$vendor->vendor_total_vote = (int)$return_data['total'];
$vendorClass = hikamarket::get('class.vendor');
$ret = $vendorClass->save($vendor);
}
public function onBeforeVoteCreate(&$element, &$do,
&$currentElement) {
$this->onBeforeVoteUpdate($element, $do, $currentElement);
}
public function onAfterVoteCreate(&$element, $return_data) {
$this->onAfterVoteUpdate($element, $return_data);
}
public function onBeforeVoteDelete(&$elements, &$do,
&$currentElements) {
if(!$this->init() || !hikamarket::level(1))
return;
hikamarket::toInteger($elements);
if(empty($elements))
return;
$db = JFactory::getDBO();
$query = 'SELECT vote.vote_id, vote.vote_type, vote.vote_ref_id,
vendor.vendor_id, vendor.vendor_average_score as `average_score`,
vendor.vendor_total_vote as `total_vote` '.
' FROM '.hikamarket::table('vendor').' as
vendor '.
' INNER JOIN '.hikamarket::table('shop.vote').'
AS vote ON (vote.vote_ref_id = vendor.vendor_id AND vote.vote_type =
'.$db->Quote('vendor').') '.
' WHERE vote.vote_id IN ('.implode(',',
$elements).')';
$db->setQuery($query);
$myElements = $db->loadObjectList('vote_id');
foreach($myElements as $k => $el) {
$currentElements[ (int)$k ] = $el;
}
}
public function onAfterVoteDelete(&$element) {
if(!isset($element->vote_type) || $element->vote_type !=
'vendor')
return;
if(!$this->init() || !hikamarket::level(1))
return;
if(!isset($element->average_score) ||
!isset($element->total_vote))
return;
$vendor = new stdClass();
$vendor->vendor_id = (int)$element->vote_ref_id;
$vendor->vendor_average_score = $element->average_score;
$vendor->vendor_total_vote = (int)$element->total_vote;
if(!isset($this->vendorClass))
$this->vendorClass = hikamarket::get('class.vendor');
$this->vendorClass->save($vendor);
}
public function onCheckoutStepList(&$list) {
if(!$this->init() || !hikamarket::level(1))
return;
$list['plg.market.terms'] = array(
'name' => 'HikaMarket ' .
JText::_('HIKASHOP_CHECKOUT_TERMS'),
'params' => array(
'article_id' => array('name' =>
JText::_('HIKASHOP_CHECKOUT_TERMS'), 'type' =>
'namebox', 'tooltip' => 'checkout_terms',
'namebox' => 'article', 'default' =>
''),
'size' => array('name' =>
JText::_('TERMS_AND_CONDITIONS_POPUP_SIZE'), 'type'
=> 'group', 'tooltip' =>
'terms_and_conditions_xy', 'data' => array(
'popup_width' => array('type' =>
'text','attributes' =>
'style="width:50px"','default' => 450),
'size_separator' => array('type' =>
'html','html' => ' x '),
'popup_height' => array('type' =>
'text','attributes' =>
'style="width:50px"','default' => 480),
'size_unit' => array('type' =>
'html','html' => ' px'),
))
)
);
}
public function onCheckoutStepDisplay($layoutName, &$html, &$view,
$pos = null, $options = null) {
if($layoutName != 'plg.market.terms' || !$this->init() ||
!hikamarket::level(1))
return;
$params = new stdClass();
$params->view = $view;
$params->pos = $pos;
$params->options = $options;
$js = null;
$html .= hikamarket::getLayout('checkoutmarket',
'terms', $params, $js);
}
public function onBeforeCheckoutStep($controllerName, &$go_back,
$original_go_back, &$controller) {
}
public function onAfterCheckoutStep($controllerName, &$go_back,
$original_go_back, &$controller) {
if($controllerName != 'plg.market.terms' || !$this->init()
|| !hikamarket::level(1))
return;
$checkoutClass = hikamarket::get('class.checkout');
return $checkoutClass->afterCheckoutStep($controllerName, $go_back,
$original_go_back, $controller);
}
public function onHikashopBeforeCheckDB(&$createTable,
&$custom_fields, &$structure, &$helper) {
if(!$this->init())
return;
$helper->parseTableFile(HIKAMARKET_BACK.'_database'.DS.'install.sql',
$createTable, $structure);
$updateHelper = hikamarket::get('helper.update');
$updateHelper->onBeforeCheckDB($createTable, $custom_fields,
$structure, $helper);
}
public function onHikaShopAfterCheckDB(&$ret) {
if(!$this->init())
return;
$updateHelper = hikamarket::get('helper.update');
$updateHelper->onAfterCheckDB($ret);
}
}
extensions/plg_hikashop_market/market.xml000064400000001413151160562410014763
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikashop">
<name>HikaMarket - HikaShop Integration plugin</name>
<hikainstall ordering="0" enable="1"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin make the integration between HikaShop and
HikaMarket</description>
<files>
<filename plugin="market">market.php</filename>
</files>
<params />
<config />
</extension>
extensions/plg_hikashop_marketmodule_vendorrelated/index.html000064400000000032151160562410021073
0ustar00<html><body></body></html>extensions/plg_hikashop_marketmodule_vendorrelated/marketmodule_vendorrelated.php000064400000004145151160562410025227
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopMarketmodule_vendorrelated extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
private function init() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
public function
onBeforeProductListingLoad(&$filters,&$order,&$view,
&$select, &$select2, &$a, &$b, &$on) {
$ctrl = hikaInput::get()->getCmd('ctrl');
$task = hikaInput::get()->getCmd('task');
if($ctrl != 'product' || $task != 'show' ||
!$view->module)
return;
if(!isset($this->params)) {
$pluginsClass = hikashop_get('class.plugins');
$plugin = $pluginsClass->getByName('hikashop',
'marketmodule_vendorrelated');
$ids = explode(',', @$plugin->params['ids']);
} else if($this->params->get('ids', '') !=
'') {
$ids = explode(',', $this->params->get('ids',
''));
}
$cid = hikashop_getCID();
$module_id = (string)$view->params->get('from_module',
'0');
if(hikaInput::get()->getCmd('market_show_product_modules',
0))
echo '<span class="label label-info">Product
listing module :
<strong>'.$module_id.'</strong></span>';
if(empty($ids) || empty($cid) || !in_array($module_id, $ids))
return;
if(!$this->init())
return;
$productClass = hikashop_get('class.product');
$product = $productClass->get($cid);
$filters[] = 'b.product_vendor_id = ' .
(int)$product->product_vendor_id;
if(!isset($view->hikamarket))
$view->hikamarket = new stdClass();
$view->hikamarket->hide_sold_by = true;
}
}
extensions/plg_hikashop_marketmodule_vendorrelated/marketmodule_vendorrelated.xml000064400000002471151160562410025240
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="hikashop" method="upgrade">
<name>HikaShop - Vendor same products (listing module)</name>
<hikainstall ordering="0" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaShop/HikaMarket integration - Improve a product
listing module to show the product of the same vendor of the current
page</description>
<files>
<filename
plugin="marketmodule_vendorrelated">marketmodule_vendorrelated.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
<param name="ids" type="text" default=""
label="Module Id list" description="List of the module Ids,
separate by comma"/>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
<fieldset name="basic">
<field name="ids" type="text"
default="" label="Module Id list"
description="List of the module item Ids, separate by
comma"/>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikashop_market_vendorselectfield/index.html000064400000000032151160562410020530
0ustar00<html><body></body></html>extensions/plg_hikashop_market_vendorselectfield/market_vendorselectfield.php000064400000002100151160562410024306
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopMarket_vendorselectfield extends JPlugin
{
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
public function onFieldsLoad(&$fields, &$options) {
$me = new stdClass();
$me->name = 'market_vendorselectfield';
$me->text = JText::_('VENDOR_SELECTION');
$me->options = array('required', 'default',
'columnname', 'pleaseselect',
'market_vendorselect_type');
$fields[] = $me;
$opt = new stdClass();
$opt->name = 'market_vendorselect_type';
$opt->text = JText::_('VENDOR_SELECTION_TYPE');
$opt->obj = 'fieldOpt_market_vendorselect_type';
$options[$opt->name] = $opt;
}
}
if(defined('HIKASHOP_COMPONENT')) {
require_once(
dirname(__FILE__).DS.'market_vendorselectfield_class.php' );
}
extensions/plg_hikashop_market_vendorselectfield/market_vendorselectfield.xml000064400000001657151160562410024337
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="hikashop" method="upgrade">
<name>HikaShop: Vendor Selection Custom Field</name>
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaShop: Vendor Selection Custom
Field</description>
<files>
<filename
plugin="market_vendorselectfield">market_vendorselectfield.php</filename>
<filename>market_vendorselectfield_class.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
</fields>
</config>
</extension>
extensions/plg_hikashop_market_vendorselectfield/market_vendorselectfield_class.php000064400000013374151160562410025512
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class fieldOpt_market_vendorselect_type {
public function show($value) {
$v = array(
JHTML::_('select.option', '0',
JText::_('VENDOR_SELECTION_TYPE_DROPDOWN')),
JHTML::_('select.option', '1',
JText::_('VENDOR_SELECTION_TYPE_POPUP')),
JHTML::_('select.option', '2',
JText::_('VENDOR_SELECTION_TYPE_NAMEBOX')),
);
return JHTML::_('select.genericlist', $v,
'field_options[market_vendorselect_type]', '',
'value', 'text', $value);
}
}
class hikashopMarket_vendorselectfield {
public $prefix = null;
public $suffix = null;
public $excludeValue = null;
public $report = null;
public $parent = null;
public function __construct(&$obj) {
$this->prefix = $obj->prefix;
$this->suffix = $obj->suffix;
$this->excludeValue =& $obj->excludeValue;
$this->report = @$obj->report;
$this->parent =& $obj;
}
private function initMarket() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
public function getFieldName($field) {
return '<label for="' . $this->prefix .
$field->field_namekey . $this->suffix.'">' .
$this->trans($field->field_realname) . '</label>';
}
public function trans($name) {
$val = preg_replace('#[^a-z0-9]#i', '_',
strtoupper($name));
$trans = JText::_($val);
if($val == $trans)
return $name;
return $trans;
}
private function initField(&$field) {
if(isset($field->show_myself))
return;
if($field->field_table == 'item' &&
isset($field->product_id)) {
$productClass = hikamarket::get('class.product');
$product = $productClass->get( (int)$field->product_id );
if((int)$product->product_vendor_id > 0) {
$field->show_myself = false;
$field->original_vendor_id = (int)$product->product_vendor_id;
return;
}
}
$field->show_myself = true;
return;
}
public function show(&$field, $value) {
if(!$this->initMarket())
return '';
if(!empty($field->field_value) &&
!is_array($field->field_value)) {
$field->field_value =
$this->parent->explodeValues($field->field_value);
}
if(isset($field->field_value[$value])) {
$value = $field->field_value[$value]->value;
}
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get( (int)$value );
if(!empty($vendor)) {
$value = $vendor->vendor_name;
}
return $this->trans($value);
}
public function display($field, $value, $map, $inside, $options =
'', $test = false) {
if(!$this->initMarket())
return '';
$this->initField($field);
if(!$field->show_myself) {
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get( (int)$field->original_vendor_id );
if(!empty($vendor)) {
$value = $vendor->vendor_name;
}
return $this->trans($value);
}
$show_type = 2;
if(isset($field->field_options['market_vendorselect_type']))
$show_type =
(int)$field->field_options['market_vendorselect_type'];
$please_select =
!empty($field->field_options['pleaseselect']);
$app = JFactory::getApplication();
if(in_array($field->field_table, array('item',
'order')) && empty($value) &&
!$app->isAdmin()) {
$config = hikamarket::config();
$preferred =
$config->get('preferred_vendor_select_custom_field',
'');
if(!empty($preferred)) {
$user = hikamarket::loadUser(true);
if(isset($user->$preferred))
$value = $user->$preferred;
}
}
if($show_type == 0) {
$vendorSelectionType =
hikamarket::get('type.vendor_selection');
$ret = $vendorSelectionType->displayDropdown($map, $value,
$please_select, $options, $this->prefix . @$field->field_namekey .
$this->suffix);
} else if($show_type == 1) {
$vendorSelectionType =
hikamarket::get('type.vendor_selection');
$ret = $vendorSelectionType->display($map, $value, false);
} else {
$nameboxType = hikamarket::get('type.namebox');
$ret = $nameboxType->display(
$map,
$value,
hikamarketNameboxType::NAMEBOX_SINGLE,
'vendor',
array(
'id' => $this->prefix . @$field->field_namekey .
$this->suffix,
'delete' => ($app->isAdmin() ||
empty($field->field_required)),
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>'
)
);
}
return $ret;
}
public function
JSCheck(&$oneField,&$requiredFields,&$validMessages,&$values){
if(empty($oneField->field_required))
return;
$requiredFields[] = $oneField->field_namekey;
if(!empty($oneField->field_options['errormessage'])) {
$validMessages[] =
addslashes($this->trans($oneField->field_options['errormessage']));
} else {
$validMessages[] = addslashes(JText::sprintf('FIELD_VALID',
$this->trans($oneField->field_realname)));
}
}
public function check(&$field, &$value, $oldvalue) {
if(is_string($value))
$value = trim($value);
if($value == '0')
$value = '';
if(!$field->field_required || is_array($value) || strlen($value) ||
($value === null && strlen($oldvalue)))
return true;
$this->initField($field);
if(!$field->show_myself)
return true;
if($this->report) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::sprintf('PLEASE_FILL_THE_FIELD',
$this->trans($field->field_realname)));
}
return false;
}
}
extensions/plg_hikashop_productfiltervendor/index.html000064400000000032151160562410017570
0ustar00<html><body></body></html>extensions/plg_hikashop_productfiltervendor/productfiltervendor.php000064400000003331151160562410022415
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopProductfiltervendor extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
private function init() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
public function
onBeforeProductListingLoad(&$filters,&$order,&$parent,
&$select, &$select2, &$a, &$b, &$on) {
global $Itemid;
$ctrl = hikaInput::get()->getCmd('ctrl');
$task = hikaInput::get()->getCmd('task');
static $done = null;
if($ctrl != 'product' || $task != 'listing' || $done
=== true)
return;
$done = true;
if(!isset($this->params)) {
$pluginsClass = hikashop_get('class.plugins');
$plugin = $pluginsClass->getByName('hikashop',
'productfiltervendor');
$ids = explode(',', @$plugin->params['ids']);
} else if($this->params->get('ids', '') !=
'') {
$ids = explode(',', $this->params->get('ids',
''));
}
$i = '' . $Itemid;
if(empty($ids) || !in_array($i, $ids))
return;
if(!$this->init())
return;
$vendor = hikamarket::loadVendor(false);
$filters[] = 'b.product_vendor_id = ' . (int)$vendor;
}
}
extensions/plg_hikashop_productfiltervendor/productfiltervendor.xml000064400000002464151160562410022434
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="hikashop" method="upgrade">
<name>HikaShop - Product Filter for vendors</name>
<hikainstall ordering="0" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaShop/HikaMarket integration - Product listing
filter for vendors - Create a product listing which show only the (current
logged) vendor products</description>
<files>
<filename
plugin="productfiltervendor">productfiltervendor.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
<param name="ids" type="text" default=""
label="Item Id list" description="List of the menu item Ids,
separate by comma"/>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
<fieldset name="basic">
<field name="ids" type="text"
default="" label="Item Id list" description="List
of the menu item Ids, separate by comma"/>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikashop_productforcevendorcategory/index.html000064400000000032151160562420021140
0ustar00<html><body></body></html>extensions/plg_hikashop_productforcevendorcategory/productforcevendorcategory.php000064400000004620151160562420025336
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopProductforcevendorcategory extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
private function init() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
public function onBeforeProductCreate(&$product, &$do) {
if(!$this->init())
return;
$app = JFactory::getApplication();
if($app->isAdmin()) {
$vendor_id = (int)@$product->product_vendor_id;
} else {
$current_vendor = hikamarket::loadVendor(false);
if($current_vendor === false)
return;
if($current_vendor > 1)
$vendor_id = $current_vendor;
else
$vendor_id = (int)@$product->product_vendor_id;
}
$this->checkVendorCategory($product, $vendor_id);
}
public function onBeforeProductUpdate(&$product, &$do) {
if(empty($product->categories))
return;
if(!$this->init())
return;
if(isset($product->product_vendor_id)) {
$vendor_id = (int)$product->product_vendor_id;
} elseif(isset($product->old->product_vendor_id)) {
$vendor_id = (int)$product->old->product_vendor_id;
} else {
$productClass = hikamarket::get('shop.class.product');
$oldProduct = $productClass->get($product->product_id);
if(!isset($oldProduct->product_vendor_id))
return;
$vendor_id = (int)$oldProduct->product_vendor_id;
}
if($vendor_id <= 1)
return;
$this->checkVendorCategory($product, $vendor_id);
}
private function checkVendorCategory(&$product, $vendor_id) {
if((int)$vendor_id <= 1)
return;
$vendorClass = hikamarket::get('class.vendor');
$rootCategory = $vendorClass->getRootCategory($vendor_id, 1);
if(empty($rootCategory))
return;
if(!in_array($rootCategory, $product->categories))
$product->categories[] = $rootCategory;
}
}
extensions/plg_hikashop_productforcevendorcategory/productforcevendorcategory.xml000064400000001707151160562420025352
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="hikashop">
<name>HikaShop - product force vendor category</name>
<hikainstall ordering="0" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaMarket integration - Force the root vendor category
for all vendor's products</description>
<files>
<filename
plugin="productforcevendorcategory">productforcevendorcategory.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
</fields>
</config>
</extension>
extensions/plg_hikashop_userpointstovendor/index.html000064400000000032151160562420017461
0ustar00<html><body></body></html>extensions/plg_hikashop_userpointstovendor/userpointstovendor.php000064400000017744151160562420022213
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopUserpointstovendor extends hikashopPlugin {
var $multiple = false;
var $name = 'userpointstovendor';
public function loadUserPointsPluginParams($id = 0) {
static $pluginsCache = array();
$key = 'payment_userpoints_'.$id;
if(!isset($pluginsCache[$key])){
$query = 'SELECT * FROM
'.hikashop_table('payment').' WHERE payment_type =
'.$this->db->Quote('userpoints');
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->userpoints_plugin_params =
hikashop_unserialize($pluginsCache[$key]->$params);
$this->userpoints_plugin_data = $pluginsCache[$key];
return true;
}
$this->userpoints_plugin_params = null;
$this->userpoints_plugin_data = null;
return false;
}
public function onAfterOrderCreate(&$order, &$send_email) {
$app = JFactory::getApplication();
if($app->isAdmin())
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) ) // TODO
return true;
$this->giveAndGiveBack($order);
unset($this->orderObject);
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) ) // TODO
return true;
$this->giveAndGiveBack($order);
unset($this->orderObject);
return true;
}
public function addPoints($points, $order, $data = null, $forceMode =
null) {
if($forceMode === null)
return false;
if($points === 0)
return true;
$points_mode = $forceMode;
if(empty($order->vendor_admin)) {
$query = 'SELECT hu.* FROM ' .
hikashop_table('hikamarket_vendor', false) . ' AS v '.
' INNER JOIN ' . hikashop_table('user') . ' AS
hu ON v.vendor_admin_id = hu.user_id '.
' WHERE v.vendor_id = ' . (int)$order->order_vendor_id;
$this->db->setQuery($query);
$order->vendor_admin = $this->db->loadObject();
}
if($points_mode == 'aup') {
if(!$this->userpoints_plugin->getAUP(true))
return false;
if($data === null)
$data = $this->userpoints_plugin->getDataReference($order);
$aupid =
AlphaUserPointsHelper::getAnyUserReferreID($order->vendor_admin->user_cms_id);
AlphaUserPointsHelper::newpoints('plgaup_orderValidation',
$aupid, '', $data, $points);
return true;
}
if($points_mode == 'esp') {
if(!$this->userpoints_plugin->getEasysocial(true))
return false;
if($data === null)
$data = $this->userpoints_plugin->getDataReference($order,
$points_mode);
$eas_points = FD::points();
$userInfo = FD::user( $order->vendor_admin->user_cms_id );
return $eas_points->assignCustom( $userInfo->id, $points, $data
);
}
$ret = true;
$userClass = hikashop_get('class.user');
$oldUser = $userClass->get((int)$order->vendor_admin->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) {
$points = -$oldUser->user_points;
$user->user_points = 0;
$ret = false;
}
$userClass->save($user);
return $ret;
}
public function loadFullOrder($order_id) {
if(empty($this->orderObject) || $this->orderObject->order_id !=
$order_id) {
$classOrder = hikashop_get('class.order');
$this->orderObject = $classOrder->get($order_id, false);
}
}
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(($creation || ($changed && !$old_confirmed)) &&
$new_confirmed) {
if(!empty($this->orderObject->order_payment_params->userpoints->use_points))
{
$m =
$this->orderObject->order_payment_params->userpoints->use_mode;
if(empty($points[ $m ]))
$points[ $m ] = 0;
$points[ $m ] -=
$this->orderObject->order_payment_params->userpoints->use_points;
}
if($this->orderObject->order_payment_method ==
'userpoints') {
if($this->loadUserPointsPluginParams($this->orderObject->order_payment_id)
&& !empty($this->userpoints_plugin_params->value)) {
$p = round($this->orderObject->order_full_price /
$this->userpoints_plugin_params->value, 0);
$m = $this->userpoints_plugin_params->points_mode;
if(empty($points[ $m ]))
$points[ $m ] = 0;
$points[ $m ] -= $p;
}
}
}
if($changed && $old_confirmed && !$new_confirmed) {
if(!empty($this->orderObject->order_payment_params->userpoints->use_points))
{
$m =
$this->orderObject->order_payment_params->userpoints->use_mode;
if(empty($points[ $m ]))
$points[ $m ] = 0;
$points[ $m ] +=
$this->orderObject->order_payment_params->userpoints->use_points;
}
if($this->orderObject->order_payment_method ==
'userpoints') {
if($this->loadUserPointsPluginParams($this->orderObject->order_payment_id)
&& !empty($this->userpoints_plugin_params->value)) {
$p = round($this->orderObject->order_full_price /
$this->userpoints_plugin_params->value, 0);
$m = $this->userpoints_plugin_params->points_mode;
if(empty($points[ $m ]))
$points[ $m ] = 0;
$points[ $m ] += $p;
}
}
}
if(empty($points))
return;
$this->userpoints_plugin = hikashop_import('hikashop',
'userpoints');
$query = 'SELECT o.* FROM
'.hikashop_table('order').' AS o '.
' WHERE o.order_type = ' .
$this->db->quote('subsale') . ' AND o.order_parent_id
= ' . (int)$order->order_id;
$this->db->setQuery($query);
$subOrders = $this->db->loadObjectList('order_id');
$total = 0.0;
foreach($subOrders as &$subOrder) {
$subOrder->order_full_price =
(float)hikashop_toFloat($subOrder->order_full_price);
$total += $subOrder->order_full_price;
}
unset($subOrder);
foreach($points as $mode => $p) {
if(empty($p))
continue;
foreach($subOrders as $subOrder) {
$ratio = $subOrder->order_full_price / $total;
$vendor_p = -round($p * $ratio, 0);
$this->addPoints($vendor_p, $subOrder, null, $mode);
}
}
unset($this->userpoints_plugin);
}
}
extensions/plg_hikashop_userpointstovendor/userpointstovendor.xml000064400000003006151160562420022206
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikashop">
<name>Hikashop UserPoints to Vendor Plugin</name>
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>contact@obsidev.com</authorEmail>
<authorUrl>http://www.hikashop.com</authorUrl>
<copyright>(C) 2011-2020 OBSIDEV. All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin enables you to transfert points from
customer to vendor</description>
<files>
<filename
plugin="userpointstovendor">userpointstovendor.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
<param name="pluginoptions" type="pluginoptions"
default="plugin" label="hikashop"
description="HikaShop options" />
<param name="order_status" type="text"
default="" label="Valid order statuses"
description="List of the valid order statuses. If empty, it uses the
HikaShop configuration value"/>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
<fieldset name="basic">
<field id="pluginoptions" name="pluginoptions"
type="pluginoptions" label="hikashop"
description="HikaShop options" />
<field name="order_status" type="text"
default="" label="Valid order statuses"
description="List of the valid order statuses. If empty, it uses the
HikaShop configuration value"/>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikashop_vendorgroupafterpurchase/index.html000064400000000032151160562420020614
0ustar00<html><body></body></html>extensions/plg_hikashop_vendorgroupafterpurchase/vendorgroupafterpurchase.php000064400000023060151160562420024465
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopVendorgroupafterpurchase extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
}
private function init() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
function onProductDisplay(&$product, &$html) {
if(!$this->init())
return;
if(!empty($product->product_vendor_params) &&
is_string($product->product_vendor_params))
$product->product_vendor_params =
hikamarket::unserialize($product->product_vendor_params);
$joomlaAclType = hikamarket::get('type.joomla_acl');
$trStyle = '';
if(empty($product->product_vendor_params['vendorgroupafterpurchase_isproduct']))
$trStyle = 'display:none;';
$html[] = '
<div class="hkc-xl-4 hkc-lg-6 hikashop_product_block
hikashop_product_edit_vendorgroupafterpurchase"><div>
<div class="hikashop_product_part_title
hikashop_product_edit_vendorgroupafterpurchase_title">'.JText::_('VENDOR_GROUP_AFTER_PURCHASE').'</div>
<table class="admintable table"
style="width:100%">
<tr>
<td
class="key"><label>'.JText::_('HIKAM_IS_VENDOR_SPECIAL_PRODUCT').'</label></td>
<td>'.JHTML::_('hikaselect.booleanlist',
'data[product][product_vendor_params][vendorgroupafterpurchase_isproduct]',
'onchange="window.localPage.vendorproduct_update(this);"',
@$product->product_vendor_params['vendorgroupafterpurchase_isproduct']).'</td>
</tr>
<tr id="hikamarket_vendor_group_activator"
style="'.$trStyle.'">
<td
class="key"><label>'.JText::_('HIKAM_IS_VENDOR_ACTIVATION_PRODUCT').'</label></td>
<td>'.JHTML::_('hikaselect.booleanlist',
'data[product][product_vendor_params][vendorgroupafterpurchase_vendoractivation]',
'',
@$product->product_vendor_params['vendorgroupafterpurchase_vendoractivation']).'</td>
</tr>
<tr id="hikamarket_vendor_group_selector"
style="'.$trStyle.'">
<td
class="key"><label>'.JText::_('HIKAM_VENDOR_GROUP').'</label></td>
<td>'.$joomlaAclType->display('data[product][product_vendor_params][vendorgroupafterpurchase_group]',
@$product->product_vendor_params['vendorgroupafterpurchase_group']).'</td>
</tr>
</table>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.vendorproduct_update = function(el) {
var d = document,
tr1 = d.getElementById("hikamarket_vendor_group_activator")
tr2 = d.getElementById("hikamarket_vendor_group_selector");
if(!tr1 && !tr2) return;
s = (el.value == "1" && el.checked) ? "" :
"none";
if(tr1) tr1.style.display = s;
if(tr2) tr2.style.display = s;
}
</script>
</div></div>';
}
protected function loadProductVendorParams(&$order) {
if(empty($order->hikamarket))
$order->hikamarket = new stdClass();
if(!empty($order->hikamarket->products_vendor_params))
return;
$db = JFactory::getDBO();
$product_ids = array();
$order_id = 0;
if(!empty($order->cart->products)) {
foreach($order->cart->products as $product) {
$product_ids[] = (int)$product->product_id;
}
} else if(!empty($order->product)) {
if(is_array($order->product)) {
foreach($order->product as $product) {
$product_ids[] = (int)$product->product_id;
}
} else {
$product_ids[] = $order->product->product_id;
}
} else {
$order_id = $order->order_id;
}
if(!empty($product_ids)) {
$query = 'SELECT p.product_id, p.product_parent_id,
p.product_vendor_params, v.product_vendor_params as
parent_product_vendor_params '.
' FROM ' . hikashop_table('product') . ' AS p
LEFT JOIN ' . hikashop_table('product') . ' AS v ON
p.product_id = v.product_parent_id '.
' WHERE p.product_id IN ('.implode(',',
$product_ids).')';
} else if(!empty($order_id)) {
$query = 'SELECT p.product_id, p.product_parent_id,
p.product_vendor_params, v.product_vendor_params as
parent_product_vendor_params '.
' FROM ' . hikashop_table('order_product') . '
AS op '.
' INNER JOIN ' . hikashop_table('product') . '
AS p ON op.product_id = p.product_id '.
' LEFT JOIN ' . hikashop_table('product') . '
AS v ON p.product_id = v.product_parent_id '.
' WHERE op.order_id = ' . (int)$order_id;
}
if(!empty($query)) {
$db->setQuery($query);
$order->hikamarket->products_vendor_params =
$db->loadObjectList('product_id');
}
}
public function onBeforeOrderCreate(&$order, &$do) {
if(empty($order) || empty($order->cart) ||
empty($order->cart->products))
return;
$app = JFactory::getApplication();
if($app->isAdmin())
return;
if(!$this->init())
return;
$this->loadProductVendorParams($order);
$vendor = false;
foreach($order->hikamarket->products_vendor_params as
&$product) {
if(empty($product->product_vendor_params) &&
empty($product->parent_product_vendor_params))
continue;
if(!empty($product->product_vendor_params) &&
is_string($product->product_vendor_params))
$product->product_vendor_params =
hikamarket::unserialize($product->product_vendor_params);
if(!empty($product->parent_product_vendor_params) &&
is_string($product->parent_product_vendor_params))
$product->parent_product_vendor_params =
hikamarket::unserialize($product->parent_product_vendor_params);
if(!empty($product->product_vendor_params['vendorgroupafterpurchase_isproduct'])
||
!empty($product->parent_product_vendor_params['vendorgroupafterpurchase_isproduct']))
{
if(!$this->init())
continue;
if($vendor === false)
$vendor = hikamarket::loadVendor(true);
if($vendor === null) {
$do = false;
foreach($order->cart->products as $p) {
if($p->product_id == $product->product_id) {
$app->enqueueMessage(JText::sprintf('HIKAM_NEED_TO_BE_VENDOR_FOR_BUYING_PRODUCT',
$p->order_product_name), 'error');
break;
}
}
}
}
}
}
public function onAfterOrderCreate(&$order, &$send_email) {
return $this->onAfterOrderUpdate($order, $send_email);
}
public function onAfterOrderUpdate(&$order, &$send_email) {
if(empty($order) || empty($order->order_status))
return;
if(!empty($order->old) &&
!empty($order->old->order_status) && $order->order_status
== $order->old->order_status)
return;
$config = hikashop_config();
$confirmed_status = $config->get('order_confirmed_status');
$invoice_statuses = explode(',',
$config->get('invoice_order_statuses'));
if(empty($invoice_statuses))
$invoice_statuses = array('confirmed','shipped');
if($order->order_status != $confirmed_status &&
!in_array($order->order_status, $invoice_statuses))
return;
if(!$this->init())
return;
$this->loadProductVendorParams($order);
$user_id = 0;
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;
$vendor = false;
$saveVendor = null;
$vendorClass = null;
foreach($order->hikamarket->products_vendor_params as
&$product) {
if(empty($product->product_vendor_params) &&
empty($product->parent_product_vendor_params))
continue;
if(!empty($product->product_vendor_params) &&
is_string($product->product_vendor_params))
$product->product_vendor_params =
hikamarket::unserialize($product->product_vendor_params);
if(!empty($product->parent_product_vendor_params) &&
is_string($product->parent_product_vendor_params))
$product->parent_product_vendor_params =
hikamarket::unserialize($product->parent_product_vendor_params);
$params = null;
if(!empty($product->parent_product_vendor_params))
$params = $product->parent_product_vendor_params;
if(!empty($product->product_vendor_params))
$params = $product->product_vendor_params;
if(!empty($params['vendorgroupafterpurchase_isproduct'])) {
$this->init();
if($vendor === false) {
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($user_id, 'user');
if(!empty($vendor->vendor_access) &&
is_string($vendor->vendor_access))
$vendor->vendor_access = explode(',',
$vendor->vendor_access);
if(empty($vendor->vendor_access))
$vendor->vendor_access = array();
}
if(!empty($params['vendorgroupafterpurchase_vendoractivation'])
&& empty($vendor->vendor_published)) {
if(empty($saveVendor)) {
$saveVendor = new stdClass();
$saveVendor->vendor_id = $vendor->vendor_id;
}
$saveVendor->vendor_published = 1;
}
if(!empty($params['vendorgroupafterpurchase_group'])) {
$groups = explode(',',
$params['vendorgroupafterpurchase_group']);
foreach($groups as $group) {
$group = '@' . $group;
if(!in_array($group, $vendor->vendor_access)) {
$vendor->vendor_access[] = $group;
if(empty($saveVendor)) {
$saveVendor = new stdClass();
$saveVendor->vendor_id = $vendor->vendor_id;
}
$saveVendor->vendor_access = implode(',',
$vendor->vendor_access);
}
}
}
}
}
if(!empty($saveVendor)) {
$vendorClass->save($saveVendor);
}
}
}
extensions/plg_hikashop_vendorgroupafterpurchase/vendorgroupafterpurchase.xml000064400000001676151160562420024507
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="hikashop" method="upgrade">
<name>HikaShop - Vendor group after purchase</name>
<hikainstall ordering="0" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaShop/HikaMarket integration - Vendor group after
purchase</description>
<files>
<filename
plugin="vendorgroupafterpurchase">vendorgroupafterpurchase.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
</fields>
</config>
</extension>
extensions/plg_hikashop_vendorlocationfilter/index.html000064400000000032151160562420017721
0ustar00<html><body></body></html>extensions/plg_hikashop_vendorlocationfilter/vendorlocationfilter.php000064400000027155151160562420022710
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopVendorlocationfilter extends JPlugin {
protected $db = null;
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
if(!isset($this->params)) {
$plugin = JPluginHelper::getPlugin('hikashop',
'vendorlocationfilter');
$this->params = new JRegistry($plugin->params);
}
}
public function init() {
static $init = null;
if($init !== null)
return $init;
$use_search_module =
(int)$this->params->get('use_search_module', 1);
if(!$use_search_module) {
$init = false;
return false;
}
$this->db = JFactory::getDBO();
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
private function dbEscape($data) {
if(empty($this->db))
$this->db = JFactory::getDBO();
if(HIKASHOP_J30)
return $this->db->escape($data, true);
return $this->db->getEscaped($data, true);
}
public function onBeforeProductListingLoad(&$filters, &$order,
&$view, &$select, &$select2, &$ON_a, &$ON_b,
&$ON_c) {
$app = JFactory::getApplication();
if($app->isAdmin() || !$this->init())
return;
if(!empty($filters['current_vendor']))
return;
$use_search_module =
(int)$this->params->get('use_search_module', 1);
$empty_is_all = (int)$this->params->get('empty_is_all',
1);
$hide_for_guest =
(int)$this->params->get('hide_for_guest', 0);
$location_search = null;
if($use_search_module) {
$location_search =
hikaInput::get()->getVar('location_search', null);
if($location_search !== null) {
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.search',
$location_search);
} else {
$location_search =
$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.search',
null);
}
}
if($empty_is_all && empty($location_search))
return;
$filter_mode = $this->params->get('filter_mode',
'zip;city');
if(empty($filter_mode)) $filter_mode = 'zip;city';
$filter_mode = explode(';', trim($filter_mode));
$vendorZipColumn =
$this->params->get('vendor_zip_column',
'accepted_zip');
if(empty($vendorZipColumn)) $vendorZipColumn = 'accepted_zip';
$vendorZipColumn = $this->db->quoteName($vendorZipColumn);
$vendorCitiesColumn =
$this->params->get('vendor_city_column',
'accepted_cities');
if(empty($vendorCitiesColumn)) $vendorCitiesColumn =
'accepted_cities';
$vendorCitiesColumn = $this->db->quoteName($vendorCitiesColumn);
$user_id = hikashop_loadUser();
if(empty($user_id) && !$use_search_module) {
if(!empty($hide_for_guest)) {
$this->pushEmptyFilter($filters, $filter_mode, $vendorZipColumn,
$vendorCitiesColumn);
$this->mergeFilters($filters);
}
return;
}
list($userZip, $userCity) = $this->getUserZipCity($user_id);
if((int)$this->params->get('zipcode_digits', 0))
$userZip = '' . ((int)$userZip);
$zipMode = in_array('zip', $filter_mode);
$cityMode = in_array('city', $filter_mode);
if($location_search === null && (!$zipMode || empty($userZip))
&& (!$cityMode || empty($userCity))) {
$this->pushEmptyFilter($filters, $filter_mode, $vendorZipColumn,
$vendorCitiesColumn);
$this->mergeFilters($filters);
return;
}
$vendorIds = $this->getVendorsCache($userZip, $userCity,
$location_search);
if(empty($vendorIds)) {
$vendorIds = $this->getVendors($filter_mode, $userZip, $userCity,
$location_search);
$this->setVendorsCache($vendorIds, $userZip, $userCity,
$location_search);
}
if(!empty($vendorIds))
$filters['vendor_location_filter'] =
'(hikam_vendor.vendor_id IS NULL OR hikam_vendor.vendor_id IN
('.implode(',',$vendorIds).'))';
else
$filters['vendor_location_filter'] =
'(hikam_vendor.vendor_id IS NULL)';
$this->mergeFilters($filters);
}
public function onAfterCheckCartQuantities(&$cart, $parent_products)
{
$app = JFactory::getApplication();
if($app->isAdmin() || !$this->init())
return;
$check_cart = (int)$this->params->get('check_cart',
'0');
if(!$check_cart)
return;
$user_id = hikashop_loadUser();
if(empty($user_id))
return;
$use_cache = (int)$this->params->get('use_cache', 1);
$filter_mode = $this->params->get('filter_mode',
'zip;city');
if(empty($filter_mode)) $filter_mode = 'zip;city';
$filter_mode = explode(';', trim($filter_mode));
$zipMode = in_array('zip', $filter_mode);
$cityMode = in_array('city', $filter_mode);
$addr = !empty($cart->shipping_address) ? $cart->shipping_address :
@$cart->billing_address;
if(empty($addr))
return;
$userZip = !empty($addr->address_post_code) ?
$addr->address_post_code : 0;
$userCity = !empty($addr->address_city) ? $addr->address_city :
'';
if((int)$this->params->get('zipcode_digits', 0))
$userZip = '' . ((int)$userZip);
if(empty($userZip) && empty($userCity))
return;
$vendorIds = $this->getVendorsCache($userZip, $userCity, null);
if(empty($vendorIds)) {
$vendorIds = $this->getVendors($filter_mode, $userZip, $userCity,
null);
$this->setVendorsCache($vendorIds, $userZip, $userCity, null);
}
$already = array();
foreach($cart->messages as $msg) {
if(empty($msg['owner']) || $msg['owner'] !=
'vendorlocation')
continue;
$already[ $msg['product_id'] ] = true;
}
foreach($cart->products as $product) {
$vendor = (int)$product->product_vendor_id;
if(isset($vendorIds[ $vendor ]))
continue;
if(isset($already[$product->product_id]))
continue;
if((int)$product->product_parent_id > 0 &&
$product->product_type == 'variant' &&
isset($parent_products[ (int)$product->product_parent_id ]))
$product_name = trim($parent_products[
(int)$product->product_parent_id ]->product_name . ' ' .
$product->product_name);
else
$product_name = $product->product_name;
$cart->messages[] = array(
'msg' =>
JText::sprintf('PRODUCT_X_NOT_SOLD_IN_YOUR_LOCATION',
$product_name),
'product_id' => $product->product_id,
'type' => 'notice',
'owner' => 'vendorlocation'
);
}
}
private function getUserZipCity($user_id = null) {
if($user_id === null)
$user_id = hikashop_loadUser();
$addressClass = hikashop_get('class.address');
$addresses = $addressClass->loadUserAddresses($user_id);
$userZip = 0;
$userCity = '';
if(empty($addresses))
return array($userZip, $userCity);
$address = reset($addresses);
if(!empty($address->address_post_code))
$userZip = $address->address_post_code;
if(!empty($address->address_city))
$userCity = $address->address_city;
return array($userZip, $userCity);
}
private function getVendors($filter_mode, $userZip, $userCity,
$location_search) {
$zipMode = in_array('zip', $filter_mode);
$cityMode = in_array('city', $filter_mode);
$vendorZipColumn =
$this->params->get('vendor_zip_column',
'accepted_zip');
if(empty($vendorZipColumn)) $vendorZipColumn = 'accepted_zip';
$vendorZipColumn = $this->db->quoteName($vendorZipColumn);
$vendorCitiesColumn =
$this->params->get('vendor_city_column',
'accepted_cities');
if(empty($vendorCitiesColumn)) $vendorCitiesColumn =
'accepted_cities';
$vendorCitiesColumn = $this->db->quoteName($vendorCitiesColumn);
$sql_filters = array();
if($zipMode) {
$f = array();
$stars = '*';
if($location_search !== null || !empty($userZip)) {
if($location_search !== null) {
$f[] = $vendorZipColumn.' LIKE
\'%'.$this->dbEscape($location_search).'%\'';
} else {
$f[] = $vendorZipColumn.' LIKE
\'%'.$this->dbEscape($userZip).'%\'';
}
for($i = strlen($userZip) - 1; $i >= 0; $i--) {
$z = substr($userZip, 0, $i) . $stars;
$f[] = $vendorZipColumn.' LIKE
\'%'.$this->dbEscape($z).'%\'';
$stars .= '*';
}
}
unset($stars);
if(!empty($f))
$sql_filters[] = '('.implode(') OR (',
$f).')';
}
if($cityMode && ($location_search !== null || !empty($userCity)))
{
if($location_search !== null) {
$sql_filters[] = $vendorCitiesColumn.' LIKE
\'%'.$this->dbEscape($location_search).'%\'';
} else {
$sql_filters[] = $vendorCitiesColumn.' LIKE
\'%'.$this->dbEscape($userCity).'%\'';
}
}
$query = 'SELECT vendor_id FROM
'.hikamarket::table('vendor').' WHERE
('.implode(') OR (', $sql_filters).')';
$this->db->setQuery($query);
try {
$vendors = $this->db->loadObjectList('vendor_id');
} catch(Exception $e) {
$vendors = array();
hikashop_writeToLog($query . "\r\n\r\n" . $e);
}
if(empty($vendors))
$vendors = array();
$vendors = array_keys($vendors);
$vendorIds = array_combine($vendors, $vendors);
unset($vendors);
if((int)$this->params->get('force_main_vendor', 1)) {
$vendorIds[0] = 0;
$vendorIds[1] = 1;
}
if((int)$this->params->get('include_logged_vendor', 1))
{
$currentVendor = hikamarket::loadVendor();
if(!empty($currentVendor))
$vendorIds[$currentVendor] = $currentVendor;
}
return $vendorIds;
}
private function getVendorsCache($userZip, $userCity, $location_search) {
$use_cache = (int)$this->params->get('use_cache', 1);
if(!$use_cache)
return null;
$app = JFactory::getApplication();
$session_userZip =
$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.cache_user_zip');
$session_userCity =
$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.cache_user_city');
$session_search =
$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.cache_search');
if($session_userZip != $userZip || $session_userCity != $userCity ||
$session_search != $location_search)
return null;
return
$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.vendor_list');
}
private function setVendorsCache($vendorIds, $userZip, $userCity,
$location_search) {
$use_cache = (int)$this->params->get('use_cache', 1);
if(!$use_cache)
return false;
$app = JFactory::getApplication();
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.vendor_list',
$vendorIds);
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.cache_user_zip',
$userZip);
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.cache_user_city',
$userCity);
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_location_filter.cache_search',
$location_search);
return true;
}
private function pushEmptyFilter(&$filters, $filter_mode,
$vendorZipColumn, $vendorCitiesColumn) {
if(in_array('zip', $filter_mode))
$filters['vendor_zip_filter'] = '(hikam_vendor.'.
$vendorZipColumn.' IS NULL OR hikam_vendor.'.
$vendorZipColumn.' = \'\' OR hikam_vendor.'.
$vendorZipColumn.' = \'*\')';
if(in_array('city', $filter_mode))
$filters['vendor_city_filter'] = '(hikam_vendor.'.
$vendorCitiesColumn.' IS NULL OR hikam_vendor.'.
$vendorCitiesColumn.' = \'\' OR hikam_vendor.'.
$vendorCitiesColumn.' = \'*\')';
}
private function mergeFilters(&$filters) {
if(isset($filters['vendor_city_filter']) &&
isset($filters['vendor_zip_filter'])) {
$filters['vendor_location_filter'] = '(' .
$filters['vendor_city_filter'] . ') OR (' .
$filters['vendor_zip_filter'] . ')';
unset($filters['vendor_city_filter']);
unset($filters['vendor_zip_filter']);
}
}
}
extensions/plg_hikashop_vendorlocationfilter/vendorlocationfilter.xml000064400000012436151160562420022715
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="hikashop" method="upgrade">
<name>HikaShop Vendor User Location Filter</name>
<hikainstall ordering="1" enable="0"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>contact@obsidev.com</authorEmail>
<authorUrl>http://www.hikashop.com</authorUrl>
<copyright>(C) 2011-2020 OBSIDEV. All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaShop Vendor User Location
Filter</description>
<files>
<filename
plugin="vendorlocationfilter">vendorlocationfilter.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
<param name="use_search_module" type="radio"
default="1" label="Use search module"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="filter_mode" type="list"
default="zip" label="Filter Mode"
description="">
<option value="zip">Zip</option>
<option value="city">City</option>
<option value="zip;city">Both</option>
</param>
<param name="vendor_zip_column" type="text"
label="Vendor Zips field" size="30"
default="accepted_zip" description="The vendor custom field
column name for the list of zip" />
<param name="vendor_city_column" type="text"
label="Vendor City field" size="30"
default="accepted_cities" description="The vendor custom
field column name for the list of cities" />
<param name="include_logged_vendor" type="radio"
default="1" label="Include logged vendor products"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="force_main_vendor" type="radio"
default="1" label="Force main vendor products"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="empty_is_all" type="radio"
default="1" label="Empty field means *all*"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="hide_for_guest" type="radio"
default="0" label="Hide for guest"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="use_cache" type="radio"
default="1" label="Use cache"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="check_cart" type="radio"
default="0" label="Check cart content"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="zipcode_digits" type="radio"
default="0" label="Zips are only digits"
description="">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
<fieldset name="basic">
<field name="use_search_module" type="radio"
default="1" label="Use search module"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="filter_mode" type="list"
default="zip" label="Filter Mode"
description="">
<option value="zip">Zip</option>
<option value="city">City</option>
<option value="zip;city">Both</option>
</field>
<field name="vendor_zip_column" type="text"
label="Vendor Zips field" size="30"
default="accepted_zip" description="The vendor custom field
column name for the list of zip" />
<field name="vendor_city_column" type="text"
label="Vendor City field" size="30"
default="accepted_cities" description="The vendor custom
field column name for the list of cities" />
<field name="include_logged_vendor" type="radio"
default="1" label="Include logged vendor products"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="force_main_vendor" type="radio"
default="1" label="Force main vendor products"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="empty_is_all" type="radio"
default="1" label="Empty field means *all*"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="hide_for_guest" type="radio"
default="0" label="Hide for guest"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="use_cache" type="radio"
default="1" label="Use cache" description=""
class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="check_cart" type="radio"
default="0" label="Check cart content"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
<field name="zipcode_digits" type="radio"
default="0" label="Zips are only digits"
description="" class="btn-group btn-group-yesno">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikashop_vendorpoints/index.html000064400000000032151160562420016217
0ustar00<html><body></body></html>extensions/plg_hikashop_vendorpoints/vendorpoints.php000064400000044555151160562420017507
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashopVendorpoints extends hikashopPlugin {
var $multiple = true;
var $name = 'vendorpoints';
protected function init() {
static $init = null;
if($init !== null)
return $init;
$init = defined('HIKAMARKET_COMPONENT');
if(!$init) {
$filename =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(file_exists($filename)) {
include_once($filename);
$init = defined('HIKAMARKET_COMPONENT');
}
}
return $init;
}
public function getAUP($warning = false) {
static $aup = null;
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;
}
$api_AUP =
JPATH_SITE.DS.'components'.DS.'com_altauserpoints'.DS.'helper.php';
if(!$aup && file_exists($api_AUP)) {
require_once ($api_AUP);
if(class_exists('AltaUserPointsHelper')) {
$aup = true;
if(!class_exists('AlphaUserPointsHelper'))
require_once
dirname(__FILE__).DS.'vendorpoints_aup_compat.php';
}
}
if(!$aup && $warning) {
$app = JFactory::getApplication();
if($app->isAdmin())
$app->enqueueMessage('The HikaShop UserPoints plugin requires
the component AlphaUserPoints to be installed. If you want to use it,
please install the component or use another mode.');
}
}
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($app->isAdmin())
$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 onPluginConfiguration(&$element) {
$this->pluginConfiguration($element);
if(!$this->init())
return false;
$current =
$this->db->getTableColumns(hikamarket::table('shop.user'));
if(!isset($current['user_points'])) {
$query = 'ALTER TABLE
`'.hikamarket::table('shop.user').'` ADD COLUMN
`user_points` TEXT NOT NULL DEFAULT \'\'';
$this->db->setQuery($query);
try {
$this->db->execute();
}catch(Exception $e) { }
$query = 'INSERT INTO `' .
hikamarket::table('shop.field') . '` '.
<<<EOD
(`field_table`, `field_realname`, `field_namekey`, `field_type`,
`field_value`, `field_published`, `field_ordering`, `field_options`,
`field_core`, `field_required`, `field_backend`, `field_frontcomp`,
`field_default`, `field_backend_listing`) VALUES
('user', 'Points', 'user_points',
'text', '', 1, 1,
'a:5:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 0, 1, 0, '', 0)
EOD;
$this->db->setQuery($query);
$this->db->execute();
}
$shopConfig = hikamarket::config(false);
$this->main_currency =
$shopConfig->get('main_currency',1);
$currency = hikamarket::get('shop.class.currency');
$this->currency = $currency->get($this->main_currency);
$this->modes = array();
if($this->getAUP())
$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'));
$this->joomlaAclType = hikamarket::get('type.joomla_acl');
}
public function onBeforeOrderCreate(&$order, &$do) {
if( !empty($order->order_type) && $order->order_type !=
'subsale' )
return true;
if(empty($order->order_payment_params))
$order->order_payment_params = new stdClass();
if(empty($order->order_payment_params->vendorpoints))
$order->order_payment_params->vendorpoints = new stdClass();
if(empty($order->order_payment_params->vendorpoints->earn_points))
$order->order_payment_params->vendorpoints->earn_points =
array();
$earnPoints = array();
$this->onGetUserPointsEarned($order, $earnPoints, 'all');
if(!empty($earnPoints)) {
foreach($earnPoints as $mode => $pts) {
if(empty($order->order_payment_params->vendorpoints->earn_points[$mode]))
$order->order_payment_params->vendorpoints->earn_points[$mode]
= 0;
$order->order_payment_params->vendorpoints->earn_points[$mode]
+= $pts;
}
}
}
public function onAfterOrderCreate(&$order, &$send_email) {
$app = JFactory::getApplication();
if($app->isAdmin())
return true;
if(!isset($order->order_status))
return true;
if( !empty($order->order_type) && $order->order_type !=
'subsale' )
return true;
if( !empty($order->vendorpoints_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 !=
'subsale') || $order->old->order_type !=
'subsale' )
return true;
if( !empty($order->vendorpoints_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') {
$ids = array();
if(!$this->init())
return;
$where = array(
$this->type.'_type = ' .
$this->db->Quote($this->name),
$this->type.'_published = 1'
);
hikamarket::addVendorACLFilters($where,
$this->type.'_access', '', 1, false,
(int)$order->order_vendor_id);
$query = 'SELECT '.$this->type.'_id as id,
'.$this->type.'_name as name FROM
'.hikashop_table($this->type).' WHERE ('.implode(')
AND (', $where).') ORDER BY
'.$this->type.'_ordering';
$this->db->setQuery($query);
$plugins = $this->db->loadObjectList();
foreach($plugins as $plugin) {
$ids[] = $plugin->id;
}
foreach($ids as $id) {
parent::pluginParams($id);
if($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 getDataReference(&$order) {
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 '';
}
return JText::_('ORDER_NUMBER').' : '.$number;
}
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;
if(!$this->init())
return false;
$points_mode = @$this->plugin_params->points_mode;
if($forceMode !== null)
$points_mode = $forceMode;
if($points_mode == 'aup') {
if(empty($order->vendor_admin)) {
$db = JFactory::getDBO();
$query = 'SELECT hu.* FROM ' .
hikamarket::table('vendor') . ' AS v '.
' INNER JOIN ' . hikamarket::table('shop.user') .
' AS hu ON v.vendor_admin_id = hu.user_id '.
' WHERE v.vendor_id = ' . (int)$order->order_vendor_id;
$db->setQuery($query);
$order->vendor_admin = $db->loadObject();
}
if($this->getAUP(true)) {
if($data === null)
$data = $this->getDataReference($order);
$aupid =
AlphaUserPointsHelper::getAnyUserReferreID($order->vendor_admin->user_cms_id);
AlphaUserPointsHelper::newpoints('plgaup_orderValidation',
$aupid, '', $data, $points);
return true;
}
return false;
}
if($points_mode == 'esp') {
if(empty($order->vendor_admin)) {
$db = JFactory::getDBO();
$query = 'SELECT hu.* FROM ' .
hikamarket::table('vendor') . ' AS v '.
' INNER JOIN ' . hikamarket::table('shop.user') .
' AS hu ON v.vendor_admin_id = hu.user_id '.
' WHERE v.vendor_id = ' . (int)$order->order_vendor_id;
$db->setQuery($query);
$order->vendor_admin = $db->loadObject();
}
if($this->getEasysocial(true)) {
if($data === null)
$data = $this->getDataReference($order, $points_mode);
$eas_points = FD::points();
$userInfo = FD::user( $order->vendor_admin->user_cms_id );
return $eas_points->assignCustom( $userInfo->id, $points, $data
);
}
return false;
}
$ret = true;
if(empty($order->vendor)) {
$vendorClass = hikamarket::get('class.vendor');
$order->vendor = $vendorClass->get($order->order_vendor_id);
}
$userClass = hikashop_get('class.user');
$oldUser =
$userClass->get((int)$order->vendor->vendor_admin_id);
if(!isset($oldUser->user_points))
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) {
$points = -$oldUser->user_points;
$user->user_points = 0;
$ret = false;
}
$userClass->save($user);
return $ret;
}
public function getPointsEarned($order) {
if(empty($this->plugin_params))
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;
}
$categories = array();
if(!empty($this->plugin_params->categories))
$categories = unserialize($this->plugin_params->categories);
if(!empty($categories)) {
if(!empty($order->cart->products)) {
$products =& $order->cart->products;
} else {
$products =& $order->products;
}
foreach($products as $product) {
$ids[$product->product_id] = $product->product_id;
}
$queryP = 'SELECT product_parent_id FROM
'.hikashop_table('product').' WHERE product_id IN
('.implode(',',$ids).')';
$db->setQuery($queryP);
$pids = $db->loadObjectList();
if(!empty($pids)) {
foreach($pids as $pid) {
$ids[$pid->product_parent_id] = $pid->product_parent_id;
}
}
$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(',',$ids).')';
$db->setQuery($query);
$idcats = $db->loadObjectList();
if(!empty($idcats)) {
$query = 'SELECT * FROM
'.hikashop_table('category').' WHERE
category_type=\'product\' AND ';
$conditions = array();
foreach($idcats as $idcat) {
$conditions[] = '(category_left <=
'.$idcat->category_left.' AND category_right >=
'.$idcat->category_right.')';
$idfinalcats[$idcat->product_id][0][] = $idcat->category_id;
}
$query .= implode(' OR ',$conditions);
}
$db->setQuery($query);
$idparentcats = $db->loadObjectList('category_id');
foreach($idcats as $id) {
$this->_makeLevel($idfinalcats[$id->product_id], 0,
$idparentcats);
}
$maxPoints = 0;
$tempCatId = null;
foreach($idfinalcats as $product) {
foreach($product as $levels) {
foreach($categories as $category) {
foreach($levels as $categoryid) {
if($categoryid == $category->category_id &&
$category->category_points > $maxPoints) {
$maxPoints = $category->category_points;
$tempCatId = $category->category_id;
}
}
$points += $maxPoints;
if(!empty($tempCatId)) {
foreach ($categories as $category) {
if($category->category_id == $tempCatId &&
$this->plugin_params->limitecategory == 1) {
$category->category_points = 0;
}
}
$maxPoints = 0;
$tempCatId = 0;
break 2;
}
$maxPoints = 0;
}
}
}
}
if($this->plugin_params->currency_rate != 0) {
$points += $order->order_vendor_price /
$this->plugin_params->currency_rate;
}
$products = array();
if(!empty($order->cart->products)) {
$products = &$order->cart->products;
} elseif(!empty($order->products)) {
$products = &$order->products;
}
if($this->plugin_params->limittype == 1) {
foreach($products as $product) {
$points += $this->plugin_params->productpoints;
}
} elseif($this->plugin_params->limittype == 0) {
foreach($products as $product) {
if(isset($product->order_product_quantity)) {
$points += $this->plugin_params->productpoints *
$product->order_product_quantity;
} else {
$points += $this->plugin_params->productpoints *
$product->cart_product_quantity;
}
}
}
return round($points, 0);
}
public function loadFullOrder($order_id) {
if(empty($this->fullOrder) || $this->fullOrder->order_id !=
$order_id) {
$classOrder = hikashop_get('class.order');
$this->fullOrder = $classOrder->loadFullOrder($order_id, false,
false);
}
}
public function giveAndGiveBack(&$order) {
$this->config = hikashop_config();
$confirmed = null;
if(!isset($this->params)) {
$pluginsClass = hikashop_get('class.plugins');
$plugin = $pluginsClass->getByName('hikashop',
'vendorpoints');
$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->vendorpoints->earn_points))
{
foreach($this->fullOrder->order_payment_params->vendorpoints->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->vendorpoints->earn_points))
{
foreach($this->fullOrder->order_payment_params->vendorpoints->earn_points
as $mode => $p) {
if(empty($points[$mode]))
$points[$mode] = 0;
$points[$mode] += $p;
}
}
if(!empty($points)) {
foreach($points as $mode => $p) {
if(!empty($p))
$this->addPoints($p, $this->fullOrder, null, $mode);
}
}
}
}
extensions/plg_hikashop_vendorpoints/vendorpoints.xml000064400000003125151160562420017504
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikashop">
<name>Hikashop VendorPoints Plugin</name>
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>contact@obsidev.com</authorEmail>
<authorUrl>http://www.hikashop.com</authorUrl>
<copyright>(C) 2011-2020 OBSIDEV. All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin enables you to configure a Vendor Points
system</description>
<files>
<filename
plugin="vendorpoints">vendorpoints.php</filename>
<filename>vendorpoints_configuration.php</filename>
<filename>vendorpoints_aup_compat.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
<param name="pluginoptions" type="pluginoptions"
default="plugin" label="hikashop"
description="HikaShop options" />
<param name="order_status" type="text"
default="" label="Valid order statuses"
description="List of the valid order statuses. If empty, it uses the
HikaShop configuration value"/>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
<fieldset name="basic">
<field id="pluginoptions" name="pluginoptions"
type="pluginoptions" label="hikashop"
description="HikaShop options" />
<field name="order_status" type="text"
default="" label="Valid order statuses"
description="List of the valid order statuses. If empty, it uses the
HikaShop configuration value"/>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_hikashop_vendorpoints/vendorpoints_aup_compat.php000064400000000544151160562420021705
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class AlphaUserPointsHelper extends AltaUserPointsHelper{}
extensions/plg_hikashop_vendorpoints/vendorpoints_configuration.php000064400000010135151160562420022421
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?> <tr>
<td class="key">
<label
for="data[plugin][plugin_params][points_mode]"><?php
echo JText::_('POINTS_MODE');
?></label>
</td>
<td><?php
echo JHTML::_('hikaselect.genericlist',
$this->data['modes'],
"data[plugin][plugin_params][points_mode]", '',
'value', 'text',
@$this->element->plugin_params->points_mode);
?></td>
</tr>
<tr>
<td class="key">
<label
for="data[plugin][plugin_params][currency_rate]"><?php
echo JText::_('RATES');
?></label>
</td>
<td>
<input type="text"
name="data[plugin][plugin_params][currency_rate]"
value="<?php echo
@$this->element->plugin_params->currency_rate; ?>" />
<?php echo $this->data['currency']->currency_code.
' ' .$this->data['currency']->currency_symbol;
?>
<?php echo JText::_( 'EQUALS') . '1 ' .
JText::_( 'POINTS'); ?>
</tr>
<tr>
<td class="key">
<label
for="data[plugin][plugin_params][productpoints]"><?php
echo JText::_('PRODUCT_POINTS');
?></label>
</td>
<td>
<input type="text"
name="data[plugin][plugin_params][productpoints]"
value="<?php echo
@$this->element->plugin_params->productpoints; ?>" />
</td>
</tr>
<tr>
<td class="key">
<label
for="data[plugin][plugin_params][limittype]"><?php
echo JText::_('LIMIT_POINTS_BY_TYPE');
?></label>
</td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"data[plugin][plugin_params][limittype]" ,
'',@$this->element->plugin_params->limittype);
?></td>
</tr>
</table>
</fieldset>
<fieldset class="adminform">
<legend><?php echo JText::_('CATEGORIES_POINTS');
?></legend>
<div style="text-align:right;">
<a class="modal" id="hikashop_cat_popup"
rel="{handler: 'iframe', size: {x: 760, y: 480}}"
href="<?php echo
hikashop_completeLink("product&task=selectcategory&control=plugin",true
); ?>">
<button class="btn" type="button"
onclick="return false"><img src="<?php echo
HIKASHOP_IMAGES; ?>add.png"
style="vertical-align:middle"/><?php echo
JText::_('ADD');?></button>
</a>
</div>
<table class="adminlist table table-striped"
cellpadding="1" width="100%">
<thead>
<tr>
<th class="title"><?php
echo JText::_('HIKA_NAME');
?></th>
<th class="title titletoggle"><?php
echo JText::_('POINTS');
?></th>
<th class="title"><?php
echo JText::_('ID');
?></th>
</tr>
</thead>
<tbody id="category_listing">
<?php
if(!empty($this->data['categories'])){
$k = 0;
for($i = 0,$a =
count($this->data['categories']);$i<$a;$i++){
$row =& $this->data['categories'][$i];
if(!empty($row->category_id)){
?>
<tr id="category_<?php echo
$row->category_id;?>">
<td>
<a href="<?php echo
hikashop_completeLink('category&task=edit&cid='.$row->category_id);
?>"><?php echo $row->category_name; ?></a>
</td>
<td align="center">
<input type="text" name="category_points[<?php
echo $row->category_id;?>]" id="category_points[<?php
echo $row->category_id;?>]" value="<?php echo
(int)@$row->category_points; ?>" />
</td>
<td width="1%" align="center">
<?php echo $row->category_id; ?>
<div id="category_div_<?php echo
$row->category_id;?>">
<input type="hidden" name="category[<?php echo
$row->category_id;?>]" id="category[<?php echo
$row->category_id;?>]" value="<?php echo
$row->category_id;?>"/>
</div>
</td>
</tr>
<?php
}
$k = 1-$k;
}
}
?>
</tbody>
</table>
<table class="admintable table">
<tr>
<td class="key">
<label
for="data[plugin][plugin_params][limitcategory]"><?php
echo JText::_('LIMIT_POINTS_BY_CATEGORY');
?></label>
</td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"data[plugin][plugin_params][limitcategory]" ,
'',@$this->element->plugin_params->limitcategory);
?></td>
</tr>
</table>
<table>
extensions/plg_search_hikamarket_vendors/hikamarket_vendors.php000064400000012406151160562420021410
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgSearchHikamarket_vendors extends JPlugin {
public function __construct(&$subject, $config) {
$this->loadLanguage('com_hikamarket');
$this->loadLanguage('plg_search_hikamarket_vendors');
$this->loadLanguage('plg_search_hikamarket_vendors_override');
parent::__construct($subject, $config);
if(!isset($this->params)) {
$plugin = JPluginHelper::getPlugin('search',
'hikamarket_vendors');
$this->params = new JRegistry($plugin->params);
}
}
public function onContentSearchAreas() {
return $this->onSearchAreas();
}
public function onContentSearch($text, $phrase = '', $ordering =
'', $areas = null) {
return $this->onSearch($text, $phrase, $ordering, $areas);
}
public function &onSearchAreas() {
$areas = array(
'vendors' => JText::_('HIKA_VENDORS')
);
return $areas;
}
public function onSearch($text, $phrase = '', $ordering =
'', $areas = null) {
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php'))
return array();
$db = JFactory::getDBO();
if(is_array($areas)) {
if(!array_intersect($areas, array_keys( $this->onSearchAreas() )))
return array();
}
$limit = $this->params->def('search_limit', 50);
$add_image = $this->params->def('add_image', 0);
$text = trim($text);
if(empty($text))
return array();
switch($ordering) {
case 'alpha':
$order = 'vendor.vendor_name ASC';
break;
case 'newest':
$order = 'vendor.vendor_created DESC, vendor.vendor_id
DESC';
break;
case 'oldest':
$order = 'vendor.vendor_created ASC, vendor.vendor_id DESC';
break;
case 'category':
case 'popular':
default:
$order = 'vendor.vendor_name DESC';
break;
}
$rows = array();
$filters = array(
'vendor.vendor_published = 1'
);
$filters2 = array();
$fields = $this->params->get('fields', '');
if(empty($fields)) {
$fields = array('vendor_name',
'vendor_description');
} else {
$fields = explode(',', $fields);
}
switch($phrase){
case 'exact':
$text = $db->Quote('%' . hikamarket::getEscaped($text,
true) . '%', false);
foreach($fields as $field) {
$filters[] = 'vendor.'.$field.' LIKE '.$text;
}
break;
case 'all':
case 'any':
default:
$words = explode( ' ', $text );
$wordFilters = array();
$subWordFilters = array();
foreach($words as $word) {
$word = $db->Quote('%' . hikamarket::getEscaped($word,
true) . '%', false);
foreach($fields as $i => $field) {
$subWordFilters[$i][] = 'vendor.' . $field . ' LIKE
' . $word;
}
}
foreach($subWordFilters as $i => $subWordFilter){
$wordFilters[$i]= '((' .implode( ($phrase == 'all'
? ') AND (' : ') OR ('),$subWordFilter).
'))';
}
$filters[] = '((' . implode( ') OR (', $wordFilters
) . '))';
break;
}
$new_page =
(int)$this->params->get('new_page','1');
$select = ' vendor.vendor_id AS id, vendor.vendor_name AS title,
vendor.vendor_description AS text, vendor_created as created,
"'.$new_page.'" AS browsernav';
$count = 0;
if($add_image) {
$select .= ', vendor_image ';
}
if($limit){
$query = 'SELECT DISTINCT ' . $select . ' FROM ' .
hikamarket::table('vendor') . ' AS vendor WHERE ' .
implode(' AND ', $filters) . ' ORDER BY ' . $order;
$db->setQuery($query, 0, $limit);
$mainRows = $db->loadObjectList('id');
if(!empty($mainRows)) {
foreach($mainRows as $k => $main) {
$rows[$k] = $main;
}
$count = count($rows);
}
}
if(!$count)
return $rows;
$item_id = $this->params->get('item_id', '');
$menuClass = hikashop_get('class.menus');
$Itemid = '';
if(!empty($item_id))
$Itemid = '&Itemid=' . $item_id;
$itemids = array();
$app = JFactory::getApplication();
$urlSafe = (method_exists($app,'stringURLSafe'));
if($add_image) {
$shopConfig = hikamarket::config(false);
$uploadFolder =
ltrim(JPath::clean(html_entity_decode($shopConfig->get('uploadfolder'))),DS);
$uploadFolder = rtrim($uploadFolder,DS).DS;
$uploadFolder_url = str_replace(DS,'/',$uploadFolder);
$app = JFactory::getApplication();
if($app->isAdmin()){
$uploadFolder_url = '../'.$uploadFolder_url;
}else{
$uploadFolder_url =
rtrim(JURI::base(true),'/').'/'.$uploadFolder_url;
}
}
foreach($rows as $k => $row) {
if($urlSafe) {
$alias = $app->stringURLSafe(strip_tags($row->title));
} else {
$alias = JFilterOutput::stringURLSafe(strip_tags($row->title));
}
if($add_image && !empty($row->vendor_image)) {
$rows[$k]->text = '<img
src="'.$uploadFolder_url.$row->vendor_image.'"
alt=""/>'.$rows[$k]->text;
}
$rows[$k]->section = JText::_('HIKA_VENDOR');
$rows[$k]->href =
'index.php?option=com_hikamarket&ctrl=vendor&task=show&name='
. $alias . '&cid=' . $row->id . $Itemid;
}
return $rows;
}
}
extensions/plg_search_hikamarket_vendors/hikamarket_vendors.xml000064400000005325151160562420021423
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
group="search" method="upgrade">
<name>Search - HikaMarket Vendors</name>
<hikainstall ordering="0" enable="1"
report="0" />
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>Allows Searching of vendors</description>
<files>
<filename
plugin="hikamarket_vendors">hikamarket_vendors.php</filename>
</files>
<params addpath="/components/com_hikamarket/params">
<param name="search_limit" type="text"
size="5" default="50" label="Search Limit"
description="Number of Search items to return" />
<param name="item_id" type="text"
size="5" default="" label="Itemid for
vendors" description="The id of the menu to append to the URLs so
that the vendor page uses the corresponding HikaMarket options" />
<param name="new_page" type="radio"
default="1" label="New page" description="Open
links on a new page">
<option value="2">No</option>
<option value="1">Yes</option>
</param>
<param name="fields" type="vendorsearchfields"
default="vendor_name,vendor_description" label="Fields"
description="Select the fields you want to be searchable" />
<param name="add_image" type="radio"
default="0" label="Add image" description="Add an
image in the returned content">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikamarket/fields">
<fieldset name="basic">
<field name="search_limit" type="text"
label="Search Limit" size="5" default="50"
description="Number of Search items to return" />
<field name="item_id" type="text"
label="Itemid for vendors" size="5"
default="" description="The id of the menu to append to the
URLs so that the vendor page uses the corresponding HikaMarket
options" />
<field name="new_page" type="radio"
default="1" label="New page" description="Open
links on a new page">
<option value="2">No</option>
<option value="1">Yes</option>
</field>
<field name="fields" type="vendorsearchfields"
default="vendor_name,vendor_description" label="Fields"
description="Select the fields you want to be searchable" />
<field name="add_image" type="radio"
default="0" label="Add image" description="Add an
image in the returned content">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
</fieldset>
</fields>
</config>
</extension>
extensions/plg_search_hikamarket_vendors/index.html000064400000000032151160562420017004
0ustar00<html><body></body></html>extensions/plg_system_hikamarketoverrides/hikamarketoverrides.php000064400000003547151160562420022043
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
jimport('joomla.plugin.plugin');
class plgSystemHikamarketoverrides extends JPlugin {
public function __construct(&$subject, $config) {
parent::__construct($subject, $config);
$this->init();
}
private function init() {
static $init = null;
if($init !== null)
return;
$init = true;
$hikashopHelper =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikashop'.DS.'helpers'.DS.'helper.php';
$marketHelper =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php';
if(!file_exists($hikashopHelper) || !file_exists($marketHelper))
return;
$db = JFactory::getDBO();
$db->setQuery('SELECT config_value FROM #__hikashop_config WHERE
config_namekey = ' . $db->Quote('version'));
$version = $db->loadResult();
jimport('joomla.filesystem.folder');
$path =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'overrides'.DS.$version.DS;
if(!JFolder::exists($path))
return;
$allFiles = JFolder::files($path);
if(empty($allFiles))
return;
include_once $hikashopHelper;
foreach($allFiles as $oneFile) {
if(substr($oneFile, -4) != '.php')
continue;
if(substr($oneFile, 0, 6) == 'class.') {
$originalFile =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikashop'.DS.'classes'.DS.substr($oneFile,
6);
if(file_exists($originalFile)) {
include_once $originalFile;
include_once $path . $oneFile;
}
} else {
include_once $path . $oneFile;
}
}
}
}
extensions/plg_system_hikamarketoverrides/hikamarketoverrides.xml000064400000001351151160562420022043
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
method="upgrade" group="system">
<name>HikaMarket HikaShop overrides</name>
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaMarket HikaShop overrides</description>
<files>
<filename
plugin="hikamarketoverrides">hikamarketoverrides.php</filename>
</files>
<params addpath="/components/com_hikamarket/params">
</params>
</extension>
extensions/plg_system_hikamarketoverrides/index.html000064400000000032151160562420017246
0ustar00<html><body></body></html>extensions/plg_user_hikamarket_vendorgroup/hikamarket_vendorgroup.php000064400000005021151160562420022700
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgUserHikamarket_vendorgroup extends JPlugin {
protected $oldUser = null;
public function __construct(& $subject, $config) {
parent::__construct($subject, $config);
}
public function onUserBeforeSave($user, $isnew, $new) {
return $this->onBeforeStoreUser($user, $isnew);
}
public function onUserAfterSave($user, $isnew, $success, $msg) {
return $this->onAfterStoreUser($user, $isnew, $success, $msg);
}
public function onUserAfterDelete($user, $success, $msg) {
return $this->onAfterDeleteUser($user, $success, $msg);
}
public function onBeforeStoreUser($user, $isnew) {
$this->oldUser = $user;
return true;
}
public function onAfterStoreUser($user, $isnew, $success, $msg) {
if($success === false || !is_array($user))
return false;
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php'))
return true;
$vendorClass = hikamarket::get('class.vendor');
$vendorClass->onAfterStoreUser($user, $isnew, $success, $msg,
$this->oldUser);
return true;
}
public function onAfterDeleteUser($user, $success, $msg) {
return true;
}
public function onUserLogin($user, $options) {
return $this->onLoginUser($user, $options);
}
public function onLoginUser($user, $options) {
$app = JFactory::getApplication();
if($app->isAdmin())
return true;
if(empty($user['id'])){
if(!empty($user['username'])) {
jimport('joomla.user.helper');
$instance = new JUser();
if($id = (int)JUserHelper::getUserId($user['username']))
$instance->load($id);
if($instance->get('block') == 0)
$user_id = (int)$instance->id;
}
} else {
$user_id = (int)$user['id'];
}
if(empty($user_id))
return true;
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php'))
return true;
jimport('joomla.access.access');
$groups = JAccess::getGroupsByUser($user_id,false);
$vendorClass = hikamarket::get('class.vendor');
$vendorClass->onLoginUser($user_id, $user, $groups);
return true;
}
}
extensions/plg_user_hikamarket_vendorgroup/hikamarket_vendorgroup.xml000064400000001430151160562420022711
0ustar00<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin"
method="upgrade" group="user">
<name>HikaMarket Vendor groups</name>
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<hikainstall ordering="0" enable="1"
report="0" />
<author>Obsidev</author>
<authorEmail>dev@obsidev.com</authorEmail>
<authorUrl>http://www.obsidev.com</authorUrl>
<copyright>Copyright (C) 2012-2020 OBSIDEV SARL - All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>HikaMarket Vendor groups</description>
<files>
<filename
plugin="hikamarket_vendorgroup">hikamarket_vendorgroup.php</filename>
</files>
<params addpath="/components/com_hikamarket/params">
</params>
</extension>
extensions/plg_user_hikamarket_vendorgroup/index.html000064400000000032151160562420017407
0ustar00<html><body></body></html>helpers/dropdown.php000064400000004514151160562420010561
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketDropdownHelper {
public function __construct() {
}
public function init() {
hikamarket::loadJsLib('dropdown');
}
public function display($label, $data, $options = array()) {
$this->init();
$class = '';
if(!empty($options['up']))
$class .= ' hkdropup';
$ret = '<div
class="hkdropdown'.$class.'">';
$extra = '';
if(!empty($options['label-id']))
$extra .= '
id="'.$options['label-id'].'"';
$label = '<span
class="hkdropdown-text"'.$extra.'>'.htmlentities($label).'</span>';
$extra = '';
if(!empty($options['id']))
$extra .= '
id="'.$options['id'].'"';
$class = 'hikabtn hikabtn-mini';
$type = @$options['type'];
switch($type) {
case 'caret':
$ret .= '<a href="#"
data-toggle="hkdropdown" class="caret"
aria-haspopup="true"
aria-expanded="false"></a>';
break;
case 'button':
default:
$ret .= '<button type="button"
data-toggle="hkdropdown"
class="'.$class.'"'.$extra.'
aria-haspopup="true" aria-expanded="false">'.
$label.
' <span class="caret"></span>'.
'</button>';
break;
}
$extra = '';
if(!empty($options['id']))
$extra .= '
aria-labelledby="'.$options['id'].'"';
$class = '';
if(!empty($options['right']))
$class .= ' hkdropdown-menu-right';
$ret .= '<ul
class="hkdropdown-menu'.$class.'"'.$extra.'>';
foreach($data as $d) {
if(empty($d) || $d === '-') {
$ret .= '<li role="separator"
class="divider"></li>';
continue;
}
if(empty($d['name']))
continue;
$name = $d['name'];
$link = '#';
$extra = '';
if(!empty($d['link']))
$link = $d['link'];
if(!empty($d['extra']))
$extra .= ' '.trim($d['extra']);
if(!empty($d['click']))
$extra .= '
onclick="'.trim($d['click']).'"';
if(empty($d['disable']))
$ret .= '<li><a
href="'.$link.'"'.$extra.'>'.$name.'</a></li>';
else
$ret .= '<li class="disabled"><a
href="#" onclick="return
false;">'.$name.'</span></li>';
}
$ret .= '</ul></div>';
return $ret;
}
}
helpers/helper.php000064400000220104151160562420010177 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
jimport('joomla.application.component.controller');
jimport('joomla.application.component.view');
$hikashopHelperFile =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikashop'.DS.'helpers'.DS.'helper.php';
if(!file_exists($hikashopHelperFile)) {
throw new RuntimeException('HikaShop not installed ( www.hikashop.com
)', 500);
exit;
}
if(!defined('HIKASHOP_COMPONENT'))
include_once($hikashopHelperFile);
define('HIKAMARKET_COMPONENT','com_hikamarket');
define('HIKAMARKET_LIVE',rtrim(JURI::root(),'/').'/');
define('HIKAMARKET_ROOT',rtrim(JPATH_ROOT,DS).DS);
define('HIKAMARKET_FRONT',rtrim(JPATH_SITE,DS).DS.'components'.DS.HIKAMARKET_COMPONENT.DS);
define('HIKAMARKET_BACK',rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.HIKAMARKET_COMPONENT.DS);
define('HIKAMARKET_HELPER',HIKAMARKET_BACK.'helpers'.DS);
define('HIKAMARKET_BUTTON',HIKAMARKET_BACK.'buttons');
define('HIKAMARKET_CLASS',HIKAMARKET_BACK.'classes'.DS);
define('HIKAMARKET_INC',HIKAMARKET_BACK.'inc'.DS);
define('HIKAMARKET_VIEW',HIKAMARKET_BACK.'views'.DS);
define('HIKAMARKET_TYPE',HIKAMARKET_BACK.'types'.DS);
define('HIKAMARKET_MEDIA',HIKAMARKET_ROOT.'media'.DS.HIKAMARKET_COMPONENT.DS);
define('HIKAMARKET_DBPREFIX','#__hikamarket_');
define('HIKAMARKET_NAME','HikaMarket');
define('HIKAMARKET_LNAME','hikamarket');
define('HIKAMARKET_TEMPLATE',HIKASHOP_FRONT.'templates'.DS);
define('HIKAMARKET_URL','https://www.hikashop.com/');
define('HIKAMARKET_UPDATEURL',HIKAMARKET_URL.'index.php?option=com_updateme&ctrl=update&task=');
define('HIKAMARKET_HELPURL',HIKAMARKET_URL.'index.php?option=com_updateme&ctrl=doc&component='.HIKAMARKET_LNAME.'&page=');
define('HIKAMARKET_REDIRECT',HIKAMARKET_URL.'index.php?option=com_updateme&ctrl=redirect&page=');
$app = JFactory::getApplication();
if($app->isAdmin()) {
define('HIKAMARKET_CONTROLLER',HIKAMARKET_BACK.'controllers'.DS);
define('HIKAMARKET_IMAGES','../media/'.HIKAMARKET_COMPONENT.'/images/');
define('HIKAMARKET_CSS','../media/'.HIKAMARKET_COMPONENT.'/css/');
define('HIKAMARKET_JS','../media/'.HIKAMARKET_COMPONENT.'/js/');
define('HIKAMARKET_SWF','../media/'.HIKAMARKET_COMPONENT.'/swf/');
$css_type = 'backend';
} else {
define('HIKAMARKET_CONTROLLER',HIKAMARKET_FRONT.'controllers'.DS);
define('HIKAMARKET_IMAGES',JURI::base(true).'/media/'.HIKAMARKET_COMPONENT.'/images/');
define('HIKAMARKET_CSS',JURI::base(true).'/media/'.HIKAMARKET_COMPONENT.'/css/');
define('HIKAMARKET_JS',JURI::base(true).'/media/'.HIKAMARKET_COMPONENT.'/js/');
define('HIKAMARKET_SWF',JURI::base(true).'/media/'.HIKAMARKET_COMPONENT.'/swf/');
$css_type = 'frontend';
}
$lang = JFactory::getLanguage();
$lang->load(HIKAMARKET_COMPONENT, JPATH_SITE);
class hikamarket {
private static $configCache = array();
public static function get($name) {
$namespace = 'hikamarket';
if(substr($name,0,5) == 'shop.') {
$namespace = 'hikashop';
$name = substr($name,5);
}
if(substr($name,0,7) == 'serial.') {
$namespace = 'hikaserial';
$name = substr($name,7);
}
list($group,$class) = explode('.',$name,2);
if($group == 'controller') {
if($namespace == 'hikamarket')
$className = $class . 'Market' . ucfirst($group);
else if($namespace == 'hikaserial')
$className = $class . 'Serial' . ucfirst($group);
else
$className = $class . ucfirst($group);
} elseif(strpos($class, '-') === false) {
$className = $namespace . ucfirst($class) . ucfirst($group);
} else {
$blocks = explode('-', $class);
$blocks = array_map('ucfirst', $blocks);
$className = $namespace . implode('', $blocks) .
ucfirst($group);
}
if(class_exists($className.'Override'))
$className .= 'Override';
if(!class_exists($className)) {
$class = str_replace('-', DS, $class);
$const = constant(strtoupper($namespace . '_' . $group));
$app = JFactory::getApplication();
$path =
JPATH_THEMES.DS.$app->getTemplate().DS.'html'.DS.'com_'.$namespace.DS.'administrator'.DS;
$constOverride = str_replace(HIKASHOP_BACK, $path, $const);
jimport('joomla.filesystem.file');
if(JFile::exists($constOverride . $class . '.override.php'))
{
include_once($constOverride . $class . '.override.php');
$className .= 'Override';
} elseif(JFile::exists($const . $class . '.php')) {
include_once $const . $class . '.php';
} elseif($group == 'controller') {
self::getPluginController($class);
}
if(!class_exists($className)) {
return null;
}
}
$args = func_get_args();
array_shift($args);
switch(count($args)) {
case 4:
return new $className($args[0], $args[1], $args[2], $args[3]);
case 3:
return new $className($args[0], $args[1], $args[2]);
case 2:
return new $className($args[0], $args[1]);
case 1:
return new $className($args[0]);
}
return new $className();
}
public static function &config($market = true, $reload = false) {
if(self::$configCache === null)
self::$configCache = array();
if(!$market) {
if(!isset(self::$configCache['shop']) ||
self::$configCache['shop'] === null)
self::$configCache['shop'] =& hikashop_config();
if(self::$configCache['shop'] === null || $reload ||
!is_object(self::$configCache['shop']) ||
self::$configCache['shop']->get('configClassInit',
0) == 0) {
self::$configCache['shop'] =
self::get('shop.class.config');
if( self::$configCache['shop'] === null )
die(HIKASHOP_NAME.' config not found');
self::$configCache['shop']->load();
}
return self::$configCache['shop'];
}
if(!isset(self::$configCache['market']) ||
self::$configCache['market'] === null || $reload){
self::$configCache['market'] =
self::get('class.config');
if( self::$configCache['market'] === null )
die(HIKAMARKET_NAME.' config not found');
self::$configCache['market']->load();
}
return self::$configCache['market'];
}
public static function level($level) {
$config = self::config();
return ($config->get($config->get('level'), 0) >=
$level);
}
public static function import($type, $name, $dispatcher = null) {
$type = preg_replace('#[^A-Z0-9_\.-]#i', '', $type);
$name = preg_replace('#[^A-Z0-9_\.-]#i', '', $name);
$path = JPATH_PLUGINS.DS.$type.DS.$name.DS.$name.'.php';
$instance = false;
if(file_exists($path)) {
require_once($path);
$className = 'plg'.$type.$name;
if(class_exists($className)) {
if($dispatcher == null) {
if(defined('HIKASHOP_J40') && HIKASHOP_J40)
$dispatcher =
JFactory::getContainer()->get('dispatcher');
else
$dispatcher = JDispatcher::getInstance();
}
$instance = new $className($dispatcher, array('name' =>
$name, 'type' => $type));
}
}
return $instance;
}
public static function completeLink($link, $popup = false, $redirect =
false, $js = false) {
$namespace = HIKAMARKET_COMPONENT;
if(substr($link,0,5)=='shop.'){
$namespace = HIKASHOP_COMPONENT;
$link=substr($link,5);
}
if($popup === 'ajax') $link .= '&tmpl=raw';
else if($popup) $link .= '&tmpl=component';
$ret =
JRoute::_('index.php?option='.$namespace.'&ctrl='.$link,
!$redirect);
if(!$js)
return $ret;
if(strpos($link, '{') !== false && strpos($ret,
'{') === false)
return JURI::root(true) .
'/index.php?option='.$namespace.'&ctrl='.$link;
return str_replace('&', '&', $ret);
}
public static function table($name, $component = true) {
if( $component === true || $component === 'market' ) {
if( substr($name, 0, 5) == 'shop.' ) {
return HIKASHOP_DBPREFIX . substr($name, 5);
}
if( substr($name, 0, 7) == 'joomla.' ) {
return '#__'.substr($name, 7);
}
return HIKAMARKET_DBPREFIX . $name;
}
if( $component === 'shop' ) {
return HIKASHOP_DBPREFIX . $name;
}
return '#__'.$name;
}
public static function secureField($fieldName) {
if (!is_string($fieldName) ||
preg_match('|[^a-z0-9#_.-]|i',$fieldName) !== 0 ){
die('field "'.$fieldName .'" not
secured');
}
return $fieldName;
}
public static function limitString($string, $limit, $replacement =
'...', $tooltip = false) {
if(empty($string) || !is_string($string))
return '';
$l = strlen($string);
if($l <= $limit)
return $string;
$nbExtra = $l - $limit + strlen($replacement);
$new_string = substr($string, 0, $l - ceil(($l + $nbExtra) / 2)) .
$replacement . substr($string, floor(($l + $nbExtra) / 2));
if($tooltip)
return hikamarket::tooltip($string, '', '',
$new_string, '', 0);
return $new_string;
}
public static function getLayout($controller, $layout, $params, &$js)
{
$app = JFactory::getApplication();
$component = HIKAMARKET_COMPONENT;
$base_path = HIKAMARKET_FRONT;
if($app->isAdmin()) {
$base_path = HIKAMARKET_BACK;
}
if( substr($controller, 0, 5) == 'shop.' ) {
$controller = substr($controller, 5);
$component = HIKASHOP_COMPONENT;
$base_path = HIKASHOP_FRONT;
if($app->isAdmin()) {
$base_path = HIKASHOP_BACK;
}
}
$base_path = rtrim($base_path, DS);
$document = JFactory::getDocument();
$ctrl = new HikaShopBridgeController(array(
'name' => $controller,
'base_path' => $base_path
));
$viewType = $document->getType();
$view = $ctrl->getView('', $viewType, '',
array('base_path' => $base_path));
$folder =
$base_path.DS.'views'.DS.$view->getName().DS.'tmpl';
$view->addTemplatePath($folder);
$folder =
JPATH_BASE.DS.'templates'.DS.$app->getTemplate().DS.'html'.DS.$component.DS.$view->getName();
$view->addTemplatePath($folder);
$old = $view->setLayout($layout);
ob_start();
$view->display(null, $params);
$js = @$view->js;
if(!empty($old))
$view->setLayout($old);
return ob_get_clean();
}
public static function getPluginController($ctrl) {
if(empty($ctrl))
return false;
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikamarket');
JPluginHelper::importPlugin('hikashop');
$controllers =
$app->triggerEvent('onHikamarketPluginController',
array($ctrl));
if(empty($controllers))
return false;
foreach($controllers as $k => &$c) {
if(!is_array($c) && is_string($c))
$c = array('name' => $c);
if(empty($c['name'])) {
unset($controllers[$k]);
continue;
}
if(empty($c['type']))
$c['type'] = 'hikamarket';
}
unset($c);
if(count($controllers) > 1)
return false;
$controller = reset($controllers);
if(empty($controller['prefix']))
$controller['prefix'] = 'ctrl';
$type = preg_replace('#[^A-Z0-9_\.-]#i', '',
$controller['type']);
$name = preg_replace('#[^_A-Z0-9_\.-]#i', '',
$controller['name']);
$prefix = preg_replace('#[^_A-Z0-9]#i', '',
$controller['prefix']);
$path = JPATH_PLUGINS.DS.$type.DS.$name.DS;
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
if(!empty($controller['component']) &&
preg_match('#^com_[_a-zA-Z0-9]+$#',
$controller['component'])) {
$path =
rtrim(JPATH_SITE,DS).DS.'components'.DS.$controller['component'].DS;
$file = isset($controller['file']) ?
preg_replace('#[^A-Z0-9_\.-]#i', '',
$controller['file']) : $name;
if(JFile::exists($path.'controllers'.DS.$file.'.php')
&&
JFolder::exists($path.'views'.DS.$name.'market'.DS)) {
include_once($path.'controllers'.DS.$file.'.php');
return true;
}
}
if(!JFile::exists($path.$name.'_'.$prefix.'.php') ||
!JFolder::exists($path.'views'.DS))
return false;
include_once($path.$name.'_'.$prefix.'.php');
return true;
}
public static function getCID($field = '', $int = true) {
$res = hikaInput::get()->get('cid', array(),
'array');
if(!empty($res))
$res = reset($res);
if(empty($res) && !empty($field))
$res = hikaInput::get()->getCmd($field, 0);
if($int)
return intval($res);
return $res;
}
public static function getMenu($title = '', $tpl = null) {
$document = JFactory::getDocument();
$app = JFactory::getApplication();
$base_path = rtrim(HIKASHOP_BACK, DS);
$controller = new HikaShopBridgeController(
array(
'base_path' => $base_path,
'name' => 'menu'
)
);
$viewType = $document->getType();
$view = $controller->getView('', $viewType, '',
array('base_path' => $base_path));
$folder =
JPATH_BASE.DS.'templates'.DS.$app->getTemplate().DS.'html'.DS.HIKASHOP_COMPONENT.DS.$view->getName();
$view->addTemplatePath($folder);
$view->setLayout('default');
ob_start();
$view->display($tpl, $title);
return ob_get_clean();
}
public static function setTitle($name, $picture, $link) {
$shopConfig = hikamarket::config(false);
$menu_style = $shopConfig->get('menu_style',
'title_bottom');
if(HIKASHOP_J30) $menu_style = 'content_top';
$html = '<a class="hikamarket_title_link
hikamarket_title_j'.(int)HIKASHOP_JVERSION.'"
href="'.hikamarket::completeLink($link).'">'.$name.'</a>';
if($menu_style != 'content_top') {
$html = hikamarket::getMenu($html);
}
JToolBarHelper::title('<i class="fas
fa-'.$picture.' hika-title-icons"></i>'.$html,
' hika-hide');
$doc = JFactory::getDocument();
$app = JFactory::getApplication();
$doc->setTitle($app->getCfg('sitename'). ' - '
.JText::_('JADMINISTRATION').' - '.$name);
}
public static function footer() {
$app = JFactory::getApplication();
$config = self::config();
$shopConfig = self::config(false);
if(!$app->isAdmin() &&
$shopConfig->get('show_footer',true)=='-1') return
'';
$description =
$config->get('description_'.strtolower($config->get('level')),'Joomla!<sup>®</sup>
Ecommerce System');
$link = HIKAMARKET_URL;
$aff = $shopConfig->get('partner_id');
if(!empty($aff)){
$link.='?partner_id='.$aff;
}
$text = '<!-- HikaMarket Component powered by '.$link.'
-->'."\r\n".'<!-- version
'.$config->get('level').' :
'.$config->get('version').' -->';
if(hikaInput::get()->getInt('marketbuild',0)) $text .=
'<!-- 2007200006 -->';
if(!$shopConfig->get('show_footer',true))
return $text;
$text .= '<div class="hikamarket_footer"
style="text-align:center" align="center"><a
href="'.$link.'" target="_blank"
title="'.HIKAMARKET_NAME.' :
'.strip_tags($description).'">'.HIKAMARKET_NAME;
if($app->isAdmin()) {
$text .= ' '.$config->get('level').'
'.$config->get('version');
}
$text .= ',
'.$description.'</a></div>'."\r\n";
return $text;
}
public static function initModule() {
static $done = false;
$fe = hikaInput::get()->getInt('hikamarket_front_end_main',
0);
if($done || !empty($fe))
return true;
$done = true;
$lang = JFactory::getLanguage();
$override_path =
hikashop_getLanguagePath(JPATH_ROOT).'/overrides/'.$lang->getTag().'.override.ini';
$lang->load(HIKASHOP_COMPONENT, JPATH_SITE);
if(file_exists($override_path))
hikashop_loadTranslationFile($override_path);
return true;
}
public static function tooltip($desc, $title = '', $image =
'tooltip.png', $name = '', $href = '', $link
= 1) {
self::loadJslib('tooltip');
$desc = htmlspecialchars($desc, ENT_COMPAT, 'UTF-8');
$title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8');
if(!$name) $name = JHTML::_('image', $image,
'Tooltip', null, true);
if($href) $name = '<a href="' . $href .
'">' . $name . '</a>';
if($title) $desc =
'<strong>'.$title.'</strong><br/>'
. $desc;
return '<span data-toggle="hk-tooltip"
data-title="' . $desc . '">' . $name .
'</span>';
}
public static function cancelBtn($url = '') {
$cancel_url =
hikaInput::get()->getString('cancel_redirect');
if(!empty($cancel_url) || !empty($url)) {
$toolbar = JToolBar::getInstance('toolbar');
if(!empty($cancel_url))
$toolbar->appendButton('Link', 'cancel',
JText::_('HIKA_CANCEL'), base64_decode($cancel_url) );
else
$toolbar->appendButton('Link', 'cancel',
JText::_('HIKA_CANCEL'), $url );
} else {
JToolBarHelper::cancel();
}
}
public static function loadVendor($full = false, $reset = false) {
static $vendor = null;
$app = JFactory::getApplication();
if($reset) {
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_id',
null);
$vendor = null;
return true;
}
if(!isset($vendor)) {
$user_id = self::loadUser(false, false);
$vendor_id =
(int)$app->getUserState(HIKAMARKET_COMPONENT.'.vendor_id');
if(empty($user_id)) {
if($vendor_id != 0)
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_id',
null);
return null;
}
if($vendor_id == -1) {
$vendor = false;
return null;
}
$vendorClass = self::get('class.vendor');
if(empty($vendor_id)) {
$vendor = $vendorClass->get($user_id, 'user');
} else {
$vendor = $vendorClass->get($vendor_id);
}
if($vendor === null) {
$user = JFactory::getUser();
$administrator = $user->authorise('core.admin');
if($administrator) {
$vendor = $vendorClass->get(1);
}
}
if($vendor === null) {
$config = hikamarket::config();
$auto_registration =
(int)$config->get('allow_registration', 0);
if($auto_registration === 3) {
$shopuser = self::loadUser(true);
if(!empty($shopuser)) {
$vendor_creation = $vendorClass->onAfterUserCreate($shopuser,
true);
if(!empty($vendor_creation))
$vendor = $vendorClass->get($vendor_creation->vendor_id);
}
}
}
}
if($vendor === null || $vendor === false) {
$vendor = false;
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_id', -1);
return null;
}
$app->setUserState(HIKAMARKET_COMPONENT.'.vendor_id',
$vendor->vendor_id);
if($full)
return $vendor;
return $vendor->vendor_id;
}
public static function loginVendor() {
$vendor = self::loadVendor(true, false);
$app = JFactory::getApplication();
if($vendor === null) {
$user = JFactory::getUser();
if($user->guest) {
$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(hikamarket::currentUrl())),
false));
return false;
} else {
$app->enqueueMessage(JText::_('PLEASE_LOGIN_AS_VENDOR'));
$app->redirect('index.php');
return false;
}
} else if($vendor->vendor_id > 1 &&
$vendor->vendor_published == 0) {
$app->enqueueMessage(JText::_('VENDOR_EXPIRED'));
$app->redirect('index.php');
return false;
}
return true;
}
public static function isVendorProduct($product_id, $vendor_id = -1) {
static $vendorProductCache = array();
if($vendor_id === null || $vendor_id == -1) {
$vendor_id = self::loadVendor(false, false);
if($vendor_id == null)
return false;
}
if(!empty($vendor_id) && (int)$vendor_id == 0)
return false;
if(!empty($product_id) && (int)$product_id <= 0)
return false;
if($vendor_id == 1)
return true;
if((int)$vendor_id > 1 && (int)$product_id > 0) {
if(empty($vendorProductCache[$vendor_id]))
$vendorProductCache[$vendor_id] = array();
if(isset($vendorProductCache[$vendor_id][$product_id]))
return $vendorProductCache[$vendor_id][$product_id];
$db = JFactory::getDBO();
$query = 'SELECT count(pr.product_id) '.
' FROM ' . hikamarket::table('shop.product') .
' AS pr '.
' LEFT JOIN ' . hikamarket::table('shop.product')
. ' AS pa ON (pr.product_type = ' .
$db->Quote('variant') . ' AND pa.product_id =
pr.product_parent_id) '.
' WHERE pr.product_id = '. (int)$product_id . ' AND
(pr.product_vendor_id = ' . (int)$vendor_id . ' OR
(pr.product_vendor_id = 0 AND pa.product_vendor_id = ' .
(int)$vendor_id . '))';
$db->setQuery($query);
$vendorProductCache[$vendor_id][$product_id] =
((int)$db->loadResult() == 1);
return $vendorProductCache[$vendor_id][$product_id];
}
return true;
}
public static function isVendorCategory($category_id, $vendor_id = -1,
$check_extra_categories = false) {
static $vendorCategoryCache = array();
if($vendor_id === null || $vendor_id == -1) {
$vendor_id = self::loadVendor(false, false);
if($vendor_id == null)
return false;
} else
$vendor_id = (int)$vendor_id;
if(!empty($vendor_id) && (int)$vendor_id == 0)
return false;
if(!empty($category_id) && (int)$category_id <= 0)
return false;
if($vendor_id == 1)
return true;
$config = hikamarket::config();
$vendor_chroot_category =
(int)$config->get('vendor_chroot_category', 0);
$chroot_category = (int)$config->get('vendor_root_category',
0);
if($vendor_id > 1 && $category_id == 0)
return ( ($vendor_chroot_category == 0) || ($vendor_chroot_category == 2
&& ($chroot_category == 0 || $chroot_category == 1)) );
if($vendor_id > 1 && $category_id > 0) {
if($vendor_chroot_category == 0)
return true;
$db = JFactory::getDBO();
if(!in_array($vendor_chroot_category, array(1,2)))
return false;
if(empty($vendorCategoryCache[$vendor_id]))
$vendorCategoryCache[$vendor_id] = array();
$keyCategory = (int)$category_id;
if($check_extra_categories)
$keyCategory .= 'ex';
if(isset($vendorCategoryCache[$vendor_id][$keyCategory]))
return $vendorCategoryCache[$vendor_id][$keyCategory];
$extra_categories = array();
if($check_extra_categories) {
$vendorClass = self::get('class.vendor');
$vendor = self::loadVendor(true, false);
$extra_categories = $vendorClass->getExtraCategories($vendor);
if(!empty($extra_categories)) {
if($vendor_chroot_category == 2)
$extra_categories = array_merge(array((int)$chroot_category),
$extra_categories);
hikamarket::toInteger($extra_categories);
}
}
$query = 'SELECT cat.category_id '.
' FROM '.hikamarket::table('shop.category').'
AS cat '.
' INNER JOIN
'.hikamarket::table('shop.category').' AS rootcat ON
(cat.category_left >= rootcat.category_left AND cat.category_right <=
rootcat.category_right) '.
' WHERE cat.category_id = ' . (int)$category_id;
if($vendor_chroot_category == 1) {
if(empty($extra_categories))
$query .= ' AND rootcat.category_namekey = '.
$db->Quote('vendor_'.$vendor_id);
else
$query .= ' AND (rootcat.category_namekey = '.
$db->Quote('vendor_'.$vendor_id) . ' OR
rootcat.category_id IN ('.implode(',',
$extra_categories).'))';
} else if($vendor_chroot_category == 2) {
if(empty($extra_categories))
$query .= ' AND rootcat.category_id = ' .
(int)$chroot_category;
else
$query .= ' AND rootcat.category_id IN (' .
implode(',', $extra_categories) . ')';
}
$db->setQuery($query);
$ret = $db->loadResult();
$vendorCategoryCache[$vendor_id][$keyCategory] = !empty($ret);
return $vendorCategoryCache[$vendor_id][$keyCategory];
}
return true;
}
public static function isVendorOrder($order_id, $vendor_id = -1) {
static $vendorOrderCache = array();
if($vendor_id === null || $vendor_id == -1) {
$vendor_id = self::loadVendor(false, false);
if($vendor_id == null)
return false;
} else
$vendor_id = (int)$vendor_id;
if(!empty($vendor_id) && (int)$vendor_id == 0)
return false;
if(!empty($order_id) && (int)$order_id <= 0)
return false;
if($vendor_id == 1)
return true;
if($vendor_id > 1 && $order_id > 0) {
if(empty($vendorOrderCache[$vendor_id]))
$vendorOrderCache[$vendor_id] = array();
if(isset($vendorOrderCache[$vendor_id][$order_id]))
return $vendorOrderCache[$vendor_id][$order_id];
$db = JFactory::getDBO();
$query = 'SELECT count(hko.order_id) FROM ' .
hikamarket::table('shop.order') . ' AS hko '.
' WHERE hko.order_type IN
(\'sale\',\'subsale\') AND hko.order_id = '.
(int)$order_id . ' AND hko.order_vendor_id = ' .
(int)$vendor_id;
$db->setQuery($query);
$vendorOrderCache[$vendor_id][$order_id] = ((int)$db->loadResult() ==
1);
return $vendorOrderCache[$vendor_id][$order_id];
}
return true;
}
public static function isEditableOrder($order_id) {
static $editableOrderCache = array();
if((int)$order_id <= 0)
return false;
if(isset($editableOrderCache[$order_id]))
return $editableOrderCache[$order_id];
$db = JFactory::getDBO();
$query = 'SELECT o.order_type, COUNT(DISTINCT op.order_vendor_id) as
vendor_count '.
' FROM ' . hikamarket::table('shop.order') . '
AS o '.
' LEFT JOIN ' . hikamarket::table('shop.order') .
' AS op ON (o.order_parent_id > 0 AND o.order_parent_id =
op.order_parent_id AND op.order_type = ' .
$db->Quote('subsale') . ') ' .
' WHERE (o.order_id = ' . (int)$order_id . ')';
$db->setQuery($query);
$ret = $db->loadObject();
$editableOrderCache[$order_id] = ((int)$ret->vendor_count == 1 ||
$ret->order_type == 'sale');
return $editableOrderCache[$order_id];
}
public static function isVendorDiscount($discount_id, $vendor_id = -1) {
static $vendorDiscountCache = array();
if($vendor_id === null || $vendor_id == -1) {
$vendor_id = self::loadVendor(false, false);
if($vendor_id == null)
return false;
} else
$vendor_id = (int)$vendor_id;
if(!empty($vendor_id) && (int)$vendor_id == 0)
return false;
if(!empty($discount_id) && (int)$discount_id <= 0)
return false;
if($vendor_id == 1)
return true;
if($vendor_id > 1 && $discount_id > 0) {
if(empty($vendorDiscountCache[$vendor_id]))
$vendorDiscountCache[$vendor_id] = array();
if(isset($vendorDiscountCache[$vendor_id][$discount_id]))
return $vendorDiscountCache[$vendor_id][$discount_id];
$db = JFactory::getDBO();
$query = 'SELECT count(a.discount_id) FROM ' .
hikamarket::table('shop.discount') . ' AS a WHERE
a.discount_id = '. (int)$discount_id . ' AND
a.discount_target_vendor = ' . (int)$vendor_id;
$db->setQuery($query);
$vendorDiscountCache[$vendor_id][$discount_id] =
((int)$db->loadResult() == 1);
return $vendorDiscountCache[$vendor_id][$discount_id];
}
return true;
}
public static function isVendorCharacteristic($characteristic_id,
$characteristic_parent = 0, $vendor_id = -1) {
static $vendorCharacteristicCache = array();
if($vendor_id === null || $vendor_id == -1) {
$vendor_id = self::loadVendor(false, false);
if($vendor_id == null)
return false;
} else
$vendor_id = (int)$vendor_id;
if(!empty($vendor_id) && (int)$vendor_id == 0)
return false;
if(!empty($characteristic_id) && (int)$characteristic_id <=
0)
return false;
if(empty($vendorCharacteristicCache[$vendor_id]))
$vendorCharacteristicCache[$vendor_id] = array();
if(isset($vendorCharacteristicCache[$vendor_id][$characteristic_id]))
return $vendorCharacteristicCache[$vendor_id][$characteristic_id];
$characteristic_parent = (int)$characteristic_parent;
if((int)$characteristic_parent > 0) {
$r = self::isVendorCharacteristic($characteristic_parent, 0,
$vendor_id);
if(!$r)
$r = self::isVendorCharacteristic($characteristic_parent, 0, 1);
if(!$r) {
$vendorCharacteristicCache[$vendor_id][$characteristic_id] = false;
return false;
}
}
$vendor_ids = array((int)$vendor_id);
if($vendor_id == 1)
$vendor_ids[] = 0;
$db = JFactory::getDBO();
$query = 'SELECT count(c.characteristic_id) FROM ' .
hikamarket::table('shop.characteristic') . ' AS c '.
' WHERE c.characteristic_id = '. (int)$characteristic_id .
' AND c.characteristic_parent_id = ' .
(int)$characteristic_parent .
' AND c.characteristic_vendor_id IN (' .
implode(',', $vendor_ids) . ')';
$db->setQuery($query);
$vendorCharacteristicCache[$vendor_id][$characteristic_id] =
((int)$db->loadResult() == 1);
return $vendorCharacteristicCache[$vendor_id][$characteristic_id];
}
public static function isVendorPlugin($plugin_id, $plugin_type =
'', $vendor_id = -1) {
static $vendorPluginCache = array();
if(empty($plugin_type))
return false;
if($vendor_id === null || $vendor_id == -1) {
$vendor_id = self::loadVendor(false, false);
if($vendor_id == null)
return false;
} else
$vendor_id = (int)$vendor_id;
if(!empty($vendor_id) && (int)$vendor_id == 0)
return false;
if(!empty($plugin_id) && (int)$plugin_id <= 0)
return false;
if($vendor_id == 1)
return true;
$plugin_id = (int)$plugin_id;
$config = self::config();
$plugin_vendor_config =
(int)$config->get('plugin_vendor_config', 0);
if($plugin_vendor_config == 0)
return false;
if(empty($vendorPluginCache[$vendor_id]))
$vendorPluginCache[$vendor_id] = array();
if(empty($vendorPluginCache[$vendor_id][$plugin_type]))
$vendorPluginCache[$vendor_id][$plugin_type] = array();
$types = array(
'plugin' => array(
'id' => 'plugin_id',
'table' => 'shop.plugin',
'key' => 'plugin_vendor_id'
),
'payment' => array(
'id' => 'payment_id',
'table' => 'shop.payment',
'key' => 'payment_vendor_id'
),
'shipping' => array(
'id' => 'shipping_id',
'table' => 'shop.shipping',
'key' => 'shipping_vendor_id'
)
);
if(empty($types[$plugin_type]))
return false;
$p = $types[$plugin_type];
if(isset($vendorPluginCache[$vendor_id][$plugin_type][$plugin_id]))
return $vendorPluginCache[$vendor_id][$plugin_type][$plugin_id];
if($plugin_vendor_config == 1) {
$db = JFactory::getDBO();
$query = 'SELECT count(p.'.$p['id'].') FROM
' . hikamarket::table($p['table']) . ' AS p '.
' WHERE p.'.$p['id'].' = ' .
(int)$plugin_id . ' AND p.'.$p['key'].' = ' .
(int)$vendor_id;
$db->setQuery($query);
$vendorPluginCache[$vendor_id][$plugin_type][$plugin_id] =
((int)$db->loadResult() == 1);
return $vendorPluginCache[$vendor_id][$plugin_type][$plugin_id];
}
return false;
}
public static function isVendorCustomer($customer_id, $vendor_id = -1) {
static $vendorCustomerCache = array();
if($vendor_id === null || $vendor_id == -1) {
$vendor_id = self::loadVendor(false, false);
if($vendor_id == null)
return false;
} else
$vendor_id = (int)$vendor_id;
if(!empty($vendor_id) && (int)$vendor_id == 0)
return false;
if(!empty($customer_id) && (int)$customer_id <= 0)
return false;
if($vendor_id == 1)
return true;
if($vendor_id > 1 && $customer_id > 0) {
if(empty($vendorCustomerCache[$vendor_id]))
$vendorCustomerCache[$vendor_id] = array();
if(isset($vendorCustomerCache[$vendor_id][$customer_id]))
return $vendorCustomerCache[$vendor_id][$customer_id];
$db = JFactory::getDBO();
$query = 'SELECT count(cv.customer_id) FROM ' .
hikamarket::table('customer_vendor') . ' AS cv WHERE
cv.customer_id = '. (int)$customer_id . ' AND cv.vendor_id =
' . (int)$vendor_id;
$db->setQuery($query);
$vendorCustomerCache[$vendor_id][$customer_id] =
((int)$db->loadResult() == 1);
return $vendorCustomerCache[$vendor_id][$customer_id];
}
return true;
}
public static function getCartVendors() {
static $currentCart = null;
if($currentCart == null) {
$cartClass = hikamarket::get('shop.class.cart');
$currentCart = $cartClass->loadFullCart(true);
}
if(empty($currentCart->products))
return null;
$vendors = array();
foreach($currentCart->products as $product) {
$p = (int)@$product->product_vendor_id;
if($p == 1)
$p = 0;
$vendors[$p] = $p;
}
if(count($vendors) == 1)
return reset($vendors);
return $vendors;
}
public static function acl($action) {
$action = strtolower($action);
$user_access = self::getAclUser(null);
if($user_access === false)
return false;
$vendor_access = self::getAclVendor(null);
if($vendor_access === false)
return false;
if(strpos($action, '/') === false)
$action = str_replace('_', '/', $action);
$ret = false;
if(!empty($user_access)) {
$ret = self::aclTest($action, $user_access);
if($ret === false)
return false;
}
$vendor_ret = self::aclTest($action, $vendor_access);
if($vendor_ret === false)
return false;
if($ret === 1 && $vendor_ret !== -1)
return true;
if($ret === -1 && $vendor_ret !== -1)
return true;
if($vendor_ret)
return true;
return false;
}
public static function aclOr($actions) {
if(!is_array($actions) || empty($actions) || self::getAclUser(null) ===
false || self::getAclVendor(null) === false)
return false;
foreach($actions as $action) {
$r = self::acl($action);
if($r === true)
return true;
}
return false;
}
public static function aclAnd($actions) {
if(!is_array($actions) || empty($actions) || self::getAclUser(null) ===
false || self::getAclVendor(null) === false)
return false;
foreach($actions as $action) {
$r = self::acl($action);
if($r === false)
return false;
}
return true;
}
public static function getAclUser($user = null) {
if($user === null)
$user = self::loadUser(true, false);
if(!empty($user) && is_int($user) && (int)$user > 0)
{
$userClass = self::get('shop.class.user');
$user = $userClass->get( (int)$user );
if(empty($user))
$user = null;
}
if($user === null)
return false;
static $user_accesses = array();
$user_access = array();
if(isset($user_accesses[(int)$user->user_id]))
$user_access = $user_accesses[(int)$user->user_id];
if(!empty($user_access))
return $user_access;
if(!empty($user->user_vendor_access)) {
if($user->user_vendor_access == 'all')
$user->user_vendor_access = '*';
if(!empty($user->user_vendor_access) &&
strpos($user->user_vendor_access, '/') === false) // Compat
$user->user_vendor_access = str_replace('_',
'/', $user->user_vendor_access);
$user_access = explode(',',
trim(strtolower($user->user_vendor_access), ','));
sort($user_access, SORT_STRING);
}
$user_accesses[(int)$user->user_id] = $user_access;
return $user_access;
}
public static function getAclVendor($vendor = null) {
if($vendor === null)
$vendor = self::loadVendor(true, false);
if(!empty($vendor) && is_int($vendor) && (int)$vendor
> 0) {
$vendorClass = self::get('class.vendor');
$vendor = $vendorClass->get( (int)$vendor );
if(empty($vendor))
$vendor = null;
}
if($vendor === null)
return false;
static $vendor_accesses = array();
$vendor_access = array();
if(isset($vendor_accesses[(int)$vendor->vendor_id]))
$vendor_access = $vendor_accesses[(int)$vendor->vendor_id];
if(!empty($vendor_access))
return $vendor_access;
if(!empty($vendor->vendor_access)) {
if($vendor->vendor_access == 'all')
$vendor->vendor_access = '*';
if(is_string($vendor->vendor_access)) {
if(!empty($vendor->vendor_access) &&
strpos($vendor->vendor_access, '/') === false) // ACL Compat
$vendor->vendor_access = str_replace('_', '/',
$vendor->vendor_access);
$vendor_access = explode(',',
trim(strtolower($vendor->vendor_access), ','));
} else {
$vendor->vendor_access = implode(',',
$vendor->vendor_access);
if(!empty($vendor->vendor_access) &&
strpos($vendor->vendor_access, '/') === false) // ACL Compat
$vendor->vendor_access = str_replace('_', '/',
$vendor->vendor_access);
$vendor_access = explode(',',
trim(strtolower($vendor->vendor_access), ','));
}
sort($vendor_access, SORT_STRING);
if(reset($vendor_access) == '@0')
$vendor_access[] = array_shift($vendor_access);
if(strpos($vendor->vendor_access, '@') !== false) {
$config = self::config();
$joomla_acl = self::get('type.joomla_acl');
$gs = $joomla_acl->getList();
$groups = array();
foreach($gs as $g) {
$groups[$g->id] = $g;
}
unset($gs);
$vendor_extra_access = array();
foreach($vendor_access as $k => $ax) {
if(substr($ax,0,1) != '@')
continue;
unset($vendor_access[$k]);
$ax_id = (int)substr($ax,1);
if($ax_id == 0) {
$default_access = $config->get('store_default_access',
'all');
if($default_access == 'all') $default_access =
'*';
if(!empty($default_access) && strpos($default_access,
'/') === false) // ACL Compat
$default_access = str_replace('_', '/',
$default_access);
$accesses = explode(',', trim(strtolower($default_access),
','));
sort($accesses, SORT_STRING);
$vendor_extra_access = array_merge($vendor_extra_access, $accesses);
} else {
$group = (isset($groups[$ax_id])) ? $group = $groups[$ax_id] : null;
while(!empty($group)) {
$default_access =
$config->get('vendor_acl_'.$group->id, '');
if(!empty($default_access) && strpos($default_access,
'/') === false) // ACL Compat
$default_access = str_replace('_', '/',
$default_access);
$accesses = explode(',', trim(strtolower($default_access),
','));
sort($accesses, SORT_STRING);
array_push($vendor_extra_access, '-');
$vendor_extra_access = array_merge($vendor_extra_access,
$accesses);
$group = (isset($groups[$group->parent_id])) ? $group =
$groups[$group->parent_id] : null;
}
}
}
$vendor_access = array_merge($vendor_access, $vendor_extra_access);
}
} else {
$config = self::config();
$default_access = $config->get('store_default_access',
'all');
if($default_access == 'all')
$default_access = '*';
if(!empty($default_access) && strpos($default_access,
'/') === false) // ACL Compat
$default_access = str_replace('_', '/',
$default_access);
$vendor_access = explode(',',
trim(strtolower($default_access), ','));
sort($vendor_access, SORT_STRING);
}
$vendor_accesses[(int)$vendor->vendor_id] = $vendor_access;
return $vendor_access;
}
public static function aclTest($action, $access) {
$ret = false;
$actlen = strlen($action);
if(is_string($access)) {
$access = explode(',', trim(strtolower($access),
','));
sort($access, SORT_STRING);
}
if(empty($access))
$access = array();
$me = 0;
$parentInc = false; $parentBan = false;
$childInc = false; $childBan = false;
foreach($access as $a) {
if($a == '-' && ($me != 0 || $parentBan ||
$parentInc))
break;
if($a == '*') { $ret = true; continue; }
if($a == '!') { $ret = false; continue; }
if($a == $action) { $me = 1; continue; }
if($a == ('!'.$action)) { $me = -1; continue; }
$l = strlen($a);
if((!$childInc || $childInc > $actlen) &&
substr_compare($action, $a, 0, $actlen) == 0) { $childInc = $actlen;
continue; }
if((!$childBan || $childBan > $actlen) &&
substr_compare('!'.$action, $a, 0, $actlen + 1) == 0) { $childBan
= $actlen; continue; }
if($l > 0) {
if((!$parentInc || $parentInc < $l) && substr_compare($a,
$action, 0, $l) == 0) { $parentInc = $l; continue; }
if((!$parentBan || $parentBan < $l) && substr_compare($a,
'!'.$action, 0, $l) == 0) { $parentBan = $l - 1; continue; }
}
}
if($me == 1) {
$ret = true;
} else if($me == -1) {
$ret = false;
} else if($parentBan || $parentInc) {
if($parentBan && $parentInc) {
$ret = ($parentInc > $parentBan);
} else if($parentBan)
$ret = false;
else
$ret = true;
}
if($ret && $childBan) { $ret = 1; }
if(!$ret && $childInc) { $ret = -1; }
return $ret;
}
public static function addACLFilters(&$filters, $field, $table =
'', $type = 'user', $allowNull = false, $target_id = 0)
{
if($type == 'user')
return hikashop_addACLFilters($filters, $field, $table, 2, $allowNull,
$target_id);
if(empty($target_id) || (int)$target_id == 0) {
$vendor = self::loadVendor(true);
} else {
$vendorClass = self::get('class.vendor');
$vendor = $vendorClass->get($target_id);
}
if(empty($vendor) || empty($vendor->vendor_access))
return;
if(!empty($table))
$table.='.';
$acl_filters = array($table . $field . " = 'all'");
$vendor_access = explode(',', $vendor->vendor_access);
foreach($vendor_access as $access) {
if(substr($access, 0, 1) == '@') {
$acl_filters[] = $table . $field . " LIKE '%," .
(int)substr($access, 1) . ",%'";
}
}
unset($vendor_access);
if($allowNull)
$acl_filters[] = 'ISNULL(' . $table . $field . ')';
$filters[] = '(' . implode(' OR ', $acl_filters) .
')';
}
public static function deny($redirect = '', $msg = '',
$type = '', $tmpl = '') {
if(empty($msg))
$msg = JText::_('HIKAM_PAGE_DENY');
if(empty($type))
$type = 'error';
if(empty($tmpl))
$tmpl = hikaInput::get()->getString('tmpl', '');
if($tmpl == 'json') {
ob_end_clean();
echo '{err:"' . str_replace(array('\\',
'"'), array('\\\\', '\\"'), $msg) .
'"}';
exit;
}
$app = JFactory::getApplication();
$app->enqueueMessage($msg, $type);
if(empty($redirect)) {
if($tmpl == 'component') {
$app->redirect('index.php?tmpl=component');
}
$app->redirect('index.php');
return false;
}
if($tmpl == 'component') {
$app->redirect(hikamarket::completeLink($redirect, true, true));
}
$app->redirect(hikamarket::completeLink($redirect, false, true));
return false;
}
public static function getFormToken() {
static $token = null;
if($token == null) {
if(HIKASHOP_J30)
$token = JSession::getFormToken();
else
$token = JUtility::getToken();
}
return $token;
}
public static function loadJslib($name) {
static $marketLibs = array();
$doc = JFactory::getDocument();
$name = strtolower($name);
if(isset($marketLibs[$name]))
return $marketLibs[$name];
$ret = true;
switch($name) {
case 'otree':
$doc->addScript(HIKAMARKET_JS.'otree.js?v='.HIKAMARKET_RESSOURCE_VERSION);
$doc->addStyleSheet(HIKAMARKET_CSS.'otree.css?v='.HIKAMARKET_RESSOURCE_VERSION);
$ret = true;
break;
case 'leaflet':
$doc->addScript(HIKAMARKET_JS.'leaflet.js?v='.HIKAMARKET_RESSOURCE_VERSION);
$doc->addStyleSheet(HIKAMARKET_CSS.'leaflet.css?v='.HIKAMARKET_RESSOURCE_VERSION);
$ret = true;
break;
default:
$ret = false;
break;
}
if(!$ret)
$ret = hikashop_loadJslib($name);
$marketLibs[$name] = $ret;
return $ret;
}
public static function orderStatus($order_status) {
$order_upper = HikaStringHelper::strtoupper(trim($order_status));
$order_upper = str_replace(array('
','(',')','[',']','=','"','\''),
'_', $order_upper);
$tmp = 'ORDER_STATUS_' . $order_upper;
$ret = JText::_($tmp);
if($ret != $tmp)
return $ret;
$ret = JText::_($order_upper);
if($ret != $order_upper)
return $ret;
return $order_status;
}
public static function cloning(&$object) {
if(is_array($object)) {
$ret = array();
foreach($object as $k => $v) {
$ret[$k] = self::cloning($v);
}
return $ret;
}
if(is_object($object)) {
$ret = new stdClass();
foreach(get_object_vars($object) as $k => $v) {
$ret->$k = self::cloning($v);
}
return $ret;
}
return $object;
}
public static function headerNoCache() {
if(headers_sent())
return false;
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
return true;
}
public static function addUserACLFilters(&$filters, $field, $table =
'', $level = 2, $allowNull = false, $user_id = 0) {
if(!empty($level) && !hikashop_level($level))
return;
if(empty($user_id) || (int)$user_id == 0) {
$my = JFactory::getUser();
} else {
$userClass = self::get('shop.class.user');
$hkUser = $userClass->get($user_id);
$my = JFactory::getUser($hkUser->user_cms_id);
}
jimport('joomla.access.access');
$config = self::config(false);
$userGroups = JAccess::getGroupsByUser($my->id,
(bool)$config->get('inherit_parent_group_access'));
//$my->authorisedLevels();
if(!empty($userGroups)) {
if(!empty($table))
$table .= '.';
$acl_filters = array($table . $field . ' =
\'all\'');
foreach($userGroups as $userGroup) {
$acl_filters[] = $table . $field . ' LIKE \'%,' .
(int)$userGroup . ',%\'';
}
if($allowNull)
$acl_filters[] = 'ISNULL(' . $table . $field .
')';
$filters[] = '(' . implode(' OR ', $acl_filters) .
')';
}
}
public static function addVendorACLFilters(&$filters, $field, $table =
'', $level = 1, $allowNull = false, $vendor_id = 0) {
if(!empty($level) && !hikamarket::level($level))
return;
if(empty($vendor_id) || (int)$vendor_id == 0) {
$vendor = self::loadVendor(true);
} else {
$vendorClass = self::get('class.vendor');
$vendor = $vendorClass->get($vendor_id);
}
if(empty($vendor))
return;
$vendorGroups = array();
$vendor_access = explode(',',
trim(strtolower($vendor->vendor_access), ','));
foreach($vendor_access as $access) {
if(substr($access, 0, 1) == '@')
$vendorGroups[] = (int)substr($access, 1);
}
if(!empty($table))
$table .= '.';
$acl_filters = array($table . $field . ' =
\'all\'');
foreach($vendorGroups as $vendorGroup) {
$acl_filters[] = $table . $field . ' LIKE \'%,' .
(int)$vendorGroup . ',%\'';
}
if($allowNull)
$acl_filters[] = 'ISNULL(' . $table . $field . ')';
$filters[] = '(' . implode(' OR ', $acl_filters) .
')';
}
public static function getProductEditionUrl($product_id, $parameters =
'') {
$config = self::config();
$edition_itemid = (int)$config->get('edition_default_menu',
0);
if(empty($edition_itemid))
$edition_itemid = (int)$config->get('vendor_default_menu',
0);
$url_itemid = (!empty($edition_itemid)) ?
'&Itemid='.$edition_itemid : '';
if(!empty($parameters))
$parameters = '&' . $parameters;
switch($config->get('product_edit_cancel_url',
'')) {
case 'product':
return
hikamarket::completeLink('product&task=edit&cancel_action=product&cid='
. $product_id . $parameters . $url_itemid);
case 'current_url':
$current_url = base64_encode(hikamarket::currentUrl());
return
hikamarket::completeLink('product&task=edit&cancel_action=url&cid='
. $product_id . $parameters . '&cancel_url=' . $current_url .
$url_itemid);
case 'listing':
return
hikamarket::completeLink('product&task=edit&cid=' .
$product_id . $parameters . $url_itemid);
}
return
hikamarket::completeLink('product&task=edit&cancel_action=product&cid='
. $product_id . $parameters . $url_itemid);
}
public static function toInteger(&$array) {
if(is_array($array))
$array = array_map('intval', $array);
else
$array = array();
}
public static function loadUser($full = false, $reset = false) {
return hikashop_loadUser($full, $reset);
}
public static function isAllowed($allowedGroups, $id = null, $type =
'user') {
return hikashop_isAllowed($allowedGroups, $id, $type);
}
public static function display($messages, $type = 'success',
$return = false, $close = true) {
return hikashop_display($messages, $type, $return, $close);
}
public static function createDir($dir, $report = true) {
return hikashop_createDir($dir, $report);
}
public static function search($searchString, $object, $exclude =
'') {
static $displaySearch = null;
if($displaySearch === null) {
$app = JFactory::getApplication();
if($app->isAdmin()) {
$displaySearch = true;
} else {
$config = self::config();
$displaySearch = $config->get('display_search', true);
}
}
if(empty($displaySearch))
return $object;
return hikashop_search($searchString, $object, $exclude);
}
public static function getDate($time = 0, $format = '%d %B %Y
%H:%M') {
return hikashop_getDate($time, $format);
}
public static function currentUrl($checkInRequest = '') {
return hikashop_currentUrl($checkInRequest);
}
public static function increasePerf() {
return hikashop_increasePerf();
}
public static function cleanBuffers() {
return hikashop_cleanBuffers();
}
public static function encodeNumber(&$data, $type = 'order',
$format = '') {
return hikashop_encode($data, $type, $format);
}
public static function toFloat($val) {
return hikashop_toFloat($val);
}
public static function getTime($date) {
return hikashop_getTime($date);
}
public static function getCurrency() {
return hikashop_getCurrency();
}
public static function getZone($type = 'shipping') {
return hikashop_getZone($type);
}
public static function getEscaped($text, $extra = false) {
return hikashop_getEscaped($text, $extra);
}
public static function cleanUrl($url, $forceInternURL = false) {
return hikashop_cleanUrl($url, $forceInternURL);
}
public static function absoluteUrl($text) {
return hikashop_absoluteUrl($text);
}
public static function setPageTitle($title) {
return hikashop_setPageTitle($title);
}
public static function disallowUrlRedirect($url) {
return hikashop_disallowUrlRedirect($url);
}
public static function unserialize($data) {
if(!is_string($data))
return false;
if(!preg_match_all('#[OC]:[0-9]+:"([-_a-zA-Z0-9]+)":[0-9]+:\{#iU',
$data, $matches))
return unserialize($data);
if(!empty($matches[1])) {
foreach($matches[1] as $m) {
if($m != 'stdClass')
return false;
}
}
return unserialize($data);
}
}
class hikamarketController extends hikashopBridgeController {
protected $type = '';
protected $publish_return_view = 'listing';
protected $rights = array(
'display' => array(),
'add' => array(),
'edit' => array(),
'modify' => array(),
'delete' => array()
);
protected $pluginCtrl = null;
protected $default_task = 'listing';
public function __construct($config = array(), $skip = false) {
if($skip)
return;
if(!empty($this->pluginCtrl)) {
$config['base_path'] =
JPATH_PLUGINS.DS.$this->pluginCtrl[0].DS.$this->pluginCtrl[1].DS;
}
parent::__construct($config);
$this->registerDefaultTask($this->default_task);
}
protected function renderingLayout($name = '', $options =
array()) {
if(empty($name)) return false;
if(!empty($options) && isset($options['hidemainmenu']))
{
hikaInput::get()->set('hidemainmenu', 1);
}
hikaInput::get()->set('layout', $name);
return $this->display();
}
public function listing() {
return $this->renderingLayout('listing');
}
public function show() {
return $this->renderingLayout('show');
}
public function edit() {
return $this->renderingLayout('form',
array('hidemainmenu' => 1));
}
public function add() {
return $this->renderingLayout('form',
array('hidemainmenu' => 1));
}
public function apply() {
$status = $this->store();
return $this->edit();
}
public function save() {
$this->store();
return $this->listing();
}
public function store() {
return false;
}
protected function adminStore($token = false) {
$app = JFactory::getApplication();
if($token) {
JSession::checkToken() || die('Invalid Token');
}
if(empty($this->type))
return false;
$class = hikamarket::get('class.'.$this->type);
if( $class === null )
return false;
$status = $class->saveForm();
if($status) {
$app->enqueueMessage(JText::_('HIKAM_SUCC_SAVED'),
'message');
hikaInput::get()->set('cid', $status);
hikaInput::get()->set('fail', null);
} else {
$app->enqueueMessage(JText::_('ERROR_SAVING'),
'error');
if(!empty($class->errors)) {
foreach($class->errors as $err) {
$app->enqueueMessage($err, 'error');
}
}
}
return $status;
}
protected function adminRemove() {
JSession::checkToken() || die('Invalid Token');
$cids = hikaInput::get()->get('cid', array(),
'array');
$class = hikamarket::get('class.'.$this->type);
$num = $class->delete($cids);
if($num) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::sprintf('SUCC_DELETE_ELEMENTS',
count($cids)), 'message');
}
return $this->listing();
}
public function publish() {
$cid = hikaInput::get()->post->get('cid', array(),
'array');
hikamarket::toInteger($cid);
return $this->toggle($cid,1);
}
public function unpublish() {
$cid = hikaInput::get()->post->get('cid', array(),
'array');
hikamarket::toInteger($cid);
return $this->toggle($cid,0);
}
public function display($tpl = null, $params = null) {
if(HIKASHOP_J30) {
$document = JFactory::getDocument();
$view = $this->getView('', $document->getType(),
'', array('base_path' => $this->basePath));
if($view->getLayout() == 'default' &&
hikaInput::get()->getString('layout', '') !=
'')
$view->setLayout(hikaInput::get()->getString('layout'));
}
$shopConfig = hikamarket::config(false);
$menu_style = $shopConfig->get('menu_style',
'title_bottom');
if(HIKASHOP_J30) $menu_style = 'content_top';
if($menu_style == 'content_top') {
$app = JFactory::getApplication();
if($app->isAdmin() &&
hikaInput::get()->getString('tmpl') !== 'component')
{
echo hikamarket::getMenu();
}
}
return parent::display($tpl, $params);
}
private function toggle($cid, $publish) {
if(empty($cid)) {
throw new RuntimeException('No items selected', 500);
return;
}
if(isset($this->dispatch) && in_array($this->dispatch,
'toggle') ) {
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikamarket');
$unset = array();
$objs = array();
foreach($cid as $k => $id){
$element = new stdClass();
$name = reset($this->toggle);
$element->$name = $id;
$publish_name = key($this->toggle);
$element->$publish_name = (int)$publish;
$do = true;
$app->triggerEvent('onBefore'.ucfirst($this->type).'Update',
array(&$element, &$do));
if(!$do) {
$unset[] = $k;
} else {
$objs[$k] = &$element;
}
}
if(!empty($unset)) {
foreach($unset as $u) {
unset($cid[$u]);
}
}
}
$cids = implode(',', $cid);
$db = JFactory::getDBO();
$query = 'UPDATE '.hikamarket::table($this->type).' SET
'.key($this->toggle).' = '.(int)$publish.' WHERE
'.reset($this->toggle).' IN ( '.$cids.' )';
$db->setQuery($query);
if(!$db->execute()) {
throw new RuntimeException($db->getErrorMsg(), 500);
return;
} elseif(isset($this->dispatch) &&
in_array($this->dispatch, 'toggle')) {
if(!empty($objs)) {
foreach($objs as $element) {
$app->triggerEvent('onAfter'.ucfirst($this->type).'Update',
array(&$element));
}
}
}
$task = $this->publish_return_view;
return $this->$task();
}
public function getModel($name = '', $prefix = '',
$config = array(),$do = false) {
if($do) return parent::getModel($name, $prefix , $config);
return false;
}
public function execute($task) {
if(HIKASHOP_J30) {
if(empty($task))
$task = @$this->taskMap['__default'];
if(!empty($task) && !$this->authorize($task)) {
throw new
JAccessExceptionNotallowed(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'),
403);
}
}
return parent::execute($task);
}
public function authorize($task) {
if($this->isIn($task, array('modify','delete')))
{
if(JSession::checkToken('request')) {
return true;
}
return false;
}
return $this->isIn($task);
}
public function authorise($task) {
return $this->authorize($task);
}
public function isIn($task, $lists = array('*')) {
if(!is_array($lists)) {
$lists = array($lists);
}
$task = strtolower($task);
foreach($lists as $list) {
if($list == '*') {
foreach($this->rights as $rights) {
if(!empty($rights) && in_array($task, $rights)) {
return true;
}
}
} elseif(!empty($this->rights[$list]) && in_array($task,
$this->rights[$list])) {
return true;
}
}
return false;
}
protected function saveorder() {
if(empty($this->ordering)) {
return $this->listing();
}
if(!empty($this->ordering['table']) &&
!empty($this->ordering['pkey']) &&
(empty($this->ordering['groupMap']) ||
isset($this->ordering['groupVal'])) &&
!empty($this->ordering['orderingMap'])) {
$orderClass = hikamarket::get('shop.helper.order');
$orderClass->pkey = $this->ordering['pkey'];
$orderClass->table = $this->ordering['table'];
$orderClass->groupMap = $this->ordering['groupMap'];
$orderClass->groupVal = $this->ordering['groupVal'];
$orderClass->orderingMap =
$this->ordering['orderingMap'];
if(!empty($this->ordering['main_pkey'])) {
$orderClass->main_pkey = $this->ordering['main_pkey'];
}
$orderClass->save(false);
}
return $this->listing();
}
public function getUploadSetting($upload_key, $caller = '') {
return false;
}
public function manageUpload($upload_key, &$ret, $uploadConfig,
$caller = '') { }
}
class hikamarketClass extends JObject {
protected $db;
protected $tables = array();
protected $pkeys = array();
protected $namekeys = array();
protected $toggle = array();
protected $deleteToggle = array();
public function __construct($config = array()){
$this->db = JFactory::getDBO();
return parent::__construct($config);
}
public function get($element, $default = null) {
if(empty($element))
return null;
$pkey = end($this->pkeys);
$namekey = end($this->namekeys);
$table = $this->getTable(); //
hikamarket::table(end($this->tables));
if(!is_numeric($element) && !empty($namekey)) {
$pkey = $namekey;
}
$query = 'SELECT * FROM '.$table.' WHERE
'.$pkey.' = '.$this->db->Quote($element);
$this->db->setQuery($query, 0, 1);
$ret = $this->db->loadObject();
return $ret;
}
public function getRaw($element, $default = null) {
static $multiTranslation = null;
if(empty($element))
return null;
$pkey = end($this->pkeys);
$namekey = end($this->namekeys);
$table = $this->getTable(); //
hikamarket::table(end($this->tables));
if(!is_numeric($element) && !empty($namekey)) {
$pkey = $namekey;
}
if($multiTranslation === null) {
$translationHelper =
hikamarket::get('shop.helper.translation');
$multiTranslation = $translationHelper->isMulti(true);
}
$query = 'SELECT * FROM '.$table.' WHERE
'.$pkey.' = '.$this->db->Quote($element);
$this->db->setQuery($query, 0, 1);
if($multiTranslation) {
$app = JFactory::getApplication();
if(!$app->isAdmin() &&
class_exists('JFalangDatabase')) {
$ret = $this->db->loadObject('stdClass', false);
} elseif(!$app->isAdmin() &&
(class_exists('JFDatabase') ||
class_exists('JDatabaseMySQLx'))) {
$ret = $this->db->loadObject(false);
} else {
$ret = $this->db->loadObject();
}
} else {
$ret = $this->db->loadObject();
}
return $ret;
}
public function save(&$element) {
if(empty($this->tables))
return false;
$pkey = end($this->pkeys);
if(empty($pkey)) {
$pkey = end($this->namekeys);
} elseif(empty($element->$pkey)) {
$t = end($this->namekeys);
if(!empty($t)) {
if(!empty($element->$t)) {
$pkey = $t;
} else {
$element->$t = $this->getNamekey($element);
if($element->$t === false)
return false;
}
}
}
$table = $this->getTable(); //
hikamarket::table(end($this->tables));
$obj =& $element;
if(empty($element->$pkey)) {
$this->db->setQuery($this->getInsert($table, $obj));
$status = $this->db->execute();
} else {
if( count( (array)$element ) > 1 ) {
$status = $this->db->updateObject($table, $obj, $pkey);
} else {
$status = true;
}
}
if($status)
return empty($element->$pkey) ? $this->db->insertid() :
$element->$pkey;
return false;
}
private function getInsert($table, &$obj, $keyName = null) {
$sql = 'INSERT IGNORE INTO
'.$this->db->quoteName($table).' ( %s ) VALUES ( %s )
';
$fields = array();
$values = array();
foreach (get_object_vars($obj) as $k => $v) {
if(is_array($v) || is_object($v) || $v === null || $k[0] ==
'_' ) {
continue;
}
$fields[] = $this->db->quoteName($k);
$values[] = $this->db->Quote($v);
}
return sprintf($sql, implode(',', $fields),
implode(',', $values));
}
public function delete(&$elements) {
if(empty($this->tables))
return false;
if(empty($elements))
return false;
if(!is_array($elements))
$elements = array($elements);
$isNumeric = is_numeric(reset($elements));
foreach($elements as $key => $val) {
$elements[$key] = $this->db->Quote($val);
}
$columns = $isNumeric ? $this->pkeys : $this->namekeys;
if(empty($columns) || empty($elements))
return false;
$otherElements = array();
$otherColumn = '';
foreach($columns as $i => $column) {
if(empty($column)) {
$query = 'SELECT
'.($isNumeric?end($this->pkeys):end($this->namekeys)).'
FROM '.hikamarket::table(end($this->tables)).' WHERE
'.($isNumeric?end($this->pkeys):end($this->namekeys)).' IN
( '.implode(',',$elements).');';
$this->db->setQuery($query);
$otherElements = $this->db->loadColumn();
foreach($otherElements as $key => $val) {
$otherElements[$key] = $this->db->Quote($val);
}
break;
}
}
$tables = array();
if(is_array($this->tables)) {
foreach($this->tables as $i => $oneTable) {
$tables[$i] = hikamarket::table($oneTable);
}
} else {
$tables[0] = hikamarket::table($this->tables);
}
$result = true;
foreach($tables as $i => $oneTable) {
$column = $columns[$i];
if(empty($column)) {
$whereIn = ' WHERE
'.($isNumeric?$this->namekeys[$i]:$this->pkeys[$i]).' IN
('.implode(',',$otherElements).')';
} else {
$whereIn = ' WHERE '.$column.' IN
('.implode(',',$elements).')';
}
$query = 'DELETE FROM '.$oneTable.$whereIn;
$this->db->setQuery($query);
$result = $this->db->execute() && $result;
}
return $result;
}
public function toggleId($task, $value = null) {
if(!empty($this->toggle[$task]))
return $this->toggle[$task];
return false;
}
public function toggle($task, $key, $value = null) {
return null;
}
public function toggleDelete($value1 = '', $value2 =
'') {
if(!empty($this->deleteToggle))
return $this->deleteToggle;
return false;
}
public function getTable() {
if(!empty($this->tables))
return hikamarket::table(end($this->tables));
return false;
}
}
class hikamarketView extends hikashopBridgeView {
protected $triggerView = false;
public $toolbar = array();
public function display($tpl = null) {
if($this->triggerView) {
$app = JFactory::getApplication();
JPluginHelper::importPlugin('hikamarket');
$view =& $this;
$app->triggerEvent('onHikamarketBeforeDisplayView',
array(&$view));
}
if(!empty($this->toolbar)) {
$toolbarHelper = hikamarket::get('helper.toolbar');
$toolbarHelper->process($this->toolbar);
}
parent::display($tpl);
if($this->triggerView)
$app->triggerEvent('onHikamarketAfterDisplayView',
array(&$view));
}
protected function &getPageInfo($default = '', $dir =
'asc', $filters = array()) {
$app = JFactory::getApplication();
$pageInfo = new stdClass();
$pageInfo->search =
$app->getUserStateFromRequest($this->paramBase.'.search',
'search', '', 'string');
$pageInfo->filter = new stdClass();
$pageInfo->filter->order = new stdClass();
$filter_fullorder =
hikaInput::get()->getString('filter_fullorder', null);
if($filter_fullorder != null && strpos($filter_fullorder, '
') !== false) {
$filter_fullorder = explode(' ', $filter_fullorder, 2);
$filter_fullorder[1] = strtolower($filter_fullorder[1]);
if($filter_fullorder[1] == 'asc' || $filter_fullorder[1] ==
'desc') {
$app->setUserState($this->paramBase.'.filter_order',
$filter_fullorder[0]);
$app->setUserState($this->paramBase.'.filter_order_Dir',
$filter_fullorder[1]);
if(hikaInput::get()->getString('filter_order', null) ==
null) {
hikaInput::get()->set('filter_order',
$filter_fullorder[0]);
hikaInput::get()->set('filter_order_Dir',
$filter_fullorder[1]);
}
}
}
$pageInfo->filter->order->value =
$app->getUserStateFromRequest($this->paramBase.'.filter_order',
'filter_order', $default, 'cmd');
$pageInfo->filter->order->dir =
$app->getUserStateFromRequest($this->paramBase.'.filter_order_Dir',
'filter_order_Dir', $dir, 'word');
$pageInfo->limit = new stdClass();
$pageInfo->limit->value =
$app->getUserStateFromRequest($this->paramBase.'.list_limit',
'limit', $app->getCfg('list_limit'),
'int');
if(empty($pageInfo->limit->value))
$pageInfo->limit->value = 500;
if((hikaInput::get()->getVar('search', null) != null
&& $cid = hikaInput::get()->getVar('search', null) !=
$app->getUserState($this->paramBase.'.search')) ||
hikaInput::get()->getVar('limit',
$pageInfo->limit->value) !=
$app->getUserState($this->paramBase.'.list_limit')) {
$app->setUserState($this->paramBase.'.limitstart',0);
$pageInfo->limit->start = 0;
} else {
$pageInfo->limit->start =
$app->getUserStateFromRequest($this->paramBase.'.limitstart',
'limitstart', 0, 'int');
}
if(!empty($filters)) {
$reset = false;
foreach($filters as $k => $v) {
$type = 'string';
if(is_int($v)) $type = 'int';
if(!$reset) $oldValue =
$app->getUserState($this->paramBase.'.filter_'.$k, $v);
$newValue =
$app->getUserStateFromRequest($this->paramBase.'.filter_'.$k,
'filter_'.$k, $v, $type);
$reset = $reset || ($oldValue != $newValue);
$pageInfo->filter->$k = $newValue;
}
if($reset) {
$app->setUserState($this->paramBase.'.limitstart',0);
$pageInfo->limit->start = 0;
}
}
$pageInfo->search =
HikaStringHelper::strtolower($app->getUserStateFromRequest($this->paramBase.'.search',
'search', '', 'string'));
$pageInfo->search = trim($pageInfo->search);
$this->assignRef('pageInfo', $pageInfo);
return $pageInfo;
}
protected function getPageInfoTotal($query, $countValue = '*')
{
if(empty($this->pageInfo))
return false;
$db = JFactory::getDBO();
$app = JFactory::getApplication();
$db->setQuery('SELECT COUNT('.$countValue.')
'.$query);
if(empty($this->pageInfo->elements))
$this->pageInfo->elements = new stdClass();
$this->pageInfo->elements->total = (int)$db->loadResult();
if((int)$this->pageInfo->limit->start >=
$this->pageInfo->elements->total) {
$this->pageInfo->limit->start = 0;
$app->setUserState($this->paramBase.'.limitstart', 0);
}
}
protected function processFilters(&$filters, &$order, $searchMap =
array(), $orderingAccept = array()) {
if(!empty($this->pageInfo->search)) {
$db = JFactory::getDBO();
$searchVal = '\'%' .
$db->escape(HikaStringHelper::strtolower($this->pageInfo->search),
true) . '%\'';
if(is_array($filters))
$filters[] = '('.implode(' LIKE '.$searchVal.'
OR ',$searchMap).' LIKE '.$searchVal.')';
}
if(!empty($filters)) {
if(is_array($filters))
$filters = ' WHERE ('. implode(') AND (', $filters)
. ')';
} else {
$filters = '';
}
if(!empty($this->pageInfo->filter->order->value)) {
$t = '';
if(strpos($this->pageInfo->filter->order->value,
'.') !== false)
list($t,$v) = explode('.',
$this->pageInfo->filter->order->value, 2);
$dir = strtolower($this->pageInfo->filter->order->dir);
if(!in_array($dir, array('asc', 'desc')))
$this->pageInfo->filter->order->dir = 'ASC';
if(empty($orderingAccept) || in_array($t.'.', $orderingAccept)
|| in_array($this->pageInfo->filter->order->value,
$orderingAccept))
$order = ' ORDER BY
'.$this->pageInfo->filter->order->value.'
'.strtoupper($this->pageInfo->filter->order->dir);
}
}
protected function getPagination($max = 500, $limit = 100) {
if(empty($this->pageInfo))
return false;
if($this->pageInfo->limit->value == $max)
$this->pageInfo->limit->value = $limit;
$pagination = hikashop_get('helper.pagination',
$this->pageInfo->elements->total,
$this->pageInfo->limit->start,
$this->pageInfo->limit->value);
$this->assignRef('pagination', $pagination);
return $pagination;
}
protected function getOrdering($value = '', $doOrdering = true)
{
$this->assignRef('doOrdering', $doOrdering);
$ordering = new stdClass();
$ordering->ordering = false;
if($doOrdering) {
$ordering->ordering = false;
$ordering->orderUp = 'orderup';
$ordering->orderDown = 'orderdown';
$ordering->reverse = false;
if(!empty($this->pageInfo) &&
$this->pageInfo->filter->order->value == $value) {
$ordering->ordering = true;
if($this->pageInfo->filter->order->dir == 'desc')
{
$ordering->orderUp = 'orderdown';
$ordering->orderDown = 'orderup';
$ordering->reverse = true;
}
}
}
$this->assignRef('ordering', $ordering);
return $ordering;
}
protected function loadRef($refs) {
foreach($refs as $key => $name) {
$obj = hikamarket::get($name);
if(!empty($obj))
$this->assignRef($key, $obj);
unset($obj);
}
}
protected function loadHkLayout($layout, $params = array()) {
$backup_paths = $this->_path['template'];
$layout_path = rtrim(JPath::clean(HIKAMARKET_FRONT), '\/') .
'/views/layouts/tmpl';
$app = JFactory::getApplication();
$component = JApplicationHelper::getComponentName();
$component = preg_replace('/[^A-Z0-9_\.-]/i', '',
$component);
$fallback = JPATH_THEMES . '/' . $app->getTemplate() .
'/html/' . $component . '/layouts';
$this->_path['template'] = array();
$this->_addPath('template', array($layout_path,
$fallback));
if(!isset($this->params) || (empty($this->params) &&
is_array($this->params)))
$this->params = new JRegistry();
$backup_params = array();
foreach($params as $k => $v) {
$backup_params[$k] = $this->params->get($k, null);
$this->params->set($k, $v);
}
$current_name = $this->getName();
$this->_name = 'layouts';
$current_layout = $this->getLayout();
$this->setLayout($layout);
$ret = $this->loadTemplate();
$this->setLayout($current_layout);
$this->_name = $current_name;
$this->_path['template'] = $backup_paths;
foreach($backup_params as $k => $v) {
$this->params->set($k, $v);
}
return $ret;
}
public function escape($var, $search = false) {
if($search === false || empty($this->pageInfo) ||
empty($this->pageInfo->search))
return parent::escape($var);
return hikamarket::search($this->pageInfo->search,
parent::escape($var));
}
public function search($var, $escape = false) {
if(empty($this->pageInfo) || empty($this->pageInfo->search))
return $escape ? parent::escape($var) : $var;
return hikamarket::search($this->pageInfo->search, $escape ?
parent::escape($var) : $var);
}
public function loadTemplate($tpl = null){
$config = hikashop_config();
$active = $config->get('display_view_files', 0);
if(!$active)
return parent::loadTemplate($tpl);
$app = JFactory::getApplication();
if($app->isAdmin() && $active != 2)
return parent::loadTemplate($tpl);
return '<div
class="hikashop_view_files_border"><div
class="hikashop_view_files_title"><span>'.
$this->getName().' /
'.$this->getLayout().(!empty($tpl)?'_':'').$tpl.'.php</span></div><div
class="hikashop_view_files_wrapper">'.
parent::loadTemplate($tpl).
'</div></div>';
}
public function assignRef($name, &$ref) {
$this->$name =& $ref;
}
}
spl_autoload_register(function($classname) {
if($classname == 'hikamarketPlugin') {
include_once __DIR__ . '/plugin.php';
return;
}
if(substr($classname, 0, 10) != 'hikamarket')
return;
});
$configMarket = hikamarket::config();
define('HIKAMARKET_RESSOURCE_VERSION', str_replace('.',
'', $configMarket->get('version')));
$doc = JFactory::getDocument();
$doc->addScript(HIKAMARKET_JS.'hikamarket.js?v='.HIKAMARKET_RESSOURCE_VERSION);
$cssMarket = $configMarket->get('css_'.$css_type,
'default');
if(!empty($cssMarket))
$doc->addStyleSheet(HIKAMARKET_CSS.$css_type.'_'.$cssMarket.'.css?v='.HIKAMARKET_RESSOURCE_VERSION);
if(!$app->isAdmin()) {
$styleCssMarket =
$configMarket->get('css_style','');
if(!empty($styleCssMarket))
$doc->addStyleSheet(HIKAMARKET_CSS.'style_'.$styleCssMarket.'.css?v='.HIKAMARKET_RESSOURCE_VERSION);
}
if(!empty($cssMarket) || !empty($styleCssMarket)) {
$lang = JFactory::getLanguage();
if($lang->isRTL())
$doc->addStyleSheet(HIKAMARKET_CSS.'rtl.css?v='.HIKAMARKET_RESSOURCE_VERSION);
}
if(($app->isAdmin() && HIKASHOP_BACK_RESPONSIVE) ||
(!$app->isAdmin() && HIKASHOP_RESPONSIVE))
$doc->addScriptDeclaration("\r\n".'window.Oby.ready(function(){setTimeout(function(){window.hikamarket.noChzn();},100);});');
helpers/index.html000064400000000032151160562420010200
0ustar00<html><body></body></html>helpers/module.php000064400000012174151160562420010213
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketModuleHelper
{
public function initialize(&$obj) {
$this->getParams($obj);
$this->setCSS($obj->params,@$obj->module);
$obj->modules =
$this->setModuleData($obj->params->get('modules'));
}
public function setCSS(&$params, $name = '') {
$css = '';
$main_div_name = $params->get('main_div_name');
if(empty($main_div_name)) {
$main_div_name
='hikamarket_vendor_listing_'.($name?'module_':'menu_').$params->get('id');
$params->set('main_div_name', $main_div_name);
}
$shopConfig = hikamarket::config(false);
if($shopConfig->get('no_css_header',0))
return true;
$css = PHP_EOL;
$defaultParams = $shopConfig->get('default_params');
if($params->get('background_color', '') ==
'')
$params->set('background_color',
$defaultParams['background_color']);
if($params->get('margin', '') == '')
$params->set('margin',
$defaultParams['margin']);
if($params->get('text_center', '-1') ==
'-1')
$params->set('text_center',
$defaultParams['text_center']);
if($params->get('rounded_corners', '-1') ==
'-1')
$params->set('rounded_corners',
$defaultParams['rounded_corners']);
$background_color = $params->get('background_color');
if(!empty($background_color)) {
$css .= '#'.$main_div_name.' div.hikamarket_subcontainer
{ background:'.$background_color.'; }' . PHP_EOL .
'#'.$main_div_name.' .hikamarket_rtop *,
#'.$main_div_name.' .hikamarket_rbottom * {
background:'.$background_color.'; }' . PHP_EOL;
}
$center = $params->get('text_center');
if(!empty($center)) {
$css .= '#'.$main_div_name.' div.hikamarket_subcontainer,
#'.$main_div_name.' div.hikamarket_subcontainer span {
text-align:center; }' . PHP_EOL .
'#'.$main_div_name.' div.hikamarket_container {
text-align:center; }' . PHP_EOL;
} else {
$css .= '#'.$main_div_name.' div.hikamarket_subcontainer,
#'.$main_div_name.' div.hikamarket_subcontainer span {
text-align:left; }' . PHP_EOL .
'#'.$main_div_name.' div.hikamarket_container {
text-align:left; }' . PHP_EOL;
}
$margin = $params->get('margin',0);
$css .= '#'.$main_div_name.' div.hikamarket_container {
margin:'.$margin.'px '.$margin.'px; }' . PHP_EOL;
$rounded_corners = $params->get('rounded_corners', 0);
if($rounded_corners) {
$css.= '#'.$main_div_name.' .hikamarket_subcontainer {
-moz-border-radius: 5px; -webkit-border-radius: 5px; -khtml-border-radius:
5px; border-radius: 5px; }' . PHP_EOL;
}
$doc = JFactory::getDocument();
$doc->addStyleDeclaration($css);
}
function setModuleData($modules) {
if(empty($modules)) {
$modules = array();
return $modules;
}
if(!is_array($modules))
$modules = explode(',',$modules);
hikamarket::toInteger($modules);
$modules = implode(',',$modules);
$database = JFactory::getDBO();
$query = 'SELECT * FROM
'.hikamarket::table('modules',false).' WHERE id IN
('.$modules.');';
$database->setQuery($query);
$modulesData = $database->loadObjectList('id');
$unset = array();
$modules = explode(',',$modules);
foreach($modules as $k => $v) {
if(isset($modulesData[$v])) {
$file = $modulesData[$v]->module;
$custom = substr( $file, 0, 4 ) == 'mod_' ? 0 : 1;
$modulesData[$v]->user = $custom;
$modulesData[$v]->name = $custom ? $modulesData[$v]->title :
substr( $file, 4 );
$modulesData[$v]->style = null;
$modulesData[$v]->position =
strtolower($modulesData[$v]->position);
$modules[$k] = $modulesData[$v];
} else {
$unset[]=$k;
}
}
if(!empty($unset)) {
foreach($unset as $u) {
unset($modules[$u]);
}
}
return $modules;
}
private function getParams(&$obj) {
if(!empty($obj->params)) {
$obj->module = true;
return;
}
global $Itemid;
$app = JFactory::getApplication();
$menus = $app->getMenu();
$menu = $menus->getActive();
if(empty($menu) && !empty($Itemid)) {
$menus->setActive($Itemid);
$menu = $menus->getItem($Itemid);
}
jimport('joomla.html.parameter');
if(is_object($menu)) {
$obj->params = new HikaParameter($menu->params);
$obj->params->set('id', $menu->id);
$obj->params->set('title', $menu->title);
} else {
$params ='';
$obj->params = new HikaParameter($params);
}
$config = hikamarket::config();
$menuClass = hikamarket::get('class.menus');
$menuData = $menuClass->get(@$menu->id);
$marketdata = $obj->params->get('market', null);
if(!empty($marketdata)) {
foreach($marketdata as $key => $item) {
$obj->params->set($key, $item);
}
} else if(!empty($menuData->hikamarket_params)) {
foreach($menuData->hikamarket_params as $key => $item) {
$obj->params->set($key, $item);
}
}
if(!empty($menuData->params)) {
foreach($menuData->params as $key => $item) {
if(!is_object($item))
$obj->params->set($key, $item);
}
}
}
}
helpers/plugin.php000064400000015006151160562420010221 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketPlugin extends JPlugin {
protected $db;
protected $multiple = false;
protected $type = 'generic';
protected $plugin_params = null;
protected $doc_form = '';
protected $doc_listing = '';
public function __construct(&$subject, $config) {
$this->db = JFactory::getDBO();
parent::__construct($subject, $config);
}
public function pluginParams($id = 0, $name = '') {
$this->plugin_params = null;
if(in_array($this->type, array())) {
if($id > 0) {
$this->db->setQuery('SELECT
'.$this->type.'_params FROM
'.hikamarket::table($this->type).' WHERE
'.$this->type.'_id = ' . (int)$id);
$this->db->execute();
$data = $this->db->loadResult();
if(!empty($data)) {
$this->plugin_params = hikamarket::unserialize($data);
return true;
}
} else if(!empty($name)) {
$this->db->setQuery('SELECT
'.$this->type.'_params FROM
'.hikamarket::table($this->type).' WHERE
'.$this->type.'_type = ' .
$this->db->Quote($name));
$this->db->execute();
$data = $this->db->loadResult();
if(!empty($data)) {
$this->plugin_params = hikamarket::unserialize($data);
return true;
}
}
} else if(!empty($name)) {
$pluginsClass = hikamarket::get('shop.class.plugins');
$this->plugin_params =
$pluginsClass->getByName('hikamarket', $name);
}
return false;
}
public function type() {
return $this->type;
}
public function isMultiple() {
return $this->multiple;
}
public function configurationHead() {
return array();
}
public function configurationLine($id = 0) {
return null;
}
public function listPlugins($name, &$values, $full = true){
if(in_array($this->type, array('plugin'))) {
if($this->multiple) {
$query = 'SELECT '.$this->type.'_id as id,
'.$this->type.'_name as name FROM
'.hikamarket::table($this->type).' WHERE
'.$this->type.'_type = ' . $this->db->Quote($name)
. ' AND '.$this->type.'_published = 1 ORDER BY
'.$this->type.'_ordering';
$this->db->setQuery($query);
$plugins = $this->db->loadObjectList();
if($full) {
foreach($plugins as $plugin) {
$values['plg.'.$name.'-'.$plugin->id] =
$name.' - '.$plugin->name;
}
} else {
foreach($plugins as $plugin) {
$values[] = $plugin->id;
}
}
} else {
$values['plg.'.$name] = $name;
};
}
}
public function onPluginConfiguration(&$elements) {
$this->plugins =& $elements;
$this->pluginName = hikaInput::get()->getCmd('name',
$this->type);
$this->pluginView = '';
$plugin_id = hikaInput::get()->getInt('plugin_id',0);
if($plugin_id == 0) {
$plugin_id = hikaInput::get()->getInt($this->type.'_id',
0);
}
$toolbar = JToolBar::getInstance('toolbar');
JToolBarHelper::save();
JToolBarHelper::apply();
if($plugin_id == 0) {
$toolbar->appendButton('Link', 'cancel',
JText::_('HIKA_CANCEL'),
hikamarket::completeLink('plugins') );
} else {
$toolbar->appendButton('Link', 'cancel',
JText::_('HIKA_CANCEL'),
hikamarket::completeLink('plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName)
);
}
JToolBarHelper::divider();
$toolbar->appendButton('Pophelp','plugins-'.$this->doc_form.'form');
if(empty($this->title)) {
$this->title = JText::_('HIKAMARKET_PLUGIN_METHOD');
}
if($plugin_id == 0) {
hikamarket::setTitle($this->title, 'puzzle-piece',
'plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName.'&subtask=edit');
} else {
hikamarket::setTitle($this->title, 'puzzle-piece',
'plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName.'&subtask=edit&plugin_id='.$plugin_id);
}
}
public function onPluginMultipleConfiguration(&$elements) {
if(!$this->multiple)
return;
$app = JFactory::getApplication();
$this->plugins =& $elements;
$this->pluginName = hikaInput::get()->getCmd('name',
$this->type);
$this->pluginView = 'sublisting';
$this->subtask =
hikaInput::get()->getCmd('subtask','');
$this->task = hikaInput::get()->getVar('task');
if(empty($this->title)) {
$this->title = JText::_('HIKAMARKET_PLUGIN_METHOD');
}
if($this->subtask == 'copy') {
if(!in_array($this->task, array('orderup',
'orderdown', 'saveorder'))) {
$pluginIds = hikaInput::get()->get('cid', array(),
'array');
hikamarket::toInteger($pluginIds);
$result = true;
if(!empty($pluginIds) && in_array($this->type,
array('plugin'))) {
$this->db->setQuery('SELECT * FROM
'.hikamarket::table($this->type).' WHERE
'.$this->type.'_id IN
('.implode(',',$pluginIds).')');
$plugins = $this->db->loadObjectList();
$helper = hikamarket::get('class.'.$this->type);
if($helper) {
$plugin_id = $this->type . '_id';
foreach($plugins as $plugin) {
unset($plugin->$plugin_id);
if(!$helper->save($plugin)) {
$result = false;
}
}
}
}
if($result) {
$app->enqueueMessage(JText::_('HIKASHOP_SUCC_SAVED'),
'message');
$app->redirect(hikamarket::completeLink('plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName,
false, true));
}
}
}
$bar = JToolBar::getInstance('toolbar');
JToolBarHelper::divider();
JToolBarHelper::publishList();
JToolBarHelper::unpublishList();
JToolBarHelper::divider();
$bar->appendButton('Standard', 'copy',
JText::_('HIKA_COPY'), 'edit', true, false);
$bar->appendButton('Link', 'new',
JText::_('HIKA_NEW'),
hikamarket::completeLink('plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName.'&subtask=edit'));
JToolBarHelper::cancel();
JToolBarHelper::divider();
$bar->appendButton('Pophelp',
'plugins-'.$this->doc_listing.'sublisting');
hikamarket::setTitle($this->title, 'plugin',
'plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName);
$this->toggleClass = hikamarket::get('helper.toggle');
jimport('joomla.html.pagination');
$this->pagination = new JPagination(count($this->plugins), 0,
false);
$this->order = new stdClass();
$this->order->ordering = true;
$this->order->orderUp = 'orderup';
$this->order->orderDown = 'orderdown';
$this->order->reverse = false;
$app->setUserState(HIKAMARKET_COMPONENT.$this->type.'._plugin_type',
$this->pluginName);
}
}
helpers/shop/index.html000064400000000032151160562420011151
0ustar00<html><body></body></html>helpers/shop/orderstatus.php000064400000000572151160562420012255
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketShopOrderstatusHelper {
public function filter($key) {
}
}
helpers/shop/order_backend.php000064400000101546151160562420012463
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketShopOrder_backendHelper {
protected $db = null;
public function __construct() {
$this->db = JFactory::getDBO();
}
public function processView(&$view) {
$app = JFactory::getApplication();
$layout = $view->getLayout();
$orderClass = hikamarket::get('class.order');
if($app->isAdmin() && ($layout == 'show' ||
substr($layout, 0, 5) == 'show_')) {
$currencyClass = hikamarket::get('shop.class.currency');
if($view->order->order_type == 'subsale') {
$order_vendor_params = $view->order->order_vendor_params;
if(is_string($order_vendor_params) &&
!empty($order_vendor_params))
$order_vendor_params =
hikamarket::unserialize($view->order->order_vendor_params);
else
$order_vendor_params = null;
if(!empty($view->order->order_vendor_id)) {
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get( $view->order->order_vendor_id
);
if(!empty($vendor)) {
$view->extra_data['general']['order_vendor'] =
array(
'title' => JText::_('HIKA_VENDOR'),
'data' => '<a
href="'.hikamarket::completeLink('vendor&task=edit&cid='.$vendor->vendor_id).'">'.$vendor->vendor_name.'</a>'
);
} else {
$view->extra_data['general']['order_vendor'] =
array(
'title' => JText::_('HIKA_VENDOR'),
'data' => $view->order->order_vendor_id
);
}
}
$view->extra_data['general']['order_parent_id']
= array(
'title' => JText::_('HIKAM_PARENT_ORDER'),
'data' => $view->order->order_parent_id.'
<a
href="'.hikamarket::completeLink('shop.order&task=edit&cid='.$view->order->order_parent_id).'"><i
class="fa fa-chevron-right"></i></a>'
);
$fixed_fees = 0.0;
if(!empty($order_vendor_params->fees->fixed)) {
foreach($order_vendor_params->fees->fixed as $fixed_fee) {
$fixed_fees += $fixed_fee;
}
}
$view->extra_data['additional']['vendor_fixed_fees']
= array(
'title' =>
JText::_('HIKAM_VENDOR_FIXED_FEES'),
'data' => $currencyClass->format($fixed_fees,
$view->order->order_currency_id)
);
if(!empty($order_vendor_params->fees->shipping)) {
$view->extra_data['additional']['vendor_shipping_fees']
= array(
'title' =>
JText::_('HIKAM_VENDOR_SHIPPING_FEES'),
'data' =>
$currencyClass->format($order_vendor_params->fees->shipping,
$view->order->order_currency_id)
);
}
if($view->order->order_vendor_paid > 0) {
$query = 'SELECT * '.
' FROM ' . hikamarket::table('shop.order') .
' WHERE order_parent_id = ' .
$view->order->order_parent_id . ' AND order_type = ' .
$this->db->Quote('vendorrefund');
$this->db->setQuery($query);
$refunds = $this->db->loadObjectList();
$total = $view->order->order_vendor_price;
$paid = $view->order->order_vendor_price;
if(!empty($refunds)) {
foreach($refunds as $refund) {
$total +=
(float)hikamarket::toFloat($refund->order_vendor_price);
if($refund->order_vendor_paid > 0)
$paid +=
(float)hikamarket::toFloat($refund->order_vendor_price);
}
}
$paidIcon = ' <i class="far
fa-check-circle"></i>';
$unpaidIcon = ' <a
href="'.hikamarket::completeLink('vendor&task=pay&cid='.(int)$view->order->order_vendor_id).'"><i
class="far fa-dot-circle"></i></a>';
$view->extra_data['additional']['order_vendor_price']
= array(
'title' => JText::_('VENDOR_TOTAL'),
'data' => $currencyClass->format($total,
$view->order->order_currency_id) . (($paid != $total) ? $unpaidIcon :
$paidIcon)
);
if($paid != $total) {
$view->extra_data['additional']['order_vendor_paid']
= array(
'title' => JText::_('VENDOR_TOTAL_PAID'),
'data' => $currencyClass->format($paid,
$view->order->order_currency_id)
);
}
} else {
$view->extra_data['additional']['order_vendor_price']
= array(
'title' => JText::_('VENDOR_TOTAL'),
'data' =>
$currencyClass->format($view->order->order_vendor_price,
$view->order->order_currency_id)
);
}
$query = 'SELECT hkop.*, hko.order_vendor_id, hmv.vendor_name,
hmv.vendor_id '.
' FROM ' . hikamarket::table('shop.order_product')
. ' as hkop '.
' INNER JOIN ' . hikamarket::table('shop.order').
' AS hko ON hkop.order_id = hko.order_id '.
' LEFT JOIN ' . hikamarket::table('vendor').
' AS hmv ON hmv.vendor_id = hko.order_vendor_id '.
' WHERE hko.order_type = \'subsale\' AND hko.order_id =
'. (int)$view->order->order_id .
' ORDER BY hko.order_id DESC';
$this->db->setQuery($query);
$vendorProducts =
$this->db->loadObjectList('order_product_id');
if(!isset($view->extra_data['products']))
$view->extra_data['products'] = array();
$view->extra_data['products']['vendor'] =
JText::_('HIKA_VENDOR');
foreach($view->order->products as &$product) {
$product->extra_data['vendor'] = '-';
if(isset($vendorProducts[$product->order_product_id])) {
$product->extra_data['vendor'] =
$currencyClass->format(
(float)$vendorProducts[$product->order_product_id]->order_product_vendor_price,
$view->order->order_currency_id
);
}
}
unset($product);
return;
}
if($view->order->order_type == 'sale') {
$query = 'SELECT hkop.*, hko.order_vendor_id, hmv.vendor_name,
hmv.vendor_id '.
' FROM ' . hikamarket::table('shop.order_product')
. ' as hkop '.
' INNER JOIN ' . hikamarket::table('shop.order').
' AS hko ON hkop.order_id = hko.order_id '.
' LEFT JOIN ' . hikamarket::table('vendor').
' AS hmv ON hmv.vendor_id = hko.order_vendor_id '.
' WHERE hko.order_type = \'subsale\' AND
hko.order_parent_id = '. (int)$view->order->order_id .
' ORDER BY hko.order_id DESC';
$this->db->setQuery($query);
$vendorProducts = $this->db->loadObjectList();
if(!isset($view->extra_data['products']))
$view->extra_data['products'] = array();
$view->extra_data['products']['vendor'] =
JText::_('HIKA_VENDOR');
foreach($view->order->products as &$product) {
$product->extra_data['vendor'] = '-';
foreach($vendorProducts as $vendorProduct) {
if((int)$vendorProduct->order_product_parent_id !=
$product->order_product_id || (int)$vendorProduct->vendor_id <=
1)
continue;
if($product->extra_data['vendor'] == '-')
$product->extra_data['vendor'] = '';
$product->extra_data['vendor'] .=
'<p>'.$vendorProduct->vendor_name.'<br/>'.
$currencyClass->format(
(float)$vendorProduct->order_product_vendor_price,
$view->order->order_currency_id
).
'</p>';
}
}
unset($product);
return;
}
return;
}
if($app->isAdmin() && $layout == 'edit_products') {
if(empty($view->extra_data))
$view->extra_data = array();
if(empty($view->extra_data['products']))
$view->extra_data['products'] = array();
$vendor = null;
$vendor_price = false;
if(!empty($view->orderProduct->order_product_id) &&
(int)$view->orderProduct->order_product_id > 0) {
if(!empty($view->orderProduct->order_product_parent_id)) {
$vendor_price = true;
$vendorProduct = $view->orderProduct;
} else {
$query = 'SELECT hkop.*, hko.order_vendor_id, hmv.* FROM ' .
hikamarket::table('shop.order_product') . ' as hkop '.
' INNER JOIN ' . hikamarket::table('shop.order').
' AS hko ON hkop.order_id = hko.order_id '.
' LEFT JOIN ' . hikamarket::table('vendor').
' AS hmv ON hmv.vendor_id = hko.order_vendor_id '.
' WHERE hko.order_type = \'subsale\' AND
order_product_parent_id = '.
(int)$view->orderProduct->order_product_id .
' ORDER BY hko.order_id DESC';
$this->db->setQuery($query);
$vendorProducts = $this->db->loadObjectList();
if(!empty($vendorProducts) && count($vendorProducts) == 1)
$vendorProduct = reset($vendorProducts);
unset($vendorProducts);
}
if(!empty($vendorProduct) &&
!empty($vendorProduct->order_vendor_id) &&
$vendorProduct->order_vendor_id > 1) {
$vendor = @$vendorProduct->order_vendor_id;
if(!empty($vendorProduct->vendor_name))
$vendor .= ' - ' . $vendorProduct->vendor_name;
$vendor_price = true;
}
} else {
$vendor = '<input type="text"
name="data[market][product][order_product_vendor_id]"
value=""/>';
$vendor_price = true;
if(!empty($view->orderProduct->product_id)) {
$query = 'SELECT p.product_vendor_id, pp.product_vendor_id AS
parent_vendor_id FROM
'.hikamarket::table('shop.product').' AS p '.
' LEFT JOIN
'.hikamarket::table('shop.product').' AS pp ON
p.product_parent_id = pp.product_id '.
' WHERE p.product_id = '.
(int)$view->orderProduct->product_id;
$this->db->setQuery($query);
$productVendor = $this->db->loadObject();
$vendor_id = 0;
if(!empty($productVendor->product_vendor_id))
$vendor_id = (int)$productVendor->product_vendor_id;
else if(!empty($productVendor->parent_vendor_id))
$vendor_id = (int)$productVendor->parent_vendor_id;
if(!empty($vendor_id)) {
$vendorClass = hikamarket::get('class.vendor');
$vendorObj = $vendorClass->get($vendor_id);
$vendor = $vendorObj->vendor_id . ' - ' .
$vendorObj->vendor_name . '<input type="hidden"
name="data[market][product][order_product_vendor_id]"
value="'.$vendorObj->vendor_id.'"/>';
}
if(!empty($vendor_id) &&
empty($vendorProduct->order_product_vendor_price)) {
$vendor_ids = array((int)$vendorObj->vendor_id =>
(int)$vendorObj->vendor_id);
$products = array(
0 => array(
'_id' =>
(int)@$view->orderProduct->order_product_id,
'id' => (int)$view->orderProduct->product_id,
'vendor' => (int)$vendorObj->vendor_id,
'fee' => array(),
'qty' =>
(int)$view->orderProduct->order_product_quantity,
'price' =>
(float)hikamarket::toFloat($view->orderProduct->order_product_price),
'price_tax' =>
(float)hikamarket::toFloat($view->orderProduct->order_product_tax)
)
);
$config = hikamarket::config();
if($config->get('calculate_vendor_price_with_tax',
false))
$full_price = (float)($products[0]['price'] +
$products[0]['price_tax']) * (int)$products[0]['qty'];
else
$full_price = (float)$products[0]['price'] *
(int)$products[0]['qty'];
$feeClass = hikamarket::get('class.fee');
$allFees = $feeClass->getProducts($products, $vendor_ids);
if($config->get('calculate_vendor_price_with_tax',
false))
$view->orderProduct->order_product_vendor_price =
(float)hikamarket::toFloat($view->orderProduct->order_product_price)
+
(float)hikamarket::toFloat($view->orderProduct->order_product_tax);
else
$view->orderProduct->order_product_vendor_price =
$view->orderProduct->order_product_price;
$product_fee = $orderClass->getProductFee($view->orderProduct,
$products[0]['fee'], $full_price, $full_price,
$products[0]['qty']);
if(empty($vendorProduct))
$vendorProduct = new stdClass();
$vendorProduct->order_product_vendor_price =
$product_fee['vendor'];
}
}
}
if(!empty($vendor)) {
$view->extra_data['products']['vendor_id'] =
array(
'title' => 'HIKA_VENDOR',
'data' => $vendor
);
}
if($vendor_price) {
$view->extra_data['products']['vendor_price'] =
array(
'title' => 'HIKAM_VENDOR_UNIT_PRICE',
'data' => '<input type="text"
name="data[market][product][order_product_vendor_price]"
value="'.@$vendorProduct->order_product_vendor_price.'"/>'
);
}
return;
}
if($app->isAdmin() && $layout == 'edit_additional')
{
$fixed_fees = 0.0;
$order_vendor_params =
is_string($view->order->order_vendor_params) ?
hikamarket::unserialize($view->order->order_vendor_params) :
$view->order->order_vendor_params;
if(!empty($order_vendor_params->fees->fixed)) {
foreach($order_vendor_params->fees->fixed as $fixed_fee) {
$fixed_fees += $fixed_fee;
}
}
$view->extra_data['additional']['vendor_fixed_fee']
= array(
'title' => 'HIKAM_VENDOR_FIXED_FEES',
'data' => '<input type="text"
name="data[market][fixed_fees]"
value="'.$fixed_fees.'"/>'
);
$view->extra_data['additional']['vendor_shipping_fee']
= array(
'title' => 'HIKAM_VENDOR_SHIPPING_FEES',
'data' => '<input type="text"
name="data[market][shipping_fees]"
value="'.@$order_vendor_params->fees->shipping.'"/>'
);
return;
}
if(!$app->isAdmin() && $layout == 'show') {
$config = hikamarket::config();
$query = 'SELECT o.order_vendor_id FROM ' .
hikamarket::table('shop.order') . ' AS o '.
' WHERE order_type = '.
$this->db->Quote('subsale') .' AND order_parent_id =
' . (int)$view->order->order_id .
' GROUP BY o.order_vendor_id';
$this->db->setQuery($query);
$vendors = $this->db->loadColumn();
if(count($vendors) == 1 &&
(int)$config->get('vendors_in_cart', 0) == 1) {
$vendorClass = hikamarket::get('class.vendor');
$fieldsClass = hikamarket::get('shop.class.field');
$vendor = $vendorClass->get( reset($vendors) );
$view->vendor = $vendor;
$vendorFields = $vendor;
$extraFields = array(
'vendor' =>
$fieldsClass->getFields('frontcomp', $vendorFields,
'plg.hikamarket.vendor')
);
$params = null; $js = null;
$html = hikamarket::getLayout('shop.address',
'address_template', $params, $js);
foreach($extraFields['vendor'] as $field) {
$fieldname = $field->field_namekey;
$html = str_replace('{' . str_replace('vendor_',
'', $fieldname) . '}', $fieldsClass->show($field,
@$vendor->$fieldname), $html);
}
$view->store_address =
str_replace("\n","<br/>\n",trim(str_replace("\n\n","\n",preg_replace('#{(?:(?!}).)*}#i','',$html)),"\n"));
} else if(count($vendors) > 0 &&
(int)$config->get('show_sold_by', 0) == 1) {
$query = 'SELECT hkop.*, hko.order_vendor_id, hmv.vendor_name,
hmv.vendor_id '.
' FROM ' . hikamarket::table('shop.order_product')
. ' as hkop '.
' INNER JOIN ' . hikamarket::table('shop.order').
' AS hko ON hkop.order_id = hko.order_id '.
' LEFT JOIN ' . hikamarket::table('vendor').
' AS hmv ON hmv.vendor_id = hko.order_vendor_id '.
' WHERE hko.order_type = \'subsale\' AND
hko.order_parent_id = '. (int)$view->order->order_id .
' ORDER BY hko.order_id DESC';
$this->db->setQuery($query);
$vendorProducts = $this->db->loadObjectList();
foreach($view->order->products as &$product) {
foreach($vendorProducts as $vendorProduct) {
if((int)$vendorProduct->order_product_parent_id !=
$product->order_product_id)
continue;
if((int)$vendorProduct->vendor_id <= 1)
break;
if(empty($product->extraData))
$product->extraData = array();
$product->extraData['vendor'] = '<span
class="order_product_vendor">'.JText::sprintf('SOLD_BY_VENDOR',
$vendorProduct->vendor_name).'</span>';
break;
}
}
unset($product);
}
}
}
public function processAdminForm(&$order, &$do, $from =
'order') {
$order_id = hikamarket::getCID('order_id');
$task = hikaInput::get()->getVar('subtask', '');
$data = hikaInput::get()->get('data', array(),
'array');
if($task == 'products' && $from == 'order')
return;
$orderClass = hikamarket::get('class.order');
if($task == 'products' &&
isset($data['market']['product']['order_product_vendor_price']))
{
$product_id =
(int)$data['order']['product']['product_id'];
$order_product_id = null;
if(isset($data['order']['product']['order_product_id']))
$order_product_id =
(int)$data['order']['product']['order_product_id'];
$order_product_vendor_price =
trim($data['market']['product']['order_product_vendor_price']);
$order_product_vendor_id = null;
if(isset($data['market']['product']['order_product_vendor_id']))
$order_product_vendor_id =
(int)trim($data['market']['product']['order_product_vendor_id']);
$order_product_quantity = null;
if(isset($data['order']['product']['order_product_quantity']))
$order_product_quantity =
(int)trim($data['order']['product']['order_product_quantity']);
if(empty($order->hikamarket))
$order->hikamarket = new stdClass();
$order->hikamarket->products = array(
$order_product_id => array(
'product_id' => $product_id,
'order_product_id' => $order_product_id,
'vendor_id' => $order_product_vendor_id,
'vendor_price' => $order_product_vendor_price,
)
);
if($order_product_quantity !== null)
$order->hikamarket->products[$order_product_id]['order_product_quantity']
= $order_product_quantity;
}
if($task == 'additional' &&
isset($data['market']['fixed_fees'])) {
$order_vendor_params = is_string($order->order_vendor_params) ?
hikamarket::unserialize($order->order_vendor_params) :
$order->order_vendor_params;
if(empty($order_vendor_params)) $order_vendor_params = new stdClass();
if(!isset($order_vendor_params->fees)) $order_vendor_params->fees
= new stdClass();
$order_vendor_params->fees->fixed = array(
0 =>
(float)hikamarket::toFloat($data['market']['fixed_fees'])
);
if(isset($data['market']['shipping_fees']))
$order_vendor_params->fees->shipping =
(float)hikamarket::toFloat($data['market']['shipping_fees']);
$order->order_vendor_params = $order_vendor_params;
$vendor_new_total = $orderClass->recalculateVendorPrice($order);
if(is_string($order->order_payment_params) &&
!empty($order->order_payment_params))
$order->order_payment_params =
hikamarket::unserialize($order->order_payment_params);
$feeMode = true;
if(isset($order->order_payment_params->market_mode))
$feeMode = $order->order_payment_params->market_mode;
if(!$feeMode) {
$config = hikamarket::config();
if($config->get('shipping_per_vendor', 1) &&
!empty($order->order_shipping_price))
$vendor_new_total = $vendor_new_total - $order->order_full_price;
else
$vendor_new_total = $vendor_new_total - $order->order_full_price -
(float)$order->order_shipping_price;
}
if($vendor_new_total != $order->order_vendor_price) {
$order->order_vendor_price = $vendor_new_total;
$shopOrderClass = hikamarket::get('shop.class.order');
$parentOrder = $shopOrderClass->get($order->order_parent_id);
$orderClass->updateTransaction($parentOrder, $order,
$vendor_new_total);
}
if(!empty($order->order_payment_params) &&
!is_string($order->order_payment_params))
$order->order_payment_params =
serialize($order->order_payment_params);
$order->order_vendor_params =
serialize($order->order_vendor_params);
}
}
public function frontSaveFormLegacy($task = '', $acl = true) {
$do = false;
$vendor_id = 0;
$forbidden = array();
if($acl) {
if(!hikamarket::loginVendor())
return false;
$vendor_id = hikamarket::loadVendor(false);
if($vendor_id > 1) {
$forbidden = array( 'billing_address' => 1,
'shipping_address' => 1, 'additional' => 1,
'custom_fields' => 1, 'customer' => 1 ,
'product_delete' => 1 );
if(isset($forbidden[$task]))
return false;
}
if($vendor_id == 1)
$vendor_id = 0;
}
$order_id = hikamarket::getCID('order_id');
$orderClass = hikamarket::get('shop.class.order');
$addressClass = hikamarket::get('shop.class.address');
$fieldsClass = hikamarket::get('shop.class.field');
jimport('joomla.filter.filterinput');
$safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
$oldOrder = $this->getRaw($order_id);
$order = clone($oldOrder);
$order->history = new stdClass();
$data = hikaInput::get()->get('data', array(),
'array');
if(empty($order_id) || empty($order->order_id)) {
$orderClass->sendEmailAfterOrderCreation = false;
} else {
if($acl && $order->order_vendor_id != $vendor_id)
return hikamarket::deny('order',
JText::sprintf('HIKAM_PAGE_DENY'));
$order->history->history_notified = false;
}
$currentTask = 'billing_address';
$aclTask = 'billingaddress';
if( (empty($task) || $task == $currentTask) &&
!empty($data[$currentTask]) && !isset($forbidden[$currentTask])
&& (!$acl || hikamarket::acl('order/edit/'.$aclTask)) )
{
$oldAddress = null;
if(!empty($oldOrder->order_billing_address_id)) {
$oldAddress =
$addressClass->get($oldOrder->order_billing_address_id);
}
$billing_address = $fieldsClass->getInput(array($currentTask,
'address'), $oldAddress);
if(!empty($billing_address) && !empty($order_id)){
$result = $addressClass->save($billing_address, $order_id,
'billing');
if($result){
$order->order_billing_address_id = $result;
$order->history->history_reason = 'Billing address
modified';
$do = true;
}
}
}
$currentTask = 'shipping_address';
$aclTask = 'shippingaddress';
if( (empty($task) || $task == $currentTask) &&
!empty($data[$currentTask]) && !isset($forbidden[$currentTask])
&& (!$acl || hikamarket::acl('order/edit/'.$aclTask)) )
{
$oldAddress = null;
if(!empty($oldOrder->order_shipping_address_id)) {
$oldAddress =
$addressClass->get($oldOrder->order_shipping_address_id);
}
$shipping_address = $fieldsClass->getInput(array($currentTask,
'address'), $oldAddress);
if(!empty($shipping_address) && !empty($order_id)){
$result = $addressClass->save($shipping_address, $order_id,
'shipping');
if($result){
$order->order_shipping_address_id = $result;
$order->history->history_reason = 'Shipping address
modified';
$do = true;
}
}
}
$currentTask = 'general';
if( (empty($task) || $task == $currentTask) &&
!empty($data[$currentTask]) && (!$acl ||
hikamarket::acl('order/edit/'.$currentTask)) ) {
if(!empty($data['order']['order_status']) &&
$this->isValidOrderStatus($data['order']['order_status']))
{
if($oldOrder->order_type == 'subsale' &&
(int)$oldOrder->order_vendor_paid > 0 &&
$config->get('filter_orderstatus_paid_order', 1)) {
$config = hikamarket::config();
$valid_order_statuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
if(in_array($oldOrder->order_status, $valid_order_statuses)
&& in_array($order->order_status, $valid_order_statuses)) {
$order->order_status =
$data['order']['order_status'];
$do = true;
}
} else {
$order->order_status =
$data['order']['order_status'];
$do = true;
}
}
if($vendor_id == 0 && !empty($data['notify'])
&& hikamarket::acl('order/edit/notify')) {
if(empty($order->history))
$order->history = new stdClass();
$order->history->history_notified = true;
}
}
$currentTask = 'additional';
if( (empty($task) || $task == $currentTask) &&
!empty($data[$currentTask]) && !isset($forbidden[$currentTask])
&& (!$acl || hikamarket::acl('order/edit/'.$currentTask))
) {
$history_data = array();
if(isset($data['order']['order_discount_code'])) {
$order->order_discount_code =
$safeHtmlFilter->clean(strip_tags($data['order']['order_discount_code']),
'string');
$do = true;
}
if(isset($data['order']['order_discount_price'])) {
$order->order_discount_price =
(float)hikamarket::toFloat($data['order']['order_discount_price']);
$do = true;
}
if(isset($data['order']['order_discount_tax'])) {
$order->order_discount_tax =
(float)hikamarket::toFloat($data['order']['order_discount_tax']);
$do = true;
}
if(isset($data['order']['order_discount_tax_namekey']))
{
$order->order_discount_tax_namekey =
$safeHtmlFilter->clean(strip_tags($data['order']['order_discount_tax_namekey']),
'string');
$do = true;
}
if(!empty($data['order']['shipping'])) {
if(is_string($data['order']['shipping'])) {
$s =
$safeHtmlFilter->clean(strip_tags($data['order']['shipping']),
'string');
list($shipping_method, $shipping_id) = explode('_', $s, 2);
$order->order_shipping_method = $shipping_method;
$order->order_shipping_id = $shipping_id;
$do = true;
}
if(is_array($data['order']['shipping'])) {
$order->order_shipping_method = '';
$shippings = array();
$order->order_shipping_params->prices = array();
foreach($data['order']['shipping'] as
$shipping_group => $shipping_value) {
list($shipping_method, $shipping_id) = explode('_',
$shipping_value, 2);
$n = $shipping_id . '@' . $shipping_group;
$shippings[] = $n;
$order->order_shipping_params->prices[$n] = new stdClass();
$order->order_shipping_params->prices[$n]->price_with_tax =
(float)hikamarket::toFloat(@$data['order']['order_shipping_prices'][$shipping_group]);
$order->order_shipping_params->prices[$n]->tax =
(float)hikamarket::toFloat(@$data['order']['order_shipping_taxs'][$shipping_group]);
}
$order->order_shipping_id = implode(';', $shippings);
$do = true;
if(!empty($data['order']['warehouses'])) {
$orderProductClass =
hikamarket::get('shop.class.order_product');
$this->db->setQuery('SELECT * FROM
'.hikamarket::table('shop.order_product').' WHERE
order_id = '.(int)$order_id);
$order_products =
$this->db->loadObjectList('order_product_id');
foreach($data['order']['warehouses'] as $pid
=> $w) {
if(isset($order_products[$pid])) {
$p = $order_products[$pid];
list($shipping_method, $shipping_id) = explode('_',
$data['order']['shipping'][$w], 2);
$p->order_product_shipping_id = $shipping_id . '@' .
$w;
$p->order_product_shipping_method = $shipping_method;
$orderProductClass->update($p);
}
}
}
}
}
if(isset($data['order']['order_shipping_price'])) {
$order->order_shipping_price =
(float)hikamarket::toFloat(trim($data['order']['order_shipping_price']));
$do = true;
}
if(isset($data['order']['order_shipping_tax'])) {
$order->order_shipping_tax =
(float)hikamarket::toFloat(trim($data['order']['order_shipping_tax']));
$do = true;
}
if(!empty($data['order']['payment'])) {
list($payment_method, $payment_id) = explode('_',
$data['order']['payment'], 2);
$order->order_payment_method = $payment_method;
$order->order_payment_id = $payment_id;
$do = true;
}
if(isset($data['order']['order_payment_price'])) {
$order->order_payment_price =
(float)hikamarket::toFloat(trim($data['order']['order_payment_price']));
$do = true;
}
if(isset($data['order']['order_payment_tax'])) {
$order->order_payment_tax =
(float)hikashop_toFloat($data['order']['order_payment_tax']);
$do = true;
}
if(isset($data['order']['order_payment_tax_namekey']))
{
$order->order_payment_tax_namekey =
$safeHtmlFilter->clean($data['order']['order_payment_tax_namekey'],
'string');
$do = true;
}
if($do && !empty($history_data)) {
$order->history->history_reason = 'Order additional
modified';
$order->history->history_data = implode('<br/>',
$history_data);
}
}
$currentTask = 'customfields';
$validTasks = array('customfields', 'additional');
if( (empty($task) || in_array($task, $validTasks)) &&
!empty($data[$currentTask]) && !isset($forbidden[$currentTask])
&& (!$acl || hikamarket::acl('order/edit/'.$currentTask))
) {
$old = null;
$orderFields =
$fieldsClass->getInput(array('orderfields','order'),
$old, true, 'data', false, 'backend');
if(!empty($orderFields)) {
$do = true;
foreach($orderFields as $key => $value) {
$order->$key = $value;
}
}
}
$currentTask = 'customer';
if( (empty($task) || $task == $currentTask) &&
!isset($forbidden[$currentTask]) && (!$acl ||
hikamarket::acl('order/edit/'.$currentTask)) ) {
$order_user_id =
(int)$data['order']['order_user_id'];
if($order_user_id > 0) {
$order->order_user_id = $order_user_id;
$do = true;
$set_address =
hikaInput::get()->getInt('set_user_address', 0);
if($set_address) {
$this->db->setQuery('SELECT address_id FROM
'.hikamarket::table('shop.address').' WHERE
address_user_id = '. (int)$order_user_id . ' AND
address_published = 1 ORDER BY address_default DESC, address_id ASC LIMIT
1');
$address_id = $this->db->loadResult();
if($address_id)
$order->order_billing_address_id = (int)$address_id;
}
}
}
$currentTask = 'products';
if( (empty($task) || $task == $currentTask) &&
!empty($data[$currentTask]) && !isset($forbidden[$currentTask])
&& (!$acl || hikamarket::acl('order/edit/'.$currentTask))
) {
$orderProductClass =
hikamarket::get('shop.class.order_product');
$productData = $data['order']['product'];
if(isset($productData['order_id'])) {
$product = new stdClass();
foreach($productData as $key => $value) {
hikamarket::secureField($key);
$product->$key = $safeHtmlFilter->clean($value,
'string');
}
if($order->order_type == 'sale') {
$product_id = (int)$productData['product_id'];
$order_product_id = null;
if(isset($productData['order_product_id']))
$order_product_id = (int)$productData['order_product_id'];
$order_product_vendor_price =
(float)hikamarket::toFloat(trim($productData['order_product_vendor_price']));
$order_product_vendor_id = null;
if(isset($productData['order_product_vendor_id']))
$order_product_vendor_id =
(int)trim($productData['order_product_vendor_id']);
$order_product_quantity = null;
if(isset($data['order']['product']['order_product_quantity']))
$order_product_quantity =
(int)trim($data['order']['product']['order_product_quantity']);
if(empty($order->hikamarket))
$order->hikamarket = new stdClass();
$order->hikamarket->products = array(
$order_product_id => array(
'product_id' => $product_id,
'order_product_id' => $order_product_id,
'vendor_id' => $order_product_vendor_id,
'vendor_price' => $order_product_vendor_price,
)
);
if($order_product_quantity !== null)
$order->hikamarket->products[$order_product_id]['order_product_quantity']
= $order_product_quantity;
unset($product->order_product_vendor_id);
unset($product->order_product_vendor_price);
}
$product->order_id = (int)$order_id;
$orderProductClass->update($product);
} else {
foreach($productData as $data) {
$product = new stdClass();
foreach($data as $key => $value) {
hikamarket::secureField($key);
$product->$key = $safeHtmlFilter->clean(strip_tags($value),
'string');
}
$product->order_id = (int)$order_id;
$orderProductClass->update($product);
}
}
$orderClass->recalculateFullPrice($order);
$do = true;
}
if(!empty($task) && $task == 'product_delete'
&& !isset($forbidden['product_delete']) && (!$acl
|| hikamarket::acl('order/edit/products')) ) {
$order_product_id =
hikaInput::get()->getInt('order_product_id', 0);
if($order_product_id > 0) {
$orderProductClass =
hikamarket::get('shop.class.order_product');
$order_product = $orderProductClass->get($order_product_id);
if(!empty($order_product) && $order_product->order_id ==
$order_id) {
$order_product->order_product_quantity = 0;
$orderProductClass->update($order_product);
$order->history->history_reason = 'Delete order
product';
$order->history->history_data =
JText::sprintf('HIKAM_ORDER_PRODUCT_REMOVED',
$order_product->order_product_name, $order_product->product_id);
$orderClass->recalculateFullPrice($order);
$do = true;
}
}
}
if(!$do)
return false;
if(!empty($data['history']['store_data'])) {
if(isset($data['history']['msg']))
$order->history->history_data =
$safeHtmlFilter->clean($data['history']['msg'],
'string');
else
$order->history->history_data =
$safeHtmlFilter->clean(@$data['history']['history_data'],
'string');
}
$result = $orderClass->save($order);
if($result && $order->order_type == 'subsale'
&& $oldOrder->order_status != $order->order_status) {
$shopConfig = hikamarket::config(false);
$admin_notify_orders = explode(',',
$config->get('admin_notify_subsale',
'cancelled,refunded'));
if(in_array($order->order_status, $admin_notify_orders)) {
$mailClass = hikamarket::get('class.mail');
$vendorClass = hikamarket::get('class.vendor');
$mainVendor = $vendorClass->get(1);
if(empty($mainVendor->vendor_email))
$mainVendor->vendor_email =
$shopConfig->get('payment_notification_email', '');
if(empty($mainVendor->vendor_email))
$mainVendor->vendor_email =
$shopConfig->get('order_creation_notification_email',
'');
if(!isset($order->hikamarket))
$order->hikamarket = new stdClass();
$order->hikamarket->vendor = $mainVendor;
$mailClass->sendVendorOrderEmail($order);
}
}
return $result;
}
}
helpers/toggle.php000064400000010770151160562420010207 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketToggleHelper{
private $ctrl = 'toggle';
private $extra = '';
private $token = '';
public function __construct() {
$this->token = hikamarket::getFormToken(); //
'&'.hikamarket::getFormToken().'=1';
}
private function getToggle($column, $table = ''){
$params = new stdClass();
$params->mode = 'pictures';
$params->values = array(
0 => 1,
1 => 0
);
$params->aclass = array(
0 => 'unpublish',
1 => 'publish'
);
return $params;
}
public function toggle($id, $value, $table, $extra = null) {
static $jsIncluded = false;
$column = substr($id, 0, strpos($id, '-'));
$params = $this->getToggle($column, $table);
$newValue = $params->values[$value];
if(!$jsIncluded && ($params->mode == 'pictures' ||
$params->mode == 'class')) {
$jsIncluded = true;
$js = 'function
hikamToggleElem(el,id,v,t,e){'."\r\n".
'var w=window, d=document, o=w.Oby,
el=el.parentNode;'."\r\n".
'if(!el) return; el.className="toggle_onload";'.
'var
url="'.hikamarket::completeLink($this->ctrl,true,true).'";'."\r\n".
'var
data=o.encodeFormData({"task":id,"value":v,"table":t,"'.$this->token.'":1});'.
// &task={TASK-}&value={VALUE-}&table={TABLE-}
'o.xRequest(url,{update:el,mode:"POST",data:data},function(x,p){el.className="toggle_loading";});'."\r\n".
'}';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
}
if($params->mode == 'pictures') {
$desc = empty($params->description[$value]) ? '' :
$params->description[$value];
if(empty($params->pictures)) {
$text = ' ';
$class='class="'.$params->aclass[$value].'"';
} else {
$text = '<img
src="'.$params->pictures[$value].'"/>';
$class = '';
}
$return = '<a href="javascript:void(0);"
'.$class.'
onclick="hikamToggleElem(this,\''.$id.'\',\''.$newValue.'\',\''.$table.'\')"
title="'.str_replace('"','"',$desc).'">'.$text.'</a>';
if(hikaInput::get()->getCmd('ctrl') != 'toggle')
$return = '<div class="toggle_loading">' .
$return . '</div>';
return $return;
}
if($params->mode == 'class') {
$desc = empty($params->description[$value]) ? '' :
$params->description[$value];
$return = '<a href="javascript:void(0);"
onclick="hikamToggleElem(this,\''.$id.'\',\''.$newValue.'\',\''.$table.'\',\''.urlencode($extra['color']).'\');"
title="'.str_replace('"','"',$desc).'"><div
class="'. $params->class[$value] .'"
style="background-color:'.$extra['color'].'">';
if(!empty($extra['tooltip']))
$return .= JHTML::_('tooltip', $extra['tooltip'],
'','',' ');
$return .= '</div></a>';
if(hikaInput::get()->getCmd('ctrl') != 'toggle')
$return = '<div class="toggle_loading">' .
$return . '</div>';
return $return;
}
return '';
}
public function display($column, $value) {
$params = $this->getToggle($column);
if(empty($params->pictures)) {
return '<div class="toggle_loading"><a
class="'.$params->aclass[$value].'"
href="#" onclick="return false;"
style="cursor:default;"></a></div>';
}
return '<img
src="'.$params->pictures[$value].'"/>';
}
public function delete($lineId, $elementids, $table, $confirm = false,
$text = '') {
static $jsIncluded = false;
if(!$jsIncluded) {
$jsIncluded = true;
$js = 'function
hikamDeleteElem(el,id,v,t,r){'."\r\n".
'var w=window, d=document, o=w.Oby,
el=el.parentNode;'."\r\n".
'if(r &&
!confirm("'.JText::_('HIKA_VALIDDELETEITEMS',true).'"))
return false;'."\r\n".
'var
url="'.hikamarket::completeLink($this->ctrl.$this->extra,
true, false, true).'";'.
'var
data=o.encodeFormData({"task":"delete","value":v,"table":t,"'.$this->token.'":1});'.
'o.xRequest(url,{mode:"POST",data:data},function(x,p){if(x.responseText
!= "1") { alert(x.responseText); return; } var e =
d.getElementById(id); if(e) e.style.display="none"; else
el.style.display="none";});'."\r\n".
'}';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
}
if(empty($text))
$text = '<i class="far
fa-trash-alt"></i>';
return '<a href="javascript:void(0);"
onclick="hikamDeleteElem(this,\''.$lineId.'\',\''.$elementids.'\',\''.$table.'\','.
($confirm ? 'true' :
'false').')">'.$text.'</a>';
}
}
helpers/toolbar.php000064400000002542151160562420010366 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$app = JFactory::getApplication();
if($app->isAdmin()) {
include_once(HIKASHOP_HELPER.'toolbar.php');
class hikamarketToolbarHelper extends hikashopToolbarHelper {
public function customTool(&$bar, $toolname, $tool) {
switch($toolname) {
case 'shopdashboard':
$bar->appendButton('Link', HIKASHOP_J30 ?
'dashboard' : 'hikashop',
JText::_('HIKASHOP_CPANEL'),
hikamarket::completeLink('shop.dashboard'));
return true;
case 'dashboard':
$bar->appendButton('Link', HIKASHOP_J30 ?
'dashboard' : HIKAMARKET_LNAME,
JText::_('HIKAMARKET_CPANEL'),
hikamarket::completeLink('dashboard'));
return true;
}
return false;
}
}
} else {
class hikamarketToolbarHelper {
public $aliases;
public function __construct() {
$this->aliases = array();
}
public function process($toolbar) {
$ret = '';
if(empty($toolbar))
return $ret;
$js = null;
$params = new HikaParameter();
$params->set('toolbar', $toolbar);
echo hikamarket::getLayout('toolbar', 'default',
$params, $js);
}
}
}
helpers/update.php000064400000051047151160562420010212 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketUpdateHelper {
private $db;
public function __construct() {
$this->db = JFactory::getDBO();
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
$this->update = hikaInput::get()->getBool('update');
}
public function addDefaultModules() {
}
public function createUploadFolders() {
$file = hikamarket::get('shop.class.file');
$path = $file->getPath('file');
if(!JFile::exists($path.'.htaccess')) {
$text = 'deny from all';
JFile::write($path.'.htaccess', $text);
}
$path = $file->getPath('image');
}
public function installExtensions() {
$path = HIKAMARKET_BACK.'extensions';
if(!is_dir($path))
return;
$dirs = JFolder::folders($path);
$query = 'SELECT CONCAT(`folder`,`element`) FROM `#__extensions`
WHERE `folder` IN '.
"(
'hikashop','hikamarket','hikashoppayment' )
".
"OR `element` LIKE '%hikamarket%' OR `element` LIKE
'%_market_%' OR `element` LIKE '%hikashop%' ";
$this->db->setQuery($query);
$existingExtensions = $this->db->loadColumn();
$success = array();
$plugins = array();
$modules = array();
$exts = array(
'plg_hikashop_market' => array('HikaMarket - HikaShop
Integration plugin', 0, 1),
'plg_system_hikamarketoverrides' => array('HikaMarket
- HikaShop overrides plugin', 0, 1),
'plg_hikashoppayment_mangopay' => array('Hikashop
(market) MangoPay Adaptive Payment Plugin', 0, 0),
'plg_hikashoppayment_paypaladaptive' =>
array('Hikashop (market) Paypal Adaptive Payment Plugin', 0, 1),
'mod_market_locationsearch' => array('HikaMarket
Location Search module', 0, 0),
'plg_hikamarket_duplicateproducts' =>
array('HikaMarket - Duplicate products', 0, 0),
'plg_hikamarket_mangopay' => array('HikaMarket
MangoPay integration', 0, 0),
'plg_hikamarket_vendorlocationfilter' =>
array('HikaMarket Vendor User Location Filter', 0, 0),
'plg_hikamarket_vendorusergroup' => array('HikaMarket
vendor user group', 0, 0),
'plg_hikashop_market_vendorselectfield' =>
array('HikaShop: Vendor Selection Custom Field', 0, 1),
'plg_hikashop_marketmodule_vendorrelated' =>
array('HikaShop - Vendor same products (listing module)', 0, 0),
'plg_hikashop_productfiltervendor' => array('HikaShop
- Product Filter for vendors', 0, 0),
'plg_hikashop_productforcevendorcategory' =>
array('HikaShop - product force vendor category', 0, 0),
'plg_hikashop_userpointstovendor' => array('Hikashop -
UserPoints to Vendor', 0, 0),
'plg_hikashop_vendorgroupafterpurchase' =>
array('HikaShop - Vendor group after purchase', 0, 1),
'plg_hikashop_vendorlocationfilter' => array('HikaShop
Vendor User Location Filter', 1, 0),
'plg_hikashop_vendorpoints' => array('HikaShop -
Vendor points', 0, 1),
'plg_search_hikamarket_vendors' => array('Search -
HikaMarket Vendors', 0, 1),
'plg_user_hikamarket_vendorgroup' => array('HikaMarket
Vendor groups', 0, 1),
);
$listTables = $this->db->getTableList();
$this->errors = array();
foreach($dirs as $dir) {
$arguments = explode('_', $dir, 3);
$report = true;
if(!empty($exts[$dir][3])) {
$report = false;
}
$prefix = array_shift($arguments);
if($prefix != 'plg' && $prefix != 'mod') {
hikamarket::display('Could not handle : '.$dir,
'error');
continue;
}
$newExt = new stdClass();
$newExt->enabled = 1;
$newExt->params = '{}';
$newExt->name = isset($exts[$dir][0])?$exts[$dir][0]:$dir;
$newExt->ordering = isset($exts[$dir][1])?$exts[$dir][1]:0;
if(!isset($exts[$dir]) &&
function_exists('simplexml_load_file')) {
if($prefix == 'plg')
$xmlFile = $path.DS.$dir.DS.$arguments[1].'.xml';
else
$xmlFile = $path.DS.$dir.DS.$dir.'.xml';
$xml = simplexml_load_file($xmlFile);
if (!empty($xml) && ($xml->getName() == 'install'
|| $xml->getName() == 'extension')) {
$newExt->name = (string)$xml->name;
if(isset($xml->hikainstall)) {
$attribs = $xml->hikainstall->attributes();
$newExt->ordering = (int)$attribs->ordering;
$newExt->enabled = (int)$attribs->enable;
$report = (int)$attribs->report;
}
}
unset($xml);
}
if($prefix == 'plg') {
$newExt->type = 'plugin';
$newExt->folder = array_shift($arguments);
$newExt->element = implode('_', $arguments);
if(isset($exts[$dir][2]) && is_numeric($exts[$dir][2])) {
$newExt->enabled = (int)$exts[$dir][2];
}
if(!hikamarket::createDir(HIKAMARKET_ROOT.'plugins'.DS.$newExt->folder,
$report))
continue;
$destinationFolder =
HIKAMARKET_ROOT.'plugins'.DS.$newExt->folder.DS.$newExt->element;
if(!hikamarket::createDir($destinationFolder))
continue;
if(!$this->copyFolder($path.DS.$dir, $destinationFolder))
continue;
if(in_array($newExt->folder.$newExt->element,
$existingExtensions))
continue;
$plugins[] = $newExt;
} else {
$newExt->type = 'module';
$newExt->folder = '';
$newExt->element = $dir;
$destinationFolder = HIKAMARKET_ROOT.'modules'.DS.$dir;
if(!hikamarket::createDir($destinationFolder))
continue;
if(!$this->copyFolder($path.DS.$dir, $destinationFolder))
continue;
if(in_array($newExt->element, $existingExtensions))
continue;
$modules[] = $newExt;
}
}
if(!empty($this->errors))
hikamarket::display($this->errors, 'error');
if( empty($plugins) && empty($modules) ) {
return;
}
$extensions = array_merge($plugins, $modules);
$success = array();
if(!empty($extensions)) {
$query = 'INSERT INTO `#__extensions`
(`name`,`element`,`folder`,`enabled`,`ordering`,`type`,`access`) VALUES
';
$sep = '';
foreach($extensions as $oneExt) {
$query .=
$sep.'('.$this->db->Quote($oneExt->name).','.$this->db->Quote($oneExt->element).','.$this->db->Quote($oneExt->folder).','.$oneExt->enabled.','.$oneExt->ordering.','.$this->db->Quote($oneExt->type).',1)';
if($oneExt->type!='module') {
$success[] = JText::sprintf('PLUG_INSTALLED',
$oneExt->name);
}
$sep = ',';
}
$this->db->setQuery($query);
$this->db->execute();
}
if(!empty($modules)) {
foreach($modules as $oneModule) {
$query = 'INSERT INTO `#__modules`
(`title`,`position`,`published`,`module`,`access`,`language`) VALUES
'.
'('.$this->db->Quote($oneModule->name).",'position-7',0,".$this->db->Quote($oneModule->element).",1,'*')";
$this->db->setQuery($query);
$this->db->execute();
$moduleId = $this->db->insertid();
$this->db->setQuery('INSERT IGNORE INTO `#__modules_menu`
(`moduleid`,`menuid`) VALUES ('.$moduleId.',0)');
$this->db->execute();
$success[] = JText::sprintf('MODULE_INSTALLED',
$oneModule->name);
}
}
if(!empty($success)) {
hikamarket::display($success, 'success');
}
}
public function copyFolder($from, $to) {
$ret = true;
$allFiles = JFolder::files($from);
foreach($allFiles as $oneFile) {
if(file_exists($to.DS.'index.html') && $oneFile ==
'index.html')
continue;
if(JFile::copy($from.DS.$oneFile,$to.DS.$oneFile) !== true) {
$this->errors[] = 'Could not copy the file from
'.$from.DS.$oneFile.' to '.$to.DS.$oneFile;
$ret = false;
}
}
$allFolders = JFolder::folders($from);
if(!empty($allFolders)) {
foreach($allFolders as $oneFolder) {
if(!hikamarket::createDir($to.DS.$oneFolder))
continue;
if(!$this->copyFolder($from.DS.$oneFolder,$to.DS.$oneFolder))
$ret = false;
}
}
return $ret;
}
public function installMenu($code = '') {
if(empty($code)) {
$lang = JFactory::getLanguage();
$code = $lang->getTag();
}
$path =
hikashop_getLanguagePath(JPATH_ROOT).DS.$code.DS.$code.'.'.HIKAMARKET_COMPONENT.'.ini';
if(!file_exists($path))
return;
$content = file_get_contents($path);
if(empty($content))
return;
$menuFileContent =
strtoupper(HIKAMARKET_COMPONENT).'="'.HIKAMARKET_NAME.'"'."\r\n".strtoupper(HIKAMARKET_NAME).'="'.HIKAMARKET_NAME.'"'."\r\n";
$menuStrings =
array('CONFIG','VENDORS','HELP','UPDATE_ABOUT');
foreach($menuStrings as $s) {
preg_match('#(\n|\r)(HIKA_)?'.$s.'="(.*)"#i',$content,$matches);
if(empty($matches[3]))
continue;
$menuFileContent .=
$s.'="'.$matches[3].'"'."\r\n";
}
preg_match_all('#(\n|\r)(COM_HIKAMARKET_.*)="(.*)"#iU',
$content, $matches);
if(!empty($matches))
$menuFileContent .= implode('', $matches[0]);
$menuFileContent .= "\r\n" . strtoupper(HIKAMARKET_COMPONENT) .
'_CONFIGURATION="'.HIKAMARKET_NAME.'"';
$menuPath =
HIKAMARKET_ROOT.'administrator'.DS.'language'.DS.$code.DS.$code.'.'.HIKAMARKET_COMPONENT.'.sys.ini';
if(!JFile::write($menuPath, $menuFileContent)) {
hikamarket::display(JText::sprintf('FAIL_SAVE',$menuPath),'error');
}
}
private function installOne($folder) {
if(empty($folder))
return false;
unset($GLOBALS['_JREQUEST']['installtype']);
unset($GLOBALS['_JREQUEST']['install_directory']);
hikaInput::get()->set('installtype', 'folder');
hikaInput::get()->set('install_directory', $folder);
$_REQUEST['installtype'] = 'folder';
$_REQUEST['install_directory'] = $folder;
$controller = new hikashopBridgeController(array(
'base_path'=>
HIKAMARKET_ROOT.'administrator'.DS.'components'.DS.'com_installer',
'name' => 'Installer',
'default_task' => 'installform'
));
$model = $controller->getModel('Install');
return $model->install();
}
public function getUrl() {
$urls = parse_url(HIKAMARKET_LIVE);
$lurl = preg_replace('#^www2?\.#Ui', '',
$urls['host'], 1);
if(!empty($urls['path']))
$lurl .= $urls['path'];
return strtolower(rtrim($lurl, '/'));
}
public function addJoomfishElements() {
$dstFolder =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_joomfish'.DS.'contentelements'.DS;
if(JFolder::exists($dstFolder)) {
$srcFolder = HIKAMARKET_BACK.'translations'.DS;
$files = JFolder::files($srcFolder);
if(!empty($files)) {
foreach($files as $file) {
JFile::copy($srcFolder.$file,$dstFolder.$file);
}
}
}
return true;
}
public function addUpdateSite() {
$config = hikamarket::config();
$newconfig = new stdClass();
$newconfig->website = HIKASHOP_LIVE;
$config->save($newconfig);
$query = 'SELECT update_site_id FROM #__update_sites WHERE location
LIKE \'%hikamarket%\' AND type = \'extension\'';
$this->db->setQuery($query);
$update_site_id = $this->db->loadResult();
$object = new stdClass();
$object->name = 'Hikamarket';
$object->type = 'extension';
$object->enabled = 1;
$object->location =
'http://www.hikashop.com/component/updateme/updatexml/component-hikamarket/version-'.$config->get('version').'/level-'.$config->get('level').'/li-'.urlencode(base64_encode(HIKASHOP_LIVE)).'/file-extension.xml';
if(empty($update_site_id)){
$this->db->insertObject('#__update_sites', $object);
$update_site_id = $this->db->insertid();
} else {
$object->update_site_id = $update_site_id;
$this->db->updateObject('#__update_sites', $object,
'update_site_id');
}
$query = 'SELECT extension_id FROM #__extensions WHERE `name` =
\'hikamarket\' AND type = \'component\'';
$this->db->setQuery($query);
$extension_id = $this->db->loadResult();
if(empty($update_site_id) || empty($extension_id))
return false;
$query = 'INSERT IGNORE INTO #__update_sites_extensions
(update_site_id, extension_id) values
('.$update_site_id.','.$extension_id.')';
$this->db->setQuery($query);
$this->db->execute();
return true;
}
public function addDefaultData() {
$query = 'SELECT * FROM `#__menu` WHERE `title` IN
(\'com_hikamarket\',\'hikamarket\',\'HikaMarket\')
AND `client_id`=1 AND `parent_id`=1 AND menutype IN
(\'main\',\'mainmenu\',\'menu\')';
$this->db->setQuery($query);
$parentData = $this->db->loadObject();
$parent = $parentData->id;
$query = 'SELECT id FROM `#__menu` WHERE
`parent_id`='.$parent;
$this->db->setQuery($query);
$submenu = $this->db->loadColumn();
$old = count($submenu);
$query = 'DELETE FROM `#__menu` WHERE `parent_id`='.$parent;
$this->db->setQuery($query);
$this->db->execute();
$query = 'UPDATE `#__menu` SET `rgt`=`rgt`-'.($old*2).'
WHERE `rgt`>='.$parentData->rgt;
$this->db->setQuery($query);
$this->db->execute();
$elems = array(
array('config', 'icon-16-config.png',
'Configuration', 'Configuration'),
array('vendor', 'icon-16-user.png',
'Vendors', 'Vendors'),
array('plugins', 'icon-16-plugin.png',
'Plugins', 'Plugins'),
array('documentation', 'icon-16-help.png',
'Help', 'Help'),
array('update', 'icon-16-help-jrd.png', 'Update
/ About', 'Update_About'),
);
$nbItems = count($elems) * 2;
$query = 'UPDATE `#__menu` SET `rgt`=`rgt` + '.$nbItems.'
WHERE `rgt`>='.$parentData->rgt;
$this->db->setQuery($query);
$this->db->execute();
$query = 'UPDATE `#__menu` SET `lft`=`lft` + '.$nbItems.'
WHERE `lft`>'.$parentData->lft;
$this->db->setQuery($query);
$this->db->execute();
$left = $parentData->lft;
$cid = $parentData->component_id;
$query = 'INSERT IGNORE INTO `#__menu`
(`type`,`link`,`menutype`,`img`,`alias`,`title`,`client_id`,`parent_id`,`level`,`language`,`lft`,`rgt`,`component_id`)
VALUES ';
$l = $left;
foreach($elems as $k => $elem) {
if($k > 0)
$query .= ',';
$query .=
"('component','index.php?option=com_hikamarket&ctrl=".$elem[0]."','".$parentData->menutype."','./templates/bluestork/images/menu/".$elem[1]."','".$elem[2]."','".$elem[3]."',1,".$parent.",2,'*',".($l+1).",".($l+2).",".$cid.")";
$l += 2;
}
$this->db->setQuery($query);
$this->db->execute();
}
public function onBeforecheckDB(&$createTable, &$custom_fields,
&$structure, &$helper) {
$structs = array(
'user' => array(
'user_vendor_id' => 'user_vendor_id INT(10) NOT NULL
DEFAULT 0',
'user_vendor_access' => 'user_vendor_access text NOT
NULL DEFAULT \'\''
),
'product' => array(
'product_status' => 'product_status VARCHAR(255) NOT
NULL DEFAULT \'\'',
'product_vendor_params' => 'product_vendor_params
TEXT NOT NULL DEFAULT \'\''
),
'order' => array(
'order_parent_id' => 'order_parent_id INT(10) NOT
NULL DEFAULT 0',
'order_vendor_id' => 'order_vendor_id INT(10) NOT
NULL DEFAULT 0',
'order_vendor_price' => 'order_vendor_price
decimal(12,5) NOT NULL DEFAULT \'0.00000\'',
'order_vendor_paid' => 'order_vendor_paid INT(10) NOT
NULL DEFAULT 0',
'order_vendor_params' => 'order_vendor_params TEXT
NOT NULL DEFAULT \'\''
),
'order_product' => array(
'order_product_parent_id' => 'order_product_parent_id
INT(10) NOT NULL DEFAULT 0',
'order_product_vendor_price' =>
'order_product_vendor_price decimal(12,5) NOT NULL DEFAULT
\'0.00000\'',
),
'discount' => array(
'discount_target_vendor' => 'discount_target_vendor
INT(10) NOT NULL DEFAULT 0'
),
'characteristic' => array(
'characteristic_vendor_id' =>
'characteristic_vendor_id INT(10) NOT NULL DEFAULT 0'
),
'shipping' => array(
'shipping_vendor_id' => 'shipping_vendor_id INT(10)
NOT NULL DEFAULT 0'
),
'payment' => array(
'payment_vendor_id' => 'payment_vendor_id INT(10) NOT
NULL DEFAULT 0'
),
'plugin' => array(
'plugin_vendor_id' => 'plugin_vendor_id INT(10) NOT
NULL DEFAULT 0'
),
);
foreach($structs as $k => $v) {
if(!isset($structure['#__hikashop_'.$k]))
continue;
$structure['#__hikashop_'.$k] =
array_merge($structure['#__hikashop_'.$k], $v);
}
}
public function onAfterCheckDB(&$ret) {
$query = 'INSERT IGNORE INTO
`'.hikamarket::table('customer_vendor').'`
(customer_id, vendor_id) '.
' SELECT DISTINCT order_user_id, order_vendor_id FROM
`'.hikamarket::table('shop.order').'` AS o '.
' WHERE o.order_type = ' .
$this->db->Quote('subsale') . ' AND o.order_vendor_id
> 1';
try {
$this->db->setQuery($query);
$result = $this->db->execute();
if($result){
$ret[] = array(
'success',
'Customer vendor synchronized'
);
}
} catch(Exception $e) {
$ret[] = array(
'error',
$e->getMessage()
);
}
}
public function processMigration_Transaction() {
$app = JFactory::getApplication();
$config = hikamarket::config();
$valid_order_statuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
foreach($valid_order_statuses as &$valid_order_status) {
$valid_order_status = $this->db->Quote($valid_order_status);
}
unset($valid_order_status);
$query = 'INSERT IGNORE INTO `#__hikamarket_order_transaction`
'.
' (order_id, vendor_id, order_transaction_created,
order_transaction_status, order_transaction_price,
order_transaction_currency_id, order_transaction_paid,
order_transaction_valid)'.
' SELECT o.order_parent_id, o.order_vendor_id, o.order_created,
o.order_status, o.order_vendor_price, o.order_currency_id,
o.order_vendor_paid, 0 '.
' FROM `#__hikashop_order` AS o WHERE o.order_type =
\'subsale\'';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) { hikashop_writeToLog('Error during migration:
Transactions 01', 'HikaMarket'); }
$query = 'UPDATE `#__hikamarket_order_transaction` SET
order_transaction_valid = 1 WHERE order_transaction_status IN
('.implode(',', $valid_order_statuses).')';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) { hikashop_writeToLog('Error during migration:
Transactions 02', 'HikaMarket'); }
$query = 'INSERT IGNORE INTO `#__hikamarket_order_transaction`
'.
' (order_id, vendor_id, order_transaction_created,
order_transaction_status, order_transaction_price,
order_transaction_currency_id, order_transaction_paid,
order_transaction_valid)'.
' SELECT vr.order_parent_id, vr.order_vendor_id, o.order_created,
vr.order_status, vr.order_vendor_price, o.order_currency_id,
vr.order_vendor_paid, 2 '.
' FROM `#__hikashop_order` AS vr INNER JOIN `#__hikashop_order` AS
o ON o.order_id = vr.order_parent_id '.
' WHERE vr.order_type = \'vendorrefund\' AND
vr.order_vendor_price != 0.00';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) { hikashop_writeToLog('Error during migration:
Transactions 03', 'HikaMarket'); }
$query = 'UPDATE `#__hikashop_order` SET order_type =
\'vendorrefund_legacy\' WHERE order_type =
\'vendorrefund\'';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) { hikashop_writeToLog('Error during migration:
Transactions 04', 'HikaMarket'); }
$query = 'UPDATE `#__hikashop_order` AS o INNER JOIN
`#__hikashop_order` AS op ON o.order_parent_id = op.order_id '.
' SET o.order_status = op.order_status WHERE o.order_type =
\'subsale\' AND o.order_vendor_paid > 0';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) { hikashop_writeToLog('Error during migration:
Transactions 05', 'HikaMarket'); }
$query = 'UPDATE `#__hikashop_order` AS o INNER JOIN ( '.
' SELECT order_parent_id, order_vendor_id, order_vendor_price as
total '.
' FROM `#__hikashop_order` WHERE order_type =
\'vendorrefund_legacy\' AND order_parent_id > 0 '.
' ) AS sub ON o.order_parent_id = sub.order_parent_id AND
o.order_vendor_id = sub.order_vendor_id '.
' SET o.order_vendor_price = o.order_vendor_price + sub.total
'.
' WHERE o.order_type = \'subsale\' AND o.order_status IN
('.implode(',', $valid_order_statuses).') AND
o.order_vendor_paid > 0 AND sub.total != 0.00 ';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) { hikashop_writeToLog('Error during migration:
Transactions 06', 'HikaMarket'); }
$query = 'UPDATE `#__hikashop_order` AS o INNER JOIN ( '.
' SELECT order_parent_id, order_vendor_id, order_vendor_price as
total '.
' FROM `#__hikashop_order` WHERE order_type =
\'vendorrefund_legacy\' AND order_parent_id > 0 '.
' ) AS sub ON o.order_parent_id = sub.order_parent_id AND
o.order_vendor_id = sub.order_vendor_id '.
' SET o.order_vendor_price = -sub.total '.
' WHERE o.order_type = \'subsale\' AND o.order_status NOT
IN ('.implode(',', $valid_order_statuses).') AND
o.order_vendor_paid > 0 AND sub.total != 0.00 ';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) { hikashop_writeToLog('Error during migration:
Transactions 07', 'HikaMarket');}
}
}
helpers/upload.php000064400000037272151160562420010220 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketUploadHelper {
protected $options;
protected $imagesExt = array('jpg', 'jpeg',
'gif', 'png');
public function __construct() {
$this->setOptions();
}
public function setOptions($options = null) {
$this->options = array(
'upload_dir' => HIKASHOP_MEDIA.'upload'.DS,
'upload_url' =>
JURI::base(true).'/media/'.HIKASHOP_COMPONENT.'/upload/',
'param_name' => 'files',
'max_file_size' => null,
'min_file_size' => 1,
'accept_file_types' => '/.+$/i',
'max_number_of_files' => null,
'max_width' => null,
'max_height' => null,
'min_width' => 1,
'min_height' => 1,
'send_header' => false,
'orient_image' => false,
'image_versions' => array()
);
if(empty($options))
return;
foreach($options as $k => $v) {
if(!is_array($v) || empty($this->options[$k]))
$this->options[$k] = $v;
else
$this->options[$k] = array_merge($this->options[$k], $v);
}
}
public function process($options = null) {
JSession::checkToken() || die('Invalid Token');
if(!empty($options))
$this->setOptions($options);
if(!empty($this->options['send_header']) &&
!headers_sent()) {
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('X-Content-Type-Options: nosniff');
}
$upload = reset($_FILES);
if(isset($_FILES[$this->options['param_name']]))
$upload = $_FILES[$this->options['param_name']];
if(empty($upload))
return null;
$uploaded_file = isset($upload['tmp_name']) ?
$upload['tmp_name'] : null;
$name = isset($_SERVER['HTTP_X_FILE_NAME']) ?
$_SERVER['HTTP_X_FILE_NAME'] : (isset($upload['name'])
? $upload['name'] : null);
$size = isset($_SERVER['HTTP_X_FILE_SIZE']) ?
$_SERVER['HTTP_X_FILE_SIZE'] : (isset($upload['size'])
? $upload['size'] : null);
$type = isset($_SERVER['HTTP_X_FILE_TYPE']) ?
$_SERVER['HTTP_X_FILE_TYPE'] : (isset($upload['type'])
? $upload['type'] : null);
$error = isset($upload['error']) ? $upload['error'] :
null;
$slice = null;
if(isset($_POST['slices']) &&
(int)$_POST['slices'] > 1) {
$slice = array(
'index' => (int)@$_POST['slice'],
'total' => $_POST['slices'],
'size' => (int)@$_POST['slice_size'],
'total_size' => (int)@$_POST['slices_size'],
);
}
$file = new stdClass();
$file->name = $this->trim_file_name($name, $type);
$file->size = intval($size);
$file->type = $type;
if(empty($this->options['sub_folder']))
$this->options['sub_folder'] = '';
$shopConfig = hikashop_config();
if($options['type'] == 'file')
$allowed_extensions = $shopConfig->get('allowedfiles');
else
$allowed_extensions = $shopConfig->get('allowedimages');
if(!empty($this->options['allowed_extensions'])) {
$allowed_extensions =
$this->options['allowed_extensions'];
}
if(!empty($error)) {
$file->error = $error;
} else if(empty($file->name)) {
$file->error = 'missingFileName';
} else if(!is_uploaded_file($uploaded_file)) {
$file->error = 'missingData';
} else if(!empty($this->options['max_file_size']) &&
$file->size > $this->options['max_file_size']) {
$file->error = 'maxFileSize';
} else if(!empty($this->options['max_file_size']) &&
isset($slice['total_size']) &&
$slice['total_size'] >
$this->options['max_file_size']) {
$file->error = 'maxFileSize';
} else if(!empty($this->options['min_file_size']) &&
$file->size < $this->options['min_file_size']) {
$file->error = 'minFileSize';
}
if(!empty($file->error))
return $file;
$file_path = strtolower(JFile::makeSafe($name));
if(!strpos($file_path, '.')){
$file->error = 'The file name "' . $name .
'" is not valid. Please change it.';
return $file;
}
if(!empty($slice) && $slice['index'] > 0 &&
substr($file_path, -5) == '.part') {
$pos = strrpos($file_path, '_');
$file_path = substr($file_path, 0, $pos);
}
if(!preg_match('#\.('.str_replace(array(',','.'),
array('|','\.'),
$allowed_extensions).')$#Ui', $file_path, $extension) ||
preg_match('#\.(php.?|.?htm.?|pl|py|jsp|asp|sh|cgi)$#Ui',
$file_path)) {
$file->error = JText::sprintf('ACCEPTED_TYPE',
substr($file_path,strrpos($file_path, '.') + 1),
$allowed_extensions);
return $file;
}
$file_path = str_replace(array('.',' '),
'_', substr($file_path, 0, strpos($file_path,$extension[0]))) .
$extension[0];
if(empty($slice) || $slice['index'] == 0) {
$file_path_origin = $file_path;
if(JFile::exists($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path)) {
$pos = strrpos($file_path, '.');
$file_path = substr($file_path, 0, $pos) . '_' . rand() .
'.' . substr($file_path, $pos + 1);
}
if(!empty($slice)) {
$pos = strrpos($file_path, '.');
$file_path .= '_' . $slice['total_size'] .
'-' . $slice['size'] . '.part';
$file->partial = true;
if(JFile::exists($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path)) {
clearstatcache();
$current_filesize = filesize($this->options['upload_dir']
. $this->options['sub_folder'] . $file_path);
$current_slice = $current_filesize / $slice['size'];
if(is_int($current_slice)) {
$file->name = $file_path;
$file->resume = true;
$file->slice = $current_slice;
return $file;
}
$pos = strrpos($file_path_origin, '.');
$file_path = substr($file_path_origin, 0, $pos) . '_' .
rand() . '.' . substr($file_path_origin, $pos + 1) .
'_' . $slice['total_size'] . '-' .
$slice['size'] . '.part';
}
}
if(!JFile::upload($uploaded_file,
$this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path)) {
if(!move_uploaded_file($uploaded_file,
$this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path)) {
$file->error = JText::sprintf('FAIL_UPLOAD',
$uploaded_file, $this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path);
return $file;
}
}
} else {
$file_path = strtolower(JFile::makeSafe($name));
if(substr($file_path, -5) != '.part' ||
!JFile::exists($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path)) {
$file->error = 'partialUploadNotFound';
return $file;
}
clearstatcache();
$current_filesize = filesize($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path);
if($current_filesize != ((int)$slice['index'] *
(int)$slice['size'])) {
$file->error = 'partialUploadInvalid';
return $file;
}
$destFile = fopen($this->options['upload_dir'] .
$this->options['sub_folder'] .$file_path, 'ab');
$sourceFile = fopen($uploaded_file, 'rb');
while(!feof($sourceFile)) {
$c = fread($sourceFile, 8192);
fwrite($destFile, $c);
}
fclose($destFile);
fclose($sourceFile);
if(((int)$slice['index'] + 1) ==
(int)$slice['total']) {
clearstatcache();
$current_filesize = filesize($this->options['upload_dir']
. $this->options['sub_folder'] . $file_path);
if((int)$current_filesize != (int)$slice['total_size']) {
$file->error = 'partialUploadSizeError';
return $file;
}
$pos = strrpos($file_path, '_');
$orgin_path = substr($file_path, 0, $pos);
rename($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path,
$this->options['upload_dir'] .
$this->options['sub_folder'] . $orgin_path);
$file_path = $orgin_path;
} else
$file->partial = true;
}
if($options['type'] != 'file' &&
strpos($file->name, '.') !== false &&
!empty($this->options['orient_image'])) {
$ext = strtolower(substr($file->name, strrpos($file->name,
'.') + 1));
if(!in_array($ext, $this->imagesExt))
$this->orient_image($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path);
}
$file->name = $file_path;
$file->path = $this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path;
$file->url = $this->options['upload_url'] .
$this->options['sub_folder'] . rawurlencode($file->name);
$file->size = filesize($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path);
return $file;
}
public function processFallback($options = null) {
JSession::checkToken() || die('Invalid Token');
if(!empty($options)) {
$this->setOptions($options);
}
$upload = isset($_FILES[$this->options['param_name']]) ?
$_FILES[$this->options['param_name']] : reset($_FILES);
$info = array();
if($upload && is_array($upload['tmp_name'])) {
foreach ($upload['tmp_name'] as $index => $value) {
$info[] = $this->handle_file_upload(
$upload['tmp_name'][$index],
isset($_SERVER['HTTP_X_FILE_NAME']) ?
$_SERVER['HTTP_X_FILE_NAME'] :
$upload['name'][$index],
isset($_SERVER['HTTP_X_FILE_SIZE']) ?
$_SERVER['HTTP_X_FILE_SIZE'] :
$upload['size'][$index],
isset($_SERVER['HTTP_X_FILE_TYPE']) ?
$_SERVER['HTTP_X_FILE_TYPE'] :
$upload['type'][$index],
$upload['error'][$index],
$options,
$index
);
}
} else if($upload || isset($_SERVER['HTTP_X_FILE_NAME'])) {
$info[] = $this->handle_file_upload(
isset($upload['tmp_name']) ? $upload['tmp_name'] :
null,
isset($_SERVER['HTTP_X_FILE_NAME']) ?
$_SERVER['HTTP_X_FILE_NAME'] : (isset($upload['name'])
? $upload['name'] : null),
isset($_SERVER['HTTP_X_FILE_SIZE']) ?
$_SERVER['HTTP_X_FILE_SIZE'] : (isset($upload['size'])
? $upload['size'] : null),
isset($_SERVER['HTTP_X_FILE_TYPE']) ?
$_SERVER['HTTP_X_FILE_TYPE'] : (isset($upload['type'])
? $upload['type'] : null),
isset($upload['error']) ? $upload['error'] : null,
$options
);
}
return $info;
}
protected function get_file_object($file_name) {
$file_path = $this->options['upload_dir'].$file_name;
if (is_file($file_path) && $file_name[0] !== '.') {
$file = new stdClass();
$file->name = $file_name;
$file->path = $file_path;
$file->size = filesize($file_path);
$file->url =
$this->options['upload_url'].rawurlencode($file->name);
return $file;
}
return null;
}
protected function get_file_objects() {
if(!is_dir($this->options['upload_dir']))
return array();
return array_values( array_filter( array_map( array($this,
'get_file_object'),
scandir($this->options['upload_dir']) ) ) );
}
protected function validate($uploaded_file, $file, $error, $options,
$index) {
if($error) {
$file->error = $error;
return false;
}
if(!$file->name) {
$file->error = 'missingFileName';
return false;
}
if(!preg_match($this->options['accept_file_types'],
$file->name)) {
$file->error = 'acceptFileTypes';
return false;
}
if($uploaded_file && is_uploaded_file($uploaded_file)) {
$file_size = filesize($uploaded_file);
} else {
$file_size = $_SERVER['CONTENT_LENGTH'];
}
if($this->options['max_file_size'] && ( $file_size
> $this->options['max_file_size'] || $file->size >
$this->options['max_file_size']) ) {
$file->error = 'maxFileSize';
return false;
}
if($this->options['min_file_size'] && $file_size
< $this->options['min_file_size']) {
$file->error = 'minFileSize';
return false;
}
if(is_int($this->options['max_number_of_files']) &&
( count($this->get_file_objects()) >=
$this->options['max_number_of_files']) ) {
$file->error = 'maxNumberOfFiles';
return false;
}
if($options['type'] == 'file') {
} else {
list($img_width, $img_height) = @getimagesize($uploaded_file);
if(!is_int($img_width)) {
$file->error = 'invalidFile';
return false;
}
if((!empty($this->options['max_width']) &&
$img_width > $this->options['max_width']) ||
(!empty($this->options['max_height']) && $img_height
> $this->options['max_height'])) {
$file->error = 'maxResolution';
return false;
}
if((!empty($this->options['min_width']) &&
$img_width < $this->options['min_width']) ||
(!empty($this->options['min_height']) && $img_height
< $this->options['min_height'])) {
$file->error = 'minResolution';
return false;
}
}
return true;
}
protected function handle_file_upload($uploaded_file, $name, $size, $type,
$error, $options, $index = null) {
$file = new stdClass();
$file->name = $this->trim_file_name($name, $type, $index);
$file->size = intval($size);
$file->type = $type;
if(empty($this->options['sub_folder']))
$this->options['sub_folder'] = '';
if(!$this->validate($uploaded_file, $file, $error, $options, $index))
return $file;
$shopConfig = hikamarket::config(false);
if($options['type'] == 'file') {
$allowed = $shopConfig->get('allowedfiles');
} else {
$allowed = $shopConfig->get('allowedimages');
}
$file_path = strtolower(JFile::makeSafe($name));
if(!strpos($file_path, '.')){
$file->error = 'The file name "' . $name .
'" is not valid. Please change it.';
return $file;
}
if(!preg_match('#\.('.str_replace(array(',','.'),
array('|','\.'), $allowed).')$#Ui',
$file_path,$extension) ||
preg_match('#\.(php.?|.?htm.?|pl|py|jsp|asp|sh|cgi)$#Ui',
$file_path)) {
$file->error = JText::sprintf('ACCEPTED_TYPE',
substr($file_path,strrpos($file_path, '.') + 1),
str_replace(',',', ',$allowed));
return $file;
}
$file_path = str_replace(array('.',' '),
'_', substr($file_path, 0, strpos($file_path,$extension[0]))) .
$extension[0];
if(JFile::exists($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path)) {
$pos = strrpos($file_path, '.');
$file_path = substr($file_path, 0, $pos) . '_' . rand() .
'.' . substr($file_path, $pos + 1);
}
if(!JFile::upload($uploaded_file,
$this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path)) {
if(!move_uploaded_file($uploaded_file,
$this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path)) {
$file->error = JText::sprintf('FAIL_UPLOAD',
$uploaded_file, $this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path);
return $file;
}
}
$file_size = filesize($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path);
$file->name = $file_path;
$file->path = $this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path;
$file->url = $this->options['upload_url'] .
$this->options['sub_folder'] . rawurlencode($file->name);
if(strpos($file->name, '.') !== false) {
$ext = strtolower(substr($file->name, strrpos($file->name,
'.') + 1));
if(!in_array($ext, $this->imagesExt) &&
$this->options['orient_image']) {
$this->orient_image($this->options['upload_dir'] .
$this->options['sub_folder'] . $file_path);
}
}
return $file;
}
protected function trim_file_name($name, $type) {
$file_name = trim(basename(stripslashes($name)),
".\x00..\x20");
if(strpos($file_name, '.') === false &&
preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches))
$file_name .= '.'.$matches[1];
return $file_name;
}
protected function orient_image($file_path) {
$exif = @exif_read_data($file_path);
if($exif === false)
return false;
$orientation = intval(@$exif['Orientation']);
if(!in_array($orientation, array(3, 6, 8)))
return false;
$image = @imagecreatefromjpeg($file_path);
switch ($orientation) {
case 3:
$image = @imagerotate($image, 180, 0);
break;
case 6:
$image = @imagerotate($image, 270, 0);
break;
case 8:
$image = @imagerotate($image, 90, 0);
break;
default:
return false;
}
$success = imagejpeg($image, $file_path);
@imagedestroy($image);
return $success;
}
}
hikamarket.php000064400000005160151160562420007401 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php');
$taskGroup =
hikaInput::get()->getCmd('ctrl','dashboard');
$hikaMarketConfig = hikamarket::config();
JHTML::_('behavior.tooltip');
$bar = JToolBar::getInstance('toolbar');
$bar->addButtonPath(HIKAMARKET_BUTTON);
if($taskGroup != 'update' &&
!$hikaMarketConfig->get('installcomplete')) {
$url = hikamarket::completeLink('update&task=install',
false, true);
echo
'<script>document.location.href="'.$url.'";</script>'."\r\n".
'Install not finished... You will be redirected to the second part
of the install screen<br/>'.
'<a href="'.$url.'">Please click here if
you are not automatically redirected within 3 seconds</a>';
return;
}
$currentuser = JFactory::getUser();
if($taskGroup != 'update' &&
!$currentuser->authorise('core.manage',
'com_hikamarket')) {
throw new Exception(JText::_('JERROR_ALERTNOAUTHOR'), 404);
return;
}
if($taskGroup == 'config' &&
!$currentuser->authorise('core.admin',
'com_hikamarket')) {
throw new Exception(JText::_('JERROR_ALERTNOAUTHOR'), 404);;
return;
}
$className = ucfirst($taskGroup).'MarketController';
$overrideClassName =
ucfirst($taskGroup).'MarketControllerOverride';
if(class_exists($overrideClassName)) {
$className = $overrideClassName;
}
elseif(file_exists(HIKAMARKET_CONTROLLER.$taskGroup.'.override.php'))
{
include_once(HIKAMARKET_CONTROLLER.$taskGroup.'.override.php');
}
if(!class_exists($className) &&
(!file_exists(HIKAMARKET_CONTROLLER.$taskGroup.'.php') ||
!include_once(HIKAMARKET_CONTROLLER.$taskGroup.'.php'))) {
if(!hikamarket::getPluginController($taskGroup)) {
throw new Exception('Controller not found : '.$taskGroup,
404);
return;
}
}
ob_start();
if(!class_exists($className)) {
throw new
RuntimeException(JText::sprintf('JLIB_APPLICATION_ERROR_INVALID_CONTROLLER_CLASS',
$className), 500);
return;
}
$classGroup = new $className();
hikaInput::get()->set('view', $classGroup->getName());
$classGroup->execute( hikaInput::get()->getCmd('task',
'listing'));
$classGroup->redirect();
if(hikaInput::get()->getString('tmpl') !==
'component') {
echo hikamarket::footer();
}
echo '<div id="hikamarket_main_content"
class="hikamarket_main_content">'.ob_get_clean().'</div>';
hikamarket.xml000064400000006447151160562420007423 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM
"http://dev.joomla.org/xml/1.5/component-install.dtd">
<extension type="component" version="2.5"
method="upgrade">
<name>HikaMarket</name>
<creationDate>20 juillet 2020</creationDate>
<version>3.1.1</version>
<author>Obsidev</author>
<authorEmail>contact@obsidev.com</authorEmail>
<authorUrl>http://www.hikashop.com</authorUrl>
<copyright>(C) 2011-2020 OBSIDEV. All rights
reserved.</copyright>
<description><![CDATA[Front-end edition and multivendors for
HikaShop<br><a target="_blank" title="Free Joomla
Templates | Joomla Extension"
href="http://blackjoomla.com/">BlackJoomla.com</a> -
<a title="Free Joomla Templates | Joomla Extension"
target="_blank" href="http://blackjoomla.com/">Free
Joomla Templates | Joomla
Extension</a></p>]]></description>
<license>GNU/GPLv3
http://www.gnu.org/licenses/gpl-3.0.html</license>
<languages folder="language">
<language
tag="da-DK">da-DK.com_hikamarket.ini</language>
<language
tag="de-DE">de-DE.com_hikamarket.ini</language>
<language
tag="en-GB">en-GB.com_hikamarket.ini</language>
<language
tag="en-GB">en-GB.com_hikamarket_config.ini</language>
<language
tag="es-ES">es-ES.com_hikamarket.ini</language>
<language
tag="fa-IR">fa-IR.com_hikamarket.ini</language>
<language
tag="fr-FR">fr-FR.com_hikamarket.ini</language>
<language
tag="it-IT">it-IT.com_hikamarket.ini</language>
<language
tag="ja-JP">ja-JP.com_hikamarket.ini</language>
<language
tag="nl-BE">nl-BE.com_hikamarket.ini</language>
<language
tag="nl-NL">nl-NL.com_hikamarket.ini</language>
<language
tag="ru-RU">ru-RU.com_hikamarket.ini</language>
<language
tag="sk-SK">sk-SK.com_hikamarket.ini</language>
<language
tag="sv-SE">sv-SE.com_hikamarket.ini</language>
<language
tag="uk-UA">uk-UA.com_hikamarket.ini</language>
<language
tag="zh-TW">zh-TW.com_hikamarket.ini</language>
</languages>
<install>
<sql>
<file driver="mysql">_database/install.sql</file>
<file driver="mysql"
charset="utf8">_database/install.sql</file>
<file
driver="mysqli">_database/install.sql</file>
<file driver="mysqli"
charset="utf8">_database/install.sql</file>
</sql>
</install>
<scriptfile>install.hikamarket.php</scriptfile>
<files folder="front">
<folder>controllers</folder>
<folder>fields</folder>
<folder>views</folder>
<filename>hikamarket.php</filename>
<filename>index.html</filename>
<filename>router.php</filename>
<filename>sef_ext.php</filename>
</files>
<media folder="media"
destination="com_hikamarket">
<folder>css</folder>
<folder>images</folder>
<folder>js</folder>
<folder>mail</folder>
<filename>index.html</filename>
</media>
<administration>
<files folder="back">
<folder>_database</folder>
<folder>buttons</folder>
<folder>classes</folder>
<folder>controllers</folder>
<folder>extensions</folder>
<folder>helpers</folder>
<folder>translations</folder>
<folder>overrides</folder>
<folder>types</folder>
<folder>views</folder>
<filename>hikamarket.php</filename>
<filename>config.xml</filename>
<filename>index.html</filename>
</files>
<menu
img="../media/com_hikamarket/images/icon-16/hikamarket.png"
link="option=com_hikamarket">HikaMarket</menu>
</administration>
</extension>
index.html000064400000000032151160562420006536
0ustar00<html><body></body></html>install.hikamarket.php000064400000057256151160562420011063
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(version_compare(JVERSION, '2.5.0', '<')) {
echo '<html><body><h1>This extension works with
Joomla 2.5 or newer.</h1>'.
'<h2>Please install the latest version of
Joomla.</h2>'.
'installation abort...</body></html>';
exit;
}
$version = explode('.',PHP_VERSION);
if($version[0] < 5) {
echo '<html><body><h1>This extension works with PHP
5 or newer.</h1>'.
'<h2>Please contact your web hosting provider to update your
PHP version</h2>'.
'installation abort...</body></html>';
exit;
}
class hikamarketInstall {
private $level = 'Multivendor';
private $version = '3.1.1';
private $freshinstall = true;
private $update = false;
private $fromLevel = '';
private $fromVersion = '';
private $db;
public function __construct() {
$this->db = JFactory::getDBO();
$this->db->setQuery('SELECT COUNT(*) as `count` FROM
`'.hikamarket::table('config').'` WHERE
`config_namekey` IN
('.$this->db->Quote('version').','.$this->db->Quote('level').')');
$results = $this->db->loadResult();
if($results == 2)
$this->freshinstall = false;
}
public function addPref() {
$conf = JFactory::getConfig();
$this->level = ucfirst($this->level);
$allPref = array(
'level' => $this->level
,'version' => $this->version
,'show_footer' => '1'
,'installcomplete' => '0'
,'Frontedition' => '0'
,'Multivendor' => '1'
,'frontend_edition' => '1'
);
$sep = '';
$query = 'INSERT IGNORE INTO
`'.HIKAMARKET_DBPREFIX.'config`
(`config_namekey`,`config_value`,`config_default`) VALUES ';
foreach($allPref as $n => $v) {
$query .=
$sep.'('.$this->db->Quote($n).','.$this->db->Quote($v).','.$this->db->Quote($v).')';
$sep = ',';
}
$this->db->setQuery($query);
$this->db->execute();
$allPref = array(
'market.product_creation.html' => 1,
'market.product_creation.subject' =>
'MARKET_PRODUCT_CREATION_SUBJECT',
'market.product_creation.published' => 0,
'market.product_modification.html' => 1,
'market.product_modification.subject' =>
'MARKET_PRODUCT_MODIFICATION_SUBJECT',
'market.product_modification.published' => 0,
'market.product_approval.html' => 1,
'market.product_approval.subject' =>
'MARKET_PRODUCT_APPROVAL_SUBJECT',
'market.product_approval.published' => 1,
'market.vendor_admin_registration.html' => 1,
'market.vendor_admin_registration.subject' =>
'MARKET_VENDOR_ADMIN_REGISTRATION_SUBJECT',
'market.vendor_admin_registration.published' => 0,
'market.vendor_registration.html' => 1,
'market.vendor_registration.subject' =>
'MARKET_VENDOR_REGISTRATION_SUBJECT',
'market.vendor_registration.published' => 0,
'market.vendor_payment_request.html' => 1,
'market.vendor_payment_request.subject' =>
'MARKET_VENDOR_PAYMENT_REQUEST_SUBJECT',
'market.vendor_payment_request.published' => 0,
);
if(!empty($allPref)) {
$sep = '';
$query = 'INSERT IGNORE INTO `#__hikashop_config`
(`config_namekey`,`config_value`,`config_default`) VALUES ';
foreach($allPref as $n => $v) {
$query .=
$sep.'('.$this->db->Quote($n).','.$this->db->Quote($v).','.$this->db->Quote($v).')';
$sep = ',';
}
$this->db->setQuery($query);
$this->db->execute();
}
}
public function updatePref() {
$this->db->setQuery('SELECT `config_namekey`, `config_value`
FROM `'.HIKAMARKET_DBPREFIX.'config` WHERE `config_namekey` IN
(\'version\',\'level\')', 0, 2);
$res = $this->db->loadObjectList('config_namekey');
if($res['version']->config_value == $this->version
&& $res['level']->config_value == $this->level)
return true;
$this->update = true;
$this->fromLevel = $res['level']->config_value;
$this->fromVersion = $res['version']->config_value;
$query = 'REPLACE INTO `'.HIKAMARKET_DBPREFIX.'config`
(`config_namekey`,`config_value`) VALUES
(\'level\','.$this->db->Quote($this->level).'),(\'version\','.$this->db->Quote($this->version).'),(\'installcomplete\',\'0\')';
$this->db->setQuery($query);
$this->db->execute();
}
public function updateSQL() {
$structs = array(
'user' => array(
'user_vendor_id' => 'INT(10) NOT NULL DEFAULT
0',
'user_vendor_access' => 'text NOT NULL DEFAULT
\'\''
),
'product' => array(
'product_status' => 'VARCHAR(255) NOT NULL DEFAULT
\'\'',
'product_vendor_params' => 'TEXT NOT NULL DEFAULT
\'\''
),
'order' => array(
'order_parent_id' => 'INT(10) NOT NULL DEFAULT
0',
'order_vendor_id' => 'INT(10) NOT NULL DEFAULT
0',
'order_vendor_price' => 'decimal(12,5) NOT NULL
DEFAULT \'0.00000\'',
'order_vendor_paid' => 'INT(10) NOT NULL DEFAULT
0',
'order_vendor_params' => 'TEXT NOT NULL DEFAULT
\'\''
),
'order_product' => array(
'order_product_parent_id' => 'INT(10) NOT NULL
DEFAULT 0',
'order_product_vendor_price' => 'decimal(12,5) NOT
NULL DEFAULT \'0.00000\'',
),
'discount' => array(
'discount_target_vendor' => 'INT(10) NOT NULL DEFAULT
0'
),
'characteristic' => array(
'characteristic_vendor_id' => 'INT(10) NOT NULL
DEFAULT 0'
),
'shipping' => array(
'shipping_vendor_id' => 'INT(10) NOT NULL DEFAULT
0'
),
'payment' => array(
'payment_vendor_id' => 'INT(10) NOT NULL DEFAULT
0'
),
'plugin' => array(
'plugin_vendor_id' => 'INT(10) NOT NULL DEFAULT
0'
),
);
foreach($structs as $table => &$v) {
$sql = array();
$current =
$this->db->getTableColumns(hikamarket::table('shop.'.$table));
foreach($v as $col => $colSql) {
if(!isset($current[$col])) {
$sql[] = 'ADD COLUMN `' . $col . '` ' . $colSql;
}
}
if(!empty($sql)) {
$query = 'ALTER TABLE
`'.hikamarket::table('shop.'.$table).'`
'.implode(',', $sql);
$this->db->setQuery($query);
try {
$this->db->execute();
}catch(Exception $e) { }
unset($query);
}
unset($sql);
}
$this->db->setQuery('SELECT COUNT(*) FROM
`'.hikamarket::table('shop.field').'` WHERE field_table
= ' . $this->db->Quote('plg.hikamarket.vendor'));
$countMarketFields = $this->db->loadResult();
if($countMarketFields == 0) {
$query = 'INSERT IGNORE INTO
`'.hikamarket::table('shop.field').'` ' .
<<<EOD
(`field_table`, `field_realname`, `field_namekey`, `field_type`,
`field_value`, `field_published`, `field_ordering`, `field_options`,
`field_core`, `field_required`, `field_backend`, `field_frontcomp`,
`field_default`, `field_backend_listing`) VALUES
('plg.hikamarket.vendor', 'Company',
'vendor_address_company', 'text', '', 1, 5,
'a:5:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 0, 1, 1, '', 0),
('plg.hikamarket.vendor', 'Street',
'vendor_address_street', 'text', '', 1, 6,
'a:5:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 1, 1, 1, '', 0),
('plg.hikamarket.vendor', 'Complement',
'vendor_address_street2', 'text', '', 0, 7,
'a:5:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 0, 1, 1, '', 0),
('plg.hikamarket.vendor', 'Post code',
'vendor_address_post_code', 'text', '', 1, 8,
'a:5:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 0, 1, 1, '', 0),
('plg.hikamarket.vendor', 'City',
'vendor_address_city', 'text', '', 1, 9,
'a:5:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 1, 1, 1, '', 0),
('plg.hikamarket.vendor', 'Telephone',
'vendor_address_telephone', 'text', '', 1,
10,
'a:5:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 1, 1, 1, '', 0),
('plg.hikamarket.vendor', 'Fax',
'vendor_address_fax', 'text', '', 0, 12,
'a:5:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 0, 1, 1, '', 0),
('plg.hikamarket.vendor', 'State',
'vendor_address_state', 'zone', '', 1, 13,
'a:6:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:9:"zone_type";s:5:"state";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 1, 1, 1, 'state_Rh__ne_1375', 0),
('plg.hikamarket.vendor', 'Country',
'vendor_address_country', 'zone', '', 1, 14,
'a:6:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:9:"zone_type";s:7:"country";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 1, 1, 1, 'country_France_73', 0),
('plg.hikamarket.vendor', 'VAT number',
'vendor_address_vat', 'text', '', 1, 15,
'a:6:{s:12:"errormessage";s:0:"";s:4:"cols";s:0:"";s:4:"rows";s:0:"";s:9:"zone_type";s:7:"country";s:4:"size";s:0:"";s:6:"format";s:0:"";}',
1, 0, 1, 1, '', 0);
EOD;
$this->db->setQuery($query);
$this->db->execute();
}
$this->db->setQuery('SELECT COUNT(*) FROM
`'.hikamarket::table('shop.characteristic').'` WHERE
characteristic_parent_id = 0 AND characteristic_alias = ' .
$this->db->Quote('vendor'));
$countVendorCharacteristics = $this->db->loadResult();
if($countVendorCharacteristics == 0) {
$query = 'INSERT IGNORE INTO
`'.hikamarket::table('shop.characteristic').'` '.
'(`characteristic_parent_id`, `characteristic_ordering`,
`characteristic_value`, `characteristic_alias`) VALUES '.
'(0, 0, ' . $this->db->Quote('Vendor') .
', ' . $this->db->Quote('vendor') .
')';
$this->db->setQuery($query);
$this->db->execute();
}
if($this->freshinstall) {
$e = $this->db->Quote('');
$query = 'INSERT IGNORE INTO
`'.hikamarket::table('vendor').'` '.
'(`vendor_id`,`vendor_admin_id`,`vendor_published`,`vendor_name`,`vendor_email`,`vendor_currency_id`,`vendor_description`,`vendor_access`,`vendor_shippings`,`vendor_params`)
VALUES '.
'(1,0,1,'.$e.','.$e.',0,'.$e.','.$this->db->Quote('*').','.$e.','.$e.')';
$this->db->setQuery($query);
$this->db->execute();
}
if($this->freshinstall) {
$vendorCategory = new stdClass();
$vendorCategory->category_type = 'vendor';
$vendorCategory->category_name = 'Vendor category';
$vendorCategory->category_namekey = 'vendor';
$categoryClass = hikamarket::get('shop.class.category');
$categoryClass->save($vendorCategory);
}
if(!$this->update)
return true;
if(version_compare($this->fromVersion, '1.1.0',
'<')) {
$this->addColumns('vendor', '`vendor_template_id` INT(
11 ) NOT NULL DEFAULT 0 AFTER `vendor_params`');
}
if(version_compare($this->fromVersion, '1.1.1',
'<')) {
$this->db->setQuery('SELECT `config_namekey`, `config_value`
FROM `'.HIKAMARKET_DBPREFIX.'config` WHERE `config_namekey` IN
(\'allow_registration\',\'vendor_auto_published\')',
0, 2);
$res = $this->db->loadObjectList('config_namekey');
if(isset($res['vendor_auto_published']) &&
isset($res['allow_registration']) &&
(int)$res['vendor_auto_published']->config_value == 1
&& (int)$res['allow_registration']->config_value == 1)
{
$this->db->setQuery('UPDATE
'.HIKAMARKET_DBPREFIX.'config` SET config_value = 2 WHERE
config_namekey = \'allow_registration\'');
$this->db->execute();
}
}
if(version_compare($this->fromVersion, '1.1.3',
'<')) {
$this->addColumns('vendor', array(
'`vendor_site_id` VARCHAR(255) NOT NULL DEFAULT
\'\'',
'`vendor_average_score` decimal(16,5) NOT NULL DEFAULT
\'0.00000\'',
'`vendor_total_vote` INT NOT NULL DEFAULT 0'
));
}
if(version_compare($this->fromVersion, '1.3.0',
'<')) {
$this->addColumns('vendor', '`vendor_image`
VARCHAR(255) NOT NULL DEFAULT \'\'');
}
if(version_compare($this->fromVersion, '1.3.1',
'<')) {
$this->addColumns('vendor', array(
'`vendor_zone_id` INT(10) UNSIGNED NOT NULL DEFAULT 0',
'`vendor_terms` TEXT NOT NULL DEFAULT \'\''
));
$marketConfig = hikamarket::config();
if($marketConfig->get('market_mode') ==
'commission') {
$query = 'UPDATE
`'.hikamarket::table('shop.order').'` '.
' SET order_vendor_price = (order_vendor_price -
order_full_price) '.
' WHERE order_type =
'.$this->db->Quote('subsale') . ' AND
order_vendor_paid = 0';
$this->db->setQuery($query);
$this->db->execute();
}
}
if(version_compare($this->fromVersion, '1.4.0',
'<')) {
$this->addColumns('fee', array(
'`fee_min_price` decimal(16,5) NOT NULL DEFAULT
\'0.00000\'',
'`fee_fixed` decimal(16,5) NOT NULL DEFAULT
\'0.00000\''
));
}
if(version_compare($this->fromVersion, '1.4.1',
'<')) {
$this->addColumns('vendor', '`vendor_alias`
VARCHAR(255) NOT NULL DEFAULT \'\' AFTER `vendor_name`');
$this->addColumns('fee', '`fee_group` int(10) UNSIGNED
NOT NULL DEFAULT \'0\'');
}
if(version_compare($this->fromVersion, '1.4.2',
'<')) {
$this->addColumns('vendor', '`vendor_canonical`
VARCHAR(255) NOT NULL DEFAULT \'\' AFTER `vendor_alias`');
}
if(version_compare($this->fromVersion, '1.6.0',
'<')) {
$tables = array(
array(
'id' => 'shipping_id',
'params' => 'shipping_params',
'table' => 'shop.shipping',
'param_key' => 'shipping_vendor_filter',
'vendor_key' => 'shipping_vendor_id'
),
array(
'id' => 'payment_id',
'params' => 'payment_params',
'table' => 'shop.payment',
'param_key' => 'payment_vendor_id',
'vendor_key' => 'payment_vendor_id'
)
);
foreach($tables as $p) {
$query = 'SELECT '.$p['id'].',
'.$p['params'].' FROM ' .
hikamarket::table($p['table']) . ' WHERE
'.$p['params'].' LIKE
\'%'.$p['param_key'].'%\'';
$this->db->setQuery($query);
$res = $this->db->loadObjectList($p['id']);
$update = array();
foreach($res as $k => $r) {
$params = hikamarket::unserialize($r->{$p['params']});
if(empty($params->{$p['param_key']}))
continue;
$update[(int)$k] = $params->{$p['param_key']};
}
if(!empty($update)) {
$data = array();
foreach($update as $k => $v) {
$data[] = (int)$k . ',' . (int)$v;
}
$query = 'INSERT INTO ' .
hikamarket::table($p['table']) . '
('.$p['id'].',
'.$p['vendor_key'].') VALUES (' .
implode('),(', $data) . ') '.
'ON DUPLICATE KEY UPDATE
'.$p['vendor_key'].' =
VALUES('.$p['vendor_key'].')';
$this->db->setQuery($query);
$this->db->execute();
}
}
$query = 'ALTER TABLE `#__hikamarket_vendor` CHANGE
`vendor_template_id` `vendor_template_id` VARCHAR( 255 ) NOT NULL DEFAULT
\'\';';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) {}
$query = 'CREATE TABLE IF NOT EXISTS
`#__hikamarket_customer_vendor` '.
' (`customer_id` INT(10) NOT NULL, `vendor_id` INT(10) NOT NULL,
PRIMARY KEY (`customer_id`,`vendor_id`)) '.
' ENGINE=MyISAM DEFAULT CHARSET=utf8;';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) {}
}
if(version_compare($this->fromVersion, '1.6.6',
'<')) {
if(version_compare($this->fromVersion, '1.6.4',
'>=')) {
$query = 'DELETE FROM `#__hikamarket_customer_vendor` WHERE
1';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) {}
}
$query = 'INSERT IGNORE INTO `#__hikamarket_customer_vendor`
(customer_id, vendor_id) '.
' SELECT DISTINCT order_user_id, order_vendor_id FROM
`#__hikashop_order` AS o '.
' WHERE o.order_type = ' .
$this->db->Quote('subsale') . ' AND o.order_vendor_id
> 1 ';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) {}
}
if(version_compare($this->fromVersion, '2.0.0',
'<')) {
$query = 'CREATE TABLE IF NOT EXISTS
`#__hikamarket_order_transaction` ('.
' `order_transaction_id` INT(10) UNSIGNED NOT NULL
AUTO_INCREMENT,'.
' `order_id` INT(10) UNSIGNED NOT NULL,'.
' `vendor_id` INT(10) UNSIGNED NOT NULL,'.
' `order_transaction_created` INT(11) NOT NULL DEFAULT 0,'.
' `order_transaction_status` varchar(255) NOT NULL DEFAULT
\'\','.
' `order_transaction_price` decimal(12,5) NOT NULL DEFAULT
\'0.00000\','.
' `order_transaction_currency_id` INT(10) UNSIGNED NOT NULL
DEFAULT \'0\','.
' `order_transaction_paid` INT(10) UNSIGNED NOT NULL DEFAULT
0,'.
' `order_transaction_valid` INT(4) UNSIGNED NOT NULL DEFAULT
0,'.
' PRIMARY KEY (`order_transaction_id`)'.
') ENGINE=MyISAM DEFAULT CHARSET=utf8;';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) {}
$updateHelper = hikamarket::get('helper.update');
$updateHelper->processMigration_Transaction();
}
if(version_compare($this->fromVersion, '2.1.0',
'<')) {
$query = 'CREATE TABLE IF NOT EXISTS `#__hikamarket_vendor_user`
('.
' `vendor_id` INT(10) NOT NULL,'.
' `user_id` INT(10) NOT NULL,'.
' `user_access` TEXT NULL,'.
' `ordering` INT(10) NOT NULL DEFAULT 1,'.
' PRIMARY KEY (`vendor_id`, `user_id`)'.
') ENGINE=MyISAM DEFAULT CHARSET=utf8;';
$this->db->setQuery($query);
try { $this->db->execute(); }
catch(Exception $e) {}
}
if(version_compare($this->fromVersion, '3.0.0',
'<')) {
$this->addColumns('vendor', array(
'`vendor_location_lat` DECIMAL(9, 6) NULL',
'`vendor_location_long` DECIMAL(9, 6) NULL'
));
$config = hikamarket::config();
$vendor_statistics = $config->get('vendor_statistics',
null);
if(!empty($vendor_statistics)) {
$vendor_statistics =
hikamarket::unserialize(base64_decode($vendor_statistics));
$lst =
array('products_count','sales_sum','sales_avg','order_total_unpaid','orders_history','sales_count','last_orders','product_compare','geo_sales','serial_count');
$cpt = 0;
foreach($lst as $l) {
if(!isset($vendor_statistics[$l])) continue;
$vendor_statistics[$l]['order'] = $cpt++;
}
$query = 'UPDATE `#__hikamarket_config` SET config_value = '
.
$this->db->Quote(base64_encode(serialize($vendor_statistics))).'
WHERE config_namekey = \'vendor_statistics\'';
$this->db->setQuery($query);
try{$this->db->execute();}catch(Exception $e){}
}
}
if(version_compare($this->fromVersion, '3.1.1',
'<')) {
$query = 'ALTER TABLE
`'.hikamarket::table('vendor').'` MODIFY COLUMN
`vendor_location_lat` DECIMAL(9, 6) NULL';
$this->db->setQuery($query);
try { $this->db->execute(); } catch(Exception $e) {}
$query = 'ALTER TABLE
`'.hikamarket::table('vendor').'` MODIFY COLUMN
`vendor_location_long` DECIMAL(9, 6) NULL';
$this->db->setQuery($query);
try { $this->db->execute(); } catch(Exception $e) {}
}
}
protected function addColumns($table, $columns) {
if(!is_array($columns))
$columns = array($columns);
$query = 'ALTER TABLE `'.hikamarket::table($table).'` ADD
'.implode(', ADD', $columns).';';
$this->db->setQuery($query);
$err = false;
try {
$this->db->execute();
}catch(Exception $e) {
$err = true;
}
if(!$err)
return true;
if($err && count($columns) > 1) {
foreach($columns as $col) {
$query = 'ALTER TABLE `'.hikamarket::table($table).'`
ADD '.$col.';';
$this->db->setQuery($query);
$err = 0;
try {
$this->db->execute();
}catch(Exception $e) {
$err++;
}
}
if($err < count($columns))
return true;
}
$app = JFactory::getApplication();
$app->enqueueMessage('Error while adding column for the table
"'.htmlentities($table).'"',
'error');
return false;
}
public function displayInfo() {
$url =
'index.php?option='.HIKAMARKET_COMPONENT.'&ctrl=update&task=install&fromversion='.$this->fromVersion.'&update='.(int)$this->update.'&freshinstall='.(int)$this->freshinstall;
echo '
<div style="background:#f6f6f6;border:2px solid
#aabb33;max-width:100%;text-align:left;border-radius:6px;padding:20px
30px;margin:5px 0px 10px;">
<h2><img
src="'.HIKAMARKET_IMAGES.'icon-48/hikamarket.png"
alt=""/> '.HIKAMARKET_NAME.' 3.1.1
<small>'.JText::_('HIKAM_INSTALL_FOR').'
HikaShop</small></h2>
<p style="font-size:14px;">
'.JText::_('HIKAM_INSTALL_MSG1').'<br/>
'.JText::_('HIKAM_INSTALL_MSG2').'
</p>
<a href="'.$url.'" style="color:#fff;
background-color:#aabb33;border:1px solid #8da521;padding:10px
18px;font-size:18px;line-height:1.42;border-radius:4px;text-align:center;display:inline-block;text-decoration:none
!important;">
'.JText::_('HIKAM_INSTALL_CONTINUE').' »
</a>
</div>';
}
}
class hikamarketUninstall {
private $db;
public function __construct(){
$this->db = JFactory::getDBO();
$this->db->setQuery('DELETE FROM `#__hikamarket_config` WHERE
`config_namekey` = \'li\'');
$this->db->execute();
$this->db->setQuery('DELETE FROM `#__menu` WHERE link LIKE
\'%com_hikamarket%\'');
$this->db->execute();
}
public function unpublishModules(){
$this->db->setQuery('UPDATE `#__modules` SET `published` = 0
WHERE `module` LIKE \'%hikamarket%\'');
$this->db->execute();
}
public function unpublishPlugins(){
$this->db->setQuery('UPDATE `#__extensions` SET `enabled` = 0
WHERE `type` = \'plugin\' AND `element` LIKE
\'%hikamarket%\' AND `folder` NOT LIKE
\'%hikamarket%\'');
$this->db->execute();
}
}
class com_hikamarketInstallerScript {
public function install($parent) {
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php');
$lang = JFactory::getLanguage();
$lang->load(HIKAMARKET_COMPONENT,JPATH_SITE);
$installClass = new hikamarketInstall();
$installClass->addPref();
$installClass->updatePref();
$installClass->updateSQL();
$installClass->displayInfo();
return true;
}
public function update($parent) {
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikamarket'.DS.'helpers'.DS.'helper.php');
$lang = JFactory::getLanguage();
$lang->load(HIKAMARKET_COMPONENT,JPATH_SITE);
$installClass = new hikamarketInstall();
$installClass->addPref();
$installClass->updatePref();
$installClass->updateSQL();
$installClass->displayInfo();
return true;
}
public function uninstall($parent) {
$uninstallClass = new hikamarketUninstall();
$uninstallClass->unpublishModules();
$uninstallClass->unpublishPlugins();
}
public function preflight($type, $parent) {
if(!defined('DS'))
define('DS', DIRECTORY_SEPARATOR);
$hikashopFile =
rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikashop'.DS.'helpers'.DS.'helper.php';
if(!file_exists($hikashopFile)) {
echo '<h1>This extension works with
HikaShop.</h1>'.
'<h2>Please install HikaShop (starter, essential or
business) before installing HikaMarket.</h2>'.
'installation abort.';
$app = JFactory::getApplication();
$app->enqueueMessage('Cannot install HikaMarket without
HikaShop', 'warning');
return false;
}
include_once($hikashopFile);
$hikashopConfig = hikashop_config();
if(version_compare($hikashopConfig->get('version',
'1.0'), '4.2.0', '<')) {
echo '<h1>This extension works with HikaShop 4.2.0 or
newer.</h1>'.
'<h2>Please install the latest version of HikaShop
before.</h2>'.
'installation abort.';
$app = JFactory::getApplication();
if($type == 'update')
$app->enqueueMessage('Cannot update HikaMarket 3.1.1 without
HikaShop 4.2.0 or newer', 'warning');
else
$app->enqueueMessage('Cannot install HikaMarket 3.1.1 without
HikaShop 4.2.0 or newer', 'warning');
$joomConf = JFactory::getConfig();
$debug = $joomConf->get('debug');
if($debug) {
$app->enqueueMessage('Cannot install HikaMarket 3.1.1 without
HikaShop 4.2.0 or newer', 'error');
}
return false;
}
return true;
}
public function postflight($type, $parent) {
return true;
}
}
overrides/index.html000064400000000032151160562420010540
0ustar00<html><body></body></html>translations/index.html000064400000000032151160562420011257
0ustar00<html><body></body></html>types/color.php000064400000005637151160562420007554
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketColorType {
protected $values = null;
protected $othervalues = array();
protected function load() {
if($this->values !== null)
return;
$this->values = array();
for($red = 0; $red < 6; $red++) {
$rhex = dechex($red * 0x33);
$rhex = (strlen($rhex) < 2) ? "0".$rhex : $rhex;
for($blue = 0; $blue < 6; $blue++) {
$bhex = dechex($blue * 0x33);
$bhex = (strlen($bhex) < 2) ? "0".$bhex : $bhex;
for($green = 0; $green < 6; $green++) {
$ghex = dechex($green * 0x33);
$ghex = (strlen($ghex) < 2) ? "0".$ghex : $ghex;
$this->values[$red][] = '#'.$rhex.$ghex.$bhex;
}
}
}
$this->othervalues = array(
'#000000', '#111111', '#222222',
'#333333', '#444444', '#555555',
'#666666', '#777777', '#888888',
'#999999',
'#AAAAAA', '#BBBBBB', '#CCCCCC',
'#DDDDDD', '#EEEEEE', '#FFFFFF',
'#FF0000', '#00FFFF', '#0000FF',
'#0000A0',
'#FF0080', '#800080', '#FFFF00',
'#00FF00', '#FF00FF', '#FF8040',
'#804000', '#800000', '#808000',
'#408080',
);
}
public function display($id, $map, $color) {
$xmlConf = new SimpleXMLElement('<field
name="'.$map.'" type="color"
label=""></field>');
JFormHelper::loadFieldClass('color');
$jform = new JForm('hikashop');
$fieldTag = new JFormFieldColor();
$fieldTag->setForm($jform);
$fieldTag->setup($xmlConf, $color);
return $fieldTag->input;
}
public function displayAll($id, $map, $color) {
return $this->display($id, $map, $color);
}
public function displayGrid($id = '') {
$js = '
function applyColor'.$id.'(newcolor) {
document.getElementById(\'color'.$id.'\').value =
newcolor;
document.getElementById("colordiv'.$id.'").style.display
= "none";
applyColorExample'.$id.'();
}
function applyColorExample'.$id.'() {
document.getElementById(\'colorexample'.$id.'\').style.backgroundColor
= document.getElementById(\'color'.$id.'\').value;
document.getElementById("colordiv'.$id.'").style.display
= "none";
}';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
$this->load();
$text = '<table><tr>';
foreach($this->othervalues as $oneColor) {
$text .= '<td style="cursor:pointer"
width="10" height="10"
bgcolor="'.$oneColor.'"
onclick="applyColor'.$id.'(\''.$oneColor.'\')"></td>';
}
$text .= '</tr></table>';
$text .= '<table>';
foreach($this->values as $line) {
$text .= '<tr>';
foreach($line as $oneColor) {
$text .= '<td style="cursor:pointer"
width="10" height="10"
bgcolor="'.$oneColor.'"
onclick="applyColor'.$id.'(\''.$oneColor.'\')"></td>';
}
$text .= '</tr>';
}
$text .= '</table>';
return $text;
}
}
types/css.php000064400000004354151160562420007221 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketCssType {
private function load($type = '') {
$this->values = array(
JHTML::_('select.option',
'',JText::_('HIKA_NONE'))
);
jimport('joomla.filesystem.folder');
$regex = '^'.$type.'_([-_A-Za-z0-9]*)\.css$';
$allCSSFiles = JFolder::files(HIKAMARKET_MEDIA.'css', $regex);
foreach($allCSSFiles as $oneFile) {
preg_match('#'.$regex.'#i',$oneFile,$results);
$this->values[] = JHTML::_('select.option',
$results[1],$results[1]);
}
}
public function display($map, $type, $value) {
$this->load($type);
$shopConfig = hikamarket::config(false);
$html = JHTML::_('select.genericlist', $this->values, $map,
'class="inputbox" style="margin:0"
size="1" onchange="var
e=document.getElementById(\'hikamarket_css_'.$type.'_edit\');if(this.value==\'\'||this.value==\'default\'){e.style.display=\'none\';}else{e.style.display=\'\';}"',
'value', 'text', $value,
'css_'.$type.'_choice' );
$manage =
hikashop_isAllowed($shopConfig->get('acl_config_manage','all'));
if(!$manage)
return $html;
$popup = hikamarket::get('shop.helper.popup');
$aStyle = (empty($value) || $value == 'default') ? '
style="display:none"' : '';
$aStyle.=' class="hikabtn hikabtn-primary"
title="'.JText::_('HIKA_EDIT').'"';
$html .= $popup->display(
'<i class="fas fa-pencil-alt"></i>',
'CSS',
'\''.'index.php?option=com_hikamarket&tmpl=component&ctrl=config&task=css&file='.$type.'_\'+document.getElementById(\'css_'.$type.'_choice'.'\').value+\'&var='.$type.'\'',
'hikamarket_css_'.$type.'_edit',
760,480, $aStyle, '', 'link',true
) . ' ';
$html .= $popup->display(
'<i class="fas fa-plus"></i>',
'CSS',
hikamarket::completeLink('config&task=css&var='.$type,
true),
'hikamarket_css_'.$type.'_new',
760,480, 'class="hikabtn hikabtn-primary"
title="'.JText::_('HIKA_NEW').'"',
'', 'link'
);
return '<div
class="hikamarket_css_selector">'.$html.'</div>';
}
}
types/dropdown.php000064400000003061151160562420010257 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketDropdownType {
public function __construct() {
$this->app = JFactory::getApplication();
}
protected function getPlugins() {
static $plugins = null;
if($plugins !== null)
return $plugins;
$plugins = array();
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikamarket');
JFactory::getApplication()->triggerEvent('onHkInterfaceDropdownList',
array( &$plugins ));
return $plugins;
}
public function display($name, $data, $options = array()) {
}
public function displayBootstrap($name, $data, $options = array()) {
$styles = '';
$btnClasses = '';
$name = '';
$elements = array();
if(!empty($btnClasses))
$btnClasses = ' ' . trim($btnClasses);
foreach($data as $d) {
if($d == '-') {
$elements[] = '<li
class="divider"></li>';
continue;
}
$elements[] = '<li><a
href=""></a></li>';
}
return '<div class="btn-group"
style="'.$styles.'">' .
'<button style="margin:0px;"
class="dropdown-toggle btn'.$btnClasses.'"
data-toggle="dropdown">' . $name . ' <span
class="caret"></span></button>'.
'<ul
class="dropdown-menu">'.implode('',
$elements).'</ul>'.
'</div>';
}
public function displayInternal($name, $data, $options = array()) {
}
}
types/filter_vendor.php000064400000010563151160562420011272
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketFilter_vendorType {
protected $values = array();
public function __construct() {
$this->app = JFactory::getApplication();
}
protected function load($value) {
$this->values = array();
$db = JFactory::getDBO();
$query = 'SELECT COUNT(*) FROM
'.hikamarket::table('vendor').' WHERE vendor_published
= 1';
$db->setQuery($query);
$ret = (int)$db->loadResult();
if($ret > 15) {
$this->values = $ret;
return;
}
$query = 'SELECT * FROM
'.hikamarket::table('vendor').' WHERE vendor_published
= 1 ORDER BY vendor_name, vendor_id';
$db->setQuery($query);
$vendors = $db->loadObjectList();
$this->values = array(
JHTML::_('select.option', 0,
JText::_('ALL_VENDORS')),
JHTML::_('select.option', 1,
JText::_('HIKAM_MY_VENDOR')),
);
if(!empty($vendors)) {
foreach($vendors as $vendor) {
if($vendor->vendor_id == 0 || $vendor->vendor_id == 1)
continue;
$this->values[] = JHTML::_('select.option',
$vendor->vendor_id, $vendor->vendor_name . ' [' .
$vendor->vendor_id . ']');
}
}
}
protected function initJs() {
static $jsInit = null;
if($jsInit === true)
return;
$vendor_format = 'data.vendor_name';
if($this->app->isAdmin())
$vendor_format = 'data.id + " - " +
data.vendor_name';
$js = '
if(!window.localPage)
window.localPage = {};
window.localPage.filterChooseVendor = function(el, name) {
window.hikamarket.submitFct = function(data) {
var d = document,
vendorInput = d.getElementById(name + "_input_id"),
vendorSpan = d.getElementById(name + "_span_id");
if(vendorInput) { vendorInput.value = data.id; }
if(vendorSpan) { vendorSpan.innerHTML = '.$vendor_format.'; }
if(d.adminForm)
d.adminForm.submit();
else {
var f = d.getElementById("adminForm");
if(!f) f = d.getElementById("hikamarketForm");
if(!f && el.form) f = el.form;
if(f) f.submit();
}
};
window.hikamarket.openBox(el,null,(el.getAttribute("rel") ==
null));
return false;
};
window.localPage.filterSetVendor = function(el, name, value) {
var d = document,
vendorInput = d.getElementById(name + "_input_id"),
vendorSpan = d.getElementById(name + "_span_id");
if(vendorInput) { vendorInput.value = value; }
if(vendorSpan) {
if(value == 0)
vendorSpan.innerHTML = "'.JText::_('NO_VENDOR',
true).'";
else
vendorSpan.innerHTML = "'.JText::_('ALL_VENDORS',
true).'";
}
if(d.adminForm)
d.adminForm.submit();
else {
var f = d.getElementById("adminForm");
if(!f) f = d.getElementById("hikamarketForm");
if(!f && el.form) f = el.form;
if(f) f.submit();
}
};
';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
$jsInit = true;
}
public function display($map, $value, $invoicemap = '',
$invoicevalue = 0) {
if(empty($this->values))
$this->load($value);
if(is_array($this->values)) {
$ret = JHTML::_('select.genericlist', $this->values, $map,
'class="inputbox" size="1"
data-search-reset="-1"
onchange="document.adminForm.submit();"', 'value',
'text', $value);
} else {
$uuid = str_replace(array('][','[',']'),
'_', $map);
$nameboxType = hikamarket::get('type.namebox');
$ret = '<div
style="display:inline-block;min-width:240px;vertical-align:top;">'.
$nameboxType->display(
$map,
(int)$value,
hikamarketNameboxType::NAMEBOX_SINGLE,
'vendor',
array(
'delete' => true,
'id' => $uuid,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>'
)
) .
'<script>
window.Oby.ready(function(){
window.oNameboxes["'.$uuid.'"].register("set",
function(e){
document.getElementById("'.$uuid.'_text").form.submit();
}); });
</script>'.
'</div>';
}
if($value > 1 && !empty($invoicemap)) {
$choices = array(
JHTML::_('select.option', 0,
JText::_('VENDOR_SALES')),
JHTML::_('select.option', 1,
JText::_('VENDOR_INVOICES')),
);
$ret .= JHTML::_('select.genericlist', $choices, $invoicemap,
'class="inputbox" size="1"
onchange="document.adminForm.submit();"', 'value',
'text', $invoicevalue);
}
return $ret;
}
}
types/index.html000064400000000032151160562420007702
0ustar00<html><body></body></html>types/itemlayout.php000064400000005120151160562420010615
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketItemlayoutType {
protected $values = array();
protected function loadFromCustom($hikamarketFiles, $template, $customDir,
$files) {
if(!is_dir($customDir))
return;
$customFiles = JFolder::files($customDir);
if (empty($customFiles))
return;
$files = array();
foreach ($customFiles as $file) {
$notHikaMarket = true;
foreach($hikamarketFiles as $hikamarketfile) {
if ($hikamarketfile == $file) {
$notHikaMarket = false;
break;
}
}
if($notHikaMarket)
$files[] = $file;
}
if(!empty($files)) {
$files = array_keys(array_flip($files));
$this->loadValues('-- ' .
JText::sprintf('FROM_TEMPLATE', basename($template)) . '
--', $files);
}
}
protected function loadFromTemplates($hikamarketFiles) {
$files = array();
$templates = JFolder::folders(JPATH_SITE . DS . 'templates',
'.', false, true);
if(empty($templates))
return;
foreach($templates as $template) {
$this->loadFromCustom($hikamarketFiles, $template, $template . DS .
'html' . DS . 'com_hikamarket' . DS .
'vendormarket', $files);
}
}
protected function loadValues($optGroup, $files) {
$this->values[] = JHTML::_('select.optgroup', $optGroup);
foreach($files as $file){
if(preg_match('#^listingcontent_(.*)\.php$#', $file, $match))
{
$val = strtoupper($match[1]);
$trans = JText::_($val);
if($trans == $val)
$trans = $match[1];
$this->values[] = JHTML::_('select.option', $match[1],
$trans);
}
}
$this->values[] = JHTML::_('select.optgroup', $optGroup);
if(hikaInput::get()->getBool('inherit',true) == true)
$this->values[] = JHTML::_('select.option',
'inherit', JText::_('HIKA_INHERIT'));
}
protected function load() {
$this->values = array();
jimport('joomla.filesystem.folder');
$vendor_folder =
HIKAMARKET_FRONT.'views'.DS.'vendormarket'.DS.'tmpl'.DS;
$files = JFolder::files($vendor_folder);
$this->loadValues('--
'.JText::_('FROM_HIKAMARKET').' --', $files);
$this->loadFromTemplates($files);
}
public function display($map, $value, &$js, $option = '') {
if(empty($this->values))
$this->load();
$options = 'class="inputbox" size="1"
'.$option;
return JHTML::_('select.genericlist', $this->values, $map,
$options, 'value', 'text', $value);
}
}
types/joomla_acl.php000064400000021361151160562420010526 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketJoomla_aclType {
protected $groups = null;
protected function load() {
$this->groups = array();
$db = JFactory::getDBO();
$db->setQuery('SELECT a.*, a.title as text, a.id as value FROM
`#__usergroups` AS a ORDER BY a.lft ASC');
$groups = $db->loadObjectList('id');
foreach($groups as &$group){
if(isset($groups[$group->parent_id])){
$group->level = intval(@$groups[$group->parent_id]->level) +
1;
} else {
$group->level = 0;
}
}
unset($group);
foreach($groups as &$group) {
$this->groups[] = $group;
}
}
public function getList() {
if(empty($this->groups)) {
$this->load();
}
return $this->groups;
}
public function display($map, $values, $allBtn = false, $min = false) {
hikamarket::loadJslib('otree');
if(empty($this->groups)) {
$this->load();
}
$map = str_replace('"','',$map);
$id = str_replace(array('[',']','
'),array('_','','_'),$map);
$cpt = count($this->groups)-1;
$ret = '<div id="'.$id.'_otree"
class="oTree"></div><input type="hidden"
value="'.$values.'" name="'.$map.'"
id="'.$id.'"/>
<script type="text/javascript">
var data_'.$id.' = ' . $this->getData($values, $allBtn,
$min) . ';
'.$id.' = new
window.oTree("'.$id.'",{rootImg:"'.HIKAMARKET_IMAGES.'otree/",
showLoading:false, useSelection:false,
checkbox:true},null,data_'.$id.',true);
'.$id.'.callbackCheck = function(treeObj, id, value) {
var node = treeObj.get(id), d = document, e =
d.getElementById("'.$id.'");
if(node.state == 5) {
if(value === true) {
treeObj.chks("*",false);
e.value = "all";
} else if(value === false) {
treeObj.chks(false,false,true);
e.value = "none";
}
return;
}
var v = treeObj.getChk();
node = treeObj.get(0);
if(v === false || v.length == 0) {
e.value = "none";
treeObj.chk(1,0,false,false);
} else if( v.length > '.$cpt.') {
e.value = "all";
treeObj.chk(1,1,false,false);
} else {
e.value = "," + v.join(",") + ",";
' . (!$allBtn ? '' : '
treeObj.config.tricheckbox = true;
treeObj.chk(1,2,false,false);
treeObj.config.tricheckbox = false; ') . '
}
};
</script>';
return $ret;
}
public function displayButton($map, $values) {
hikamarket::loadJslib('otree');
hikamarket::loadJslib('jquery');
$ret = '';
if(empty($this->groups)) {
$this->load();
}
$map = str_replace('"','',$map);
if(empty($this->id)) {
$this->id = 'hikamarket_joomlaacl';
$cpt = count($this->groups)-1;
$ret .= '<script type="text/javascript">
if(!window.aclMgr) window.aclMgr = {};
if(!window.aclMgr.trees) window.aclMgr.trees = {};
if(!window.aclMgr.data) window.aclMgr.data = {};
if(!window.aclMgr.popups) window.aclMgr.popups = {};
if(!window.aclMgr.cpt) window.aclMgr.cpt = {};
window.aclMgr.data["'.$this->id.'"] = ' .
$this->getData($values) . ';
window.aclMgr.cpt["'.$this->id.'"] = ' . $cpt .
';
window.aclMgr.updateJoomlaAcl = function(el,id,tree_id) {
var d = document, w = window, tree = d.getElementById(tree_id +
"_otree"), e = d.getElementById(id), values = e.value;
if(w.aclMgr.popups[id] && tree) {
tree.style.display = "none";
w.Oby.removeEvent(document, "click", w.aclMgr.popups[id]);
w.aclMgr.popups[id] = false;
return false;
}
if(!tree) {
tree = d.createElement("div");
tree.id = tree_id + "_otree";
tree.style.position = "absolute";
tree.style.display = "none";
tree.className = "oTree acl-popup-content";
d.body.appendChild(tree);
w.aclMgr.trees[tree_id] = new
w.oTree(tree_id,{rootImg:"'.HIKAMARKET_IMAGES.'otree/",
showLoading:false, useSelection:false,
checkbox:true},null,w.aclMgr.data[tree_id],true);
}
switch(values) {
case "all":
treevalues = "*";
break;
case "none":
treevalues = "";
break;
default:
treevalues = values.split(",");
break;
}
w.aclMgr.trees[tree_id].callbackCheck = null;
w.aclMgr.trees[tree_id].chks(treevalues, null, false);
var p = jQuery(el).offset();
if(tree.style.display != "none" && tree.style.top !=
((p.top + el.offsetHeight) + "px")) {
setTimeout(function(){
w.aclMgr.updateJoomlaAcl(el,id,tree_id);
}, 100);
return false;
}
tree.style.top = (p.top + el.offsetHeight + 5) + "px";
tree.style.left = (p.left + el.offsetWidth - 200) + "px";
var f = function(evt) {
if (!evt) var evt = window.event;
var trg = (window.event) ? evt.srcElement : evt.target;
while(trg != null) {
if(trg == tree || trg == el)
return;
trg = trg.parentNode;
}
tree.style.display = "none";
w.Oby.removeEvent(document, "click", f);
w.aclMgr.popups[id] = false;
};
w.Oby.addEvent(document, "click", f);
w.aclMgr.popups[id] = f;
w.aclMgr.trees[tree_id].callbackCheck = function(treeObj, id, value) {
var v = treeObj.getChk();
if(v === false || v.length == 0) {
e.value = "none";
} else if( v.length > w.aclMgr.cpt[tree_id]) {
e.value = "all";
} else {
e.value = "," + v.join(",") + ",";
}
};
tree.style.display = "";
return false;
};
</script>';
}
$id =
str_replace(array('[',']'),array('_',''),$map);
$ret .= '<a href="#" onclick="return
window.aclMgr.updateJoomlaAcl(this, \''.$id.'\',
\''.$this->id.'\');">'.
'<img
src="'.HIKASHOP_IMAGES.'icons/icon-16-levels.png"
title="'.JText::_('ACCESS_LEVEL').'"
/>'.
'</a><input type="hidden"
id="'.$id.'" name="'.$map.'"
value="'.$values.'" />';
return $ret;
}
public function displayList($map, $value, $empty = 'HIKA_ALL')
{
$ret = '';
if(empty($this->groups))
$this->load();
$values = array(
JHTML::_('select.option', '', JText::_($empty))
);
foreach($this->groups as $group) {
$name = str_repeat('- ', $group->level) . $group->text;
$values[] = JHTML::_('select.option', $group->value,
$name);
}
return JHTML::_('select.genericlist', $values, $map,
'class="inputbox" size="1"',
'value', 'text', $value);
}
public function getChildrenList() {
if(empty($this->groups))
$this->load();
$ret = array();
$level = 0;
foreach($this->groups as $group) {
$ret[ $group->id ] = array(
'parent' => (int)$group->parent_id,
'children' => array(),
'level' => $group->level
);
$level = ($level > $group->level) ? $level : $group->level;
}
for($k = $level; $k >= 0; $k--) {
foreach($ret as $i => $group) {
if($group['level'] == $k &&
!empty($group['parent'])) {
$ret[ $group['parent'] ]['children'][] = $i;
$ret[ $group['parent'] ]['children'] =
array_merge($ret[ $group['parent'] ]['children'],
$group['children']);
}
}
}
return $ret;
}
public function getParentList() {
if(empty($this->groups))
$this->load();
$ret = array();
$level = 0;
foreach($this->groups as $group) {
$ret[ $group->id ] = array(
'parent' => (int)$group->parent_id,
'parents' => array((int)$group->parent_id),
'level' => $group->level
);
$level = ($level > $group->level) ? $level : $group->level;
}
for($k = 1; $k <= $level; $k++) {
foreach($ret as $i => $group) {
if($group['level'] == $k &&
!empty($group['parent']))
$ret[ $i ]['parents'] = array_merge($ret[
$group['parent'] ]['parents'], $ret[ $i
]['parents']);
}
}
return $ret;
}
private function getData($values, $allBtn = false, $min = false) {
$cpt = count($this->groups)-1;
$sep = '';
$ret = '[';
$rootDepth = 0;
$arrValues = explode(',', $values);
if($allBtn) {
$ret .=
'{"status":5,"name":"'.JText::_('HIKA_ALL').'","icon":"folder","value":""';
if($values == 'all')
$ret .= ',"checked":true';
$ret .= '}';
$sep = ',';
}
foreach($this->groups as $k => $group) {
$next = null;
if($k < $cpt)
$next = $this->groups[$k+1];
$status = 4;
if(!empty($next) && $next->level > $group->level)
$status = 2;
if($min == true && $k == 0)
$status = 3;
$ret .=
$sep.'{"status":'.$status.',"name":"'.str_replace('"','"',$group->text).'"';
$ret .= ',"value":'.$group->id;
if($values == 'all' || in_array($group->id, $arrValues)) {
$ret .= ',"checked":true';
}
$sep = '';
if(!empty($next)) {
if($next->level > $group->level) {
$ret .= ',"data":[';
} else if($next->level < $group->level) {
$ret .= '}'.str_repeat(']}', $group->level -
$next->level);
$sep = ',';
} else {
$ret .= '}';
$sep = ',';
}
} else {
$ret .= '}'.str_repeat(']}', $group->level -
$rootDepth);
}
}
$ret .= ']';
return $ret;
}
}
types/market_acl.php000064400000037604151160562420010537 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketMarket_aclType {
protected $acl = null;
protected $cpt = 0;
protected function load() {
$this->acl = array(
'order' => array(
'add',
'edit' => array(
'general',
'coupon',
'shipping',
'payment',
'customfields',
'customer',
'billingaddress',
'shippingaddress',
'products',
'vendor',
'notify',
'mail',
'plugin' => array()
),
'export',
'listing',
'show' => array(
'general',
'customer',
'customfields',
'billingaddress',
'shippingaddress ',
'history',
'vendors',
'invoice',
'shippinginvoice',
'plugin' => array()
),
'notify',
'request',
'payments'
),
'product' => array(
'add',
'edit' => array(
'name',
'code',
'published',
'description',
'category',
'quantity',
'price' => array(
'value',
'tax',
'currency',
'quantity',
'acl',
'user',
'date'
),
'msrp',
'tax',
'saledates',
'qtyperorder',
'customfields',
'related',
'options',
'bundles',
'weight',
'volume',
'manufacturer',
'pagetitle',
'url',
'metadescription',
'keywords',
'canonical',
'alias',
'acl',
'translations',
'vendor',
'files' => array(
'name',
'limit',
'free',
'description',
'upload',
'delete'
),
'images' => array(
'name',
'title',
'upload',
'link',
'delete'
),
'tags',
'warehouse',
'characteristics',
'variants',
'plugin' => array()
),
'new' => array(
'name',
'code',
'published',
'description',
'category',
'quantity',
'price' => array(
'value',
'tax',
'currency',
'quantity',
'acl',
'user',
'date'
),
'msrp',
'tax',
'saledates',
'qtyperorder',
'customfields',
'related',
'options',
'bundles',
'weight',
'volume',
'manufacturer',
'pagetitle',
'url',
'metadescription',
'keywords',
'canonical',
'alias',
'acl',
'translations',
'vendor',
'files' => array(
'name',
'limit',
'free',
'description',
'upload',
'delete'
),
'images' => array(
'name',
'title',
'upload',
'link',
'delete'
),
'tags',
'warehouse',
'characteristics',
'variants',
'plugin' => array()
),
'variant' => array(
'name',
'code',
'characteristics',
'published',
'description',
'quantity',
'price' => array(
'value',
'tax',
'currency',
'quantity',
'acl',
'user',
'date'
),
'saledates',
'qtyperorder',
'customfields',
'weight',
'volume',
'acl',
'translations',
'vendor',
'files' => array(
'name',
'limit',
'free',
'description',
'upload',
'delete'
),
'images' => array(
'name',
'upload',
'delete'
),
'plugin' => array()
),
'copy',
'delete',
'selection',
'listing',
'show',
'approve',
'sort',
'subvendor'
),
'characteristic' => array(
'add',
'edit' => array(
'value',
'alias',
'vendor'
),
'delete',
'listing',
'show',
'values' => array(
'add',
'edit' => array(
'value',
'vendor'
),
'delete',
'ordering'
)
),
'category' => array(
'add',
'edit' => array(
'name',
'published',
'parent',
'customfields',
'description',
'metadescription',
'pagetitle',
'keywords',
'alias',
'acl',
'translations',
'images' => array(
'upload',
'delete'
),
'plugin' => array()
),
'delete',
'listing',
'show'
),
'user' => array(
'edit' => array(
'email',
'customfields',
'address'
),
'listing',
'show' => array(
'general',
'address'
)
),
'vendor' => array(
'edit' => array(
'name',
'currency',
'description',
'terms',
'paypalemail',
'image',
'location',
'fields',
'users',
'plugin' => array()
),
'statistics'
),
'discount' => array(
'add',
'edit' => array(
'code',
'type',
'flatamount',
'percentamount',
'taxcategory',
'usedtimes',
'published',
'dates',
'minorder',
'minproducts',
'quota',
'peruser',
'product',
'category',
'categorychild',
'zone',
'targetvendor',
'user',
'autoload',
'percenttoproduct',
'nodoubling',
'acl',
'plugin' => array()
),
'delete',
'listing',
'show'
),
'paymentplugin' => array(
'add',
'edit' => array(
'name',
'description',
'published',
'specific',
),
'delete',
'listing',
),
'shippingplugin' => array(
'add',
'edit' => array(
'name',
'description',
'published',
'specific',
),
'delete',
'listing',
),
);
$tagsHelper = hikamarket::get('shop.helper.tags');
if(empty($tagsHelper) || !$tagsHelper->isCompatible()) {
$k = array_search('tags',
$this->acl['product']['edit']);
if($k !== false)
unset($this->acl['product']['edit'][$k]);
}
$paymentClass = hikamarket::get('class.payment');
$fields = $paymentClass->loadConfigurationFields();
foreach($fields['main'] as $k => $v) {
$this->acl['paymentplugin']['edit'][] =
str_replace(array('params.payment_', 'payment_',
'_'), array('', '', '-'), $k);
}
if(!empty($fields['restriction'])) {
$this->acl['paymentplugin']['edit']['restriction']
= array();
foreach($fields['restriction'] as $k => $v) {
$this->acl['paymentplugin']['edit']['restriction'][]
= str_replace(array('params.payment_', 'payment_',
'_'), array('', '', '-'), $k);
}
}
$shippingClass = hikamarket::get('class.shipping');
$fields = $shippingClass->loadConfigurationFields();
foreach($fields['main'] as $k => $v) {
$this->acl['shippingplugin']['edit'][] =
str_replace(array('params.shipping_', 'shipping_',
'_'), array('', '', '-'), $k);
}
if(!empty($fields['restriction'])) {
$this->acl['shippingplugin']['edit']['restriction']
= array();
foreach($fields['restriction'] as $k => $v) {
$this->acl['shippingplugin']['edit']['restriction'][]
= str_replace(array('params.shipping_', 'shipping_',
'_'), array('', '', '-'), $k);
}
}
$categories = array(
'order' => array(),
'product' => array(),
'category' => array(),
'vendor' => array(),
'discount' => array(),
'root' => array()
);
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikamarket');
JFactory::getApplication()->triggerEvent('onMarketAclPluginListing',
array(&$categories));
foreach($categories as $name => $data) {
if($name == 'root') {
foreach($data as $k => $v) {
if(!isset($this->acl[$k]))
$this->acl[$k] = $v;
}
continue;
}
if(isset($this->acl[$name]) &&
isset($this->acl[$name]['edit']['plugin'])
&& !empty($data))
$this->acl[$name]['edit']['plugin'] =
array_merge($this->acl[$name]['edit']['plugin'],
$data);
if(empty($this->acl[$name]['edit']['plugin']))
unset($this->acl[$name]['edit']['plugin']);
if($name == 'order' &&
empty($this->acl[$name]['show']['plugin']))
unset($this->acl[$name]['show']['plugin']);
if($name == 'product') {
if(isset($this->acl[$name]['variant']) &&
isset($this->acl[$name]['variant']['plugin'])
&& !empty($data))
$this->acl[$name]['variant']['plugin'] =
array_merge($this->acl[$name]['variant']['plugin'],
$data);
if(empty($this->acl[$name]['variant']['plugin']))
unset($this->acl[$name]['variant']['plugin']);
if(isset($this->acl[$name]) &&
isset($this->acl[$name]['new']['plugin']) &&
!empty($data))
$this->acl[$name]['new']['plugin'] =
array_merge($this->acl[$name]['new']['plugin'],
$data);
if(empty($this->acl[$name]['new']['plugin']))
unset($this->acl[$name]['new']['plugin']);
}
}
$this->cpt = 0;
foreach($this->acl as $a) {
$this->cpt++;
if(is_array($a)) { foreach($a as $b) {
$this->cpt++;
if(is_array($b)) { foreach($b as $c) {
$this->cpt++;
if(is_array($c)) { foreach($c as $d) {
$this->cpt++;
if(is_array($d)) { $this->cpt += count($d); }
}}
}}
}}
}
}
public function getList() {
if(empty($this->acl)) {
$this->load();
}
return $this->acl;
}
public function compile($formData) {
if(empty($this->acl)) {
$this->load();
}
if(empty($formData))
return '';
$ret = array();
$missing = false;
foreach($this->acl as $groupKey => $groupAcls) {
if(is_array($groupAcls)) {
$subRet = array();
$subRet = $this->subcompile($groupKey . '/', $formData,
$groupAcls);
if($subRet !== true && count($subRet) == 0 &&
in_array($groupKey, $formData))
$subRet = true;
if($subRet === true) {
$ret[] = $groupKey;
} else {
$ret = array_merge($ret, $subRet);
$missing = true;
}
} else {
if(in_array($groupAcls, $formData))
$ret[] = $groupAcls;
else
$missing = true;
}
}
if(!$missing)
return '*';
sort($ret, SORT_STRING);
return implode(',', $ret);
}
public function subcompile($root, &$formData, &$data) {
$all = true;
$ret = array();
foreach($data as $key => $acls) {
if(is_array($acls)) {
$name = $root . $key;
$subRet = $this->subcompile($name. '/', $formData,
$acls);
if($subRet !== true && count($subRet) == 0 &&
in_array($name, $formData))
$subRet = true;
if($subRet === true) {
$ret[] = $name;
} else {
$all = false;
$ret = array_merge($ret, $subRet);
}
} else {
$name = $root.$acls;
if(in_array($name, $formData))
$ret[] = $name;
else
$all = false;
}
}
if($all)
return true;
return $ret;
}
public function display($map, $value, $inherit = false) {
hikamarket::loadJslib('otree');
if(empty($this->acl)) {
$this->load();
}
$id = str_replace(array('[',']','
'),'_',$map);
$ret = '';
$attribs = '';
if($inherit !== false) {
$ret .= '<label>' . JText::_('ACL_INHERIT') .
'</label> ' . JHTML::_('hikaselect.booleanlist',
$inherit, 'onchange="var el =
document.getElementById(\''.$id.'_otree\');if(this.value==\'0\'){el.style.display=\'\'}else{el.style.display=\'none\'}"',
empty($value));
if(empty($value)) {
$attribs = ' style="display:none;"';
$value = '*';
}
}
if($value != '*' && strpos($value, '/') ===
false) // ACL Compat
$value = str_replace('_', '/', $value);
$ret .= '<div id="'.$id.'_otree"
class="oTree"'.$attribs.'></div>
<input type="hidden" name="'.$map.'"
value="'.$value.'"
id="'.$id.'_values"/>
<script type="text/javascript">
var options = {rootImg:"'.HIKAMARKET_IMAGES.'otree/",
showLoading:false, useSelection:false, checkbox:"-",
tricheckbox:true};';
$accesses = explode(',', trim(strtolower($value),
','));
sort($accesses, SORT_STRING);
$ret .= '
var data = ' . $this->getData($accesses) . ';
'.$id.' = new
window.oTree("'.$id.'",options,null,data,true);
'.$id.'.callbackCheck = function(treeObj, id, value) {
var v = treeObj.getChk(), e =
document.getElementById("'.$id.'_values");
if(v === false || v.length == 0) {
e.value = "none";
} else if( v.length > '.($this->cpt-1).') {
e.value = "all";
} else {
e.value = v.join(",");
}
};
</script>';
return $ret;
}
public function displayButton($map, $values) {
hikamarket::loadJslib('otree');
hikamarket::loadJslib('jquery');
$ret = '';
if(empty($this->acl)) {
$this->load();
}
$map = str_replace('"','',$map);
if(empty($this->id)) {
$this->id = 'hikamarket_marketacl';
$ret .= '<script type="text/javascript">
var data_'.$this->id.' = ' . $this->getData($values) .
';
'.$this->id.' = null;
if(!window.aclMgr)
window.aclMgr = {};
window.aclMgr.updateMarketAcl = function(el,id) {
var d = document, tree =
d.getElementById("'.$this->id.'_otree"), e =
d.getElementById(id), values = e.value;
if(!tree) {
tree = d.createElement("div");
tree.id = "'.$this->id.'_otree";
tree.style.position = "absolute";
tree.style.display = "none";
tree.className = "oTree acl-popup-content";
d.body.appendChild(tree);
'.$this->id.' = new
window.oTree("'.$this->id.'",{rootImg:"'.HIKAMARKET_IMAGES.'otree/",
showLoading:false, useSelection:false,
checkbox:"'.$map.'",
tricheckbox:true},null,data_'.$this->id.',true);
}
switch(values) {
case "all":
treevalues = "*";
break;
case "none":
treevalues = "";
break;
default:
treevalues = values.split(",");
break;
}
'.$this->id.'.callbackCheck = null;
'.$this->id.'.chks(treevalues, null, false);
var p = jQuery(el).offset();
if(tree.style.display != "none" && tree.style.top !=
((p.top + el.offsetHeight) + "px")) {
setTimeout(function(){
window.aclMgr.updateMarketAcl(el,id);
}, 100);
return false;
}
tree.style.top = (p.top + el.offsetHeight + 5) + "px";
tree.style.left = (p.left + el.offsetWidth - 200) + "px";
var f = function(evt) {
if (!evt) var evt = window.event;
var trg = (window.event) ? evt.srcElement : evt.target;
while(trg != null) {
if(trg == tree || trg == el)
return;
trg = trg.parentNode;
}
tree.style.display = "none";
window.Oby.removeEvent(document, "click", f);
};
window.Oby.addEvent(document, "click", f);
'.$this->id.'.callbackCheck = function(treeObj, id, value) {
var v = treeObj.getChk();
if(v === false || v.length == 0) {
e.value = "none";
} else if( v.length > '.($this->cpt-1).') {
e.value = "all";
} else {
e.value = v.join(",");
}
};
tree.style.display = "";
return false;
}
</script>';
}
$id =
str_replace(array('[',']'),array('_',''),$map);
$ret .= '<a href="#" onclick="return
window.aclMgr.updateMarketAcl(this,
\''.$id.'\');">'.
'<i class="fas fa-unlock-alt"></i>'.
'</a><input type="hidden"
id="'.$id.'" name="'.$map.'"
value="'.$values.'" />';
return $ret;
}
private function getAccess($action, $access) {
$ret = hikamarket::aclTest($action, $access);
if($ret === 1 || $ret === -1)
$ret = 2;
return $ret;
}
private function getData($accesses, $acls = null, $key = '') {
$data = array();
if($acls === null)
$acls = $this->acl;
foreach($acls as $groupKey => $groupAcls) {
if(is_array($groupAcls)) {
$status = 2;
if(!empty($key))
$status = 1;
$subData = $this->getData($accesses, $groupAcls,
$key.$groupKey.'/');
$data[] = array(
'status' => $status,
'name' => $groupKey,
'value' => $key.$groupKey,
'checked' => $this->getAccess($key.$groupKey,
$accesses),
'data' => $subData
);
} else {
$data[] = array(
'status' => 0,
'name' => $groupAcls,
'value' => $key.$groupAcls,
'checked' => $this->getAccess($key.$groupAcls,
$accesses)
);
}
}
if(empty($key))
return json_encode($data);
return $data;
}
}
types/menus.php000064400000003706151160562420007560 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketMenusType {
private $values = null;
private function load($value) {
if(isset($this->values))
return;
if(!HIKASHOP_J30){
$query = 'SELECT m.alias as name, m.id as itemid, mt.title '
.
' FROM `#__menu` as m LEFT JOIN `#__menu_types` as mt on
m.menutype = mt.menutype '.
' WHERE m.client_id = 0 AND m.parent_id != 0 ORDER BY mt.title
ASC, m.ordering ASC';
} else {
$query = 'SELECT m.alias as name, m.id as itemid, mt.title , m.link
'.
' FROM `#__menu` as m LEFT JOIN `#__menu_types` as mt on
m.menutype = mt.menutype '.
' WHERE m.client_id = 0 AND m.parent_id != 0 AND m.published = 1
AND m.type=\'component\' '.
' ORDER BY mt.title ASC';
}
$db = JFactory::getDBO();
$db->setQuery($query);
$menus = $db->loadObjectList('itemid');
$this->values = array(
JHTML::_('select.option', '0',
JText::_('HIKA_NONE'))
);
$lastGroup = '';
foreach($menus as $menu) {
if($menu->title != $lastGroup) {
if(!empty($lastGroup))
$this->values[] = JHTML::_('select.option',
'</OPTGROUP>');
$this->values[] = JHTML::_('select.option',
'<OPTGROUP>', $menu->title);
$lastGroup = $menu->title;
}
if(strpos($menu->link,
'index.php?option='.HIKAMARKET_COMPONENT)===false &&
$menu->itemid != $value)
continue;
$this->values[] = JHTML::_('select.option',
$menu->itemid, $menu->name);
}
if(!empty($lastGroup))
$this->values[] = JHTML::_('select.option',
'</OPTGROUP>');
}
public function display($map, $value) {
$this->load($value);
return JHTML::_('select.genericlist', $this->values, $map,
'class="custom-select" size="1"',
'value', 'text', $value);
}
}
types/menu_content.php000064400000003120151160562420011115
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketMenu_contentType {
protected $values;
public function __construct() {
$this->values = array();
}
private function load() {
$this->values = array(
'vendor' => JHTML::_('select.option',
'vendor', JText::_('HIKA_VENDOR')),
);
}
public function display($map, $value, &$js, $id = '',
$warning = false) {
if(empty($this->values))
$this->load();
$options = '';
if(!empty($id)) {
if(empty($value))
$value = 'vendor';
$js .= "\r\n".
'if(window.localPage.switchPanel)
window.localPage.switchPanel(\''.$id.'\',
"'.str_replace('"', '\\"',
$value).'", "content");'."\r\n";
$options = 'onchange="if(window.localPage.switchPanel)
window.localPage.switchPanel(\''.$id.'\', this.value,
\'content\');"';
}
if(!isset($this->values[$value])) {
$values = $this->values;
$values[$value] = JHTML::_('select.option', $value, $value);
$ret = '';
if($warning)
$ret .= JText::_('HIKAM_MENU_TYPE_NOT_SUPPORTED') .
'<br/>';
return $ret . JHTML::_('select.genericlist', $values, $map,
'class="inputbox" size="1" ' . $options,
'value', 'text', $value, 'content_select');
}
return JHTML::_('select.genericlist', $this->values, $map,
'class="inputbox" size="1" ' . $options,
'value', 'text', $value, 'content_select');
}
}
types/menu_layout.php000064400000003241151160562420010764 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketMenu_layoutType {
protected $values = null;
protected function load() {
if(!empty($this->values))
return $this->values;
$this->values = array(
'div' => JHTML::_('select.option',
'div', JText::_('DIV')),
'table' => JHTML::_('select.option',
'table', JText::_('TABLE')),
'list' => JHTML::_('select.option',
'list', JText::_('LIST')),
'inherit' => JHTML::_('select.option',
'inherit', JText::_('HIKA_INHERIT')),
);
JPluginHelper::importPlugin('hikashop');
JFactory::getApplication()->triggerEvent('onHkmLayoutTypeLoad',
array(&$this->values));
return $this->values;
}
public function display($map, $value, &$js, $id = '') {
$values = $this->load();
$options = '';
if(hikaInput::get()->getCmd('from_display', false) !=
false)
unset($values['inherit']);
if(empty($id))
return JHTML::_('select.genericlist', $values, $map,
'class="inputbox" size="1" '.$options,
'value', 'text', $value);
$js .= '
if(!window.localPage) window.localPage = {};
if(window.localPage.switchPanel)
window.localPage.switchPanel(\''.$id.'\',\''.$value.'\',\'layout\');
';
$options = 'onchange="if(window.localPage.switchPanel)
window.localPage.switchPanel(\''.$id.'\',this.value,\'layout\');"';
return JHTML::_('select.genericlist', $values, $map,
'class="inputbox" size="1" '.$options,
'value', 'text', $value);
}
}
types/namebox.php000064400000050711151160562420010060 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketNameboxType {
const NAMEBOX_SINGLE = 1;
const NAMEBOX_MULTIPLE = 2;
protected $type = '';
protected $options = array();
protected $types = array(
'product' => array(
'class' => 'class.product',
'name' => 'product_name',
'mode' => 'tree',
'url' => 'product&task=getTree',
'options' => array(
'tree_url' =>
'product&task=getTree&category_id={ID}',
'tree_key' => '{ID}',
'onlyNode' => true
),
),
'product_template' => array(
'class' => 'class.product',
'name' => 'product_name',
'mode' => 'list',
'url' =>
'product&task=getTree&namebox_mode=product_template',
'displayFormat' => '{product_id} - {product_name} [
{product_code} ]',
'params' => array(
'product_type' => 'template'
),
'options' => array(
),
),
'category' => array(
'class' => 'class.category',
'name' => 'category_name',
'mode' => 'tree',
'url' => 'category&task=getTree',
'options' => array(
'tree_url' =>
'category&task=getTree&category_id={ID}',
'tree_key' => '{ID}',
),
),
'brand' => array(
'class' => 'class.category',
'name' => 'category_name',
'mode' => 'list',
'params' => array(
'category_type' => 'manufacturer',
'filters' => array(
'c.category_depth > 1'
),
'key' => 'category_id',
),
'url' =>
'category&task=findList&category_type=manufacturer',
'options' => array(
'tree_url' =>
'category&task=getTree&category_type=manufacturer&category_id={ID}',
'tree_key' => '{ID}',
),
),
'characteristic' => array(
'class' => 'class.characteristic',
'name' => 'characteristic_value',
'mode' => 'list',
'params' => array(
'value' => false
),
'url' => 'characteristic&task=findList'
),
'characteristic_value' => array(
'class' => 'class.characteristic',
'name' => 'characteristic_value',
'mode' => 'list',
'params' => array(
'value' => true
),
'url' =>
'characteristic&task=findList&characteristic_type=value&characteristic_parent_id={ID}',
'url_params' => array('ID'),
'options' => array(
'add_url' =>
'characteristic&task=addCharacteristic&characteristic_type=value&characteristic_parent_id={ID}&tmpl=json',
)
),
'discount' => array(
'class' => 'class.discount',
'name' => 'discount_code',
'mode' => 'list',
'displayFormat' => '{discount_code}
({discount_type})',
'url' =>
'discount&task=findValue&displayFormat={displayFormat}',
'params' => array(
),
),
'modules' => array(
'class' => 'class.modules',
'name' => 'id',
'mode' => 'list',
'displayFormat' => '{title} ({id})',
'url' => 'modules&task=getValues',
'options' => array(
'olist' => array(
'table' => array('title' =>
'HIKA_NAME', 'module' => 'HIKA_TYPE',
'id' => 'ID'),
'displayFormat' => '{title} ({id})'
)
)
),
'order_status' => array(
'class' => 'shop.class.orderstatus',
'name' => 'orderstatus_name',
'mode' => 'list',
'params' => array(
),
'url' =>
'category&task=findList&category_type=order_status'
),
'plugin_images' => array(
'class' => 'class.plugin',
'name' => 'image_name',
'mode' => 'list',
'displayFormat' => '{image_name}',
'params' => array(
'type' => 'images'
),
'url' =>
'plugin&task=findList&image_type={TYPE}',
'url_params' => array('TYPE'),
'options' => array(
'olist' => array(
'table' => array('image_name' =>
'HIKA_NAME', 'image_url' => 'HIKA_IMAGE'
),
'displayFormat' => '{image_name}',
)
)
),
'shipping_methods' => array(
'class' => 'class.shipping',
'name' => 'shipping_namekey',
'mode' => 'list',
'params' => array(
)
),
'payment_methods' => array(
'class' => 'class.payment',
'name' => 'payment_namekey',
'mode' => 'list',
'params' => array(
)
),
'user' => array(
'class' => 'class.user',
'name' => 'user_id',
'mode' => 'list',
'displayFormat' => '{user_id} - {name}',
'url' => 'user&task=getValues',
'options' => array(
'olist' => array(
'table' => array('user_id' =>
'ID', 'name' => 'HIKA_NAME',
'user_email' => 'HIKA_EMAIL' ),
'displayFormat' => '{user_id} - {name}',
)
)
),
'vendor' => array(
'class' => 'class.vendor',
'name' => 'vendor_name',
'mode' => 'list',
'displayFormat' => '{vendor_id} -
{vendor_name}',
'url' => 'vendor&task=getValues',
'options' => array(
'olist' => array(
'table' => array('vendor_id' =>
'ID', 'vendor_name' => 'HIKA_NAME',
'vendor_email' => 'HIKA_EMAIL'),
'displayFormat' => '{vendor_id} -
{vendor_name}',
)
)
),
'warehouse' => array(
'class' => 'class.warehouse',
'name' => 'warehouse_name',
'mode' => 'list',
'displayFormat' => '{warehouse_name}',
'url' =>
'product&task=findValue&displayFormat={displayFormat}',
'params' => array(
)
),
'zone' => array(
'class' => 'class.zone',
'name' => 'zone_namekey',
'mode' => 'tree',
'displayFormat' => '{zone_name_english}',
'url' =>
'zone&task=getTree&displayFormat={displayFormat}',
'options' => array(
'tree_url' =>
'zone&task=getTree&displayFormat={displayFormat}&zone_key={ID}',
'tree_key' => '{ID}',
)
),
'address' => array(
'class' => 'class.address',
'name' => 'address_mini_format',
'mode' => 'list',
'displayFormat' => '{address_mini_format}',
'url' =>
'user&task=getAddressList&address_type={ADDR_TYPE}&user_id={USER_ID}',
'url_params' =>
array('USER_ID','ADDR_TYPE'),
),
'rawlist' => array(
'class' => 'type.namebox_rawlist',
'mode' => 'list'
),
);
public function __construct() {
}
public function setType($type, $options = array()) {
$this->type = $type;
$this->options = $options;
}
private function load($type) {
if(isset($this->types[$type]))
return;
static $loaded_types = false;
if($loaded_types === false) {
$loaded_types = array();
JPluginHelper::importPlugin('hikashop');
JFactory::getApplication()->triggerEvent('onNameboxTypesLoad',
array(&$loaded_types));
}
foreach($loaded_types as $k => $v) {
if(!isset($this->types[$k]))
$this->types[$k] = $v;
}
}
private function getClass($class) {
if(is_string($class))
return hikamarket::get($class);
if(is_object($class) && method_exists($class,
'getNameboxData'))
return $class;
if(is_array($class) && isset($class['file']) &&
file_exists($class['file']) &&
isset($class['name'])) {
include_once($class['file']);
$n = $class['name'];
$ret = new $n;
if(method_exists($ret, 'getNameboxData'))
return $ret;
}
return null;
}
public function getValues($search = '', $type = '',
$options = array()) {
if(empty($type))
$type = $this->type;
if(empty($type))
return '';
$this->load($type);
if(!isset($this->types[$type]))
return '';
$typeConfig = $this->types[$type];
$nameboxClass = $this->getClass($typeConfig['class']);
if(empty($nameboxClass))
return false;
if(substr($typeConfig['class'], 0, 5) == 'shop.')
hikamarket::get('shop.type.namebox');
if(!empty($options['displayFormat']))
$options['displayFormat'] =
$this->getDisplayFormat($options['displayFormat'], $type);
if(empty($options['displayFormat']))
$options['displayFormat'] =
@$typeConfig['displayFormat'];
$fullLoad = true;
list($elements, $values) = $nameboxClass->getNameboxData($typeConfig,
$fullLoad, hikamarketNameboxType::NAMEBOX_MULTIPLE, null, $search,
$options);
if((!empty($typeConfig['mode']) &&
$typeConfig['mode'] == 'list') &&
empty($typeConfig['options']['olist']['table'])
&& !is_string(reset($elements))) {
$n = $typeConfig['name'];
foreach($elements as &$element) {
if(!empty($options['displayFormat']))
$element = $this->getDisplayValue($element, $typeConfig,
$options);
else
$element = $element->$n;
}
unset($element);
}
return $elements;
}
public function display($map, $value, $mode =
hikamarketNameboxType::NAMEBOX_MULTIPLE, $type = '', $options =
array()) {
if(empty($type))
$type = $this->type;
if(empty($type))
return '';
$this->load($type);
if(!isset($this->types[$type]))
return '';
$typeConfig = $this->types[$type];
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$nameboxClass = $this->getClass($typeConfig['class']);
if(empty($nameboxClass))
return '';
if(substr($typeConfig['class'], 0, 5) == 'shop.')
hikamarket::get('shop.type.namebox');
hikamarket::loadJslib('otree');
if($mode == hikamarketNameboxType::NAMEBOX_MULTIPLE &&
isset($options['sort']) && $options['sort'] ==
true)
hikamarket::loadJslib('jquery');
$id =
rtrim(str_replace(array('"',"'",'\\','[]','[',']','.'),array('','','','','_','','_'),$map),
'_');
if(!empty($options['id']))
$id = $options['id'];
if(empty($id))
$id = !empty($options['id']) ? $options['id'] :
'nb_'.uniqid();
$key = '';
$default_text = !empty($options['default_text']) ?
$options['default_text'] : 'HIKA_NONE';
$name =
'<em>'.JText::_($default_text).'</em>';
$cleanText = '<em>'.str_replace("'",
"\\'", JText::_($default_text)).'</em>';
$fullLoad = true;
list($elements, $values) = $nameboxClass->getNameboxData($typeConfig,
$fullLoad, $mode, $value, null, $options);
if(isset($options['returnOnEmpty']) &&
empty($elements))
return $options['returnOnEmpty'];
$displayFormat = '';
if(!empty($typeConfig['displayFormat']))
$displayFormat = $typeConfig['displayFormat'];
if(!empty($options['displayFormat']))
$displayFormat = $options['displayFormat'];
$style = '';
if(!empty($options['style']))
$style = ' style="' .
is_array($options['style']) ? implode(' ',
$options['style']) : $options['style'] .
'"';
$attributes = '';
if(!empty($options['attributes']))
$attributes = ' '.trim($options['attributes']);
$lang = JFactory::getLanguage();
$leftOffset = ($lang->isRTL()) ? '2000px' :
'-2000px';
if((!empty($typeConfig['mode']) &&
$typeConfig['mode'] == 'list') &&
empty($typeConfig['options']['olist']['table'])
&& !is_string(reset($elements))) {
$n = $typeConfig['name'];
foreach($elements as &$element) {
if(!empty($displayFormat))
$element = $this->getDisplayValue($element, $typeConfig,
$options);
else
$element = $element->$n;
}
unset($element);
}
$ret = '<div class="nameboxes"
id="'.$id.'"
onclick="window.oNameboxes[\''.$id.'\'].focus(\''.$id.'_text\');"'.$style.$attributes.'>';
if($mode == hikamarketNameboxType::NAMEBOX_SINGLE) {
if(!empty($values)) {
$key = $value;
$v = $values;
if(is_array($values))
$v = $values[$key];
$name = $this->getDisplayValue($v, $typeConfig, $options);
}
$delete = (isset($options['delete']) &&
$options['delete'] == true);
$ret .= '
<div class="namebox"
id="'.$id.'_namebox">
<input type="hidden" name="'.$map.'"
id="'.$id.'_valuehidden"
value="'.$key.'"/><span
id="'.$id.'_valuetext">'.$name.'</span>
'.(!$delete ?
'<a class="editbutton" href="#"
onclick="return
false;"><span>-</span></a>' :
'<a class="closebutton" href="#"
onclick="window.oNameboxes[\''.$id.'\'].clean(this,\''.$cleanText.'\');return
false;"><span>X</span></a>'
).'
</div>
<div class="nametext">
<input id="'.$id.'_text" type="text"
style="width:50px;min-width:60px"
onfocus="window.oNameboxes[\''.$id.'\'].focus(this);"
onkeyup="window.oNameboxes[\''.$id.'\'].search(this);"
onchange="window.oNameboxes[\''.$id.'\'].search(this);"/>
<span
style="position:absolute;top:0px;left:'.$leftOffset.';visibility:hidden"
id="'.$id.'_span">xxxxxx</span>
</div>';
}
else {
if(substr($map, -2) === '[]')
$map = substr($map, 0, -2);
if(!empty($values)) {
$n = $typeConfig['name'];
foreach($values as $key => $name) {
$obj = null;
if(is_object($name)) {
$obj = $name;
if(!empty($displayFormat))
$name = $this->getDisplayValue($obj, $typeConfig, $options);
else
$name = $name->$n;
}
$ret .= "\r\n".'<div class="namebox"
id="'.$id.'-'.$key.'">'.
'<input type="hidden"
name="'.$map.'[]"
value="'.$key.'"/>'.$name.
' <a class="closebutton" href="#"
onclick="window.oNameboxes[\''.$id.'\'].unset(this,\''.$key.'\');window.oNamebox.cancelEvent();return
false;"><span>X</span></a>'.
'</div>';
}
}
$ret .= "\r\n".'<div class="namebox"
style="display:none;"
id="'.$id.'tpl">'.
'<input type="hidden" name="{map}"
value="{key}"/>{name}'.
' <a class="closebutton" href="#"
onclick="window.oNameboxes[\''.$id.'\'].unset(this,\'{key}\');window.oNamebox.cancelEvent();return
false;"><span>X</span></a>'.
'</div>';
$ret .= "\r\n".'<div
class="nametext">'.
'<input id="'.$id.'_text"
type="text" style="width:50px;min-width:60px"
onfocus="window.oNameboxes[\''.$id.'\'].focus(this);"
onkeyup="window.oNameboxes[\''.$id.'\'].search(this);"
onchange="window.oNameboxes[\''.$id.'\'].search(this);"/>'.
'<span
style="position:absolute;top:0px;left:'.$leftOffset.';visibility:hidden"
id="'.$id.'_span">span</span>'.
'</div>';
if(!empty($options['force_data']))
$ret .= '<input type="hidden"
name="'.$map.'[]" value=""/>';
}
if(isset($options['add']) && $options['add']
== true) {
$ret .= '<div id="'.$id.'_add"
style="display:none;float:right"><a href="#"
onclick="return
window.oNameboxes[\''.$id.'\'].create(this);"><img
src="'.HIKAMARKET_IMAGES.'icon-16/plus.png"
style="vertical-align:middle;margin:0px;padding:0px;"
alt="+"/></a></div>';
$ret .= '<div id="'.$id.'_loading"
style="display:none;float:right"><img
src="'.HIKAMARKET_IMAGES.'icon-16/loading.gif"
style="vertical-align:middle;margin:0px;padding:0px;"
alt="loading..."/></div>';
}
$ret .= "\r\n\t".'<div
id="'.$id.'hikaclear"
style="clear:both;float:none;"></div></div>';
$namebox_options = array(
'mode' => $typeConfig['mode'],
'img_dir' => HIKAMARKET_IMAGES,
'map' => $map,
'min' =>
$shopConfig->get('namebox_search_min_length', 3)
);
if($mode == hikamarketNameboxType::NAMEBOX_MULTIPLE &&
isset($options['sort']) && $options['sort'] ==
true)
$namebox_options['sort'] = true;
if(isset($options['add']) && $options['add']
== true &&
!empty($typeConfig['options']['add_url'])) {
$namebox_options['add'] = true;
$url = ''.
$typeConfig['options']['add_url'];
if(!empty($typeConfig['url_params'])) {
foreach($typeConfig['url_params'] as $k) {
$p = '';
if(isset($options['url_params'][$k])) {
$p = $options['url_params'][$k];
}
$url = str_replace('{' . $k . '}', $p, $url);
}
}
$url .= '&' . hikamarket::getFormToken() .
'=1';
$namebox_options['add_url'] = hikamarket::completeLink($url,
false, false, true);
}
if($mode == hikamarketNameboxType::NAMEBOX_SINGLE) {
$namebox_options['multiple'] = false;
$namebox_options['default_text'] =
'<em>'.JText::_($default_text).'</em>';
}
if(isset($typeConfig['options'])) {
foreach($typeConfig['options'] as $k => $v) {
if(isset($namebox_options[$k]))
continue;
$namebox_options[$k] = $v;
}
}
if(isset($namebox_options['olist']['table'])) {
foreach($namebox_options['olist']['table'] as $k
=> $v) {
$namebox_options['olist']['table'][$k] =
JText::_($v);
}
}
if(!$fullLoad) {
$url = '' . $typeConfig['url'];
if(!empty($typeConfig['url_params'])) {
foreach($typeConfig['url_params'] as $k) {
$p = '';
if(isset($options['url_params'][$k])) {
$p = $options['url_params'][$k];
}
$url = str_replace('{' . $k . '}', $p, $url);
}
}
if(strpos($url, '{displayFormat}') !== false)
$url = str_replace('{displayFormat}',
$this->getDisplayFormatId($type, $displayFormat), $url);
$url .= '&search=HIKASEARCH';
if(empty($typeConfig['mode']) || $typeConfig['mode']
== 'list') {
if(empty($namebox_options['olist']))
$namebox_options['olist'] = array();
$namebox_options['olist']['gradientLoad'] = true;
$url .= '&start=HIKASTART';
$namebox_options['url_pagination'] = 'HIKASTART';
}
if(substr($url, 0, 10) == 'index.php?')
$namebox_options['url'] = str_replace('&',
'&', JRoute::_($url));
else
$namebox_options['url'] = hikamarket::completeLink($url,
false, false, true);
$namebox_options['url_keyword'] = 'HIKASEARCH';
}
if(isset($namebox_options['tree_url'])) {
if(strpos($namebox_options['tree_url'],
'{displayFormat}') !== false)
$namebox_options['tree_url'] =
str_replace('{displayFormat}',
$this->getDisplayFormatId($type, $displayFormat),
$namebox_options['tree_url']);
if(substr($namebox_options['tree_url'], 0, 10) ==
'index.php?')
$namebox_options['tree_url'] =
str_replace('&', '&',
JRoute::_($namebox_options['tree_url']));
else
$namebox_options['tree_url'] =
hikamarket::completeLink($namebox_options['tree_url'], false,
false, true);
}
if(!empty($typeConfig['mode']) &&
$typeConfig['mode'] == 'tree') {
$ret .= '
<div class="namebox-popup">
<div style="display:none;"
data-oresize="'.$id.'" class="namebox-popup-resize
namebox-popup-container">
<div id="'.$id.'_otree" class="oTree
namebox-popup-content"></div>
</div>
</div>
<script type="text/javascript">
new window.oNamebox(
\''.$id.'\',
'.json_encode($elements).',
'.json_encode($namebox_options).'
);
</script>';
}
else {
$ret .= '
<div class="namebox-popup">
<div style="display:none;"
data-oresize="'.$id.'" class="namebox-popup-resize
namebox-popup-container">
<div id="'.$id.'_olist" class="oList
namebox-popup-content"></div>
</div>
</div>
<script type="text/javascript">
new window.oNamebox(
\''.$id.'\',
'.json_encode($elements).',
'.json_encode($namebox_options).'
);';
if(!empty($values) && $mode ==
hikamarketNameboxType::NAMEBOX_MULTIPLE) {
$b = array();
foreach($values as $key => $name) {
$b[] = $key;
}
$ret .= '
try{
window.oNameboxes[\''.$id.'\'].content.block('.json_encode($b).');
}catch(e){}';
}
$ret .= '
</script>';
}
return $ret;
}
public function getDisplayValue($value, $typeConfig, $options) {
$ret = '';
if(!empty($typeConfig['displayFormat']))
$ret = $typeConfig['displayFormat'];
if(!empty($options['displayFormat']))
$ret = $options['displayFormat'];
$n = @$typeConfig['name'];
if(empty($ret)) {
if(is_string($value))
return $value;
if(is_object($value) && isset($value->name))
return $value->name;
if(is_object($value) && isset($value->$n))
return $value->$n;
return $ret;
}
if(is_array($value))
$v = reset($value);
$matches = array();
if(preg_match_all('#{([_a-zA-Z0-9]+)}#u', $ret, $matches)) {
foreach($matches[1] as $m) {
$v = '';
if(isset($value->$m))
$v = $value->$m;
$ret = str_replace('{' . $m . '}', $v, $ret);
}
}
return $ret;
}
public function getDisplayFormatId($displayFormat, $type = '')
{
if(empty($type))
$type = $this->type;
if(empty($type))
return false;
$this->load($type);
if(!isset($this->types[$type]))
return false;
$app = JFactory::getApplication();
$displays =
$app->getUserState(HIKASHOP_COMPONENT.'.nameboxes.display',
null);
if(empty($displays))
$displays = array();
if(!empty($displays[$type])) {
foreach($displays[$type] as $k => $v) {
if($v == $displayFormat)
return $k;
}
} else {
$displays[$type] = array();
}
$id = substr($type, 0, 2) . uniqid();
$displays[$type][$id] = $displayFormat;
$app->setUserState(HIKASHOP_COMPONENT.'.nameboxes.display',
$displays);
return $id;
}
public function getDisplayFormat($id, $type = '') {
if(empty($type))
$type = $this->type;
if(empty($type))
return false;
$this->load($type);
if(!isset($this->types[$type]))
return false;
$app = JFactory::getApplication();
$displays =
$app->getUserState(HIKASHOP_COMPONENT.'.nameboxes.display',
null);
if(!isset($displays[$type]))
return false;
if(isset($displays[$type][$id]))
return $displays[$type][$id];
return false;
}
}
types/namebox_rawlist.php000064400000001626151160562420011626
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketNamebox_rawlistType {
public function &getNameboxData($typeConfig, &$fullLoad, $mode,
$value, $search, $options) {
$ret = array(
0 => array(),
1 => array()
);
$fullLoad = true;
if(empty($options['rawdata']))
return $ret;
$ret[0] = $options['rawdata'];
if(!empty($value) && !is_array($value)) {
if(is_numeric($value))
$value = (int)$value;
$ret[1] = $ret[0][$value];
} else if(!empty($value) && is_array($value)) {
foreach($value as $v) {
if(is_numeric($v))
$v = (int)$v;
$ret[1][$v] = $ret[0][$v];
}
}
return $ret;
}
}
types/order_status.php000064400000003075151160562420011146
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketOrder_statusType {
protected $values;
public function __construct() {
$this->values = array();
}
protected function load() {
$categoryClass = hikamarket::get('shop.class.category');
$filters = array();
$rows = $categoryClass->loadAllWithTrans('status', false,
$filters);
foreach($rows as $row) {
if(!empty($row->translation)) {
$this->values[$row->category_name] =
JHTML::_('select.option', $row->category_name,
hikamarket::orderStatus($row->translation));
} else {
$this->values[$row->category_name] =
JHTML::_('select.option', $row->category_name,
hikamarket::orderStatus($row->category_name));
}
}
}
public function display($map, $value, $extra = '', $addAll =
false, $filters = array()) {
if(empty($this->values))
$this->load();
if($addAll) {
$values = array_merge(
array(JHTML::_('select.option', '',
JText::_('ALL_STATUSES'))),
$this->values
);
} else {
$values = $this->values;
}
if(!empty($filters)) {
if(is_string($filters))
$filters = explode(',', $filters);
foreach($values as $k => $v) {
if(!in_array($k, $filters))
unset($values[$k]);
}
}
return JHTML::_('select.genericlist', $values, $map, $extra,
'value', 'text', $value);
}
}
types/paymentmethods.php000064400000006701151160562420011470
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketPaymentmethodsType {
protected $values = array();
protected function loadBackend($vendor_id) {
if(!empty($this->values[$vendor_id]))
return;
$db = JFactory::getDBO();
$this->values[$vendor_id] = array( 0 => array('type'
=> 'manual', 'name' => 'Manual') );
$payments = array('paypal');
foreach($payments as &$p) {
$p = $db->Quote($p);
unset($p);
}
$query = 'SELECT payment_id, payment_type, payment_name FROM '
. hikamarket::table('shop.payment') . ' WHERE payment_type
IN (' . implode(',', $payments).')';
$db->setQuery($query);
$methods = $db->loadObjectList();
foreach($methods as $m) {
$this->values[$vendor_id][$m->payment_id] = array(
'type' => $m->payment_type,
'name' => $m->payment_name . '
('.$m->payment_type.' /
'.$m->payment_id.')'
);
}
}
protected function loadFrontend($form, $value = '', $vendor_id =
0) {
if(!empty($this->values['front']))
return;
$this->values['front'] = array();
$pluginsClass = hikashop_get('class.plugins');
$methods = $pluginsClass->getMethods('payment');
if(empty($methods))
return;
foreach($methods as $m) {
if(isset($m->enabled) && !$m->enabled &&
$m->payment_id != $value)
continue;
if(isset($m->payment_published) && !$m->payment_published
&& $m->payment_id != $value)
continue;
if(isset($m->payment_vendor_id) &&
(int)$m->payment_vendor_id > 0 &&
(int)$m->payment_vendor_id != $vendor_id)
continue;
$this->values['front'][$m->payment_id] =
$m->payment_name;
}
}
public function get($vendor_id, $payment_id) {
$this->loadBackend($vendor_id);
if(!empty($this->values[$vendor_id][$payment_id]))
return $this->values[$vendor_id][$payment_id]['type'];
return null;
}
public function display($map, $values, $options = array()) {
if(is_string($options))
$options = array('attribute' => $options);
$attribute = 'size="1"';
if(isset($options['attribute']))
$attribute = implode(' ', $options['attribute']);
$vendor_id = 0;
if(isset($options['vendor_id']))
$vendor_id = (int)$options['vendor_id'];
$form = false;
if(isset($options['form']))
$form = (int)$options['form'];
$app = JFactory::getApplication();
if($app->isAdmin())
return $this->displayBackend($vendor_id, $map, $values);
$this->loadFrontend($form, $values, $vendor_id);
$items = array();
if(!$form) {
$attribute .= '
onchange="document.adminForm.submit();"';
$items[] = JHTML::_('select.option', '',
JText::_('ALL_PAYMENT_METHODS') );
}
foreach($this->values['front'] as $key => $text) {
$items[] = JHTML::_('select.option', $key, $text);
}
return JHTML::_('select.genericlist', $items, $map,
'class="inputbox" '.$attribute, 'value',
'text', $values);
}
private function displayBackend($vendor_id, $map, $values, $attribute =
'size="1"') {
$this->loadBackend($vendor_id);
$items = array();
foreach($this->values[$vendor_id] as $key => $text) {
$items[] = JHTML::_('select.option', $key,
$text['name']);
}
return JHTML::_('select.genericlist', $items, $map,
'class="inputbox" '.$attribute, 'value',
'text', $values);
}
}
types/products.php000064400000002511151160562420010265 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketProductsType {
public function display($map, $value) {
return '';
}
public function displaySingle($map, $value, $display = '', $root
= 0, $delete = false) {
if(empty($this->nameboxType))
$this->nameboxType = hikamarket::get('type.namebox');
return $this->nameboxType->display(
$map,
$value,
hikamarketNameboxType::NAMEBOX_SINGLE,
'product',
array(
'delete' => $delete,
'root' => $root,
'displayFormat' => $display,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
)
);
}
public function displayMultiple($map, $values, $display = '',
$root = 0) {
if(empty($this->nameboxType))
$this->nameboxType = hikamarket::get('type.namebox');
return $this->nameboxType->display(
$map,
$values,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'product',
array(
'delete' => true,
'root' => $root,
'sort' => true,
'displayFormat' => $display,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
)
);
}
}
types/quantity.php000064400000001604151160562420010302 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketQuantityType {
public function display($map, $value) {
$attribs = '';
$label = '';
$id =
str_replace(array('][','[',']'),array('__','_',''),
$map);
return '<div class="hk-input-group
hkm_quantity_input">'.
'<input type="text"
name="'.$map.'" id="'.$id.'"
value="'.$value.'" class="hk-form-control"
'.$attribs.'/>'.
'<div class="hk-input-group-append">'.
'<button class="hikabtn"
onclick="document.getElementById(\''.$id.'\').value=\''.JText::_('UNLIMITED',
true).'\';return false;"><i class="fas
fa-infinity"></i></button>'.
'</div>'.
'</div>';
}
}
types/rates.php000064400000004673151160562420007553 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketRatesType {
protected $values = array();
private function load() {
$this->values = array(
'none' => JHTML::_('select.option', '',
JText::_('HIKA_NONE'))
);
$this->values['none']->rate = 0.0;
$this->values['none']->extra =
'data-rate="0.0"';
$query = 'SELECT * FROM ' .
hikamarket::table('shop.tax');
$db = JFactory::getDBO();
$db->setQuery($query);
$this->results = $db->loadObjectList();
foreach($this->results as $result) {
$this->values[$result->tax_namekey] =
JHTML::_('select.option', $result->tax_namekey,
$result->tax_namekey . ' (' . round($result->tax_rate *
100.0, 2) . '%)');
$this->values[$result->tax_namekey]->rate =
(float)hikamarket::toFloat($result->tax_rate);
$this->values[$result->tax_namekey]->extra =
'data-rate="'.$this->values[$result->tax_namekey]->rate.'"';
}
}
public function display($map, $value, $rate = 0.0, $options =
'', $id = false) {
if(empty($this->values))
$this->load();
$values = $this->values;
$rate = (float)hikamarket::toFloat($rate);
if($rate != 0.0 || (!empty($value) && !isset($values[$value])))
{
$f = 0;
foreach($values as $k => $v) {
if($v->rate == $rate || ($v->rate - $rate <= 0.00001))
$f++;
}
if(empty($f) || ($rate > 0.0 && empty($value) && $f
> 1) || (!empty($value) && !isset($values[$value]) &&
$rate > 0.0)) {
$values[':'.$rate] = JHTML::_('select.option',
':'.$rate, JText::_('CUSTOM_RATE').' -
'.round($rate * 100.0, 2).'%');
$values[':'.$rate]->rate = $rate;
$values[':'.$rate]->extra =
'data-rate="'.$values[':'.$rate]->rate.'"';
if(empty($value))
$value = ':'.$rate;
} else if($rate > 0.0 && empty($value) && $f == 1) {
foreach($values as $k => $v) {
if($v->rate == $rate) {
$value = $k;
break;
}
}
}
}
if(empty($id))
$id = false;
$opt = array(
'id' => $id,
'list.attr' => $options,
'list.translate' => false,
'option.key' => 'value',
'option.text' => 'text',
'list.select' => $value,
'option.attr' => 'extra',
);
return JHTML::_('select.genericlist', $values, $map, $opt);
}
}
types/search.php000064400000004200151160562420007664 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketSearchType {
public function display($map, $value, $options = array()) {
$app = JFactory::getApplication();
if($app->isAdmin()) {
return HIKASHOP_BACK_RESPONSIVE ? $this->displayBootstrap($map,
$value, $options) : $this->displayClassic($map, $value, $options);
}
return $this->displayClassic($map, $value, $options);
}
public function displayBootstrap($map, $value, $options = array()) {
$id = isset($options['id']) ? $options['id'] : $map;
return '
<div class="input-prepend input-append">
<span class="add-on"><i
class="icon-filter"></i></span>
<input type="text" name="'.$map.'"
id="'.$id.'"
value="'.$this->escape($value).'"
class="text_area"
placeholder="'.JText::_('HIKA_SEARCH').'"/>
<button class="btn"
onclick="if(this.form.limitstart){this.form.limitstart.value=0;}this.form.submit();"><i
class="icon-search"></i></button>
<button class="btn"
onclick="if(this.form.limitstart){this.form.limitstart.value=0;}document.getElementById(\''.$id.'\').value=\'\';this.form.submit();"><i
class="icon-remove"></i></button>
</div>';
}
public function displayClassic($map, $value, $options = array()) {
$id = isset($options['id']) ? $options['id'] : $map;
return '
<div class="hikamarket_search_block">
<input type="text" name="'.$map.'"
id="'.$id.'"
value="'.$this->escape($value).'"
class="text_area"
placeholder="'.JText::_('HIKA_SEARCH').'"/>
<button class="hikabtn"
onclick="if(this.form.limitstart){this.form.limitstart.value=0;}this.form.submit();">'.JText::_('GO').'</button>
<button class="hikabtn"
onclick="if(this.form.limitstart){this.form.limitstart.value=0;}document.getElementById(\''.$id.'\').value=\'\';this.form.submit();">'.JText::_('RESET').'</button>
</div>
';
}
protected function escape($value) {
return htmlspecialchars($value, ENT_COMPAT, 'UTF-8');
}
}
types/shop_category.php000064400000013422151160562420011273
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketShop_categoryType {
public function display($map, $value, $type = 'category', $field
= 'category_id', $form = true, $none = true) {
$categoryType = hikamarket::get('shop.type.categorysub');
$categoryType->type = $type;
$categoryType->field = $field;
return $categoryType->display($map, $value, $form, $none);
}
public function displaySingle($map, $value, $type = '', $root =
0, $delete = false) {
if(empty($this->nameboxType))
$this->nameboxType = hikamarket::get('type.namebox');
return $this->nameboxType->display(
$map,
$value,
hikamarketNameboxType::NAMEBOX_SINGLE,
'category',
array(
'delete' => $delete,
'root' => $root,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
)
);
}
public function displayMultiple($map, $values, $type = '', $root
= 0) {
if(empty($this->nameboxType))
$this->nameboxType = hikamarket::get('type.namebox');
$first_element = reset($values);
if(is_object($first_element))
$values = array_keys($values);
return $this->nameboxType->display(
$map,
$values,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'category',
array(
'delete' => true,
'root' => $root,
'sort' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
)
);
}
public function displayTree($id, $root = 0, $type = null, $displayRoot =
false, $selectRoot = false, $openTo = null, $link = '') {
hikamarket::loadJslib('otree');
if(empty($type))
$type = array('product','vendor');
$ret = '';
$ret .= '<div id="'.$id.'_otree"
class="oTree"></div>
<script type="text/javascript">
var options = {rootImg:"'.HIKAMARKET_IMAGES.'otree/",
showLoading:false};
var data = '.$this->getDataFull($type, $root, $displayRoot,
$selectRoot).';
var '.$id.' = new
window.oTree("'.$id.'",options,null,data,false);
'.$id.'.addIcon("world","world.png");
'.$id.'.render(true);
</script>';
return $ret;
}
private function getData($type = 'product', $root = 0,
$displayRoot = false, $selectRoot = false, $value = null) {
$categoryClass = hikamarket::get('class.category');
$shopCategoryClass = hikamarket::get('shop.class.category');
if($root == 1)
$root = 0;
if(empty($root)) {
if(!is_array($type))
$type = array($type);
$type[] = 'root';
}
$typeConfig = array('params' =>
array('category_type' => $type), 'mode' =>
'tree');
$fullLoad = false;
$config = hikamarket::config();
$options = array('depth' =>
$config->get('explorer_default_depth', 3), 'start'
=> $root);
list($elements,$values) = $categoryClass->getNameboxData($typeConfig,
$fullLoad, null, null, null, $options);
if($value !== null) {
$parents = $shopCategoryClass->getParents($value);
$parents = array_reverse($parents);
}
$data = array();
if(!empty($parents)) {
$first = true;
foreach($parents as $p) {
$o = new stdClass();
$o->status = 2;
if($first) {
if($p->category_left + 1 == $p->category_right) {
$o->status = 4;
} else {
$o->status = 3;
}
$first = false;
}
$o->name = JText::_($p->category_name);
$o->value = (int)$p->category_id;
$o->data = $data;
$s = new stdClass();
$s->status = 4;
$s->name = '...';
$s->value = -(int)$p->category_parent_id;
$s->data = array();
$data = array($o, $s);
}
}
var_dump($data);
var_dump($elements);
return json_encode($elements);
foreach($elements as $k => $el) {
if($el->value != $data[0]->data[0]->value)
continue;
if(count($el->data)) {
$found = false;
foreach($el->data as $j => $e) {
if($e->value == $data[0]->data[0]->data[0]->value) {
$elements[$k]->data[$j]->data =
$data[0]->data[0]->data[0]->data;
$elements[$k]->data[$j]->status = 2;
$found = true;
}
}
if(!$found) {
$elements[$k]->data[] = $data[0]->data[0]->data[0];
}
} else {
$elements[$k]->data = $data[0]->data[0]->data;
$elements[$k]->status = 2;
}
break;
}
return json_encode($elements);
}
private function getDataFull($type = 'product', $root = 0,
$displayRoot = false, $selectRoot = false) {
$marketCategory = hikamarket::get('class.category');
if($root == 1)
$root = 0;
$elements = $marketCategory->getList($type, $root, $displayRoot);
$d = null;
foreach($elements as $k => $element) {
if($d !== null && $element->category_depth > ($d + 1)) {
unset($elements[$k]);
} else {
$d = (int)$element->category_depth;
}
}
$ret = array();
$tmp = array();
foreach($elements as $k => $element) {
$el = new stdClass();
$el->status = 4;
$el->name = $element->category_name;
if($element->category_type == 'root') {
$el->status = 5;
$el->icon = 'world';
if(!$selectRoot)
$el->noselection = 1;
else
$el->value = (int)$element->category_id;
} else {
$el->value = (int)$element->category_id;
}
$tmp[ (int)$element->category_id ] =& $el;
if(empty($element->category_parent_id) ||
empty($tmp[(int)$element->category_parent_id]) ||
$tmp[(int)$element->category_parent_id]->status == 5) {
$ret[] =& $el;
unset($el);
continue;
}
unset($parent);
$parent =& $tmp[(int)$element->category_parent_id];
$parent->status = 2;
if(empty($parent->data))
$parent->data = array();
$parent->data[] =& $el;
unset($el);
}
unset($tmp);
return json_encode($ret);
}
}
types/uploader.php000064400000015145151160562420010244 0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class HikaMarketUploaderType {
protected static $init = false;
public function __construct() {
$this->popup = hikamarket::get('shop.helper.popup');
}
protected function initialize() {
if(self::$init === true)
return;
hikamarket::loadJslib('jquery');
hikamarket::loadJslib('jquery-upload');
hikamarket::loadJslib('hkuploader');
self::$init = true;
}
private function processOptions(&$options) {
$t = hikamarket::getFormToken();
if(!empty($options['uploader'])) {
$params = '';
if(!empty($options['vars'])) {
$options['formData'] = $options['vars'];
$options['formData'][$t] = 1;
foreach($options['vars'] as $k => $v) {
$params .= '&' . urlencode($k) . '=' .
urlencode($v);
}
}
if(!empty($options['upload'])) {
$options['uploadUrls'] = array(
0 =>
hikamarket::completeLink('upload&task=image&uploader='.$options['uploader'][0].'&field='.$options['uploader'][1].$params.'&'.$t.'=1',true),
1 =>
hikamarket::completeLink('upload&task=upload&upload=image&uploader='.$options['uploader'][0].'&field='.$options['uploader'][1],
true, false, true)
);
}
if(!empty($options['gallery'])) {
$options['browseUrl'] =
hikamarket::completeLink('upload&task=galleryimage&uploader='.$options['uploader'][0].'&field='.$options['uploader'][1].$params,true);
}
}
if(empty($options['classes'])) {
$options['classes'] = array(
'mainDiv' => 'hikamarket_main_image_div'
);
}
if(!isset($options['classes']['mainDiv']))
$options['classes']['mainDiv'] = '';
if(!isset($options['classes']['firstImg']))
$options['classes']['firstImg'] =
'hikamarket_upload_imagethumb_main';
if(!isset($options['classes']['otherImg']))
$options['classes']['otherImg'] =
'hikamarket_upload_imagethumb_small';
if(!isset($options['classes']['contentClass']))
$options['classes']['contentClass'] = '';
if(empty($options['uploadUrls']))
$options['uploadUrls'] = null;
if(empty($options['browseUrl']))
$options['browseUrl'] = null;
if(empty($options['text']))
$options['text'] = '';
if(!empty($options['formData'])) {
if(!is_string($options['formData']))
$options['formData'] =
json_encode($options['formData']);
} else {
$options['formData'] =
'{\''.$t.'\':1}';
}
}
public function displayImageSingle($id, $content = '', $options
= array()) {
$this->initialize();
$this->processOptions($options);
$ret = '
<div id="'.$id.'_main"
class="hikamarket_dropzone">
<div
class="'.$options['classes']['mainDiv'].'">
<div class="hikamarket_uploader_image_add
'.$id.'_add">';
if(!empty($options['uploadUrls'])) {
$ret .= $this->popup->display(
'<span
class="hikam_upload_btn"></span>',
'MARKET_UPLOAD_IMAGE',
$options['uploadUrls'][0],
$id.'_uploadpopup',
750, 460, ' onclick="return
window.hkUploaderList[\''.$id.'\'].uploadFile(this);"',
'', 'link'
);
}
if(!empty($options['browseUrl'])) {
$ret .= $this->popup->display(
'<span class="hikam_add_btn"></span>',
'MARKET_ADD_IMAGE',
$options['browseUrl'],
$id.'_addpopup',
750, 460, ' onclick="return
window.hkUploaderList[\''.$id.'\'].browseImage(this);"',
'', 'link'
);
}
$ret .= '
</div>
<div id="'.$id.'_content"
class="hikamarket_uploader_singleimage_content">' .
$content . '</div>
<div id="'.$id.'_empty"
class="hikamarket_uploader_image_empty"
style="'.(!empty($content) ? 'display:none;' :
'') . '">
<span>'.$options['text'].'</span>
</div>
</div>
</div>';
if(!empty($options['uploadUrls'])) {
$ret .= '
<input id="'.$id.'" type="file"/>
<div id="'.$id.'_list"></div>
';
}
$js = '';
if(!empty($options['uploadUrls'])) {
$js .= "\r\n" . 'var hkUploader_'.$id.' = new
hkUploaderMgr("'.$id.'", {mode: \'single\',
url:\''.$options['uploadUrls'][1].'\',formData:'.$options['formData'].'})';
}
$doc = JFactory::getDocument();
if(!empty($js))
$doc->addScriptDeclaration("\r\n".'hkjQuery(document).ready(function($){'.$js."\r\n".'});');
return $ret;
}
public function displayImageMultiple($id, $content = array(), $options =
array()) {
$this->initialize();
$this->processOptions($options);
$ret = '
<div id="'.$id.'_main"
class="hikamarket_dropzone">
<div
class="'.$options['classes']['mainDiv'].'">
<div class="hikamarket_uploader_image_add
'.$id.'_add">';
if(!empty($options['uploadUrls'])) {
$ret .= $this->popup->display(
'<span
class="hikam_upload_btn"></span>',
'MARKET_UPLOAD_IMAGE',
$options['uploadUrls'][0],
$id.'_uploadpopup',
750, 460, ' onclick="return
window.hkUploaderList[\''.$id.'\'].uploadFile(this);"',
'', 'link'
);
}
if(!empty($options['browseUrl'])) {
$ret .= $this->popup->display(
'<span class="hikam_add_btn"></span>',
'MARKET_ADD_IMAGE',
$options['browseUrl'],
$id.'_addpopup',
750, 460, ' onclick="return
window.hkUploaderList[\''.$id.'\'].browseImage(this);"',
'', 'link'
);
}
$contentHtml = '';
if(!empty($content)) {
if(is_string($content)) {
$contentHtml = $content;
} else {
foreach($content as $k => $c) {
$liClass = ($k == 0) ?
$options['classes']['firstImg'] :
$options['classes']['otherImg'];
$contentHtml .= '<li
class="'.$liClass.'">'.$c.'</li>';
}
}
}
$ret .= '
</div>
<ul id="'.$id.'_content"
class="hikamarket_uploader_multiimage_content hkContent
'.$options['classes']['contentClass'].'">'
. $contentHtml . '</ul>
<div id="'.$id.'_empty"
class="hikamarket_uploader_image_empty"
style="'.(!empty($content) ? 'display:none;' :
'') . '">
<span>'.$options['text'].'</span>
</div>
</div>
</div>';
if(!empty($options['uploadUrls'])) {
$ret .= '
<input id="'.$id.'" type="file"
multiple/>
<div id="'.$id.'_list"></div>
';
}
$js = '';
if(!empty($options['uploadUrls'])) {
$js .= "\r\n" . 'var hkUploader_'.$id.' = new
hkUploaderMgr("'.$id.'", {mode: \'listImg\',
url:\''.$options['uploadUrls'][1].'\',
formData:'.$options['formData'].', options: {
imgClasses:[\''.$options['classes']['firstImg'].'\',\''.$options['classes']['otherImg'].'\']}
})';
}
$doc = JFactory::getDocument();
if(!empty($js))
$doc->addScriptDeclaration("\r\n".'hkjQuery(document).ready(function($){'.$js."\r\n".'});');
return $ret;
}
}
types/vendor_selection.php000064400000010172151160562420011766
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class hikamarketVendor_selectionType {
public function __construct() {
$this->app = JFactory::getApplication();
$this->db = JFactory::getDBO();
}
protected function getVendorList($filters = array(), $sort =
'id') {
static $vendorList = array();
$key = 'default';
if(!empty($filters) && $sort != 'vendor_id')
$key = md5(serialize($filters).$sort);
if(isset($vendorList[$key]))
return $vendorList[$key];
$sqlFilters = array('vendor.vendor_published = 1');
foreach($filters as $filter) {
}
$sqlSort = 'vendor.vendor_id';
if($sort == 'name')
$sqlSort = 'vendor.vendor_name';
$query = 'SELECT vendor.vendor_id, vendor.vendor_name '.
' FROM ' . hikamarket::table('vendor') . ' AS
vendor '.
' WHERE ('.implode(') AND (', $sqlFilters).')
'.
' ORDER BY '.$sqlSort;
$this->db->setQuery($query);
$vendorList[$key] =
$this->db->loadObjectList('vendor_id');
foreach($vendorList[$key] as &$vendor) {
$vendor = $vendor->vendor_name;
}
unset($vendor);
return $vendorList[$key];
}
public function displayDropdown($map, $value, $delete = false, $options =
'', $id = '') {
$vendors = $this->getVendorList();
if($delete) {
$vendors = array_merge( array(0 =>
JText::_('PLEASE_SELECT')), $vendors);
}
return JHTML::_('select.genericlist', $vendors, $map, $options,
'value', 'text', $value, $id);
}
protected function initJs() {
static $jsInit = null;
if($jsInit === true)
return;
$vendor_format = 'data.vendor_name';
if($this->app->isAdmin())
$vendor_format = 'data.id + " - " +
data.vendor_name';
$js = '
if(!window.localPage)
window.localPage = {};
window.localPage.fieldSetVendor = function(el, name) {
window.hikamarket.submitFct = function(data) {
var d = document,
vendorInput = d.getElementById(name + "_input_id"),
vendorSpan = d.getElementById(name + "_span_id");
if(vendorInput) { vendorInput.value = data.id; }
if(vendorSpan) { vendorSpan.innerHTML = '.$vendor_format.'; }
};
window.hikamarket.openBox(el,null,(el.getAttribute("rel") ==
null));
return false;
};
window.localPage.fieldRemVendor = function(el, name) {
var d = document,
vendorInput = d.getElementById(name + "_input_id"),
vendorSpan = d.getElementById(name + "_span_id");
if(vendorInput) { vendorInput.value = ""; }
if(vendorSpan) { vendorSpan.innerHTML = " - "; }
return false;
};
';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
$jsInit = true;
}
public function display($map, $value, $delete = false) {
$this->initJs();
$vendorClass = hikamarket::get('class.vendor');
$popup = hikamarket::get('shop.helper.popup');
$name = str_replace(array('][','[',']'),
'_', $map);
$vendor_id = (int)$value;
$vendor = $vendorClass->get($vendor_id);
$vendor_name = '';
if(!empty($vendor)) {
$vendor_name = @$vendor->vendor_name;
} else {
$vendor_id = '';
}
$vendor_display_name = $vendor_name;
if($this->app->isAdmin())
$vendor_display_name = $vendor_id.' - '.$vendor_name;
$ret = '<span
id="'.$name.'_span_id">'.$vendor_display_name.'</span>'
.
'<input type="hidden"
id="'.$name.'_input_id"
name="'.$map.'"
value="'.$vendor_id.'"/> '.
$popup->display(
'<img
src="'.HIKAMARKET_IMAGES.'icon-16/edit.png"
style="vertical-align:middle;"/>',
'VENDOR_SELECTION',
hikamarket::completeLink('vendor&task=selection&single=true',
true),
'market_set_vendor_'.$name,
760, 480, 'onclick="return
window.localPage.fieldSetVendor(this,\''.$name.'\');"',
'', 'link'
);
if($delete)
$ret .= ' <a
title="'.JText::_('HIKA_DELETE').'"
href="#'.JText::_('HIKA_DELETE').'"
onclick="return window.localPage.fieldRemVendor(this,
\''.$name.'\');"><img
src="'.HIKAMARKET_IMAGES.'icon-16/delete.png"
style="vertical-align:middle;"/></a>';
return $ret;
}
}
views/configmarket/index.html000064400000000032151160562420012344
0ustar00<html><body></body></html>views/configmarket/tmpl/acl.php000064400000001730151160562420012601
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!empty($this->acl_type)) {
if($this->acl_type == 'vendor_options')
echo $this->loadTemplate('options');
else
echo $this->loadTemplate('edit');
return;
}
?>
<div class="iframedoc"
id="iframedoc"></div>
<div class="adminform">
<div id="cpanel">
<?php foreach($this->buttons as $btn) { ?>
<div class="icon-wrapper">
<div class="icon">
<a href="<?php echo $btn['url'];?>">
<span class="<?php echo $btn['icon'];?>"
style="background-repeat:no-repeat;background-position:center;height:48px;padding:10px
0;"></span>
<span><?php echo $btn['name'];?></span>
</a>
</div>
</div>
<?php } ?>
<div style="clear:both"></div>
</div>
</div>
views/configmarket/tmpl/acl_edit.php000064400000025200151160562420013604
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('config'); ?>"
method="post" name="adminForm"
id="adminForm">
<table id="hikamarket_acl_list" class="adminlist pad0
table table-striped table-hover">
<thead>
<tr>
<th class="hikamarket_acl_name_title title"
style="min-width:200px;"><?php echo
JText::_('HIKA_NAME'); ?></th>
<?php
foreach($this->groups as $group) {
?>
<th class="hikamarket_acl_group_<?php echo $group->id;
?>_title title titletoggle"><?php echo $group->title;
?></th>
<?php
}
?>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="<?php echo count($this->groups) + 1;
?>">
</td>
</tr>
</tfoot>
<tbody>
<?php
$k = 0;
function hikamarket_draw_acl_line($acls, $full_key, $tree, &$t,
&$k, &$aclData, $depth = 0, $visible = true) {
foreach($acls as $key => $value) {
$name = (is_array($value)) ? $key : $value;
$isParent = (is_array($value));
$styles = '';
$trJs = '';
$my_key = trim($full_key . '/' . $name, '/');
if(!$visible) $styles .= 'display:none;';
if($isParent) {
$styles .= 'cursor:pointer;';
$trJs =
'window.localPage.expand(\''.$my_key.'\');';
}
$aclData[$my_key] = array();
?>
<tr class="row<?php echo $k; ?>"
data-acl="<?php echo $name; ?>" data-parent="<?php
echo $full_key; ?>"<?php echo $isParent?'
data-folder="1"':''; ?> style="<?php
echo $styles;?>">
<td onclick="<?php echo $trJs; ?>">
<?php
echo str_repeat('<img
src="'.HIKAMARKET_IMAGES.'otree/line.gif"
style="vertical-align:middle;" alt="" />',
$depth);
if($isParent) {
echo '<img
src="'.HIKAMARKET_IMAGES.'otree/plus.gif"
style="vertical-align:middle;" alt="" />';
echo '<img
src="'.HIKAMARKET_IMAGES.'otree/folder.gif"
style="vertical-align:middle;" alt="" />';
} else {
echo '<img
src="'.HIKAMARKET_IMAGES.'otree/join.gif"
style="vertical-align:middle;" alt="" />';
echo '<img
src="'.HIKAMARKET_IMAGES.'otree/page.gif"
style="vertical-align:middle;" alt="" />';
}
?>
<?php echo $name; ?>
</td>
<?php
foreach($t->groups as $key => $group) {
$v = 0;
if(in_array($my_key, $t->aclConfig[$group->id]))
$v = 12;
else if(in_array('!'.$my_key,
$t->aclConfig[$group->id]))
$v = 11;
if($v == 0) {
$parentKeys = explode('/', $full_key);
while(!empty($parentKeys) && $v == 0) {
$n = implode('/', $parentKeys);
if(isset($aclData[$n]['g'.$group->id]) &&
$aclData[$n]['g'.$group->id] > 10)
$v = $aclData[$n]['g'.$group->id] - 10;
array_pop($parentKeys);
}
}
if($v == 0) {
for($l = $key - 1; $l >= 0 && $v == 0; $l--) {
$g = $t->groups[$l];
if((int)$g->lft < (int)$group->lft && (int)$g->rgt
> (int)$group->rgt &&
isset($aclData[$my_key]['g'.$g->id]) &&
$aclData[$my_key]['g'.$g->id] > 10)
$v = $aclData[$my_key]['g'.$g->id] - 10;
}
}
if($v == 0 && !empty($full_key)) {
$v = $aclData[$full_key]['g'.$group->id];
}
$aclData[$my_key]['g'.$group->id] = $v;
$class = array();
if($v > 10)
$class[] = ' set';
if($v == 1 || $v == 11)
$class[] = ' unpublished';
if($v == 2 || $v == 12)
$class[] = ' published';
if(!empty($class))
$class = ' class="'.implode(' ',
$class).'"';
else
$class = '';
?>
<td data-group="<?php echo $group->id; ?>"
onclick="localPage.process(this);"<?php echo $class;
?>><span class="acl-icon"></span></td>
<?php
}
?>
</tr>
<?php
$k = 1 - $k;
if($isParent) {
hikamarket_draw_acl_line($value, $my_key, $tree, $t, $k, $aclData,
$depth + 1, ($depth+1 < 2));
}
}
}
$aclData = array();
hikamarket_draw_acl_line($this->acls, '', null, $this, $k,
$aclData);
?>
</tbody>
</table>
<script type="text/javascript">
window.hikashop.ready(function(){
window.hikashop.cleanTableRows('hikamarket_acl_list');
});
if(!window.localPage)
window.localPage = {};
window.localPage.aclGroups = {
<?php
foreach($this->groups as $k => $group) {
$children = array();
foreach($this->groups as $g) {
if($g->lft > $group->lft && $g->rgt <
$group->rgt) {
$children[] = $g->id;
}
}
if($k > 0)
echo ','."\r\n";
echo "\t" . $group->id . ':[' .
implode(',', $children) . ']';
}
echo "\r\n";
?>
};
window.localPage.aclGroupsOrder = [<?php
$g = array();
foreach($this->groups as $group) {
$g[] = $group->id;
}
echo implode(',', $g);
?>];
window.localPage.aclData = <?php echo json_encode($aclData); ?>;
window.localPage.expand = function(name) {
var d = document,
k = 0, c = '', line = null, attr = null,
l = name.length,
tbl = d.getElementById('hikamarket_acl_list'),
lines = tbl.getElementsByTagName('tr');
for(var i = 0; i < lines.length; i++) {
line = lines[i];
attr = line.getAttribute('data-parent');
if(attr == name) {
if( line.style.display == 'none')
line.style.display = '';
else
line.style.display = 'none';
} else if(attr && attr.substring(0, l) == name &&
line.style.display != 'none') {
line.style.display = 'none';
}
}
window.hikashop.cleanTableRows('hikamarket_acl_list');
}
window.localPage.process = function(el) {
var d = document, o = window.Oby, t = this,
parentGroup = [],
status = 0,
aclName = el.parentNode.getAttribute('data-acl'),
aclParent = el.parentNode.getAttribute('data-parent'),
group = parseInt(el.getAttribute('data-group'));
if(aclParent && aclParent.length > 0)
aclName = aclParent + '/' + aclName;
status = t.getCell(aclName, group);
if(status < 0)
return;
for(var i in t.aclGroups) {
if(t.aclGroups[i].indexOf(group) >= 0) {
parentGroup[parentGroup.length] = i;
}
}
if(status < 10) {
t.aclData[aclName]['g'+group] = 12;
t.setAclValue(group, aclName, 1);
} else if(status == 12) {
t.aclData[aclName]['g'+group] = 11;
t.setAclValue(group, aclName, 2);
} else {
var s = 0, p = 0, n = null, parents = aclParent.split('/');
while(parents.length > 0 && s == 0) {
n = parents.join('/');
p = t.getCell(n, group);
if(p > 10) s = p - 10;
parents.pop();
}
for(var i = parentGroup.length - 1; s == 0 && i >= 0; i--) {
p = t.getCell(aclName, parentGroup[i]);
if(p > 10) s = p - 10;
}
if(s === 0) {
p = t.getCell(aclParent, group);
if(p > 0) s = p;
}
t.aclData[aclName]['g'+group] = s;
t.setAclValue(group, aclName, 3);
}
t.reprocess();
t.display();
};
window.localPage.getCell = function(aclName, group) {
var t = this, a = t.aclData[aclName];
if(a) return a['g' + group];
return -1;
};
window.localPage.setAclValue = function(group, aclName, mode) {
var t = this, d = document,
input = d.getElementById('aclinput_' + group),
values = [], inv = '!' + aclName, f = 0;
if(!input)
return;
if(input.value.length > 0)
values = input.value.split(',');
for(var i = 0; i < values.length; i++) {
if(values[i] == aclName && mode == 1) return;
if(values[i] == inv && mode == 2) return;
if(values[i] == aclName && mode == 2)
f++;
if((values[i] == aclName || values[i] == inv) && mode == 3)
f++;
if(f > 0 && values[i+f] && values[i+f].length > 0)
values[i] = values[i+f];
}
if(f) {
for(var i = 0; i < f; i++)
values.pop();
}
if(mode == 1) values[values.length] = aclName;
if(mode == 2) values[values.length] = inv;
input.value = values.join(',');
};
window.localPage.reprocess = function() {
var t = this, data = t.aclData,
l = null, p = null, v = null, g = 0, s = 0, w = 0;
for(var n in data) {
if(!data.hasOwnProperty(n))
continue;
l = data[n];
for(var j = 0; j < t.aclGroupsOrder.length; j++) {
g = t.aclGroupsOrder[j];
v = l['g'+g] || 0;
if(v > 10)
continue;
s = 0;
p = n.split('/');
while(p.length > 0 && s == 0) {
w = data[p.join('/')]['g'+g];
if(w > 10) s = w - 10;
p.pop();
}
for(var i = (j-1); s === 0 && i >= 0; i--) {
var k = t.aclGroupsOrder[i];
if(t.aclGroups[k].indexOf(g) >= 0 && l['g'+k] >
0) { // was "> 10" before
if(l['g'+k] > 10)
s = l['g'+k] - 10;
else
s = l['g'+k];
}
}
if(s === 0) {
p = n.split('/');
p.pop();
if(p.length > 0)
s = data[p.join('/')]['g'+g];
}
t.aclData[n]['g'+g] = s;
}
}
}
window.localPage.display = function() {
var t = this, d = document, o = window.Oby,
tbl = d.getElementById('hikamarket_acl_list'),
lines = null, line = null, cells = null, aclName = '', g =
null, v = null,
tmp = tbl.firstChild;
while(tmp && tmp.nodeName.toLowerCase() != 'tbody') {
tmp = tmp.nextSibling;
}
if(!tmp) return;
lines = tmp.childNodes;
for(var i = 0; i < lines.length; i++) {
line = lines[i];
if(line && line.nodeName.toLowerCase() != 'tr')
continue;
cells = line.childNodes;
aclName = line.getAttribute('data-acl');
if(line.getAttribute('data-parent') &&
line.getAttribute('data-parent').length > 0)
aclName = line.getAttribute('data-parent') + '/' +
aclName;
tmp = t.aclData[aclName];
for(var k = 0, j = 0; k < cells.length; k++) {
if(cells[k] && cells[k].nodeName.toLowerCase() !=
'td')
continue;
j++;
if(j == 1)
continue;
g = t.aclGroupsOrder[ j-2 ];
v = tmp['g' + g];
if(v > 10)
o.addClass(cells[k], 'set');
else
o.removeClass(cells[k], 'set');
if(v == 1 || (v - 10) == 1) {
o.addClass(cells[k], 'unpublished');
o.removeClass(cells[k], 'published');
} else if(v == 2 || (v - 10) == 2) {
o.addClass(cells[k], 'published');
o.removeClass(cells[k], 'unpublished');
} else {
o.removeClass(cells[k], 'published');
o.removeClass(cells[k], 'unpublished');
}
}
}
};
</script>
<div style="clear:both"
class="clr"></div>
<?php
foreach($this->groups as $group) {
$config = '';
if(!empty($this->aclConfig[$group->id]))
$config = implode(',', $this->aclConfig[$group->id]);
echo '<input type="hidden"
id="aclinput_'.$group->id.'"
name="data[acl][' . $group->id . ']"
value="' . $config . '"/>' . "\r\n";
unset($config);
}
?>
<input type="hidden" name="acl_type"
value="<?php echo $this->acl_type; ?>" />
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/configmarket/tmpl/acl_options.php000064400000021227151160562420014357
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('config'); ?>"
method="post" name="adminForm"
id="adminForm">
<table id="hikamarket_acl_list" class="adminlist pad0
table table-striped table-hover hikamarket_acl_opt_list">
<thead>
<tr>
<th class="hikamarket_acl_name_title title"><?php
echo JText::_('HIKA_NAME'); ?></th>
<?php
$width = floor(70 / count($this->groups));
foreach($this->groups as $group) {
?>
<th class="hikamarket_acl_group_<?php echo $group->id;
?>_title title" style="width:<?php echo $width;
?>%"><?php echo $group->title; ?></th>
<?php
}
?>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="<?php echo count($this->groups) + 1;
?>">
</td>
</tr>
</tfoot>
<tbody>
<?php
$options = array(
'product_limitation' => array(
'title' =>
JText::_('VENDOR_PRODUCT_LIMITATION'),
'mode' => 'text'
),
'product_min_price' => array(
'title' => JText::_('VENDOR_PRODUCT_MIN_PRICE'),
'mode' => 'prices'
),
'product_max_price' => array(
'title' => JText::_('VENDOR_PRODUCT_MAX_PRICE'),
'mode' => 'prices'
),
'product_max_prices_per_product' => array(
'title' =>
JText::_('VENDOR_PRODUCT_MAX_PRICES_PER_PRODUCT'),
'mode' => 'text'
),
'product_max_categories_per_product' => array(
'title' =>
JText::_('VENDOR_PRODUCT_MAX_CATEGORIES_PER_PRODUCT'),
'mode' => 'text'
),
'product_max_options_per_product' => array(
'title' =>
JText::_('VENDOR_PRODUCT_MAX_OPTIONS_PER_PRODUCT'),
'mode' => 'text'
),
'product_max_related_per_product' => array(
'title' =>
JText::_('VENDOR_PRODUCT_MAX_RELATED_PER_PRODUCT'),
'mode' => 'text'
),
'product_max_images_per_product' => array(
'title' =>
JText::_('VENDOR_PRODUCT_MAX_IMAGES_PER_PRODUCT'),
'mode' => 'text'
),
);
foreach($options as $key => $option) {
?>
<tr>
<td><label><?php echo $option['title'];
?></label></td>
<?php
foreach($this->groups as $group) {
?>
<td class="hikamarket_acl_opt hikamarket_acl_opt_<?php echo
$key; ?> hikamarket_acl_group_<?php echo $group->id; ?>"
style="text-align:center" data-acl-type="<?php echo
$option['mode']; ?>" data-acl-id="data_<?php echo
$group->id . '_' . $key; ?>" onclick="return
window.localPage.edit(this);"><?php
$value = '';
if(isset($this->aclConfig[$group->id][$key]))
$value = $this->aclConfig[$group->id][$key];
if(empty($option['mode']) || $option['mode'] ==
'text') {
echo '<div
class="acl_value">'.$value.'</div>'.
'<input type="hidden" autocomplete="off"
id="data_'.$group->id.'_'.$key.'"
name="data['.$group->id.']['.$key.']"
value="'.$value.'" />';
} else if($option['mode'] == 'prices') {
$data = json_decode($value, true);
$formated_value = array();
if(!empty($data)) {
foreach($data as $k => $v) {
$v = hikamarket::toFloat($v);
if($v == 0.0)
continue;
$formated_value[] = $v . ' ' .
$this->currencies[$k]->currency_code;
}
}
echo '<div
class="acl_value">'.implode('<br/>',
$formated_value).'</div>'.
'<input type="hidden" autocomplete="off"
id="data_'.$group->id.'_'.$key.'"
name="data['.$group->id.']['.$key.']"
value="'.$this->escape($value).'" />';
}
?></td>
<?php
}
?>
</tr>
<?php
}
?>
</tbody>
</table>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.currencies = <?php
$currencies = array();
foreach($this->currencies as $currency) {
$currencies[$currency->currency_id] = $currency->currency_code;
}
echo json_encode($currencies);
?>;
window.localPage.edit = function(el) {
var d = document,
id = el.getAttribute('data-acl-id'),
type = el.getAttribute('data-acl-type'),
div = el.firstChild,
field = null;
if(id)
field = d.getElementById(id);
if(!field)
return true;
if(el.editing === true)
return true;
if(el.editing === false) {
el.editing = null;
return true;
}
switch(type) {
case 'text':
window.localPage.editText(div, field, id, el);
el.editing = true;
break;
case 'prices':
window.localPage.editPrices(div, field, id, el);
el.editing = true;
break;
}
return false;
};
window.localPage.editText = function(div, field, id, el) {
div.innerHTML = '<input type="text" value="' +
field.value + '" id="field_' + id +
'"/>'+
'<a href="#apply" onclick="return
window.localPage.apply(this);"
class="acl-apply"><span><?php echo
JText::_('APPLY'); ?></span></a>'+
'<a href="#cancel" onclick="return
window.localPage.cancel(this);"
class="acl-cancel"><span><?php echo
JText::_('CANCEL'); ?></span></a>';
el.editing = true;
input = document.getElementById('field_' + id);
if(input) input.focus();
};
window.localPage.editPrices = function(div, field, id, el) {
var data = '', currencies = window.localPage.currencies, code =
null, value = '',
prices = window.Oby.evalJSON(field.value);
for(var i in currencies) {
if(!currencies.hasOwnProperty(i))
continue;
value = prices ? (prices[i] || '') : '';
data += '<input type="text" value="' + value
+ '" id="field_' + id + '_p' + i +
'"/> '+currencies[i]+'<br/>';
}
data += '<a href="#apply" onclick="return
window.localPage.apply(this);"
class="acl-apply"><span><?php echo
JText::_('APPLY'); ?></span></a>'+
'<a href="#cancel" onclick="return
window.localPage.cancel(this);"
class="acl-cancel"><span><?php echo
JText::_('CANCEL'); ?></span></a>';
div.innerHTML = data;
el.editing = true;
};
window.localPage.getPricesText = function(data) {
var ret = '', currencies = window.localPage.currencies, code =
null, value = '',
prices = typeof(data) == 'string' ? window.Oby.evalJSON(data) :
data;
for(var i in currencies) {
if(!currencies.hasOwnProperty(i))
continue;
if(!prices || !prices[i])
continue;
value = parseFloat(prices[i]);
if(!isNaN(value) && value > 0.0)
ret += value + ' ' + currencies[i] +
'<br/>';
}
return ret;
};
window.localPage.getPricesData = function(id, json) {
var d = document, ret = {}, input = null, currencies =
window.localPage.currencies, value = '';
for(var i in currencies) {
if(!currencies.hasOwnProperty(i))
continue;
input = d.getElementById('field_' + id + '_p' + i);
if(!input) continue;
value = parseFloat(input.value);
if(!isNaN(value) && value > 0.0)
ret[i] = value;
}
if(json === undefined || !json)
return ret;
if(JSON.stringify)
return JSON.stringify(ret);
var r = [];
for(var i in ret) {
r.push('"'+i+'":'+ret[i]); }
return '{' + r.join(',') + '}';
};
window.localPage.apply = function(el) {
var d = document, w = window, o = w.Oby, p = el;
while(p && !(p.nodeName.toLowerCase() == 'td' &&
o.hasClass(p, 'hikamarket_acl_opt'))) { p = p.parentNode; }
if(!p) return false;
var id = p.getAttribute('data-acl-id'),
type = p.getAttribute('data-acl-type'),
div = p.firstChild,
field = null;
if(id)
field = d.getElementById(id);
if(!field)
return false;
switch(type) {
case 'text': {
var input = d.getElementById('field_' + id);
if(!input) return false;
field.value = input.value;
div.innerHTML = field.value;
p.editing = false;
}
break;
case 'prices': {
field.value = w.localPage.getPricesData(id, true);
div.innerHTML = w.localPage.getPricesText(field.value);
p.editing = false;
}
break;
}
return false;
}
window.localPage.cancel = function(el) {
var d = document, w = window, o = w.Oby, p = el;
while(p && !(p.nodeName.toLowerCase() == 'td' &&
o.hasClass(p, 'hikamarket_acl_opt'))) { p = p.parentNode; }
if(!p) return false;
var id = p.getAttribute('data-acl-id'),
type = p.getAttribute('data-acl-type'),
div = p.firstChild,
field = null;
if(id)
field = d.getElementById(id);
if(!field)
return false;
switch(type) {
case 'text':
div.innerHTML = field.value;
p.editing = false;
break;
case 'prices':
div.innerHTML = w.localPage.getPricesText(field.value);
p.editing = false;
break;
}
return false;
};
</script>
<input type="hidden" name="acl_type"
value="<?php echo $this->acl_type; ?>" />
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/configmarket/tmpl/advanced.php000064400000000451151160562420013606
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
views/configmarket/tmpl/config.php000064400000014030151160562420013304
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('config'); ?>"
method="post" name="adminForm"
id="adminForm">
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
id="config_form_task" value="" />
<input type="hidden" name="ctrl"
value="config" />
<?php echo JHTML::_('form.token'); ?>
<?php
$options = array(
'startOffset' => $this->default_tab,
'useCookie' => true
);
if(!HIKASHOP_J30) {
$options['onActive'] = '
function(title, description) {
description.setStyle("display", "block");
title.addClass("open").removeClass("closed");
if(title.getAttribute("class").indexOf("config_")
>= 0)
myHash =
title.getAttribute("class").replace("tabs","").replace("open","").replace("config_","").replace(/^\s*|\s*$/g,
"");
else
myHash =
title.getAttribute("id").replace("config_","").replace(/^\s*|\s*$/g,
"");
if(window.location.hash.substr(1, myHash.length) != myHash)
window.location.hash = myHash;
}';
}
echo $this->tabs->start('hikamarket_config_tab',
$options);
echo $this->tabs->panel(JText::_('MAIN'),
'config_main');
{
$this->setLayout('main');
echo $this->loadTemplate();
}
if(hikamarket::level(1)) {
echo $this->tabs->panel(JText::_('MARKET_OPTIONS'),
'config_market');
{
$this->setLayout('market');
echo $this->loadTemplate();
}
}
echo $this->tabs->panel(JText::_('YOUR_VENDOR'),
'config_vendor');
{
$params = new hikaParameter('');
$params->set('configPanelIntegration', true);
$js = '';
echo hikamarket::getLayout('vendormarket', 'form',
$params, $js);
if(!empty($js)) {
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
}
}
echo $this->tabs->panel(JText::_('ACCESS_LEVEL'),
'config_acl');
{
$this->setLayout('config_acl');
echo $this->loadTemplate();
}
echo $this->tabs->panel(JText::_('LANGUAGES'),
'config_language');
{
$this->setLayout('languages');
echo $this->loadTemplate();
}
echo $this->tabs->panel(JText::_('PRODUCT_TEMPLATES'),
'config_producttemplates');
{
$this->setLayout('product_template');
echo $this->loadTemplate();
}
echo $this->tabs->end();
?>
<div style="clear:both"
class="clr"></div>
</form>
<script>
var configWatcher = {
currentHRef : '',
init: function(){
var t = this;
setInterval( function(){ t.periodical(); }, 50 );
<?php
if(HIKASHOP_BACK_RESPONSIVE) {
?>
jQuery("ul.nav-remember").each(function(nav){
var id = jQuery(this).attr("id");
jQuery("#" + id + "
a[data-toggle=\"tab\"]").on("shown", function (e)
{
var myHash =
jQuery(this).attr("id").replace("config_","").replace("_tablink","");
if(window.location.hash.substr(1, myHash.length) != myHash)
window.location.hash = myHash;
});
});
<?php
} else {
hikashop_loadJsLib('jquery');
?>
t.win = jQuery(window);
t.body = jQuery('body');
t.navTop = jQuery('#adminForm').offset().top + 10;
t.isFixed = 0;
t.navIds = [
jQuery('#menu_main'), jQuery('#menu_market')
];
t.saveIds = [
jQuery('#menu-save-button-main'),
jQuery('#menu-save-button-market')
];
t.scrollIds = [
jQuery('#menu-scrolltop-main'),
jQuery('#menu-scrolltop-market')
];
t.win.scroll(function(){t.processScroll(t);});
t.processScroll();
<?php
}
?>
},
periodical: function() {
var href = window.location.hash.substring(1);
if( href != this.currentHRef ) {
this.currentHRef = href;
this.switchAndScroll(href);
}
},
switchAndScroll: function(hash) {
if(hash.length == 0)
return;
if(hash.indexOf('_') < 0) {
var tabName = hash;
hash = '';
} else {
var tabName = hash.substr(0, hash.indexOf('_'));
}
<?php
if(HIKASHOP_BACK_RESPONSIVE) {
?>
jQuery("#config_"+tabName+"_tablink").tab("show");
this.scrollToCust( hash );
<?php
} else {
?>
var childrens =
$('hikamarket_config_tab').getChildren('dt'), elt = 0,
j = 0;
for (var i = 0; i < childrens.length; i++){
var children = childrens[i];
if(children.hasClass('tabs') || children.id.substr(0,
children.id.indexOf('_'))){
if(children.hasClass('config_'+tabName) || children.id ==
'config_'+tabName){
children.addClass('open').removeClass('closed');
elt = j;
}else{
children.addClass('closed').removeClass('open');
}
j++;
}
}
var tabsContent =
$('hikamarket_config_tab').getNext('div');
var tabChildrens = tabsContent.getChildren('dd');
for (var i = 0; i < tabChildrens.length; i++){
var childContent = tabChildrens[i];
if(i == elt){
childContent.style.display = 'block';
}else{
childContent.style.display = 'none';
}
}
var d = document, elem = null;
if(hash) elem = d.getElementById(hash);
if(elem)
window.scrollTo(0, elem.offsetTop);
else
window.scrollTo(0, 0);
},
processScroll: function() {
var t = this, scrollTop = t.win.scrollTop();
if(scrollTop >= t.navTop && !t.isFixed) {
t.isFixed = 1;
for(var i = 0; i < t.navIds.length; i++){
t.navIds[i].addClass('navmenu-fixed');
t.saveIds[i].removeClass('menu-save-button');
t.scrollIds[i].removeClass('menu-scrolltop');
}
} else if(scrollTop <= t.navTop && t.isFixed) {
t.isFixed = 0;
for(var i = 0; i < t.navIds.length; i++){
t.navIds[i].removeClass('navmenu-fixed');
t.saveIds[i].addClass('menu-save-button');
t.scrollIds[i].addClass('menu-scrolltop');
}
}
<?php
}
?>
},
scrollToCust: function(name) {
var d = document, elem = d.getElementById(name);
if( !elem ) { window.scrollTo(0, 0); return; }
var topPos = elem.offsetTop + 100;
window.scrollTo(0, topPos);
}
}
window.hikashop.ready( function(){ configWatcher.init(); });
</script>
views/configmarket/tmpl/config_acl.php000064400000003000151160562420014116
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div id="hikashop_backend_tile_edition">
<div class="hk-container-fluid">
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_DEFAULT_STORE_ACCESS'); ?></div>
<?php
echo
$this->marketaclType->display('config[store_default_access]',
$this->config->get('store_default_access',
'*'));
?>
</div></div>
<?php if(hikamarket::level(1)) { ?>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('MAIN_VENDOR_ACL'); ?></div>
<?php
$acl = '';
if(!isset($this->vendor->vendor_acl))
$acl = '';
else
$acl = $this->vendor->vendor_acl;
echo $this->marketaclType->display('vendor_access', $acl,
'vendor_access_inherit');
?>
</dl>
</div></div>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('MAIN_VENDOR_GROUP'); ?></div>
<?php
$vendor_group = '';
if(isset($this->vendor->vendor_group))
$vendor_group = $this->vendor->vendor_group;
echo $this->joomlaaclType->display('vendor_group',
$vendor_group, false, false);
?>
</div></div>
<?php } ?>
</div>
<div style="clear:both"
class="clr"></div>
</div>
views/configmarket/tmpl/css.php000064400000003247151160562420012637
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><form action="<?php echo
hikamarket::completeLink('config', true); ?>"
method="post" name="adminForm"
id="adminForm">
<div class="title" style="float: left;">
<h1><?php
if($this->new) {
echo JText::_('HIKA_FILE').' :
'.$this->type.'_<input type="text"
name="filename"
value="'.$this->filename.'" />';
} else {
echo JText::_('HIKA_FILE').' :
'.$this->type.'_'.$this->filename.'.css';
}
?></h1>
</div>
<div class="toolbar" id="toolbar"
style="float:right; margin:6px;">
<button class="hikabtn hikabtn-success"
type="button"
onclick="window.hikashop.submitform('savecss',
'adminForm'); return false;"><i class="fas
fa-save"></i> <?php echo JText::_('HIKA_SAVE');
?></button>
</div>
<div class="clearfix"></div>
<?php
echo $this->editor->displayCode('csscontent',
$this->content);
?>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="savecss" />
<input type="hidden" name="tmpl"
value="component" />
<input type="hidden" name="ctrl"
value="config" />
<?php if($this->new) { ?>
<input type="hidden" name="new" value="1"
/>
<?php } else { ?>
<input type="hidden" name="file"
value="<?php echo $this->type.'_'.$this->filename;
?>" />
<?php } ?>
<input type="hidden" name="var"
value="<?php echo hikaInput::get()->getCmd('var');
?>" />
<?php echo JHTML::_('form.token'); ?>
</form>
views/configmarket/tmpl/index.html000064400000000032151160562420013320
0ustar00<html><body></body></html>views/configmarket/tmpl/language.php000064400000003626151160562420013633
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><form action="<?php echo
hikamarket::completeLink('config',true);?>"
method="post" name="adminForm"
id="adminForm">
<div class="title" style="float: left;">
<h1><?php echo JText::_('HIKA_FILE').' :
'.$this->file->name; ?></h1>
</div>
<div class="toolbar" id="toolbar"
style="float: right;">
<button class="hikabtn hikabtn-success"
type="button"
onclick="window.hikashop.submitform('savelanguage',
'adminForm'); return false;"><i class="fas
fa-save"></i> <?php echo JText::_('HIKA_SAVE');
?></button>
<button class="hikabtn hikabtn-primary"
type="button"
onclick="window.hikashop.submitform('share',
'adminForm'); return false;"><i class="fas
fa-share-alt"></i> <?php echo JText::_('SHARE');
?></button>
</div>
<div class="clearfix"></div>
<div >
<h2><?php echo JText::_('HIKA_FILE').' :
'.$this->file->name; ?></h2>
<textarea style="width:100%;box-sizing: border-box;"
rows="18" name="content" id="translation"
><?php echo @$this->file->content;?></textarea>
</div>
<hr/>
<div>
<h2><?php echo JText::_('HIKAMARKET_OVERRIDE').'
: '; ?></h2>
<?php echo JText::_('OVERRIDE_WITH_EXPLANATION'); ?>
<textarea style="width:100%;box-sizing: border-box;"
rows="18" name="content_override"
id="translation_override" ><?php echo
$this->override_content;?></textarea>
</div>
<div class="clr"></div>
<input type="hidden" name="code"
value="<?php echo $this->file->name; ?>" />
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="config" />
<?php echo JHTML::_('form.token'); ?>
</form>
views/configmarket/tmpl/languages.php000064400000002634151160562420014014
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div id="page-languages">
<div class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('LANGUAGES'); ?></div>
<table class="adminlist table table-striped table-hover"
cellpadding="1">
<thead>
<tr>
<th class="title titlenum"><?php
echo JText::_( 'HIKA_NUM' );
?></th>
<th class="title titletoggle"><?php
echo JText::_('HIKA_EDIT');
?></th>
<th class="title"><?php
echo JText::_('HIKA_NAME');
?></th>
<th class="title titletoggle"><?php
echo JText::_('ID');
?></th>
</tr>
</thead>
<tbody>
<?php
$k = 0;
foreach($this->languages as $i => &$language) {
?>
<tr class="row<?php echo $k; ?>">
<td align="center"><?php
echo $i+1;
?></td>
<td align="center"><?php
if($this->manage)
echo $language->edit;
?></td>
<td align="center"><?php
echo $language->name;
?></td>
<td align="center"><?php
echo $language->language;
?></td>
</tr>
<?php
$k = 1 - $k;
unset($language);
}
?>
</tbody>
</table>
</div></div>
</div>
</div>
views/configmarket/tmpl/leftmenu.php000064400000002644151160562420013666
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="leftmenu-container <?php
if(HIKASHOP_BACK_RESPONSIVE) echo
'leftmenu-container-j30';?>">
<div <?php if(!HIKASHOP_BACK_RESPONSIVE) echo
'class="config-menu"';?> id="menu_<?php echo
$this->menuname; ?>">
<a id="menu-scrolltop-<?php echo $this->menuname;
?>" href="#" onclick="window.scrollTo(0, 0);"
class="menu-scrolltop" style="float: right; margin:12px 2px
0px 2px;">
<span class="scrollTop_img" style="padding: 11px
18px;"></span>
</a>
<ul <?php if(HIKASHOP_BACK_RESPONSIVE) echo
'class="hika-navbar-ul" data-spy="affix"
data-offset-top="60"';?>>
<?php
foreach($this->menudata as $href => $name) {
?> <li><a href="<?php echo $href;
?>"><?php echo $name; ?><i
class="icon-chevron-right"></i></a></li>
<?php
}
?>
</ul>
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
<a id="menu-save-button-<?php echo $this->menuname;
?>" class="menu-save-button"
onclick="window.hikashop.submitform('apply',
'adminForm'); return false;" href="#"
style="float: right; margin:0px 16px 6px 0px;">
<span class="icon-32-apply" style="padding: 12px
16px;"> </span><?php echo JText::_('JAPPLY');
?>
</a>
<?php } ?>
</div>
</div>
views/configmarket/tmpl/main.php000064400000035034151160562420012772
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
echo $this->leftmenu(
'main',
array(
'#main_front' => JText::_('MAIN_OPTIONS'),
'#main_css' => JText::_('CSS'),
'#main_editor' => JText::_('HIKA_EDITOR'),
'#main_email' => JText::_('HIKAM_OPTIONS_EMAIL'),
'#main_statistics' =>
JText::_('HIKAM_OPTIONS_STATISTICS'),
)
);
?>
<div id="page-main" class="rightconfig-container <?php
if(HIKASHOP_BACK_RESPONSIVE) echo
'rightconfig-container-j30';?>">
<div id="main_front"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('MAIN_OPTIONS');
?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('version');?>><?php echo
JText::_('VERSION'); ?></td>
<td>
HikaMarket <?php echo $this->config->get('level') .
' ' . $this->config->get('version'); ?>
[2007200006]
</td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('frontend_edition');?>><?php echo
JText::_('HIKAM_FRONTEND_EDITION'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[frontend_edition]','',$this->config->get('frontend_edition',
1));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('show_edit_btn');?>><?php echo
JText::_('HIKAM_FRONT_SHOW_EDIT_BTN'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[show_edit_btn]','',$this->config->get('show_edit_btn',
0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('product_edit_cancel_url');?>><?php
echo JText::_('HIKAM_FRONT_PRODUCT_EDIT_CANCEL_MODE');
?></td>
<td><?php
$values = array(
JHTML::_('select.option', 'product',
JText::_('HIKAM_PRODUCT_EDIT_CANCEL_MODE_PRODUCT')),
JHTML::_('select.option', 'current_url',
JText::_('HIKAM_PRODUCT_EDIT_CANCEL_MODE_CURRENT_URL')),
JHTML::_('select.option', 'listing',
JText::_('HIKAM_PRODUCT_EDIT_CANCEL_MODE_LISTING')),
);
echo JHTML::_('select.genericlist', $values,
'config[product_edit_cancel_url]', '',
'value', 'text',
$this->config->get('product_edit_cancel_url',
'product'));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('show_category_explorer');?>><?php echo
JText::_('HIKAM_SHOW_CATEGORY_EXPLORER'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[show_category_explorer]','',$this->config->get('show_category_explorer',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('default_template_id');?>><?php echo
JText::_('HIKAM_DEFAULT_PRODUCT_TEMPLATE'); ?></td>
<td><?php
echo $this->nameboxType->display(
'config[default_template_id]',
$this->config->get('default_template_id', 0),
hikamarketNameboxType::NAMEBOX_SINGLE,
'product_template',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
)
);
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('avoid_duplicate_product_code');?>><?php
echo JText::_('AVOID_DUPLICATE_PRODUCT_CODE'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[avoid_duplicate_product_code]",'',$this->config->get('avoid_duplicate_product_code',
0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('product_approval');?>><?php echo
JText::_('HIKAM_FRONT_PRODUCT_APPROVAL'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[product_approval]', '',
$this->config->get('product_approval',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('product_cart_link');?>><?php echo
JText::_('HIKAM_DISPLAY_CART_LINK'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[product_cart_link]','',$this->config->get('product_cart_link',0));
?></td>
</tr>
</table>
</div></div>
</div>
<div id="main_css"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('CSS');
?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('css_frontend');?>><?php echo
JText::_('CSS_FRONTEND'); ?></td>
<td><?php echo
$this->cssType->display('config[css_frontend]',
'frontend',
$this->config->get('css_frontend','default'));?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('css_style');?>><?php echo
JText::_('STYLES_FOR_FRONTEND'); ?></td>
<td><?php echo
$this->cssType->display('config[css_style]',
'style',
$this->config->get('css_style',''));?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('css_backend');?>><?php echo
JText::_('CSS_BACKEND'); ?></td>
<td><?php echo
$this->cssType->display('config[css_backend]',
'backend',
$this->config->get('css_backend','default'));?></td>
</tr>
</table>
</div></div>
</div>
<div id="main_editor"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('HIKA_EDITOR');
?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('front_small_editor');?>><?php echo
JText::_('HIKAM_FRONT_SMALL_EDITOR'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[front_small_editor]','',$this->config->get('front_small_editor',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('edition_default_menu');?>><?php echo
JText::_('HIKAM_FRONT_EDITION_DEFAULT_MENU'); ?></td>
<td><?php
echo
$this->menusType->display('config[edition_default_menu]',
$this->config->get('edition_default_menu',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('editor');?>><?php echo
JText::_('HIKA_EDITOR'); ?></td>
<td><?php
echo $this->editorType->display('config[editor]',
$this->config->get('editor', ''));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('editor_disable_buttons');?>><?php echo
JText::_('HIKA_EDITOR_DISABLE_BUTTONS'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[editor_disable_buttons]','',$this->config->get('editor_disable_buttons',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('upload_file_free_download');?>><?php
echo JText::_('HIKA_UPLOADED_FILE_FREE_DOWNLOAD');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[upload_file_free_download]','',$this->config->get('upload_file_free_download',0));
?></td>
</tr>
<?php
?>
</table>
</div></div>
</div>
<div id="main_email"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('HIKAM_OPTIONS_EMAIL');
?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_email_order_status_notif_statuses');?>><?php
echo JText::_('HIKAM_NOTIFICATION_STATUSES_FILTER');
?></td>
<td><?php
$order_statuses = explode(',',
$this->config->get('vendor_email_order_status_notif_statuses',
''));
if(!empty($order_statuses)) {
foreach($order_statuses as &$order_status) {
$order_status = trim($order_status);
}
unset($order_status);
}
echo $this->nameboxType->display(
'config[vendor_email_order_status_notif_statuses]',
$order_statuses,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'order_status',
array(
'delete' => true,
'sort' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></td>
</tr>
</table>
<table style="margin-top:5px" class="adminlist table
table-striped table-hover">
<thead>
<tr>
<th class="title titlenum"><?php echo JText::_(
'HIKA_NUM' );?></th>
<th class="title"><?php echo
JText::_('HIKA_EMAIL'); ?></th>
<th class="title titletoggle"><?php echo
JText::_('HIKA_PUBLISHED'); ?></th>
</tr>
</thead>
<tbody>
<?php
if(!empty($this->emails)) {
$k = 0;
foreach($this->emails as $i => $email) {
?>
<tr class="row<?php echo $k ;?>">
<td style="text-align:center"><?php echo $i+1;
?></td>
<td><?php
if($this->emailManage) {
?><a href="<?php echo
hikamarket::completeLink('shop.email&task=edit&mail_name='.$email['file']);?>"><?php
}
$key = 'MARKET_' . strtoupper($email['name']);
echo (JText::_($key) == $key) ? $email['name'] :
JText::_($key);
if($this->emailManage) {
?></a><?php
}
?></td>
<td style="text-align:center"><?php
$publishedid =
'config_value-shop.'.$email['file'].'.published';
echo $this->toggleClass->toggle($publishedid,
(int)$email['published'], 'config');
?></td>
</tr>
<?php
$k = 1 - $k;
}
}
?>
</tbody>
</table>
</div></div>
</div>
<div id="main_statistics"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('STATISTICS');
?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('stats_valid_order_statuses');?>><?php
echo JText::_('HIKAM_STATS_VALID_ORDER_STATUSES');
?></td>
<td><?php
$order_statuses = explode(',',
$this->config->get('stats_valid_order_statuses',
'confirmed,shipped'));
if(!empty($order_statuses)) {
foreach($order_statuses as &$order_status) {
$order_status = trim($order_status);
}
unset($order_status);
}
echo $this->nameboxType->display(
'config[stats_valid_order_statuses]',
$order_statuses,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'order_status',
array(
'delete' => true,
'sort' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('display_order_statistics');?>><?php
echo JText::_('HIKAM_DISPLAY_ORDER_STATISTICS');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[display_order_statistics]','',$this->config->get('display_order_statistics',0));
?></td>
</tr>
</table>
<table style="margin-top:5px" class="adminlist table
table-striped table-hover admintable">
<thead>
<tr>
<th class="title"><?php echo
JText::_('HIKA_NAME'); ?></th>
<th class="title titletoggle"><?php echo
JText::_('HIKAM_STAT_CONTAINER'); ?></th>
<th class="title titletoggle"><?php echo
JText::_('HIKAM_STAT_PERIOD'); ?></th>
<th class="title titletoggle"><?php echo
JText::_('HIKA_ORDER'); ?></th>
<th class="title titletoggle"><?php echo
JText::_('HIKA_PUBLISHED'); ?></th>
</tr>
</thead>
<tbody>
<?php
if(!empty($this->statistics)) {
$statisticsPeriods = $this->statisticsClass->getDateRangeList();
foreach($statisticsPeriods as $key => &$period) {
$txt = '' . $period;
$period = JHTML::_('select.option', $key, JText::_($txt));
}
unset($period);
$statisticsGroupPeriods =
$this->statisticsClass->getDateRangeList(true);
foreach($statisticsGroupPeriods as $key => &$period) {
if(strpos($key,'.day') !== false) {
unset($statisticsGroupPeriods[$key]);
continue;
}
$txt = '' . $period;
$period = JHTML::_('select.option', $key, JText::_($txt));
}
unset($period);
$statisticsContainers = array(
12 => '100%',
9 => '75%',
8 => '66%',
6 => '50%',
4 => '33%',
3 => '25%',
);
$k = 0;
foreach($this->statistics as $key => $statistic) {
?> <tr class="row<?php echo $k ;?>"
data-hkm-stat="<?php echo $key; ?>">
<td><?php
if(!empty($statistic['label']))
echo $statistic['label'] . '
(<em>'.$key.'</em>)';
else
echo $key;
?></td>
<td><?php
if(empty($statistic['container']))
$statistic['container'] = 12;
echo JHTML::_('select.genericlist', $statisticsContainers,
'config[vendor_statistics]['.$key.'][container]',
'', 'value', 'text',
$statistic['container']);
?></td>
<td><?php
if(isset($statistic['vars']['DATE_RANGE'])
&& $statistic['type'] != 'graph') {
echo JHTML::_('select.genericlist', $statisticsPeriods,
'config[vendor_statistics]['.$key.'][vars][DATE_RANGE]',
'', 'value', 'text',
$statistic['vars']['DATE_RANGE']);
} else if(isset($statistic['vars']['DATE_RANGE']))
{
echo JHTML::_('select.genericlist', $statisticsGroupPeriods,
'config[vendor_statistics]['.$key.'][vars][DATE_RANGE]',
'', 'value', 'text',
$statistic['vars']['DATE_RANGE']);
}
?></td>
<td>
<div class="hk-input-group">
<div class="hk-input-group-prepend">
<a class="hikabtn" href="#up"
data-ordering="-1" data-ordering-id="<?php echo $key;
?>" onclick="return
window.localPage.orderingStat(this);"><i class="fas
fa-arrow-up"></i></a>
</div>
<input type="text" class="hk-form-control
hkm_order_value" size="3" data-hkm-input-stat="<?php
echo $key; ?>" name="config[vendor_statistics][<?php echo
$key; ?>][order]" value="<?php echo
(int)$statistic['order']; ?>" />
<div class="hk-input-group-append">
<a class="hikabtn" href="#down"
data-ordering="1" data-ordering-id="<?php echo $key;
?>" onclick="return
window.localPage.orderingStat(this);"><i class="fas
fa-arrow-down"></i></a>
</div>
</div>
</td>
<td><?php
echo
$this->radioType->booleanlist('config[vendor_statistics]['.$key.'][published]',
'', (int)$statistic['published']);
?></td>
</tr>
<?php
$k = 1 - $k;
}
}
?>
</tbody>
</table>
<script type="text/javascript">
if(!window.localPage) window.localPage = {};
window.localPage.orderingStat = function(el) {
var id = el.getAttribute('data-ordering-id'),
direction = el.getAttribute('data-ordering') ==
'-1';
if(!id) return false;
var block =
document.querySelector('[data-hkm-stat="'+id+'"]');
if(!block) return false;
var input =
block.querySelector('input[data-hkm-input-stat="'+id+'"]');
if(!input) return false;
var switchBlock = (direction) ? block.previousElementSibling :
block.nextElementSibling;
if(!switchBlock) return false;
var switchId = switchBlock.getAttribute('data-hkm-stat'),
switchInput =
switchBlock.querySelector('input[data-hkm-input-stat="'+switchId+'"]');
if(direction)
block.parentNode.insertBefore(block, switchBlock);
else
switchBlock.parentNode.insertBefore(switchBlock, block);
var i = input.value;
input.value = switchInput.value;
switchInput.value = i;
return false;
};
</script>
</div></div>
</div>
</div>
views/configmarket/tmpl/market.php000064400000070564151160562420013340
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
echo $this->leftmenu(
'market',
array(
'#market_general' =>
JText::_('HIKAM_OPTIONS_GENERAL'),
'#market_images' =>
JText::_('HIKAM_OPTIONS_IMAGES'),
'#market_display' =>
JText::_('HIKAM_OPTIONS_SHOW'),
'#market_email' =>
JText::_('HIKAM_OPTIONS_EMAIL'),
'#market_registration' =>
JText::_('HIKAM_OPTIONS_REGISTRATION'),
'#market_categories' =>
JText::_('HIKAM_OPTIONS_CATEGORIES'),
'#market_limitations' =>
JText::_('HIKAM_OPTIONS_TITLE_VENDOR_LIMITATIONS'),
'#market_tax' => JText::_('HIKAM_OPTIONS_TAX'),
)
);
?>
<div id="page-market" class="rightconfig-container
<?php if(HIKASHOP_BACK_RESPONSIVE) echo
'rightconfig-container-j30';?>">
<div id="market_general"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_OPTIONS_GENERAL'); ?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('updatable_order_statuses');?>><?php
echo JText::_('HIKAM_UPDATABLE_ORDER_STATUSES');
?></td>
<td><?php
$order_statuses = explode(',',
$this->config->get('updatable_order_statuses',
'created'));
if(!empty($order_statuses)) {
foreach($order_statuses as &$order_status) {
$order_status = trim($order_status);
}
unset($order_status);
}
echo $this->nameboxType->display(
'config[updatable_order_statuses]',
$order_statuses,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'order_status',
array(
'delete' => true,
'sort' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('valid_order_statuses');?>><?php echo
JText::_('HIKAM_VALID_ORDER_STATUSES'); ?></td>
<td><?php
$order_statuses = explode(',',
$this->config->get('valid_order_statuses',
'confirmed,shipped'));
if(!empty($order_statuses)) {
foreach($order_statuses as &$order_status) {
$order_status = trim($order_status);
}
unset($order_status);
}
echo $this->nameboxType->display(
'config[valid_order_statuses]',
$order_statuses,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'order_status',
array(
'delete' => true,
'sort' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('use_same_order_number');?>><?php echo
JText::_('MARKET_USE_SAME_ORDER_NUMBER'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[use_same_order_number]",'',$this->config->get('use_same_order_number',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('prefix_product_code');?>><?php echo
JText::_('PREFIX_VENDOR_PRODUCT_CODE'); ?></td>
<td>
<input type="text"
name="config[prefix_product_code]" value="<?php echo
$this->escape(
@$this->config->get('prefix_product_code', '') );
?>" />
</td>
</tr>
<tr class="option_title">
<td colspan="2"><?php echo
JText::_('HIKAM_OPTIONS_TITLE_VENDOR_SELECTION');
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('allow_zone_vendor');?>><?php echo
JText::_('ALLOW_ZONE_VENDORS'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[allow_zone_vendor]",'',$this->config->get('allow_zone_vendor',
0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_select_custom_field');?>><?php
echo JText::_('ALLOW_VENDOR_SELECTOR'); ?></td>
<td><?php
$options = array(
JHTML::_('select.option', '',
JText::_('HIKA_NONE'))
);
if(!empty($this->vendorselect_customfields)) {
foreach($this->vendorselect_customfields as $field) {
if(in_array($field->field_table, array('order',
'item')))
$options[] = JHTML::_('select.option',
$field->field_namekey, $field->field_table . ' - ' .
$field->field_realname);
}
}
echo JHTML::_('select.genericlist', $options,
'config[vendor_select_custom_field]', '',
'value', 'text',
$this->config->get('vendor_select_custom_field',
''));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('preferred_vendor_select_custom_field');?>><?php
echo JText::_('PREFERRED_VENDOR_FOR_VENDOR_SELECTOR');
?></td>
<td><?php
$options = array(
JHTML::_('select.option', '',
JText::_('HIKA_NONE'))
);
if(!empty($this->vendorselect_customfields)) {
foreach($this->vendorselect_customfields as $field) {
if($field->field_table == 'user')
$options[] = JHTML::_('select.option',
$field->field_namekey, $field->field_table . ' - ' .
$field->field_realname);
}
}
echo JHTML::_('select.genericlist', $options,
'config[preferred_vendor_select_custom_field]', '',
'value', 'text',
$this->config->get('preferred_vendor_select_custom_field',
''));
?></td>
</tr>
<tr class="option_title">
<td colspan="2"><?php echo
JText::_('HIKAM_OPTIONS_TITLE_VENDOR_PAYMENT_SHIPPING');
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendors_in_cart');?>><?php echo
JText::_('LIMIT_VENDORS_IN_CART'); ?></td>
<td><?php
$options = array(
JHTML::_('select.option', 0,
JText::_('HIKAM_NO_LIMIT_VENDOR')),
JHTML::_('select.option', 1,
JText::_('HIKAM_LIMIT_ONE_VENDOR')),
JHTML::_('select.option', 2,
JText::_('HIKAM_LIMIT_ONE_EXTRA_VENDOR'))
);
echo JHTML::_('hikaselect.radiolist', $options,
'config[vendors_in_cart]', '', 'value',
'text', $this->config->get('vendors_in_cart',
0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('only_vendor_payments');?>><?php echo
JText::_('SHOW_ONLY_VENDOR_PAYMENTS'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[only_vendor_payments]', '',
$this->config->get('only_vendor_payments',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('split_order_payment_fees');?>><?php
echo JText::_('SPLIT_PAYMENT_FEES_ON_VENDORS'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[split_order_payment_fees]', '',
$this->config->get('split_order_payment_fees',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('split_order_shipping_fees');?>><?php
echo JText::_('SPLIT_SHIPPING_FEES_ON_VENDORS');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[split_order_shipping_fees]', '',
$this->config->get('split_order_shipping_fees',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('shipping_per_vendor');?>><?php echo
JText::_('SHIPPING_PER_VENDOR'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[shipping_per_vendor]', '',
$this->config->get('shipping_per_vendor', 1));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('plugin_vendor_config');?>><?php echo
JText::_('PLUGIN_VENDOR_CONFIG'); ?></td>
<td><?php
$options = array(
JHTML::_('hikaselect.option', 0,
JText::_('HIKASHOP_NO')),
JHTML::_('hikaselect.option', 1,
JText::_('HIKAM_OWN_PLUGIN')),
);
echo JHTML::_('hikaselect.radiolist', $options,
'config[plugin_vendor_config]', '', 'value',
'text',
$this->config->get('plugin_vendor_config', 0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('user_multiple_vendor');?>><?php echo
JText::_('MARKET_ALLOW_MULTIPLE_VENDOR_FOR_USERS');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[user_multiple_vendor]', '',
$this->config->get('user_multiple_vendor',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('filter_orderstatus_paid_order');?>><?php
echo JText::_('FILTER_ORDER_STATUS_WHEN_VENDOR_PAID');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[filter_orderstatus_paid_order]', '',
$this->config->get('filter_orderstatus_paid_order', 1));
?></td>
</tr>
<?php
?>
</table>
</div></div>
</div>
<div id="market_images"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_OPTIONS_IMAGES'); ?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('default_vendor_image');?>><?php echo
JText::_('HIKAM_DEFAULT_VENDOR_IMAGE'); ?></td>
<td><?php
$options = array(
'upload' => true,
'gallery' => true,
'text' =>
JText::_('HIKAM_VENDOR_IMAGE_EMPTY_UPLOAD'),
'uploader' => array('config',
'default_vendor_image'),
);
$params = new stdClass();
$params->file_path =
$this->config->get('default_vendor_image', '');
$params->field_name = 'config[default_vendor_image]';
$js = '';
$content = hikamarket::getLayout('uploadmarket',
'image_entry', $params, $js);
echo
$this->uploaderType->displayImageSingle('hikamarket_config_default_vendor_image',
$content, $options);
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_image_x');?>><?php echo
JText::_('HIKAM_VENDOR_IMAGE_WIDTH'); ?></td>
<td>
<div class="hk-input-group">
<input type="text" class="hk-form-control"
name="config[vendor_image_x]" value="<?php echo
$this->escape( @$this->config->get('vendor_image_x',
'') ); ?>" />
<div class="hk-input-group-append">
<span class="hk-input-group-text">px</span>
</div>
</div>
</td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_image_y');?>><?php echo
JText::_('HIKAM_VENDOR_IMAGE_HEIGHT'); ?></td>
<td>
<div class="hk-input-group">
<input type="text" class="hk-form-control"
name="config[vendor_image_y]" value="<?php echo
$this->escape( @$this->config->get('vendor_image_y',
'') ); ?>" />
<div class="hk-input-group-append">
<span class="hk-input-group-text">px</span>
</div>
</div>
</td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('image_forcesize');?>><?php echo
JText::_('HIKAM_IMAGE_FORCESIZE');?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[image_forcesize]",'',$this->config->get('image_forcesize',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('image_grayscale');?>><?php echo
JText::_('HIKAM_IMAGE_GRAYSCALE');?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[image_grayscale]",'',$this->config->get('image_grayscale',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('image_scale');?>><?php echo
JText::_('HIKAM_IMAGE_SCALE');?></td>
<td><?php
$scale_arr = array(
JHTML::_('select.option', 1,
JText::_('HIKAM_IMAGE_SCALE_INSIDE')),
JHTML::_('select.option', 0,
JText::_('HIKAM_IMAGE_SCALE_OUTSIDE')),
);
echo JHTML::_('hikaselect.radiolist', $scale_arr,
"config[image_scale]" , '', 'value',
'text', $this->config->get('image_scale', 0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('image_radius');?>><?php echo
JText::_('HIKAM_IMAGE_RADIUS');?></td>
<td>
<div class="hk-input-group">
<input class="hk-form-control"
name="config[image_radius]" type="text"
value="<?php echo
(int)$this->config->get('image_radius', 0); ?>"
/>
<div class="hk-input-group-append">
<span class="hk-input-group-text">px</span>
</div>
</div>
</td>
</tr>
</table>
</div></div>
</div>
<div id="market_display"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_OPTIONS_SHOW'); ?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('display_vendor_vote');?>><?php echo
JText::_('HIKAM_DISPLAY_VENDOR_VOTE'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[display_vendor_vote]",'',$this->config->get('display_vendor_vote',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('display_vendor_contact');?>><?php echo
JText::_('HIKAM_DISPLAY_VENDOR_CONTACT_BTN'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[display_vendor_contact]",'',$this->config->get('display_vendor_contact',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('show_sold_by');?>><?php echo
JText::_('HIKAM_FRONT_SHOW_SOLD_BY'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[show_sold_by]",'',$this->config->get('show_sold_by',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('show_sold_by_me');?>><?php echo
JText::_('HIKAM_FRONT_SHOW_SOLD_BY_ME'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[show_sold_by_me]",'',$this->config->get('show_sold_by_me',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('listing_show_main_vendor');?>><?php
echo JText::_('HIKAM_FRONT_SHOW_MAIN_VENDOR_IN_LISTING');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[listing_show_main_vendor]",'',$this->config->get('listing_show_main_vendor',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_default_menu');?>><?php echo
JText::_('HIKAM_FRONT_VENDOR_DEFAULT_MENU'); ?></td>
<td><?php
echo
$this->menusType->display('config[vendor_default_menu]',
$this->config->get('vendor_default_menu',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('override_vendor_category_link');?>><?php
echo JText::_('HIKAM_FRONT_VENDOR_CATEGORY_TO_VENDOR_PAGE');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[override_vendor_category_link]",'',$this->config->get('override_vendor_category_link',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_show_modules');?>><?php echo
JText::_('VENDOR_SHOW_MODULES'); ?></td>
<td><?php
echo $this->nameboxType->display(
'config[vendor_show_modules]',
explode(',',
$this->config->get('vendor_show_modules')),
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'modules',
array(
'delete' => true,
'sort' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></td>
</tr>
</table>
</div></div>
</div>
<div id="market_email"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_OPTIONS_EMAIL'); ?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('contact_mail_to_vendor');?>><?php echo
JText::_('HIKAM_CONTACT_MAIL_TO_VENDORS'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[contact_mail_to_vendor]",'',$this->config->get('contact_mail_to_vendor',1));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('always_send_product_email');?>><?php
echo JText::_('HIKAM_ALWAYS_SEND_PRODUCT_EMAIL');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[always_send_product_email]','',$this->config->get('always_send_product_email',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('mail_display_vendor');?>><?php echo
JText::_('HIKAM_DISPLAY_VENDOR_NAME_IN_EMAILS');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[mail_display_vendor]','',$this->config->get('mail_display_vendor',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('admin_notify_subsale');?>><?php echo
JText::_('HIKAM_NOTIFY_ADMIN_FOR_VENDOR_MODIFICATION');
?></td>
<td><?php
$order_statuses = explode(',',
$this->config->get('admin_notify_subsale',
'cancelled,refunded'));
if(!empty($order_statuses)) {
foreach($order_statuses as &$order_status) {
$order_status = trim($order_status);
}
unset($order_status);
}
echo $this->nameboxType->display(
'config[admin_notify_subsale]',
$order_statuses,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'order_status',
array(
'delete' => true,
'sort' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('send_mail_subsale_update_main');?>><?php
echo JText::_('HIKAM_SEND_MAIL_SUBSALE_UPDATE_MAIN');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'config[send_mail_subsale_update_main]','',$this->config->get('send_mail_subsale_update_main',0));
?></td>
</tr>
</table>
</div></div>
</div>
<div id="market_registration"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_OPTIONS_REGISTRATION'); ?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('allow_registration');?>><?php echo
JText::_('HIKAM_ALLOW_VENDOR_REGISTRATION'); ?></td>
<td><?php
$options = array(
JHTML::_('hikaselect.option', 0,
JText::_('HIKASHOP_NO')),
JHTML::_('hikaselect.option', 1,
JText::_('HIKAM_REGISTER_MANUAL_VALIDATION')),
JHTML::_('hikaselect.option', 2,
JText::_('HIKAM_REGISTER_AUTO_VALIDATION')),
JHTML::_('hikaselect.option', 3,
JText::_('HIKAM_REGISTER_AUTO_CREATION'))
);
echo JHTML::_('select.genericlist', $options,
'config[allow_registration]',
'onchange="window.localPage.allowRegistrationChanged(this);"',
'value', 'text',
$this->config->get('allow_registration',0));
?>
<script type="text/javascript">
if(!window.localPage) window.localPage = {};
window.localPage.allowRegistrationChanged = function(el) {
if(!el) return;
var els = ['hikamarket_config_auto_registration_group'];
window.hikashop.setArrayDisplay(els, (el.value == 3));
};
window.hikashop.ready(function(){
window.localPage.allowRegistrationChanged(document.getElementById('configallow_registration'))
});
</script>
</td>
</tr>
<tr id="hikamarket_config_auto_registration_group">
<td class="hk_tbl_key"<?php echo
$this->docTip('auto_registration_group');?>><?php
echo JText::_('HIKAM_ALLOW_VENDOR_REGISTRATION');
?></td>
<td><?php
echo
$this->joomlaaclType->display('config[auto_registration_group]',
$this->config->get('auto_registration_group',
'all'), true, true);
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('register_ask_currency');?>><?php echo
JText::_('HIKAM_REGISTRATION_ASK_CURRENCY'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[register_ask_currency]",'',$this->config->get('register_ask_currency',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('register_ask_description');?>><?php
echo JText::_('HIKAM_REGISTRATION_ASK_DESCRIPTION');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[register_ask_description]",'',$this->config->get('register_ask_description',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('register_ask_terms');?>><?php echo
JText::_('HIKAM_REGISTRATION_ASK_TERMS'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[register_ask_terms]",'',$this->config->get('register_ask_terms',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('register_terms_required');?>><?php
echo JText::_('HIKAM_REGISTRATION_TERMS_REQUIRED');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[register_terms_required]",'',$this->config->get('register_terms_required',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('register_ask_paypal');?>><?php echo
JText::_('HIKAM_REGISTRATION_ASK_PAYPAL'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[register_ask_paypal]",'',$this->config->get('register_ask_paypal',1));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('register_paypal_required');?>><?php
echo JText::_('HIKAM_REGISTRATION_PAYPAL_REQUIRED');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[register_paypal_required]",'',$this->config->get('register_paypal_required',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('registration_ask_password');?>><?php
echo JText::_('HIKAM_REGISTRATION_ASK_PASSWORD');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[registration_ask_password]",'',$this->config->get('registration_ask_password',1));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('registration_email_is_username');?>><?php
echo JText::_('HIKAM_REGISTRATION_EMAIL_IS_USERNAME');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[registration_email_is_username]",'',$this->config->get('registration_email_is_username',0));
?></td>
</tr>
<!--
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('register_ask_image');?>><?php echo
JText::_('HIKAM_REGISTRATION_ASK_IMAGE'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[register_ask_image]",'',$this->config->get('register_ask_image',0));
?></td>
</tr>
-->
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('link_admin_groups');?>><?php echo
JText::_('HIKAM_LINK_VENDOR_GROUP_WITH_ADMIN'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[link_admin_groups]",'',$this->config->get('link_admin_groups',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('user_group_registration');?>><?php
echo JText::_('HIKAM_USERGROUP_ON_REGISTRATION');
?></td>
<td><?php
echo
$this->joomlaaclType->displayList('config[user_group_registration]',
$this->config->get('user_group_registration',
''), 'HIKA_INHERIT');
?></td>
</tr>
</table>
</div></div>
</div>
<div id="market_categories"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_OPTIONS_CATEGORIES'); ?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_create_category');?>><?php echo
JText::_('HIKAM_VENDOR_CREATE_CATEGORY'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[vendor_create_category]",'',$this->config->get('vendor_create_category',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_parent_category');?>><?php echo
JText::_('HIKAM_VENDOR_PARENT_CATEGORY'); ?></td>
<td><?php
echo
$this->categoryType->displaySingle('config[vendor_parent_category]',
$this->config->get('vendor_parent_category',''));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_chroot_category');?>><?php echo
JText::_('HIKAM_VENDOR_CHROOT_CATEGORY'); ?></td>
<td><?php
$options = array(
JHTML::_('hikaselect.option', 0,
JText::_('HIKASHOP_NO')),
JHTML::_('hikaselect.option', 1,
JText::_('HIKAM_VENDOR_HOME')),
JHTML::_('hikaselect.option', 2,
JText::_('HIKASHOP_YES'))
);
echo JHTML::_('hikaselect.radiolist', $options,
'config[vendor_chroot_category]',
'onchange="window.hikamarket.switchBlock(this, 2,
\'config__vendor_root_category\')"', 'value',
'text',
$this->config->get('vendor_chroot_category',0));
?></td>
</tr>
<tr id="config__vendor_root_category" <?php
if($this->config->get('vendor_chroot_category',0) != 2)
echo ' style="display:none;"'; ?>>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_root_category');?>><?php echo
JText::_('HIKAM_VENDORS_ROOT_CATEGORY'); ?></td>
<td><?php
echo
$this->categoryType->displaySingle('config[vendor_root_category]',
$this->config->get('vendor_root_category', 0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_extra_categories');?>><?php
echo JText::_('HIKAM_VENDOR_EXTRA_CATEGORIES'); ?></td>
<td><?php
$vendor_categories =
trim($this->config->get('vendor_extra_categories',
''));
$vendor_categories = !empty($vendor_categories) ? explode(',',
$vendor_categories) : array();
echo $this->nameboxType->display(
'config[vendor_extra_categories]',
$vendor_categories,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'category',
array(
'delete' => true,
'root' => 0,
'sort' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></td>
</tr>
</table>
</div></div>
</div>
<div id="market_limitations"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_OPTIONS_TITLE_VENDOR_LIMITATIONS');
?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_product_limitation');?>><?php
echo JText::_('VENDOR_PRODUCT_LIMITATION'); ?></td>
<td>
<input type="text"
name="config[vendor_product_limitation]" value="<?php
echo (int)$this->config->get('vendor_product_limitation',
0); ?>" />
</td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('related_all_vendors');?>><?php echo
JText::_('HIKAM_OPTION_RELATED_ALL_VENDORS'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[related_all_vendors]",'',$this->config->get('related_all_vendors',1));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('options_all_vendors');?>><?php echo
JText::_('HIKAM_OPTION_OPTIONS_ALL_VENDORS'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[options_all_vendors]",'',$this->config->get('options_all_vendors',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('check_vendor_completion');?>><?php
echo JText::_('HIKAM_OPTION_CHECK_VENDOR_COMPLETION');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[check_vendor_completion]",'',$this->config->get('check_vendor_completion',
0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('days_payment_request');?>><?php echo
JText::_('DAYS_FOR_PAYMENT_REQUEST'); ?></td>
<td>
<input type="text"
name="config[days_payment_request]" value="<?php echo
(int)$this->config->get('days_payment_request', 0);
?>" />
</td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('min_value_payment_request');?>><?php
echo JText::_('MIN_VALUE_FOR_PAYMENT_REQUEST'); ?></td>
<td>
<input type="text"
name="config[min_value_payment_request]" value="<?php
echo
hikamarket::toFloat($this->config->get('min_value_payment_request',
0.0)); ?>" />
<?php echo $this->main_currency->currency_symbol.'
'.$this->main_currency->currency_code; ?>
</td>
</tr>
</table>
</div></div>
</div>
<div id="market_tax"
class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_OPTIONS_TAX'); ?></div>
<table class="hk_config_table table"
style="width:100%">
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('market_mode');?>><?php echo
JText::_('HIKAM_MARKET_MODE'); ?></td>
<td><?php
$options = array(
JHTML::_('select.option', 'fee',
JText::_('MARKETMODE_FEE')),
JHTML::_('select.option', 'commission',
JText::_('MARKETMODE_COMMISSION')),
);
echo JHTML::_('hikaselect.radiolist', $options,
'config[market_mode]', '', 'value',
'text', $this->config->get('market_mode',
'fee'));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('calculate_vendor_price_with_tax');?>><?php
echo JText::_('HIKAM_VENDOR_PRICE_WITH_TAX');?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[calculate_vendor_price_with_tax]",'',$this->config->get('calculate_vendor_price_with_tax',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('fee_on_shipping');?>><?php echo
JText::_('HIKAM_APPLY_FEES_ON_SHIPPING');?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
"config[fee_on_shipping]",'',$this->config->get('fee_on_shipping',0));
?></td>
</tr>
<tr>
<td class="hk_tbl_key"<?php echo
$this->docTip('vendor_pay_content');?>><?php echo
JText::_('HIKAM_MARKET_PAYVENDORCONTENT_MODE'); ?></td>
<td><?php
$options = array(
JHTML::_('select.option', 'orders',
JText::_('MARKETMODE_PAY_ORDERS')),
JHTML::_('select.option', 'products',
JText::_('MARKETMODE_PAY_PRODUCTS')),
);
echo JHTML::_('hikaselect.radiolist', $options,
'config[vendor_pay_content]', '', 'value',
'text', $this->config->get('vendor_pay_content',
'orders'));
?></td>
</tr>
<!--
vendor_limit_orders_display (integer)
vendor_limit_products_display (integer)
-->
</table>
<?php
$params = new hikaParameter('');
$params->set('configPanelIntegration', true);
$js = '';
echo hikamarket::getLayout('vendormarket', 'fees',
$params, $js);
?>
</div></div>
</div>
</div>
views/configmarket/tmpl/product_template.php000064400000005674151160562420015430
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="hikashop_backend_tile_edition">
<div class="hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('PRODUCT_TEMPLATES'); ?></div>
<div style="float:right; margin:4px;">
<a class="hikabtn hikabtn-primary" href="<?php echo
hikamarket::completeLink('product&task=new_template&'.hikamarket::getFormToken().'=1');?>">
<i class="fas fa-plus"></i> <?php echo
JText::_('ADD');?>
</a>
</div>
<table class="adminlist table table-striped table-hover"
style="cell-spacing:1px">
<thead>
<tr>
<th class="title titlenum"><?php
echo JText::_('HIKA_NUM');
?></th>
<th class="title titlenum"><?php
echo JText::_('HIKA_EDIT');
?></th>
<th class="title"><?php
echo JText::_('HIKA_NAME');
?></th>
<th class="title"
style="width:100px;"><?php
echo JText::_('HIKAM_TEMPLATE_USED_BY');
?></th>
<th class="title titlenum"><?php
echo JText::_('HIKA_DELETE');
?></th>
</tr>
</thead>
<tbody>
<?php
$config_default_template =
(int)$this->config->get('default_template_id', 0);
$k = 0;
if(!empty($this->product_templates)) {
foreach($this->product_templates as $i => $product_template) {
?>
<tr class="row<?php echo $k; ?>">
<td><?php
echo $product_template->product_id;
?></td>
<td style="text-align:center">
<a href="<?php echo
hikamarket::completeLink('shop.product&task=edit&cid='.$product_template->product_id);
?>"><i class="fas
fa-pencil-alt"></i></a>
</td>
<td>
<a href="<?php echo
hikamarket::completeLink('shop.product&task=edit&cid='.$product_template->product_id);
?>"><?php
if(!empty($product_template->product_name))
echo $product_template->product_name;
else
echo '<em>' . JText::_('PRODUCT_NO_NAME')
. '</em>';
?></a>
[ <?php echo $product_template->product_code; ?> ]
</td>
<td style="text-align:center"><?php
if((int)$product_template->vendor_count > 0)
echo JText::sprintf('HIKAM_USED_BY_X_VENDORS',
$product_template->vendor_count);
else if((int)$product_template->product_id ==
$config_default_template)
echo JText::_('HIKAM_DEFAULT_TEMPLATE');
else
echo '-';
?></td>
<td style="text-align:center">
<a onclick="if(!confirm('<?php echo
str_replace("'","\'",
JText::_('ASK_DELETE_PRODUCT_TEMPLATE')); ?>')) { return
false; }" href="<?php echo
hikamarket::completeLink('shop.product&task=remove&cid='.$product_template->product_id.'&'.hikamarket::getFormToken().'=1');
?>"><i class="far
fa-trash-alt"></i></a>
</td>
</tr>
<?php
$k = 1-$k;
}
}
?>
</tbody>
</table>
</div></div>
views/configmarket/tmpl/share.php000064400000002770151160562420013151
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><form action="index.php?tmpl=component&option=<?php
echo HIKAMARKET_COMPONENT ?>" method="post"
name="adminForm" id="adminForm" >
<fieldset>
<div class="header" style="float:
left;"><?php echo JText::_('SHARE').' :
'.$this->file->name; ?></div>
<div class="toolbar" id="toolbar"
style="float: right;">
<button class="btn" type="button"
onclick="window.hikashop.submitform('send','adminForm')"><?php
echo JText::_('SHARE'); ?></button>
</div>
</fieldset>
<fieldset class="adminform">
<?php
echo hikamarket::display(
JText::_('SHARE_HIKAMARKET_CONFIRMATION_1').'<br/>'.
JText::_('SHARE_HIKAMARKET_CONFIRMATION_2').'<br/>'.
JText::_('SHARE_CONFIRMATION_3'), 'info');
?><br/>
<textarea cols="100" rows="8"
name="mailbody">Hi Hikari Software team,
Here is a new version of the language file for HikaMarket, I translated few
more strings...</textarea>
</fieldset>
<div class="clr"></div>
<input type="hidden" name="code"
value="<?php echo $this->file->name; ?>" />
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="config" />
<?php echo JHTML::_('form.token'); ?>
</form>
views/configmarket/tmpl/sql.php000064400000003250151160562420012640
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('config&task=sql'); ?>"
method="post" name="adminForm" id="adminForm"
enctype="multipart/form-data">
<fieldset>
<legend>SQL Request</legend>
<textarea name="sql_data" rows="8"
style="width:100%"><?php echo @$this->sql_data;
?></textarea>
</fieldset>
<div style="overflow-x:auto;max-height:300px;">
<?php
if(!empty($this->query_result)) {
if(is_array($this->query_result)) {
echo '<table class="adminlist table table-striped"
style="width:100%"><thead>';
$head = array_keys(get_object_vars(reset($this->query_result)));
foreach($head as $h) {
echo '<th>'.$h.'</th>';
}
reset($this->query_result);
echo '</thead><tbody>';
foreach($this->query_result as $result) {
echo '<tr>';
foreach($head as $h) {
echo
'<td>'.nl2br(htmlentities($result->$h)).'</td>';
}
echo '</tr>';
}
echo '</tbody></table>';
} else {
echo $this->query_result;
}
} else if(!empty($this->sql_data)) {
echo JText::_('HIKA_NO_SQL');
}
?>
</div>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/configmarket/view.html.php000064400000042406151160562420013010
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class configmarketViewconfigmarket extends hikamarketView {
const ctrl = 'config';
const name = 'HIKA_CONFIGURATION';
const icon = 'wrench';
public function display($tpl = null, $params = null) {
$this->params =& $params;
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName();
$fct = $this->getLayout();
if(method_exists($this, $fct))
$this->$fct($params);
parent::display($tpl);
}
public function config($tpl = null) {
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl);
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$config = hikamarket::config();
$this->assignRef('config',$config);
$shopConfig = hikamarket::config(false);
$this->assignRef('shopConfig',$shopConfig);
$manage =
hikamarket::isAllowed($config->get('acl_config_manage',
'all'));
$this->assignRef('manage', $manage);
$defaultPanel =
$app->getUserStateFromRequest($this->paramBase.'.default_panel',
'default_panel', 0, 'int');
$this->assignRef('default_tab', $defaultPanel);
hikashop_loadJsLib('tooltip');
$jlanguage = JFactory::getLanguage();
$jlanguage->load('com_hikamarket_config', JPATH_SITE);
$this->loadRef(array(
'popup' => 'shop.helper.popup',
'tabs' => 'shop.helper.tabs',
'marketaclType' => 'type.market_acl',
'categoryType' => 'type.shop_category',
'editorType' => 'shop.type.editor',
'uploaderType' => 'type.uploader',
'menusType' => 'type.menus',
'radioType' => 'shop.type.radio',
'cssType' => 'type.css',
'toggleClass' => 'helper.toggle',
'joomlaaclType' => 'type.joomla_acl',
'nameboxType' => 'type.namebox',
'vendorClass' => 'class.vendor'
));
$vendor = $this->vendorClass->get(1);
$this->assignRef('vendor', $vendor);
$vendorselect_tables = array('order', 'item',
'user');
$query = 'SELECT field.field_namekey, field.field_realname,
field.field_table '.
' FROM ' . hikamarket::table('shop.field') . '
AS field '.
' WHERE field.field_table IN
(\''.implode('\',\'',
$vendorselect_tables).'\') AND field.field_type =
\'plg.market_vendorselectfield\' AND field_published = 1 AND
field_frontcomp = 1'.
' ORDER BY field.field_table, field.field_realname';
$db->setQuery($query);
$vendorselect_customfields = $db->loadObjectList();
$this->assignRef('vendorselect_customfields',
$vendorselect_customfields);
$currencyClass = hikamarket::get('shop.class.currency');
$curr = '';
$main_currency_id = $shopConfig->get('main_currency', 1);
$mainCurr = $currencyClass->getCurrencies($main_currency_id, $curr);
$this->main_currency = $mainCurr[$main_currency_id];
$languages = array();
$lg = JFactory::getLanguage();
$language = $lg->getTag();
$styleRemind =
'float:right;margin-right:30px;position:relative;';
$loadLink = $this->popup->display(
JText::_('LOAD_LATEST_LANGUAGE'),
'EDIT_LANGUAGE_FILE',
hikamarket::completeLink('config&task=latest&code=' .
$language, true),
'loadlatest_language_'.$language,
800, 500,
'onclick="window.document.getElementById(\'hikashop_messages_warning\').style.display
= \'none\';"', '', 'link'
);
if(!file_exists(HIKASHOP_ROOT . 'language' . DS . $language .
DS . $language . '.' . HIKAMARKET_COMPONENT . '.ini'))
{
if($config->get('errorlanguagemissing', 1)) {
$noteremind = '<small style="' . $styleRemind .
'">' .
$this->toggleClass->delete('hikashop_messages_warning',
'errorlanguagemissing-0', 'config', false,
JText::_('DONT_REMIND')) . '</small>';
hikamarket::display(JText::_('MISSING_LANGUAGE') . '
' . $loadLink . ' ' . $noteremind, 'warning');
}
}
jimport('joomla.filesystem.folder');
$path = hikashop_getLanguagePath(JPATH_ROOT);
$dirs = JFolder::folders($path);
foreach($dirs as $dir) {
$xmlFiles = JFolder::files($path . DS . $dir,
'^([-_A-Za-z]*)\.xml$');
$xmlFile = array_pop($xmlFiles);
if($xmlFile == 'install.xml')
$xmlFile = array_pop($xmlFiles);
if(empty($xmlFile))
continue;
$data = JInstaller::parseXMLInstallFile($path . DS . $dir . DS .
$xmlFile);
$oneLanguage = new stdClass();
$oneLanguage->language = $dir;
$oneLanguage->name = $data['name'];
$languageFiles = JFolder::files($path . DS . $dir, '^(.*)\.' .
HIKAMARKET_COMPONENT . '\.ini$' );
$languageFile = reset($languageFiles);
$linkEdit =
hikamarket::completeLink('config&task=language&code='.$oneLanguage->language,
true, false, false);
if(!empty($languageFile)){
$oneLanguage->edit = $this->popup->display(
'<span
id="image'.$oneLanguage->language.'"
alt="'.JText::_('EDIT_LANGUAGE_FILE',
true).'" style="font-size:1.2em;"><i
class="fas fa-pencil-alt"></i></span>',
'EDIT_LANGUAGE_FILE',
$linkEdit,
'edit_language_'.$oneLanguage->language,
800, 500, '', '', 'link'
);
} else {
$oneLanguage->edit = $this->popup->display(
'<span
id="image'.$oneLanguage->language.'"alt="'.JText::_('ADD_LANGUAGE_FILE',
true).'" style="font-size:1.2em;"><i
class="fas fa-plus"></i></span>',
'ADD_LANGUAGE_FILE',
$linkEdit,
'edit_language_'.$oneLanguage->language,
800, 500, '', '', 'link'
);
}
$languages[] = $oneLanguage;
}
$this->assignRef('languages', $languages);
$emails = array();
$emailFiles = JFolder::files(HIKAMARKET_MEDIA.'mail'.DS,
'^([-_A-Za-z]*)(\.html)?\.php$');
if(!empty($emailFiles)) {
foreach($emailFiles as $emailFile) {
$file = str_replace(array('.html.php', '.php'),
'', $emailFile);
if(substr($file, -9) == '.modified')
continue;
$emails[] = array(
'name' => $file,
'file' => 'market.'.$file,
'published' =>
$shopConfig->get('market.'.$file.'.published')
);
}
}
$this->assignRef('emails', $emails);
$emailManage = hikashop_level(2) &&
hikashop_isAllowed($shopConfig->get('acl_email_manage','all'));
$this->assignRef('emailManage', $emailManage);
$statistics = array();
$statisticsClass = hikamarket::get('class.statistics');
$statistics = $statisticsClass->getVendor(0);
JPluginHelper::importPlugin('hikamarket');
JPluginHelper::importPlugin('hikashop');
JPluginHelper::importPlugin('hikashoppayment');
$app->triggerEvent('onVendorPanelDisplay',
array(&$buttons, &$statistics));
$vendor_statistics = $config->get('vendor_statistics',
null);
if(!empty($vendor_statistics)) {
foreach($statistics as $key => &$stat) {
$stat['published'] = false;
}
unset($stat);
$vendor_statistics =
hikamarket::unserialize(base64_decode($vendor_statistics));
foreach($vendor_statistics as $key => $stat_conf) {
if(!isset($statistics[$key]))
continue;
if(isset($stat_conf['container']))
$statistics[$key]['container'] =
(int)$stat_conf['container'];
if(isset($stat_conf['slot']))
$statistics[$key]['slot'] =
(int)$stat_conf['slot'];
if(isset($stat_conf['order']))
$statistics[$key]['order'] =
(int)$stat_conf['order'];
if(isset($stat_conf['published']))
$statistics[$key]['published'] =
$stat_conf['published'];
if(!empty($stat_conf['vars'])) {
if(!isset($statistics[$key]['vars']))
$statistics[$key]['vars'] = array();
foreach($stat_conf['vars'] as $k => $v) {
if(isset($statistics[$key]['vars'][$k]))
$statistics[$key]['vars'][$k] = $v;
}
}
}
uasort($statistics, array($this, 'sortStats'));
}
$this->assignRef('statistics', $statistics);
$this->assignRef('statisticsClass', $statisticsClass);
$query = 'SELECT product.product_id, product.product_name,
product.product_code, count(vendor.vendor_id) as `vendor_count`'.
' FROM '.hikamarket::table('shop.product').' as
product '.
' LEFT JOIN '.hikamarket::table('vendor').' as
vendor ON vendor.vendor_template_id = product.product_id '.
' WHERE product_type = \'template\' '.
' GROUP BY product.product_id, product.product_name,
product.product_code';
$db->setQuery($query);
$product_templates = $db->loadObjectList();
$this->assignRef('product_templates', $product_templates);
$product_template = null;
if((int)$config->get('default_template_id', 0) > 0) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.product').' AS a WHERE
a.product_type = \'template\' AND a.product_id = ' .
(int)$config->get('default_template_id', 0);
$db->setQuery($query);
$product_template = $db->loadObject();
}
$this->assignRef('product_template', $product_template);
$manager = true;
$this->toolbar = array(
'|',
array('name' => 'save', 'display' =>
$manager),
array('name' => 'apply', 'display'
=> $manager),
'hikacancel',
'|',
array('name' => 'pophelp', 'target'
=> 'config'),
'dashboard'
);
}
protected function sortStats($a, $b) {
if($a['order'] == $b['order'])
return 0;
return ($a['order'] < $b['order']) ? -1 : 1;
}
public function acl($tpl = null) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
hikamarket::loadJslib('otree');
$market_acl = hikamarket::get('type.market_acl');
$this->assignRef('marketaclType', $market_acl);
$acls = $market_acl->getList();
$this->assignRef('acls', $acls);
$joomla_acl = hikamarket::get('type.joomla_acl');
$this->assignRef('joomlaAclType', $joomla_acl);
$groups = $joomla_acl->getList();
$this->assignRef('groups', $groups);
$aclClass = hikamarket::get('class.acl');
$title_parameters = '';
$acl_type = 'user';
$acl_type = hikaInput::get()->getCmd('acl_type',
'');
if(!empty($acl_type)) {
$aclConfig = array();
foreach($groups as $group) {
$localAclData = $config->get($acl_type . '_acl_' .
$group->id, '');
if($acl_type == 'vendor_options')
$aclConfig[$group->id] = hikamarket::unserialize($localAclData);
else
$aclConfig[$group->id] = explode(',', $localAclData);
}
$this->assignRef('aclConfig', $aclConfig);
$title_parameters = '&acl_type='.$acl_type;
if($acl_type == 'vendor_options') {
$currencyClass = hikamarket::get('shop.class.currency');
$mainCurrency = $shopConfig->get('main_currency', 1);
$currencyIds = $currencyClass->publishedCurrencies();
if(!in_array($mainCurrency, $currencyIds))
$currencyIds = array_merge(array($mainCurrency), $currencyIds);
$null = null;
$currencies = $currencyClass->getCurrencies($currencyIds, $null);
$this->assignRef('currencies', $currencies);
}
} else {
$buttons = array(
array(
'name' => JText::_('HIKAM_VENDOR_ACL'),
'url' =>
hikamarket::completeLink('config&task=acl&acl_type=vendor'),
'icon' => 'icon-48-acl'
),
array(
'name' => JText::_('HIKAM_VENDOR_OPTIONS'),
'url' =>
hikamarket::completeLink('config&task=acl&acl_type=vendor_options'),
'icon' => 'icon-48-acl'
),
array(
'name' => JText::_('HIKAM_USER_ACL'),
'url' =>
hikamarket::completeLink('config&task=acl&acl_type=user'),
'icon' => 'icon-48-acl'
),
);
$this->assignRef('buttons', $buttons);
}
$this->assignRef('acl_type', $acl_type);
hikamarket::setTitle(JText::_('HIKAM_ACL'),
'unlock-alt',
self::ctrl.'&task=acl'.$title_parameters);
$manager = true;
if(!empty($acl_type)) {
$this->toolbar = array(
'|',
array('name' => 'custom', 'icon' =>
'save', 'alt' =>
JText::_('JTOOLBAR_SAVE'), 'task' =>
'saveacl', 'check' => false, 'display'
=> $manager),
array('name' => 'custom', 'icon' =>
'apply', 'alt' =>
JText::_('JTOOLBAR_APPLY'), 'task' =>
'applyacl', 'check' => false, 'display'
=> $manager),
array('name' => 'hikacancel', 'url'
=> hikamarket::completeLink('config&task=acl')),
'|',
array('name' => 'pophelp', 'target'
=> 'config'),
'dashboard'
);
} else {
$this->toolbar = array(
'|',
array('name' => 'pophelp', 'target'
=> 'config'),
'dashboard'
);
}
}
public function sql($tpl = null) {
hikamarket::setTitle(JText::_('HIKA_CONFIGURATION_SQL'),
self::icon, self::ctrl);
$config = hikamarket::config();
$this->assignRef('config', $config);
$toolbar = JToolBar::getInstance('toolbar');
$sql_data = hikaInput::get()->getRaw('sql_data',
'');
$this->assignRef('sql_data', $sql_data);
$user = JFactory::getUser();
$iAmSuperAdmin = $user->authorise('core.admin');
$query_result = '';
if(!empty($sql_data) && $iAmSuperAdmin) {
$p = strpos(trim($sql_data), ' ');
if($p !== false) {
$db = JFactory::getDBO();
$sql_data = str_replace('table::', '#__',
trim($sql_data));
$word = strtolower(substr($sql_data, 0, $p));
if(in_array($word, array('insert', 'update',
'delete'))) {
$db->setQuery($sql_data);
try {
$db->execute();
$query_result = JText::_('HIKA_X_ROWS_AFFECTED',
$db->getAffectedRows());
} catch(Exception $e) {
$query_result = JText::_('HIKA_QUERY_FAILURE');
}
} else if($word == 'select') {
$db->setQuery($sql_data);
try {
$query_result = $db->loadObjectList();
} catch(Exception $e) {
$query_result = JText::_('HIKA_QUERY_FAILURE');
}
} else if(in_array($word, array('create', 'drop',
'alter'))) {
$db->setQuery($sql_data);
try {
if( $db->execute() ) {
$query_result = JText::_('HIKA_QUERY_SUCCESS');
} else {
$query_result = JText::_('HIKA_QUERY_FAILURE');
}
} catch(Exception $e) {
$query_result = JText::_('HIKA_QUERY_FAILURE');
}
}
}
}
$this->assignRef('query_result', $query_result);
$this->toolbar = array(
'|',
array('name' => 'custom', 'icon' =>
'apply', 'alt' => JText::_('HIKAM_APPLY'),
'task' => 'sql', 'check' => false),
'hikacancel',
'|',
array('name' => 'pophelp', 'target'
=> 'config'),
'dashboard'
);
}
public function language() {
$code = hikaInput::get()->getString('code');
if(empty($code)) {
hikamarket::display('Code not specified','error');
return;
}
jimport('joomla.filesystem.file');
$path = hikashop_getLanguagePath(JPATH_ROOT) . DS . $code . DS . $code .
'.' . HIKAMARKET_COMPONENT . '.ini';
$file = new stdClass();
$file->name = $code;
$file->path = $path;
if(JFile::exists($path)) {
$file->content = file_get_contents($path);
if(empty($file->content)) {
hikamarket::display('File not found :
'.$path,'error');
}
} else {
hikamarket::display(JText::_('LOAD_ENGLISH_1') .
'<br/>' . JText::_('LOAD_ENGLISH_2') .
'<br/>' . JText::_('LOAD_ENGLISH_3'),
'info');
$file->content =
file_get_contents(hikashop_getLanguagePath(JPATH_ROOT) . DS .
'en-GB' . DS . 'en-GB.' . HIKAMARKET_COMPONENT .
'.ini');
}
$override_content = '';
$override_path = hikashop_getLanguagePath(JPATH_ROOT) . DS .
'overrides' . DS . $code . '.override.ini';
if(JFile::exists($override_path)) {
$override_content = file_get_contents($override_path);
}
$this->assignRef('override_content', $override_content);
$this->assignRef('showLatest', $showLatest);
$this->assignRef('file', $file);
}
public function share(){
$file = new stdClass();
$file->name = hikaInput::get()->getString('code');
$this->assignRef('file', $file);
}
public function css(){
$file = hikaInput::get()->getCmd('file');
$new = false;
if(empty($file)) {
$type = hikaInput::get()->getCmd('var');
$filename = '';
$new = true;
} else {
if(!preg_match('#^([-_A-Za-z0-9]*)_([-_A-Za-z0-9]*)$#i',
$file, $result)) {
hikamarket::display('Could not load the file '.$file.'
properly');
exit;
}
$type = $result[1];
$filename = $result[2];
}
$content = hikaInput::get()->getString('csscontent',
'');
if(empty($content) && !$new) {
$content = file_get_contents(HIKAMARKET_MEDIA . 'css' . DS .
$type . '_' . $filename . '.css');
}
if(empty($content) && $new &&
file_exists(HIKAMARKET_MEDIA . 'css' . DS . $type .
'_default.css')) {
$content = file_get_contents(HIKAMARKET_MEDIA . 'css' . DS .
$type . '_default.css');
}
if($filename == 'default' || $new) {
$filename = 'custom';
$new = true;
$i = 1;
while(file_exists(HIKAMARKET_MEDIA.'css' . DS . $type .
'_' . $filename . '.css')) {
$filename = 'custom' . $i;
$i++;
}
}
$this->assignRef('content', $content);
$this->assignRef('filename', $filename);
$this->assignRef('new', $new);
$this->assignRef('type', $type);
$editor = hikamarket::get('shop.helper.editor');
$this->assignRef('editor', $editor);
}
public function getDoc($key) {
$namekey = 'HKM_CONFIG_' . strtoupper(trim($key));
$ret = JText::_($namekey);
if($ret == $namekey) {
return '';
}
return $ret;
}
public function docTip($key) {
$ret = $this->getDoc($key);
if(empty($ret))
return '';
return ' data-toggle="hk-tooltip"
data-title="'.htmlspecialchars($ret, ENT_COMPAT,
'UTF-8').'"';
}
protected function leftmenu($name, $data) {
$this->menuname = $name;
$this->menudata = $data;
$this->setLayout('leftmenu');
return $this->loadTemplate();
}
}
views/dashboardmarket/index.html000064400000000032151160562420013026
0ustar00<html><body></body></html>views/dashboardmarket/tmpl/index.html000064400000000032151160562420014002
0ustar00<html><body></body></html>views/dashboardmarket/tmpl/listing.php000064400000002554151160562420014202
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<div class="hk-container-fluid">
<?php
if(!empty($this->statistics_slots)) {
foreach($this->statistics_slots as $slot) {
?>
<div class="hk-row">
<?php
foreach($this->statistics as $key => $stat) {
if($stat['slot'] != $slot)
continue;
if(isset($stat['published']) &&
empty($stat['published']))
continue;
$class = 'hkc-sm-12';
if(isset($stat['class']))
$class = $stat['class'];
?>
<div id="hikashop_dashboard_stat_<?php echo $key; ?>"
class="<?php echo $class; ?>"><?php
echo $this->statisticsClass->display($stat);
?></div>
<?php
}
?>
</div>
<?php
}
}
?>
</div>
<div id="cpanel">
<?php foreach($this->buttons as $btn) { ?>
<div class="icon-wrapper">
<div class="icon">
<a href="<?php echo $btn['url'];?>">
<span class="<?php echo $btn['icon'];?>"
style="background-repeat:no-repeat;background-position:center;height:48px;padding:10px
0;"></span>
<span><?php echo $btn['name'];?></span>
</a>
</div>
</div>
<?php } ?>
<div style="clear:both"></div>
</div>
views/dashboardmarket/tmpl/listing.xml000064400000000320151160562420014200
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_HIKAMARKET_DASHBOARD_VIEW_TITLE">
<message>
<![CDATA[COM_HIKAMARKET_DASHBOARD_VIEW_DESC]]>
</message>
</layout>
</metadata>views/dashboardmarket/view.html.php000064400000005546151160562420013476
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class dashboardmarketViewdashboardmarket extends hikamarketView {
const ctrl = 'dashboard';
const name = HIKAMARKET_NAME;
const icon = 'store';
public function display($tpl = null, $params = null) {
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName();
$fct = $this->getLayout();
if(method_exists($this, $fct))
$this->$fct($params);
parent::display($tpl);
}
public function listing() {
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl);
$statisticsClass = hikamarket::get('class.statistics');
$statistics = $statisticsClass->getDashboard();
$statistics_slots = array();
foreach($statistics as $key => &$stat) {
$slot = (int)@$stat['slot'];
$stat['slot'] = $slot;
$stat['key'] = $key;
$statistics_slots[ $slot ] = $slot;
}
unset($stat);
asort($statistics_slots);
$this->assignRef('statisticsClass', $statisticsClass);
$this->assignRef('statistics', $statistics);
$this->assignRef('statistics_slots', $statistics_slots);
$config = hikamarket::config();
$use_approval = $config->get('product_approval', 0);
$buttons = array(
'vendors' => array(
'name' => JText::_('HIKA_VENDORS'),
'url' => hikamarket::completeLink('vendor'),
'icon' => 'fas fa-user-tie'
),
'approval' => array(
'name' => JText::_('WAITING_APPROVAL_LIST'),
'url' =>
hikamarket::completeLink('product&task=waitingapproval'),
'icon' => 'fas fa-thumbs-up'
),
'plugins' => array(
'name' => JText::_('PLUGINS'),
'url' => hikamarket::completeLink('plugins'),
'icon' => 'fas fa-puzzle-piece'
),
'config' => array(
'name' => JText::_('HIKA_CONFIGURATION'),
'url' => hikamarket::completeLink('config'),
'icon' => 'fas fa-wrench'
),
'acl' => array(
'name' => JText::_('HIKAM_ACL'),
'url' =>
hikamarket::completeLink('config&task=acl'),
'icon' => 'fas fa-unlock-alt'
),
'update' => array(
'name' => JText::_('UPDATE_ABOUT'),
'url' => hikamarket::completeLink('update'),
'icon' => 'fas fa-sync'
),
'help' => array(
'name' => JText::_('HIKA_HELP'),
'url' =>
hikamarket::completeLink('documentation'),
'icon' => 'fas fa-life-ring'
)
);
if(!$use_approval)
unset($buttons['approval']);
$this->assignRef('buttons', $buttons);
if(JFactory::getUser()->authorise('core.admin',
'com_hikamarket')) {
$this->toolbar[] = array('name' =>
'preferences', 'component' =>
'com_hikamarket');
}
$this->toolbar[] = array('name' => 'pophelp',
'target' => 'welcome');
}
}
views/index.html000064400000000032151160562420007673
0ustar00<html><body></body></html>views/layouts/index.html000064400000000032151160562420011373
0ustar00<html><body></body></html>views/layouts/tmpl/index.html000064400000000032151160562420012347
0ustar00<html><body></body></html>views/layouts/tmpl/search.php000064400000002443151160562420012340
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$value = $this->params->get('value',
$this->pageInfo->search);
$map = $this->params->get('map', 'search');
$id = $this->params->get('id', $map);
$filter_btn = $this->params->get('filter_btn',
'');
?>
<div class="hikamarket_search_block">
<div class="hk-input-group">
<input type="text" name="<?php echo $map
;?>" id="<?php echo $id; ?>" value="<?php
echo $this->escape($value); ?>"
class="hk-form-control" placeholder="<?php echo
JText::_('HIKA_SEARCH'); ?>"/>
<div class="hk-input-group-append">
<button class="hikabtn"
onclick="hikamarket.searchSubmit(this);"><i class="fas
fa-search"></i></button>
<button class="hikabtn"
onclick="hikamarket.searchReset(this);"><i class="fas
fa-times"></i></button>
</div>
</div>
<?php if(!empty($filter_btn)) { ?>
<button class="hikabtn hikam_toggle" onclick="return
hikamarket.searchFilters(this, '<?php echo
$this->escape($filter_btn); ?>');"><i class="fas
fa-filter"></i> <?php echo
JText::_('HIKAM_TOGGLE_FILTERS'); ?></button>
<?php } ?>
</div>
views/menusmarket/index.html000064400000000032151160562420012226
0ustar00<html><body></body></html>views/menusmarket/tmpl/form.php000064400000033017151160562420012672
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<?php
$arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKASHOP_YES')),
JHTML::_('select.option', '0',
JText::_('HIKASHOP_NO')),
);
?>
<form action="<?php echo
hikamarket::completeLink('menus'); ?>"
method="POST" name="adminForm"
id="adminForm">
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
<div id="page-menus">
<table style="width:100%">
<tr>
<td valign="top" width="50%">
<?php } else { ?>
<div id="page-menus" class="row-fluid">
<div class="span6">
<?php } ?>
<fieldset class="adminform">
<legend><?php echo JText::_( 'HIKA_DETAILS' );
?></legend>
<table class="admintable table"
cellspacing="1">
<tr>
<td class="key"><?php echo
JText::_('HIKA_TITLE'); ?></td>
<td>
<input class="text_area" type="text"
name="menu[title]" id="title" size="35"
value="<?php echo $this->escape(@$this->element->title);
?>" />
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKA_ALIAS'); ?></td>
<td>
<input class="text_area" type="text"
name="menu[alias]" id="title" size="35"
value="<?php echo $this->escape(@$this->element->alias);
?>" />
</td>
</tr>
<?php ?>
<tr>
<td class="key"><?php echo
JText::_('HIKA_PUBLISHED'); ?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'menu[published]', 'class="inputbox"',
@$this->element->published);
?></td>
</tr>
<tr>
<td class="key"><?php
echo JText::_('TYPE_OF_CONTENT');
?></td>
<td><?php
echo
$this->contentType->display('menu[content_type]',@$this->element->content_type,
$this->js, true, true);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('TYPE_OF_LAYOUT'); ?></td>
<td><?php
if(!isset($this->element->hikamarket_params['layout_type']))
$this->element->hikamarket_params['layout_type'] =
'inherit';
echo
$this->layoutType->display($this->control.'[layout_type]',
@$this->element->hikamarket_params['layout_type'],
$this->js, true);
?></td>
</tr>
<tr id="number_of_columns">
<td class="key"><?php echo
JText::_('NUMBER_OF_COLUMNS');?></td>
<td>
<input name="<?php echo $this->control;
?>[columns]" type="text" value="<?php echo
@$this->element->hikamarket_params['columns'];?>"
/>
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('NUMBER_OF_ITEMS'); ?></td>
<td>
<input name="<?php echo $this->control;
?>[limit]" type="text" value="<?php echo
@$this->element->hikamarket_params['limit'];?>"
/>
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('RANDOM_ITEMS');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['random']))
$this->element->hikamarket_params['random'] =
'-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[random]' , '', 'value',
'text',
@$this->element->hikamarket_params['random']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ORDERING_DIRECTION'); ?></td>
<td><?php
if(!isset($this->element->hikamarket_params['order_dir']))
$this->element->hikamarket_params['order_dir'] =
'inherit';
echo
$this->orderdirType->display($this->control.'[order_dir]',@$this->element->hikamarket_params['order_dir']);
?></td>
</tr>
<?php
?>
</table>
</fieldset>
<fieldset data-block="options"
data-block-value="images" class="adminform">
<legend><?php echo
JText::_('HIKAM_PARAMS_FOR_IMAGES'); ?></legend>
<table class="admintable table" cellspacing="1"
width="100%">
<tr>
<td class="key"><?php echo
JText::_('IMAGE_X');?></td>
<td>
<input size="12" name="<?php echo
$this->control;?>[image_width]" type="text"
value="<?php echo
@$this->element->hikamarket_params['image_width'];?>"
/> px
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('IMAGE_Y');?></td>
<td>
<input size="12" name="<?php echo
$this->control;?>[image_height]" type="text"
value="<?php echo
@$this->element->hikamarket_params['image_height'];?>"
/> px
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKAM_IMAGE_FORCESIZE');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['image_forcesize']))
$this->element->hikamarket_params['image_forcesize']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[image_forcesize]' , '',
'value', 'text',
@$this->element->hikamarket_params['image_forcesize']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKAM_IMAGE_GRAYSCALE');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['image_grayscale']))
$this->element->hikamarket_params['image_grayscale']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[image_grayscale]' , '',
'value', 'text',
@$this->element->hikamarket_params['image_grayscale']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKAM_IMAGE_SCALE');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['image_scale']))
$this->element->hikamarket_params['image_scale'] =
'-1';
$scale_arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKAM_IMAGE_SCALE_INSIDE')),
JHTML::_('select.option', '0',
JText::_('HIKAM_IMAGE_SCALE_OUTSIDE')),
);
echo JHTML::_('hikaselect.radiolist', $scale_arr,
$this->control.'[image_scale]' , '',
'value', 'text',
@$this->element->hikamarket_params['image_scale']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKAM_IMAGE_RADIUS');?></td>
<td>
<input size="12" name="<?php echo
$this->control;?>[image_radius]" type="text"
value="<?php echo
@$this->element->hikamarket_params['image_radius'];?>"
/> px
</td>
</tr>
</table>
</fieldset>
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
</td>
<td valign="top" width="50%">
<?php } else { ?>
</div>
<div class="span6">
<?php } ?>
<fieldset data-block="content"
data-block-value="vendor" class="adminform">
<legend><?php echo JText::_('PARAMS_FOR_VENDORS');
?></legend>
<table class="admintable table" cellspacing="1"
width="100%">
<tr>
<td class="key"><?php echo
JText::_('ORDERING_FIELD');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['vendor_order']))
$this->element->hikamarket_params['vendor_order']
= 'inherit';
echo
$this->orderType->display($this->control.'[vendor_order]',
@$this->element->hikamarket_params['vendor_order'],
'#_hikamarket_vendor');
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('LINK_TO_VENDOR_PAGE');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['link_to_vendor_page']))
$this->element->hikamarket_params['link_to_vendor_page']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[link_to_vendor_page]' , '',
'value', 'text',
@$this->element->hikamarket_params['link_to_vendor_page']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('DISPLAY_VOTE'); ?></td>
<td><?php
if(!isset($this->element->hikamarket_params['show_vote']))
$this->element->hikamarket_params['show_vote'] =
'-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[show_vote]', '', 'value',
'text',
@$this->element->hikamarket_params['show_vote']);
?></td>
</tr>
<?php if(hikashop_level(2)) { ?>
<tr>
<td class="key"><?php echo
JText::_('DISPLAY_CUSTOM_FIELDS');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['display_custom_fields']))
$this->element->hikamarket_params['display_custom_fields']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[display_custom_fields]' , '',
'value', 'text',
@$this->element->hikamarket_params['display_custom_fields']);
?></td>
</tr>
<?php } ?>
</table>
</fieldset>
<fieldset data-block="layout"
data-block-value="div" class="adminform">
<legend><?php echo JText::_('PARAMS_FOR_DIV');
?></legend>
<table class="admintable table" cellspacing="1"
width="100%">
<tr>
<td class="key"><?php echo
JText::_('TYPE_OF_ITEM_LAYOUT');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['div_item_layout_type']))
$this->element->hikamarket_params['div_item_layout_type']
= 'inherit';
echo
$this->itemlayoutType->display($this->control.'[div_item_layout_type]',
@$this->element->hikamarket_params['div_item_layout_type'],
$this->js, '');
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('PANE_HEIGHT');?></td>
<td>
<input size="12" name="<?php echo
$this->control;?>[pane_height]" type="text"
value="<?php echo
@$this->element->hikamarket_params['pane_height'];?>"
/> px
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ITEM_BOX_COLOR');?></td>
<td><?php
echo
$this->colorType->displayAll('',$this->control.'[background_color]',@$this->element->hikamarket_params['background_color']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ITEM_BOX_MARGIN');?></td>
<td>
<input name="<?php echo
$this->control;?>[margin]" type="text"
value="<?php echo
@$this->element->hikamarket_params['margin'];?>"
/> px
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ITEM_BOX_BORDER');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['border_visible']))
$this->element->hikamarket_params['border_visible']
= '-1';
$arr2 = $arr;
$arr2[] = JHTML::_('select.option', 2,
JText::_('THUMBNAIL'));
echo JHTML::_('hikaselect.radiolist', $arr2,
$this->control.'[border_visible]' , '',
'value', 'text',
@$this->element->hikamarket_params['border_visible']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ITEM_BOX_ROUND_CORNER');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['rounded_corners']))
$this->element->hikamarket_params['rounded_corners']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[rounded_corners]' , '',
'value', 'text',
@$this->element->hikamarket_params['rounded_corners']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('TEXT_CENTERED');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['text_center']))
$this->element->hikamarket_params['text_center'] =
'-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[text_center]' , '',
'value', 'text',
@$this->element->hikamarket_params['text_center']);
?></td>
</tr>
</table>
</fieldset>
<fieldset data-block="layout"
data-block-value="list" class="adminform">
<legend><?php echo JText::_('PARAMS_FOR_LIST');
?></legend>
<table class="admintable table" cellspacing="1"
width="100%">
<tr>
<td class="key"><?php echo
JText::_('UL_CLASS_NAME');?></td>
<td>
<input name="<?php echo
$this->control;?>[ul_class_name]" type="text"
value="<?php echo
@$this->element->hikamarket_params['ul_class_name'];?>"
/>
</td>
</tr>
</table>
</fieldset>
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
</td>
</tr>
</table>
</div>
<?php } else { ?>
</div>
</div>
<?php } ?>
<div class="clr"></div>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="menu[id]"
value="<?php echo (int)@$this->element->id; ?>"
/>
<input type="hidden" name="menu[component_id]"
value="<?php echo @$this->element->component_id; ?>"
/>
<input type="hidden" name="menu[type]"
value="component" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="<?php echo
hikaInput::get()->getCmd('ctrl');?>" />
<input type="hidden" name="return"
value="<?php echo
hikaInput::get()->getString('return');?>" />
<input type="hidden" name="client"
value="0" />
<?php echo JHTML::_('form.token');?>
</form>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.switchPanel = function(id, name, type) {
var d = document, el = null;
if(type == 'layout') {
el = d.getElementById('number_of_columns');
if(el)
el.style.display = (name == 'table') ? 'none' :
'';
}
var container = d.getElementById('adminForm');
var elements = container.getElementsByTagName("fieldset");
for(var j = elements.length - 1; j >= 0; j--) {
e = elements[j];
if(e.nodeType && e.getAttribute &&
e.getAttribute('data-block') == type)
e.style.display = (e.getAttribute('data-block-value') == name)
? '' : 'none';
}
};
<?php echo $this->js; ?>
</script>
views/menusmarket/tmpl/index.html000064400000000032151160562450013205
0ustar00<html><body></body></html>views/menusmarket/tmpl/listing.php000064400000007371151160562450013407
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('menus'); ?>"
method="post" name="adminForm"
id="adminForm">
<table>
<tr>
<td width="100%">
<?php echo JText::_('FILTER'); ?>:
<input type="text" name="search"
id="search" value="<?php echo
$this->escape($this->pageInfo->search);?>"
class="text_area"/>
<button class="btn"
onclick="this.form.submit();"><?php echo
JText::_('GO'); ?></button>
<button class="btn"
onclick="document.getElementById('search').value='';this.form.submit();"><?php
echo JText::_('RESET'); ?></button>
</td>
</tr>
</table>
<table class="adminlist table table-striped table-hover"
cellpadding="1">
<thead>
<tr>
<th class="title titlenum"><?php
echo JText::_('HIKA_NUM');
?></th>
<th class="title titlebox">
<input type="checkbox" name="toggle"
value="" onclick="hikashop.checkAll(this);" />
</th>
<th class="title"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_TITLE'),
'title',
$this->pageInfo->filter->order->dir,$this->pageInfo->filter->order->value);
?></th>
<th class="title"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_ALIAS'),
'alias',
$this->pageInfo->filter->order->dir,$this->pageInfo->filter->order->value);
?></th>
<th class="title"><?php
echo JText::_('HIKA_TYPE'); ?></th>
<th class="title"><?php
echo JHTML::_('grid.sort', JText::_('LINK'),
'link',
$this->pageInfo->filter->order->dir,$this->pageInfo->filter->order->value);
?></th>
<th class="title titletoggle"><?php
echo JText::_('HIKA_ENABLED');
?></th>
<th class="title titleid"><?php
echo JHTML::_('grid.sort', JText::_( 'ID' ),
'id',
$this->pageInfo->filter->order->dir,$this->pageInfo->filter->order->value);
?></th>
</tr>
</thead>
<tbody>
<?php
$k = 0;
foreach($this->rows as $i => $row) {
$publishedid = 'published-' . $row->id;
?>
<tr class="row<?php echo $k; ?>">
<td align="center"><?php
echo $i + 1;
?></td>
<td align="center"><?php
echo JHTML::_('grid.id', $i, $row->id);
?></td>
<td><?php
if($this->manage){
?><a href="<?php echo
hikamarket::completeLink('menus&task=edit&cid[]=' .
$row->id);?>"><?php
}
echo $row->title;
if($this->manage){
?></a><?php
}
?></td>
<td><?php
echo $row->alias;
?></td>
<td><?php
echo $row->content_type;
?></td>
<td><?php
echo $row->link;
?></td>
<td align="center"><?php
if($this->manage){
?><span id="<?php echo $publishedid ?>"
class="loading"><?php echo
$this->toggleClass->toggle($publishedid, $row->published,
'menus'); ?></span><?php
}else{
echo $this->toggleClass->display('activate',
$row->published);
}
?></td>
<td align="center"><?php
echo $row->id;
?></td>
</tr>
<?php
$k = 1-$k;
}
?>
</tbody>
</table>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo
$this->pageInfo->filter->order->value; ?>" />
<input type="hidden" name="filter_order_Dir"
value="<?php echo $this->pageInfo->filter->order->dir;
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/menusmarket/tmpl/options.php000064400000022064151160562450013425
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKASHOP_YES')),
JHTML::_('select.option', '0',
JText::_('HIKASHOP_NO')),
);
?>
<div id="<?php echo $this->id; ?>"
class="hikashop_backend_tile_edition hk-container-fluid">
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('HIKA_DETAILS');
?></div>
<dl class="hika_options large">
<input type="hidden" value="vendor"
name="<?php echo $this->name; ?>[content_type]" />
<dt><?php
echo JText::_('TYPE_OF_LAYOUT');
?></dt>
<dd><?php
if(!isset($this->element['layout_type']))
$this->element['layout_type'] = 'inherit';
echo
$this->layoutType->display($this->name.'[layout_type]',
@$this->element['layout_type'], $this->js, $this->id);
?></dd>
<dt id="<?php echo $this->id;
?>_columns"><?php
echo JText::_('NUMBER_OF_COLUMNS');
?></dt>
<dd id="<?php echo $this->id; ?>_columns_0">
<input name="<?php echo $this->name; ?>[columns]"
type="text" value="<?php echo
@$this->element['columns'];?>" />
</dd>
<dt><?php
echo JText::_('NUMBER_OF_ITEMS');
?></dt>
<dd>
<input name="<?php echo $this->name; ?>[limit]"
type="text" value="<?php echo
@$this->element['limit'];?>" />
</dd>
<dt><?php
echo JText::_('RANDOM_ITEMS');
?></dt>
<dd><?php
if(!isset($this->element['random']))
$this->element['random'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[random]' , '', 'value',
'text', @$this->element['random']);
?></dd>
</dl>
</div></div>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('HIKAM_PARAMS_FOR_IMAGES');
?></div>
<dl class="hikam_options large">
<dt><?php echo JText::_('IMAGE_X');?></dt>
<dd>
<input size="12" name="<?php echo $this->name;
?>[image_width]" type="text" value="<?php echo
@$this->element['image_width'];?>" /> px
</dd>
<dt><?php echo JText::_('IMAGE_Y');?></dt>
<dd>
<input size="12" name="<?php echo $this->name;
?>[image_height]" type="text" value="<?php echo
@$this->element['image_height'];?>" /> px
</dd>
<dt><?php echo
JText::_('HIKAM_IMAGE_FORCESIZE');?></dt>
<dd><?php
if(!isset($this->element['image_forcesize']))
$this->element['image_forcesize'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[image_forcesize]' , '',
'value', 'text',
@$this->element['image_forcesize']);
?></dd>
<dt><?php echo
JText::_('HIKAM_IMAGE_GRAYSCALE');?></dt>
<dd><?php
if(!isset($this->element['image_grayscale']))
$this->element['image_grayscale'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[image_grayscale]' , '',
'value', 'text',
@$this->element['image_grayscale']);
?></dd>
<dt><?php echo
JText::_('HIKAM_IMAGE_SCALE');?></dt>
<dd><?php
if(!isset($this->element['image_scale']))
$this->element['image_scale'] = '-1';
$scale_arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKAM_IMAGE_SCALE_INSIDE')),
JHTML::_('select.option', '0',
JText::_('HIKAM_IMAGE_SCALE_OUTSIDE')),
);
echo JHTML::_('hikaselect.radiolist', $scale_arr,
$this->name.'[image_scale]' , '', 'value',
'text', @$this->element['image_scale']);
?></dd>
<dt><?php echo
JText::_('HIKAM_IMAGE_RADIUS');?></dt>
<dd>
<input size="12" name="<?php echo $this->name;
?>[image_radius]" type="text" value="<?php echo
@$this->element['image_radius'];?>" /> px
</dd>
</dl>
</div></div>
<div class="hkc-lg-clear"></div>
<div class="hkc-xl-4 hkc-lg-6 hikashop_tile_block"
data-block="content"
data-block-value="vendor"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('PARAMS_FOR_VENDORS'); ?></div>
<dl class="hikam_options large">
<dt><?php echo
JText::_('ORDERING_FIELD');?></dt>
<dd><?php
if(!isset($this->element['vendor_order']))
$this->element['vendor_order'] = 'inherit';
echo
$this->orderType->display($this->name.'[vendor_order]',
@$this->element['vendor_order'],
'#_hikamarket_vendor');
?></dd>
<dt><?php
echo JText::_('ORDERING_DIRECTION');
?></dt>
<dd><?php
if(!isset($this->element['vendor_order_dir']))
$this->element['vendor_order_dir'] = 'inherit';
echo
$this->orderdirType->display($this->name.'[vendor_order_dir]',
@$this->element['vendor_order_dir']);
?></dd>
<dt><?php echo
JText::_('LINK_TO_VENDOR_PAGE');?></dt>
<dd><?php
if(!isset($this->element['link_to_vendor_page']))
$this->element['link_to_vendor_page'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[link_to_vendor_page]' , '',
'value', 'text',
@$this->element['link_to_vendor_page']);
?></dd>
<dt><?php echo
JText::_('DISPLAY_VOTE');?></dt>
<dd><?php
if(!isset($this->element['show_vote']))
$this->element['show_vote'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[show_vote]', '', 'value',
'text', @$this->element['show_vote']);
?></dd>
<?php if(hikashop_level(2)) { ?>
<dt><?php echo
JText::_('DISPLAY_CUSTOM_FIELDS');?></dt>
<dd><?php
if(!isset($this->element['display_custom_fields']))
$this->element['display_custom_fields'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[display_custom_fields]' , '',
'value', 'text',
@$this->element['display_custom_fields']);
?></dd>
<?php } ?>
</dl>
</div></div>
<div class="hkc-xl-clear"></div>
<div class="hkc-xl-4 hkc-lg-6 hikashop_tile_block"
data-block="layout"
data-block-value="div"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('PARAMS_FOR_DIV'); ?></div>
<dl class="hikam_options large">
<dt><?php echo
JText::_('TYPE_OF_ITEM_LAYOUT');?></dt>
<dd><?php
if(!isset($this->element['div_item_layout_type']))
$this->element['div_item_layout_type'] =
'inherit';
echo
$this->itemlayoutType->display($this->name.'[div_item_layout_type]',
@$this->element['div_item_layout_type'], $this->js,
'');
?></dd>
<dt><?php echo
JText::_('PANE_HEIGHT');?></dt>
<dd>
<input size="12" name="<?php echo $this->name;
?>[pane_height]" type="text" value="<?php echo
@$this->element['pane_height'];?>" /> px
</dd>
<dt><?php echo
JText::_('ITEM_BOX_COLOR');?></dt>
<dd><?php
echo $this->colorType->displayAll('',
$this->name.'[background_color]',
@$this->element['background_color']);
?></dd>
<dt><?php echo
JText::_('ITEM_BOX_MARGIN');?></dt>
<dd>
<input name="<?php echo $this->name; ?>[margin]"
type="text" value="<?php echo
@$this->element['margin'];?>" /> px
</dd>
<dt><?php echo
JText::_('ITEM_BOX_BORDER');?></dt>
<dd><?php
if(!isset($this->element['border_visible']))
$this->element['border_visible'] = '-1';
$arr2 = $arr;
$arr2[] = JHTML::_('select.option', 2,
JText::_('THUMBNAIL'));
echo JHTML::_('hikaselect.radiolist', $arr2,
$this->name.'[border_visible]' , '',
'value', 'text',
@$this->element['border_visible']);
?></dd>
<dt><?php echo
JText::_('ITEM_BOX_ROUND_CORNER');?></dt>
<dd><?php
if(!isset($this->element['rounded_corners']))
$this->element['rounded_corners'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[rounded_corners]' , '',
'value', 'text',
@$this->element['rounded_corners']);
?></dd>
<dt><?php echo
JText::_('TEXT_CENTERED');?></dt>
<dd><?php
if(!isset($this->element['text_center']))
$this->element['text_center'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[text_center]' , '', 'value',
'text', @$this->element['text_center']);
?></dd>
</dl>
</div></div>
<div class="hkc-lg-clear"></div>
<div class="hkc-xl-4 hkc-lg-6 hikashop_tile_block"
data-block="layout"
data-block-value="list"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('PARAMS_FOR_LIST'); ?></div>
<dl class="hikam_options large">
<dt><?php echo
JText::_('UL_CLASS_NAME');?></dt>
<dd>
<input name="<?php echo $this->name;
?>[ul_class_name]" type="text" value="<?php echo
@$this->element['ul_class_name'];?>" />
</dd>
</dl>
</div></div>
<div style="clear:both"></div>
</div>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.switchPanel = function(id, name, type) {
var d = document, el = null;
if(type == 'layout') {
el = d.getElementById(id + '_columns');
if(el) {
var v = (name == 'table') ? 'none' : '';
el.style.display = v;
el = d.getElementById(id + '_columns_0');
if(el)
el.style.display = v;
}
}
var container = d.getElementById(id);
if(!container)
return;
for(var j = container.childNodes.length - 1; j >= 0; j--) {
e = container.childNodes[j];
if(e.nodeType && e.getAttribute &&
e.getAttribute('data-block') == type)
e.style.display = (e.getAttribute('data-block-value') == name)
? '' : 'none';
}
};
<?php echo $this->js; ?>
</script>
views/menusmarket/view.html.php000064400000020143151160562450012667
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class menusmarketViewmenusmarket extends hikamarketView {
const ctrl = 'menus';
const name = 'MENU';
const icon = 'fa-ellipsis-v';
public function display($tpl = null, $params = null) {
$this->paramBase = HIKAMARKET_COMPONENT . '.' .
$this->getName();
$fct = $this->getLayout();
if(method_exists($this, $fct)) {
if($this->$fct($params) === false)
return false;
}
parent::display($tpl);
}
private function assignTypes() {
JHTML::_('behavior.modal');
$modules = array(
'colorType' => 'type.color',
'listType' => 'shop.type.list',
'contentType' => 'type.menu_content',
'layoutType' => 'type.menu_layout',
'orderdirType' => 'shop.type.orderdir',
'orderType' => 'shop.type.order',
'itemlayoutType' => 'type.itemlayout',
'popup' => 'shop.helper.popup',
);
foreach($modules as $k => $module) {
$element = hikamarket::get($module);
$this->assignRef($k, $element);
unset($element);
}
$this->toolbar = array(
'save',
'apply',
'cancel',
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-form')
);
if(!empty($this->toolbarJoomlaMenu)) {
array_unshift($this->toolbar, '|');
array_unshift($this->toolbar, $this->toolbarJoomlaMenu);
}
}
protected function getMenuData($cid) {
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
if(empty($cid)) {
$element = new stdClass();
$element->hikamarket_params =
$shopConfig->get('default_params');
$default = array(
'content_type' => 'vendor',
'link_to_vendor_page' => '1',
'border_visible' => true,
'layout_type' => 'inherit',
'columns' => '',
'limit' => '',
'random' => '-1',
'order_dir' => 'inherit',
'filter_type' => 2,
'vendor_order' => 'inherit',
'show_vote' => '-1',
'div_item_layout_type' => 'inherit',
'background_color' => '',
'margin' => '',
'border_visible' => '-1',
'rounded_corners' => '-1',
'text_center' => '-1',
'ul_class_name' => '',
);
foreach($default as $k => $v) {
$element->hikamarket_params[$k] = $v;
}
} else {
$menusClass = hikamarket::get('class.menus');
$element = $menusClass->get($cid);
if(!empty($element->content_type) &&
!in_array($element->content_type, array('vendor'))) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('HIKAM_MENU_TYPE_NOT_SUPPORTED'),
'error');
$url =
JRoute::_('index.php?option=com_menus&task=item.edit&id='.$cid,
false);
$app->redirect($url);
}
if(!isset($element->hikamarket_params['link_to_vendor_page']))
$element->hikamarket_params['link_to_vendor_page'] =
'1';
}
if(!isset($element->hikamarket_params['layout_type']))
$element->hikamarket_params['layout_type'] =
'div';
return $element;
}
public function form() {
$cid = hikamarket::getCID('id');
$element = $this->getMenuData($cid);
if(!empty($cid)) {
$task = 'edit';
$control = 'config[menu_' . $cid . ']';
$url =
JRoute::_('index.php?option=com_menus&task=item.edit&id='.$element->id);
$this->toolbarJoomlaMenu = array(
'name' => 'link',
'icon' => 'upload',
'alt' => JText::_('JOOMLA_MENU_OPTIONS'),
'url' => $url
);
} else {
$task = 'add';
$control = 'config[menu_0]';
}
$this->assignRef('element', $element);
$this->assignRef('control', $control);
$this->assignTypes();
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl .
'&task=' . $task . '&cid[]=' . $cid);
}
public function options(&$params) {
$modules = array(
'colorType' => 'type.color',
'listType' => 'shop.type.list',
'contentType' => 'type.menu_content',
'layoutType' => 'type.menu_layout',
'orderdirType' => 'shop.type.orderdir',
'orderType' => 'shop.type.order',
'itemlayoutType' => 'type.itemlayout',
);
foreach($modules as $k => $module) {
$element = hikamarket::get($module);
$this->assignRef($k, $element);
unset($element);
}
$this->name = str_replace('[]', '',
$params->get('name'));
$this->id = str_replace(array('][', '[',
']'), array('_', '_', ''),
$this->name);
$this->element = $params->get('value');
$this->type = $params->get('type');
$this->menu = $params->get('menu');
$cid = $params->get('cid', 0);
if(empty($cid) || empty($this->element)) {
$menu = $this->getMenuData($cid);
$this->element = $menu->hikamarket_params;
}
}
public function listing() {
$app = JFactory::getApplication();
$pageInfo = new stdClass();
$pageInfo->filter = new stdClass();
$pageInfo->filter->order = new stdClass();
$pageInfo->limit = new stdClass();
$pageInfo->search =
$app->getUserStateFromRequest($this->paramBase.'.search',
'search', '', 'string');
$pageInfo->filter->order->value =
$app->getUserStateFromRequest($this->paramBase.'.filter_order',
'filter_order', 'id', 'cmd');
$pageInfo->filter->order->dir =
$app->getUserStateFromRequest($this->paramBase.'.filter_order_Dir',
'filter_order_Dir', 'desc', 'word');
$db = JFactory::getDBO();
$query = 'SELECT extension_id FROM ' .
hikamarket::table('extensions', false) . ' WHERE
type=\'component\' AND
element=\''.HIKAMARKET_COMPONENT.'\'';
$db->setQuery($query, 0, 1);
$filters = array(
'(component_id = ' . $db->loadResult() . ' OR
(component_id = 0 AND link LIKE
\'%option='.HIKAMARKET_COMPONENT.'%\'))',
'type = \'component\'',
'client_id = 0',
'published>-2'
);
$searchMap = array(
'alias',
'link',
'name'
);
if(!empty($pageInfo->search)) {
$searchVal = '\'%' .
$db->escape(HikaStringHelper::strtolower($pageInfo->search ), true) .
'%\'';
$filters[] = implode(' LIKE ' . $searchVal . ' OR
', $searchMap) . ' LIKE ' . $searchVal;
}
$order = '';
if(!empty($pageInfo->filter->order->value))
$order = ' ORDER BY
'.$pageInfo->filter->order->value.'
'.$pageInfo->filter->order->dir;
if(!empty($filters)) {
$filters = ' WHERE (' . implode(') AND (', $filters)
. ')';
} else {
$filters = '';
}
$query = ' FROM '.hikamarket::table('menu', false) .
' ' . $filters . $order;
$db->setQuery('SELECT *' . $query);
$rows = $db->loadObjectList();
if(!empty($pageInfo->search))
$rows = hikamarket::search($pageInfo->search, $rows,
'id');
$db->setQuery('SELECT COUNT(*)' . $query);
$pageInfo->elements = new stdClass();
$pageInfo->elements->total = $db->loadResult();
$pageInfo->elements->page = count($rows);
$toggleClass = hikamarket::get('helper.toggle');
$this->assignRef('toggleClass', $toggleClass);
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$unset = array();
foreach($rows as $k => $row) {
if(strpos($row->link, 'view=vendor') !== false &&
strpos($row->link, 'layout=listing') !== false) {
$rows[$k]->hikamarket_params = $config->get('menu_' .
$row->id);
$rows[$k]->hikamarket_params['content_type'] =
'vendor';
} else {
$unset[] = $k;
continue;
}
if(empty($rows[$k]->hikamarket_params)) {
$rows[$k]->hikamarket_params =
$shopConfig->get('default_params');
}
$rows[$k]->content_type =
$rows[$k]->hikamarket_params['content_type'];
}
foreach($unset as $u) {
unset($rows[$u]);
}
$this->assignRef('rows', $rows);
$this->assignRef('pageInfo', $pageInfo);
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl);
$manage =
hikamarket::isAllowed($shopConfig->get('acl_menus_manage',
'all'));
$this->assignRef('manage', $manage);
$this->toolbar = array(
array('name' => 'editList','display'
=> $manage),
array('name' => 'deleteList', 'display'
=>
hikamarket::isAllowed($shopConfig->get('acl_menus_delete',
'all'))),
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-listing'),
'dashboard'
);
}
}
views/modulesmarket/index.html000064400000000032151160562450012552
0ustar00<html><body></body></html>views/modulesmarket/tmpl/form.php000064400000033441151160562450013217
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<?php
$arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKASHOP_YES')),
JHTML::_('select.option', '0',
JText::_('HIKASHOP_NO')),
);
?>
<form action="<?php echo
hikamarket::completeLink('modules'); ?>"
method="POST" name="adminForm"
id="adminForm">
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
<div id="page-modules">
<table style="width:100%">
<tr>
<td valign="top" width="50%">
<?php } else { ?>
<div id="page-modules" class="row-fluid">
<div class="span6">
<?php } ?>
<fieldset class="adminform">
<legend><?php echo JText::_('HIKA_DETAILS');
?></legend>
<table class="admintable table"
cellspacing="1">
<tr>
<td class="key"><?php
echo JText::_('HIKA_TITLE');
?></td>
<td>
<input class="text_area" type="text"
name="module<?php echo $this->control; ?>[title]"
id="title" size="35" value="<?php echo
$this->escape(@$this->element->title); ?>" />
</td>
</tr>
<tr>
<td class="key"><?php
echo JText::_('SHOW_TITLE');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'module' . $this->control . '[showtitle]',
'class="inputbox"', @$this->element->showtitle);
?></td>
</tr>
<tr>
<td class="key"><?php
echo JText::_('HIKA_PUBLISHED');
?></td>
<td><?php
echo JHTML::_('hikaselect.booleanlist',
'module' . $this->control . '[published]',
'class="inputbox"', @$this->element->published);
?></td>
</tr>
<tr>
<td class="key"><?php
echo JText::_('TYPE_OF_CONTENT');
?></td>
<td><?php
if(empty($this->element->content_type) ||
$this->element->content_type != 'vendor')
$this->element->content_type = 'vendor';
echo
$this->contentType->display($this->control.'[content_type]',@$this->element->content_type,
$this->js, true, true);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('TYPE_OF_LAYOUT'); ?></td>
<td><?php
if(!isset($this->element->hikamarket_params['layout_type']))
$this->element->hikamarket_params['layout_type'] =
'inherit';
echo
$this->layoutType->display($this->control.'[layout_type]',
@$this->element->hikamarket_params['layout_type'],
$this->js, true);
?></td>
</tr>
<tr id="number_of_columns">
<td class="key"><?php echo
JText::_('NUMBER_OF_COLUMNS');?></td>
<td>
<input name="<?php echo $this->control;
?>[columns]" type="text" value="<?php echo
@$this->element->hikamarket_params['columns'];?>"
/>
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('NUMBER_OF_ITEMS'); ?></td>
<td>
<input name="<?php echo $this->control;
?>[limit]" type="text" value="<?php echo
@$this->element->hikamarket_params['limit'];?>"
/>
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('RANDOM_ITEMS');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['random']))
$this->element->hikamarket_params['random'] =
'-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[random]' , '', 'value',
'text',
@$this->element->hikamarket_params['random']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ORDERING_DIRECTION'); ?></td>
<td><?php
if(!isset($this->element->hikamarket_params['order_dir']))
$this->element->hikamarket_params['order_dir'] =
'inherit';
echo
$this->orderdirType->display($this->control.'[order_dir]',@$this->element->hikamarket_params['order_dir']);
?></td>
</tr>
<?php
?>
</table>
</fieldset>
<fieldset data-block="options"
data-block-value="image" class="adminform">
<legend><?php echo
JText::_('HIKAM_PARAMS_FOR_IMAGES'); ?></legend>
<table class="admintable table" cellspacing="1"
width="100%">
<tr>
<td class="key"><?php echo
JText::_('IMAGE_X');?></td>
<td>
<input size="12" name="<?php echo
$this->control;?>[image_width]" type="text"
value="<?php echo
@$this->element->hikamarket_params['image_width'];?>"
/> px
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('IMAGE_Y');?></td>
<td>
<input size="12" name="<?php echo
$this->control;?>[image_height]" type="text"
value="<?php echo
@$this->element->hikamarket_params['image_height'];?>"
/> px
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKAM_IMAGE_FORCESIZE');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['image_forcesize']))
$this->element->hikamarket_params['image_forcesize']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[image_forcesize]' , '',
'value', 'text',
@$this->element->hikamarket_params['image_forcesize']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKAM_IMAGE_GRAYSCALE');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['image_grayscale']))
$this->element->hikamarket_params['image_grayscale']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[image_grayscale]' , '',
'value', 'text',
@$this->element->hikamarket_params['image_grayscale']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKAM_IMAGE_SCALE');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['image_scale']))
$this->element->hikamarket_params['image_scale'] =
'-1';
$scale_arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKAM_IMAGE_SCALE_INSIDE')),
JHTML::_('select.option', '0',
JText::_('HIKAM_IMAGE_SCALE_OUTSIDE')),
);
echo JHTML::_('hikaselect.radiolist', $scale_arr,
$this->control.'[image_scale]' , '',
'value', 'text',
@$this->element->hikamarket_params['image_scale']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('HIKAM_IMAGE_RADIUS');?></td>
<td>
<input size="12" name="<?php echo
$this->control;?>[image_radius]" type="text"
value="<?php echo
@$this->element->hikamarket_params['image_radius'];?>"
/> px
</td>
</tr>
</table>
</fieldset>
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
</td>
<td valign="top" width="50%">
<?php } else { ?>
</div>
<div class="span6">
<?php } ?>
<fieldset data-block="content"
data-block-value="vendor" class="adminform">
<legend><?php echo JText::_('PARAMS_FOR_VENDORS');
?></legend>
<table class="admintable table" cellspacing="1"
width="100%">
<tr>
<td class="key"><?php echo
JText::_('ORDERING_FIELD');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['vendor_order']))
$this->element->hikamarket_params['vendor_order']
= 'inherit';
echo
$this->orderType->display($this->control.'[vendor_order]',
@$this->element->hikamarket_params['vendor_order'],
'#_hikamarket_vendor');
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('LINK_TO_VENDOR_PAGE');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['link_to_vendor_page']))
$this->element->hikamarket_params['link_to_vendor_page']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[link_to_vendor_page]' , '',
'value', 'text',
@$this->element->hikamarket_params['link_to_vendor_page']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('DISPLAY_VOTE'); ?></td>
<td><?php
if(!isset($this->element->hikamarket_params['show_vote']))
$this->element->hikamarket_params['show_vote'] =
'-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[show_vote]', '', 'value',
'text',
@$this->element->hikamarket_params['show_vote']);
?></td>
</tr>
<?php if(hikashop_level(2)) { ?>
<tr>
<td class="key"><?php echo
JText::_('DISPLAY_CUSTOM_FIELDS');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['display_custom_fields']))
$this->element->hikamarket_params['display_custom_fields']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[display_custom_fields]' , '',
'value', 'text',
@$this->element->hikamarket_params['display_custom_fields']);
?></td>
</tr>
<?php } ?>
</table>
</fieldset>
<fieldset data-block="layout"
data-block-value="div" class="adminform">
<legend><?php echo JText::_('PARAMS_FOR_DIV');
?></legend>
<table class="admintable table" cellspacing="1"
width="100%">
<tr>
<td class="key"><?php echo
JText::_('TYPE_OF_ITEM_LAYOUT');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['div_item_layout_type']))
$this->element->hikamarket_params['div_item_layout_type']
= 'inherit';
echo
$this->itemlayoutType->display($this->control.'[div_item_layout_type]',
@$this->element->hikamarket_params['div_item_layout_type'],
$this->js, 'adminForm');
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('PANE_HEIGHT');?></td>
<td>
<input size="12" name="<?php echo
$this->control;?>[pane_height]" type="text"
value="<?php echo
@$this->element->hikamarket_params['pane_height'];?>"
/> px
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ITEM_BOX_COLOR');?></td>
<td><?php
echo
$this->colorType->displayAll('',$this->control.'[background_color]',@$this->element->hikamarket_params['background_color']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ITEM_BOX_MARGIN');?></td>
<td>
<input name="<?php echo
$this->control;?>[margin]" type="text"
value="<?php echo
@$this->element->hikamarket_params['margin'];?>"
/> px
</td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ITEM_BOX_BORDER');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['border_visible']))
$this->element->hikamarket_params['border_visible']
= '-1';
$arr2 = $arr;
$arr2[] = JHTML::_('select.option', 2,
JText::_('THUMBNAIL'));
echo JHTML::_('hikaselect.radiolist', $arr2,
$this->control.'[border_visible]' , '',
'value', 'text',
@$this->element->hikamarket_params['border_visible']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('ITEM_BOX_ROUND_CORNER');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['rounded_corners']))
$this->element->hikamarket_params['rounded_corners']
= '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[rounded_corners]' , '',
'value', 'text',
@$this->element->hikamarket_params['rounded_corners']);
?></td>
</tr>
<tr>
<td class="key"><?php echo
JText::_('TEXT_CENTERED');?></td>
<td><?php
if(!isset($this->element->hikamarket_params['text_center']))
$this->element->hikamarket_params['text_center'] =
'-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->control.'[text_center]' , '',
'value', 'text',
@$this->element->hikamarket_params['text_center']);
?></td>
</tr>
</table>
</fieldset>
<fieldset data-block="layout"
data-block-value="list" class="adminform">
<legend><?php echo JText::_('PARAMS_FOR_LIST');
?></legend>
<table class="admintable table" cellspacing="1"
width="100%">
<tr>
<td class="key"><?php echo
JText::_('UL_CLASS_NAME');?></td>
<td>
<input name="<?php echo
$this->control;?>[ul_class_name]" type="text"
value="<?php echo
@$this->element->hikamarket_params['ul_class_name'];?>"
/>
</td>
</tr>
</table>
</fieldset>
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
</td>
</tr>
</table>
</div>
<?php } else { ?>
</div>
</div>
<?php } ?>
<div class="clr"></div>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="cid"
value="<?php echo (int)@$this->element->id; ?>"
/>
<input type="hidden" name="module[id]"
value="<?php echo (int)@$this->element->id; ?>"
/>
<input type="hidden" name="module[module]"
value="<?php echo $this->element->module; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="<?php echo
hikaInput::get()->getCmd('ctrl');?>" />
<input type="hidden" name="return"
value="<?php echo
hikaInput::get()->getString('return');?>" />
<input type="hidden" name="client"
value="0" />
<?php echo JHTML::_('form.token');?>
</form>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.switchPanel = function(id, name, type) {
var d = document, el = null;
if(type == 'layout') {
el = d.getElementById('number_of_columns');
if(el)
el.style.display = (name == 'table') ? 'none' :
'';
}
var container = d.getElementById('adminForm');
var elements = container.getElementsByTagName("fieldset");
for(var j = elements.length - 1; j >= 0; j--) {
e = elements[j];
if(e.nodeType && e.getAttribute &&
e.getAttribute('data-block') == type)
e.style.display = (e.getAttribute('data-block-value') == name)
? '' : 'none';
}
};
<?php echo $this->js; ?>
</script>
views/modulesmarket/tmpl/index.html000064400000000032151160562450013526
0ustar00<html><body></body></html>views/modulesmarket/tmpl/listing.php000064400000006552151160562450013730
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('modules'); ?>"
method="post" name="adminForm"
id="adminForm">
<table>
<tr>
<td width="100%">
<?php echo JText::_('FILTER'); ?>:
<input type="text" name="search"
id="search" value="<?php echo
$this->escape($this->pageInfo->search);?>"
class="text_area"/>
<button class="btn"
onclick="this.form.submit();"><?php echo
JText::_('GO'); ?></button>
<button class="btn"
onclick="document.getElementById('search').value='';this.form.submit();"><?php
echo JText::_('RESET'); ?></button>
</td>
</tr>
</table>
<table class="adminlist table table-striped table-hover"
cellpadding="1">
<thead>
<tr>
<th class="title titlenum"><?php
echo JText::_( 'HIKA_NUM' );
?></th>
<th class="title titlebox">
<input type="checkbox" name="toggle"
value="" onclick="hikashop.checkAll(this);" />
</th>
<th class="title"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_NAME'),
'title',
$this->pageInfo->filter->order->dir,$this->pageInfo->filter->order->value
);
?></th>
<th class="title titletoggle"><?php
echo JText::_('HIKA_ENABLED'); ?></th>
<th class="title titleid"><?php
echo JHTML::_('grid.sort', JText::_( 'ID' ),
'id',
$this->pageInfo->filter->order->dir,$this->pageInfo->filter->order->value
);
?></th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="5">
<?php echo $this->pagination->getListFooter(); ?>
<?php echo $this->pagination->getResultsCounter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php
$k = 0;
foreach($this->rows as $i => $row) {
$publishedid = 'published-' . $row->id;
?>
<tr class="row<?php echo $k; ?>">
<td align="center"><?php
echo $i + 1;
?></td>
<td align="center"><?php
echo JHTML::_('grid.id', $i, $row->id);
?></td>
<td><?php
if($this->manage){
?><a href="<?php echo
hikamarket::completeLink('modules&task=edit&cid[]=' .
$row->id);?>"><?php
}
echo $row->title;
if($this->manage){
?></a><?php
}
?></td>
<td align="center"><?php
if($this->manage){
?><span id="<?php echo $publishedid ?>"
class="loading"><?php echo
$this->toggleClass->toggle($publishedid, $row->published,
'modules'); ?></span><?php
}else{
echo $this->toggleClass->display('activate',
$row->published);
}
?></td>
<td align="center"><?php
echo $row->id;
?></td>
</tr>
<?php
$k = 1-$k;
}
?>
</tbody>
</table>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo
$this->pageInfo->filter->order->value; ?>" />
<input type="hidden" name="filter_order_Dir"
value="<?php echo $this->pageInfo->filter->order->dir;
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/modulesmarket/tmpl/options.php000064400000021475151160562450013753
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKASHOP_YES')),
JHTML::_('select.option', '0',
JText::_('HIKASHOP_NO')),
);
?>
<div id="<?php echo $this->id; ?>">
<div class="hkc-xl-4 hkc-lg-6">
<h3><?php echo JText::_('HIKA_DETAILS');
?></h3>
<dl class="hikam_options large">
<dt><?php
echo JText::_('TYPE_OF_CONTENT');
?></dt>
<dd><?php
echo
$this->contentType->display($this->name.'[content_type]',
@$this->element['content_type'], $this->js, true,
$this->id);
?></dd>
<dt><?php
echo JText::_('TYPE_OF_LAYOUT');
?></dt>
<dd><?php
if(!isset($this->element['layout_type']))
$this->element['layout_type'] = 'inherit';
echo
$this->layoutType->display($this->name.'[layout_type]',
@$this->element['layout_type'], $this->js, $this->id);
?></dd>
<dt id="<?php echo $this->id;
?>_columns"><?php
echo JText::_('NUMBER_OF_COLUMNS');
?></dt>
<dd id="<?php echo $this->id; ?>_columns_0">
<input name="<?php echo $this->name; ?>[columns]"
type="text" value="<?php echo
@$this->element['columns'];?>" />
</dd>
<dt><?php
echo JText::_('NUMBER_OF_ITEMS');
?></dt>
<dd>
<input name="<?php echo $this->name; ?>[limit]"
type="text" value="<?php echo
@$this->element['limit'];?>" />
</dd>
<dt><?php
echo JText::_('RANDOM_ITEMS');
?></dt>
<dd><?php
if(!isset($this->element['random']))
$this->element['random'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[random]' , '', 'value',
'text', @$this->element['random']);
?></dd>
</dl>
</div>
<div class="hkc-xl-4 hkc-lg-6">
<h3><?php echo JText::_('HIKAM_PARAMS_FOR_IMAGES');
?></h3>
<dl class="hikam_options large">
<dt><?php echo JText::_('IMAGE_X');?></dt>
<dd>
<input size="12" name="<?php echo $this->name;
?>[image_width]" type="text" value="<?php echo
@$this->element['image_width'];?>" /> px
</dd>
<dt><?php echo JText::_('IMAGE_Y');?></dt>
<dd>
<input size="12" name="<?php echo $this->name;
?>[image_height]" type="text" value="<?php echo
@$this->element['image_height'];?>" /> px
</dd>
<dt><?php echo
JText::_('HIKAM_IMAGE_FORCESIZE');?></dt>
<dd><?php
if(!isset($this->element['image_forcesize']))
$this->element['image_forcesize'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[image_forcesize]' , '',
'value', 'text',
@$this->element['image_forcesize']);
?></dd>
<dt><?php echo
JText::_('HIKAM_IMAGE_GRAYSCALE');?></dt>
<dd><?php
if(!isset($this->element['image_grayscale']))
$this->element['image_grayscale'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[image_grayscale]' , '',
'value', 'text',
@$this->element['image_grayscale']);
?></dd>
<dt><?php echo
JText::_('HIKAM_IMAGE_SCALE');?></dt>
<dd><?php
if(!isset($this->element['image_scale']))
$this->element['image_scale'] = '-1';
$scale_arr = array(
JHTML::_('select.option', '-1',
JText::_('HIKA_INHERIT')),
JHTML::_('select.option', '1',
JText::_('HIKAM_IMAGE_SCALE_INSIDE')),
JHTML::_('select.option', '0',
JText::_('HIKAM_IMAGE_SCALE_OUTSIDE')),
);
echo JHTML::_('hikaselect.radiolist', $scale_arr,
$this->name.'[image_scale]' , '', 'value',
'text', @$this->element['image_scale']);
?></dd>
<dt><?php echo
JText::_('HIKAM_IMAGE_RADIUS');?></dt>
<dd>
<input size="12" name="<?php echo $this->name;
?>[image_radius]" type="text" value="<?php echo
@$this->element['image_radius'];?>" /> px
</dd>
</dl>
</div>
<div class="hkc-lg-clear"></div>
<div class="hkc-xl-4 hkc-lg-6" data-block="content"
data-block-value="vendor">
<h3><?php echo JText::_('PARAMS_FOR_VENDORS');
?></h3>
<dl class="hikam_options large">
<dt><?php echo
JText::_('ORDERING_FIELD');?></dt>
<dd><?php
if(!isset($this->element['vendor_order']))
$this->element['vendor_order'] = 'inherit';
echo
$this->orderType->display($this->name.'[vendor_order]',
@$this->element['vendor_order'],
'#_hikamarket_vendor');
?></dd>
<dt><?php
echo JText::_('ORDERING_DIRECTION');
?></dt>
<dd><?php
if(!isset($this->element['vendor_order_dir']))
$this->element['vendor_order_dir'] = 'inherit';
echo
$this->orderdirType->display($this->name.'[vendor_order_dir]',
@$this->element['vendor_order_dir']);
?></dd>
<dt><?php echo
JText::_('LINK_TO_VENDOR_PAGE');?></dt>
<dd><?php
if(!isset($this->element['link_to_vendor_page']))
$this->element['link_to_vendor_page'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[link_to_vendor_page]' , '',
'value', 'text',
@$this->element['link_to_vendor_page']);
?></dd>
<dt><?php echo
JText::_('DISPLAY_VOTE');?></dt>
<dd><?php
if(!isset($this->element['show_vote']))
$this->element['show_vote'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[show_vote]', '', 'value',
'text', @$this->element['show_vote']);
?></dd>
<?php if(hikashop_level(2)) { ?>
<dt><?php echo
JText::_('DISPLAY_CUSTOM_FIELDS');?></dt>
<dd><?php
if(!isset($this->element['display_custom_fields']))
$this->element['display_custom_fields'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[display_custom_fields]' , '',
'value', 'text',
@$this->element['display_custom_fields']);
?></dd>
<?php } ?>
</dl>
</div>
<div class="hkc-xl-clear"></div>
<div class="hkc-xl-4 hkc-lg-6" data-block="layout"
data-block-value="div">
<h3><?php echo JText::_('PARAMS_FOR_DIV');
?></h3>
<dl class="hikam_options large">
<dt><?php echo
JText::_('TYPE_OF_ITEM_LAYOUT');?></dt>
<dd><?php
if(!isset($this->element['div_item_layout_type']))
$this->element['div_item_layout_type'] =
'inherit';
echo
$this->itemlayoutType->display($this->name.'[div_item_layout_type]',
@$this->element['div_item_layout_type'], $this->js,
'');
?></dd>
<dt><?php echo
JText::_('PANE_HEIGHT');?></dt>
<dd>
<input size="12" name="<?php echo $this->name;
?>[pane_height]" type="text" value="<?php echo
@$this->element['pane_height'];?>" /> px
</dd>
<dt><?php echo
JText::_('ITEM_BOX_COLOR');?></dt>
<dd><?php
echo $this->colorType->displayAll('',
$this->name.'[background_color]',
@$this->element['background_color']);
?></dd>
<dt><?php echo
JText::_('ITEM_BOX_MARGIN');?></dt>
<dd>
<input name="<?php echo $this->name; ?>[margin]"
type="text" value="<?php echo
@$this->element['margin'];?>" /> px
</dd>
<dt><?php echo
JText::_('ITEM_BOX_BORDER');?></dt>
<dd><?php
if(!isset($this->element['border_visible']))
$this->element['border_visible'] = '-1';
$arr2 = $arr;
$arr2[] = JHTML::_('select.option', 2,
JText::_('THUMBNAIL'));
echo JHTML::_('hikaselect.radiolist', $arr2,
$this->name.'[border_visible]' , '',
'value', 'text',
@$this->element['border_visible']);
?></dd>
<dt><?php echo
JText::_('ITEM_BOX_ROUND_CORNER');?></dt>
<dd><?php
if(!isset($this->element['rounded_corners']))
$this->element['rounded_corners'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[rounded_corners]' , '',
'value', 'text',
@$this->element['rounded_corners']);
?></dd>
<dt><?php echo
JText::_('TEXT_CENTERED');?></dt>
<dd><?php
if(!isset($this->element['text_center']))
$this->element['text_center'] = '-1';
echo JHTML::_('hikaselect.radiolist', $arr,
$this->name.'[text_center]' , '', 'value',
'text', @$this->element['text_center']);
?></dd>
</dl>
</div>
<div class="hkc-lg-clear"></div>
<div class="hkc-xl-4 hkc-lg-6" data-block="layout"
data-block-value="list">
<h3><?php echo JText::_('PARAMS_FOR_LIST');
?></h3>
<dl class="hikam_options large">
<dt><?php echo
JText::_('UL_CLASS_NAME');?></dt>
<dd>
<input name="<?php echo $this->name;
?>[ul_class_name]" type="text" value="<?php echo
@$this->element['ul_class_name'];?>" />
</dd>
</dl>
</div>
<div style="clear:both"></div>
</div>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.switchPanel = function(id, name, type) {
var d = document, el = null;
if(type == 'layout') {
el = d.getElementById(id + '_columns');
if(el) {
var v = (name == 'table') ? 'none' : '';
el.style.display = v;
el = d.getElementById(id + '_columns_0');
if(el)
el.style.display = v;
}
}
var container = d.getElementById(id);
if(!container)
return;
for(var j = container.childNodes.length - 1; j >= 0; j--) {
e = container.childNodes[j];
if(e.nodeType && e.getAttribute &&
e.getAttribute('data-block') == type)
e.style.display = (e.getAttribute('data-block-value') == name)
? '' : 'none';
}
};
<?php echo $this->js; ?>
</script>
views/modulesmarket/view.html.php000064400000015137151160562450013217
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class modulesmarketViewmodulesmarket extends hikamarketView {
const ctrl = 'modules';
const name = 'MODULE';
const icon = 'module';
public function display($tpl = null, $params = null) {
$this->paramBase = HIKAMARKET_COMPONENT . '.' .
$this->getName();
$fct = $this->getLayout();
if(method_exists($this, $fct)) {
if($this->$fct($params) === false)
return false;
}
parent::display($tpl);
}
private function assignTypes() {
JHTML::_('behavior.modal');
$modules = array(
'colorType' => 'type.color',
'listType' => 'shop.type.list',
'contentType' => 'type.menu_content',
'layoutType' => 'type.menu_layout',
'orderdirType' => 'shop.type.orderdir',
'orderType' => 'shop.type.order',
'itemlayoutType' => 'type.itemlayout',
'popup' => 'shop.helper.popup',
);
foreach($modules as $k => $module) {
$element = hikamarket::get($module);
$this->assignRef($k, $element);
unset($element);
}
$this->toolbar = array(
'save',
'apply',
'cancel',
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-form')
);
if(!empty($this->toolbarJoomlaMenu)) {
array_unshift($this->toolbar, '|');
array_unshift($this->toolbar, $this->toolbarJoomlaMenu);
}
}
protected function getModuleData($cid) {
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
if(empty($cid)) {
$element = new stdClass();
$element->id = 0;
$element->module = 'mod_hikamarket';
$element->hikamarket_params =
$shopConfig->get('default_params');
$default = array(
'content_type' => 'vendor',
'link_to_vendor_page' => '1',
'border_visible' => true,
'layout_type' => 'inherit',
'columns' => '',
'limit' => '',
'random' => '-1',
'order_dir' => 'inherit',
'filter_type' => 2,
'vendor_order' => 'inherit',
'show_vote' => '-1',
'div_item_layout_type' => 'inherit',
'background_color' => '',
'margin' => '',
'border_visible' => '-1',
'rounded_corners' => '-1',
'text_center' => '-1',
'ul_class_name' => '',
);
foreach($default as $k => $v) {
$element->hikamarket_params[$k] = $v;
}
} else {
$modulesClass = hikamarket::get('class.modules');
$element = $modulesClass->get($cid);
if(!empty($element->content_type) &&
!in_array($element->content_type, array('vendor'))) {
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('HIKAM_MENU_TYPE_NOT_SUPPORTED'),
'error');
$url =
JRoute::_('index.php?option=com_modules&task=module.edit&id='.$cid,
false);
$app->redirect($url);
}
if(!isset($element->hikamarket_params['link_to_vendor_page']))
$element->hikamarket_params['link_to_vendor_page'] =
'1';
}
if(!isset($element->hikamarket_params['layout_type']))
$element->hikamarket_params['layout_type'] =
'div';
$element->hikamarket_params['content_type'] =
'vendor';
return $element;
}
public function form() {
$cid = hikamarket::getCID('id');
$element = $this->getModuleData($cid);
if(!empty($cid)) {
$task = 'edit';
$control = 'config[params_' . $cid . ']';
$url =
JRoute::_('index.php?option=com_modules&task=module.edit&id='.$element->id);
$this->toolbarJoomlaMenu = array(
'name' => 'link',
'icon' => 'upload',
'alt' => JText::_('JOOMLA_MODULE_OPTIONS'),
'url' => $url
);
} else {
$task = 'add';
$control = 'config[params_0]';
}
$this->assignRef('element', $element);
$this->assignRef('control', $control);
$this->assignTypes();
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl .
'&task=' . $task . '&cid[]=' . $cid);
}
public function options(&$params) {
$modules = array(
'colorType' => 'type.color',
'listType' => 'shop.type.list',
'contentType' => 'type.menu_content',
'layoutType' => 'type.menu_layout',
'orderdirType' => 'shop.type.orderdir',
'orderType' => 'shop.type.order',
'itemlayoutType' => 'type.itemlayout',
);
foreach($modules as $k => $module) {
$element = hikamarket::get($module);
$this->assignRef($k, $element);
unset($element);
}
$this->name = str_replace('[]', '',
$params->get('name'));
$this->id = str_replace(array('][', '[',
']'), array('_', '_', ''),
$this->name);
$this->element = $params->get('value');
$this->type = $params->get('type');
$this->menu = $params->get('menu');
$cid = $params->get('cid', 0);
if(empty($cid) || empty($this->element)) {
$menu = $this->getModuleData($cid);
$this->element = $menu->hikamarket_params;
}
}
public function listing() {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl);
$cfg = array(
'table' => 'joomla.modules',
'main_key' => 'module_id',
'order_sql_value' => 'a.id'
);
$pageInfo = $this->getPageInfo($cfg['order_sql_value']);
$filters = array(
'module = \'mod_hikamarket\'',
'published >= 0'
);
$searchMap = array(
'module',
'title'
);
$order = '';
$this->processFilters($filters, $order, $searchMap);
$query = 'FROM
'.hikamarket::table($cfg['table']).' AS a
'.$filters.$order;
$db->setQuery('SELECT * '.$query,
(int)$pageInfo->limit->start, (int)$pageInfo->limit->value);
$rows = $db->loadObjectList();
$this->assignRef('rows', $rows);
$db->setQuery('SELECT COUNT(*) '.$query);
$pageInfo->elements = new stdClass();
$pageInfo->elements->total = $db->loadResult();
$pageInfo->elements->page = count($rows);
$toggleClass = hikamarket::get('helper.toggle');
$this->assignRef('toggleClass', $toggleClass);
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$manage =
hikamarket::isAllowed($shopConfig->get('acl_modules_manage',
'all'));
$this->assignRef('manage', $manage);
$this->toolbar = array(
array('name' => 'addNew', 'display'
=> !HIKASHOP_J30 && $manage),
array('name' => 'editList','display'
=> $manage),
array('name' => 'deleteList', 'display'
=>
hikamarket::isAllowed($shopConfig->get('acl_modules_delete',
'all'))),
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-listing'),
'dashboard'
);
$this->getPagination();
$this->getOrdering('a.ordering');
}
}
views/ordermarket/index.html000064400000000032151160562450012215
0ustar00<html><body></body></html>views/ordermarket/tmpl/index.html000064400000000032151160562450013171
0ustar00<html><body></body></html>views/ordermarket/tmpl/show_order_back_show.php000064400000007561151160562450016116
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(empty($this->ajax)) {
?>
<fieldset class="adminform"
id="hikashop_order_field_market" style="<?php
if(empty($this->data)) { echo 'display:none;'; }
?>">
<?php
}
if(!empty($this->data)) {
?>
<legend><?php echo
JText::_('HIKAMARKET_ORDERS')?></legend>
<table style="width:100%;cell-spacing:1px;"
class="adminlist table table-striped">
<thead>
<tr>
<th><?php echo
JText::_('ORDER_NUMBER');?></th>
<th><?php echo
JText::_('HIKA_VENDOR');?></th>
<th><?php echo
JText::_('ORDER_STATUS');?></th>
<th><?php echo
JText::_('HIKASHOP_TOTAL');?></th>
<th><?php echo
JText::_('VENDOR_TOTAL');?></th>
<th style="width:1%"><?php echo
JText::_('VENDOR_PAID');?></th>
</tr>
</thead>
<tbody>
<?php
foreach($this->data as $data) {
$vendor_id = (int)$data->order_vendor_id;
if(empty($vendor_id)) $vendor_id = 1;
$paid = !empty($this->vendor_transactions[$vendor_id]) ? true :
(int)$data->order_vendor_paid;
if(!empty($this->vendor_transactions[ $vendor_id ])) {
foreach($this->vendor_transactions[ $vendor_id ] as $transaction) {
if(isset($transaction->order_transaction_paid) &&
empty($transaction->order_transaction_paid))
$paid = false;
}
}
?>
<tr>
<td>
<a href="<?php echo
hikamarket::completeLink('shop.order&task=edit&cid='.(int)$data->order_id);?>"><?php
echo $data->order_number;?></a>
/ <?php echo !empty($data->order_invoice_number) ?
$data->order_invoice_number : ' -'; ?>
</td>
<td><a href="<?php echo
hikamarket::completeLink('vendor&task=edit&cid='.(int)$data->order_vendor_id);?>"><?php
echo $this->escape($data->vendor_name); ?></a></td>
<td><?php echo
hikamarket::orderStatus($data->order_status); ?></td>
<td><?php echo
$this->currencyHelper->format($data->order_full_price,
$data->order_currency_id);?></td>
<td><?php
echo $this->currencyHelper->format($data->order_vendor_price,
$data->order_currency_id);
if(isset($data->order_vendor_price_with_refunds) &&
$data->order_vendor_price_with_refunds !== null) {
echo ' (' .
$this->currencyHelper->format($data->order_vendor_price_with_refunds,
$data->order_currency_id) . ')';
}
?></td>
<td style="text-align:center"><?php
if($paid)
echo '<i class="fa fa-check"></i>';
?></td>
</tr>
<?php
if(!empty($this->vendor_transactions[ $vendor_id ])) {
foreach($this->vendor_transactions[ $vendor_id ] as $transaction) {
?>
<tr>
<td><em><?php echo
JText::_('VENDOR_TRANSACTION'); ?></em></td>
<td><?php echo $this->escape($data->vendor_name);
?></td>
<td><?php echo
hikamarket::orderStatus($transaction->order_transaction_status);
?></td>
<td></td>
<td><?php
echo
$this->currencyHelper->format($transaction->order_transaction_price,
$transaction->order_transaction_currency_id);
?></td>
<td style="text-align:center"><?php
if(!empty($transaction->order_transaction_paid))
echo '<i class="fa fa-check"></i>';
?></td>
</tr>
<?php
}
}
}
?>
</tbody>
</table>
<?php
if(!empty($this->ajax)) {
?>
<script type="text/javascript">
var el = document.getElementById('hikashop_order_field_market');
if(el) el.style.display = '';
</script>
<?php
}
}
if(empty($this->ajax)) {
?>
</fieldset>
<script type="text/javascript">
window.Oby.registerAjax('hikashop.order_update', function(params)
{
if(params.el === undefined) return;
window.Oby.xRequest("<?php echo
hikamarket::completeLink('order&task=show&cid='.$this->order_id,
true, false, true); ?>", {update:
'hikashop_order_field_market'});
});
</script>
<?php
}
views/ordermarket/view.html.php000064400000004601151160562450012654
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class ordermarketViewOrdermarket extends hikamarketView {
const ctrl = 'order';
const name = 'HIKAMARKET_ORDERMARKET';
const icon = 'generic';
public function display($tpl = null, $params = null) {
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName();
$fct = $this->getLayout();
if(method_exists($this, $fct))
$this->$fct($params);
parent::display($tpl);
}
public function show_order_back_show($params = null) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$config = hikamarket::config();
$this->assignRef('config', $config);
$currencyHelper = hikamarket::get('shop.class.currency');
$this->assignRef('currencyHelper', $currencyHelper);
$data = null;
$vendor_transactions = array();
$order_id = 0;
if(!empty($params)) {
$order_id = (int)$params->get('order_id');
} else {
$order_id = hikamarket::getCID('order_id');
}
$ajax = (hikaInput::get()->getCmd('tmpl', '') ==
'component');
$this->assignRef('data', $data);
$this->assignRef('vendor_transactions',
$vendor_transactions);
$this->assignRef('order_id', $order_id);
$this->assignRef('ajax', $ajax);
if($order_id <= 0)
return;
$query = 'SELECT b.*, a.* '.
' FROM ' . hikamarket::table('shop.order') . '
AS a '.
' LEFT JOIN ' . hikamarket::table('vendor') . '
AS b ON a.order_vendor_id = b.vendor_id '.
' WHERE a.order_parent_id = ' . $order_id . ' '.
' ORDER BY b.vendor_id ASC, a.order_id ASC';
$db->setQuery($query);
$data = $db->loadObjectList();
$query = 'SELECT t.* '.
' FROM ' . hikamarket::table('order_transaction') .
' AS t '.
' WHERE t.order_id = ' . $order_id . '';
$db->setQuery($query);
$transactions =
$db->loadObjectList('order_transaction_id');
foreach($transactions as $k => $t) {
$vendor_id = isset($t->vendor_id) ? (int)$t->vendor_id :
(int)@$t->order_vendor_id;
if(empty($vendor_id))
$vendor_id = 1;
if(empty($vendor_transactions[$vendor_id]))
$vendor_transactions[$vendor_id] = array();
$vendor_transactions[ $vendor_id ][ $k ] = $t;
}
}
}
views/pluginsmarket/index.html000064400000000032151160562450012563
0ustar00<html><body></body></html>views/pluginsmarket/tmpl/form.php000064400000006674151160562450013240
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<div>
<form action="<?php echo
hikamarket::completeLink('plugins'); ?>"
method="post" name="adminForm" id="adminForm"
enctype="multipart/form-data">
<?php
if(!empty($this->plugin->pluginView)) {
$this->setLayout($this->plugin->pluginView);
echo $this->loadTemplate();
} else if(empty($this->plugin->noForm)) {
$type = $this->plugin_type;
$upType = strtoupper($type);
$plugin_name = $type . '_name';
$plugin_name_input = $plugin_name . '_input';
$plugin_images = $type . '_images';
?>
<input type="hidden" name="subtask"
value="<?php echo
hikaInput::get()->getCmd('subtask','');?>"/>
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
<table class="admintable table"
style="width:100%">
<tr>
<td style="width:50%;vertical-align:top">
<?php } else { ?>
<div class="row-fluid">
<div class="span6">
<?php } ?>
<fieldset class="adminform">
<legend><?php echo JText::_('MAIN_INFORMATION');
?></legend>
<table class="admintable">
<?php if($this->multiple_plugin) { ?>
<tr>
<td class="key"><label for="data[<?php
echo $type;?>][<?php echo $type;?>_name]"><?php echo
JText::_('HIKA_NAME');?></label></td>
<td>
<input type="text" name="data[<?php echo
$type;?>][<?php echo $type;?>_name]" value="<?php $n
= $type.'_name'; echo @$this->element->$n;
?>"/>
</td>
</tr>
<tr>
<td class="key"><label for="data[<?php
echo $type;?>][<?php echo $type;?>_published]"><?php
echo JText::_('HIKA_PUBLISHED');?></label></td>
<td>
<?php $n = $type.'_published'; echo
JHTML::_('hikaselect.booleanlist',
'data['.$type.']['.$type.'_published]' ,
'', @$this->element->$n); ?>
</td>
</tr>
<?php } else { ?>
<tr>
<td class="key"><label for="data[<?php
echo $type;?>][<?php echo $type;?>_name]"><?php echo
JText::_('HIKA_NAME');?></label></td>
<td><?php echo $this->plugin_name; ?><input
type="hidden" name="data[<?php echo $type;?>][<?php
echo $type; ?>_published]" value="1"/>
</td>
</tr>
<?php } ?>
</table>
</fieldset>
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
</td>
<td style="vertical-align:top">
<?php } else { ?>
</div>
<div class="span6">
<?php } ?>
<fieldset>
<legend><?php echo JText::_('PLUGIN_PARAMETERS');
?></legend>
<?php echo $this->content; ?>
</fieldset>
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
</td>
</tr>
</table>
<?php } else { ?>
</div>
</div>
<?php } ?>
<input type="hidden" name="data[<?php echo
$type;?>][<?php echo $type;?>_id]" value="<?php $n =
$type.'_id'; echo @$this->element->$n;?>"/>
<input type="hidden" name="data[<?php echo
$type;?>][<?php echo $type;?>_type]" value="<?php
echo $this->name;?>"/>
<input type="hidden" name="task"
value="save"/>
<?php
} else {
echo $this->content;
}
?>
<input type="hidden" name="name"
value="<?php echo $this->name;?>"/>
<input type="hidden" name="ctrl"
value="plugins" />
<input type="hidden" name="plugin_type"
value="<?php echo $this->plugin_type;?>" />
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
</div>
views/pluginsmarket/tmpl/index.html000064400000000032151160562450013537
0ustar00<html><body></body></html>views/pluginsmarket/tmpl/listing.php000064400000003064151160562450013734
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<table class="adminlist table table-striped table-hover"
style="cellspacing:1px">
<thead>
<tr>
<th class="title titlenum"><?php
echo JText::_( 'HIKA_NUM' );
?></th>
<th class="title"><?php
echo JText::_('HIKA_NAME');
?></th>
<th class="title titletoggle"><?php
echo JText::_('HIKA_ENABLED');
?></th>
<th class="title titleid"><?php
echo JText::_( 'ID' );
?></th>
</tr>
</thead>
<tbody>
<?php
$k = 0;
foreach($this->plugins as $i => &$row) {
$publishedid = 'enabled-' . $row->id;
?>
<tr class="row<?php echo $k;?>">
<td align="center"><?php
echo $i+1;
?></td>
<td><?php
if($this->manage) {
?><a href="<?php echo
hikamarket::completeLink('plugins&task=edit&name=' .
$row->element);?>"><?php
}
echo $row->name;
if($this->manage) {
?></a><?php
}
?></td>
<td align="center">
<?php
if($this->manage) {
echo $this->toggleClass->toggle($publishedid,
$row->published, 'plugins');
} else {
echo $this->toggleClass->display('activate',
$row->published);
}
?>
</td>
<td align="center"><?php
echo $row->id;
?></td>
</tr>
<?php
$k = 1-$k;
}
?>
</tbody>
</table>
views/pluginsmarket/tmpl/sublisting.php000064400000006637151160562450014457
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><table class="adminlist table table-striped table-hover"
cellpadding="1">
<thead>
<tr>
<th class="title titlenum"><?php echo
JText::_('HIKA_NUM');?></th>
<th class="title titlebox">
<input type="checkbox" name="toggle"
value="" onclick="hikashop.checkAll(this);" />
</th>
<th class="title"><?php echo
JText::_('HIKA_NAME');?></th>
<th class="title titleorder"
style="width:10%;"><?php
echo JText::_( 'HIKA_ORDER' );
if(@$this->data['order']->ordering)
echo JHTML::_('grid.order',
$this->data['plugins'] );
?></th>
<th class="title" style="width:2%;"><?php
echo JText::_('HIKA_DELETE');?></th>
<th class="title" style="width:2%;"><?php
echo JText::_('HIKA_PUBLISHED');?></th>
</tr>
</thead>
<tbody>
<?php
$p_id = $this->plugin_type.'_id';
$p_name = $this->plugin_type.'_name';
$p_order = $this->plugin_type.'_ordering';
$p_published = $this->plugin_type.'_published';
$k = 0;
$i = 0;
$a = count($this->elements);
$plugins = array();
if(!empty($this->elements))
$plugins = array_values($this->elements);
foreach($plugins as $plugin){
$published_id = $this->plugin_type.'_published-' .
$plugin->$p_id;
$id = $this->plugin_type.'_' . $plugin->$p_id;
?>
<tr class="row<?php echo $k;?>" id="<?php echo
$id;?>">
<td align="center"><?php
echo $i+1;
?></td>
<td align="center"><?php
echo JHTML::_('grid.id', $i, $plugin->$p_id );
?></td>
<td>
<a href="<?php echo
hikamarket::completeLink('plugins&plugin_type='.$this->plugin_type.'&task=edit&name='.$this->data['pluginName'].'&subtask='.$this->plugin_type.'_edit&'.$p_id.'='.$plugin->$p_id);?>"><?php
echo $plugin->$p_name;?></a>
</td>
<td class="order">
<span><?php
echo $this->data['pagination']->orderUpIcon(
$i,
$this->data['order']->reverse XOR
($plugin->$p_order >= @$plugins[$i-1]->$p_order),
$this->data['order']->orderUp,
'Move Up',
$this->data['order']->ordering
);
?></span>
<span><?php
echo $this->data['pagination']->orderDownIcon(
$i,
$a,
$this->data['order']->reverse XOR
($plugin->$p_order <= @$plugins[$i+1]->$p_order),
$this->data['order']->orderDown,
'Move Down',
$this->data['order']->ordering
);
?></span>
<input type="text" name="order[]"
size="5" <?php
if(!$this->data['order']->ordering) echo
'disabled="disabled"'; ?> value="<?php echo
$plugin->$p_order; ?>" class="text_area"
style="text-align: center" />
</td>
<td align="center">
<span class="spanloading"><?php
echo $this->data['toggleClass']->delete($id,
$this->name.'-'.$plugin->$p_id, $this->plugin_type,
true);
?></span>
</td>
<td align="center"><?php
echo $this->data['toggleClass']->toggle($published_id,
(int)$plugin->$p_published, $this->plugin_type);
?></td>
</tr>
<?php
$k = 1-$k;
$i++;
}
?>
</tbody>
</table>
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="subtask"
value="copy"/>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT;?>" />
<input type="hidden" name="task"
value=""/>
views/pluginsmarket/view.html.php000064400000012763151160562450013232
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class pluginsmarketViewpluginsmarket extends hikamarketView {
const ctrl = 'plugins';
const name = 'PLUGINS';
const icon = 'puzzle-piece';
public function display($tpl = null) {
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName();
$function = $this->getLayout();
if(method_exists($this,$function)) {
if($this->$function())
return false;
}
parent::display($tpl);
}
public function listing() {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl);
$config = hikamarket::config();
$this->assignRef('config',$config);
$toggleClass = hikamarket::get('helper.toggle');
$this->assignRef('toggleClass', $toggleClass);
$manage =
hikamarket::isAllowed($config->get('acl_plugins_manage','all'));
$this->assignRef('manage', $manage);
$type =
$app->getUserStateFromRequest(HIKAMARKET_COMPONENT.'.plugin_type',
'plugin_type', 'generator');
$group = 'hikamarket'; //.$type;
$query = 'SELECT extension_id as id, enabled as published, name,
element FROM ' . hikamarket::table('extensions', false) .
' WHERE `folder` = ' . $db->Quote($group) . ' AND
type=\'plugin\' ORDER BY enabled DESC, ordering ASC';
$db->setQuery($query);
$plugins = $db->loadObjectList();
$this->assignRef('plugins', $plugins);
$this->assignRef('plugin_type', $type);
$toolbar = JToolBar::getInstance('toolbar');
JToolBarHelper::divider();
$toolbar->appendButton('Pophelp', self::ctrl .
'-listing');
$toolbar->appendButton('Link', HIKAMARKET_LNAME,
JText::_('HIKAMARKET_CPANEL'),
hikamarket::completeLink('dashboard'));
}
public function form() {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$config = hikamarket::config();
$task = hikaInput::get()->getString('task', '');
$this->content = '';
$this->plugin_name = hikaInput::get()->getCmd('name',
'');
if(empty($this->plugin_name)) {
return false;
}
$db = JFactory::getDBO();
$plugin = hikamarket::import('hikamarket',
$this->plugin_name);
if(!$plugin || !method_exists($plugin, 'type')) {
$pluginClass = hikamarket::get('class.plugins');
$plugin = $pluginClass->getByName('hikamarket',
$this->plugin_name);
if(!empty($plugin) && (!empty($plugin->id) ||
!empty($plugin->extension_id))) {
$url =
'index.php?option=com_plugins&task=plugin.edit&extension_id='
. $plugin->extension_id;
$app->redirect($url);
}
return false;
}
$this->plugin_type = $plugin->type();
$query = '';
if(in_array($this->plugin_type,
array('generator','consumer'))){
$query = 'SELECT * FROM ' .
hikamarket::table($this->plugin_type).' WHERE ' .
$this->plugin_type . '_type =
'.$db->Quote($this->plugin_name);
$query .= ' ORDER BY ' . $this->plugin_type .
'_ordering ASC';
}
if(empty($query))
return false;
$db->setQuery($query);
$elements =
$db->loadObjectList($this->plugin_type.'_id');
if(!empty($elements)){
$params_name = $this->plugin_type.'_params';
foreach($elements as $k => $el){
if(!empty($el->$params_name)){
$elements[$k]->$params_name =
hikamarket::unserialize($el->$params_name);
}
}
}
$multiple_plugin = false;
if(method_exists($plugin, 'isMultiple')) {
$multiple_plugin = $plugin->isMultiple();
}
$function = 'onPluginConfiguration';
$ctrl =
'&plugin_type='.$this->plugin_type.'&task='.$task.'&name='.$this->plugin_name;
if($multiple_plugin === true) {
$subtask =
hikaInput::get()->getCmd('subtask','');
$ctrl .= '&subtask='.$subtask;
if(empty($subtask)) {
$function = 'onPluginMultipleConfiguration';
}
$cid = hikamarket::getCID($this->plugin_type.'_id');
if(isset($elements[$cid])){
$this->assignRef('element', $elements[$cid]);
$ctrl .=
'&'.$this->plugin_type.'_id='.$cid;
}
} else {
if(!empty($elements)) {
$this->assignRef('element', reset($elements));
}
}
$this->assignRef('elements', $elements);
if(method_exists($plugin, $function)) {
ob_start();
$plugin->$function($elements);
$this->content = ob_get_clean();
$this->data = $plugin->getProperties();
}
$this->assignRef('name', $this->plugin_name);
$this->assignRef('plugin', $plugin);
$this->assignRef('multiple_plugin', $multiple_plugin);
$this->assignRef('content', $this->content);
$this->assignRef('plugin_type', $this->plugin_type);
if(empty($plugin->pluginView)) {
$this->content .= $this->loadPluginTemplate(@$plugin->view);
}
hikamarket::setTitle(JText::_('HIKAM_PLUGIN').'
'.$this->name, self::icon, self::ctrl.$ctrl);
return true;
}
private function loadPluginTemplate($view = '') {
static $previousType = '';
$app = JFactory::getApplication();
$this->subview = '';
if(!empty($view)) {
$this->subview = '_' . $view;
}
$name = $this->plugin_name . '_configuration' .
$this->subview . '.php';
$path = JPATH_THEMES . DS . $app->getTemplate() . DS .
'hikamarket' . DS . $name;
if(!file_exists($path)) {
$path = JPATH_PLUGINS . DS . 'hikamarket' . DS .
$this->plugin_name . DS . $name;
if(!file_exists($path))
return '';
}
ob_start();
require($path);
return ob_get_clean();
}
}
views/productmarket/index.html000064400000000032151160562450012562
0ustar00<html><body></body></html>views/productmarket/tmpl/confirm_action.php000064400000010405151160562450015251
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><form action="<?php echo
hikamarket::completeLink('product&task='.$this->action);
?>" method="post" name="adminForm"
id="adminForm">
<?php
switch($this->action) {
case 'approve':
hikamarket::display(JText::_('HIKAM_CONFIRM_APPROVE_PRODUCTS'),
'success', false, false);
break;
case 'decline':
hikamarket::display(JText::_('HIKAM_CONFIRM_DECLINE_PRODUCTS'),
'error', false, false);
break;
case 'remove':
hikamarket::display(JText::_('HIKAM_CONFIRM_DELETE_PRODUCTS'),
'error', false, false);
break;
}
?>
<div class="hikashop_backend_tile_edition hk-row-fluid">
<?php
$image_options = array(
'default' => true,
'forcesize' =>
$this->config->get('image_force_size', true),
'scale' =>
$this->config->get('image_scale_mode', 'inside')
);
foreach($this->products as $product) {
?>
<div class="hkc-xl-4 hkc-md-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('PRODUCT'); ?> (<?php echo
(int)$product->product_id; ?>)</div>
<div class="product_stat_img" style="float:left;
margin: 5px;"><?php
$img = $this->imageHelper->getThumbnail(@$product->file_path,
array('width' => 50, 'height' => 50),
$image_options);
if($img->success) {
$attributes = '';
if($img->external)
$attributes = ' width="'.$img->req_width.'"
height="'.$img->req_height.'"';
echo '<img class="hikashop_product_image"
title="'.$this->escape(@$product->file_description).'"
alt="'.$this->escape(@$product->file_name).'"
src="'.$img->url.'"'.$attributes.'/>';
}
?></div>
<h4><?php echo $product->product_name; ?></h4>
<label><input type="checkbox" name="cid[]"
value="<?php echo (int)$product->product_id; ?>"
checked="checked"/> <?php echo $product->product_code;
?></label>
<div style="clear:both"></div>
<dl class="hika_options">
<dt><?php echo JText::_('HIKA_VENDOR');
?></dt>
<dd><?php
if(empty($product->product_vendor_id))
echo
'<em>'.JText::_('NO_VENDOR').'</em>';
else if(!empty($product->vendor_name))
echo $this->escape($product->vendor_name);
else
echo '<em>'.JText::_('HIKA_VENDOR').'
'.(int)$product->product_vendor_id.'</em>';
?></dd>
<?php
if(!empty($this->extra_columns)) {
foreach($this->extra_columns as $colName => $column) {
?>
<dt><?php echo (is_array($column) &&
isset($column['key'])) ? $column['name'] : $column;
?></dt>
<dd class="hikamarket_product_extra_<?php echo
$colName;?>_value"><?php
if(is_array($column) && isset($column['key']))
echo $product->{ $column['key'] };
else
echo $product->$colName;
?></dd>
<?php
}
}
?>
</dl>
</div></div>
<?php
}
?>
</div>
<?php
if(in_array($this->action, array('approve',
'decline'))) {
?>
<div class="hikashop_backend_tile_edition hk-row-fluid">
<div class="hkc-md-12 hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('HIKAM_EMAIL_NOTIFICATION'); ?></div>
<dl class="hika_options">
<dt><?php echo JText::_('HIKAM_SEND_NOTIFICATION');
?></dt>
<dd>
<label><input type="checkbox"
name="data[notify][send]" value="1"
checked="checked"/> <?php echo
JText::_('NOTIFY_VENDOR'); ?></label>
</dd>
<dt><?php echo JText::_('MESSAGE'); ?></dt>
<dd>
<textarea name="data[notify][msg]" cols="60"
rows="6" style="width:100%"></textarea>
</dd>
</dl>
</div></div>
</div>
<?php
}
?>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="<?php echo $this->action; ?>" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="Itemid"
value="<?php echo $this->Itemid; ?>" />
<input type="hidden" name="boxchecked"
value="<?php echo count($this->products); ?>" />
<input type="hidden" name="confirmation"
value="<?php echo $this->confirmation; ?>" />
<input type="hidden" name="redirect"
value="<?php echo
hikaInput::get()->getCmd('redirect'); ?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/productmarket/tmpl/index.html000064400000000032151160562450013536
0ustar00<html><body></body></html>views/productmarket/tmpl/shop_block.php000064400000012456151160562450014412
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(hikamarket::level(1) && $this->product_type !=
'template') {
?>
<div class="hkc-xl-8 hkc-lg-12 hikashop_product_block
hikashop_product_edit_vendorfees"><div>
<div class="hikashop_product_part_title
hikashop_product_edit_vendorfees_title"><?php echo
JText::_('VENDOR_FEES');?></div>
<table class="adminlist table table-striped table-hover"
width="100%">
<thead>
<tr>
<th class="title"><?php echo
JText::_('CURRENCY');?></th>
<th class="title" style="width:10%"><?php
echo hikamarket::tooltip(JText::_('MINIMUM_QUANTITY'),
'', '', JText::_('MIN_QTY'), '',
0);
?></th>
<th class="title" style="width:10%"><?php
echo JText::_('HIKAM_MINIMUM_PRICE');?></th>
<th class="title"><?php echo
JText::_('FLAT_FEE');?></th>
<th class="title"><?php echo
JText::_('FIXED_FEE');?></th>
<th class="title"><?php echo
JText::_('PERCENT_FEE');?></th>
<th class="title" style="width:8%">
<button class="btn" style="margin:0px;"
type="button" onclick="return
marketAddVendorFee('<?php echo $this->product_type;
?>');">
<img src="<?php echo HIKASHOP_IMAGES;?>add.png"
alt="" style="vertical-align:middle;"><?php echo
JText::_('ADD');?>
</button>
</th>
</tr>
</thead>
<tbody id="hikamarket_vendor_fees_<?php echo
$this->product_type; ?>">
<?php
$k = 0;
$cpt = 0;
if(!empty($this->data)) {
foreach($this->data as $i => $fee) {
?>
<tr class="row<?php echo $k;?>">
<td class="hika_currency"><?php
echo
@$this->currencyType->display('market[product_fee]['.$this->product_type.']['.$i.'][currency]',
@$fee->fee_currency_id);
?></td>
<td class="hika_qty">
<input size="3" type="text"
name="market[product_fee][<?php echo $this->product_type;
?>][<?php echo $i;?>][quantity]" value="<?php echo
@$fee->fee_min_quantity;?>" />
</td>
<td class="hika_price">
<input size="5" type="text"
name="market[product_fee][<?php echo $this->product_type;
?>][<?php echo $i;?>][min_price]" value="<?php echo
@$fee->fee_min_price;?>" />
</td>
<td class="hika_price">
<input type="hidden"
name="market[product_fee][<?php echo $this->product_type;
?>][<?php echo $i;?>][id]" value="<?php echo
$fee->fee_id;?>" />
<input size="6" type="text"
name="market[product_fee][<?php echo $this->product_type;
?>][<?php echo $i;?>][value]" value="<?php echo
@$fee->fee_value;?>" />
</td>
<td class="hika_price">
<input size="6" type="text"
name="market[product_fee][<?php echo $this->product_type;
?>][<?php echo $i;?>][fixed]" value="<?php echo
@$fee->fee_fixed;?>" />
</td>
<td class="hika_price">
<input size="4" type="text"
name="market[product_fee][<?php echo $this->product_type;
?>][<?php echo $i;?>][percent]" value="<?php echo
number_format((float)@$fee->fee_percent, 2);?>" />%
</td>
<td align="center">
<a href="#"
onclick="window.hikamarket.deleteRow(this); return
false;"><img src="<?php echo
HIKASHOP_IMAGES;?>delete.png" alt="-"/></a>
</td>
</tr>
<?php
$k = 1 - $k;
$cpt = $i;
}
$cpt++;
}
?>
<tr class="row<?php echo $k;?>"
style="display:none" id="hikamarket_tpl_product_fee_<?php
echo $this->product_type; ?>">
<td class="hika_currency"><?php echo
@$this->currencyType->display('{input_fee_currency}',
0);?></td>
<td class="hika_qty"><input size="3"
type="text" name="{input_fee_quantity}"
value="" /></td>
<td class="hika_price"><input size="5"
type="text" name="{input_fee_min_price}"
value="" /></td>
<td class="hika_price">
<input type="hidden" name="{input_fee_id}"
value="" />
<input size="6" type="text"
name="{input_fee_value}" value="" />
</td>
<td class="hika_price"><input size="6"
type="text" name="{input_fee_fixed}" value=""
/></td>
<td class="hika_price"><input size="4"
type="text" name="{input_fee_percent}"
value="" />%</td>
<td align="center"><a href="#"
onclick="window.hikamarket.deleteRow(this); return
false;"><img src="<?php echo
HIKASHOP_IMAGES;?>delete.png"
alt="-"/></a></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
var hikamarket_product_fee_cpt = <?php echo $cpt;?>;
function marketAddVendorFee(type){
var d = document,
tbody = d.getElementById('hikamarket_vendor_fees_' + type),
cpt = hikamarket_product_fee_cpt,
htmlblocks = {
input_fee_id:
"market[product_fee]["+type+"]["+cpt+"][id]",
input_fee_value:
"market[product_fee]["+type+"]["+cpt+"][value]",
input_fee_currency:
"market[product_fee]["+type+"]["+cpt+"][currency]",
input_fee_percent:
"market[product_fee]["+type+"]["+cpt+"][percent]",
input_fee_quantity:
"market[product_fee]["+type+"]["+cpt+"][quantity]",
input_fee_min_price:
"market[product_fee]["+type+"]["+cpt+"][min_price]",
input_fee_fixed:
"market[product_fee]["+type+"]["+cpt+"][fixed]"
};
window.hikamarket.dupRow('hikamarket_tpl_product_fee_' + type,
htmlblocks, "market_product_fee_" + type + "_" + cpt);
hikamarket_product_fee_cpt++;
return false;
}
</script>
</div></div>
<input type="hidden" name="market[form]"
value="1"/>
<?php
}
views/productmarket/tmpl/shop_form.php000064400000001303151160562450014250
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!hikamarket::level(1) || $this->product_type ==
'template')
return;
$type = 'product';
if($this->product_type == 'variant')
$type = 'variant';
echo $this->nameboxType->display(
'data['.$type.'][product_vendor_id]',
(int)$this->product_vendor_id,
hikamarketNameboxType::NAMEBOX_SINGLE,
'vendor',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>'
)
);
views/productmarket/tmpl/waitingapproval.php000064400000024366151160562450015501
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<div id="hikamarket_product_listing">
<form action="<?php echo
hikamarket::completeLink('product&task=waitingapproval');
?>" method="post" name="adminForm"
id="adminForm">
<?php if(!HIKASHOP_BACK_RESPONSIVE) { ?>
<table class="hikam_filter">
<tr>
<td width="100%">
<?php echo JText::_('FILTER'); ?>:
<input type="text" name="search"
id="hikamarket_products_listing_search" value="<?php echo
$this->escape($this->pageInfo->search);?>"
class="inputbox"/>
<button class="btn"
onclick="this.form.submit();"><?php echo
JText::_('GO'); ?></button>
<button class="btn"
onclick="document.getElementById('hikamarket_products_listing_search').value='';this.form.submit();"><?php
echo JText::_('RESET'); ?></button>
</td>
<td nowrap="nowrap">
<?php } else { ?>
<div class="row-fluid">
<div class="span7">
<div class="input-prepend input-append">
<span class="add-on"><i
class="icon-filter"></i></span>
<input type="text" name="search"
id="hikamarket_products_listing_search" value="<?php echo
$this->escape($this->pageInfo->search);?>"
class="inputbox"/>
<button class="btn"
onclick="this.form.submit();"><i
class="icon-search"></i></button>
<button class="btn"
onclick="document.getElementById('hikamarket_products_listing_search').value='';this.form.submit();"><i
class="icon-remove"></i></button>
</div>
</div>
<div class="span5">
<div class="expand-filters"
style="width:auto;float:right">
<?php }
if(!empty($this->vendorType))
echo $this->vendorType->display('filter_vendors',
@$this->pageInfo->filter->vendors);
if(!isset($this->pageInfo->filter->published))
$this->pageInfo->filter->published = -1;
$values = array(
-1 => JText::_('HIKA_ALL'),
1 => JText::_('HIKA_PUBLISHED'),
0 => JText::_('HIKA_UNPUBLISHED'),
);
echo JHTML::_('select.genericlist', $values,
'filter_published',
'onchange="this.form.submit();"', 'value',
'text', $this->pageInfo->filter->published);
if(!HIKASHOP_BACK_RESPONSIVE) { ?>
</td>
</tr>
</table>
<?php } else {?>
</div>
<div style="clear:both"></div>
</div>
</div>
<?php } ?>
<?php
$cols = 9;
?>
<table class="adminlist pad5 table table-striped
table-hover">
<thead>
<tr>
<th class="hikamarket_product_num_title title
titlenum"><?php
echo JText::_('HIKA_NUM'); //
JHTML::_('grid.sort', JText::_('HIKA_NUM'),
'product.product_id',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_vendor_select_title title
titlebox">
<input type="checkbox" name="toggle"
value="" onclick="hikashop.checkAll(this);" />
</th>
<th class="hikamarket_product_image_title
title"><?php
echo JText::_('HIKA_IMAGE');
?></th>
<th class="hikamarket_product_name_title
title"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_NAME'),
'product.product_name',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
echo ' / ' . JHTML::_('grid.sort',
JText::_('PRODUCT_CODE'), 'product.product_code',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<?php if(hikamarket::level(1)) { $cols++; ?>
<th class="hikamarket_product_vendor"><?php
echo JText::_('HIKA_VENDOR');
?></th>
<?php } ?>
<th class="hikamarket_product_quantity_title
title"><?php
echo JHTML::_('grid.sort',
JText::_('PRODUCT_QUANTITY'),
'product.product_quantity',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_product_price_title
title"><?php
echo JText::_('PRODUCT_PRICE');
?></th>
<?php
if(!empty($this->fields)) {
foreach($this->fields as $fieldName => $oneExtraField) {
$cols++;
?>
<th class="hikamarket_product_custom_<?php echo
$fieldName;?>_title title"><?php
echo $this->fieldsClass->getFieldName($oneExtraField);
?></th>
<?php
}
}
?>
<?php
if(!empty($this->extra_columns)) {
foreach($this->extra_columns as $colName => $column) {
$cols++;
?>
<th class="hikamarket_product_extra_<?php echo
$colName;?>_title title"><?php
echo (is_array($column) && isset($column['key'])) ?
$column['name'] : $column;
?></th>
<?php
}
}
?>
<th class="hikamarket_product_actions_title
titlenum"><?php
echo JText::_('HIKAM_APPROVE');
?></th>
<?php if(hikamarket::level(1)) { ?>
<th class="hikamarket_product_actions_title
titlenum"><?php
echo JText::_('HIKAM_DECLINE');
?></th>
<?php } else { ?>
<th class="hikamarket_product_actions_title
titlenum"><?php
echo JText::_('HIKA_DELETE');
?></th>
<?php } ?>
<th class="hikamarket_product_id_title title"><?php
echo JHTML::_('grid.sort', JText::_('ID'),
'product.product_id',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="<?php echo $cols ;?>">
<?php echo $this->pagination->getListFooter(); ?>
<?php echo $this->pagination->getResultsCounter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php
$multivendor = hikamarket::level(1);
$k = 0;
$i = 0;
foreach($this->products as $product) {
$publishedid =
'product_published-'.(int)$product->product_id;
$rowId = 'market_product_'.(int)$product->product_id;
$url =
hikamarket::completeLink('shop.product&task=edit&cid='.(int)$product->product_id.'&cancel_redirect='.$this->cancelUrl);
?>
<tr class="row<?php echo $k; ?>" id="<?php
echo $rowId; ?>">
<td class="hikamarket_product_num_value"
align="center">
<?php
if( !isset($this->embbed) )
echo $this->pagination->getRowOffset($i);
else
echo ($i+1);
?>
</td>
<td class="hikamarket_vendor_select_value"><?php
echo JHTML::_('grid.id', $i, $product->product_id );
?></td>
<td class="hikamarket_product_name_value"><?php
$thumb =
$this->imageHelper->getThumbnail(@$product->file_path,
array(50,50), array('default' => 1, 'forcesize'
=> 1));
if(!empty($thumb->path) && empty($thumb->external))
echo '<a href="'.$url.'"><img
src="'. $this->imageHelper->uploadFolder_url .
str_replace('\\', '/', $thumb->path).'"
alt=""/></a>';
else if(!empty($thumb->path) && !empty($thumb->url))
echo '<a href="'.$url.'"><img
src="'. $thumb->url.'" alt=""
width="50" height="50"/></a>';
?></td>
<td class="hikamarket_product_name_value">
<a href="<?php echo $url; ?>"><?php
if(empty($product->product_name) &&
!empty($product->parent_product_name))
echo
'<em>'.$this->escape($product->parent_product_name,
true).'</em>';
else if(empty($product->product_name))
echo
'<em>'.JText::_('HIKAM_NO_NAME').'</em>';
else
echo $this->escape($product->product_name, true);
?></a>
<div class="hikamarket_product_code_value">
<a href="<?php echo $url; ?>"><?php echo
$this->escape($product->product_code, true); ?></a>
<?php echo
$this->toggleHelper->display('published',
$product->product_published); ?>
</div>
</td>
<?php if($multivendor) { ?>
<td><?php
if(!empty($product->product_vendor_id) &&
(int)$product->product_vendor_id > 1) {
$vendor_id = (int)$product->product_vendor_id;
?><a href="<?php echo
hikamarket::completeLink('vendor&task=edit&cid='.$vendor_id);
?>"><?php echo $this->vendors[$vendor_id]->vendor_name;
?></a><?php
}
?></td>
<?php } ?>
<td class="hikamarket_product_quantity_value"><?php
echo ($product->product_quantity >= 0) ?
$product->product_quantity : JText::_('UNLIMITED');
?></td>
<td class="hikamarket_product_price_value"><?php
echo $this->currencyHelper->displayPrices($product->prices);
?></td>
<?php
if(!empty($this->fields)) {
foreach($this->fields as $fieldName => $oneExtraField) {
?>
<td class="hikamarket_product_custom_<?php echo
$fieldName;?>_value"><?php
echo $this->fieldsClass->show($oneExtraField,
$product->$fieldName);
?></td>
<?php
}
}
?>
<?php
if(!empty($this->extra_columns)) {
foreach($this->extra_columns as $colName => $column) {
?>
<td class="hikamarket_product_extra_<?php echo
$colName;?>_value"><?php
if(is_array($column) && isset($column['key']))
echo $product->{ $column['key'] };
else
echo $product->$colName;
?></td>
<?php
}
}
?>
<td class="hikamarket_product_actions_value"
style="text-align:center">
<a href="<?php echo
hikamarket::completeLink('product&task=approve&cid='.(int)$product->product_id.'&redirect=waitingapproval')
?>"><img src="<?php echo HIKAMARKET_IMAGES;
?>icon-16/save.png" alt="approve" /></a>
</td>
<?php if($multivendor) { ?>
<td class="hikamarket_product_actions_value"
style="text-align:center">
<a href="<?php echo
hikamarket::completeLink('product&task=decline&cid='.(int)$product->product_id.'&redirect=waitingapproval')
?>"><img src="<?php echo HIKAMARKET_IMAGES;
?>icon-16/unpublish.png" alt="decline" /></a>
</td>
<?php } else { ?>
<td class="hikamarket_product_actions_value"
style="text-align:center"><?php
echo $this->toggleHelper->delete($rowId,
(int)$product->product_id, 'productmarket', true);
?></td>
<?php } ?>
<td class="hikamarket_product_id_value"
align="center"><?php
echo (int)$product->product_id;
?></td>
</tr>
<?php
$i++;
$k = 1 - $k;
}
?>
</table>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="waitingapproval" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="Itemid"
value="<?php echo $this->Itemid; ?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo
$this->pageInfo->filter->order->value; ?>" />
<input type="hidden" name="filter_order_Dir"
value="<?php echo $this->pageInfo->filter->order->dir;
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
</div>
views/productmarket/view.html.php000064400000030731151160562450013224
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class productmarketViewProductmarket extends hikamarketView {
const ctrl = 'product';
const name = 'HIKAMARKET_PRODUCTMARKET';
const icon = 'thumbs-up';
protected $triggerView = true;
public function display($tpl = null, $params = null) {
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName();
$fct = $this->getLayout();
$ret = true;
if(method_exists($this, $fct))
$ret = $this->$fct($params);
if($ret !== false)
parent::display($tpl);
}
public function shop_block($params = null) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$config = hikamarket::config();
$this->assignRef('config', $config);
$this->loadRef(array(
'currencyClass' => 'shop.class.currency',
'currencyType' => 'shop.type.currency',
'popup' => 'shop.helper.popup'
));
$data = null;
$product_id = 0;
$product_type = 'main';
if(!empty($params)) {
$product_id = (int)$params->get('product_id');
$product_type = $params->get('product_type');
}
if(hikamarket::level(1) && $product_id > 0) {
$feeClass = hikamarket::get('class.fee');
$data = $feeClass->getProduct($product_id);
foreach($data as $k => $v) {
if($v->fee_target_id != $product_id)
unset($data[$k]);
}
}
$this->assignRef('data', $data);
$this->assignRef('product_id', $product_id);
$this->assignRef('product_type', $product_type);
}
public function shop_form($params = null) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$config = hikamarket::config();
$this->assignRef('config', $config);
$this->loadRef(array(
'nameboxType' => 'type.namebox',
'popup' => 'shop.helper.popup'
));
$product_type = 'main';
$product_id = 0;
$product_vendor_id = 0;
if(!empty($params)) {
$product_id = (int)$params->get('product_id');
$product_vendor_id =
(int)$params->get('product_vendor_id');
$product_type = $params->get('product_type');
}
$this->assignRef('product_id', $product_id);
$this->assignRef('product_vendor_id', $product_vendor_id);
$this->assignRef('product_type', $product_type);
}
public function waitingapproval() {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$ctrl = '';
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName().'.waitingapproval';
hikamarket::setTitle(JText::_('WAITING_APPROVAL_LIST'),
self::icon, self::ctrl.'&task=waitingapproval');
$config = hikamarket::config();
$this->assignRef('config', $config);
$this->loadRef(array(
'toggleHelper' => 'helper.toggle',
'imageHelper' => 'shop.helper.image',
'currencyHelper' => 'shop.class.currency',
'childdisplayType' => 'shop.type.childdisplay',
'shopCategoryType' => 'type.shop_category',
));
$manage = hikamarket::acl('product/edit');
$this->assignRef('manage', $manage);
$product_action_delete = hikamarket::acl('product/delete');
$this->assignRef('product_action_delete',
$product_action_delete);
$cancelUrl =
urlencode(base64_encode(hikamarket::completeLink('product&task=waitingapproval')));
$this->assignRef('cancelUrl', $cancelUrl);
global $Itemid;
$url_itemid = '';
if(!empty($Itemid))
$url_itemid = '&Itemid='.$Itemid;
$this->assignRef('Itemid', $Itemid);
$cfg = array(
'table' => 'shop.product',
'main_key' => 'product_id',
'order_sql_value' => 'product.product_id'
);
$vendorType = hikamarket::get('type.filter_vendor');
$this->assignRef('vendorType', $vendorType);
$default_sort_value =
trim($config->get('product_listing_default_sort_value',
$cfg['order_sql_value']));
if(empty($default_sort_value))
$default_sort_value = $cfg['order_sql_value'];
$default_sort_dir =
trim($config->get('product_listing_default_sort_dir',
'asc'));
if(empty($default_sort_dir) || !in_array($default_sort_dir,
array('asc', 'desc')))
$default_sort_dir = 'asc';
$listing_filters = array(
'vendors' => -1,
'published' => -1,
);
$pageInfo = $this->getPageInfo($default_sort_value, $default_sort_dir,
$listing_filters);
$filters = array(
'main' => 'product.product_parent_id = 0',
'product_type' => 'product.product_type =
\'waiting_approval\''
);
$searchMap = array(
'product.product_name',
'product.product_description',
'product.product_id',
'product.product_code'
);
$select = array();
$join = '';
if($pageInfo->filter->vendors >= 0) {
$select['parent_product_name'] =
'parent_product.product_name as parent_product_name';
$join = ' LEFT JOIN
'.hikamarket::table('shop.product').' AS parent_product
ON product.product_parent_id = parent_product.product_id AND
parent_product.product_vendor_id != product.product_vendor_id AND
product.product_vendor_id > 0 ';
}
if($pageInfo->filter->published >= 0) {
$filters['published'] = 'product.product_published =
' . ($pageInfo->filter->published ? '1' :
'0');
}
$fieldsClass = hikamarket::get('shop.class.field');
$categories = array();
$fields = $fieldsClass->getData('backend_listing',
'product', false, $categories);
$this->assignRef('fields', $fields);
$this->assignRef('fieldsClass', $fieldsClass);
foreach($fields as $fieldName => $oneExtraField) {
$searchMap[] = 'product.' . $fieldName;
}
if($pageInfo->filter->vendors == 0) {
$filters['main'] .= ' OR parent_product.product_id != 0 )
AND (product.product_vendor_id IN (0, 1)';
} elseif( $pageInfo->filter->vendors > 1) {
$filters['main'] .= ' OR parent_product.product_id != 0 )
AND (product.product_vendor_id =
'.(int)$pageInfo->filter->vendors;
}
$order = '';
$this->processFilters($filters, $order, $searchMap,
array('product.'));
$query = 'FROM
'.hikamarket::table($cfg['table']).' AS product
'.$join.$filters.$order;
$db->setQuery('SELECT DISTINCT product.*' .
(empty($select)?'':',') . implode(',',
$select) . ' ' . $query, (int)$pageInfo->limit->start,
(int)$pageInfo->limit->value);
$rows = $db->loadObjectList('product_id');
$products = array();
$vendor_ids = array();
foreach($rows as &$product) {
$product->prices = array();
$product->file_name = $product->product_name;
if(!isset($products[$product->product_id])) {
$products[$product->product_id] =& $product;
} else if(!is_array($products[$product->product_id])) {
$old =& $products[$product->product_id];
unset($products[$product->product_id]);
$products[$product->product_id] = array(&$old, &$product);
} else {
$products[$product->product_id][] =& $product;
}
if((int)$product->product_vendor_id > 0)
$vendor_ids[ (int)$product->product_vendor_id ] =
(int)$product->product_vendor_id;
}
unset($product);
$this->assignRef('products', $rows);
$this->loadPricesImages($products);
$db->setQuery('SELECT COUNT(DISTINCT(product.product_id))
'.$query);
$pageInfo->elements = new stdClass();
$pageInfo->elements->total = $db->loadResult();
$pageInfo->elements->page = count($rows);
$vendors = array();
if(!empty($vendor_ids)) {
$query = 'SELECT vendor_id, vendor_name FROM ' .
hikamarket::table('vendor') . ' WHERE vendor_id IN
('.implode(',', $vendor_ids).')';
$db->setQuery($query);
$vendors = $db->loadObjectList('vendor_id');
}
$this->assignRef('vendors', $vendors);
$this->toolbar = array(
'approve' => array('name' =>
'custom', 'icon' => 'publish',
'alt' => JText::_('HIKAM_APPROVE'), 'task'
=> 'approve', 'display' => $manage),
'decline' => array(
'name' => 'custom', 'icon' =>
'unpublish', 'alt' =>
JText::_('HIKAM_DECLINE'), 'task' =>
'decline',
'display' => $manage && hikamarket::level(1)
),
'delete' => array(
'name' => 'deleteList',
'display' => $manage
),
'|',
array('name' => 'pophelp', 'target'
=> 'vendor'),
'dashboard'
);
$this->getPagination();
$this->getOrdering('a.ordering', true);
if(!empty($this->ordering->ordering)) {
$this->toolbar['ordering']['display'] = true;
}
return true;
}
private function loadPricesImages(&$products) {
if(empty($products))
return;
$db = JFactory::getDBO();
$db->setQuery('SELECT * FROM
'.hikamarket::table('shop.price').' WHERE
price_product_id IN ('.implode(',',
array_keys($products)).')');
$prices = $db->loadObjectList();
if(!empty($prices)) {
foreach($prices as $price) {
if(!isset($products[$price->price_product_id]) )
continue;
if(!is_array($products[$price->price_product_id])) {
$products[$price->price_product_id]->prices[] = $price;
} else {
foreach($products[$price->price_product_id] as $p) {
$p->prices[] = $price;
}
}
}
}
unset($prices);
$db->setQuery('SELECT * FROM
'.hikamarket::table('shop.file').' WHERE file_ref_id IN
('.implode(',', array_keys($products)).') AND
file_type=\'product\' ORDER BY file_ref_id ASC, file_ordering
ASC, file_id ASC');
$images = $db->loadObjectList();
if(!empty($images)) {
foreach($images as $image) {
if(!isset($products[(int)$image->file_ref_id]))
continue;
if(!is_array($products[(int)$image->file_ref_id])) {
if(isset($products[(int)$image->file_ref_id]->file_ref_id))
continue;
foreach(get_object_vars($image) as $key => $name) {
$products[(int)$image->file_ref_id]->$key = $name;
}
} else {
$p = reset($products[(int)$image->file_ref_id]);
if(isset($p->file_ref_id))
continue;
foreach($products[(int)$image->file_ref_id] as $p) {
foreach(get_object_vars($image) as $key => $name) {
$p->$key = $name;
}
}
}
}
}
}
public function confirm_action() {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$product_ids = hikaInput::get()->get('cid', array(),
'array');
hikamarket::toInteger($product_ids);
$url_params =
'&task='.hikaInput::get()->getCmd('task');
foreach($product_ids as $pid) {
$url_params .= '&cid[]=' . $pid;
}
$url_params .=
'&redirect='.hikaInput::get()->getCmd('redirect',
'');
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName().'.waitingapproval';
hikamarket::setTitle(JText::_('WAITING_APPROVAL_LIST'),
self::icon, self::ctrl.$url_params);
$config = hikamarket::config();
$this->assignRef('config', $config);
$this->loadRef(array(
'currencyClass' => 'shop.class.currency',
'imageHelper' => 'shop.helper.image',
'productClass' => 'shop.class.product',
));
$action = hikaInput::get()->getCmd('action_to_confirm',
null);
if(empty($action) || !in_array($action, array('remove',
'approve', 'decline'))) {
$app->enqueueMessage(JText::_('INVALID_DATA'),
'error');
$app->redirect(hikamarket::completeLink('dashboard', false,
true));
}
global $Itemid;
$url_itemid = '';
if(!empty($Itemid))
$url_itemid = '&Itemid='.$Itemid;
$this->assignRef('Itemid', $Itemid);
$query = 'SELECT p.*, v.vendor_name '.
' FROM '.hikamarket::table('shop.product').'
as p '.
' LEFT JOIN '.hikamarket::table('vendor').' AS
v ON p.product_vendor_id = v.vendor_id '.
' WHERE p.product_id IN ('.implode(',',
$product_ids).') '.
' AND p.product_type =
'.$db->Quote('waiting_approval');
$db->setQuery($query);
$products = $db->loadObjectList('product_id');
$this->productClass->loadProductsListingData($products, array(
'load_badges' => false,
'load_custom_product_fields' => false,
'load_custom_item_fields' => false,
'price_display_type' => 'cheapest'
));
asort($product_ids);
$confirmation =
md5($action.'{'.implode(':',$product_ids).'}');
$this->assignRef('action', $action);
$this->assignRef('ids', $product_ids);
$this->assignRef('products', $products);
$this->assignRef('confirmation', $confirmation);
$toolbar_icon = 'publish';
if($action == 'remove')
$toolbar_icon = 'remove';
else if($action == 'decline')
$toolbar_icon = 'unpublish';
$this->toolbar = array(
array('name' => 'custom', 'icon' =>
$toolbar_icon, 'alt' => JText::_('HIKAM_CONFIRM'),
'task' => $action),
array('name' => 'link', 'icon' =>
'back', 'url' =>
hikamarket::completeLink('product&task=waitingapproval'),
'alt' => JText::_('HIKA_CANCEL')),
'|',
'dashboard'
);
}
}
views/uploadmarket/index.html000064400000000032151160562450012366
0ustar00<html><body></body></html>views/uploadmarket/tmpl/galleryimage.php000064400000011045151160562450014526
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><fieldset>
<div class="toolbar" id="toolbar"
style="float: right;">
<button class="btn" type="button"
onclick="window.hikamarket.submitform('galleryselect','adminForm');"><img
style="vertical-align: middle" src="<?php echo
HIKASHOP_IMAGES; ?>save.png"/><?php echo
JText::_('OK'); ?></button>
</div>
</fieldset>
<form action="<?php echo
hikamarket::completeLink('upload&task=galleryimage', true);
?>" method="post" name="adminForm"
id="adminForm">
<table width="100%" height="100%"
class="adminlist" style="width:100%;height:100%;">
<thead>
<tr>
<th></th>
<th>
<?php echo JText::_('FILTER');?>:
<input type="text" name="search"
value="<?php echo
$this->escape($this->pageInfo->search);?>"
class="text_area"
onchange="document.adminForm.submit();" />
<button class="btn"
onclick="document.adminForm.limitstart.value=0;this.form.submit();"><?php
echo JText::_( 'GO' ); ?></button>
<button class="btn"
onclick="document.adminForm.limitstart.value=0;document.getElementById('search').value='';this.form.submit();"><?php
echo JText::_( 'RESET' ); ?></button>
</th>
</tr>
</thead>
<tfoot>
<tr>
<td></td>
<td>
<?php echo $this->pagination->getListFooter(); ?>
<?php echo $this->pagination->getResultsCounter(); ?>
</td>
</tr>
</tfoot>
<tr>
<td width="130px" height="100%"
style="width:130px;vertical-align:top;">
<div style="width:130px;height:100%;overflow:auto;">
<?php
echo $this->treeContent;
?>
<script type="text/javascript">
hikashopGallery.callbackSelection = function(tree,id) {
var d = document, node = tree.get(id);
if( node.value && node.name ) {
var url = "<?php
$params = '';
if(!empty($this->uploadConfig['extra'])) {
foreach($this->uploadConfig['extra'] as $uploadField =>
$uploadFieldValue) {
$params .= '&' . urlencode($uploadField) . '='
. urlencode($uploadFieldValue);
}
}
echo
hikamarket::completeLink('upload&task=galleryimage&folder={FOLDER}&uploader='.$this->uploader.'&field='.$this->field.$params,
true, true) ;
?>";
document.location = url.replace('{FOLDER}',
node.value.replace('/', '|'));
}
}
</script>
</div>
</td>
<td>
<ul id="hikaGallery">
<?php
if(!empty($this->dirContent)) {
foreach($this->dirContent as $k => $content) {
$chk_uid = 'hikaGalleryChk_' . $k . '_' . uniqid();
?>
<li class="hikaGalleryItem">
<a class="hikaGalleryPhoto" href="#"
onclick="return window.hikagallery.select(this, '<?php echo
$chk_uid; ?>');">
<img src="<?php echo $content->thumbnail->url;
?>" alt="<?php echo $content->filename;
?>"/>
<span style="display:none;"
class="hikaGalleryChk"><input type="checkbox"
id="<?php echo $chk_uid ;?>" name="files[]"
value="<?php echo $content->path; ?>"/></span>
<div class="hikaGalleryCommand">
<span class="photo_name"><?php echo
$content->filename; ?></span>
<span><?php echo $content->width . 'x' .
$content->height; ?></span>
<span style="float:right"><?php echo
$content->size; ?></span>
</div>
</a>
</li>
<?php
}
}
?>
</ul>
</td>
</tr>
</table>
<script type="text/javascript">
window.hikagallery = {};
window.hikagallery.select = function(el, id) {
var d = document, w = window, o = w.Oby, chk = d.getElementById(id);
if(chk) {
if(chk.checked) {
o.removeClass(el.parentNode, 'selected');
} else {
o.addClass(el.parentNode, 'selected');
}
chk.checked = !chk.checked;
}
return false;
}
</script>
<div class="clr"></div>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="tmpl"
value="component" />
<input type="hidden" name="task"
value="galleryimage" />
<input type="hidden" name="ctrl"
value="upload" />
<input type="hidden" name="folder"
value="<?php echo $this->destFolder; ?>" />
<input type="hidden" name="uploader"
value="<?php echo $this->uploader; ?>" />
<input type="hidden" name="field"
value="<?php echo $this->field; ?>" />
<?php
if(!empty($this->uploadConfig['extra'])) {
foreach($this->uploadConfig['extra'] as $uploadField =>
$uploadFieldValue) {
?>
<input type="hidden" name="<?php echo $uploadField;
?>" value="<?php echo $uploadFieldValue; ?>" />
<?php
}
}
?>
<?php echo JHTML::_('form.token'); ?>
</form>
views/uploadmarket/tmpl/image_entry.php000064400000002064151160562450014370
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div>
<?php if(!empty($this->params->delete) &&
!empty($this->params->uploader_id)) { ?>
<a href="#delete" class="deleteImg"
onclick="return window.hkUploaderList['<?php echo
$this->params->uploader_id;
?>'].delImage(this);"><img src="<?php echo
HIKAMARKET_IMAGES; ?>icon-16/delete.png"
border="0"></a>
<?php } ?>
<div class="hikamarket_image"><?php
$img =
$this->imageHelper->getThumbnail(@$this->params->file_path,
array(100, 100), null);
if($img->success) {
$content = '<img src="'.$img->url.'"
alt="'.$img->filename.'" />';
echo $this->popup->image($content, $img->origin_url);
}
if(!empty($this->params->field_name))
echo '<input type="hidden"
name="'.$this->params->field_name.'"
value="'.$this->escape(@$this->params->file_path).'"/>';
?></div>
</div>
views/uploadmarket/tmpl/index.html000064400000000032151160562450013342
0ustar00<html><body></body></html>views/uploadmarket/tmpl/sendfile.php000064400000004410151160562450013653
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><fieldset>
<div class="toolbar" id="toolbar"
style="float: right;">
<button class="btn" type="button"
onclick="hikamarket.submitform('addimage','hikamarket_form');"><img
style="vertical-align:middle" src="<?php echo
HIKASHOP_IMAGES; ?>save.png"/><?php echo
JText::_('OK'); ?></button>
</div>
</fieldset>
<form action="<?php echo
hikamarket::completeLink('upload&task=image'); ?>"
method="post" name="hikamarket_form"
id="hikamarket_form" enctype="multipart/form-data">
<table width="100%">
<tr>
<?php
if(empty($this->element->file_path)) {
?>
<td class="key">
<label for="files"><?php echo
JText::_('HIKA_IMAGE'); ?></label>
</td>
<td>
<input type="file" name="files[]"
size="30" />
<?php echo
JText::sprintf('MAX_UPLOAD',(hikashop_bytes(ini_get('upload_max_filesize'))
> hikashop_bytes(ini_get('post_max_size'))) ?
ini_get('post_max_size') :
ini_get('upload_max_filesize')); ?>
</td>
<?php
} else {
?>
<td class="key">
<label for="files"><?php echo JText::_(
'HIKA_IMAGE' ); ?></label>
</td>
<td><?php
$image =
$this->imageHelper->getThumbnail($this->element->file_path,
array(100, 100), array('default' => true));
?><img src="<?php echo $image->url; ?>"
alt=""/></td>
<?php
}
?>
</tr>
</table>
<div class="clr"></div>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="tmpl"
value="component" />
<input type="hidden" name="ctrl"
value="upload" />
<input type="hidden" name="task"
value="addimage" />
<input type="hidden" name="uploader"
value="<?php echo $this->uploader; ?>" />
<input type="hidden" name="field"
value="<?php echo $this->field; ?>" />
<?php
if(!empty($this->uploadConfig['extra'])) {
foreach($this->uploadConfig['extra'] as $uploadField =>
$uploadFieldValue) {
?>
<input type="hidden" name="<?php echo $uploadField;
?>" value="<?php echo $uploadFieldValue; ?>" />
<?php
}
}
?>
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/uploadmarket/view.html.php000064400000007665151160562450013042
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class uploadmarketViewuploadmarket extends hikamarketView {
const ctrl = 'upload';
const name = 'HIKA_UPLOAD';
const icon = 'upload';
public function display($tpl = null, $params = array()) {
$this->params =& $params;
$fct = $this->getLayout();
if(method_exists($this, $fct)) {
if($this->$fct() === false)
return;
}
parent::display($tpl);
}
public function sendfile() {
$uploadConfig = hikaInput::get()->getVar('uploadConfig',
null);
if(empty($uploadConfig) || !is_array($uploadConfig))
return false;
$this->assignRef('uploadConfig', $uploadConfig);
$uploader = hikaInput::get()->getCmd('uploader',
'');
$this->assignRef('uploader', $uploader);
$field = hikaInput::get()->getCmd('field', '');
$this->assignRef('field', $field);
}
public function galleryimage() {
hikamarket::loadJslib('otree');
$app = JFactory::getApplication();
$config = hikamarket::config();
$this->assignRef('config', $config);
$shopConfig = hikamarket::config(false);
$this->assignRef('shopConfig', $shopConfig);
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName().'.gallery';
$uploadConfig = hikaInput::get()->getVar('uploadConfig',
null);
if(empty($uploadConfig) || !is_array($uploadConfig))
return false;
$this->assignRef('uploadConfig', $uploadConfig);
$uploader = hikaInput::get()->getCmd('uploader',
'');
$this->assignRef('uploader', $uploader);
$field = hikaInput::get()->getCmd('field', '');
$this->assignRef('field', $field);
$uploadFolder =
ltrim(JPath::clean(html_entity_decode($shopConfig->get('uploadfolder'))),DS);
$uploadFolder = rtrim($uploadFolder,DS).DS;
$basePath = JPATH_ROOT.DS.$uploadFolder.DS;
$pageInfo = new stdClass();
$pageInfo->limit = new stdClass();
$pageInfo->limit->value = $app->getUserStateFromRequest(
$this->paramBase.'.list_limit', 'limit', 20,
'int' );
$pageInfo->limit->start = $app->getUserStateFromRequest(
$this->paramBase.'.limitstart', 'limitstart', 0,
'int' );
$pageInfo->search = $app->getUserStateFromRequest(
$this->paramBase.'.search', 'search', '',
'string');
$this->assignRef('pageInfo', $pageInfo);
jimport('joomla.filesystem.folder');
if(!JFolder::exists($basePath))
JFolder::create($basePath);
$galleryHelper = hikamarket::get('shop.helper.gallery');
$galleryHelper->setRoot($basePath);
$this->assignRef('galleryHelper', $galleryHelper);
$folder = str_replace('|', '/',
hikaInput::get()->getString('folder', ''));
$destFolder = rtrim($folder, '/\\');
if(!$galleryHelper->validatePath($destFolder))
$destFolder = '';
if(!empty($destFolder)) $destFolder .= '/';
$this->assignRef('destFolder', $destFolder);
$galleryOptions = array(
'filter' => '.*' .
str_replace(array('.','?','*','$','^'),
array('\.','\?','\*','$','\^'),
$pageInfo->search) . '.*',
'offset' => $pageInfo->limit->start,
'length' => $pageInfo->limit->value
);
$this->assignRef('galleryOptions', $galleryOptions);
$treeContent = $galleryHelper->getTreeList(null, $destFolder);
$this->assignRef('treeContent', $treeContent);
$dirContent = $galleryHelper->getDirContent($destFolder,
$galleryOptions);
$this->assignRef('dirContent', $dirContent);
jimport('joomla.html.pagination');
$pagination = new JPagination( $galleryHelper->filecount,
$pageInfo->limit->start, $pageInfo->limit->value );
$this->assignRef('pagination', $pagination);
}
public function image_entry() {
$imageHelper = hikamarket::get('shop.helper.image');
$this->assignRef('imageHelper', $imageHelper);
$popup = hikamarket::get('shop.helper.popup');
$this->assignRef('popup', $popup);
}
}
views/vendormarket/index.html000064400000000032151160562450012377
0ustar00<html><body></body></html>views/vendormarket/tmpl/admin.php000064400000003016151160562450013164
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><fieldset>
<div class="toolbar" id="toolbar"
style="float: right;">
<button class="btn" type="button"
onclick="submitbutton('save_admin');"><img
src="<?php echo HIKASHOP_IMAGES; ?>save.png"/><?php
echo JText::_('OK'); ?></button>
</div>
</fieldset>
<div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('vendor', true); ?>"
method="post" name="adminForm"
id="adminForm">
<table class="admintable" style="width:100%;">
<tr>
<td class="key">
<label for="data[vendor][vendor_admin_id]">
<?php echo JText::_( 'HIKA_USER' ); ?>
</label>
</td>
<td>
<?php
$type = hikamarket::get('shop.type.user');
echo $type->display('data[vendor][vendor_admin_id]',
hikaInput::get()->getVar('vendor_admin_id', 0));
?>
</td>
</tr>
</table>
<input type="hidden"
name="data[vendor][history][history_type]"
value="modification" />
<input type="hidden" name="data[vendor][vendor_id]"
value="<?php echo @$this->element->vendor_id;?>"
/>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="order" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/vendormarket/tmpl/delete.php000064400000005034151160562450013340
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><h2><?php echo
JText::_('HIKAM_CONFIRM_VENDOR_DELETION'); ?></h2>
<form action="<?php echo
hikamarket::completeLink('vendor'); ?>"
method="post" name="adminForm"
id="adminForm">
<table class="adminlist pad5 table table-striped
table-hover">
<thead>
<tr>
<th class="hikamarket_vendor_num_title title
titlenum"><?php echo
JText::_('HIKA_NUM');?></th>
<th class="hikamarket_vendor_name_title title"><?php
echo JText::_('HIKA_NAME'); ?></th>
<th class="hikamarket_vendor_published_title title
titletoggle"><?php echo JText::_('HIKA_PUBLISHED');
?></th>
<th class="hikamarket_vendor_products_title title
titlenum"><?php echo JText::_('HIKAM_PRODUCTS');
?></th>
<th class="hikamarket_vendor_orders_title title
titlenum"><?php echo JText::_('HIKAM_ORDERS');
?></th>
<th class="hikamarket_vendor_userss_title title
titlenum"><?php echo JText::_('HIKAM_USERS');
?></th>
</tr>
</thead>
<tbody>
<?php
$i = 0;
$k = 0;
foreach($this->vendors as $vendor) {
?>
<tr>
<td class="hikamarket_vendor_num_value"
align="center"><?php
echo $i+1;
?><input type="hidden" value="<?php echo
(int)$vendor->vendor_id; ?>"
name="cid[]"/></td>
<td class="hikamarket_vendor_name_value"><?php
echo $this->escape($vendor->vendor_name);
?></td>
<td class="hikamarket_vendor_publish_value"
align="center"><?php
echo $this->toggleClass->display('activate',
$vendor->vendor_published);
?></td>
<td class="hikamarket_vendor_products_value"
align="center"><?php
echo (int)@$vendor->products;
?></td>
<td class="hikamarket_vendor_orders_value"
align="center"><?php
echo (int)@$vendor->orders;
?></td>
<td class="hikamarket_vendor_users_value"
align="center"><?php
echo (int)@$vendor->users;
?></td>
</tr>
<?php
$i++;
$k = 1 - $k;
}
?>
</tbody>
</table>
<input type="hidden" name="confirm"
value="<?php echo $this->confirm_value; ?>" />
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="boxchecked"
value="<?php echo count($this->vendors); ?>" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/vendormarket/tmpl/fees.php000064400000013431151160562450013020
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if($this->config->get('market_mode', 'fee') ==
'commission') {
?>
<div style="float:left">
<h3><?php echo
JText::_('HIKAM_MODE_COMMISSION');?></h3>
</div>
<?php
}
?>
<table class="adminlist table table-striped table-hover"
width="100%">
<thead>
<tr>
<th class="title"><?php echo
JText::_('CURRENCY');?></th>
<th class="title" style="width:10%"><?php
echo JText::_('MINIMUM_QUANTITY');?></th>
<th class="title" style="width:10%"><?php
echo JText::_('HIKAM_MINIMUM_PRICE');?></th>
<th class="title"><?php echo
JText::_('FLAT_FEE');?></th>
<th class="title"><?php echo
JText::_('FIXED_FEE');?></th>
<th class="title"><?php echo
JText::_('PERCENT_FEE');?></th>
<th class="title" style="width:5%"><?php
echo JText::_('GLOBAL_FEE');?></th>
<?php if(!empty($this->fees_show_groups)) { ?>
<th class="title"><?php echo
JText::_('GROUP_FEE');?></th>
<?php } ?>
<th class="title" style="width:4%">
<button class="hikabtn hikabtn-primary hikabtn-mini"
onclick="return marketAddVendorFee();" type="button"
style="margin:0px;"><i class="fas
fa-plus"></i> <?php echo JText::_('ADD');
?></button>
</th>
</tr>
</thead>
<tbody id="hikamarket_vendor_fees">
<?php
$k = 0;
$cpt = 0;
$formRoot = 'data';
if(!empty($this->formRoot))
$formRoot = $this->formRoot;
if(!empty($this->fees)) {
foreach($this->fees as $i => $fee) {
$global = (substr($fee->fee_type, -7) == '_global');
?>
<tr class="row<?php echo $k;?>">
<td><?php
echo
@$this->currencyType->display($formRoot.'[vendor_fee]['.$i.'][currency]',
@$fee->fee_currency_id);
?></td>
<td>
<input style="width:auto;" size="3"
type="text" name="<?php echo $formRoot;
?>[vendor_fee][<?php echo $i;?>][quantity]"
value="<?php echo @$fee->fee_min_quantity;?>" />
</td>
<td>
<input style="width:auto;" size="5"
type="text" name="<?php echo $formRoot;
?>[vendor_fee][<?php echo $i;?>][min_price]"
value="<?php echo @$fee->fee_min_price;?>" />
</td>
<td>
<input type="hidden" name="<?php echo $formRoot;
?>[vendor_fee][<?php echo $i;?>][id]" value="<?php
echo $fee->fee_id;?>" />
<input style="width:auto;" size="6"
type="text" name="<?php echo $formRoot;
?>[vendor_fee][<?php echo $i;?>][value]" value="<?php
echo @$fee->fee_value;?>" />
</td>
<td>
<input style="width:auto;" size="6"
type="text" name="<?php echo $formRoot;
?>[vendor_fee][<?php echo $i;?>][fixed]" value="<?php
echo @$fee->fee_fixed;?>" />
</td>
<td>
<input style="width:auto;" size="4"
type="text" name="<?php echo $formRoot;
?>[vendor_fee][<?php echo $i;?>][percent]"
value="<?php echo number_format((float)@$fee->fee_percent,
2);?>" />%
</td>
<td>
<input type="checkbox" name="<?php echo $formRoot;
?>[vendor_fee][<?php echo $i;?>][global]" value="1"
<?php echo $global ? 'checked="checked"
':''; ?>/>
</td>
<?php if(!empty($this->fees_show_groups) &&
!empty($this->joomlaAclType)) { ?>
<td><?php
echo
$this->joomlaAclType->displayList($formRoot.'[vendor_fee]['.$i.'][group]',
@$fee->fee_group);
?></td>
<?php } ?>
<td style="text-align:center">
<a href="#" onclick="hikamarket.deleteRow(this);
return false;"><i class="far
fa-trash-alt"></i></a>
</td>
</tr>
<?php
$k = 1 - $k;
$cpt = $i;
}
$cpt++;
}
?>
<tr class="row<?php echo $k;?>"
style="display:none"
id="hikamarket_tpl_vendor_fee">
<td><?php echo
@$this->currencyType->display('{input_fee_currency}',
0);?></td>
<td><input style="width:auto;" size="3"
type="text" name="{input_fee_quantity}"
value="" /></td>
<td><input style="width:auto;" size="5"
type="text" name="{input_fee_min_price}"
value="" /></td>
<td>
<input type="hidden" name="{input_fee_id}"
value="" />
<input style="width:auto;" size="6"
type="text" name="{input_fee_value}" value=""
/>
</td>
<td><input style="width:auto;" size="6"
type="text" name="{input_fee_fixed}" value=""
/></td>
<td><input style="width:auto;" size="4"
type="text" name="{input_fee_percent}"
value="" />%</td>
<td><input type="checkbox"
name="{input_fee_global}" value="1" /></td>
<?php if(!empty($this->fees_show_groups) &&
!empty($this->joomlaAclType)) { ?>
<td><?php
echo
$this->joomlaAclType->displayList('{input_fee_group}', 0);
?></td>
<?php } ?>
<td style="text-align:center"><a href="#"
onclick="hikamarket.deleteRow(this); return false;"><i
class="far fa-trash-alt"></i></a></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
var hikamarket_product_fee_cpt = <?php echo $cpt;?>;
function marketAddVendorFee(){
var d = document,
tbody = d.getElementById('hikamarket_vendor_fees'),
cpt = hikamarket_product_fee_cpt,
htmlblocks = {
input_fee_id: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][id]",
input_fee_currency: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][currency]",
input_fee_quantity: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][quantity]",
input_fee_min_price: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][min_price]",
input_fee_value: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][value]",
input_fee_fixed: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][fixed]",
input_fee_percent: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][percent]",
input_fee_global: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][global]",
input_fee_group: "<?php echo $formRoot;
?>[vendor_fee]["+cpt+"][group]"
};
hikamarket.dupRow('hikamarket_tpl_vendor_fee', htmlblocks,
"market_vendor_fee_" + cpt);
hikamarket_product_fee_cpt++;
return false;
}
</script>
views/vendormarket/tmpl/form.php000064400000040422151160562450013041
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php if(!isset($this->vendor->vendor_id) ||
$this->vendor->vendor_id > 1) { ?>
<div class="iframedoc"
id="iframedoc"></div>
<div id="hikashop_backend_tile_edition">
<?php if((isset($this->vendor->vendor_id) &&
$this->vendor->vendor_id > 1) ||
(!isset($this->vendor->vendor_id) && hikamarket::level(1))) {
?>
<div id="hikamarket_vendor_edition_header">
<ul class="hika_tabs"
rel="tabs:hikamarket_product_edition_tab_">
<li class="active"><a href="#vendor"
rel="tab:1" onclick="return
window.hikashop.switchTab(this);"><?php echo
JText::_('HIKA_VENDOR'); ?></a></li>
<?php if(hikamarket::level(1)) { ?>
<li><a href="#acl" rel="tab:2"
onclick="return window.hikashop.switchTab(this);"><?php
echo JText::_('ACL'); ?></a></li>
<?php } ?>
<?php if(isset($this->vendor->vendor_id) &&
$this->vendor->vendor_id > 1) { ?>
<li><a href="#stats" rel="tab:3"
onclick="return window.hikashop.switchTab(this);"><?php
echo JText::_('STATISTICS'); ?></a></li>
<?php } ?>
</ul>
<div style="clear:both"></div>
<?php
}
?>
</div>
<form action="<?php echo
hikamarket::completeLink('vendor'); ?>"
method="post" name="adminForm" id="adminForm"
enctype="multipart/form-data">
<?php } else { ?>
<div id="hikashop_backend_tile_edition">
<?php } ?>
<script type="text/javascript">
window.vendorMgr = { cpt:{} };
window.hikashop.ready(function(){window.hikashop.dlTitle('adminForm');});
</script>
<?php if(isset($this->vendor->vendor_id) &&
$this->vendor->vendor_id > 1) { ?>
<!-- Product edition : main tab -->
<div id="hikamarket_product_edition_tab_1">
<?php } ?>
<div class="hk-row-fluid">
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('MAIN_INFORMATION');
?></div>
<dl class="hika_options">
<dt class="hikamarket_vendor_name"><label
for="data[vendor][vendor_name]"><?php echo
JText::_('HIKA_NAME'); ?></label></dt>
<dd class="hikamarket_vendor_name input_large">
<input type="text"
name="data[vendor][vendor_name]"
id="data[vendor][vendor_name]" value="<?php echo
$this->escape(@$this->vendor->vendor_name); ?>" />
</dd>
<dt class="hikamarket_vendor_email"><label
for="data[vendor][vendor_email]"><?php echo
JText::_('HIKA_EMAIL'); ?></label></dt>
<dd class="hikamarket_vendor_email input_large">
<input type="text"
name="data[vendor][vendor_email]"
id="data[vendor][vendor_email]" value="<?php echo
$this->escape(@$this->vendor->vendor_email); ?>" />
</dd>
<?php
if(!isset($this->vendor->vendor_id) || $this->vendor->vendor_id
> 1) {
?>
<dt class="hikamarket_vendor_admin"><label
for="data_vendor_vendor_admin_id_text"><?php echo
JText::_('HIKA_ADMINISTRATOR'); ?></label></dt>
<dd class="hikamarket_vendor_admin"><?php
echo $this->nameboxType->display(
'data[vendor][vendor_admin_id]',
@$this->vendor_admin->user_id,
hikamarketNameboxType::NAMEBOX_SINGLE,
'user',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
)
);
?></dd>
<dt class="hikamarket_vendor_published"><label
for="data[vendor][vendor_published]"><?php echo
JText::_('HIKA_PUBLISHED'); ?></label></dt>
<dd class="hikamarket_vendor_published"><?php
echo JHTML::_('hikaselect.booleanlist',
'data[vendor][vendor_published]' , '',
@$this->vendor->vendor_published);
?></dd>
<dt class="hikamarket_vendor_currency"><label
for="datavendorvendor_currency_id"><?php echo
JText::_('CURRENCY'); ?></label></dt>
<dd class="hikamarket_vendor_currency"><?php
echo
$this->currencyType->display("data[vendor][vendor_currency_id]",
@$this->vendor->vendor_currency_id);
?></dd>
<?php if($this->config->get('allow_zone_vendor', 0)) {
?>
<dt class="hikamarket_vendor_zone"><label
for="data_vendor_vendor_zone_text"><?php echo
JText::_('ZONE'); ?></label></dt>
<dd><?php
echo $this->nameboxType->display(
'data[vendor][vendor_zone_id]',
@$this->vendor->vendor_zone_namekey,
hikamarketNameboxType::NAMEBOX_SINGLE,
'zone',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>'
)
);
?></dd>
<?php } ?>
<?php
if(file_exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_multisites'.DS.'helpers'.DS.'utils.php'))
{
include_once(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_multisites'.DS.'helpers'.DS.'utils.php');
if(class_exists('MultisitesHelperUtils') &&
method_exists('MultisitesHelperUtils',
'getComboSiteIDs')) {
$comboSiteIDs =
MultisitesHelperUtils::getComboSiteIDs(@$this->vendor->vendor_site_id,
'data[vendor][vendor_site_id]',
JText::_('SELECT_A_SITE'));
if(!empty($comboSiteIDs)) {
?>
<dt class="hikamarket_vendor_siteid"><?php echo
JText::_('SITE_ID'); ?></dt>
<dd class="hikamarket_vendor_siteid"><?php echo
$comboSiteIDs; ?></dd>
<?php
}
}
}
?>
<?php
} // Vendor_id > 1
?>
<dt class="hikamarket_vendor_templateid"><label
for="data_vendor_vendor_template_id_text"><?php echo
JText::_('VENDOR_PRODUCT_TEMPLATE');
?></label></dt>
<dd class="hikamarket_vendor_templateid"><?php
echo $this->nameboxType->display(
'data[vendor][vendor_template_id]',
@$this->vendor->vendor_template_id,
hikamarketNameboxType::NAMEBOX_SINGLE,
'product_template',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
)
);
?></dd>
<dt><label><?php echo
JText::_('HIKAM_VENDOR_IMAGE'); ?></label></dt>
<dd>
<?php
$options = array(
'upload' => true,
'gallery' => true,
'upload_base_url' =>
'index.php?option=com_hikamarket&ctrl=upload',
'text' =>
JText::_('HIKAM_VENDOR_IMAGE_EMPTY_UPLOAD'),
'uploader' => array('vendor',
'vendor_image'),
'vars' => array('vendor_id' =>
(int)@$this->vendor->vendor_id)
);
$content = '';
if(!empty($this->vendor->vendor_image)) {
$params = new stdClass();
$params->file_path = @$this->vendor->vendor_image;
$params->field_name = 'data[vendor][vendor_image]';
$params->uploader_id = 'hikamarket_vendor_image';
$params->delete = true;
$js = '';
$content = hikamarket::getLayout('uploadmarket',
'image_entry', $params, $js);
}
echo
$this->uploaderType->displayImageSingle('hikamarket_vendor_image',
$content, $options);
?>
<input type="hidden" value="1"
name="data_vendor_image"/>
</dd>
<dt class="hikamarket_vendor_alias"><label
for="data[vendor][vendor_alias]"><?php echo
JText::_('HIKA_ALIAS'); ?></label></dt>
<dd class="hikamarket_vendor_alias input_large">
<input type="text"
name="data[vendor][vendor_alias]"
id="data[vendor][vendor_alias]" value="<?php echo
$this->escape(@$this->vendor->vendor_alias); ?>" />
</dd>
</dl>
</div></div>
<?php
if(!empty($this->extraFields['vendor'])) {
?>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('FIELDS');
?></div>
<dl id="hikamarket_vendor_fields"
class="hika_options">
<?php
foreach($this->extraFields['vendor'] as $fieldName =>
$oneExtraField) {
?>
<dl class="hika_options" id="hikamarket_vendor_<?php
echo $oneExtraField->field_namekey; ?>"
style="margin:0;padding:0;">
<dt class="hikamarket_vendor_<?php echo $fieldName;
?>"><label for="<?php echo $fieldName;
?>"><?php
echo $this->fieldsClass->getFieldName($oneExtraField);
if(!empty($oneExtraField->field_required))
echo ' *';
?></label></dt>
<dd class="hikamarket_vendor_<?php echo $fieldName;
?>"><?php
$onWhat = 'onchange';
if($oneExtraField->field_type == 'radio')
$onWhat = 'onclick';
$oneExtraField->field_required = false;
echo $this->fieldsClass->display(
$oneExtraField,
@$this->vendor->$fieldName,
'data[vendor]['.$fieldName.']',
false,
' ' . $onWhat .
'="hikashopToggleFields(this.value,\''.$fieldName.'\',\'vendor\',0,\'hikamarket_\');"',
false,
$this->extraFields['vendor'],
$this->vendor
);
?></dd>
</dl>
<?php
}
?>
</dl>
</div></div>
<?php
}
?>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('HIKA_DESCRIPTION');
?></div>
<?php
$this->editor->content = @$this->vendor->vendor_description;
$this->editor->name = 'vendor_description';
$ret = $this->editor->display();
if($this->editor->editor == 'codemirror')
echo str_replace(array('(function()
{'."\n",'})()'."\n"),array('window.hikashop.ready(function(){',
'});'), $ret);
else
echo $ret;
?>
<div style="clear:both"></div>
</div></div>
<div class="hkc-xl-clear"></div>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('USERS');
?></div>
<?php
$this->setLayout('users');
echo $this->loadTemplate();
?>
</div></div>
<?php if(hikamarket::level(1) &&
(!isset($this->vendor->vendor_id) || $this->vendor->vendor_id
> 1)) { ?>
<div class="hkc-xl-8 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('VENDOR_FEES');
?></div>
<?php
$this->setLayout('fees');
echo $this->loadTemplate();
?>
</div></div>
<?php } ?>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('VENDOR_OPTIONS');
?></div>
<?php
$this->setLayout('options');
echo $this->loadTemplate();
?>
</div></div>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('HIKAM_VENDOR_LOCATION');
?></div>
<dl class="hika_options">
<dt
class="hikamarket_vendor_location"><label><?php echo
JText::_('HIKAM_VENDOR_LOCATION_LAT');
?></label></dt>
<dd class="hikamarket_vendor_location">
<input type="text" id="vendor_location_lat"
name="data[vendor][vendor_location_lat]"
onchange="window.localPage.updateMapMarket();"
value="<?php echo
hikamarket::toFloat(@$this->vendor->vendor_location_lat); ?>"
/>
</dd>
<dt
class="hikamarket_vendor_location"><label><?php echo
JText::_('HIKAM_VENDOR_LOCATION_LONG');
?></label></dt>
<dd class="hikamarket_vendor_location">
<input type="text" id="vendor_location_lon"
name="data[vendor][vendor_location_long]"
onchange="window.localPage.updateMapMarket();"
value="<?php echo
hikamarket::toFloat(@$this->vendor->vendor_location_long);
?>" />
</dd>
</dl>
<?php hikamarket::loadJslib('leaflet'); ?>
<div id="vendor_map" class="map map-vendor"
style="height:200px;"></div>
<div class="">
<a href="#clear" class="hikabtn hikabtn-warning"
onclick="return window.localPage.clearLocation(this);"><i
class="fas fa-times-circle"></i> <?php echo
JText::_('HIKAM_MAP_CLEAR'); ?></a>
</div>
<script type="text/javascript">
var osmUrl =
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
osmAttrib = '© <a
href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>
contributors',
osm = L.tileLayer(osmUrl, {maxZoom: 18, attribution: osmAttrib});
var map = L.map('vendor_map').setView([<?php echo
hikamarket::toFloat(@$this->vendor->vendor_location_lat); ?>,
<?php echo
hikamarket::toFloat(@$this->vendor->vendor_location_long); ?>],
15).addLayer(osm);
var marker = null;
<?php if(!empty($this->vendor->vendor_location_lat) ||
!empty($this->vendor->vendor_location_long)) { ?>
marker = L.marker([<?php echo
hikamarket::toFloat($this->vendor->vendor_location_lat); ?>,
<?php echo
hikamarket::toFloat($this->vendor->vendor_location_long); ?>])
.addTo(map);
<?php } else { ?>
map.setView([0, 0], 0);
<?php } ?>
map.on('click',function(e){
window.localPage.setMapMarket(e.latlng);
});
if(!window.localPage) window.localPage = {};
window.localPage.clearLocation = function(btn) {
var d = document, input =
d.getElementById('vendor_location_lat');
if(input) input.value = '';
input = d.getElementById('vendor_location_lon');
if(input) input.value = '';
if(marker) marker.remove();
marker = null;
map.setView([0, 0], 0);
btn.blur();
return false;
};
window.localPage.setMapMarket = function(obj) {
var d = document, lon = obj.lon ? obj.lon: obj.lng;
if(!marker)
marker = L.marker([obj.lat, lon]).addTo(map);
else
marker.setLatLng([obj.lat, lon]);
var zoom = map.getZoom();
if(zoom <= 1) zoom = 15;
map.setView([obj.lat, lon], zoom);
var input = d.getElementById('vendor_location_lat');
if(input) input.value = obj.lat;
input = d.getElementById('vendor_location_lon');
if(input) input.value = lon;
};
window.localPage.updateMapMarket = function() {
var d = document,
obj = {lat: 0.0, lon: 0.0},
input = d.getElementById('vendor_location_lat'),
val = NaN;
if(input) val = parseFloat(input.value);
if(!isNaN(val)) obj.lat = val;
input = d.getElementById('vendor_location_lon');
val = NaN;
if(input) val = parseFloat(input.value);
if(!isNaN(val)) obj.lon = val;
window.localPage.setMapMarket(obj);
};
</script>
</div></div>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('HIKASHOP_CHECKOUT_TERMS');
?></div>
<?php
$this->editor->content = @$this->vendor->vendor_terms;
$this->editor->name = 'vendor_terms';
$ret = $this->editor->display();
if($this->editor->editor == 'codemirror')
echo str_replace(array('(function()
{'."\n",'})()'."\n"),array('window.hikashop.ready(function(){',
'});'), $ret);
else
echo $ret;
?>
<div style="clear:both"></div>
</div></div>
</div>
<?php if(isset($this->vendor->vendor_id) &&
$this->vendor->vendor_id > 1) { ?>
</div>
<?php } ?>
<?php if(hikamarket::level(1) &&
(!isset($this->vendor->vendor_id) || $this->vendor->vendor_id
> 1)) { ?>
<div id="hikamarket_product_edition_tab_2"
style="display:none;"><div
class="hk-container-fluid">
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('GROUP'); ?></div>
<?php
$vendor_group = '';
if(isset($this->vendor->vendor_group))
$vendor_group = $this->vendor->vendor_group;
echo $this->joomlaAcl->display('vendor_group',
$vendor_group, false, false);
?>
</div></div>
<div class="hkc-xl-4 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('ACL'); ?></div>
<?php
$acl = '';
if(!isset($this->vendor->vendor_acl))
$acl = '';
else
$acl = $this->vendor->vendor_acl;
echo $this->marketaclType->display('vendor_access', $acl,
'vendor_access_inherit');
?>
</div></div>
</div></div>
<?php } ?>
<div style="clear:both"
class="clr"></div>
<?php if(!isset($this->vendor->vendor_id) ||
$this->vendor->vendor_id > 1) { ?>
<input type="hidden" name="cid[]"
value="<?php echo @$this->vendor->vendor_id; ?>"
/>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
<?php } ?>
<?php if(isset($this->vendor->vendor_id) &&
$this->vendor->vendor_id > 1) { ?>
<div id="hikamarket_product_edition_tab_3"
style="display:none;"><div
class="hk-container-fluid">
<div class="hkc-xl-12 hkc-lg-12
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('ORDERS'); ?> - <span class="hk-label
hk-label-blue"><?php echo $this->orders_count;
?></span></div>
<?php
$this->setLayout('orders');
echo $this->loadTemplate();
?>
</div></div>
<div class="hkc-xl-6 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('VENDOR_INVOICES'); ?> - <span
class="hk-label hk-label-blue"><?php echo
$this->invoices_count; ?></span></div>
<?php
$this->setLayout('invoices');
echo $this->loadTemplate();
?>
</div></div>
<div class="hkc-xl-6 hkc-lg-6
hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php echo
JText::_('PRODUCTS'); ?> - <span class="hk-label
hk-label-blue"><?php echo $this->products_count;
?></span></div>
<?php
$this->setLayout('products');
echo $this->loadTemplate();
?>
</div></div>
</div></div>
<?php } ?>
</div>
views/vendormarket/tmpl/index.html000064400000000032151160562460013354
0ustar00<html><body></body></html>views/vendormarket/tmpl/invoices.php000064400000011202151160562460013710
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php if( !isset($this->embbed) ) { ?>
<div class="iframedoc"
id="iframedoc"></div>
<div>
<form action="<?php echo
hikamarket::completeLink('vendor&task=invoices'); ?>"
method="post" name="adminForm" id="adminForm"
enctype="multipart/form-data">
<div class="hk-row-fluid">
<div class="hkc-md-6">
<?php
echo $this->loadHkLayout('search', array(
'id' => 'adminForm'
));
?>
</div>
<div class="hkc-md-6">
<!-- Filters -->
</div>
</div>
<?php } else { ?>
<div style="float:right;margin:3px;">
<a class="hikabtn hikabtn-info" href="<?php echo
hikamarket::completeLink('shop.order&order_type=vendorpayment&filter_vendor='.$this->vendor_id.'&cancel_redirect='.$this->cancelUrl);
?>">
<i class="fa fa-chevron-right"></i> <?php echo
JText::_('SEE_ALL');?>
</a>
</div>
<?php } ?>
<table class="adminlist pad5 table table-striped table-hover"
style="width:100%">
<thead>
<tr>
<?php if(!isset($this->embbed)) { ?>
<th class="hikamarket_order_num_title title
titlenum"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_NUM'),
'a.order_id', $this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<?php } ?>
<th class="hikamarket_order_id_title title"><?php
if(isset($this->embbed))
echo JText::_('ORDER_NUMBER');
else
echo JHTML::_('grid.sort',
JText::_('ORDER_NUMBER'), 'a.order_number',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_order_status_title
title"><?php
if(isset($this->embbed))
echo JText::_('ORDER_STATUS');
else
echo JHTML::_('grid.sort',
JText::_('ORDER_STATUS'), 'a.order_status',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_order_date_title title"><?php
if(isset($this->embbed))
echo JText::_('DATE');
else
echo JHTML::_('grid.sort', JText::_('DATE'),
'a.order_modified',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_order_total_title
title"><?php
if(isset($this->embbed))
echo JText::_('HIKASHOP_TOTAL');
else
echo JHTML::_('grid.sort',
JText::_('HIKASHOP_TOTAL'), 'a.order_full_price',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
</tr>
</thead>
<?php if(!isset($this->embbed)) { ?>
<tfoot>
<tr>
<td colspan="5">
<?php echo $this->pagination->getListFooter(); ?>
<?php echo $this->pagination->getResultsCounter(); ?>
</td>
</tr>
</tfoot>
<?php } ?>
<tbody>
<?php
$k = 0;
$i = 0;
foreach($this->invoices as $invoice) {
?>
<tr class="row<?php echo $k; ?>">
<?php if(!isset($this->embbed)) { ?>
<td class="hikamarket_order_num_value"><?php
echo $this->pagination->getRowOffset($i);
?></td>
<?php } ?>
<td class="hikamarket_order_id_value"
align="center">
<a href="<?php echo
hikamarket::completeLink('shop.order&task=edit&cid[]='.$invoice->order_id.'&cancel_redirect='.$this->cancelUrl);
?>"><?php echo $invoice->order_number; ?></a>
</td>
<td class="hikamarket_order_status_value"><span
class="order-label order-label-<?php echo
preg_replace('#[^a-z_0-9]#i', '_', str_replace('
','_',$invoice->order_status)); ?>"><?php
echo hikamarket::orderStatus($invoice->order_status);
?></span></td>
<td class="hikamarket_order_date_value"><?php
echo hikamarket::getDate($invoice->order_created,'%Y-%m-%d
%H:%M');
?></td>
<td class="hikamarket_order_total_value"><?php
echo
$this->currencyHelper->format($invoice->order_full_price,
$invoice->order_currency_id);
?></td>
</tr>
<?php
$i++;
$k = 1 - $k;
}
?>
</tbody>
</table>
<?php if( !isset($this->embbed) ) { ?>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="invoices" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo
$this->pageInfo->filter->order->value; ?>" />
<input type="hidden" name="filter_order_dir"
value="<?php echo $this->pageInfo->filter->order->dir;
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
</div>
<?php } ?>
views/vendormarket/tmpl/listing.php000064400000011542151160562460013551
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('vendor'); ?>"
method="post" name="adminForm"
id="adminForm">
<div class="hk-row-fluid">
<div class="hkc-md-6">
<?php
echo $this->loadHkLayout('search', array(
'id' => 'adminForm'
));
?>
</div>
<div class="hkc-md-6">
<!-- Filters -->
<?php
$values = array(
JHTML::_('select.option', 0,
JText::_('ALL_VENDORS')),
JHTML::_('select.option', 1,
JText::_('HIKAM_VENDORS_WITH_UNPAID_ORDERS')),
);
echo JHTML::_('select.genericlist', $values,
'filter_vendors_unpaid', '
onchange="this.form.submit();"', 'value',
'text', @$this->pageInfo->filter->vendors_unpaid);
?>
</div>
</div>
<table class="adminlist table table-striped table-hover">
<thead>
<tr>
<th class="hikamarket_vendor_num_title title
titlenum"><?php echo JText::_( 'HIKA_NUM'
);?></th>
<th class="hikamarket_vendor_select_title title
titlebox">
<input type="checkbox" name="toggle"
value="" onclick="hikashop.checkAll(this);" />
</th>
<th class="hikamarket_vendor_name_title
title"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_NAME'),
'a.vendor_name', $this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_vendor_email_title
title"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_EMAIL'),
'a.vendor_email',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="title titletoggle"><?php
if($this->config->get('market_mode','fee')
== 'fee') {
echo JText::_('ORDERS_UNPAID');
} else {
echo JText::_('ORDERS_UNINVOICED');
}
?></th>
<th class="title titletoggle"><?php
echo JHTML::_('grid.sort',
JText::_('HIKA_PUBLISHED'), 'a.vendor_published',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_vendor_id_title title"><?php
echo JHTML::_('grid.sort', JText::_('ID'),
'a.vendor_id', $this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="7">
<?php echo $this->pagination->getListFooter(); ?>
<?php echo $this->pagination->getResultsCounter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php
$myUrl =
urlencode(base64_encode(hikamarket::completeLink('vendor', false,
true, true)));
$k = 0;
for($i = 0,$a = count($this->rows); $i < $a; $i++) {
$row =& $this->rows[$i];
?>
<tr class="row<?php echo $k; ?>">
<td class="hikamarket_vendor_num_value"
align="center"><?php
echo $this->pagination->getRowOffset($i);
?></td>
<td class="hikamarket_vendor_select_value"><?php
echo JHTML::_('grid.id', $i, $row->vendor_id );
?></td>
<td class="hikamarket_vendor_name_value">
<a href="<?php echo
hikamarket::completeLink('vendor&task=edit&cid[]='.$row->vendor_id.'&cancel_redirect='.$myUrl);
?>"><?php echo $this->escape($row->vendor_name);
?></a>
</td>
<td class="hikamarket_vendor_email_value"><?php
echo $this->escape($row->vendor_email);
?></td>
<td class="hikamarket_vendor_unpaid_value"><?php
if($this->config->get('market_mode','fee') ==
'fee') {
echo $row->number_unpaid . ' - ' .
$this->currencyClass->format($row->price_unpaid,
$row->vendor_currency_id);
} else {
echo $row->number_unpaid . ' - ' .
$this->currencyClass->format($row->price_full -
$row->price_unpaid, $row->vendor_currency_id);
}
?></td>
<td class="hikamarket_vendor_publish_value"
align="center"><?php
$publishedid = 'vendor_published-'.$row->vendor_id;
if($this->manage) {
echo $this->toggleClass->toggle($publishedid,
(int)$row->vendor_published, 'vendor');
} else {
echo $this->toggleClass->display('activate',
$row->vendor_published);
}
?></td>
<td class="hikamarket_vendor_id_value"
align="center"><?php
echo (int)$row->vendor_id;
?></td>
</tr>
<?php
$k = 1 - $k;
}
?>
</tbody>
</table>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="<?php echo @$this->task; ?>" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo
$this->pageInfo->filter->order->value; ?>" />
<input type="hidden" name="filter_order_Dir"
value="<?php echo $this->pageInfo->filter->order->dir;
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/vendormarket/tmpl/options.php000064400000010276151160562460013576
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><dl class="hika_options">
<?php
if((int)$this->config->get('vendor_chroot_category', 0) ==
2) { ?>
<dt class="hikamarket_vendor_opt_root"><label
for="data[vendor][vendor_params][vendor_root_category]"><?php
echo JText::_('HIKAM_VENDOR_ROOT_CATEGORY');
?></label></dt>
<dd class="hikamarket_vendor_opt_root"><?php
echo $this->nameboxType->display(
'data[vendor][vendor_params][vendor_root_category]',
@$this->vendor->vendor_params->vendor_root_category,
hikamarketNameboxType::NAMEBOX_SINGLE,
'category',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>'
)
);
?></dd>
<?php } ?>
<?php if(empty($this->vendor->vendor_id) ||
$this->vendor->vendor_id > 1) { ?>
<dt class="hikamarket_vendor_opt_invoice"><label
for="data_vendor_vendor_params_invoice_number_format"><?php
echo JText::_('INVOICE_NUMBER_FORMAT');
?></label></dt>
<dd class="hikamarket_vendor_opt_invoice"><?php
if(hikashop_level(1)) {
$format =
@$this->vendor->vendor_params->invoice_number_format;
?><input class="inputbox" type="text"
name="data[vendor][vendor_params][invoice_number_format]"
value="<?php echo $this->escape($format); ?>"
id="data_vendor_vendor_params_invoice_number_format"/><?php
} else {
echo '<small
style="color:red">'.JText::_('ONLY_HIKASHOP_COMMERCIAL').'</small>';
}
?></dd>
<?php } ?>
<dt class="hikamarket_vendor_opt_paypal"><label
for="data_vendor_vendor_params_paypal_email"><?php echo
JText::_('PAYPAL_EMAIL'); ?></label></dt>
<dd class="hikamarket_vendor_opt_paypal">
<input type="text"
name="data[vendor][vendor_params][paypal_email]"
value="<?php echo
@$this->vendor->vendor_params->paypal_email; ?>"
id="data_vendor_vendor_params_paypal_email"/>
</dd>
<dt class="hikamarket_vendor_opt_productlimit"><label
for="data_vendor_vendor_params_product_limitation"><?php
echo JText::_('VENDOR_PRODUCT_LIMITATION');
?></label></dt>
<dd class="hikamarket_vendor_opt_productlimit">
<input type="text"
name="data[vendor][vendor_params][product_limitation]"
value="<?php echo $this->escape(
@$this->vendor->vendor_params->product_limitation ); ?>"
id="data_vendor_vendor_params_product_limitation"/>
</dd>
<dt class="hikamarket_vendor_opt_notif"><label
for="data_vendor_vendor_params_notif_order_statuses_text"><?php
echo JText::_('HIKAM_NOTIFICATION_STATUSES_FILTER');
?></label></dt>
<dd class="hikamarket_vendor_opt_notif"><?php
if(!empty($this->vendor->vendor_params->notif_order_statuses)
&&
is_string($this->vendor->vendor_params->notif_order_statuses)) {
$this->vendor->vendor_params->notif_order_statuses =
explode(',',
$this->vendor->vendor_params->notif_order_statuses);
foreach($this->vendor->vendor_params->notif_order_statuses as
&$status) {
$status = trim($status);
}
unset($status);
}
echo $this->nameboxType->display(
'data[vendor][vendor_params][notif_order_statuses]',
@$this->vendor->vendor_params->notif_order_statuses,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'order_status',
array(
'delete' => true,
'sort' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></dd>
<dt class="hikamarket_vendor_opt_extracat"><label
for="data_vendor_vendor_params_extra_categories_text"><?php
echo JText::_('HIKAM_VENDOR_EXTRA_CATEGORIES');
?></label></dt>
<dd class="hikamarket_vendor_opt_extracat"><?php
$extra_categories = array();
if(!empty($this->vendor->vendor_params->extra_categories))
$extra_categories = explode(',',
$this->vendor->vendor_params->extra_categories);
echo $this->nameboxType->display(
'data[vendor][vendor_params][extra_categories]',
$extra_categories,
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'category',
array(
'delete' => true,
'root' => 0,
'sort' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'force_data' => true
)
);
?></dd>
</dl>
views/vendormarket/tmpl/orders.php000064400000012707151160562460013402
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php if( !isset($this->embbed) ) { ?>
<div class="iframedoc"
id="iframedoc"></div>
<div>
<form action="<?php echo
hikamarket::completeLink('vendor&task=orders'); ?>"
method="post" name="adminForm" id="adminForm"
enctype="multipart/form-data">
<div class="hk-row-fluid">
<div class="hkc-md-12">
<?php
echo $this->loadHkLayout('search', array(
'id' => 'adminForm'
));
?>
</div>
<div class="hkc-md-12">
<!-- Filters -->
</div>
</div>
<?php } else { ?>
<div style="float:right; margin:3px;">
<a class="hikabtn hikabtn-info" href="<?php echo
hikamarket::completeLink("shop.order&order_type=sale&filter_vendor=".$this->vendor_id.'&cancel_redirect='.$this->cancelUrl);
?>">
<i class="fa fa-chevron-right"></i> <?php echo
JText::_('SEE_ALL');?>
</a>
</div>
<?php } ?>
<table class="adminlist pad5 table table-striped table-hover"
style="width:100%">
<thead>
<tr>
<?php if(!isset($this->embbed)) { ?>
<th class="hikamarket_order_num_title title
titlenum"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_NUM'),
'a.order_id', $this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<?php } ?>
<th class="hikamarket_order_id_title title"><?php
if(isset($this->embbed))
echo JText::_('ORDER_NUMBER');
else
echo JHTML::_('grid.sort',
JText::_('ORDER_NUMBER'), 'a.order_number',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_order_customer_title
title"><?php
if(isset($this->embbed))
echo JText::_('CUSTOMER');
else
echo JHTML::_('grid.sort', JText::_('CUSTOMER'),
'c.name', $this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_order_status_title
title"><?php
if(isset($this->embbed))
echo JText::_('ORDER_STATUS');
else
echo JHTML::_('grid.sort',
JText::_('ORDER_STATUS'), 'a.order_status',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_order_date_title title"><?php
if(isset($this->embbed))
echo JText::_('DATE');
else
echo JHTML::_('grid.sort', JText::_('DATE'),
'a.order_modified',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_order_vendor_total_title
title"><?php
if(isset($this->embbed))
echo JText::_('VENDOR_TOTAL');
else
echo JHTML::_('grid.sort',
JText::_('VENDOR_TOTAL'), 'a.order_vendor_price',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
<th class="hikamarket_order_total_title
title"><?php
if(isset($this->embbed))
echo JText::_('HIKASHOP_TOTAL');
else
echo JHTML::_('grid.sort',
JText::_('HIKASHOP_TOTAL'), 'a.order_full_price',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?></th>
</tr>
</thead>
<?php if(!isset($this->embbed)) { ?>
<tfoot>
<tr>
<td colspan="7">
<?php echo $this->pagination->getListFooter(); ?>
<?php echo $this->pagination->getResultsCounter(); ?>
</td>
</tr>
</tfoot>
<?php } ?>
<tbody>
<?php
$k = 0;
$i = 0;
foreach($this->orders as $order) {
?>
<tr class="row<?php echo $k; ?>">
<?php if(!isset($this->embbed)) { ?>
<td class="hikamarket_order_num_value"><?php
echo $this->pagination->getRowOffset($i);
?></td>
<?php } ?>
<td class="hikamarket_order_id_value">
<a href="<?php echo
hikamarket::completeLink('shop.order&task=edit&cid[]='.$order->order_id.'&cancel_redirect='.$this->cancelUrl);
?>"><?php echo $order->order_number; ?></a>
</td>
<td class="hikamarket_order_customer_value"><?php
echo $order->user_email;
?></td>
<td class="hikamarket_order_status_value"><span
class="order-label order-label-<?php echo
preg_replace('#[^a-z_0-9]#i', '_', str_replace('
','_',$order->order_status)); ?>"><?php
echo hikamarket::orderStatus($order->order_status);
?></span></td>
<td class="hikamarket_order_date_value"><?php
echo hikamarket::getDate($order->order_created,'%Y-%m-%d
%H:%M');
?></td>
<td
class="hikamarket_order_vendor_total_value"><?php
echo
$this->currencyHelper->format($order->order_vendor_price,
$order->order_currency_id);
?></td>
<td class="hikamarket_order_total_value"><?php
echo $this->currencyHelper->format($order->order_full_price,
$order->order_currency_id);
?></td>
</tr>
<?php
$i++;
$k = 1 - $k;
}
?>
</tbody>
</table>
<?php if( !isset($this->embbed) ) { ?>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="orders" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo
$this->pageInfo->filter->order->value; ?>" />
<input type="hidden" name="filter_order_dir"
value="<?php echo $this->pageInfo->filter->order->dir;
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
</div>
<?php } ?>
views/vendormarket/tmpl/pay.php000064400000024553151160562460012677
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<form action="<?php echo
hikamarket::completeLink('vendor'); ?>"
method="post" name="adminForm"
id="adminForm">
<?php
if(!empty($this->orders)) {
?>
<div id="hikashop_backend_tile_edition">
<div class="hk-row-fluid">
<div class="hkc-md-2 hikashop_tile_block hkc-md-last
"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('PAY_RESULT');
?></div>
<dl class="hikamarket_pay_result">
<dt><?php echo JText::_('HIKASHOP_TOTAL');
?></dt>
<dd><span id="hikamarket_pay_total"><?php echo
$this->currencyHelper->format(0,
$this->vendor->vendor_currency_id); ?></span></dd>
<dt><?php echo JText::_('HIKA_TYPE');
?></dt>
<dd><span id="hikamarket_pay_type"><?php
echo JText::_('HIKA_NONE');
?></span></dd>
</dl>
</div></div>
<div class="hkc-md-10 hikashop_tile_block"><div>
<div class="hikashop_tile_title"><?php
echo JText::_('ORDERS');
?></div>
<table class="adminlist pad5 table table-striped table-hover"
style="width:100%">
<thead>
<tr>
<th class="title titlebox"><input
type="checkbox" name="toggle" value=""
onclick="window.localPage.updateVendorTotal(this);"
/></th>
<th class="hikamarket_order_id_title title"><?php
echo JText::_('ORDER_NUMBER');
?></th>
<th class="hikamarket_order_customer_title
title"><?php
echo JText::_('CUSTOMER');
?></th>
<th class="hikamarket_order_status_title
title"><?php
echo JText::_('ORDER_STATUS');
?></th>
<th class="hikamarket_order_date_title title"><?php
echo JText::_('DATE');
?></th>
<th class="hikamarket_order_total_title title"><?php
echo JText::_('HIKASHOP_TOTAL');
?></th>
<th class="hikamarket_order_vendor_total_title
title"><?php
echo JText::_('VENDOR_TOTAL');
?></th>
</tr>
</thead>
<tbody>
<?php
$k = 0;
$i = 0;
foreach($this->orders as $order) {
?>
<tr class="row<?php echo $k; ?>"
onclick="if(window.localPage.cancelRow) {window.localPage.cancelRow =
false; return false;} hikamarket.checkRow('cb<?php echo $i;
?>'); window.localPage.getVendorTotal();">
<td align="center">
<input type="checkbox"
onchange="if(window.hkmCA&&window.hkmCA===true){return true;}
window.localPage.getVendorTotal()"
onclick="if(window.hkmCA&&window.hkmCA===true){return true;}
this.clicked=true; this.checked=!this.checked" value="<?php
echo $order->order_transaction_id;?>" name="orders[]"
id="cb<?php echo $i;?>"/>
</td>
<td class="hikamarket_order_id_value"
align="center">
<a onclick="return window.localPage.openInvoice(this, <?php
echo (int)$order->order_id; ?>);" href="<?php echo
hikamarket::completeLink('shop.order&task=edit&cid[]='.$order->order_id.'&cancel_redirect='.$this->cancelUrl);
?>"><?php
if(!empty($order->order_number)) {
echo $order->order_number;
} else {
echo '<em>' . JText::_('HIKA_NONE') .
'</em>';
}
?></a>
<?php
if((int)$order->order_transaction_valid == 2)
echo ' - ' . JText::_('HIKAM_ORDER_ADJUSTMENT');
?>
</td>
<td class="hikamarket_order_customer_value"><label
for"cb<?php echo $i; ?>"><?php
echo $order->user_email;
?></label></td>
<td class="hikamarket_order_status_value"><?php
echo $order->order_transaction_status;
?></td>
<td class="hikamarket_order_date_value"><?php
echo hikamarket::getDate($order->order_transaction_created,
'%Y-%m-%d %H:%M');
?></td>
<td class="hikamarket_order_total_value"><?php
if($order->order_full_price !== null)
echo $this->currencyHelper->format($order->order_full_price,
$order->order_currency_id);
?></td>
<td
class="hikamarket_order_vendor_total_value"><?php
if($this->feeMode || $order->order_transaction_price < 0 ||
$order->order_full_price === null)
$convertedPrice =
$this->currencyHelper->convertUniquePrice($order->order_transaction_price,
$order->order_transaction_currency_id,
$this->vendor->vendor_currency_id);
else
$convertedPrice =
$this->currencyHelper->convertUniquePrice($order->order_full_price
- $order->order_transaction_price,
$order->order_transaction_currency_id,
$this->vendor->vendor_currency_id);
echo $this->currencyHelper->format($convertedPrice,
$this->vendor->vendor_currency_id);
?><div id="vendorTotalInCurrency<?php echo $i;?>"
style="display:none;"><?php
echo $convertedPrice;
?></div></td>
</tr>
<?php
$i++;
$k = 1 - $k;
}
?>
</tbody>
</table>
</div></div>
</div>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.triggerVendorTotal = null;
window.localPage.getVendorTotal = function(updateCheck) {
if(window.localPage.triggerVendorTotal != null)
clearTimeout(window.localPage.triggerVendorTotal);
if(updateCheck === undefined)
updateCheck = false;
window.localPage.triggerVendorTotal = setTimeout(function() {
var d = document, chk = null, cpt = 0, total = 0, url = "";
for(var i = <?php echo count($this->orders) - 1; ?>; i >= 0;
i--) {
chk = d.getElementById('cb'+i);
if(chk && chk.checked) {
cpt++;
var div = d.getElementById("vendorTotalInCurrency" + i);
if(div) {
var v = parseFloat(div.innerHTML);
if(!isNaN(v))
total += v;
}
}
}
if(updateCheck) {
if(document.adminForm.form)
document.adminForm.form.boxchecked = cpt;
else
document.adminForm.boxchecked = cpt;
}
var urlTotal = total;
if(urlTotal < 0)
urlTotal = -urlTotal;
url = "<?php echo
hikamarket::completeLink('vendor&task=getPrice¤cy_id='.$this->vendor->vendor_currency_id,
true, false, true); ?>&value=" + urlTotal;
window.Oby.xRequest(url, {update: "hikamarket_pay_total"},
function(xhr){
var el = document.getElementById("hikamarket_pay_type");
if(total == 0) {
el.innerHTML = "<?php echo JText::_('HIKA_NONE',
true); ?>";
} else if(total > 0) {
el.innerHTML = "<?php echo JText::_('ORDER', true);
?>";
} else {
el.innerHTML = "<?php echo JText::_('INVOICE', true);
?>";
}
});
}, 500 );
};
window.localPage.updateVendorTotal = function(el) {
window.hkmCA=true;
hikashop.checkAll(el);
window.hkmCA=false;
setTimeout(function(){ window.localPage.getVendorTotal(); }, 10);
return true;
};
(function(){ window.localPage.getVendorTotal(true); })();
</script>
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="cid"
value="<?php echo @$this->vendor->vendor_id; ?>"
/>
<?php
} else {
?>
<!-- FILTERS -->
<div>
<label for="period_start"><?php echo
JText::_('FROM'); ?></label>
<?php echo JHTML::_('calendar',
hikamarket::getDate((@$this->pageInfo->filter->filter_start ?
@$this->pageInfo->filter->filter_start:''), '%d %B
%Y'), 'filter_start', 'period_start',
'%Y-%m-%d', array('size' => '10')); ?>
<label for="period_end"><?php echo
JText::_('TO'); ?></label>
<?php echo JHTML::_('calendar',
hikamarket::getDate((@$this->pageInfo->filter->filter_end ?
@$this->pageInfo->filter->filter_end:''), '%d %B
%Y'), 'filter_end', 'period_end',
'%Y-%m-%d', array('size' => '10')); ?>
<button style="vertical-align:top" class="btn
btn-success" onclick="this.form.submit();"><?php
if(HIKASHOP_BACK_RESPONSIVE)
echo '<span
class="icon-filter"></span>';
else
echo JText::_('APPLY');
?></button>
</div>
<table class="adminlist pad5 table table-striped table-hover"
style="width:100%">
<thead>
<tr>
<th class="title titlebox"></th>
<th class="hikamarket_pay_vendor_title title"><?php
echo JText::_('VENDOR_NAME');
?></th>
<th class="hikamarket_pay_orders_title title"><?php
echo JText::_('ORDERS_UNPAID');
?></th>
<th class="hikamarket_order_vendor_total_title
title"><?php
echo JText::_('VENDOR_TOTAL');
?></th>
<th class="title titlebox"></th>
</tr>
</thead>
<tbody>
<?php
$nb_valid_vendors = 0;
$i = 0;
$k = 0;
foreach($this->vendors as $vendor) {
if($vendor->nb_orders > 0)
$nb_valid_vendors++;
?>
<tr class="row<?php echo $k; ?>">
<td><?php
echo $this->toggleHelper->display('activate',
$vendor->vendor_published);
?></td>
<td><?php
echo $vendor->vendor_name;
?></td>
<td><?php
echo $vendor->nb_orders;
?></td>
<td><?php
echo
$this->currencyHelper->format($vendor->total_vendor_price,
$vendor->vendor_currency_id);
?></td>
<td>
<input type="hidden" name="cid[]"
value="<?php echo (int)$vendor->vendor_id; ?>" />
<a href="#delete" onclick="return
window.localPage.deleteVendorRow(this);"><img src="<?php
echo HIKAMARKET_IMAGES; ?>icon-16/delete.png"
alt="X"/></a>
</td>
</tr>
<?php
$k = 1 - $k;
}
?>
</tbody>
</table>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.deleteVendorRow = function(el) {
if(!confirm("<?php echo
JText::_('PLEASE_CONFIRM_DELETION'); ?>"))
return false;
window.hikashop.deleteRow(el);
document.adminForm.submit();
return false;
}
</script>
<input type="hidden" name="boxchecked"
value="<?php echo $nb_valid_vendors; ?>" />
<?php
}
?>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="<?php if(empty($this->orders)) echo 'pay';
?>" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
<?php
echo $this->popup->display(
'',
JText::_('HIKASHOP_ORDER'),
hikamarket::completeLink('dashboard', true),
'hikamarket_pay_shoporder_popup',
750, 460, 'style="display:none;"', '',
'link'
);
?>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.cancelRow = false;
window.localPage.openInvoice = function(el, order_id) {
window.localPage.cancelRow = true;
window.hikamarket.submitFct = function(data) {
window.hikamarket.closeBox(); };
window.hikamarket.openBox('hikamarket_pay_shoporder_popup',
'<?php echo
hikamarket::completelink('shop.order&task=invoice&type=full&order_id=ORDERID',
true, false, true); ?>'.replace('ORDERID', order_id));
return false;
};
</script>
views/vendormarket/tmpl/paymanual.php000064400000006623151160562460014073
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if($this->payment_method == 'paypal') {
hikaInput::get()->set('noform', 1);
?>
<form id="hikashop_paypal_form"
name="hikashop_paypal_form" action="<?php echo
$this->return_url;?>" method="POST"
target="_blank"
onsubmit="window.localPage.afterSubmit();">
<?php
foreach($this->vars as $name => $value ) {
echo '<input type="hidden"
name="'.$name.'"
value="'.htmlspecialchars((string)$value).'"
/>';
}
?>
<div><?php
echo JText::_('PAYPAL_PAYMENT_OPEN_NEW_WINDOW');
?></div>
<div id="hikashop_paypal_end_image"
class="hikashop_paypal_end_image">
<input id="hikashop_paypal_button" type="submit"
class="hikabtn hikabtn-primary" value="<?php echo
JText::_('PAY_NOW');?>" name=""
alt="<?php echo JText::_('PAY_NOW');?>" />
</div>
</form>
<script type="text/javascript">
<!--
if(!window.localPage)
window.localPage = {};
window.localPage.afterSubmit = function() {
setTimeout(function() {
window.parent.hikamarket.submitBox({result:"pending..."});
}, 2000);
}
</script>
<?php
return;
}
?>
<fieldset>
<div class="toolbar" id="toolbar">
<div style="float:right">
<button class="hikabtn hikabtn-success"
style="margin:5px;" type="button"
onclick="submitbutton('paymanual');"><i
class="fa fa-save"></i> <?php echo
JText::_('OK'); ?></button>
</div>
<button class="hikabtn hikabtn-danger"
style="margin:5px;" type="button"
onclick="if(window.parent) { window.parent.hikamarket.closeBox(); }
return false;"><i class="fa fa-times"></i>
<?php echo JText::_('HIKA_CANCEL'); ?></button>
</div>
</fieldset>
<form id="adminForm" name="adminForm"
action="<?php echo
hikamarket::completeLink('vendor&task=paymanual');
?>" method="POST">
<dl class="hikam_options">
<dt><?php
echo JText::_('ORDER_NUMBER');
?></dt>
<dd><?php
echo $this->escape($this->order->order_number);
?></dd>
<dt><?php
echo JText::_('HIKASHOP_TOTAL');
?></dt>
<dd><?php
echo
$this->currencyClass->format($this->order->order_full_price,
$this->order->order_currency_id);
?></dd>
<dt><?php
echo JText::_('HIKA_VENDOR');
?></dt>
<dd><?php
echo $this->escape($this->vendor->vendor_name);
?></dd>
<dt><?php
echo JText::_('ORDER_STATUS');
?></dt>
<dd><?php
echo $this->escape($this->order->order_status);
?></dd>
<dt><?php
echo JText::_('NEW_ORDER_STATUS');
?></dt>
<dd><?php
echo $this->escape($this->confirmed_status);
?></dd>
<dt><?php
echo JText::_('NOTIFY_VENDOR');
?></dt>
<dd><?php
echo JHTML::_('hikaselect.booleanlist',
'data[notify]', '', 0);
?></dd>
</dl>
<input type="hidden" name="payment_method"
value="manual" />
<input type="hidden" name="vendor_id"
value="<?php echo (int)$this->vendor->vendor_id; ?>"
/>
<input type="hidden" name="order_id"
value="<?php echo (int)$this->order->order_id; ?>"
/>
<input type="hidden" name="data[validation]"
value="1" />
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="paymanual" />
<input type="hidden" name="ctrl"
value="vendor" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
views/vendormarket/tmpl/payreport.php000064400000013137151160562460014127
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><div class="iframedoc"
id="iframedoc"></div>
<table class="adminlist pad5 table table-striped table-hover
table-bordered" style="width:100%">
<thead>
<tr>
<th><?php echo JText::_('ORDER_NUMBER');
?></th>
<th><?php echo JText::_('VENDOR_PAY_TYPE');
?></th>
<th><?php echo JText::_('VENDOR_NAME');
?></th>
<th><?php echo JText::_('HIKASHOP_TOTAL');
?></th>
<th><?php echo JText::_('ORDER_STATUS');
?></th>
<th><?php echo JText::_('PAY_VENDOR');
?></th>
</tr>
</thead>
<tbody>
<?php
foreach($this->orders as $order) {
?>
<tr>
<td>
<a onclick="return window.localPage.openInvoice(this, <?php
echo (int)$order->order_id; ?>);" href="<?php echo
hikamarket::completeLink('shop.order&task=edit&cid[]='.$order->order_id.'&cancel_redirect='.$this->cancelUrl);
?>"><i class="fas fa-receipt"></i>
<?php echo $order->order_number; ?></a>
<a style="margin-left:1em;" href="<?php echo
hikamarket::completeLink('shop.order&task=edit&cid[]='.$order->order_id.'&cancel_redirect='.$this->cancelUrl);
?>" target="_blank"><i class="fa
fa-external-link-alt"></i></a>
</td>
<td><?php
switch($order->order_type) {
case 'vendorpayment':
echo JText::_('VENDOR_PAY_PAYMENT');
break;
case 'sale':
echo JText::_('VENDOR_PAY_INVOICE');
break;
default:
echo $this->escape($order->order_type);
break;
}
?></td>
<td><?php
echo $this->escape($order->vendor_name);
?></td>
<td><?php
echo $this->currencyClass->format($order->order_full_price,
$order->order_currency_id);
?></td>
<td><span id="hikamarket_payvendor_order_<?php echo
$order->order_id; ?>"><?php
echo hikamarket::orderStatus($order->order_status);
?></span> <div class="toggle_loading"><a
class="refresh" href="#refresh" onclick="return
window.localPage.refreshOrder(this, <?php echo (int)$order->order_id;
?>);"></a></div></td>
<td><?php
if(hikamarket::toFloat($order->order_full_price) > 0.0 &&
$order->order_type == 'vendorpayment' &&
$order->order_status == $this->created_status) {
$vendor_params = (!empty($order->vendor_params) &&
is_string($order->vendor_params) ) ?
hikamarket::unserialize($order->vendor_params) :
$order->vendor_params;
if(!empty($vendor_params->paypal_email)) { ?>
<span id="hikamarket_payvendor_paypal_<?php echo
$order->order_id; ?>">
<a class="hikabtn hikabtn-info" onclick="return
window.localPage.payVendor(this, <?php echo (int)$order->order_id;
?>, <?php echo (int)$order->vendor_id; ?>,
'paypal');" href="#"><i class="fab
fa-paypal"></i> <?php
echo JText::_('HIKAM_PAY_PAYPAL');
?></a>
</span>
<?php
}
?><a class="hikabtn hikabtn-info" onclick="return
window.localPage.payVendor(this,<?php echo (int)$order->order_id;
?>,<?php echo (int)$order->vendor_id; ?>);"
href="#"><i class="fa
fa-money-bill"></i> <?php echo
JText::_('HIKAM_PAY_MANUAL'); ?></a><?php
} else {
echo '-';
}
?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php
echo $this->popup->display(
'',
JText::_('HIKASHOP_ORDER'),
hikamarket::completeLink('dashboard', true),
'hikamarket_pay_shoporder_popup',
750, 460, 'style="display:none;"', '',
'link'
);
echo $this->popup->display(
'',
JText::_('PAY_VENDOR'),
hikamarket::completeLink('dashboard', true),
'hikamarket_pay_payment_popup',
750, 460, 'style="display:none;"', '',
'link'
);
?>
<script type="text/javascript">
if(!window.localPage)
window.localPage = {};
window.localPage.openInvoice = function(el, order_id) {
window.hikamarket.submitFct = function(data) {
window.hikamarket.closeBox(); };
window.hikamarket.openBox('hikamarket_pay_shoporder_popup',
'<?php echo
hikamarket::completelink('shop.order&task=invoice&type=full&order_id=ORDERID',
true, false, true); ?>'.replace('ORDERID', order_id));
return false;
};
window.localPage.refreshOrder = function(el, order_id) {
var span = document.getElementById('hikamarket_payvendor_order_'
+ order_id);
if(!span)
return false;
el.parentNode.className = 'toggle_onload';
window.Oby.xRequest('<?php echo
hikamarket::completeLink('order&task=checkstatus&order_id=ORDERID&tmpl=json',
false, false, true); ?>'.replace('ORDERID', order_id),
{}, function(xhr) {
span.innerHTML = xhr.responseText;
el.parentNode.className = 'toggle_loading';
});
return false;
};
window.localPage.payVendor = function(el, order_id, vendor_id, mode) {
if(mode === undefined)
mode = 'manual';
if(mode != 'manual' && mode != 'paypal')
mode = 'manual';
window.hikamarket.submitFct = function(data) {
var el = document.getElementById('hikamarket_payvendor_order_'
+ order_id);
if(el && data.result)
el.innerHTML = data.result;
if(mode == 'paypal') {
var link =
document.getElementById('hikamarket_payvendor_paypal_' +
order_id);
if(link)
link.innerHTML = '<?php echo
str_replace(array('\\','\''),
array('\\\\','\\\''),
JText::_('HIKAM_PAY_PAYPAL_PENDING')); ?>';
}
window.hikamarket.closeBox();
};
var url = '<?php echo
hikamarket::completelink('vendor&task=paymanual&order_id=ORDERID&vendor_id=VENDORID&payment_method=PAYMENTMETHOD',
true, false, true); ?>'.replace('ORDERID',
order_id).replace('VENDORID',
vendor_id).replace('PAYMENTMETHOD', mode);
window.hikamarket.openBox('hikamarket_pay_payment_popup', url);
return false;
};
</script>
views/vendormarket/tmpl/products.php000064400000007434151160562460013750
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php if( !isset($this->embbed) ) { ?>
<div class="iframedoc"
id="iframedoc"></div>
<div>
<form action="<?php echo
hikamarket::completeLink('vendor&task=products'); ?>"
method="post" name="adminForm" id="adminForm"
enctype="multipart/form-data">
<div class="hk-row-fluid">
<div class="hkc-md-6">
<?php
echo $this->loadHkLayout('search', array(
'id' => 'adminForm'
));
?>
</div>
<div class="hkc-md-6">
<!-- Filters -->
</div>
</div>
<?php } else { ?>
<div style="float:right;margin:3px;">
<a class="hikabtn hikabtn-info" href="<?php echo
hikamarket::completeLink("vendor&task=products&cid[]=".$this->vendor_id);
?>">
<i class="fa fa-chevron-right"></i> <?php echo
JText::_('SEE_ALL');?>
</a>
</div>
<?php } ?>
<table class="adminlist pad5 table table-striped table-hover"
style="width:100%">
<thead>
<tr>
<?php if(!isset($this->embbed)) { ?>
<th class="hikamarket_product_num_title title
titlenum">
<?php echo JHTML::_('grid.sort',
JText::_('HIKA_NUM'), 'a.order_id',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value); ?>
</th>
<?php } ?>
<th class="hikamarket_product_name_title title">
<?php
if(isset($this->embbed))
echo JText::_('HIKA_NAME');
else
echo JHTML::_('grid.sort', JText::_('HIKA_NAME'),
'a.product_name',
$this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?>
</th>
<th class="hikamarket_product_id_title title">
<?php
if(isset($this->embbed))
echo JText::_('ID');
else
echo JHTML::_('grid.sort', JText::_('ID'),
'a.product_id', $this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value);
?>
</th>
</tr>
</thead>
<?php if( !isset($this->embbed) ) { ?>
<tfoot>
<tr>
<td colspan="3">
<?php echo $this->pagination->getListFooter(); ?>
<?php echo $this->pagination->getResultsCounter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php
}
$k = 0;
$i = 0;
foreach($this->products as $product) {
?>
<tr class="row<?php echo $k; ?>">
<?php if(!isset($this->embbed)) { ?>
<td class="hikamarket_product_num_value"
align="center">
<?php
if( !isset($this->embbed) )
echo $this->pagination->getRowOffset($i);
else
echo ($i+1);
?>
</td>
<?php } ?>
<td class="hikamarket_product_select_value">
<a href="<?php echo
hikamarket::completeLink('shop.product&task=edit&cid[]='.$product->product_id.'&cancel_redirect='.$this->cancelUrl);
?>"><?php
if(!empty($product->product_name))
echo $product->product_name;
else
echo
'<em>'.JText::_('NO_NAME').'</em>';
?></a>
</td>
<td class="hikamarket_product_id_value"
align="center">
<?php echo $product->product_id; ?>
</td>
</tr>
<?php
$i++;
$k = 1 - $k;
}
?>
</table>
<?php if( !isset($this->embbed) ) { ?>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="products" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="cid"
value="<?php echo $this->vendor_id ?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo
$this->pageInfo->filter->order->value; ?>" />
<input type="hidden" name="filter_order_Dir"
value="<?php echo $this->pageInfo->filter->order->dir;
?>" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
</div>
<?php } ?>
views/vendormarket/tmpl/reports.php000064400000002521151160562470013574
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
if(!empty($this->statistics)) {
?>
<div class="hikamarket_cpanel_statistics_top
hk-row-fluid">
<?php
$s = 0;
foreach($this->statistics as $stat) {
if(empty($stat['published']))
continue;
$key = $stat['key'];
if(empty($stat['container']) ||
!in_array($stat['container'], array(3,4,6,8,9,12)))
$stat['container'] = 12;
if($s < 12 && ($s + (int)$stat['container']) >
12)
echo '<div class="clearfix"></div>';
?>
<div class="hkc-md-<?php echo $stat['container'];
?>">
<div class="hikamarket_panel hikamarket_panel_stats">
<div class="hikamarket_panel_heading"><?php echo
$stat['label']; ?></div>
<div id="hikamarket_dashboard_stat_<?php echo $key;
?>" class="hikamarket_panel_body"><?php
echo $this->statisticsClass->display($stat);
?></div>
</div>
</div>
<?php
if($stat['container'] == 12) {
$s = 0;
continue;
}
if(($s + (int)$stat['container']) == 12)
echo '<div class="clearfix"></div>';
$s += (int)$stat['container'];
if($s >= 12) $s = 0;
}
?>
</div>
<?php
}
views/vendormarket/tmpl/searchfields.php000064400000005100151160562470014526
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><script language="javascript"
type="text/javascript">
<!--
var selectedContents = [], allElements = <?php echo
count($this->rows);?>;
<?php
foreach($this->rows as $oneRow){
if(!empty($oneRow->selected))
echo
' selectedContents["'.$oneRow->namekey.'"] =
"content";'."\r\n";
}
?>
function applyContent(contentid,rowClass) {
var d = document;
if(selectedContents[contentid]) {
d.getElementById('content'+contentid).className = rowClass;
delete selectedContents[contentid];
}else{
d.getElementById('content'+contentid).className =
'selectedrow';
selectedContents[contentid] = 'content';
}
}
function insertTag() {
var tag = '', d = window.top.document;
for(var i in selectedContents) {
if(selectedContents[i] == 'content') {
allElements--;
if(tag != '')
tag += ',';
tag = tag + i;
}
}
d.getElementById('<?php echo $this->controlName;
?>fields').value = tag;
d.getElementById('link<?php echo $this->controlName;
?>fields').href = 'index.php?option=<?php echo
HIKAMARKET_COMPONENT
?>&tmpl=component&ctrl=vendor&task=searchfields&control=<?php
echo $this->controlName; ?>&values='+tag;
window.top.hikashop.closeBox();
}
//-->
</script>
<style type="text/css">
table.adminlist tr.selectedrow td {
background-color:#FDE2BA;
}
</style>
<form action="index.php?option=<?php echo HIKAMARKET_COMPONENT
?>" method="post" name="adminForm"
id="adminForm">
<div style="float:right;margin-bottom : 10px">
<button class="btn" id="insertButton"
onclick="insertTag(); return false;"><?php echo
JText::_('HIKA_APPLY'); ?></button>
</div>
<div style="clear:both"></div>
<table class="adminlist table table-striped"
cellpadding="1">
<thead>
<tr>
<th class="title"><?php echo 'Field';
?></th>
<th class="title titleid"><?php echo
JText::_('ID'); ?></th>
</tr>
</thead>
<tbody>
<?php
$k = 0;
foreach($this->rows as $i => $row){
?>
<tr class="<?php echo empty($row->selected) ?
('row'.$k) : 'selectedrow'; ?>"
id="content<?php echo $row->namekey; ?>"
onclick="applyContent('<?php echo
$row->namekey."','row".$k."'"?>);"
style="cursor:pointer;">
<td><?php echo $row->namekey; ?></td>
<td align="center"><?php echo $i; ?></td>
</tr>
<?php
$k = 1-$k;
}
?>
</tbody>
</table>
</form>
views/vendormarket/tmpl/selection.php000064400000012540151160562470014065
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php if( !$this->singleSelection ) { ?>
<fieldset>
<div class="toolbar" id="toolbar"
style="float: right;">
<button class="btn" type="button"
onclick="if(document.adminForm.boxchecked.value==0){alert('<?php
echo JText::_('PLEASE_SELECT_SOMETHING', true);
?>');}else{submitbutton('useselection');}"><img
src="<?php echo HIKASHOP_IMAGES; ?>add.png"/><?php
echo JText::_('OK'); ?></button>
</div>
</fieldset>
<?php } ?>
<div class="iframedoc"
id="iframedoc"></div>
<form action="index.php?option=<?php echo HIKAMARKET_COMPONENT
?>&ctrl=<?php echo
hikaInput::get()->getCmd('ctrl'); ?>"
method="post" name="adminForm"
id="adminForm">
<?php if(HIKASHOP_BACK_RESPONSIVE) { ?>
<div class="row-fluid">
<div class="span12">
<div class="input-prepend input-append">
<span class="add-on"><i
class="icon-filter"></i></span>
<input type="text" name="search"
id="search" value="<?php echo
$this->escape($this->pageInfo->search);?>"
onchange="this.form.submit();" />
<button class="btn"
onclick="this.form.limitstart.value=0;this.form.submit();"><i
class="icon-search"></i></button>
<button class="btn"
onclick="this.form.limitstart.value=0;document.getElementById('search').value='';this.form.submit();"><i
class="icon-remove"></i></button>
</div>
</div>
</div>
<?php } else { ?>
<table>
<tr>
<td width="100%">
<?php echo JText::_( 'FILTER' ); ?>:
<input type="text" name="search"
id="search" value="<?php echo
$this->escape($this->pageInfo->search);?>"
class="text_area"
onchange="document.adminForm.submit();" />
<button class="btn"
onclick="this.form.submit();"><?php echo JText::_(
'GO' ); ?></button>
<button class="btn"
onclick="document.getElementById('search').value='';this.form.submit();"><?php
echo JText::_( 'RESET' ); ?></button>
</td>
</tr>
</table>
<?php } ?>
<table class="adminlist table table-striped table-hover"
style="cell-spacing:1px">
<thead>
<tr>
<th class="title titlenum"><?php
echo JText::_( 'HIKA_NUM' );
?></th>
<?php if( !$this->singleSelection ) { ?>
<th class="title titlebox"><input
type="checkbox" name="toggle" value=""
onclick="hikashop.checkAll(this);" /></th>
<?php } ?>
<th class="title"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_NAME'),
'a.vendor_name',
$this->pageInfo->filter->order->dir,$this->pageInfo->filter->order->value
);
?></th>
<th class="title"><?php
echo JHTML::_('grid.sort', JText::_('HIKA_EMAIL'),
'a.vendor_email',
$this->pageInfo->filter->order->dir,$this->pageInfo->filter->order->value
);
?></th>
<th class="title"><?php
echo JHTML::_('grid.sort', JText::_( 'ID' ),
'a.vendor_id', $this->pageInfo->filter->order->dir,
$this->pageInfo->filter->order->value );
?></th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="10"><?php
echo $this->pagination->getListFooter();
echo $this->pagination->getResultsCounter();
?></td>
</tr>
</tfoot>
<tbody>
<?php
$k = 0;
for($i = 0, $a = count($this->rows); $i < $a; $i++) {
$row =& $this->rows[$i];
$lbl1 = ''; $lbl2 = '';
$extraTr = '';
if( $this->singleSelection ) {
$data = '{id:'.$row->vendor_id;
foreach($this->elemStruct as $s) {
if($s == 'id')
continue;
$data .= ','.$s.':\''.
str_replace(array('\'','"'),array('\\\'','\\"'),$row->$s).'\'';
}
$data .= '}';
$extraTr = ' style="cursor:pointer"
onclick="window.top.hikamarket.submitBox('.$data.');"';
} else {
$lbl1 = '<label for="cb'.$i.'">';
$lbl2 = '</label>';
$extraTr = '
onclick="hikamarket.checkRow(\'cb'.$i.'\');"';
}
if(!empty($this->pageInfo->search)) {
$row = hikamarket::search($this->pageInfo->search, $row,
'vendor_id');
}
?>
<tr class="row<?php echo $k; ?>"<?php echo
$extraTr; ?>>
<td align="center"><?php
echo $this->pagination->getRowOffset($i);
?></td>
<?php if( !$this->singleSelection ) { ?>
<td align="center">
<input type="checkbox" onclick="this.clicked=true;
this.checked=!this.checked" value="<?php echo
$row->vendor_id;?>" name="cid[]" id="cb<?php
echo $i;?>"/>
</td>
<?php } ?>
<td><?php
echo $lbl1 . $row->vendor_name . $lbl2;
?></td>
<td><?php
echo $lbl1 . $row->vendor_email . $lbl2;
?></td>
<td width="1%" align="center"><?php
echo $row->vendor_id;
?></td>
</tr>
<?php
$k = 1-$k;
}
?>
</tbody>
</table>
<input type="hidden" name="option"
value="<?php echo HIKAMARKET_COMPONENT; ?>" />
<input type="hidden" name="task"
value="selection" />
<input type="hidden" name="tmpl"
value="component" />
<input type="hidden" name="single"
value="<?php echo $this->singleSelection ? '1' :
'0'; ?>" />
<input type="hidden" name="ctrl"
value="<?php echo hikaInput::get()->getCmd('ctrl');
?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo
$this->pageInfo->filter->order->value; ?>" />
<input type="hidden" name="filter_order_Dir"
value="<?php echo $this->pageInfo->filter->order->dir;
?>" />
<?php echo JHTML::_('form.token'); ?>
</form>
views/vendormarket/tmpl/users.php000064400000011151151160562470013236
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><table id="hikamarket_vendor_users" class="adminlist
pad5 table table-striped table-hover"
style="width:100%">
<thead>
<tr>
<th class="hikamarket_user_id_title title"><?php
echo JText::_('ID');
?></th>
<th class="hikamarket_user_name_title title"><?php
echo JText::_('HIKA_NAME');
?></th>
<th class="hikamarket_user_email_title title"><?php
echo JText::_('HIKA_EMAIL');
?></th>
<th class="hikamarket_user_acl_title title"
style="width:3%"><?php
echo JText::_('HIKAM_ACL');
?></th>
<th class="hikamarket_user_icon_title title"
style="width:2%"><?php
echo hikamarket::tooltip(JText::_('ADD'), '',
'', '<button class="btn" onclick="return
window.vendorMgr.vendor_toggleUser(this);" type="button"
style="margin:0px;"><img style="margin:0px;"
src="'.HIKASHOP_IMAGES.'add.png"
style="vertical-align:middle"/></button>',
'', 0);
?></th>
</tr>
</thead>
<?php
$k = 0;
if(!empty($this->users)) {
foreach($this->users as $user) {
?>
<tr class="row<?php echo $k; ?>"
id="vendor_users_<?php echo $user->id; ?>">
<td align="center"><?php echo
$user->user_id;?></td>
<td><?php echo $user->name;?></td>
<td><?php echo $user->email;?></td>
<td align="center"><?php echo
$this->marketaclType->displayButton('user['.$user->user_id.'][user_access]',
@$user->user_vendor_access); ?></td>
<td align="center">
<a href="#" onclick="hikamarket.deleteRow(this);
return false;"><img src="<?php echo
HIKASHOP_IMAGES;?>delete.png" alt="<?php echo
JText::_('DELETE'); ?>"/></a>
<input type="hidden" name="data[users][]"
value="<?php echo $user->user_id;?>"/>
</td>
</tr>
<?php
$k = 1 - $k;
}
}
?>
<!-- Template line -->
<tr id="hikamarket_users_tpl" class="row<?php echo
$k; ?>" style="display:none;">
<td align="center">{id}</td>
<td>{name}</td>
<td>{email}</td>
<td align="center"><?php echo
$this->marketaclType->displayButton('user[{id}][user_access]',
'all'); ?></td>
<td align="center">
<a href="#" onclick="hikamarket.deleteRow(this);
return false;"><img src="<?php echo
HIKASHOP_IMAGES;?>delete.png" alt="<?php echo
JText::_('DELETE'); ?>"/></a>
<input type="hidden" name="{input_name}"
value="{id}"/>
</td>
</tr>
</table>
<div style="display:none;"
id="hikamarket_selector_vendor_user_line">
<?php
echo $this->nameboxType->display(
'',
'',
hikamarketNameboxType::NAMEBOX_MULTIPLE,
'user',
array(
'delete' => true,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'id' => 'hikamarket_add_users'
)
);
?>
<div style="clear:both;margin-top:4px;"></div>
<div style="float:right">
<button onclick="return
window.vendorMgr.vendor_addUser(this);" class="btn
btn-success"><img src="<?php echo HIKASHOP_IMAGES;
?>plus.png" alt=""
style="vertical-align:middle;"/> <?php echo
JText::_('HIKAM_ADD_VENDOR_USERS'); ;?></button>
</div>
<button onclick="return
window.vendorMgr.vendor_toggleUser(this);" class="btn
btn-danger"><img src="<?php echo HIKASHOP_IMAGES;
?>cancel.png" alt=""
style="vertical-align:middle;"/> <?php echo
JText::_('HIKA_CANCEL'); ;?></button>
<div style="clear:both"></div>
</div>
<script type="text/javascript">
if(!window.vendorMgr) window.vendorMgr = {};
window.vendorMgr.vendor_toggleUser = function(el) {
var d = document, element =
d.getElementById('hikamarket_selector_vendor_user_line');
if(element)
element.style.display = (element.style.display == 'none' ?
'' : 'none');
if(element && element.style.display == 'none') {
var box = window.oNameboxes['hikamarket_add_users'];
if(box)
box.clear();
}
return false;
};
window.vendorMgr.vendor_addUser = function(el, id) {
var box = window.oNameboxes['hikamarket_add_users'];
if(!box)
return window.vendorMgr.vendor_toggleUser(el);
var values = box.get(), htmlData = null;
box.clear();
if(values && values.length > 0) {
for(var i = 0; i < values.length; i++) {
var email = '';
if(box.data && box.data[ values[i].value ]) {
try {
email = box.data[ values[i].value ].user_email;
} catch(e) {}
}
htmlData = {
'input_name': 'data[users][]',
'id': values[i].value,
'name': values[i].name,
'email': email,
};
window.hikamarket.dupRow('hikamarket_users_tpl', htmlData);
}
}
return window.vendorMgr.vendor_toggleUser(el);
};
</script>
views/vendormarket/tmpl/useselection.php000064400000000440151160562500014570
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?>views/vendormarket/view.html.php000064400000116447151160562500013046
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class vendormarketViewVendormarket extends hikamarketView {
const ctrl = 'vendor';
const name = 'HIKA_VENDORS';
const icon = 'user-tie';
public function display($tpl = null, $params = null) {
$this->params =& $params;
$this->paramBase =
HIKAMARKET_COMPONENT.'.'.$this->getName();
$fct = $this->getLayout();
if(method_exists($this, $fct) && $this->$fct($params) ===
false)
return false;
parent::display($tpl);
}
public function listing($tpl = null, $mainVendor = false) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
hikamarket::setTitle(JText::_(self::name), self::icon, self::ctrl);
$config = hikamarket::config();
$this->assignRef('config', $config);
$shopConfig = hikamarket::config(false);
$main_currency = (int)$shopConfig->get('main_currency', 1);
$invoice_statuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
foreach($invoice_statuses as &$invoice_status) {
$invoice_status = $db->Quote($invoice_status);
}
unset($invoice_status);
$vendorOrderType = 'subsale';
$this->loadRef(array(
'toggleClass' => 'helper.toggle',
'currencyClass' => 'shop.class.currency'
));
$cfg = array(
'table' => 'vendor',
'main_key' => 'vendor_id',
'order_sql_value' => 'a.vendor_id'
);
$manage = true;
$this->assignRef('manage', $manage);
$page_filters = array(
'type' => 0,
'vendors_unpaid' => 0
);
$pageInfo = $this->getPageInfo($cfg['order_sql_value'],
'asc', $page_filters);
$filters = array();
$searchMap = array(
'vendor_name'
);
$order = '';
$join = '';
$extra_select = '';
$group = '';
if(!$mainVendor)
$filters[] = 'a.vendor_id > 1';
if($this->pageInfo->filter->vendors_unpaid == 1) {
$extra_select = ', COUNT(o.order_id) ';
$join .= ' INNER JOIN
'.hikamarket::table('shop.order').' AS o ON
o.order_vendor_id = a.vendor_id ';
$filters[] = 'o.order_vendor_paid = 0';
$filters[] = 'NOT(o.order_vendor_price = 0)';
$filters[] = '(o.order_type =
'.$db->Quote($vendorOrderType).' AND o.order_status IN
('.implode(',',$invoice_statuses).')) OR o.order_type =
'.$db->Quote('vendorrefund');
$group = ' GROUP BY a.vendor_id ';
}
$orderingAccept = array(
'a.vendor_id',
'a.vendor_name',
'a.vendor_published',
'a.vendor_email',
);
$this->processFilters($filters, $order, $searchMap, $orderingAccept);
$query = 'FROM
'.hikamarket::table($cfg['table']).' AS a
'.$join.$filters.$group.$order;
$db->setQuery('SELECT a.* '.$extra_select.$query,
(int)$pageInfo->limit->start, (int)$pageInfo->limit->value);
$rows = $db->loadObjectList();
$this->assignRef('rows', $rows);
$db->setQuery('SELECT COUNT(a.vendor_id) '.$query);
if($this->pageInfo->filter->vendors_unpaid == 1) {
$query = 'FROM
'.hikamarket::table($cfg['table']).' AS a
'.$join.$filters;
$db->setQuery('SELECT COUNT(DISTINCT a.vendor_id)
'.$query);
}
$pageInfo->elements = new stdClass();
$pageInfo->elements->total = $db->loadResult();
$pageInfo->elements->page = count($rows);
$ids = array();
$vendorsFilter = '';
if(!empty($rows)){
foreach($rows as $row) {
$ids[] = $row->vendor_id;
}
$vendorsFilter = 'AND t.vendor_id IN
('.implode(',',$ids).') ';
}
$query = 'SELECT t.vendor_id AS vendor_id,
COUNT(t.order_transaction_paid) AS `number_unpaid`,
t.order_transaction_currency_id AS `currency_id`,
SUM(t.order_transaction_price) AS `price_unpaid` '.
' FROM
'.hikamarket::table('order_transaction').' AS t
'.
' WHERE t.order_transaction_paid = 0 AND t.order_transaction_valid
> 0 AND t.order_transaction_price != 0.0 '.$vendorsFilter.
' GROUP BY t.vendor_id, t.order_transaction_currency_id';
$db->setQuery($query);
$orders = $db->loadObjectList();
foreach($rows as &$row) {
$row->number_unpaid = 0;
$row->price_unpaid = 0.0;
if(empty($row->price_full))
$row->price_full = 0.0;
if(!empty($orders)) {
foreach($orders as $order) {
if((int)$order->vendor_id != (int)$row->vendor_id)
continue;
$row->number_unpaid += (int)$order->number_unpaid;
if((int)$row->vendor_currency_id == 0)
$row->vendor_currency_id = $main_currency;
if((int)$order->currency_id == 0)
$order->currency_id = $main_currency;
if(!empty($order->price_unpaid)) {
$row->price_unpaid +=
$this->currencyClass->convertUniquePrice((float)$order->price_unpaid,
(int)$order->currency_id, (int)$row->vendor_currency_id);
}
if(!empty($order->price_full)) {
$row->price_full +=
$this->currencyClass->convertUniquePrice((float)$order->price_full,
(int)$order->currency_id, (int)$row->vendor_currency_id);
}
}
}
unset($row);
}
$this->toolbar = array(
'pay' => array('name' => 'custom',
'icon' => 'pay', 'alt' =>
JText::_('PAY_VENDOR'), 'task' => 'pay',
'display' => $manage),
'reports' => array('name' =>
'custom', 'icon' => 'reports',
'alt' => JText::_('HIKAM_REPORTS'), 'task'
=> 'reports', 'display' => $manage),
'|',
array('name' => 'publishList',
'display' => $manage),
array('name' => 'unpublishList',
'display' => $manage),
array('name' => 'addNew', 'display'
=> $manage),
array('name' => 'editList', 'display'
=> $manage),
array('name' => 'deleteList', 'display'
=> $manage),
'|',
array('name' => 'pophelp', 'target'
=> 'vendor'),
'dashboard'
);
$this->getPagination();
$this->getOrdering('a.ordering',
!$pageInfo->filter->type);
}
public function selection($tpl = null){
$this->paramBase .= '.vendor_selection';
$this->listing($tpl, true);
$elemStruct = array(
'vendor_name',
'vendor_email'
);
$this->assignRef('elemStruct', $elemStruct);
$singleSelection = hikaInput::get()->getVar('single',
false);
$this->assignRef('singleSelection', $singleSelection);
}
public function useselection() {
$selection = hikaInput::get()->get('cid', array(),
'array');
$rows = array();
$data = '';
$elemStruct = array(
'vendor_name',
'vendor_email'
);
if(!empty($selection)) {
hikamarket::toInteger($selection);
$db = JFactory::getDBO();
$query = 'SELECT a.* FROM
'.hikamarket::table('vendor').' AS a WHERE a.vendor_id
IN ('.implode(',',$selection).')';
$db->setQuery($query);
$rows = $db->loadObjectList();
if(!empty($rows)) {
$data = array();
foreach($rows as $v) {
$d = '{id:'.$v->user_id;
foreach($elemStruct as $s) {
if($s == 'id')
continue;
$d .= ','.$s.':"'.
str_replace('"', '\"',
$v->$s).'"';
}
$data[] = $d.'}';
}
$data = '['.implode(',', $data).']';
}
}
$this->assignRef('rows', $rows);
$this->assignRef('data', $data);
$confirm = hikaInput::get()->getBool('confirm', true);
$this->assignRef('confirm', $confirm);
if($confirm) {
$js = 'window.addEvent("domready",
function(){window.top.hikamarket.submitBox('.$data.');});';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
}
}
public function form($params = null) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
hikamarket::loadJslib('tooltip');
$title = JText::_('HIKA_VENDOR');
$ctrl = '';
$cancelUrl =
urlencode(base64_encode(hikamarket::completeLink('vendor')));
$config = hikamarket::config();
$this->assignRef('config', $config);
$formMode = true;
$embbed = true;
$vendor = null;
$vendor_admin = null;
$editor = null;
$task = 'add';
$users = array();
$products = array();
$products_count = 0;
$orders = array();
$orders_count = 0;
$invoices = array();
$invoices_count = 0;
$fees = array();
if($params != null &&
$params->get('configPanelIntegration', false))
$formMode = false;
$vendor_limit_vendors =
$config->get('vendor_limit_orders_display', 10);
$vendor_limit_products =
$config->get('vendor_limit_products_display', 10);
$vendor_id = 1;
if($formMode) {
$vendor_id = hikamarket::getCID();
if($vendor_id <= 1)
$vendor_id = 0;
}
$failVendor = hikaInput::get()->getVar('fail[vendor]',
null);
if(!empty($failVendor)) {
$vendor = $failVendor;
$vendor_id = $failVendor->vendor_id;
if(empty($vendor->vendor_id))
unset($vendor->vendor_id);
} else if(!empty($vendor_id) || !$formMode) {
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($vendor_id);
}
if(empty($vendor) && $vendor_id == 1) {
$e = $db->Quote('');
$query = 'INSERT IGNORE INTO
`'.hikamarket::table('vendor').'` '.
'(`vendor_id`,`vendor_admin_id`,`vendor_published`,`vendor_name`,`vendor_email`,`vendor_currency_id`,`vendor_description`,`vendor_access`,`vendor_shippings`,`vendor_params`)
VALUES '.
'(1,0,1,'.$e.','.$e.',0,'.$e.','.$db->Quote('*').','.$e.','.$e.')';
$db->setQuery($query);
$db->execute();
$app->enqueueMessage(JText::_('MAIN_VENDOR_RESTORED'),
'error');
$vendorClass->get(false);
$vendor = $vendorClass->get($vendor_id);
}
if(!empty($vendor)) {
$task = 'edit&cid[]='.$vendor_id;
$title = JText::sprintf('VENDOR_EDIT',
$vendor->vendor_name);
$cancelUrl =
urlencode(base64_encode(hikamarket::completeLink('vendor&task=edit&cid[]='.$vendor_id)));
} else {
$vendor = new stdClass();
}
$ctrl .= '&task='.$task;
$this->assignRef('task', $task);
hikamarket::loadJslib('otree');
$this->loadRef(array(
'imageHelper' => 'shop.helper.image',
'uploaderType' => 'shop.type.uploader',
'popup' => 'shop.helper.popup',
'currencyHelper' => 'shop.class.currency',
'currencyType' => 'shop.type.currency',
'categoryType' => 'type.shop_category',
'marketaclType' => 'type.market_acl',
'fieldsClass' => 'shop.class.field',
'joomlaAcl' => 'type.joomla_acl',
'nameboxType' => 'type.namebox'
));
if(hikamarket::level(1)) {
$feeClass = hikamarket::get('class.fee');
$this->assignRef('feeClass', $feeClass);
}
$vendor_acl = array();
$vendor_group = array();
$accesses = explode(',', @$vendor->vendor_access);
foreach($accesses as $access) {
if(substr($access, 0, 1) == '@') {
$vendor_group[] = substr($access, 1);
} else {
$vendor_acl[] = $access;
}
}
$vendor->vendor_acl = implode(',', $vendor_acl);
$vendor->vendor_group = implode(',', $vendor_group);
if(!empty($vendor->vendor_zone_id)) {
$query = 'SELECT zone_namekey FROM ' .
hikamarket::table('shop.zone') . ' WHERE zone_id = ' .
(int)$vendor->vendor_zone_id;
$db->setQuery($query);
$vendor->vendor_zone_namekey = $db->loadResult();
}
if( !empty($vendor->vendor_admin_id) &&
(int)$vendor->vendor_admin_id > 0) {
$userClass = hikamarket::get('shop.class.user');
$vendor_admin = $userClass->get($vendor->vendor_admin_id);
}
$editor = hikamarket::get('shop.helper.editor');
$editor->name = 'vendor_description';
$editor->content = @$vendor->vendor_description;
$editor->height = 250;
$product_template = null;
if(!empty($vendor->vendor_template_id) &&
(int)$vendor->vendor_template_id > 0) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.product').' AS a WHERE
a.product_type = \'template\' AND a.product_id = ' .
(int)$vendor->vendor_template_id;
$db->setQuery($query);
$product_template = $db->loadObject();
}
$this->assignRef('product_template', $product_template);
$extraFields = array(
'vendor' =>
$this->fieldsClass->getFields('backend', $vendor,
'plg.hikamarket.vendor', 'user&task=state') // Call
control "user" in hikashop backend part.
);
$this->assignRef('extraFields', $extraFields);
$this->assignRef('vendor', $vendor);
$null = array();
$this->fieldsClass->addJS($null, $null, $null);
$this->fieldsClass->jsToggle($this->extraFields['vendor'],
$vendor, 0);
if($vendor_id > 0) {
$query = 'SELECT a.*,b.* FROM
'.hikamarket::table('user','shop').' AS a
LEFT JOIN '.hikamarket::table('users',false).' AS b ON
a.user_cms_id = b.id '.
'WHERE a.user_vendor_id = ' . (int)$vendor_id . ' ORDER
BY a.user_id';
$db->setQuery($query);
$users = $db->loadObjectList('user_id');
$query = 'SELECT hku.*, vu.user_access as `user_vendor_access`,
ju.* '.
' FROM
'.hikamarket::table('user','shop').' AS hku
'.
' INNER JOIN
'.hikamarket::table('vendor_user').' AS vu ON
hku.user_id = vu.user_id ' .
' LEFT JOIN
'.hikamarket::table('users',false).' AS ju ON
hku.user_cms_id = ju.id '.
' WHERE vu.vendor_id = ' .
(int)$this->vendor->vendor_id . ' ORDER BY hku.user_id';
$db->setQuery($query);
$o_users = $db->loadObjectList('user_id');
$users = array_merge($users, $o_users);
unset($o_users);
}
$this->assignRef('users', $users);
if($vendor_id > 1) {
$query = 'SELECT a.*, c.* FROM
'.hikamarket::table('shop.order').' AS a INNER JOIN
'.hikamarket::table('shop.user').' AS c ON
a.order_user_id = c.user_id '.
'WHERE a.order_vendor_id = ' . $vendor_id . ' AND
a.order_type = \'subsale\' ORDER BY a.order_id DESC';
$db->setQuery($query, 0, $vendor_limit_vendors);
$orders = $db->loadObjectList();
$query = 'SELECT COUNT(*) FROM
'.hikamarket::table('shop.order').' AS a WHERE
a.order_vendor_id = ' . $vendor_id . ' AND a.order_type =
\'subsale\'';
$db->setQuery($query);
$orders_count = $db->loadResult();
}
$this->assignRef('orders', $orders);
$this->assignRef('orders_count', $orders_count);
if($vendor_id > 1) {
$query = 'SELECT a.* FROM
'.hikamarket::table('shop.order').' AS a '.
'WHERE a.order_vendor_id = ' . $vendor_id . ' AND
(a.order_type = \'vendorpayment\' OR (a.order_type =
\'sale\' AND a.order_id = a.order_vendor_paid)) ORDER BY
a.order_id DESC';
$db->setQuery($query, 0, $vendor_limit_vendors);
$invoices = $db->loadObjectList();
$query = 'SELECT COUNT(*) FROM
'.hikamarket::table('shop.order').' AS a '.
'WHERE a.order_vendor_id = ' . $vendor_id . ' AND
(a.order_type = \'vendorpayment\' OR (a.order_type =
\'sale\' AND a.order_id = a.order_vendor_paid))';
$db->setQuery($query);
$invoices_count = $db->loadresult();
}
$this->assignRef('invoices', $invoices);
$this->assignRef('invoices_count', $invoices_count);
if($vendor_id > 1) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.product').' AS a WHERE
a.product_vendor_id = ' . $vendor_id . ' ORDER BY a.product_id
DESC';
$db->setQuery($query, 0, $vendor_limit_products);
$products = $db->loadObjectList();
$query = 'SELECT COUNT(*) FROM
'.hikamarket::table('shop.product').' AS a WHERE
a.product_vendor_id = ' . $vendor_id . '';
$db->setQuery($query);
$products_count = $db->loadResult();
}
$this->assignRef('products', $products);
$this->assignRef('products_count', $products_count);
if($vendor_id > 1 && hikamarket::level(1)) {
$fees = $feeClass->getVendor($vendor_id);
}
$this->assignRef('fees', $fees);
if(!empty($vendor->vendor_zone_id)) {
$query = 'SELECT * FROM
'.hikamarket::table('shop.zone').' WHERE zone_id =
' . (int)$vendor->vendor_zone_id;
$db->setQuery($query);
$vendor->zone = $db->loadObject();
}
$this->assignRef('embbed', $embbed);
$this->assignRef('vendor', $vendor);
$this->assignRef('vendor_id', $vendor_id);
$this->assignRef('vendor_admin', $vendor_admin);
$this->assignRef('editor', $editor);
$this->assignRef('cancelUrl', $cancelUrl);
if($formMode) {
hikamarket::setTitle($title, self::icon, self::ctrl.$ctrl);
$this->toolbar = array(
'pay' => array('name' => 'Link',
'icon' => 'pay', 'alt' =>
JText::_('PAY_VENDOR'), 'url' =>
hikamarket::completeLink('vendor&task=pay&cid[]='.$vendor_id)),
'reports' => array('name' =>
'Link', 'icon' => 'reports',
'alt' => JText::_('HIKAM_REPORTS'), 'url'
=>
hikamarket::completeLink('vendor&task=reports&cid[]='.$vendor_id)),
'|',
'save',
'apply',
array('name' => 'hikacancel', 'url'
=> hikamarket::completeLink('vendor')),
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-form')
);
if($config->get('market_mode', 'fee') ==
'commission') {
$this->toolbar['pay'] = array(
'name' => 'Link',
'icon' => 'invoice',
'alt' => JText::_('GENERATE_INVOICE'),
'url' =>
hikamarket::completeLink('vendor&task=geninvoice&cid[]='.$vendor_id)
);
}
}
}
public function fees($params = null) {
if($params == null ||
!$params->get('configPanelIntegration', false))
return false;
$config = hikamarket::config();
$this->assignRef('config', $config);
$this->loadRef(array(
'currencyHelper' => 'shop.class.currency',
'currencyType' => 'shop.type.currency',
'feeClass' => 'class.fee',
'joomlaAclType' => 'type.joomla_acl'
));
$formRoot = 'config';
$this->assignRef('formRoot', $formRoot);
$fees = $this->feeClass->getConfig();
$this->assignRef('fees', $fees);
$fees_show_groups = true;
$this->assignRef('fees_show_groups', $fees_show_groups);
}
public function products($tpl = null) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$ctrl = '';
$cancelUrl =
urlencode(base64_encode(hikamarket::completeLink('vendor')));
$this->paramBase .= '.products';
$vendor_id = hikamarket::getCID();
if( $vendor_id > 0 )
$cancelUrl =
urlencode(base64_encode(hikamarket::completeLink('vendor&task=edit&cid[]='.$vendor_id)));
$config = hikamarket::config();
$this->assignRef('config', $config);
$toggleClass = hikamarket::get('helper.toggle');
$this->assignRef('toggleClass', $toggleClass);
$filterType =
$app->getUserStateFromRequest($this->paramBase.'.filter_type',
'filter_type', 0, 'int');
$cfg = array(
'table' => 'shop.product',
'main_key' => 'product_id',
'order_sql_value' => 'a.product_id'
);
$pageInfo = new stdClass();
$filters = array();
$pageInfo->filter = new stdClass();
$pageInfo->filter->order = new stdClass();
$pageInfo->filter->order->value =
$app->getUserStateFromRequest($this->paramBase.".filter_order",
'filter_order', $cfg['order_sql_value'],
'cmd');
$pageInfo->filter->order->dir =
$app->getUserStateFromRequest($this->paramBase.".filter_order_Dir",
'filter_order_Dir', 'asc', 'word');
$pageInfo->limit = new stdClass();
$pageInfo->limit->value =
$app->getUserStateFromRequest($this->paramBase.'.list_limit',
'limit', $app->getCfg('list_limit'), 'int'
);
if(empty($pageInfo->limit->value))
$pageInfo->limit->value = 500;
if(hikaInput::get()->getVar('search') !=
$app->getUserState($this->paramBase.".search")) {
$app->setUserState($this->paramBase.'.limitstart',0);
$pageInfo->limit->start = 0;
} else {
$pageInfo->limit->start =
$app->getUserStateFromRequest($this->paramBase.'.limitstart',
'limitstart', 0, 'int' );
}
$pageInfo->search =
HikaStringHelper::strtolower($app->getUserStateFromRequest($this->paramBase.".search",
'search', '', 'string'));
$this->assignRef('pageInfo', $pageInfo);
$filters = array();
$searchMap = array(
'product_name',
'product_code',
'product_id'
);
if(!empty($pageInfo->search)) {
$searchVal = '\'%' .
$db->escape(HikaStringHelper::strtolower($pageInfo->search), true) .
'%\'';
$filters[] = '(' . implode(' LIKE
'.$searchVal.' OR ',$searchMap).' LIKE
'.$searchVal . ')';
}
if(!empty($filters)) {
$filters = ' WHERE a.product_vendor_id = '.$vendor_id.'
AND ' . implode(' AND ', $filters);
} else {
$filters = ' WHERE a.product_vendor_id = '.$vendor_id;
}
$order = '';
if(!empty($pageInfo->filter->order->value)) {
$order = ' ORDER BY
'.$pageInfo->filter->order->value.'
'.$pageInfo->filter->order->dir;
}
$query = 'FROM
'.hikamarket::table($cfg['table']).' AS a
'.$filters.$order;
$db->setQuery('SELECT * '.$query,
(int)$pageInfo->limit->start, (int)$pageInfo->limit->value);
$rows = $db->loadObjectList();
if(!empty($pageInfo->search)) {
$rows = hikamarket::search($pageInfo->search, $rows,
$cfg['main_key']);
}
$this->assignRef('products', $rows);
$db->setQuery('SELECT COUNT(*) '.$query);
$pageInfo->elements = new stdClass();
$pageInfo->elements->total = $db->loadResult();
$pageInfo->elements->page = count($rows);
$this->assignRef('vendor_id', $vendor_id);
$this->assignRef('cancelUrl', $cancelUrl);
$manager = true;
hikamarket::setTitle(JText::_(self::name), self::icon,
self::ctrl.$ctrl);
$this->toolbar = array(
array('name' => 'hikacancel', 'url'
=>
hikamarket::completeLink('vendor&task=edit&cid[]='.$vendor_id)),
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-form')
);
jimport('joomla.html.pagination');
if($pageInfo->limit->value == 500)
$pageInfo->limit->value = 100;
$pagination = new JPagination($pageInfo->elements->total,
$pageInfo->limit->start, $pageInfo->limit->value);
$this->assignRef('pagination', $pagination);
$doOrdering = !$filterType;
$this->assignRef('doOrdering', $doOrdering);
if($doOrdering) {
$ordering = new stdClass();
$ordering->ordering = false;
$ordering->orderUp = 'orderup';
$ordering->orderDown = 'orderdown';
$ordering->reverse = false;
if($pageInfo->filter->order->value == 'a.ordering')
{
$ordering->ordering = true;
if($pageInfo->filter->order->dir == 'desc') {
$ordering->orderUp = 'orderdown';
$ordering->orderDown = 'orderup';
$ordering->reverse = true;
}
}
$this->assignRef('ordering', $ordering);
}
}
public function pay($tpl = null) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$ctrl = '';
$cancelUrl =
urlencode(base64_encode(hikamarket::completeLink('vendor')));
$this->paramBase .= '.pay';
$vendor_id = hikamarket::getCID();
$vendor_ids = hikaInput::get()->get('cid', array(),
'array');
if(!empty($vendor_ids) && count($vendor_ids) > 1) {
$vendor_id = $vendor_ids;
hikamarket::toInteger($vendor_id);
}
if(empty($vendor_id)) {
$app->redirect(hikamarket::completeLink('vendor'));
return false;
}
$this->assignRef('vendor_id', $vendor_id);
$config = hikamarket::config();
$this->assignRef('config', $config);
$feeMode = ($this->config->get('market_mode',
'fee') == 'fee');
$this->assignRef('feeMode', $feeMode);
$valid_statuses = explode(',',
$config->get('valid_order_statuses',
'confirmed,shipped'));
foreach($valid_statuses as &$status) {
$status = $db->Quote($status);
}
$this->loadRef(array(
'vendorClass' => 'class.vendor',
'toggleHelper' => 'helper.toggle',
'currencyHelper' => 'shop.class.currency',
'paymentMethods' => 'type.paymentmethods',
'popup' => 'shop.helper.popup',
));
$pageInfo = new stdClass();
$pageInfo->filter = new stdClass();
$this->assignRef('pageInfo', $pageInfo);
if(!is_array($vendor_id)) {
$vendor = $this->vendorClass->get($vendor_id);
$this->assignRef('vendor', $vendor);
$title = JText::sprintf('VENDOR_PAY',
$vendor->vendor_name);
$cancelUrl =
urlencode(base64_encode(hikamarket::completeLink('vendor&task=pay&cid[]='.$vendor_id)));
$ctrl = '&task=pay&cid[]='.$vendor_id;
$this->assignRef('cancelUrl', $cancelUrl);
$query = 'SELECT t.*, o.*, u.* '.
' FROM
'.hikamarket::table('order_transaction').' AS t
'.
' LEFT JOIN
'.hikamarket::table('shop.order').' AS o ON
o.order_type = '.$db->Quote('subsale').' AND
o.order_parent_id = t.order_id AND o.order_vendor_id = '.$vendor_id .
' '.
' LEFT JOIN '.hikamarket::table('shop.user').'
AS u ON o.order_user_id = u.user_id '.
' WHERE t.order_transaction_paid = 0 AND t.order_transaction_valid
> 0 AND t.order_transaction_price != 0.0 AND t.vendor_id =
'.$vendor_id.''.
' ORDER BY t.order_transaction_created DESC,
o.order_invoice_created DESC, o.order_created DESC, o.order_id DESC';
$db->setQuery($query);
$orders = $db->loadObjectList();
$this->assignRef('orders', $orders);
} else {
$query = 'SELECT v.* FROM ' .
hikamarket::table('vendor') . ' AS v WHERE vendor_id IN
('.implode(',', $vendor_id).')';
$db->setQuery($query);
$vendors = $db->loadObjectList('vendor_id');
$this->assignRef('vendors', $vendors);
$vendor_names = array();
foreach($vendors as &$v) {
$vendor_names[] = $v->vendor_name;
$v->nb_orders = 0;
$v->total_vendor_price = 0.0;
$v->total_full_price = 0.0;
}
unset($v);
$vendor_names = implode(', ', array_slice($vendor_names, 0,
5));
$title = JText::sprintf('VENDOR_PAY', $vendor_names);
$pageInfo->filter->filter_start =
$app->getUserStateFromRequest($this->paramBase.'.filter_start',
'filter_start', '', 'string');
$pageInfo->filter->filter_end =
$app->getUserStateFromRequest($this->paramBase.'.filter_end',
'filter_end', '', 'string');
$filters = array(
'vendor_id' => 't.vendor_id IN
('.implode(',', $vendor_id).')',
'transaction_price' => 't.order_transaction_price !=
0',
'transaction_paid' => 't.order_transaction_paid =
0',
'transaction_valid' => 't.order_transaction_valid
> 0'
);
$date_filters = '';
if(!empty($pageInfo->filter->filter_start)) {
$parts = explode(' ',
$pageInfo->filter->filter_start);
$parts = explode('-', $parts[0]);
$start = hikamarket::getTime(mktime(0, 0, 0, $parts[1], $parts[2],
$parts[0]));
$filters['date_start'] = 't.order_transaction_created
>= ' . (int)$start;
}
if(!empty($pageInfo->filter->filter_end)) {
$parts = explode(' ', $pageInfo->filter->filter_end);
$parts = explode('-', $parts[0]);
$end = hikamarket::getTime(mktime(23, 59, 59, $parts[1], $parts[2],
$parts[0]));
$filters['date_end'] = 't.order_transaction_created
<= ' . (int)$end;
}
$query = 'SELECT t.vendor_id, t.order_transaction_currency_id,
COUNT(t.order_transaction_id) AS `nb_orders`,
SUM(t.order_transaction_price) AS `total_vendor_price`,
SUM(o.order_full_price) AS `total_full_price` '.
' FROM
'.hikamarket::table('order_transaction').' AS t
'.
' LEFT JOIN
'.hikamarket::table('shop.order').' AS o ON t.order_id
= o.order_parent_id AND t.vendor_id = o.order_vendor_id '.
' WHERE ('.implode(') AND (', $filters)
.')'.
' GROUP BY t.vendor_id, t.order_transaction_currency_id';
$db->setQuery($query);
$transactions = $db->loadObjectList();
foreach($transactions as $transaction) {
if(empty($vendors[ (int)$transaction->vendor_id ]))
continue;
$vendors[ (int)$transaction->vendor_id ]->nb_orders +=
(int)$transaction->nb_orders;
$vendor_currency_id = (int)$vendors[ (int)$transaction->vendor_id
]->vendor_currency_id;
if($vendor_currency_id ==
(int)$transaction->order_transaction_currency_id) {
$vendors[ (int)$transaction->vendor_id ]->total_vendor_price +=
(float)hikamarket::toFloat($transaction->total_vendor_price);
$vendors[ (int)$transaction->vendor_id ]->total_full_price +=
(float)hikamarket::toFloat($transaction->total_full_price);
} else {
$order->total_vendor_price =
(float)hikamarket::toFloat($order->total_vendor_price);
$order->total_full_price =
(float)hikamarket::toFloat($order->total_full_price);
$vendors[ (int)$transaction->vendor_id ]->total_vendor_price +=
$this->currencyHelper->convertUniquePrice($transaction->total_vendor_price,
(int)$transaction->order_transaction_currency_id, $vendor_currency_id);
$vendors[ (int)$transaction->vendor_id ]->total_full_price +=
$this->currencyHelper->convertUniquePrice($transaction->total_full_price,
(int)$transaction->order_transaction_currency_id, $vendor_currency_id);
if(empty($vendors[ (int)$transaction->vendor_id ]->currencies))
$vendors[ (int)$transaction->vendor_id ]->currencies =
array();
$vendors[ (int)$transaction->vendor_id
]->currencies[(int)$transaction->order_transaction_currency_id] =
array(
'vendor' => $transaction->total_vendor_price,
'full' => $transaction->total_full_price
);
}
}
}
hikamarket::setTitle($title, self::icon, self::ctrl.$ctrl);
$this->toolbar = array(
'pay' => array('name' => 'custom',
'icon' => 'pay', 'alt' =>
JText::_('PAY_VENDOR'), 'task' =>
'dopay'),
array('name' => 'hikacancel', 'url'
=> (is_int($vendor_id) ?
hikamarket::completeLink('vendor&task=edit&cid[]='.$vendor_id)
: hikamarket::completeLink('vendor&task=listing')) ),
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-pay')
);
if(!$feeMode) {
$this->toolbar['pay'] = array(
'name' => 'custom',
'icon' => 'invoice',
'alt' => JText::_('GENERATE_INVOICE'),
'task' => 'dogeninvoice'
);
}
}
public function payreport($tpl = null) {
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$ctrl = '';
$order_ids = hikaInput::get()->get('cid', array(),
'array');
hikamarket::toInteger($order_ids);
$this->loadRef(array(
'popup' => 'shop.helper.popup',
'currencyClass' => 'shop.class.currency'
));
$shopConfig = hikamarket::config(false);
$created_status = $shopConfig->get('order_created_status',
'created');
$this->assignRef('created_status', $created_status);
$order_types = array('vendorpayment', 'sale');
foreach($order_types as &$order_type) {
$order_type = $db->Quote($order_type);
}
unset($order_type);
$query = 'SELECT v.*, o.* FROM ' .
hikamarket::table('shop.order') . ' AS o '.
' INNER JOIN ' . hikamarket::table('vendor') .
' AS v ON o.order_vendor_id = v.vendor_id '.
' WHERE o.order_type IN ('.implode(',',
$order_types).') AND o.order_id IN ('.implode(',',
$order_ids).')';
$db->setQuery($query);
$orders = $db->loadObjectList('order_id');
$this->assignRef('orders', $orders);
$cancelUrl =
urlencode(base64_encode(hikamarket::completeLink('vendor&task=pay&report=1&cid='.implode('&cid=',
$order_ids))));
$this->assignRef('cancelUrl', $cancelUrl);
hikamarket::setTitle(JText::_('VENDOR_PAY_REPORT'), self::icon,
self::ctrl.$ctrl.'&task=pay&report=1&cid[]=' .
implode('&cid[]=', $order_ids));
$this->toolbar = array(
array('name' => 'hikacancel', 'url'
=> hikamarket::completeLink('vendor&task=listing')),
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-pay')
);
}
public function paymanual($tpl = null) {
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$vendor_id = hikamarket::getCID('vendor_id');
$order_id = hikaInput::get()->getInt('order_id', 0);
$this->loadRef(array(
'vendorClass' => 'class.vendor',
'orderClass' => 'class.order',
'currencyClass' => 'shop.class.currency',
));
$order = $this->orderClass->getRaw($order_id);
$this->assignRef('order', $order);
$payment_method =
hikaInput::get()->getString('payment_method',
'manual');
$this->assignRef('payment_method', $payment_method);
$vendor = $this->vendorClass->get($vendor_id);
$this->assignRef('vendor', $vendor);
if(($order->order_vendor_id != $vendor->vendor_id) ||
$order->order_type != 'vendorpayment') {
$app->enqueueMessage(JText::_('INVALID_DATA'),
'error');
return false;
}
$created_status = $shopConfig->get('order_created_status',
'created');
$confirmed_status =
$shopConfig->get('order_confirmed_status',
'confirmed');
if($order->order_status == $confirmed_status) {
$app->enqueueMessage(JText::_('HIKAM_ORDER_ALREADY_PAID'));
return false;
}
$this->assignRef('confirmed_status', $confirmed_status);
if($payment_method == 'paypal') {
$lang = JFactory::getLanguage();
$locale = strtolower(substr($lang->get('tag'), 0, 2));
$notify_url =
HIKASHOP_LIVE.'index.php?option=com_hikamarket&ctrl=vendor&task=vendorpaynotify&mode=paypal&order_id='.$order->order_id.'&tmpl=component&lang='.$locale;
$return_url =
HIKASHOP_LIVE.'administrator/index.php?option=com_hikamarket&ctrl=vendor&task=paymanual&order_id='.$order->order_id.'&vendor_id='.$vendor->vendor_id.'&return=1&tmpl=component';
$cancel_url =
HIKASHOP_LIVE.'administrator/index.php?option=com_hikamarket&ctrl=vendor&task=paymanual&order_id='.$order->order_id.'&vendor_id='.$vendor->vendor_id.'&return=1&error=1&tmpl=component';
$this->return_url =
'https://www.paypal.com/cgi-bin/webscr';
$currencies = null;
$currencies =
$this->currencyClass->getCurrencies($order->order_currency_id,
$currencies);
$currency = $currencies[$order->order_currency_id];
if($currency->currency_locale['int_frac_digits'] > 2)
$currency->currency_locale['int_frac_digits'] = 2;
$this->vars = array(
'cmd' => '_ext-enter',
'redirect_cmd' => '_cart',
'upload' => '1',
'business' => $vendor->vendor_params->paypal_email,
'receiver_email' =>
$vendor->vendor_params->paypal_email,
'invoice' => $order->order_id,
'currency_code' => $currency->currency_code,
'return' => $return_url,
'notify_url' => $notify_url,
'cancel_return' => $cancel_url,
'undefined_quantity' => '0',
'test_ipn' => '0',
'no_shipping' => '1',
'no_note' => '1',
'charset' => 'utf-8',
'rm' => '0',
'bn' => 'ObsidevHikaMarket_Cart_WPS',
'amount_1' => round($order->order_full_price,
(int)$currency->currency_locale['int_frac_digits']),
'item_name_1' =>
JText::sprintf('VENDOR_ORDER_PAYMENT', $vendor->vendor_name,
$order->order_number)
);
}
}
public function searchfields() {
$db = JFactory::getDBO();
if(!HIKASHOP_J30) {
$columnTable =
$db->getTableFields(hikamarket::table('vendor'));
$columns = reset($columnTable);
} else {
$columns =
$db->getTableColumns(hikamarket::table('vendor'));
}
$rows = array_keys($columns);
$selected = hikaInput::get()->getString('values',
'');
$selected_values = explode(',', $selected);
$new_rows = array();
foreach($rows as $id => $row) {
$obj = new stdClass();
$obj->namekey = $row;
if(in_array($row, $selected_values))
$obj->selected = true;
$new_rows[] = $obj;
}
$this->assignRef('rows',$new_rows);
$controlName = hikaInput::get()->getString('control',
'params');
$this->assignRef('controlName', $controlName);
}
public function delete() {
$db = JFactory::getDBO();
$config = hikamarket::config();
$this->assignRef('config', $config);
$toggleClass = hikamarket::get('helper.toggle');
$this->assignRef('toggleClass', $toggleClass);
$cid = hikaInput::get()->post->get('cid', array(),
'array');
hikamarket::toInteger($cid);
$query = 'SELECT v.* FROM ' .
hikamarket::table('vendor') . ' AS v '.
' WHERE v.vendor_id IN ('.implode(',', $cid) .
') AND v.vendor_id > 1';
$db->setQuery($query);
$vendors = $db->loadObjectList('vendor_id');
$this->assignRef('vendors', $vendors);
$vendor_ids = array_keys($vendors);
$this->assignRef('vendor_ids', $vendor_ids);
$query = 'SELECT p.product_vendor_id, count(p.product_id) as value
FROM ' . hikamarket::table('shop.product') . ' AS p
WHERE p.product_vendor_id IN ('.implode(',', $vendor_ids) .
')';
$db->setQuery($query);
$data = $db->loadObjectList('product_vendor_id');
foreach($data as $k => $d) {
if((int)$k > 0)
$vendors[(int)$k]->products = $d->value;
}
$query = 'SELECT o.order_vendor_id, count(o.order_id) as value FROM
' . hikamarket::table('shop.order') . ' AS o WHERE
o.order_vendor_id IN ('.implode(',', $vendor_ids) . ')
AND o.order_type = '.$db->Quote('subsale');
$db->setQuery($query);
$data = $db->loadObjectList('order_vendor_id');
foreach($data as $k => $d) {
if((int)$k > 0)
$vendors[(int)$k]->orders = $d->value;
}
$query = 'SELECT u.user_vendor_id, count(u.user_id) as value FROM
' . hikamarket::table('shop.user') . ' AS u WHERE
u.user_vendor_id IN ('.implode(',', $vendor_ids) .
')';
$db->setQuery($query);
$data = $db->loadObjectList('user_vendor_id');
foreach($data as $k => $d) {
if((int)$k > 0)
$vendors[(int)$k]->users = $d->value;
}
hikamarket::toInteger($vendor_ids);
sort($vendor_ids);
$confirm_value = md5(implode(';', $vendor_ids));
$this->assignRef('confirm_value', $confirm_value);
hikamarket::setTitle(JText::_('DELETE_VENDORS'), self::icon,
self::ctrl);
$this->toolbar = array(
'remove' => array('name' =>
'custom', 'icon' => 'delete',
'alt' => JText::_('HIKA_DELETE'), 'task'
=> 'remove'),
'hikacancel',
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-form')
);
}
public function reports() {
$app = JFactory::getApplication();
$config = hikamarket::config();
$vendor_id = hikamarket::getCID();
$vendorClass = hikamarket::get('class.vendor');
$vendor = $vendorClass->get($vendor_id);
if(empty($vendor)) {
$app->enqueueMessage(JText::_('VENDOR_DOES_NOT_EXIST'),
'error');
$app->redirect(
hikamarket::completeLink('vendor&task=listing', false, true)
);
}
$statisticsClass = hikamarket::get('class.statistics');
$statistics = $statisticsClass->getVendor($vendor);
$vendor_statistics = $config->get('vendor_statistics',
null);
if(!empty($vendor_statistics)) {
foreach($statistics as $key => &$stat) {
$stat['published'] = false;
}
unset($stat);
$vendor_statistics =
hikamarket::unserialize(base64_decode($vendor_statistics));
foreach($vendor_statistics as $key => $stat_conf) {
if(!isset($statistics[$key]))
continue;
if(isset($stat_conf['container']))
$statistics[$key]['container'] =
(int)$stat_conf['container'];
if(isset($stat_conf['slot']))
$statistics[$key]['slot'] =
(int)$stat_conf['slot'];
if(isset($stat_conf['order']))
$statistics[$key]['order'] =
(int)$stat_conf['order'];
if(isset($stat_conf['published']))
$statistics[$key]['published'] =
$stat_conf['published'];
if(!empty($stat_conf['vars'])) {
foreach($stat_conf['vars'] as $k => $v)
$statistics[$key]['vars'][$k] = $v;
}
}
uasort($statistics, array($this, 'sortStats'));
}
$statistic_slots = array();
if(!empty($statistics)) {
foreach($statistics as $key => &$stat) {
if(isset($stat['published']) &&
empty($stat['published']))
continue;
$stat['key'] = $key;
if(empty($stat['slot']))
$stat['slot'] = 0;
if(!isset($statistic_slots[ (int)$stat['slot'] ]))
$statistic_slots[ (int)$stat['slot'] ] = array();
$order = @$stat['order'] * 100;
if(isset($statistic_slots[ $stat['slot'] ][ $order ])) {
for($i = 1; $i < 100; $i++) {
if(!isset($statistic_slots[ (int)$stat['slot'] ][ $order +
$i ])) {
$order += $i;
break;
}
}
}
$statistic_slots[ (int)$stat['slot'] ][$order] =& $stat;
}
unset($stat);
}
$this->assignRef('statistics', $statistics);
$this->assignRef('statisticsClass', $statisticsClass);
$this->assignRef('statistic_slots', $statistic_slots);
$toolbar_icon = 'chart-bar';
hikamarket::setTitle(JText::sprintf('VENDOR_REPORTS',
$vendor->vendor_name), $toolbar_icon,
self::ctrl.'&task=reports&cid='.$vendor_id);
$this->toolbar = array(
array('name' => 'hikacancel', 'url'
=>
hikamarket::completeLink('vendor&task=edit&cid='.$vendor_id)),
'|',
array('name' => 'pophelp', 'target'
=> self::ctrl.'-form'),
'dashboard'
);
}
protected function sortStats($a, $b) {
if($a['order'] == $b['order'])
return 0;
return ($a['order'] < $b['order']) ? -1 : 1;
}
}
_database/index.html000064400000000032151160562500010440
0ustar00<html><body></body></html>_database/install.sql000064400000007422151160562500010644
0ustar00CREATE TABLE IF NOT EXISTS `#__hikamarket_config` (
`config_namekey` varchar(200) NOT NULL,
`config_value` text NOT NULL,
`config_default` text NOT NULL,
PRIMARY KEY (`config_namekey`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `#__hikamarket_customer_vendor` (
`customer_id` INT(10) UNSIGNED NOT NULL,
`vendor_id` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`customer_id`,`vendor_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `#__hikamarket_vendor` (
`vendor_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`vendor_admin_id` INT(10) NOT NULL DEFAULT 0,
`vendor_name` VARCHAR(255) NOT NULL,
`vendor_alias` VARCHAR(255) NOT NULL DEFAULT '',
`vendor_canonical` VARCHAR(255) NOT NULL DEFAULT '',
`vendor_email` VARCHAR(255) NOT NULL,
`vendor_published` tinyint(4) NOT NULL DEFAULT 0,
`vendor_currency_id` INT(10) NOT NULL DEFAULT 0,
`vendor_description` TEXT NULL,
`vendor_access` TEXT NULL,
`vendor_shippings` TEXT NULL,
`vendor_params` TEXT NULL,
`vendor_image` VARCHAR(255) NOT NULL DEFAULT '',
`vendor_created` INT(11) NOT NULL DEFAULT 0,
`vendor_modified` INT(11) NOT NULL DEFAULT 0,
`vendor_template_id` VARCHAR(255) NOT NULL DEFAULT '',
`vendor_address_company` TEXT NULL,
`vendor_address_street` TEXT NULL,
`vendor_address_street2` TEXT NULL,
`vendor_address_post_code` TEXT NULL,
`vendor_address_city` TEXT NULL,
`vendor_address_telephone` TEXT NULL,
`vendor_address_fax` TEXT NULL,
`vendor_address_state` TEXT NULL,
`vendor_address_country` TEXT NULL,
`vendor_address_vat` TEXT NULL,
`vendor_zone_id` INT(10) UNSIGNED NOT NULL DEFAULT 0,
`vendor_site_id` VARCHAR(255) NOT NULL DEFAULT '',
`vendor_average_score` decimal(16,5) NOT NULL DEFAULT
'0.00000',
`vendor_total_vote` INT NOT NULL DEFAULT 0,
`vendor_terms` TEXT NULL,
`vendor_location_lat` DECIMAL(9, 6) NULL,
`vendor_location_long` DECIMAL(9, 6) NULL,
PRIMARY KEY (`vendor_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `#__hikamarket_vendor_user` (
`vendor_id` INT(10) NOT NULL,
`user_id` INT(10) NOT NULL,
`user_access` TEXT NULL,
`ordering` INT(10) NOT NULL DEFAULT 1,
PRIMARY KEY (`vendor_id`, `user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `#__hikamarket_fee` (
`fee_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`fee_type` varchar(255) NOT NULL DEFAULT 'product',
`fee_target_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
`fee_currency_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
`fee_value` decimal(16,5) NOT NULL DEFAULT '0.00000',
`fee_fixed` decimal(16,5) NOT NULL DEFAULT '0.00000',
`fee_percent` decimal(16,5) NOT NULL DEFAULT '0.00000',
`fee_min_quantity` int(10) UNSIGNED NOT NULL DEFAULT '0',
`fee_min_price` decimal(16,5) NOT NULL DEFAULT '0.00000',
`fee_group` int(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`fee_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `#__hikamarket_customer_vendor` (
`customer_id` INT(10) NOT NULL,
`vendor_id` INT(10) NOT NULL,
PRIMARY KEY (`customer_id`,`vendor_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `#__hikamarket_order_transaction` (
`order_transaction_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` INT(10) UNSIGNED NOT NULL,
`vendor_id` INT(10) UNSIGNED NOT NULL,
`order_transaction_created` INT(11) NOT NULL DEFAULT 0,
`order_transaction_status` varchar(255) NOT NULL DEFAULT '',
`order_transaction_price` decimal(12,5) NOT NULL DEFAULT
'0.00000',
`order_transaction_currency_id` INT(10) UNSIGNED NOT NULL DEFAULT
'0',
`order_transaction_paid` INT(10) UNSIGNED NOT NULL DEFAULT 0,
`order_transaction_valid` INT(4) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`order_transaction_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
css/backend_default.css000064400000044236151161767140011163 0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
/*
*
*/
table.pad5 th, table.pad5 td, table.adminlist.pad5 td {
padding:5px;
}
table.pad0 th, table.pad0 td, table.adminlist.pad0 td {
padding:0px;
}
div#iframedoc {
border:1px solid black;
background-color:white;
}
#hikamarket_main_content .navbar {
padding-bottom: 5px;
}
.hikamarket_main_content {
background-color: white;
padding: 5px;
}
.hikamarket_main_content #cpanel div.icon a span.fa,
.hikamarket_main_content #cpanel div.icon a span.fas,
.hikamarket_main_content #cpanel div.icon a span.far {
font-size: 48px;
color: #297fbb;
}
/*
* Icons
*/
.icon-16-new {background-image:url(../images/icon-16/new.png);}
.icon-16-list {background-image:url(../images/icon-16/list.png);}
.icon-16-users {background-image:url(../images/icon-16/users.png);}
.icon-16-config {background-image:url(../images/icon-16/config.png);}
.icon-16-export {background-image:url(../images/icon-16/export.png);}
.icon-16-import {background-image:url(../images/icon-16/import.png);}
.icon-16-help {background-image:url(../images/icon-16/help.png);}
.icon-16-plugin {background-image:url(../images/icon-16/plugin.png);}
.icon-16-settings {background-image:url(../images/icon-16/settings.png);}
.icon-16-import {background-image:url(../images/icon-16/import.png);}
.icon-16-views {background-image:url(../images/icon-16/views.png);}
.icon-16-update {background-image:url(../images/icon-16/update.png);}
.icon-16-layout {background-image:url(../images/icon-16/layout.png);}
.icon-16-acl {background-image:url(../images/icon-16/acl.png);}
.icon-16-vendor {background-image:url(../images/icon-16/vendor.png);}
.icon-32-pay {background-image:url(../images/icon-32/pay.png);}
.icon-32-reports {background-image:url(../images/icon-32/report.png);}
.icon-32-view {background-image:url(../images/icon-32/view.png);}
.icon-32-block {background-image:url(../images/icon-32/block.png);}
.icon-32-vendor {background-image:url(../images/icon-32/vendor.png);}
.icon-48-layout {background-image:url(../images/icon-48/layout.png);}
.icon-48-block {background-image:url(../images/icon-48/block.png);}
.icon-48-acl {background-image:url(../images/icon-48/acl.png);}
.icon-48-vendors {background-image:url(../images/icon-48/vendor.png);}
.icon-16-hikamarket
{background-image:url(../images/icon-16/hikamarket.png);}
.icon-32-hikamarket
{background-image:url(../images/icon-32/hikamarket.png);}
.icon-48-hikamarket
{background-image:url(../images/icon-48/hikamarket.png);}
body.com_hikamarket h1.page-title span.icon-hikamarket {
background-image:url(../images/icon-32/hikamarket.png);
width:32px;
height:32px;
vertical-align:middle;
}
body.com_hikamarket div.subhead span.icon-pay:before {
content:"\73";
}
body.com_hikamarket div.subhead span.icon-reports:before {
content:"\76";
}
/*
*
*/
#hikamarket_main_content input,
#hikamarket_main_content textarea,
#hikamarket_main_content select,
#hikamarket_main_content fieldset input,
#hikamarket_main_content fieldset textarea,
#hikamarket_main_content fieldset select,
#hikamarket_main_content fieldset img,
#hikamarket_main_content fieldset button {
float:none;
}
#hikamarket_main_content label {
float:none;
display:inline;
}
#hikamarket_main_content fieldset {
border:1px solid #CCCCCC;
background-color:#FFFFFF;
overflow:visible;
}
.hk_config_table .hk_tbl_key {
width:25%;
font-weight:bold;
}
.hk_config_table tr:hover {
background-color:#bacada;
}
#hikamarket_main_content table.admintable td.key,
#hikamarket_main_content table.admintable td.paramlist_key {
background-color:#F6F6F6;
border-bottom:1px solid #E9E9E9;
border-right:1px solid #E9E9E9;
color:#666666;
font-weight:bold;
text-align:right;
width:210px;
}
#hikamarket_main_content table.admintable tr.option_title,
table.hk_config_table tr.option_title {
background-color:#eaeaea;
border-bottom:1px solid #E9E9E9;
border-right:1px solid #E9E9E9;
color:#444444;
font-weight:bold;
line-height:1.2em;
}
#hikamarket_main_content table.admintable tr.option_title td {
padding:4px 2px 4px 2px;
}
#hikamarket_main_content div.row-fluid table.admintable td.key,
#hikamarket_main_content div.row-fluid table.admintable td.paramlist_key {
white-space:normal;
}
#hikamarket_main_content table.admintable select {
margin: 1px 0px 1px 2px;
}
#hikamarket_main_content table.admintable tr.bigline {
font-size: 1.2em;
}
div.acl-popup-content {
position:absolute;
background-color:white;
border:1px solid #aeaeae;
-webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;
height:130px;
width:200px;
overflow:auto;
}
/*
* Files and Images
* - upload
* - drag & Drop
*/
div.hikamarket_main_image_div,
div.hikamarket_main_file_div {
position:relative;
}
div.hikamarket_uploader_image_add {
position:absolute;
top:5px;
right:5px;
}
div.hikamarket_uploader_image_add span {
display:inline-block;
width:16px;
height:16px;
}
div.hikamarket_uploader_image_add span.hikam_add_btn {
background-image:url(../images/icon-16/plus.png);
}
div.hikamarket_uploader_image_add span.hikam_upload_btn {
background-image:url(../images/icon-16/upload.png);
}
ul.hikamarket_uploader_images .ui-sortable-placeholder {
border:1px dotted black;
visibility:visible !important;
width:50px;
height:50px !important;
}
ul.hikamarket_uploader_images .ui-sortable-placeholder * {
visibility:hidden;
}
ul.hikamarket_uploader_images {
list-style-type:none;
margin:0 !important;
padding:15px 0 0 0 !important;
}
div.hikamarket_uploader_singleimage_content {
padding:15px 0 5px 8px !important;
width:100px;
}
div#hikamarket_category_current_image > div,
div#hikamarket_category_image_content > div {
position:relative;
padding:0px;
}
ul.hikamarket_product_images a,
div#hikamarket_category_current_image a,
div#hikamarket_category_image_content a {
background-color:transparent !important;
}
ul.hikamarket_product_images li {
display:inline-block;
position:relative;
margin-left: 3px !important;
}
.hikamarket_small_image_div {
display:inline-block;
}
.hikamarket_product_main_image_thumb {
display:block;
position:relative;
}
.hikamarket_small_image_div .hikamarket_image img {
max-width:50px;
max-height:50px;
}
ul.hikamarket_uploader_multiimage_content > li,
div.hikamarket_uploader_singleimage_content > div {
position:relative;
}
ul.hikamarket_uploader_multiimage_content .deleteImg,
div.hikamarket_uploader_singleimage_content .deleteImg {
position:absolute;
right:0px;
top:0px;
display:none;
}
ul.hikamarket_uploader_multiimage_content:hover .deleteImg,
div.hikamarket_uploader_singleimage_content:hover .deleteImg {
display:block;
opacity:0.5;
filter:alpha(opacity=50);
}
ul.hikamarket_uploader_multiimage_content .deleteImg:hover,
div.hikamarket_uploader_singleimage_content .deleteImg:hover {
opacity:1;
filter:alpha(opacity=100);
}
.uploadQueueItem {
font:11px Verdana, Geneva, sans-serif;
border:2px solid#E5E5E5;
background-color:#F5F5F5;
margin-top:5px;
padding:10px;
/*width: 350px;*/
}
.uploadError {
border:2px solid #FBCBBC !important;
background-color:#FDE5DD !important;
}
.uploadQueueItem .cancel {
float:right;
}
.uploadProgress {
background-color:#FFFFFF;
border-top:1px solid #808080;
border-left:1px solid #808080;
border-right:1px solid #C5C5C5;
border-bottom:1px solid #C5C5C5;
margin-top:10px;
width:100%;
}
.uploadProgressBar {
background:url('../images/progress.gif') repeat-x;
width:1px;
height:8px;
}
.uploadBtn {
width:80px;
margin-top:3px;
padding:6px;
text-align:center;
border:1px solid #333333;
background-color:#ececec;
}
.hkIcon {
width:16px;
height:16px;
display:inline-block;
line-height:16px;
}
.hkIcon-delete {
background-image:url(../images/icon-16/delete.png);
}
.dropOver {
background-color:#909090;
}
.hikamarket_dropzone {
border: 2px dashed #CCCCCC;
width:100%;
-webkit-border-radius:12px; -moz-border-radius:12px; border-radius:12px;
min-height:100px;
}
.hikamarket_uploader_image_empty {
width:100%;
padding:30px 0px;
text-align:center;
}
/*-- DL DT DD --*/
dl.hikam_options,
dl.hikam_suboptions {
margin-bottom:2px;
}
dl.hikam_options > dt {
float:left;
clear:left;
font-weight:bold;
padding:5px;
width:120px;
text-align:right;
line-height:18px;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
dl.hikam_options.large > dt {
width:180px;
}
dl.hikam_options > dt label {
margin:0px;
}
dl.hikam_options > dd {
margin-left:130px;
padding-top:4px;
padding-bottom:4px;
line-height:20px;
min-height:20px;
float:none;
}
dl.hikam_options.large > dd {
margin-left:190px;
}
dl.hikam_options dd div.hikam_options_nl {
height:20px;
}
/*
* Toggle
*/
div.toggle_loading {
width:16px;
height:16px;
display:inline-block;
}
div.toggle_onload {
width:16px;
height:16px;
display:inline-block;
background-image:url('../../com_hikashop/images/spinner.gif');
}
div.toggle_onload a {
display:none;
}
div.toggle_loading a.unpublish {
width:16px;
height:16px;
display:inline-block;
background-image:url('../images/icon-16/unpublish.png');
}
div.toggle_loading a.publish {
width:16px;
height:16px;
display:inline-block;
background-image:url('../images/icon-16/publish.png');
}
div.toggle_loading a.refresh {
width:16px;
height:16px;
display:inline-block;
background-image:url('../images/icon-16/refresh.png');
}
/*
*
*/
span.acl-icon {
display:block;
height:16px;
width:100%;
margin:0 auto;
background-position:50% 50%;
background-repeat:no-repeat;
}
span.acl-icon:hover {
cursor:pointer;
}
td span.acl-icon {
background-image:url('../images/icon-16/notset.png');
}
td.published span.acl-icon {
background-image:url('../images/icon-16/publish.png');
}
td.unpublished span.acl-icon {
background-image:url('../images/icon-16/unpublish.png');
}
td.partial span.acl-icon {
background-image:url('../images/icon-16/partial.png');
}
td.published.set {
background-color:#dff0d8 !important;
}
td.unpublished.set {
background-color:#f2dede !important;
}
a.acl-apply {
height:16px;
width:16px;
margin:2px 5px;
display:inline-block;
background-image:url(../images/icon-16/save.png);
}
a.acl-apply span {
display:none;
}
a.acl-cancel {
height:16px;
width:16px;
margin:2px 5px;
display:inline-block;
background-image:url(../images/icon-16/delete.png);
}
a.acl-cancel span {
display:none;
}
.hikamarket_acl_opt_list td label {
line-height: 1.8em;
}
.hikamarket_acl_opt_list td input {
max-width:100px;
}
.hikamarket_acl_opt_list td.hikamarket_acl_opt:hover {
background-color: #B7E1F7;
cursor:pointer;
}
.hikamarket_acl_opt_list td.hikamarket_acl_opt .acl_value {
white-space: nowrap;
}
/**
* Panels
*/
.hikamarket_panel {
margin-bottom: 10px;
margin-right:4px;
background-color:#fff;
border: 1px solid #ddd;
border-radius: 4px;
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05);
box-shadow: 0 1px 1px rgba(0,0,0,0.05);
}
.hikamarket_panel_heading {
padding: 10px 15px;
border-bottom: 1px solid transparent;
border-top-right-radius: 3px;
border-top-left-radius: 3px;
color: #333;
background-color:#f0f0f0;
border-color:#cccccc;
}
.hikamarket_panel_body {
padding: 10px
}
.hikamarket_empty_chart {
width:100%;
text-align:center;
margin-top: 70px;
}
/*
* Gallery
*/
ul#hikaGallery {
list-style: none;
margin:0px;
position:relative;
top:0px;
bottom:0px;
left:0px;
right:0px;
outline:0px none;
padding:0px;
}
ul#hikaGallery li.hikaGalleryItem {
display: block;
float: left;
height: 125px;
}
ul#hikaGallery li.hikaGalleryItem .hikaGalleryPhoto {
position: relative;
float:left;
width:110px;
margin:5px 5px 5px 5px;
padding:3px;
text-decoration:none;
border:1px solid #efefef;
border-radius:4px;
box-shadow: 2px 2px 2px rgba(0,0,0,0.5);
background:white;
}
ul#hikaGallery li.hikaGalleryItem .hikaGalleryPhoto {
background:white;
color:black;
font-size:11px;
line-height:1.2em;
}
ul#hikaGallery li.hikaGalleryItem.selected .hikaGalleryPhoto {
background-color:#45a6e3 !important; /* #056eaf; */
}
ul#hikaGallery li.hikaGalleryItem .hikaGalleryPhoto img {
height:100px;
display:block;
margin:0px auto;
border:0px none;
}
ul#hikaGallery li.hikaGalleryItem .hikaGalleryPhoto .hikaGalleryChk {
position:absolute;
top:82px;
left:10px;
display:block;
margin:1px auto;
}
ul#hikaGallery li.hikaGalleryItem span.photo_name {
display: inline-block;
overflow:hidden;
white-space:nowrap;
width:100%;
}
ul#hikaGallery li.hikaGalleryItem div.hikaGalleryCommand {
display:none;
}
ul#hikaGallery li.hikaGalleryItem:hover .hikaGalleryPhoto {
z-index:20;
}
ul#hikaGallery li.hikaGalleryItem:hover div.hikaGalleryCommand {
display:block;
}
/**
*
*/
dl.hikamarket_pay_result {
margin:10px;
}
dl.hikamarket_pay_result dd {
margin-bottom:6px;
}
#hikamarket_pay_total {
font-size:1.2em;
}
@media (min-width:992px) {
.hkc-md-last {
float:right;
}
}
/*
* Joomla 3.0
*/
.btn-small .icon-hikamarket {
background-image:url(../images/icon-14/hikamarket.png);
vertical-align:middle;
}
#hikamarket_main_content button.btn > img {
max-width:inherit;
}
#hikamarket_main_content #cpanel .icon-wrapper {
width:auto;
height:auto;
display:block;
}
#hikamarket_main_content #cpanel div.icon {
text-align: center;
margin-right: 15px;
float: left;
margin-bottom: 15px;
}
body.com_hikamarket div.modal-body iframe {
border:0px;
}
.hikamarket_title_link.hikamarket_title_j3 { color:white; }
.hikamarket_title_link span.icon-hikamarket {
background-image:url(../images/icons-32/logo.png);
width:32px; height: 32px;
vertical-align:middle;
}
body.com_hikamarket .modal-body{
max-height: none !important;
}
#hikamarket_main_content #cpanel div.icon a {
background-color: #fff;
background-position: -30px;
display: block;
float: left;
height: 97px;
width: 108px;
color: #565656;
vertical-align: middle;
text-decoration: none;
border: 1px solid #CCC;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-transition-property: background-position,
-webkit-border-bottom-left-radius, -webkit-box-shadow;
-moz-transition-property: background-position,
-moz-border-radius-bottomleft, -moz-box-shadow;
-webkit-transition-duration: 0.8s;
-moz-transition-duration: 0.8s;
}
#hikamarket_main_content #cpanel div.icon a:hover,
#hikamarket_main_content #cpanel div.icon a:focus,
#hikamarket_main_content #cpanel div.icon a:active {
background-position: 0px center;
/* border-bottom-left-radius: 50% 20px; */
background-color: #fafafa;
box-shadow: -5px 10px 15px rgba(0, 0, 0, 0.25);
position: relative;
z-index: 10;
}
#hikamarket_main_content #cpanel div.icon a span {
width:auto;
}
#hikamarket_main_content fieldset.radio {
border: 0;
margin-bottom: 5px;
}
#hikamarket_main_content #cpanel span {
display: block;
text-align: center;
}
#hikamarket_main_content fieldset.adminform {
padding: 5px 17px 17px;
}
#hikamarket_main_content fieldset.adminform legend {
margin: 0px;
padding: 0px 3px;
border: 0px solid;
width: auto;
/* IE Fix */
position:relative;
float:none;
top : 0px !important;
}
#hikamarket_main_content table td.order input {
width:20px;
}
#hikamarket_main_content button.btn,
#hikamarket_main_content a img {
margin-bottom: 9px;
}
#hikamarket_main_content .oTreeNode a img,
#hikamarket_main_content a button img {
margin-bottom:0px;
}
.hikaradios {
margin:2px 2px 5px 3px;
}
#module-form #attrib-hikamarket > .control-group,
#module-form #attrib-HikaMarket > .control-group,
#item-form #attrib-hikamarket > .control-group {
display:none;
}
@media screen and (max-width: 640px) {
div.hikashop_backend_tile_edition .input-append + label { display: none;
}
}
@media screen and (max-width: 1733px) and (min-width: 1600px) {
div.hikashop_backend_tile_edition .input-append + label { display: none;
}
}
div.hika_backend_tile_edition th { text-align: left; }
div.hikashop_backend_tile_edition div.nameboxes { border: 1px solid #ccc
!important; }
div.hikashop_backend_tile_edition .input-append { margin-left: 2px; }
div.hikashop_backend_tile_edition .editor { margin: 10px; }
div.hikashop_backend_tile_edition dd { margin-right: 25px; }
div.hikashop_backend_tile_edition .hikashop_dropzone { width: 95%;
margin-left: 12px; }
div.hikashop_backend_tile_edition dd.input_large > input { width: 98%;
}
div.hikashop_backend_tile_edition .input-prepend { margin-bottom: 0px
!important;
div.hikashop_backend_tile_edition dl.hika_options { margin-bottom: 18px;
padding: 5px; }
div.hikashop_backend_tile_edition dl.hika_options > div { margin-bottom:
3px; min-width: 462.396px; }
div.hikashop_backend_tile_edition .hikashop_tile_title {
background-image: linear-gradient(#f9f9f9, #e1e1e1);
text-align: center;
font-weight: bold;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
text-transform: uppercase;
padding: 5px;
}
div.hikashop_backend_tile_edition .hikashop_tile_block > div {
background-color: #fbfbfb;
min-height: 280px;
margin-top: 12px;
border: 1px solid #d4d4d4;
border-radius: 10px;
}
div.hikashop_backend_tile_edition .hikashop_file_upload_div {
background-color: white;
min-height: 104px;
border-radius: 0px 0px 5px 5px;
}}
div.hikashop_backend_tile_edition dl.hika_options > dd > input,
#hikashop_backend_tile_edition dl.hika_options > dd > .nameboxes,
div.hikashop_backend_tile_edition dl.hika_options > dd >
div.input-append,
div.hikashop_backend_tile_edition dl.hika_options > dd >
div.input-append input,
div.hikashop_backend_tile_edition dl.hika_options > dd >
div.input-append button {
margin-bottom: 2px;
}
/**
* Joomla 4
*/
.hikamarket_main_content #cpanel span {
display: block;
text-align: center;
box-sizing: unset;
}
css/dropdown.css000064400000006105151161767140007715 0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
.hkdropdown .caret,
.hkdropup .caret {
display: inline-block;
width: 0;
height: 0;
margin-left: 2px;
vertical-align: middle;
border-top: 4px dashed;
border-top: 4px solid \9;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
}
.hkdropdown,
.hkdropup {
position: relative;
display: inline-block;
}
.hkdropdown > button.btn,
.hkdropup > button.btn {
margin-bottom:0px !important;
}
.hkdropdown-toggle:focus {
outline: 0;
}
.hkdropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
padding: 5px 0 !important;
margin: 2px 0 0 !important;
list-style: none !important;
font-size: 14px;
text-align: left;
background-color: #ffffff;
border: 1px solid #cccccc;
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-webkit-background-clip: padding-box;
background-clip: padding-box;
}
.hkdropdown-menu.pull-right {
right: 0;
left: auto;
}
.hkdropdown-menu .divider {
height: 1px;
margin: 9px 0 !important;
overflow: hidden;
background-color: #e5e5e5;
}
.hkdropdown-menu > li > a {
display: block;
padding: 3px 20px;
clear: both;
font-weight: normal;
line-height: 1.42857143;
color: #333333;
white-space: nowrap;
text-decoration: none;
}
.hkdropdown-menu > li > a:hover,
.hkdropdown-menu > li > a:focus {
text-decoration: none;
color: #262626;
background-color: #f5f5f5;
}
.hkdropdown-menu > .active > a,
.hkdropdown-menu > .active > a:hover,
.hkdropdown-menu > .active > a:focus {
color: #ffffff;
text-decoration: none;
outline: 0;
background-color: #337ab7;
}
.hkdropdown-menu > .disabled > a,
.hkdropdown-menu > .disabled > a:hover,
.hkdropdown-menu > .disabled > a:focus {
color: #777777;
}
.hkdropdown-menu > .disabled > a:hover,
.hkdropdown-menu > .disabled > a:focus {
text-decoration: none;
background-color: transparent;
background-image: none;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
cursor: not-allowed;
}
.hkdropdown.open > .hkdropdown-menu {
display: block;
}
.hkdropdown.open > a {
outline: 0;
}
.hkdropdown-menu-right {
left: auto;
right: 0;
}
.hkdropdown-menu-left {
left: 0;
right: auto;
}
.hkdropdown-header {
display: block;
padding: 3px 20px;
font-size: 12px;
line-height: 1.42857143;
color: #777777;
white-space: nowrap;
}
.hkdropdown-backdrop {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: 990;
}
.hkdropup .caret {
border-top: 0;
border-bottom: 4px dashed;
border-bottom: 4px solid \9;
content: "";
}
.hkdropup .hkdropdown-menu {
top: auto;
bottom: 100%;
margin-bottom: 2px;
}
.pull-right > .hkdropdown-menu {
right: 0;
left: auto;
}
css/frontend_default.css000064400000107707151161767140011416 0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
/*
* Icons
*/
.iconM-16-hikamarket
{background-image:url(../images/icon-16/hikamarket.png);}
.iconM-32-hikamarket
{background-image:url(../images/icon-32/hikamarket.png);}
.iconM-48-hikamarket
{background-image:url(../images/icon-48/hikamarket.png);}
.iconM-32-apply {background-image:url(../images/icon-32/apply.png);}
.iconM-32-back {background-image:url(../images/icon-32/back.png);}
.iconM-32-cancel {background-image:url(../images/icon-32/cancel.png);}
.iconM-32-delete {background-image:url(../images/icon-32/delete.png);}
.iconM-32-new {background-image:url(../images/icon-32/new.png);}
.iconM-32-save {background-image:url(../images/icon-32/save.png);}
.iconM-32-savenew {background-image:url(../images/icon-32/savenew.png);}
.iconM-32-invoice {background-image:url(../images/icon-32/invoice.png);}
.iconM-32-up {background-image:url(../images/icon-32/up.png);}
.iconM-32-cart
{background-image:url(../../com_hikashop/images/icons/icon-32-show_cart.png);}
.iconM-32-ordering {background-image:url(../images/icon-32/save.png);}
.iconM-32-category {background-image:url(../images/icon-32/category.png);}
.iconM-32-parent-category
{background-image:url(../images/icon-32/parent-category.png);}
.iconM-32-shipping-invoice
{background-image:url(../images/icon-32/shipping-invoice.png);}
.iconM-32-email {background-image:url(../images/icon-32/send-email.png);}
.iconM-32-report {background-image:url(../images/icon-32/report.png);}
.iconM-32-vendor {background-image:url(../images/icon-32/vendor.png);}
.iconM-32-order-status
{background-image:url(../images/icon-32/order-status.png);}
.iconM-32-approve {background-image:url(../images/icon-32/approve.png);}
.iconM-32-import {background-image:url(../images/icon-32/import.png);}
.iconM-32-pay {background-image:url(../images/icon-32/pay.png);}
.iconM-48-order {background-image:url(../images/icon-48/order.png);}
.iconM-48-products {background-image:url(../images/icon-48/products.png);}
.iconM-48-category {background-image:url(../images/icon-48/category.png);}
.iconM-48-user {background-image:url(../images/icon-48/user.png);}
.iconM-48-account {background-image:url(../images/icon-48/account.png);}
.iconM-48-discount {background-image:url(../images/icon-48/discount.png);}
.iconM-48-shipping {background-image:url(../images/icon-48/shipping.png);}
.iconM-48-payment {background-image:url(../images/icon-48/payment.png);}
.iconM-48-characteristic
{background-image:url(../images/icon-48/characteristic.png);}
.iconM-48-vendor {background-image:url(../images/icon-48/vendor.png);}
.hk-icon-14
{width:14px;height:14px;display:inline-block;vertical-align:middle;}
.iconM-14-length {background-image:url(../images/icon-14/length.png);}
.iconM-14-width {background-image:url(../images/icon-14/width.png);}
.iconM-14-height {background-image:url(../images/icon-14/height.png);}
/*
* CPanel
*/
#hikamarketcpanel .icon-wrapper {
width:auto;
height:auto;
display:block;
}
#hikamarketcpanel div.icon {
text-align:center;
margin-right:15px;
float:left;
margin-bottom:15px;
width:auto !important;
height:auto !important;
}
#hikamarketcpanel div.icon a {
background-color:#fff;
background-position:-30px;
display:block;
float:left;
height:97px;
width:108px;
color:#565656;
vertical-align:middle;
text-decoration:none;
border:1px solid #CCC;
-webkit-border-radius:5px; -moz-border-radius:5px; border-radius:5px;
-webkit-transition-property:background-position,
-webkit-border-bottom-left-radius, -webkit-box-shadow;
-moz-transition-property:background-position,
-moz-border-radius-bottomleft, -moz-box-shadow;
-webkit-transition-duration:0.8s;
-moz-transition-duration:0.8s;
}
#hikamarketcpanel div.icon a:hover,
#hikamarketcpanel div.icon a:focus,
#hikamarketcpanel div.icon a:active {
background-position:0px center;
/* border-bottom-left-radius: 50% 20px; */
background-color:#fafafa;
box-shadow:-2px 3px 8px rgba(0, 0, 0, 0.25);
position:relative;
z-index:10;
}
#hikamarketcpanel div.icon a span {
width:auto;
display:block;
}
.hikamarket_stat_table thead th {
text-align:left;
}
/*
* Filter Zone
*/
.hikam_filter {
border:0px;
margin-bottom:3px;
width:100%;
}
.hikam_filter td, .hikam_filter tr {
border:0 none;
}
/*
* Listing Zone
*/
table.hikam_table {
width:100%;
max-width: 100%;
border-spacing:1px;
color:#666;
}
table.hikam_table.hikam_bordered,
table.hikam_table.hikam_bordered td,
table.hikam_table.hikam_bordered > thead > tr > th {
border:1px solid #ddd;
}
table.hikam_table tr.row0,
table.hikam_table > tbody > tr:nth-of-type(odd) {
background-color:#f9f9f9;
}
table.hikam_table tr.row1 {
background-color:#fefefe;
}
table.hikam_table tbody tr.row0:hover,
table.hikam_table tbody tr.row1:hover {
background-color:#f0f0f0;
}
table.hikam_table td {
padding: 6px;
line-height: 1.42857143;
vertical-align: top;
border-top: 1px solid #ddd;
}
table.hikam_table th,
table.hikam_table.hikam_bordered > thead > tr > th {
vertical-align: bottom;
text-align: left;
border-bottom: 2px solid #ddd;
font-weight:bold;
padding:6px;
}
table.hikam_table thead a:hover {
text-decoration:none;
}
/* -- */
table.hikam_listing thead th img {
vertical-align:middle;
padding-left:3px;
}
table.hikam_listing tfoot td {
border:0 none;
border-top:1px solid #999;
}
table.hikam_listing tfoot tr {
text-align:center;
border:0 none;
}
table.hikam_listing input.text_ordering {
width: 40px;
}
table.hikam_listing th.titlenum {
width:1%;
min-width:30px;
}
table.hikam_listing th.titlebox {
width:1%;
min-width:15px;
}
table.hikam_listing td.order input {
width:25px;
}
table.hikam_listing span.hikam_btn_text {
display:none;
}
table.hikam_listing img.hikam_imglist {
float:left;
margin-right:5px;
margin-bottom:5px;
}
/**
*
*/
.hk-card-product,
.hk-card-category,
.hk-card-vendor-order,
.hk-card-discount,
.hk-card-plugin {
margin-bottom:10px;
}
.hk-card-vendor-order .hk-card-body {
padding:7px 15px;
}
.hk-card-discount .hk-card-body,
.hk-card-plugin .hk-card-body {
padding:10px 15px;
}
.hk-card-vendor-order .hk-card-header,
.hk-card-discount .hk-card-header,
.hk-card-plugin .hk-card-header {
font-weight:bold;
}
.hk-card-vendor-order .hkm_order_price,
.hk-card-product .hkm_product_price,
.hk-card-category .hkm_category_children,
.hk-card-plugin .hkm_plugin_type {
text-align:right;
}
.hk-card-product .hkm_product_code {
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
.hk-card-product .hkm_product_actions {
text-align:right;
}
.hk-card-category .hkm_category_children i.fa,
.hk-card-category .hkm_category_children i.fas,
.hk-card-category .hkm_category_children i.far {
margin-right:3px;
}
.hikam_float_img {
float:left;
margin-right:5px;
}
.hk-card-product .hkm_product_code,
.hk-card-product .hkm_product_stock,
.hk-card-product .hkm_product_stats {
margin-top:0px;
margin-bottom:3px;
}
.hk-card-product .hkm_product_fields {
margin:0;
}
.hk-card-product .hkm_order_value {
width:20px;
text-align:center;
}
.hk-card-vendor-order .hkm_order_status > .order-label {
font-size: 12px;
line-height: 14px;
padding: 4px 7px;
}
@media (max-width:768px) {
.hk-card-product .hkm_product_price,
.hk-card-product .hkm_product_actions,
.hk-card-category .hkm_category_children,
.hk-card-category .hkm_category_actions,
.hk-card-plugin .hkm_plugin_type {
text-align:left;
}
}
/*
* Specific listing
*/
td.hikamarket_order_total_value { text-align: center; }
td.hikamarket_product_quantity_value { text-align: center; }
td.hikamarket_product_actions_value { text-align: center; }
td.hikamarket_discount_value_value { text-align: center; }
td.hikamarket_discount_quota_value { text-align: center; }
td.hikamarket_discount_actions_value { text-align: center; }
td.hikamarket_discount_id_value { text-align: center; }
span.hikamarket_list_edit { }
span.hikamarket_list_single_edit { }
table.hikam_table td.hikamarket_order_item_option {
padding-left: 25px;
background: url('../../com_hikashop/images/j_arrow.png')
no-repeat 10px center;
}
/*
*
*/
.hikam_search_zone > input[type="text"] {
margin-bottom:0;
}
div.hikam_search_zone {
margin-bottom:5px;
}
div.hikamarket_search_block, div.hikam_sort_zone {
display:inline-block;
}
div.hikamarket_search_block > *,
div.hikam_sort_zone > * {
margin-bottom:5px;
}
/*
*
*/
div.hikamarket_search_block input {
margin-bottom:0px;
}
/*
*
*/
table.hikam_blocks {
border:0px;
width:100%;
}
table.hikam_blocks > tbody > tr > td,
table.hikam_blocks > tr > td {
vertical-align:top;
border:0px;
}
table.hikam_blocks tr {
border:0px;
}
table.hikam_blocks td.hikam_block_l {padding-right:3px;}
table.hikam_blocks td.hikam_block_r {padding-left:3px;}
table.hikam_blocks td.hikam_block_d30 {width:30%;}
table.hikam_blocks td.hikam_block_x150 {width:150px;}
/*
*
*/
table.hikam_options {
border-spacing:2px;
border-collapse:separate;
width:100%;
}
table.hikam_options td {
padding:1px;
margin:0px;
vertical-align:middle; /* TODO */
border:0px;
}
table.hikam_options td.key,
table.hikam_options td.paramlist_key {
background-color:#F6F6F6;
border-bottom:1px solid #E9E9E9;
border-right:1px solid #E9E9E9;
color:#666666;
font-weight:bold;
text-align:right;
width:120px;
}
table.hikam_options label {
display:inline;
}
/*-- DL DT DD --*/
dl.hikam_options,
dl.hikam_suboptions {
margin-bottom:2px;
}
dl.hikam_options > dt {
float:left;
clear:left;
font-weight:bold;
padding:5px;
width:120px;
text-align:right;
line-height:18px;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
dl.hikam_options.large > dt {
width:180px;
}
dl.hikam_options.dl_glue {
margin-top:0px;
}
dl.hikam_options > dt label {
margin:0px;
}
dl.hikam_options > dd {
margin-left:130px;
padding-top:4px;
padding-bottom:4px;
line-height:20px;
min-height:20px;
float:none;
}
dl.hikam_options.large > dd {
margin-left:190px;
}
/*
dl.hikam_options > dd span {
display:inline-block;
margin-top:3px;
margin-bottom:3px;
}
*/
dl.hikam_options dd div.hikam_options_nl {
height:20px;
}
@media (max-width:768px) {
dl.hikam_options.large > dt {
width:auto;
text-align:left;
padding-left:0px;
float:none;
}
dl.hikam_options.large > dd {
margin-left:auto;
}
}
/*
*
*/
fieldset.hikam_field {
padding:5px;
overflow:visible;
border:1px solid #ccc;
background-color:white;
}
fieldset.hikam_field .hikam_edit {
float:right;
margin-top:-22px;
}
fieldset.hikam_field .hikam_edit img {
}
fieldset.hikam_field .hikam_edit span {
display:none;
}
fieldset.hikam_field .hikam_edit a,
fieldset.hikam_field .hikam_edit a:hover {
text-decoration:none;
background-color:transparent !important;
color:black !important;
}
fieldset.hikam_field legend {
margin:0;
padding:0;
}
fieldset.hikam_field label,
fieldset.hikam_field span.faux-label {
display:block;
margin:2px 2px;
}
fieldset.hikam_field ul {
margin:0;
padding:0;
}
fieldset.hikam_field select {
width:150px;
}
fieldset.hikam_field dd {
float:none;
}
td.hikam_price input {
width:100px;
}
td.hikam_currency select,
td.hikam_currency .chzn-container {
width:100px;
}
td.hikam_qty input {
width:40px;
}
label.hikamarket_product_description_label {
display:none;
}
/*
* Toolbar
*/
.hikam_toolbar {
padding: 2px;
border: 1px solid #ddd;
margin-bottom:3px;
background-color:#fafafa;
}
.hikam_toolbar .hikabtn {
margin-right:3px;
}
.hikam_toolbar .fa {
font-size: 28px;
color: #297fbb;
}
.hikam_toolbar div.sep {
display:inline-block;
margin-right:10px;
width:1px;
}
.hikam_toolbar .hikam_btn_16 div.sep { height:24px; }
.hikam_toolbar .hikam_btn_32 div.sep { height:40px; }
.hikam_toolbar .hikam_btn_48 div.sep { height:56px; }
.hikam_toolbar span.btnName {
display:block;
}
.hikam_toolbar span.btnIcon {
display:inline-block;
}
.hikam_toolbar .hikam_btn_16 span.btnIcon {
width:16px;
height:16px;
}
.hikam_toolbar .hikam_btn_32 span.btnIcon {
width:32px;
height:32px;
}
.hikam_toolbar .hikam_btn_48 span.btnIcon {
width:48px;
height:48px;
}
.hikam_toolbar .hikam_toolbar_right {
float:right;
}
.hikam_toolbar .hikam_toolbar_right div {
*float:none;
}
.hikam_breadcrumb {
margin:4px 0px;
background-color:#f5f5f5;
border-radius:4px;
border:1px solid #e1e1e1;
padding:7px 12px;
}
.breadcrumb_sep {
color:#777777;
padding:0 5px;
user-select:none;
cursor:default;
}
/*
* Namebox
*/
div.nameboxes {
margin:0;
padding:0px 5px;
height:auto !important;
height:1%;
font:11px "Lucida Grande", "Verdana";
cursor:text;
background-color:#fff;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%,
color-stop(2%, #eeeeee), color-stop(20%, #ffffff));
background-image: -webkit-linear-gradient(#eeeeee 2%, #ffffff 20%);
background-image: -moz-linear-gradient(#eeeeee 2%, #ffffff 20%);
background-image: -o-linear-gradient(#eeeeee 2%, #ffffff 20);
background-image: linear-gradient(#eeeeee 2%, #ffffff 20%);
border:1px solid #aeaeae;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-border-radius:3px; -moz-border-radius:3px; border-radius:3px;
}
.ui-sortable div.namebox {
cursor:move !important;
}
div.nameboxes div {
float:left;
margin:2px 5px 2px 0;
}
div.nameboxes div.namebox {
border:1px solid #aaa;
padding:1px 5px 2px;
min-height:14px;
line-height:14px;
-webkit-border-radius:4px; -moz-border-radius:4px; border-radius:4px;
cursor: default;
background-color: #e4e4e4;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%,
color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%,
#e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%,
#e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8
52%, #eeeeee 100%);
background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8
52%, #eeeeee 100%);
background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%,
#eeeeee 100%);
background-clip: padding-box;
box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
}
div.nameboxes div.namebox {
padding-right:18px;
position:relative;
z-index:1;
}
div.nameboxes div.nametext input {
border:0px !important;
margin:2px 0px 0px 0px;
outline:none;
-webkit-box-shadow:none;
-moz-box-shadow:none;
box-shadow:none;
padding:0px;
}
div.nameboxes div.nametext input,
div.nameboxes div.nametext input:focus {
background:none;
}
div.nameboxes div.nametext input.placeholder {
color:#5c5c5c;
}
div.nameboxes div.namebox-focus {
border-color:#598BEC;
background:#598BEC;
color:white;
}
div.nameboxes div.namebox-hover {
background:#BBCEF1;
border:1px solid #6D95E0;
}
div.nameboxes div.namebox-focus {
border-color:#598BEC;
background:#598BEC;
color:white;
}
div.nameboxes div.namebox a.closebutton,
div.nameboxes div.namebox a.editbutton {
position:absolute;
right:4px;
top:5px;
display:block;
width:9px;
height:9px;
font-size:1px;
background:url('../images/close.png') !important;
background-color:transparent !important;
padding: 0px !important;
}
div.nameboxes div.namebox a.editbutton {
background: url('../images/edit.png') !important;
}
div.nameboxes div.namebox a.closebutton:hover,
div.nameboxes div.namebox a.closebutton:focus,
div.nameboxes div.namebox a.editbutton:hover,
div.nameboxes div.namebox a.editbutton:focus {
background-position:9px !important;
}
div.nameboxes div.namebox a.closebutton span,
div.nameboxes div.namebox a.editbutton span { display: none; }
div.nameboxes div.namebox-focus a.closebutton,
div.nameboxes div.namebox-focus a.closebutton:hover,
div.nameboxes div.namebox-focus a.editbutton,
div.nameboxes div.namebox-focus a.editbutton:hover { background-position:
bottom !important; }
div.namebox-popup {
position:relative;
}
div.namebox-popup div.namebox-popup-container {
position: absolute;
right: 0px;
left: 0px;
min-width:300px;
height:130px;
}
div.namebox-popup div.namebox-popup-content {
position:absolute;
background-color:white;
border:1px solid #aeaeae;
-webkit-border-radius:3px; -moz-border-radius:3px; border-radius:3px;
left:0px;
right:0px;
top:0px;
bottom:0px;
overflow:auto;
z-index:10;
}
div.namebox-popup div.oresize {
right:33%;
bottom: 4px;
width:33%;
height:4px;
max-width:33%;
max-height:4px;
cursor:n-resize;
border:0;
background-color:#9e9e9e;
}
div.acl-popup-content {
position:absolute;
background-color:white;
border:1px solid #aeaeae;
-webkit-border-radius:3px; -moz-border-radius:3px; border-radius:3px;
height:130px;
width:200px;
overflow:auto;
}
/*
* Clean Button
*/
a.marketCleanButton {
display:inline-block;
width:9px;
height:9px;
background:url('../images/close.png') !important;
background-color:transparent !important;
position:relative;
left:-14px;
}
a.marketCleanButton:hover, a.marketCleanButton:focus {
background-position:9px !important;
}
a.marketCleanButton span {
display:none !important;
}
/*
* Category explorer
*/
div.hikam_breadcrumb_explorer {
position:relative;
}
div.hikam_breadcrumb_explorer span.breadcrumb_expand_icon {
/* width:16px;
height:16px;*/
float:right;
color: #337ab7;
/* background-image:url('../images/icon-16/category.png');*/
}
.hikam_breadcrumb_explorer .hikam_category_explorer {
display:none;
position:absolute;
left:0;
top:28px;
min-height:250px;
max-width:100%;
min-width:50%;
background:white;
overflow:scroll;
border:1px solid #ccc;
z-index:60;
}
.hikam_breadcrumb_explorer:hover .hikam_category_explorer,
.hikam_breadcrumb_explorer.explorer_open .hikam_category_explorer {
display:block;
}
.hikam_breadcrumb_explorer.explorer_open .hikam_breadcrumb {
background-color:#c0d6ed;
}
#hikam_category_listing div.oTree,
#hikam_product_listing div.oTree {
width: 150px;
overflow: auto;
height:100%;
}
#hikam_category_listing div.category_explorer_btn_hide a,
#hikam_product_listing div.category_explorer_btn_hide a {
width:100%;
height:16px;
display:inline-block;
font-size:10px;
padding:3px 0px;
background:url('../images/category_hide.png') no-repeat right
#dae1e4 !important;
border-bottom:1px solid #adb7c4;
text-decoration: none;
color:#426ba4;
}
#hikam_category_listing div.category_explorer_btn_show,
#hikam_product_listing div.category_explorer_btn_show {
width:18px;
height:100%;
}
#hikam_category_listing div.category_explorer_btn_show a,
#hikam_product_listing div.category_explorer_btn_show a {
min-height:200px;
height:100%;
width:18px;
display:block;
background:url('../images/category_show.png') no-repeat left
center #dae1e4 !important;
border-right:1px solid #adb7c4;
}
#hikam_category_listing div.category_explorer_btn_show a span,
#hikam_product_listing div.category_explorer_btn_show a span {
display:none;
}
/*
*
*/
.hikamarket_section_container {
border:2px solid #ddd;
-webkit-border-radius:4px; -moz-border-radius:4px; border-radius:4px;
padding:0px;
margin-bottom:5px;
}
.hikamarket_section_toggle {
cursor: pointer;
background: url('../images/otree/nolines_minus.gif') no-repeat
right;
}
h3.hikamarket_section_toggle {
margin:0px;
padding:4px 6px;
}
.hikamarket_section_container > div {
margin:0px 3px;
}
.hikamarket_section_toggle {
background-color: #eaeaea;
}
.hikamarket_section_toggle:hover {
background-color: #dddddd;
}
.hikamarket_section_toggle.hk_closed {
background: #eaeaea url('../images/otree/nolines_plus.gif')
no-repeat right;
}
.hikamarket_section_toggle.hk_closed:hover {
background-color: #dddddd;
}
div.hk_collapsing {
overflow: hidden;
max-height: 0;
-webkit-transition: max-height .35s ease;
-o-transition: max-height .35s ease;
transition: max-height .35s ease;
}
div.hk_collapsing.open {
max-height:8000px;
overflow: visible;
}
div.hk_collapsed {
display:none;
}
.hkinput-group {
display:inline-block;
}
.hkinput-group > .hk-control {
margin:0px;
}
.hkinput-group-addon {
width: 1%;
white-space: nowrap;
vertical-align: middle;
padding: 5px 10px;
font-size: 14px;
font-weight: 400;
line-height: 1;
color: #555;
text-align: center;
background-color: #eee;
border: 1px solid #ccc;
border-radius: 4px;
}
.hkinput-group-addon:first-child {
border-right: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.hkinput-group .hk-control:last-child, .hkinput-group-addon:last-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
/*
* Infinity Button
*/
a.marketInfinityButton {
display:inline-block;
width:13px;
height:9px;
background:url('../images/infinity.png') transparent 0px 0px
!important;
position:relative;
left:-16px;
top:0px;
}
/* J3 Rule */
body.com_hikamarket a.marketInfinityButton {
left:-19px;
top:-4px;
}
a.marketInfinityButton:hover, a.marketInfinityButton:focus {
background-position:13px !important;
}
a.marketInfinityButton span {
display:none !important;
}
.hikamarket_product_quantity .input-append {
margin-bottom:0px;
}
ul.hikamarket_product_images a,
div#hikamarket_category_current_image a,
div#hikamarket_category_image_content a {
background-color:transparent !important;
}
ul.hikamarket_product_images .ui-sortable-placeholder {
border:1px dotted black;
visibility:visible !important;
width:50px;
height:50px !important;
}
ul.hikamarket_product_images .ui-sortable-placeholder * {
visibility:hidden;
}
ul.hikamarket_product_images,
ul.hikashop_uploader_images {
list-style-type:none;
margin:0;
padding:10px 0 0 0;
}
ul.hikamarket_product_images li {
display:inline-block;
position:relative;
margin-left: 3px !important;
}
.hikamarket_small_image_div {
display:inline-block;
}
.hikamarket_product_main_image_thumb {
display:block;
position:relative;
}
.hikamarket_small_image_div .hikamarket_image img {
max-width:50px;
max-height:50px;
}
div.hikashop_main_image_div,
div.hikashop_main_file_div {
position:relative;
}
div.hikashop_uploader_image_add,
div.hikashop_uploader_file_add {
/*
position:absolute;
top:5px;
right:5px;
*/
position:relative;
float:right;
}
.uploader_data_container {
clear:right;
}
ul.hikashop_uploader_images .ui-sortable-placeholder {
border:1px dotted black;
visibility:visible !important;
width:50px;
height:50px !important;
}
ul.hikashop_uploader_images .ui-sortable-placeholder * {
visibility:hidden;
}
/* */
div.hikashop_uploader_image_add span,div.hikashop_uploader_file_add span {
display:inline-block;
/* width:16px;height:16px; */
}
div.hikashop_uploader_image_add
span.hika_add_btn,div.hikashop_uploader_file_add
span.hika_add_btn,div.hikashop_uploader_image_add
span.hikam_add_btn,div.hikashop_uploader_file_add span.hikam_add_btn {
background-image:url(../images/icon-16/plus.png);
width:16px;height:16px;
}
div.hikashop_uploader_image_add
span.hika_upload_btn,div.hikashop_uploader_file_add
span.hika_upload_btn,div.hikashop_uploader_image_add
span.hikam_upload_btn,div.hikashop_uploader_file_add span.hikam_upload_btn
{
background-image:url(../images/icon-16/upload.png);
width:16px;height:16px;
}
div.hikashop_uploader_image_add
span.hika_link_btn,div.hikashop_uploader_file_add
span.hika_link_btn,div.hikashop_uploader_image_add
span.hikam_link_btn,div.hikashop_uploader_file_add span.hikam_link_btn {
background-image:url(../images/icon-16/link.png);
width:16px;height:16px;
}
/*
*
*/
div.hikamarket_product_file {
float:left;
width:220px;
min-height:30px;
margin:5px;
padding:3px;
/* border:1px solid #565656; */
border:1px solid #aaa;
/* padding:1px 5px 2px; */
-webkit-border-radius:4px; -moz-border-radius:4px; border-radius:4px;
background-color: #e4e4e4;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%,
color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%,
#e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%,
#e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8
52%, #eeeeee 100%);
background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8
52%, #eeeeee 100%);
background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%,
#eeeeee 100%);
background-clip: padding-box;
box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
}
div.hikamarket_product_file:hover {
background-color: #f4f4f4;
background-image: none;
}
body.com_hikamarket div.hikamarket_product_file a img {
margin-bottom: 0px;
}
.hikamarket_product_file .deleteFile {
float:right;
}
#hikamarket_products_form .fullrow {
width:95%;
}
#hikamarket_product_variant_label span {
margin-left: 0.5em;
}
td.hikam_column_move {
cursor: move;
}
#hikamarket_product_variant_list tr.selectedVariant,
#hikamarket_product_variant_list tr.selectedVariant td {
background-color: #C1DAD6;
}
#hikamarket_product_variant_list tr.selectedVariant:hover,
#hikamarket_product_variant_list tr.selectedVariant:hover td {
background-color: #ACD1E9;
}
/*
* HikaShop pages
*/
.hikamarket_show_edit {
float:left;
}
.hikamarket_history_container {
overflow:auto;
max-height:180px;
}
/*
* Toggle
*/
div.toggle_loading {
width:16px;
height:16px;
display:inline-block;
}
div.toggle_onload {
width:16px;
height:16px;
display:inline-block;
background-image:url('../../com_hikashop/images/spinner.gif');
}
div.toggle_onload a {
display:none;
}
div.toggle_loading a.unpublish {
width:16px;
height:16px;
display:inline-block;
background-image:url('../images/icon-16/unpublish.png');
}
div.toggle_loading a.publish {
width:16px;
height:16px;
display:inline-block;
background-image:url('../images/icon-16/publish.png');
}
div.toggle_loading a.refresh {
width:16px;
height:16px;
display:inline-block;
background-image:url('../images/icon-16/refresh.png');
}
/*
* Gallery
*/
ul#hikaGallery {
list-style: none;
margin:0px;
position:relative;
top:0px;
bottom:0px;
left:0px;
right:0px;
outline:0px none;
padding:0px;
}
ul#hikaGallery li.hikaGalleryItem {
display: block;
float: left;
height: 125px;
}
ul#hikaGallery li.hikaGalleryItem .hikaGalleryPhoto {
position: relative;
float:left;
width:110px;
margin:5px 5px 5px 5px;
padding:3px;
text-decoration:none;
border:1px solid #efefef;
border-radius:4px;
box-shadow: 2px 2px 2px rgba(0,0,0,0.5);
background:white;
}
ul#hikaGallery li.hikaGalleryItem .hikaGalleryPhoto {
background:white;
color:black;
font-size:11px;
line-height:1.2em;
}
ul#hikaGallery li.hikaGalleryItem.selected .hikaGalleryPhoto {
background-color:#45a6e3 !important; /* #056eaf; */
}
ul#hikaGallery li.hikaGalleryItem .hikaGalleryPhoto img {
height:100px;
display:block;
margin:0px auto;
border:0px none;
}
ul#hikaGallery li.hikaGalleryItem .hikaGalleryPhoto .hikaGalleryChk {
position:absolute;
top:82px;
left:10px;
display:block;
margin:1px auto;
}
ul#hikaGallery li.hikaGalleryItem span.photo_name {
display: inline-block;
overflow:hidden;
white-space:nowrap;
width:100%;
}
ul#hikaGallery li.hikaGalleryItem div.hikaGalleryCommand {
display:none;
}
ul#hikaGallery li.hikaGalleryItem:hover .hikaGalleryPhoto {
z-index:20;
}
ul#hikaGallery li.hikaGalleryItem:hover div.hikaGalleryCommand {
display:block;
}
/*
* Vendor page
*/
.hikamarket_vendor_edit_page .hikamarket_add_vendoruser {
margin-bottom: 5px;
}
.hikamarket_vendor_edit_page .form-actions {
margin-top: 8px;
}
.hikamarket_vendor_edit_page fieldset.input {
padding-top:0px;
}
#hikamarket_vendor_page .hikamarket_vendor_fields table {
min-width:350px;
}
#hikamarket_vendor_page .hikamarket_vendor_image {
padding: 0px 10px 10px 0px;
}
/*
* Vendor listing
*/
.hikamarket_vendors_table {
width:100%;
}
.hikamarket_listing .hikamarket_listing_elem {
float:left;
width:100%;
}
.hikamarket_subcontainer {
padding-top:10px;
padding-bottom:10px;
}
.hikamarket_subcontainer_border {
border:1px solid;
}
.row-fluid .hikamarket_listing_column_1,
.row-fluid-7 .hikamarket_listing_column_1,
.row-fluid-8 .hikamarket_listing_column_1,
.row-fluid-10 .hikamarket_listing_column_1 {
margin-left: 0 !important;
clear:left;
}
/*
* pagination
*/
.hikamarket_listing_pagination {
color:#167e93;
font-size:11px;
text-align:center;
margin-top:25px;
clear:both;
padding-top:20px;
}
.hikamarket_listing_pagination ul.pagination {
text-align:center;
}
.hikamarket_listing_pagination .list-footer .limit {
color:#167e93;
font-weight:bold;
margin-bottom:5px;
}
.hikamarket_listing_pagination .list-footer .limit select {
width: 60px;
}
.hikamarket_listing_pagination .list-footer .limit .inputbox {
margin-left:10px;
border:1px solid #ccc;
color:#167e93;
}
.hikamarket_listing_pagination .list-footer .pagenav {
color:#14caec;
font-weight:bold;
background-color:#FFF;
padding-right:5px;
padding-left:5px;
padding-top:2px;
padding-bottom:2px;
border:1px solid #ccc;
margin-right : 2px;
margin-left : 2px;
}
.hikamarket_listing_pagination .list-footer a.pagenav {
color:#14caec;
background-color:#FFF;
}
.hikamarket_listing_pagination .list-footer a.pagenav:hover {
color:#fff;
background-color:#167e93;
}
.hikamarket_listing_pagination .list-footer span.pagenav {
color:#fff;
background-color:#167e93;
}
.hikamarket_listing_pagination .list-footer span.pagenav_text {
display:none;
}
.hikamarket_listing_pagination .list-footer .counter {
color:#666;
margin-top:15px;
}
.hikamarket_listing_pagination .hikashop_results_counter {
color:#666;
}
/**
* Panels
*/
.hikamarket_panel {
margin-bottom: 10px;
margin-right:4px;
background-color:#fff;
border: 1px solid #ddd;
border-radius: 4px;
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05);
box-shadow: 0 1px 1px rgba(0,0,0,0.05);
}
.hikamarket_panel_heading {
padding: 10px 15px;
border-bottom: 1px solid transparent;
border-top-right-radius: 3px;
border-top-left-radius: 3px;
color: #333;
background-color:#f0f0f0;
border-color:#cccccc;
}
.hikamarket_panel_body {
padding: 10px
}
.hikamarket_empty_chart {
width:100%;
text-align:center;
padding-top: 70px;
}
/**
* User Panel
*/
#hikamarket_user_form select.hikamarket_default_address_dropdown {
width:350px;
max-width:100%;
}
#hikamarket_user_form .hikam_edit {
float:right;
}
#hikamarket_user_form .hikam_edit span {
display:none;
}
#hikamarket_user_addresses_show .hikamarket_user_address,
#hikamarket_user_shipping_addresses_show .hikamarket_user_address,
#hikamarket_user_billing_addresses_show .hikamarket_user_address,
#hikamarket_user_addresses_show .hikashop_address_edition {
margin: 2px 5px 6px 0px;
padding:8px;
border:1px solid #9e9e9e;
background-color: #fdfdfd;
-webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;
}
#hikamarket_user_addresses_show .hikashop_address_edition h3 {
margin-top: 0px;
}
/**
* Order page
*/
div.hikamarket_order dl label {
font-weight: bold;
}
div.hikamarket_order_edit_block {
background-color: #f6f6f6;
padding:8px;
border:1px solid #aeaeae;
-webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;
margin:2px;
}
/**
* Tabs
*/
ul.hikam_tabs {
list-style:none !important;
margin:2px 0px 15px 0px;
border-bottom: 1px solid #ddd;
width:100%;
}
ul.hikam_tabs:before,
ul.hikam_tabs:after {
display: table;
content: "";
line-height: 0;
}
ul.hikam_tabs:after {
clear: both;
}
ul.hikam_tabs > li {
float:left;
margin-bottom:-1px !important;
}
ul.hikam_tabs > li > a {
display:block;
padding: 8px 12px;
line-height: 18px;
border: 1px solid transparent;
-webkit-border-radius: 4px 4px 0 0;
-moz-border-radius: 4px 4px 0 0;
border-radius: 4px 4px 0 0;
text-decoration:none;
}
ul.hikam_tabs > li > a:hover,
ul.hikam_tabs > li > a:focus {
border-color: #eee #eee #ddd;
}
ul.hikam_tabs > li.active > a,
ul.hikam_tabs > li.active > a:hover,
ul.hikam_tabs > li.active > a:focus {
color: #555;
background-color:#fff;
border: 1px solid #ddd;
border-bottom-color: transparent;
cursor: default;
}
/**
* Labels & Order Labels
*/
table.order_statistics td {
text-align:center;
}
table.order_statistics td.order_statistics_active {
background-color: #BFE3F5;
}
table.order_statistics span.value {
display:block;
font-size:1.4em;
}
table.order_statistics a {
text-decoration:none;
display:inline-block;
color:black;
}
span.hk-label,
span.order-label {
border-radius: 3px;
display: inline-block;
padding: 2px 4px;
font-size: 11px;
font-weight: bold;
line-height: 14px;
color: #FFF;
vertical-align: baseline;
white-space: nowrap;
text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.25);
background-color: #999;
}
span.hk-label-grey,
span.order-label-created {
background-color: #999; /* grey */
}
span.hk-label-green,
span.order-label-confirmed {
background-color: #468847; /* green */
}
span.hk-label-blue,
span.order-label-shipped {
background-color: #3a87ad; /* blue */
}
span.hk-label-orange,
span.order-label-cancelled {
background-color: #c67605; /* orange */
}
span.hk-label-red,
span.order-label-refunded {
background-color: #b94a48; /* red */
}
span.hk-label-black,
span.order-label-all {
background-color: #000000; /* black */
}
span.hk-label-light,
span.order-label-pending {
background-color: #5bc0de; /* light blue */
}
.hk-icon-green {
color:#468847;
}
.hk-icon-blue {
color:#3a87ad;
}
.hk-icon-orange {
color:#c67605;
}
.hk-icon-red {
color:#b94a48;
}
/*
* Ajax loading
*/
div.hikamarket_ajax_loading { position:relative; }
div.hikamarket_ajax_loading div.hikamarket_ajax_loading_elem,
div.hikamarket_ajax_loading div.hikamarket_ajax_loading_spinner {
position:absolute;
z-index:999;
top:0px;
left:0px;
right:0px;
bottom:0px;
}
div.hikamarket_ajax_loading div.hikamarket_ajax_loading_elem {
background-color:#ffffff;
opacity:0.5;
filter:alpha(opacity=50);
}
div.hikamarket_ajax_loading div.hikamarket_ajax_loading_spinner {
background:url('../images/spinner_02.gif') no-repeat center;
}
div.hikamarket_ajax_loading
div.hikamarket_ajax_loading_spinner.small_spinner {
background:url('../images/spinner.gif') no-repeat center;
}
div.hikamarket_order_edit_block.hikamarket_ajax_loading { min-height:50px;
}
/*
* Joomla 3 specific rules
*/
div.chzn-container {
margin-bottom:9px;
}
body.com_hikamarket div.nameboxes {
margin-bottom:9px;
}
body.com_hikamarket div.namebox-popup {
top:-9px;
}
body.com_hikamarket button.btn,
body.com_hikamarket a img {
margin-bottom:9px;
}
body.com_hikamarket thead a img {
margin-bottom:0px;
}
body.com_hikamarket .hikamarket_product_qtyperorder .input-append
button.btn {
margin-bottom:0px;
}
body.com_hikamarket #hikamarket_products_form .volumeselect,
body.com_hikamarket #hikamarket_products_form .weightselect {
width:80px;
}
body.com_hikamarket #hikamarket_products_form .hikam_acl,
body.com_hikamarket #hikamarket_products_form .hikam_qty {
text-align:center;
}
body.com_hikamarket .hikamarket_product_salestart button.btn {
margin-bottom:0px;
}
#hikamarket_products_form .input-append {
display:inline-block
}
#hikamarket_products_form .hikamarket_product_salestart .input-append {
vertical-align:middle;
}
#hikamarket_shipping_restrictions select,
#hikamarket_payment_restrictions select {
min-width: 100px;
}
css/index.html000064400000000032151161767140007335
0ustar00<html><body></body></html>css/leaflet.css000064400000034042151161767140007476
0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
/* required styles */
.leaflet-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-container,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
position: absolute;
left: 0;
top: 0;
}
.leaflet-container {
overflow: hidden;
}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
-webkit-user-drag: none;
}
/* Safari renders non-retina tile on retina better with this, but Chrome is
worse */
.leaflet-safari .leaflet-tile {
image-rendering: -webkit-optimize-contrast;
}
/* hack that prevents hw layers "stretching" when loading new
tiles */
.leaflet-safari .leaflet-tile-container {
width: 1600px;
height: 1600px;
-webkit-transform-origin: 0 0;
}
.leaflet-marker-icon,
.leaflet-marker-shadow {
display: block;
}
/* .leaflet-container svg: reset svg max-width decleration shipped in
Joomla! (joomla.org) 3.x */
/* .leaflet-container img: map is broken in FF if you have max-width: 100%
on tiles */
.leaflet-container .leaflet-overlay-pane svg,
.leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer,
.leaflet-container .leaflet-tile {
max-width: none !important;
max-height: none !important;
}
.leaflet-container.leaflet-touch-zoom {
-ms-touch-action: pan-x pan-y;
touch-action: pan-x pan-y;
}
.leaflet-container.leaflet-touch-drag {
-ms-touch-action: pinch-zoom;
/* Fallback for FF which doesn't support pinch-zoom */
touch-action: none;
touch-action: pinch-zoom;
}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
-ms-touch-action: none;
touch-action: none;
}
.leaflet-container {
-webkit-tap-highlight-color: transparent;
}
.leaflet-container a {
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
}
.leaflet-tile {
filter: inherit;
visibility: hidden;
}
.leaflet-tile-loaded {
visibility: inherit;
}
.leaflet-zoom-box {
width: 0;
height: 0;
-moz-box-sizing: border-box;
box-sizing: border-box;
z-index: 800;
}
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
.leaflet-overlay-pane svg {
-moz-user-select: none;
}
.leaflet-pane { z-index: 400; }
.leaflet-tile-pane { z-index: 200; }
.leaflet-overlay-pane { z-index: 400; }
.leaflet-shadow-pane { z-index: 500; }
.leaflet-marker-pane { z-index: 600; }
.leaflet-tooltip-pane { z-index: 650; }
.leaflet-popup-pane { z-index: 700; }
.leaflet-map-pane canvas { z-index: 100; }
.leaflet-map-pane svg { z-index: 200; }
.leaflet-vml-shape {
width: 1px;
height: 1px;
}
.lvml {
behavior: url(#default#VML);
display: inline-block;
position: absolute;
}
/* control positioning */
.leaflet-control {
position: relative;
z-index: 800;
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
.leaflet-top,
.leaflet-bottom {
position: absolute;
z-index: 1000;
pointer-events: none;
}
.leaflet-top {
top: 0;
}
.leaflet-right {
right: 0;
}
.leaflet-bottom {
bottom: 0;
}
.leaflet-left {
left: 0;
}
.leaflet-control {
float: left;
clear: both;
}
.leaflet-right .leaflet-control {
float: right;
}
.leaflet-top .leaflet-control {
margin-top: 10px;
}
.leaflet-bottom .leaflet-control {
margin-bottom: 10px;
}
.leaflet-left .leaflet-control {
margin-left: 10px;
}
.leaflet-right .leaflet-control {
margin-right: 10px;
}
/* zoom and fade animations */
.leaflet-fade-anim .leaflet-tile {
will-change: opacity;
}
.leaflet-fade-anim .leaflet-popup {
opacity: 0;
-webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear;
transition: opacity 0.2s linear;
}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
opacity: 1;
}
.leaflet-zoom-animated {
-webkit-transform-origin: 0 0;
-ms-transform-origin: 0 0;
transform-origin: 0 0;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
will-change: transform;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
}
.leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile {
-webkit-transition: none;
-moz-transition: none;
transition: none;
}
.leaflet-zoom-anim .leaflet-zoom-hide {
visibility: hidden;
}
/* cursors */
.leaflet-interactive {
cursor: pointer;
}
.leaflet-grab {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
}
.leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive {
cursor: crosshair;
}
.leaflet-popup-pane,
.leaflet-control {
cursor: auto;
}
.leaflet-dragging .leaflet-grab,
.leaflet-dragging .leaflet-grab .leaflet-interactive,
.leaflet-dragging .leaflet-marker-draggable {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing;
}
/* marker & overlays interactivity */
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-image-layer,
.leaflet-pane > svg path,
.leaflet-tile-container {
pointer-events: none;
}
.leaflet-marker-icon.leaflet-interactive,
.leaflet-image-layer.leaflet-interactive,
.leaflet-pane > svg path.leaflet-interactive {
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
/* visual tweaks */
.leaflet-container {
background: #ddd;
outline: 0;
}
.leaflet-container a {
color: #0078A8;
}
.leaflet-container a.leaflet-active {
outline: 2px solid orange;
}
.leaflet-zoom-box {
border: 2px dotted #38f;
background: rgba(255,255,255,0.5);
}
/* general typography */
.leaflet-container {
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
}
/* general toolbar styles */
.leaflet-bar {
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
border-radius: 4px;
}
.leaflet-bar a,
.leaflet-bar a:hover {
background-color: #fff;
border-bottom: 1px solid #ccc;
width: 26px;
height: 26px;
line-height: 26px;
display: block;
text-align: center;
text-decoration: none;
color: black;
}
.leaflet-bar a,
.leaflet-control-layers-toggle {
background-position: 50% 50%;
background-repeat: no-repeat;
display: block;
}
.leaflet-bar a:hover {
background-color: #f4f4f4;
}
.leaflet-bar a:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.leaflet-bar a:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom: none;
}
.leaflet-bar a.leaflet-disabled {
cursor: default;
background-color: #f4f4f4;
color: #bbb;
}
.leaflet-touch .leaflet-bar a {
width: 30px;
height: 30px;
line-height: 30px;
}
.leaflet-touch .leaflet-bar a:first-child {
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.leaflet-touch .leaflet-bar a:last-child {
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
/* zoom control */
.leaflet-control-zoom-in,
.leaflet-control-zoom-out {
font: bold 18px 'Lucida Console', Monaco, monospace;
text-indent: 1px;
}
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch
.leaflet-control-zoom-out {
font-size: 22px;
}
/* layers control */
.leaflet-control-layers {
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
background: #fff;
border-radius: 5px;
}
.leaflet-control-layers-toggle {
background-image: url(../images/leaflet/layers.png);
width: 36px;
height: 36px;
}
.leaflet-retina .leaflet-control-layers-toggle {
background-image: url(../images/leaflet/layers-2x.png);
background-size: 26px 26px;
}
.leaflet-touch .leaflet-control-layers-toggle {
width: 44px;
height: 44px;
}
.leaflet-control-layers .leaflet-control-layers-list,
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
display: none;
}
.leaflet-control-layers-expanded .leaflet-control-layers-list {
display: block;
position: relative;
}
.leaflet-control-layers-expanded {
padding: 6px 10px 6px 6px;
color: #333;
background: #fff;
}
.leaflet-control-layers-scrollbar {
overflow-y: scroll;
overflow-x: hidden;
padding-right: 5px;
}
.leaflet-control-layers-selector {
margin-top: 2px;
position: relative;
top: 1px;
}
.leaflet-control-layers label {
display: block;
}
.leaflet-control-layers-separator {
height: 0;
border-top: 1px solid #ddd;
margin: 5px -10px 5px -6px;
}
/* Default icon URLs */
.leaflet-default-icon-path {
background-image: url(../images/leaflet/marker-icon.png);
}
/* attribution and scale controls */
.leaflet-container .leaflet-control-attribution {
background: #fff;
background: rgba(255, 255, 255, 0.7);
margin: 0;
}
.leaflet-control-attribution,
.leaflet-control-scale-line {
padding: 0 5px;
color: #333;
}
.leaflet-control-attribution a {
text-decoration: none;
}
.leaflet-control-attribution a:hover {
text-decoration: underline;
}
.leaflet-container .leaflet-control-attribution,
.leaflet-container .leaflet-control-scale {
font-size: 11px;
}
.leaflet-left .leaflet-control-scale {
margin-left: 5px;
}
.leaflet-bottom .leaflet-control-scale {
margin-bottom: 5px;
}
.leaflet-control-scale-line {
border: 2px solid #777;
border-top: none;
line-height: 1.1;
padding: 2px 5px 1px;
font-size: 11px;
white-space: nowrap;
overflow: hidden;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #fff;
background: rgba(255, 255, 255, 0.5);
}
.leaflet-control-scale-line:not(:first-child) {
border-top: 2px solid #777;
border-bottom: none;
margin-top: -2px;
}
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
border-bottom: 2px solid #777;
}
.leaflet-touch .leaflet-control-attribution,
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
box-shadow: none;
}
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
border: 2px solid rgba(0,0,0,0.2);
background-clip: padding-box;
}
/* popup */
.leaflet-popup {
position: absolute;
text-align: center;
margin-bottom: 20px;
}
.leaflet-popup-content-wrapper {
padding: 1px;
text-align: left;
border-radius: 12px;
}
.leaflet-popup-content {
margin: 13px 19px;
line-height: 1.4;
}
.leaflet-popup-content p {
margin: 18px 0;
}
.leaflet-popup-tip-container {
width: 40px;
height: 20px;
position: absolute;
left: 50%;
margin-left: -20px;
overflow: hidden;
pointer-events: none;
}
.leaflet-popup-tip {
width: 17px;
height: 17px;
padding: 1px;
margin: -10px auto 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.leaflet-popup-content-wrapper,
.leaflet-popup-tip {
background: white;
color: #333;
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
}
.leaflet-container a.leaflet-popup-close-button {
position: absolute;
top: 0;
right: 0;
padding: 4px 4px 0 0;
border: none;
text-align: center;
width: 18px;
height: 14px;
font: 16px/14px Tahoma, Verdana, sans-serif;
color: #c3c3c3;
text-decoration: none;
font-weight: bold;
background: transparent;
}
.leaflet-container a.leaflet-popup-close-button:hover {
color: #999;
}
.leaflet-popup-scrolled {
overflow: auto;
border-bottom: 1px solid #ddd;
border-top: 1px solid #ddd;
}
.leaflet-oldie .leaflet-popup-content-wrapper {
zoom: 1;
}
.leaflet-oldie .leaflet-popup-tip {
width: 24px;
margin: 0 auto;
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678,
M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678,
M12=0.70710678, M21=-0.70710678, M22=0.70710678);
}
.leaflet-oldie .leaflet-popup-tip-container {
margin-top: -1px;
}
.leaflet-oldie .leaflet-control-zoom,
.leaflet-oldie .leaflet-control-layers,
.leaflet-oldie .leaflet-popup-content-wrapper,
.leaflet-oldie .leaflet-popup-tip {
border: 1px solid #999;
}
/* div icon */
.leaflet-div-icon {
background: #fff;
border: 1px solid #666;
}
/* Tooltip */
/* Base styles for the element that has a tooltip */
.leaflet-tooltip {
position: absolute;
padding: 6px;
background-color: #fff;
border: 1px solid #fff;
border-radius: 3px;
color: #222;
white-space: nowrap;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
pointer-events: none;
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
}
.leaflet-tooltip.leaflet-clickable {
cursor: pointer;
pointer-events: auto;
}
.leaflet-tooltip-top:before,
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
position: absolute;
pointer-events: none;
border: 6px solid transparent;
background: transparent;
content: "";
}
/* Directions */
.leaflet-tooltip-bottom {
margin-top: 6px;
}
.leaflet-tooltip-top {
margin-top: -6px;
}
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-top:before {
left: 50%;
margin-left: -6px;
}
.leaflet-tooltip-top:before {
bottom: 0;
margin-bottom: -12px;
border-top-color: #fff;
}
.leaflet-tooltip-bottom:before {
top: 0;
margin-top: -12px;
margin-left: -6px;
border-bottom-color: #fff;
}
.leaflet-tooltip-left {
margin-left: -6px;
}
.leaflet-tooltip-right {
margin-left: 6px;
}
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
top: 50%;
margin-top: -6px;
}
.leaflet-tooltip-left:before {
right: 0;
margin-right: -12px;
border-left-color: #fff;
}
.leaflet-tooltip-right:before {
left: 0;
margin-left: -12px;
border-right-color: #fff;
}
css/otree.css000064400000005411151161767140007176 0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
.oTree {
font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size:11px;
color:#666;
white-space:nowrap;
line-height:normal;
text-align:left;
}
.oTree img {
border:0px;
vertical-align:middle;
margin:0px !important;
}
.oTree input {
border:0px;
}
.oTree a img {
margin:0px !important;
}
.oTree input[type="checkbox"] {
vertical-align:middle;
margin:0px 2px 0px 0px;
}
.oTree a, .oTree span {
color:#333;
text-decoration:none !important;
font-size:9px;
}
.oTree a.node, .oTree span.node {
white-space:nowrap;
padding:1px 2px 1px 2px;
}
.oTree a.node:hover, .oTree a.nodeSel:hover {
color:#333;
text-decoration:underline !important;
}
.oTree a.nodeSel {
background-color:#c0d2ec;
white-space:nowrap;
padding:1px 2px 1px 2px;
}
.oTree .clip {
/* overflow: hidden; */
}
.oresize {
max-width:0;
max-height:0;
border-bottom:15px solid #aeaeae;
border-left:15px solid transparent;
right:0;
bottom:0;
cursor:se-resize;
z-index:50;
}
.oTree .e1 { margin-left:18px; display:inline; }
.oTree .e2 { margin-left:36px; display:inline; }
.oTree .e3 { margin-left:54px; display:inline; }
.oTree .e4 { margin-left:72px; display:inline; }
.oTree .e5 { margin-left:90px; display:inline; }
.oTree .e6 { margin-left:108px; display:inline; }
.oList > ul { margin:0 !important; padding: 0 !important; }
.oList li { display: list-item; list-style: none; margin:0px; padding: 0px;
}
.oList a { display: block; text-decoration: none; padding: 5px 6px; }
.oList li span { display: block; text-decoration: none; padding: 5px 6px;
}
.oList a:hover, .oList a.sel { background-color:#0066CC; color: white;
text-decoration:none; }
.oList em { text-decoration:none; font-weight: bold; font-style: normal; }
.oList table.oListTable { width: 100%; }
.oList table.oListTable th { background-color: #eaeaea; }
.oList tr { }
.oList td { border-top: 1px solid #d0d0d0; padding: 4px; }
.oList tr.oListLine { }
.oList tr.oListLine:hover { cursor:pointer; background-color:#0066CC;
color: white; text-decoration:none; }
.oList tr.oListLine:hover td { background-color:#0066CC; }
.oList li.oListSelected a { background-color:#289CC9; color: white;
text-decoration:none; }
.oList tr.oListSelected { background-color:#289CC9; color: white;
text-decoration:none; }
.oList tr.oListSelected td { background-color:#289CC9; }
.oList tr.oListBlocked { background-color:#f6f6f6; }
.oList li.oListLoadMore,
.oList tr.oListLoadMore td { height: 16px;
background:url('../images/otree/loading.gif') no-repeat center;
}
css/rtl.css000064400000000735151161767140006665 0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
/**
* Right To Left CSS File
*/
fieldset.hikam_field .hikam_edit {
float:left;
}
#hikam_category_listing div.category_explorer_btn_show a,
#hikam_product_listing div.category_explorer_btn_show a {
background:#dae1e4 !important;
}
css/tooltip.css000064400000003230151161767140007547 0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
.hk-tooltip {
position: absolute;
z-index: 1030;
display: block;
font-size: 11px;
line-height: 1.4;
opacity: 0;
filter: alpha(opacity=0);
visibility: visible;
}
.hk-tooltip.in {
opacity: 0.8;
filter: alpha(opacity=80);
}
.hk-tooltip.top {
padding: 5px 0;
margin-top: -3px;
}
.hk-tooltip.right {
padding: 0 5px;
margin-left: 3px;
}
.hk-tooltip.bottom {
padding: 5px 0;
margin-top: 3px;
}
.hk-tooltip.left {
padding: 0 5px;
margin-left: -3px;
}
.hk-tooltip-inner {
max-width: 200px;
padding: 8px;
color: #ffffff;
text-align: left;
text-decoration: none;
background-color: #000000;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.hk-tooltip-arrow {
position: absolute;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}
.hk-tooltip.top .hk-tooltip-arrow {
bottom: 0;
left: 50%;
margin-left: -5px;
border-top-color: #000000;
border-width: 5px 5px 0;
}
.hk-tooltip.right .hk-tooltip-arrow {
top: 50%;
left: 0;
margin-top: -5px;
border-right-color: #000000;
border-width: 5px 5px 5px 0;
}
.hk-tooltip.left .hk-tooltip-arrow {
top: 50%;
right: 0;
margin-top: -5px;
border-left-color: #000000;
border-width: 5px 0 5px 5px;
}
.hk-tooltip.bottom .hk-tooltip-arrow {
top: 0;
left: 50%;
margin-left: -5px;
border-bottom-color: #000000;
border-width: 0 5px 5px;
}
images/arrow_menu.png000064400000000314151161767140010704 0ustar00�PNG
IHDRo�?sRGB���bKGD������� pHYs��tIME�%���LIDAT(��1
�0O}��ruI!
�u!K�^�d/'��h^@K����?]�/�����'i�|��w�Ju�*��T.�ƿ7BIEND�B`�images/category_hide.png000064400000001371151161767140011340
0ustar00�PNG
IHDRrP6�tEXtSoftwareAdobe
ImageReadyq�e<�IDATxڜT�OA��'�V
�Ѡ�Hc���<x�/�Y$=��o�x7&^A@1A�(B��X�BK�����fv�.$��l�쾝7�|�y�p��.B
�>ʄ
BV�>�c�X����`��j��R�W����t����!�ݲ$UU���S����^������\2�aA���4
��G+U�Sw��q�V�E��!k4�4��ib���^x>ó��i[n��e�~{���J��kjc+���C�٥lm[���'
X�Q���'Z��a���$ԭ�,��-��Og��s��8w"��}�XY�*I&�(wSoV�TJ�4���bnE�#����o[�L�D�qy�v����SV�r�~:9��?��5qq��g�����sK�vٌ����X��=��w&դ�̙e۸=z�6�ª�길{�:�{��
~������0�<�
�ip<|0���2l�Cg&���cҎ6���*h��<R��͔v�Ԋ�����M*���ߠ��({"'E5�6
�a�P�)�SU����V�}&�N��eb[�8Œ5�^Q���_��}t�'��L6�>Ct��7��k>]a6m?�y=�W�^�iܻ3�O������$��Fg��m5�7�[��s��L�a��U[���<M@#�#����}9
�IEND�B`�images/category_show.png000064400000001672151161767140011413
0ustar00�PNG
IHDR,lK8�tEXtSoftwareAdobe
ImageReadyq�e<\IDATxڴV�OQ���+�R�ZR�%
�WD�D���ƿ����M<h��h��PT
(`��n�_��-�Я-�f�Λ�~ofvf:��
��`�E��8���LcV�߰,덻O�{UM��Ur-�0Ͷp8�@�q�q�ُh�qQS���@��@�p�m�u�ˌ1�p6���L
�G��!%�b\*�qOO1M�L7L���^�m����(r�9���X ��i@��pHV��yj�/Պ8$UƠ�K(w���QGϪ���}t1(���D�n��w_V���rf���]�q�s�_:�r�'����l�v�hn���X�"�m2
����W��H����7��W�BP�1��`H�L�vD�Fa�*�?0
���P��
��ޡə%D�d��AQ$��ۉ��0-�3��P=�w�o�`O�'�̯�[��5�D|~��C��a�,����ӝ-�$�W�N�0�
�8����'��D���J����j
�s�h
1�v�ݧ2�\�F�X�?�8��Y�#�=���'�vV-�I�p��Utu��ҹ>�^9�X���cۅ旉
����L!�s��F/�,�7j��Q5ݓ5]�,7��w�j*�l�쮉9���we�
�����:�>{"����k:�G��"/��v�=�v�m;
_4�p�k�I4X! 1��x��Y&���Uu��9<
ʐ85ނH}R���*U�Ȱ�\"��~n�V{�x�M�j�<���l��S+?֟�?/l��O_�k멉���d���
���yI���P���]]XL~y��"���o�x;
+���E̛�q���|��:)&IEND�B`�images/close.png000064400000000441151161767140007634
0ustar00�PNG
IHDR �msRGB���bKGD���̿ pHYs��tIME�
26d���IDAT(�e���
�x���Jq��}���C�f9Il����j0�fJ�O��
U��-U�LuI,��5@:��oUn@�Z�z��E�Ie�h�z���T��1wl�t��s�b�gX��%�pN�O��E5K}�ȡz���T�K���n��dž?��[ʏ
�\IEND�B`�images/edit.png000064400000000404151161767140007453
0ustar00�PNG
IHDR �msRGB���bKGD��#2 pHYs��tIME�5+{�H��IDAT(ύ��
�
Eы;3�E�
�$3d/G/&�A�Z�AGغ����bp�f��L�&[l[��P����ԝ6��95
��V�:}O=S�'R_���咤.
RP����Dǃڳ㾥 *[J�ywl:���ZIEND�B`�images/icon-14/height.png000064400000001316151161767140011153
0ustar00�PNG
IHDRH-� pHYs��
cHRMz%������u0�`:�o�_�FTIDATx�\�MKTa��s��w���yA3B2ˍcV5�e\��4ABKn~��@�"4Zd��h��M&jh
%F�@�����3��H�p8���_h�9B�K����i�Zk����XY]]i��o�<�0qb�)%�e
`�uy�H|hinn���ml\+
�e��|&���v���Γ����\.G(:����m�~�>�����獍J�#Ӳdв(..�{���e.��� !�0�r�lb��䐾��ir||���5�m37?�PSS�}��*�lj��q�D�'�鏿m۾�pdDW�*��q�zwtT�MMM��ú����J�RG���Rj��ޘ�,./����J�,
H)M�N��~Cۇc|I&1�@J�(
4�@
�њ�Ճ��h�GH)ǹdHyU�R�je��V^ˣ�sw~vuv�z�G�/�i�d<�o:9T�B�$S��]\Z�Z[_�D[�Uth�����^���rjz:q��?����!��Xl�k2���8*B�D*_���z�[ZrH0��VWw!�� �i��R��}����;溹�������p8�������<��;�]���.IEND�B`�images/icon-14/hikamarket.png000064400000000652151161767140012025
0ustar00�PNG
IHDRH-�tEXtSoftwareAdobe
ImageReadyq�e<LIDATx�l�O(DQ��7fIjR��PC���QXLʟJ$+ek�b�YXhj6lԔ���,d!֒�(��!�W�?e|O�^�^�֧[��s�"��U'��#�yd�
��f�|Q��Z��<�@D}6p�/�i�bV�?�>�54cW^�/��*��X?�q� ��D4����_j�N�5��.��Rc��5���
����P�:b5�T^�o�V�pj���؍>�A�/�G=��w��T���9����`����]���9�3a��T��x�=<�q_�(����ms8�u�ņ�^u��H�Jq�U'��g���?=O;��-K�J ^��IEND�B`�images/icon-14/index.html000064400000000032151161767140011164
0ustar00<html><body></body></html>images/icon-14/length.png000064400000001332151161767140011162
0ustar00�PNG
IHDRH-� pHYs��
cHRMz%������u0�`:�o�_�F`IDATx�\R�KSq���nwn��D�2�
g��4�=HFφ
�$ B��"D��!A�
����!ˇ�ӭ҃FS�|p⮻���B:�Áχs��Č�ED@��8� �D�"B�0hyee�����T*UT@��B�OLTK��/.~���h�m��L���,�><<,Wy����DoO�@�\����$�I�V��>.-m��õ�L梔r߭�£����tz�r_�5"bR�����˲`�6�n7��"����z�����ohh��Ϧ�NI]�˦i�q"�&�8;�=}09�
����"CC_��lR�uw}0��R
�}"B�X\�4Mw~����[X83�P(�@��i��i��r���9*|��(���# ���8�������GAՑo��0��|Z��(R�%3�=V>�~ͬ��S�vw'�0@�냃cRQ�`oooM�6&��v�����!���U�GF^�r�|���n*�\������LG$�y�|�s��|�D�P(T�jz:���3P�d�<�%��
�q�忘U"��B�m*�!��~)nV��p,���po|�dŞJ�7���wIEND�B`�images/icon-14/move.png000064400000001102151161767140010642
0ustar00�PNG
IHDR 6��
pHYs��
cHRMz%������u0�`:�o�_�F�IDATx�,�=kTA�wΙ��ܽ� &��v���A�paA�T�V��&�ۙ?�
��"���V*V�E"�%��{���c���H)!�"�蜻D6��X�S�5Ơ�k0�<ϷkU�DHUo�?\ϲl�Z�g�F�&
U���2l��!�CR��"�1Dl��(�@մ����o_�����D�\��mX�T�k�����n�s2��1�'�����JU��c�07l�{�v�/E�F�y���i5�D��t�8�SJ�ރ�aȜ��^����
�B����9H%o�<���h�,k�*���zJ����ѓ�>�C��sV�L��{P]O"�dniy����,�Ĵ���A��e3���!F��u��
":�̬�v&�(� ��U��R�?����{�P��T����끙�b|c�S�H����⍍�$IEND�B`�images/icon-14/width.png000064400000001322151161767140011017
0ustar00�PNG
IHDRH-� pHYs��
cHRMz%������u0�`:�o�_�FXIDATx�\��KTQƟ��3��(�ޚ��4i��L���XHF��N�H
���/qn�
�VA��I�E��Lc
*�(�h�9���N�<�r���R⬈(0L���R����,Z[__����w�8tf
�1���ы�����Ֆ��z���N7��q캮o۶W{�;;���z<�CYY�����������O++w���d��{��SU�X�������~kk�L2�����1IR���u�u�>TUE�P�)!�D8����\UUUwE4꽛���izB�od����߾k�"�����5��L���VD�q�y>�?%"
�M]���/��u�F���yM`��L!@�u%
�8|�ކ�(ER��
$���X,���'!%�WV$��~@�?�'�Pk��U{:4�ED�R�ծ����8(�UUa;x����D �%�T*����=6�������<H��4�thp�}6�ݯ���:95����_��k�3_�O.A8�K�ݠ�
K4[�S�
��\.ד�,��yt��U
*�I�*�Yq��
�(aY^1��
��a�{�x92r�������GQ#$uIEND�B`�images/icon-16/acl.png000064400000001210151161767140010435
0ustar00�PNG
IHDR�asRGB���BIDAT8ˍ��oa���b�;�A"�D"B%GE��QS��7�PR
QPPA�! DA;P$1Q6^��^�wE0DD�i�f�y#�!^�~���˲�&�7�
��&���%�s���ᢽ�W>-355%���{�͆���I���t��u�$�tR�.h����nO�s�e��o���9�ZM�T�ŀ��5L���ח�9���b{;&��� �4>3;s�$I����9G�\�i0�;&�9*f��&�`L�q�~���y�D���c0��B������?j����δ�
I���x��d��y�sT7)�QUPED��ԠQ
�a�d�8&n�x�������R�>����@ig���*����߀��(�`����,�$���hŒ�os�]p�n"~�G����M�� �i3���(@��([F2!$2^´㖎����[l���{<��JD�R��J��~ü�����b�����g��sHӌ8��W䄬�lw!Q|���o
��ȱy���1ݢ���}$�"Q)B�C�""�
RČ>���u �@T+�A��F�
��(��%DP@Q����D
qW@IEND�B`�images/icon-16/add.png000064400000001060151161767140010431
0ustar00�PNG
IHDR�a pHYs��~��IDAT8���1hA��7�{�w�D/�b�!AmD�"���pH
K�H!hgeii���e��� �VJ,��`0����Ό�ܺI
�����͊�������od�8�E͉�G��p�L���r��ޖg�o��(�� *�����@5
Ґo>ø9�ߕ��'���c����n�@�.s�{@�$���3���sF.A&�����K&�����ϫ�L�=nm�D3
�0�P�k���;P�ˡi�u:�a�9G�V��aR�q���Q��L���މ�=X�շ�Sf�V��n8��a�������e��{�@9[j��x4|[&�
��>�)�P[d�2Q5�!����
�"p5�&�+�3(�H�n�{=�oP���^�`��Q�Iڡ)�� x3O��j��Q�
���qy���
nU1
?)�̤�S��o\j�B�Wu���o���2�<�b����U��-e��\��IEND�B`�images/icon-16/cancel.png000064400000001730151161767140011132
0ustar00�PNG
IHDR�asRGB���bKGD������� pHYs��~�tIME�
C�3�XIDAT8�U�?L�u��o߾���%��@Xh�Ds��
�@�C4A77�\.�b"N�&B<$GR���D4�hPځHJ����}۾����g�,�gy�4M�������&''_s8].��Z��H)�iiiy^�T~�V��L&s:11Ѹ����������i��z������4MG6��T*��R^�W�~?]]]X��E�T�*��T
�T*N]ן4�c��BA���b�6""�����|>sss�t:���Z��x<�
�_7��vww_�""�J)�RJD���h4*��ů���$�ˍ�����.�L�0���hoo�wwww3??�eY�������%�\N)�0������������H4�����LF���|��4���X�%���v� ��͡������xhkk�4M,˒��3�Df������
��,...���ƶmZ[[�z��b1��t�t:��ɤ8��i���N�^��l�i�F�b��i����S.�q�݈�J�B0T�dR��,�p���E\."B�\F�4������D"!JDpT�������Fs{{K�R`kk���MlۦT*!�V��;�M�dtt��ŷ�ٳo������xܬ��a�6�Z
M�X__P���K�Z�L|����6�����~@�?��H(R+++�D���8=M���O�~�^�������`PMOO3;;+�p�����|4ݓd2������]w����5z~~N*�"�ͪz�Noo��B!_�X(�3������j��˗������F�hkk�mmm�ZZ\!
�B3_(|��y��J��SSSE���U�sc�iܰ&�IEND�B`�images/icon-16/category.png000064400000000407151161767140011522
0ustar00�PNG
IHDR�a�IDATx^��1JQF��'��Timdva�".
�4�.!Y�.!m�,!;���Kao��Aq�wd��<������W��c@O �$��>+e�K�`��`֊/����������@x�
�
��e�����;F�DH�8�5��S�4!�]�?H�9"#�� ��)2�}k�����51���Te�q�yO^lh����?�
>5A��IEND�B`�images/icon-16/config.png000064400000001373151161767140011155
0ustar00�PNG
IHDR�a�IDATx^��]H�{��Ϟ�={���u�"v�!��1�,��|&2��(vPs,y�2#H���8��Ŭu87G{1#�*J�HZ2Ssi�Զ9�_���F7���_}ߛ/���C���&�
��?�>�R�T�Ĺ''��X���i&��!���*6a=��H7\�kƟs�=��7�~N�RSS�_�}Z\���yԊTq�h���=?6�t�9�B�D��}�������k!:�23��8�g�9��O���[;t6;jo�ŝF�(�����?x�^j�0C�V�*6'��;�6����@��2���&bR2���6�[Iq1lA
H.N�F�qh���RrEH���ҟx4j�47��)�U/P�*�0�fA�h?n�K�)��'�<�����gV�g8��@(.؎j- ���/;��|�I2G+`e@V?Ü���^�B=ٜu�
\.
��R�"�@�~m|S�0;���Ao��r�}�
�E!ͅ�Q������^�D�;[C�{qv������#W���)����%
��clތ@_g�-_�W�E)8b��ԥ�S�n��i�-i�K*�#[X�k8i��|�)C�C��%�a3�O���[c��t�D'�����e()�͆5��!�Fz{x����Uɉ�N�K�V�T?h
F~br`1ˇ=�bP�A�F���y��C6�IEND�B`�images/icon-16/copy.png000064400000001201151161767140010650
0ustar00�PNG
IHDR�aHIDAT8˅ҽjUY���g��{ro�$���A����B�N|_�^_�V���n
�)�APfb@�TL̽��ZkY\Q��f��om�6�֏����"�8V���A�@?�|���/ܽ�[s��n��K�iM��[$Dq%�W�q��"����/!C�����-C
hURm\!����@����_��I@��F`8
N���U�����߄��c�0��,;>���L������Kb|��.�����I��mE�w��{��cf��r�O���}l�/���x���j\�~���bq�<���H�6��w?2Qm�$�F��(�f`�ffs9y�G&�W���^ߋ�dP.��-�u��m��fb>����8"e��C#�P�@���[o�����DԠ�i�7��B��H��X�]�n�!%�l'_M�l:U1sԜ���qP��I�Pb�
!�?`b�*�����h���
a���������M߂u���v�ۗ������U.�F����H�O�����Ë%��r4p��A+��A�!M/ψ~:h�&���ȁ���Ng��>�����Xk.qI�IEND�B`�images/icon-16/delete.png000064400000001371151161767140011150
0ustar00�PNG
IHDR(-SsRGB���}PLTE�d
'''+++---...///333555999=====>>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIIIJKKKKKLLLLMMMNNNPPPVVVXXYZZ[[[[\\\```aaabbbeeeeefgggjjjkkkqqqrrrttuwwwyyyzzz{{{|||~~~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������u�0ttRNS@��fbKGD�H pHYs��~�tIME�ܶ\��IDAT�c`��������)��U�;�KI�8����ʪ��@B76(Pjl��jb��fY����lUgo]�n���Ɛ�)�lWWWXPW�(n��P�#+%�TU[[�&*�+��P$�'(dQ^[Sm����_��j��mT�SWc�ȨV����,�Ug�^W����t�#��6��#�p��\�P��rjY�+��&X
�Lxa����Kp~4ܻa�ٹ�!`&,/2���r=IEND�B`�images/icon-16/edit.png000064400000001256151161767140010635
0ustar00�PNG
IHDR�asRGB���bKGD������� pHYs��tIME�
;#+���.IDAT8�}��OA�?��-��"�A
�@B<5j45�Wb4��?��G���Cś^j��
��f-R[�l��ݖ�J��M�2�}�ͼy_��z�a#�Gt�얘�����,����.O1S����@���e@ȀZ���I�=���d�s��5�U����En���c�HS `]A�o�r�A����O�X�e��Pz��ڿh�R�~{:�%�~����<Y�kQ���=,�N������1R��S7A)0�)��EMО�gƉF�
�j���w�l&�&�j�8��u^0����i~
,�*~+|����<�}Lv�<�ۨ����`���.
��Β-_6���DZ�n��oܢkhr��e��Ȗ'��^8�?�k�Ra����������t�����0!�Eg�1����v��2G+o�Gn�?�dž�TzN:9mP�'�]��/��*�K�����o6�{�6�o=�|���(ݽ��5V:m�߃�/���4��e��u�N�B���
+W3��"�?LJ����Z�vZ��zIEND�B`�images/icon-16/help.png000064400000001374151161767140010641
0ustar00�PNG
IHDR�a�IDATx^��[hY�3�������)lSX�����e��ԢxÇ*^�"��dU�o��"Th�Z���x��6
���n1n�n�۴���d2�9�3�F��>���|��p�he���G���L�S��(�Q�F�!�̓�����\W_�ں:QL}h&��7P,(l�2Ai0�>��u;C�p�g�t8�r:�>�cꪛ��LR.�d�������AtA{��rZ�,�&
��A7��[I�J��{�*m��M,v$c!�H�b�3X<�h���a��W������B���p�wS�ξ�ag����8~3�,��7k�VT{���
z�\X
�$Y�I��5����t�>�Ȧ#o̞\Nb=yJ����LX��� S
(e��U7���Zy�Wlc�1�j��?@p��k�����|ZY��#%�n�
�3&x�˟��+�r���
#{��y�T:XT�'��C�x�[�{��Y�=
�0��jL�f`5�X�A
e��!�D�e��j��
�iгiHV�
M�S�FWu7�~��*0
*�?�
hjiC�O�f����{6�:���y�$`�pi'�2yAd{�u��õln�5 �w+�SCi8+v(�]���#�����p��x�$S)�L����
��x���u����H류?��~������=��#����x�Tl�]]������Y~$_/�V9�{�IEND�B`�images/icon-16/hikagreen.png000064400000001014151161767140011635
0ustar00�PNG
IHDRH-�sRGB���bKGD������� pHYs��tIME�
(GU���IDAT(�m�M�Uq���}I��G��E�M�i1��E-R�h%M�ZTf�dhS��H:i�VE�S"��,r�q��eFug��i�ܮ�l����}����m�qG%i~q�*��T�ઇ�zϰ��{Ud��$���xW�lπZ����
�:Va�q%K�7I���)�t%-�%0��� 4���8��8_�oh�7_^���=��2�(6`Vpm\B'��}Q\�j��&i~���?�C���,y�{�o��
��i&i~�p;B�<���p�*�?�y�
���k��ǐ�L?�o�@0�Y����C���r�"��T��6b<Ƌ�d?�1z��Scx�$�Q\��*ބmGq�'����(.����$���m�zO�"�E7�7�b�a�?s�ww�P^tIEND�B`�images/icon-16/hikamarket.png000064400000001036151161767140012024
0ustar00�PNG
IHDR��h6sRGB���bKGD������� pHYs��tIME�!,��8�IDAT(�c�d�@
`b `Ѡ��� c���&�ؘ�Y�YY��
\�P]=t
���V^�ZJ,Ll������/��]P�n��
�68�Y)@�O��!������_~}����z����s�m���s���Z��������U����6'�����Y�S�z���ُ{�e��$���T�t�=�e�䢣dp���?���x��������p5E�>�|�����Ϸ�Ϗ������Ѷ�B�����g``Xrqb�NƑG;�힋=X]�y�7�X4�t�Ͽ��~������P�f~x�����QS��_~y����3��~��ϒ�&E�e��<����k���Ľ��O�.��d�$>f��B} �W�:����AP�'Ӳ���/�>Uґ�O���@��
m��>���IEND�B`�images/icon-16/import.png000064400000001415151161767140011217
0ustar00�PNG
IHDR�atEXtSoftwareAdobe
ImageReadyq�e<�IDATxڤ��OAǿ�����Z*T�r1r�E�</��/���x1�`0�RO&D/&�8И���(�Ђ��v��v̌o������͛}�3�}�-�R���T�x�u*�6#�p^�-
|z���0���>����O6J�F\�2̝*4���lZ`�L#F�1B9�z�p����dG":w)̀>t�u�'K{Aյ6����0
���U�J�C�ڳ_a���f���~���"$�*N⏨"�I������Tv<��%]r��䀘��
�`d=SC���Fq�Z�N���Y��1��Tɂ�2YN+
���b|�$u�S�����+�(i��'`:�Ԃ�Y��`�������p�*ڞׯ��f�1�U��J$��¥�r[,��cf��hx�3�/?�2����
5�A�UEA�N�M7Ӑ>j�6j����ݫF8y��I�fg�B�,�V��9.���z��v����Z��X,�O��C&FSL��?:�Ha��@�1g-2?Im�N#���|_X��
������@�M���6�w�Q,�1:}\ �[]'
,��^��uc{�ױ?0o���'U>r�
-)R���*_N;��D���L�y���������r��?Ӄsv�����L���k���o�,��0�������IEND�B`�images/icon-16/index.html000064400000000032151161767140011166
0ustar00<html><body></body></html>images/icon-16/info.png000064400000001116151161767140010636
0ustar00�PNG
IHDR�aIDATx^���ka���1����`�
���J���@좴Z�t�����GR����E]�;q���M4����6i�}ׯ�C��<p�{�w��%"�
��-��nexӨP�&������TUxU�
�k,��4��>��l,6�:�~[�l\Θ%LC����TxZ�M<��j���i���R��Q��+�
�;�J�"�G��:�!{<L:qȤ�O��[��
�s�}���
;�)N�a�J���F��68�^"��P
yA���#16�~�;zݡ����� �߆hJ�3�: �z�'h��3���Ai���܅�,����BO1�H(0@9� ʈG��I�����]H�@�P�h�Ft�����].�M��T'{&�]�|90�4��������X�����<!�F3�)ϮV�'L?&J�^Y�/�k��e�_n���5�9_���y�)?�#g���Q�!�Z?ns�07�3�\�1��-3���υ�a������l�Zn�?���+n��IEND�B`�images/icon-16/language.png000064400000001343151161767140011470
0ustar00�PNG
IHDR�a�IDATx^��mHSa��r�eV,!L�"+
�0��>h��P�0)RXR B�3����%�A��6���Ӆ3�2���m�Z�Y������;�
va�����=<�s�a!"l�[�^朽!�{�mX�����
x���F�H��
b��>�+��U�7�T�+�(Z���ǖY�u��S� �]D����ΰIX!2`��~�b�̂F�y4a��+!����i7�
t�*�jq�.V~yF<��O���
��vx������6��ű\$�T;lLb�PկW�� �2{�mʄ�f,h1�[�=��g�FWQM�{�Vl7t0;�Y��s��H����
|~�$��n���!).
�
>
(��6-�H�=�1åDG��[�=JS�egҍǗ�2:���D���r�#\x)��z6��|�X@zᕷsF�F�����
�e�BQ��z��=�"ś��9��g[���ql���݃AZ��V�}�ip��ܛT^?�m��
��.,{%g��P^'Tb먶��D7����'�$�/��ڄ��1�b'
�#�gFl@#�ܑ��?�'R�d5 �:>&��Eْ�!�̘��=V��Q����{��,QH�F��L��I��S;�J��/��;��ц�1�VWtE����u�q���y�#�/<�[�8��D�KSx|IIEND�B`�images/icon-16/layout.png000064400000000517151161767140011224
0ustar00�PNG
IHDR�atEXtSoftwareAdobe
ImageReadyq�e<�IDATx�b|���
����f��a��o����P�Ē��F�g#�������G��K��@�z�10���~zϰ�M�Al�̴�P�[���]�Ǡ�p���x��e�À�"�D�)�qqq�4�|����0z����p���_�~�������3XXZ�d�?`ԃ,��á�I2��� �&&&;{{���_���G$�^���!�
)�!x���
�iwhVԙ�IEND�B`�images/icon-16/link.png000064400000000666151161767140010651
0ustar00�PNG
IHDR�a pHYs��~�
cHRMz%������u0�`:�o�_�F<IDATxڔ�=K�A�g�E���)R�(��`�X�0��P,�E�T�`'�K��Q��V?A�j)�0`s_dw�N3�3s��{�\�\���C 8�|�����y�@�x
r�d"�(�Wh×(�
��SK
��a}��e��%p�At��/`>�E<V�@Ŀ�w��jd7��j�'��0�.��G�K��
o^N���|_�I�)�9�,b*�䬄
�d��o`kX��vC�&xG���0t�֠4�J��8�g<D�o���z���f�+j��!���'��3 �����ʺ�/2i
7��2X:����IEND�B`�images/icon-16/loading.gif000064400000003041151161767140011300
0ustar00GIF89a�?
%%%666DDDLLLTTT[[[dddlllttt{{{������������������������������������������������������������������������������������������������������������������������������������������������������������!�NETSCAPE2.0!�?,�����n
��RC�~o�Y-1����J��eF�$�v1_oa��SFr��29?, 8:BS".J#EJ')C-W7"#
,W6C.&>K,�C9!;K
6?>$�'75-8)�+b1)#/(?5)�?:>!?!4W1/?
>8�K>�?$�:IBA!�?,
X��p��$zD�+��!=�3�����~/�T))@B�X�r
��C Ȅ���� w6D(>IB$0�B1�D3,�?:%�A!�?,Q��pXi�B��c~6CY[@~�g#�l���A������PT:ȆE�~'�F�D2:C<7
>B.%HMC"3�1WBA!�?,
O����L�H�,�M?ܢ��U2?
4B0%Y���*@~7�j��P�/D�~���<I�G��.
�j�?HA!�?,Z����� ���T��
�#���6��%����%,�V$G��0 =ݣ�
����][
w-w"{?>JH).{?(<{�?A!�?,P��o�Y �_);^d��O�X�ʱ8"��$�
g�r�)�12��D��b8
?*=B1f.�f6^A!�?,
O��p��ňB,C�w�ȅ���FU!�2�d�2��1A�H�ߢ�x�$-������
@~-X=? ?(D�0D
=?NCA!�?,
V��pH̸��S
ɼ�>�SH�T.��YB8dDA��6����
)h��B� d���+�h ? ?,C"+?=2"C=a�<?:DA!�?,Q��p��
�X��?��XS�'��HL!��
6Ԥ�Ӱ~�_�H)@�Z�J �?
0P'??
>5qG>7BOGA!�?,
N��0� �BE�p
!�C�zZS+�䞞_�`�����~�ꩠ�8V�H�(?4G.M??6zG_?HA!�?,
U����3��ȟ�!B�_��vѣ��u
�SV1 FY�꓾M
ݘ�]>�Z�X*�X
"/I8??PG/)??8i$>?A!�?,S����W��W���O�\~AWP�~(�9�Fñ6�j�s�|�G��
!
5!'7?&*?0)#C:?!C1/?
A;images/icon-16/new.png000064400000000656151161767140010504
0ustar00�PNG
IHDR�auIDATx^œ=KA�g/��`�,RN++�
V�1`u?!� be%WY��b�becq! �
VV~�]PI�!$��7k6\rI���ٽ�a�"�4R`J�0�D��%=������K����w�
�3�z�|�����0�yRV�e�+j�@�}#F��Opn6uP�,�����<���)�9lV�y�W
E�\�_zwtj;�EHɻS�F�W֩�F������u��
���F�24A�\��� N��rE� x��& {_���,�Q�f��0�זFdG,CL��ӊR�"#����gG#>�{:��
3O�M��W!��h2^vJ���a�,��8%�Z8��7b�����|�
�����I���IEND�B`�images/icon-16/notice.png000064400000001412151161767140011163
0ustar00�PNG
IHDR�agAMA��7��tEXtSoftwareAdobe
ImageReadyq�e<�IDAT8˥��k�W�?wL�dL&1
��6�Ѩ(h��R,�M!R;TA�.\t�m\�
>V���t���Z�����0��4��3�$�����BH|�=�/_>8�U�}T��!su4-�WNV��8
(��w����O��o^u�ŕ���r�#�ɞ�F֮`!r�pzy����e�����Hn�V��Z�Ԝ��გ�[C*��³2??\��S���+��K�;E�С����zrc%���5�*��cb�]��3_槻�i4|��v�Q@���h�ԎdÅ���"�@��Iz�S�lՒ�,Ѿ1A�ֆ�F��ޟ����Xq A��Ǐ�d�'�b�βE��.r`o��+)�ȶ6��P�)�G��!�w��G��Cqn���f�G���
�S��J����y��8�ux�8q8+��g~jn�Bs��14(�{^&�xq�X�x�XƘ0�
���`~��Mq�rd;;?l�n]-�G�
"8:Z
�
��&V��#�_������M����_G���_�8T���-��y�/L��Z��O��r���_�wn���Yf�� .����m[�/-q�_�1��r�dߪr����^L�J&�KӼ~-�<]�0��(�1�����n��+iU
' �4`�)7
r珁s�?�w��?�{Y�!�IEND�B`�images/icon-16/notset.png000064400000001004151161767140011213
0ustar00�PNG
IHDR�asRGB���bKGD������� pHYs��tIME�
5+�W5��IDAT8˥S1n�@��=@�
ʕ:��(� ��A��/H~�~B��
RA����J,�&�̘4��W�������g���(��w�)���Q�'�ι�s,�>A��$���@D�@�0��E�s�|EP�o��-Y�H��9W���$U���}e�yx6Xk��RIBU�$ ��q�1BU�<�S�Y�]c�/�1�L�X,`�TU��n�C�֦6�2��{e>�w�0��0�:۶P�u��|�5���b�ө��r|8zv�4h�f�턔e��Ko�$�N�h�UU!�0$��Z�J{����k�u��(7�:��o<~PGw=\H�b��1F�s��~��2m��k�?�$��"R���z��UI��u��y����=�IEND�B`�images/icon-16/partial.png000064400000001141151161767140011335
0ustar00�PNG
IHDR�asRGB���bKGD�C� pHYs��tIME�
*U��W�IDAT8˥��jTA���{
Dn,%��'0+�2"���4vB��O`�Y0���l�6��i"�b�&�3��wwc�0gf���9��l���+DGb9��!����
����֗�H|��-�\j��:��O��m��
<�UNǽP��L
D�j�I������Ό�(�e���T*�j7�������S��xK8��'�%X�=�����R~_����W��d.ޝ������fOj7:20���A^js�������IH4����2S���F�𪦚kc�sڊ���;<H9��a9cf����a�Vhiy�����M!�1ģ���s+���~�ON��2ٌl�����l�F�����OJ�T*��!7��]{WWO��o4^��n�����)%d�V����ǻ7~������N�i�r�c��o�U���d���^�1���gÛ�~3Qk����IEND�B`�images/icon-16/plugin.png000064400000001201151161767140011174
0ustar00�PNG
IHDR�aHIDATx^���KƟwfWw�1�:[��):��A�V��,y��^����!;�DX����K��n;�n���պ"��yy��4M��Ʉ�.��ڤ���i����M�0"sss�Kh4p�*g����R8�Lr2���Ž�e�<ڄS���^Wvf�,#��dY��h4�N��
\2Ly�9:��������x�����x<Ω�}���W������ͼ%��[���\����8���{��D�uyqa����'t�`�
�&�
A���}��5}M-8W������s70�+�y�t�!��<(@jI��;��ӝ�����Y��FǠ�|P�v�:"�Z���@6~�q=�g\mߘ�� �I�hJb����!���0NM�=��@�=k��x>Vy���u��@���.g�5P$��HS��/��
0<q�FP�A�
�0����J�M�5�F��z�m��lŌW7�E(��^�
�/�>L�=mȮ �,Ոj(f�[�s��6��5#�5����"�'˗������^�13�����(ƴn�IEND�B`�images/icon-16/plus.png000064400000000753151161767140010674
0ustar00�PNG
IHDR�a�IDATx�cd����G+��ĈM-#.2L�3<b��
ǐ�0�$��+92|���A�O���흤�"o���>^I����f@�!�����?}f��e�}�$C���t��3�Ȃ����2��?8��>��b#LM��[F�]���@���߿������c�O8��P���y��%yY�_�߃͆���Eȶ��lLbw�c��z��X�Q�/ß_�T�t3BŠƀC�?;�����32V�Q���9FF�fy�_P�3<��Q��-�!���l�
���j
���:"���mݢ'[�s�1VJ��W�x ��ݐ`艹D|:(\`�_Y�!��
w��3�ǟ#ހ�y&�-,9��0LL:C��@^�
�Hf�
d2�s��f�817��݂�ϐ�P����IEND�B`�images/icon-16/product.png000064400000001274151161767140011370
0ustar00�PNG
IHDR�atEXtSoftwareAdobe
ImageReadyq�e<^IDATx�lSMkA}���w#!� r�Q=yԋ
���՟
��+���"�D (QD�5��Lf���ݳ��.E�T�{����h}<�7��bۺB���?`���f��`�P.�Y���cqZ}���<����W�/�u\�cu�hJ�$���]��t��x�����ӭ��}��+������)�d�(�]MP݀�oIp�8���O
���4���|�^U���u��P\>p�f�l�F��o0��\��֭�ϙ=�����;/��2��3&[nѮakó,��=B=?���N�����y���@�AK����x��u�i<F#��c��y<ɟ�]��
��}ܘ�bO�
�e�kh�P�$
�����Ұ�E^ �ǡ,�|�<���
�(H%3��'�"-�������|���D����k�`k%$���2���߽ޔ�qʤ m`I��gd,A++G*1A[��-^͂�:��V���
�M���+!�dc�֥����.E�� �%�Sf
�F�|�ێ�Kk�Tpe�UF�&��J
��$�@PU�E�W�M��p�*�Q�k4?��M��Z2�<���s;,�:IEND�B`�images/icon-16/publish.png000064400000001063151161767140011352
0ustar00�PNG
IHDR�a�IDATx^��AHQ���R���V���q�C��!KBh�k(���.���Gw�+<d�.ZQ�6��4��n��μ�X;�?��}����֚��f�������N�PQ���U>�H�x.!)H�,��Q��L��J��7ܢ5GX���%/���\+ʼ�E�!@ؔz�dy����d;���}�~~�3�:�x��M`�e�LJײp��>p�H�T��.�kB��7�M���.��Q2|)f��¢�AWFE��
t��/;��Z[�O��Oy��b����.?n�c��Ug'O��6$5a��g}u��I�5�H��#�hy���Z��$��J%~��ӧ����|3�������~T�3�>_���Me����D!�!�b<��̰t,�wҢ��MK����,���$�ۇq�Φ*vC9$�:҆z5&M�����J�A�FH��D)�:�
���
��]��@�qBUh��P��ViIEND�B`�images/icon-16/refresh.png000064400000001307151161767140011343
0ustar00�PNG
IHDR�atEXtSoftwareAdobe
ImageReadyq�e<iIDATxڌRKLQ���|(���6%�
���
ݩA5��~эƕ�1�Iu��.\tӍ!�!.\IAa�"S��8�
E)3�L��3���Ёp���w?�{����+,�
���7�?z������\]yq[-�"
��q=e��\~�i�v'NS�(�l6c��"OL}x315�����b�ڝN>i`���04m�A׀�1�r�
�ˉ�葉xtT�5�a`0�yL��E�KN�AӋ@#����\]�{�ZN��?�C��bŲRTrJ�V��\>��z����`6�n�b&h��|��ƴ���s�&�DQL'��OKXB.�v1�/E���
T+����Ӯ� ���{�;rW��,����"�x/d����gn\��[���*��KVԼdj�`�0�;�.`�Ki0זcD��]Tv頭�Ao���,��%�os��SP��˫@(2l.fA[� �º�_N_+�DRi�Xz��͒�%�^;�A�
l8;��c�w���Cs��Yآ�۳�f���,}N��#V�fw�
�:���@5*@
Uz�u�-T��љ�f���A�i�1t>���&�'�������鸿��|��`�4�1IEND�B`�images/icon-16/save.png000064400000000777151161767170010660
0ustar00�PNG
IHDR�asRGB���bKGD������� pHYs��tIME� *�+IDAT8�œ�jQ��s���Θ"J`a;A�ȲĀl�B
a��%|;;����J�6��U�M�"dwfnȊ )<�-���;B�>��s����y��Ҩ��]u'���(�1i�
���7����S��+ߢFM}+���e�D�`�VD��(����d?�j�.T��I}��"�Gq иAD�8Wjvzf`�����ͳ���߰'�t͵����q
O?����G��k��u.S��8�!x��7>^���S�~��n�(���B�0�s���6�uH���c/;�?��H��sx�Sj
����?Cz�~��(1�Ԡq��@-Bv���bk�?����MV����:_�vx�֒��[�k�����v@��5��o*�/IEND�B`�images/icon-16/save2.png000064400000000725151161767170010733
0ustar00�PNG
IHDR�a�IDATx^��O��`�g&ɶi�MA����.���<��R�êW��+��
�|��=��EV�²tZ��I2cH/��.{��c^�yIUq�0N:)����S��a@�iH'�ӷ7|v���Y��߬�\��t>1���5��ZI��@(J�������������o]qï��\��&�8T���|
�w'_�&9�\>���t�k9��t�U�����!���{tx��m�~��1�n7ۖi�&�l����E����{9^Ɯ��o,�V?��h�%��ɏ��T6���R@o�)����1�N+MbH�
�F���xH�5\]<�Ĩ���2QĄ����)�z6����A��"�Du�WH���/���KÃ痽�����߶1NIIEND�B`�images/icon-16/settings.png000064400000000475151161767170011555
0ustar00�PNG
IHDR�aIDATx^���N�0E��%���?0K�w������Q&D%v$�negH��F|@�;��U�H�z��<����/�n��;�T�� .����tK�4��B:Ֆ:�U�m���-��LO�Sꍠ�sZ���
���m���@������Q+s��V�^�5��F���i��
����mB�}�!Em��
t�嘏���>�̇
1��O���h��߉D��U���-�$�b�Qs�+
s��z��e/~-��;�IEND�B`�images/icon-16/unpublish.png000064400000000757151161767170011731
0ustar00�PNG
IHDR�a�IDATx^��MkQ���������
q�bbAQ[���(t������r[���7R���4����T\Ŗi�I2s��:C�B8\�ᜳ:G���(�d0�ou#�0ʢ�6|�"�J�5|´VD�����H��XS1J ��Fb�}@�T)�6�BP@�T��[B�ٕIJ+a��7�tD
��"W��n�ؓ�B��ѥ�K����α�(�
�PU��k(�ps�ᰏU��7s�jGl�G��I�S�������wHE�6):b��,�Õ�2y���y"E��빚����"�����ɮ9Y�\,d6{_��9_��iR�Հ�瀂�l�^��
v�n�OF?Cz�<ƃ��ƥ�(��0@���_~K3ۃ��zO�ſ��ba�[x4Ý�h�6_��V9�K=�[FXS�����t�~��|����IEND�B`�images/icon-16/update.png000064400000000767151161767170011203
0ustar00�PNG
IHDR�a�IDATx^��=kQ���v��F��ڈM����!�N��Lk+��P+SK:md1
�JT0H�Mfvw>�3ܹl�O{�yx_.�x�l����ň��@inm��I��\�����*:��#��Vm`{�ˣ�v�u��֪��1SY�³�,��d�BYמm6z�÷�
�rt
����oTJ"}��+�ӹYs�?��:�����ߏ�`"TK
f%Bh��q�����.O�\���>���2$�HDY��k���~O�
� ��$%"�ٯ���y8f\D��F8^�@D6[8����7��u���m�y��������?M
����hN�:��
"Oс�k���֣���y%��@"�PeA�x�>on�m�,r�>~��Kv_Ёpi)��ѕJ���E�
p.�0���*�a���_��݆�z_2IEND�B`�images/icon-16/upload.png000064400000003015151161767170011172
0ustar00�PNG
IHDR�asBIT|d� pHYs��~�tEXtSoftwareAdobe
Fireworks CS3��FtEXtCreation Time2/17/08
��XtEXtXML:com.adobe.xmp<?xpacket begin=" "
id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 4.1-c034 46.272976, Sat Jan 27 2007 22:11:41 ">
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xap="http://ns.adobe.com/xap/1.0/">
<xap:CreatorTool>Adobe Fireworks CS3</xap:CreatorTool>
<xap:CreateDate>2008-02-17T02:36:45Z</xap:CreateDate>
<xap:ModifyDate>2008-03-24T19:00:42Z</xap:ModifyDate>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:format>image/png</dc:format>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
5RdIIDAT8��S=OA}Cd/Q)k1������`�01tד�l�GCmc��������Pvay�wg�$��ٝy��~Ilc����@Dr�a,��s�)s�(���nv�m����ua,��
���<J�Iڷ ���s77Ү�8�yZ�����l�6�Y2�]Qxv
9�z��˓���������P��\�vz��4}rzLL�N�D/����������Uj��[�!�3��PS�YY�?�]��q�����U�G���=��`0��V�("�5�10�@k�F�q�2����ZXk1���c��R
J)A��v�-��w�"����A�IEND�B`�images/icon-16/user.png000064400000001373151161767170010671
0ustar00�PNG
IHDR�a�IDATx^��OhgƟ��ofg��%�H�͟�M��B��%�h/-B��Kb�K�U!dwۦ�(��]$Jh�7ɥ�$��6A�m��Q������ݙ�^1�`oy�9�?�灇������qV���ߞ���q�>�>m��K8s"u�?�N
��^���a�E̞�{�k��nJ������X�
o�
�Or��R��K6�m0�pM�٦mE���î�-(�`�{,�S�6@R�X�?|��٣=�������K
���(d��4a1C��o6mT�a�KO]?�w���#澇.49�"{��,$/�ފ]=([ ���������ZeU�V�n�]^(`�'�]�`�#q�0����ɐ�u�.��rw,�J�Ǝ!JE��5J��f���VD
!|�
����@��Q
�L ��n��}� b���B~�)Y�0AR�1�3�+�uJ1��*����<l�C��:���"��
��%���K����1_��H+����0��e�g>8r��\�6��l�$'�f��yp.���3����r28����
'8����78����9n�v�[���5��_����"DM�s~�O��@47|q����.U��
������В��nYet�D���S�9����x�U幃�:���V��m!h�/���5GC�T��IEND�B`�images/icon-16/vendor.png000064400000003411151161767170011203
0ustar00�PNG
IHDR�atEXtSoftwareAdobe
ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"
xmpMM:InstanceID="xmp.iid:3D88341A0DC311E4A448FD79FC1693AF"
xmpMM:DocumentID="xmp.did:3D88341B0DC311E4A448FD79FC1693AF">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:3D8834180DC311E4A448FD79FC1693AF"
stRef:documentID="xmp.did:3D8834190DC311E4A448FD79FC1693AF"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�A�}IDATx�\SKh\e=���&�<2��1�&�$`�m��G#�"Q�mJ�(�X�B��
�.t�FW]�P-������"�J��4�'��N3���}�~wޟ����s�s�ON
rh��٩a~l��qg{u�k�r[ƿx�����!>��nY8�7SJh�!��~�42q��ƻM��^�&���+K/��:G�d�/�H4#��=��I��V`��~h|�#ɨ��U$Z3� �wf���UG5����q}�����șA�B��#1JWvv���B2>����k��1Y�o,�\J���o/�
?��
P��|��1��:�{��0�w�7ٕ�"��ʏ?��͉�B�q�r� &=���_=P,���O��bE��0sm�+�B�h�����hN
��w�aY�p��c�,���3SB�
�T+$4��6]�D<���.���X�5_j�XS���D�K��q@���9Q�>,��C��$�L�+m�^�Z��^��#G��o���^������A�m�N��{���:ȓ����vJ�
-I+�L䚓�]��gX�aH��ȵs�B?����Pa��}�0|��U���J��\�bgs�Ĭ�Z1g-É�#@M�x����6��l��˧�a"V%�藭���|N<9$S\�U�=K�g��0>�N��ɺ0"����RyDK�;�,���uxd/�*�0p�}��O��i�ة#c�$j�8��g�
�.MzK(C�6�7�)uY�y��;�M{Ɏ�R�|n�%���@�a��!�MѠ�� x\�w��> ��|�&���yS��W�����ƸJ9��|�f�j]�`�Dq���{Y�/�I�a���"��]���
��L�����g/���W%�h�+��%�Ѿ��mg�*�5��IEND�B`�images/icon-16/views.png000064400000001301151161767170011037
0ustar00�PNG
IHDR�atEXtSoftwareAdobe
ImageReadyq�e<cIDATxڤSKkQ=w$�f�X�X�](�(�"����u%���΅��^\
.\�B�&�P4!`�-��}0F�&�;��i��X��a��;g�9�E��Ͽ<�S_|s��
�O�0����ݾ��>���b�⪿�(ҠE"���ou.a��q�����5����V��r{w�{�1N
�X��O���
-!��p�"i�
�'fk��^B����Es-�:�X*�NN
��m3m����F�H��W�U�YI�xA���(���dܻ���~E�n�C�u0]�q�i�8��SMts��eb(��+Ep�9�ִ��6�0�!�c�N����0��t�TG��?na��zNdG�7��<OY�6����i�i�������D���7RRRJ�[�B����]���Y4��T�s�
W���,�1�������S�r(�ih�=�+�'�|��n��Q���Z��cmd���|[��P�cG�.�
�l���1�w�=j&�hҘ����&Vh_�Ր'5-��T
�];��ɞ����LOv��ٳ_a�L�/x���|a\���7?�??�~0��Q��
99{��������'�IEND�B`�images/icon-32/apply.png000064400000004762151161767170011043
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< �IDATxڔW[l����g�뻝8�c� �p�
N��pPҗ�h�!*RU�Uڊ>U��҇V�Q�P��R�H��P*H
J��8NCb��xm��^gvgg��̎�u��u4��3���?Gz�X�DA�&���m|�z7fro"����m���L�ԝanw=��q�dٴ�|����e/�g�K�}��[Y����<��Wp�t
[��� �3��^�m����P��IO���Xf��w�����`�b
DؕҺ~��2��@�[�AN�#Pe�i�aL���b
��
M܈Z��������V�=El��1����D�K��λ,�@վH�K�
�(������/�v3��Ф!�ُ��v��ӗ�'�AI��*��?�o">��h��Z*q�e{f�3Z������,n:�Q�#������y��B)�`1� �k�{m-zNj-����0� ��C:`|Z;+�A���tC�e�]�`~�4R�.�c-���|%��V���O:#�*WP���bc�F#�ֽ_y�Iϕ���(�
S8�ޞ�{�$)�sa��k�q
�:�;~n�k(Y_�%�>�hQ��:��h�ѽ�>�L�{q���r���};�߈-��;���`�J�a��o(��ILvd�#O�;�Ȁ�5����އ���P�q�g������E�aٳ�>FFvB���u,���ڴm߭XET�2�bd��uJ<Nj�\a���&4�><~��C'?�_A�B�<���пYOQh�
K�m
�6�,lω��rcu�A�܄rn#�࿅���yD2KUh�=x���"��pv�(��S� 2�4)�(p���04�G��6���ڞ\��b�H���)�����UG��{!Wt�����,Mxƍx��_!�H�e|p��T3$*jL�Y!����d��&e��
��|����"&��1��!�s`�~D�G�%In��P�J�YoPO�+�
���
�ZۢBu��[�;F�)*e���ڸ�h
����2Ȋ�����U�Phw���S�<T�̠�\�B�������v?��{[6�gT��R��6�[u��~�*e��`�9��>������(kT(���V���W#�|�p/l�=yGR�U�a���X6��M;G��݈sg�q��vt=���d$K�3��?ctt~M����(Fzr�a�>���aX^
Հ�q��nc"�Ȃ�|y��c
�|� ������+P�}�O���ok
��h)�"tU�UP�H<���qx�@}5!�O��2�
��H�/U�qq��n��
�����"#��poy�R=})(:uH��=�D=�Xr���LB�[��d�kY
Tϫ��%�4���GTj��g��P^Fݵ��۰up5�$�2���Ϝ�"�AKJcm*T�ޤ0HԡǪ2*���_
\�k�8O$[�y��4q%X"���8~�]��J��F�by ���
���D�U�ѩѳ���fl�*)=E5B�b�
��.��Mu@����c���Fop��,I"��z��i��jG��u��'�{2�KD��"y������B)G!�ا�N2ebq���y{5���
/��{6լV}} ��Yb�
�l����h�O��|�3���Q�D�y�!@\�f�h_rQ�S�I�2ڱ�7�B)�N���M
��'@'�:��d��˛h�=��K�.����h���¥Q<����:"ҳs�Q�z����/7uJ�q�����,㳱2d�=K���4g���ٸ&�dA���t]vG��srʡ�_$�!�nD>���s�R��i�'R=&��s�U��"���accs�|�'ſ��0����{{SSqATˇ�ݤ�����\!��fĄ�"�:^�eQ����$Q�SO+��G�R��Ǝ�eLN_&1��b�٧c�Bv��M)e���Z~b����:�j2 ��@�w�
�m ��Qhx9m��
�j�[�`�n��˘�T�,L����i�j�>��X�-_ݜ
�����Ko80=`9���V�.hG"�W&FzE �]����%�Dg���Nv��N�AV�������5�
/.�&�-��t�ԓ�L�]�+�h�|XU�5-ގU��L�h���M���E2\Ef���������9ZV�Mp�A�`�0�ttd���M{}i%9|�G�>�L�}�#����q=��ޑ:#��
�2f�ja�{��~53U9f�7/6S�F�
U֨�E;��_y�:�+��"�ѫt�J�,�l'-��5@�sl�g&��F��%���IkҘ��/�ġ��:��衡6}��n�+�{)�V��E�7ܸn�5gG�F⪅���YY(^4�
�߃�y_���W��71\���3]��LqIEND�B`�images/icon-32/approve.png000064400000003403151161767170011361
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<�IDATxڬW]l������ I�M�$�
��TB"�F�BD%���y�
/H<�҇�1�!�"��P+��@�J�����ژ��[{��ݙ��{�ݙ�wm���r3���s���s�sF(���ӧO�X(�u]?�E���^9z��3��
%w��١��~����>t���R��8BhF�O�O���D�0f�}�皁���'�Av�?�
�J�( u���
5{ ��0�~��fV�X�7�<|c�ƚ;{�~���^�+�����qB/q��݊U{E�"(����>v�A�!kWWdʺ!��/��
k�7 ��'�nꣳ�?��g!�5��;����S��~s��)[:��9mMW��͙m:�aY��eLB9��c�C[� a;0�%:���t~��H�U�֙�u�����Ex�2�P�}��AJ�wȏ�e
>>�l�K�;�X7�y���0s9H�«��!x�D�wF��]B!�\C\�B��Ę=w�%n|f�*�g~���<����|R5��C<[��a
�'~:\Dx��E��af\fq��NZ�����x�pV;�1�Fh�کbT�{���j#��|��)�W
.�ȼ"���2I�����d�wC%F[� ��w⼅c��]��!�
�@4cj��$�~X��<����E�_`� H�v��?��SN ��7
�Eh)��$�
�-8�ѫ��1,��Is��}X��= ϲ:�[hiӹͬm��2��{;\+B.o�3���Xh��)���!���X�4�f.3F^}{�U��k' ��P4�`>�j.*
�.���%Y�(��L �U�6e�
�tx
��ʽQ�e�qaZN�|mL���S����Y��u��{���E�n8���̈́% L��4D�ą8��#l
!lG�&>+#Ȋ@�h�D��i-��3S���^����:�lW3�:T1���º�kQrcd,�rR�.�����lN+Z�X�X=qH1s7
��+�X�N�
�G��r���ݶ�%���i�����)�B���X6�C��9�<�cT���r֖Ax㠦}�$���3�d�,C�[�l����Zș�T�3��uM6�
]Ƽ�5�H$
�{�ify�d�
�P�X�s9�9]Td�[6 ����}��U�9
Ze�}M�r��i'|:AS5�uH4DĮ�z!;Y��!��ᥘ���UJ?eZ�*]=1�"j.�/J�a�0�k.\|��
�/ɀɞ_�T011Ѫ�=����9���ד�&X�hky� :�1�dm�
�?a߀�m/j�}T��;��Q���<�A���(�}b
7��s�?İ� b=_O�D����%:�^���hT�ڧ��!��^���V��'���c.��?uΎ}��&���&S�-���8R�gǿԒ���g�� _!��9��%~�)�KP�!{�C�O0ӈMjG>
�
���P��_!�䍞����-;����~B���N����^��c/G��ռ����頩9��;`�lC� �_%�n:?����
FxY��D�Z�ڥ�co������}��BW���9����FN1��y|��o���F
��u�~�ߵ_�_���-0��8˖������o��&�����ث�zc�=�G�\�r�Y*�:]�`�u���IEND�B`�images/icon-32/back.png000064400000004602151161767170010607
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< $IDATxڌW[lW�����ͻ��;�v�$u��BKh)�FIy�@塊(O\RP
��B��P U�B�JU��
T5m�P�4Ic;�cǷ]�wgo�s;�fg�����gg�����?��~�hEA8�n�x��=H��x�
$����|wz�1i�q�-�iE�J�,��ՕL��^(\W��K��c��q����EFò�-{?�x�=zt�h�
�,�`��Ip��0����t��3X�������Pd�W��I�fp�S��GG�~���#^a
6G�"P��u��*1�TIUF��ba~�_���[�&/�@N�;|�ʌ1ikw��<4�l(�N���L�,5aRp��aq�0�-W�aqt&xp�0Y�\J��l�F
����݃�_���Pӽ�]�,�Eb&�X4�
�3�@$��Ӈ�cSb��H͚;������G���-��47)C�O/��m��ܒdE�*��J��c��?A%c?�g����1�<���#ˮ��jݣ��ot����MÆTPW&�vM�Ɩ�a��7��н\1��}�C�C{;nh�5��˖5��u�S~3�FV�6t�L0��D�36�ľq��z�=H�H$��GF��L�Ꞩ|P� }�-�^�iHe��~0��-%�Mb5t�X���v��ݿ�����Ã�Td9��3�<�1�$D}9�o��SヨZ8 ����A��L�V�%���4}����c����-�=CZJ&M/3�Vz�R3�J��gG�G�q�N�̈�6�N88s)���w.J�i��@8�U�;oCw/��Ϲ-�DT���j�C�����ZA�i�Gv��p/�.pu)C��+L�l��\
@�GI�2B!b����q���(�
��
e�Vԑ)h0er�xR(�ZE�x���OO`�/�q�ލe�"�m��O���G��bႽK�y���M�uq;��\�D�K������d)��Q۶a����<��X7��1t�����H��t�l7�y� T��{܈}q�Y�xEǂm��Ȯ�zI��$�X�6Z�LY�P;�`oO�فd���nz]'��*z�HD��X���=��OB�sH��^sS�v�D�8N��]w=% gf��pj:C�����;���YLe�$D�M�0�5�֥�"V
y8e
N��
,�rh�r�t�{r_2��i��ܠ,}Z�]�pzj ����bp��?�^��KH�0���|A�Bs�X��x��~����R^�(5[B1R-Q^͕�����[�b�2��-%�9W��`@A�X��_{�/�ų�F16�BOw'nNM⥹%��ri=RV���eP�u�C��êڈD"��zMܳLc��=S)i�1�y�AL� DQ�����z����.{��$Մ�R�*�jfE�U)zg(&ډ�P��
�\
��
���QB�:�Y^�rtv��X���!�b:^-!��'�J`M��S=�
t%����CV��e��
��\jhN�yV�H��QҲt���4��D������j��}m�[�*iR��ĺU#�hV+��&���B0$�`���ّ<��/\��iF %�B�.�VV��83�ݟ�2�s�vL<�_̬��)Zb^M)+oBጁ�x;aiCYӨ[�j�+�H#�M
9�
�����d2K0�%$���. p��9,�9��dQ[ݴ^�[X��i�(�-ߖ��.ir)(�}�ȍf�u�����='B䪃QTJ�,-
/�
��?�\: m�"�my�P�FZX.���B��u�`T�U�9'������kh�\�d��ScZ
���m��Uܹ}��0����n��W�陏ޖ��t���i[�v�~F,���w{ֲl��X���O�Q%��ϒ�F��|�x�穴�>���C�B@&1�Z�>S7�����h<&&l��$.2m4
�/_�\1
"A�-H�:�<�\�LȨ�K������(x�e�z�W�nBB�T3�_��Ӟ�G�:��'C��Gl�p���u���;SQQ*fp'����ֲo�ϽT��z�n���u�w<W�d4k(Ԇ�n�x�t���o�H��''R�O���P4$���R���J��V�+Uר�[��t��8uҪ �G�țrk���p�ֵ���F�
j4�j{w2�u��x�$av6��9Ɲ���K��I0�U�Ec��_
�}�k�.�Zt��O'o��+~�����gD���'�;�~�Z'�6lA�t
m��7�ì��~ޠ����E`N3|�M��0�N��IEND�B`�images/icon-32/block.png000064400000003326151161767170011003
0ustar00�PNG
IHDR
szz�sRGB���bKGD������� pHYs��tIME�'��m�VIDATX�ŗmlVg��yy���Rx������˄Sf�e�iI�q4��0�c�Ũ�f�˶���8��E�8d�d6�0�Q�Z
kK���s�s_~x��Ҳv8���;9�}�����u���t钤iʝ�eY��҂eYS�E�B�@�R��[GkͲe��;088Hkk+��Nۻp��JeV���E�|ߟ3��b���`����9v�+W�d](�n�s�(���u]�R�i�1�j��ƍ9{�,۷o'C�R���A��`��R�!�m��)A`�6;w��}�Rض������j����&TJ�$ ��ܲ��dn��Z�Gs>�F;��/����MC�J)��Su���i��y8I��|�r�<h�9~�8ץ���R���`�!�"B�5W���,H���lNn:3>>NG{;��͜8q�͛7�R�:}�5��iCkMGg�s��M�Z햔���M�Z7��͓'���}#�R��1���`DP���sk�R��tiJ[{;�B�l.�|�ё�J$7�\*��\�$�)�mm3F
"hc���ZBu4���i�&T(��^Q1�NS���~���`QP㩓Op��
?����?�1��+�+�ħ�&����8�{p;����K8�
��N�X�Z�M�X�w�
^È`�6/��wl��KlX�U���T���;��x�wɬ߉��K�Q�?�1��F�o�fb��4�<ܻ�HG'���#a
l�Z
���jn��C�y�-)��N��\͵�GF(,lB,����R�'��J��(&�pZ���l����<��R_��<�<JQÏ
��@��C|�k�>^�.^�Bt�
b�� ���r�XYД02�.N����O����G�r�e�|n=N."}oI��I!�Q"�ɫ(7���3�*%7q'�������P�B!�e���\�����ogyh���
������G�ڡ���/�N���\6G'�L�
���Hp���:D��xc���6�T3�-o"8��{I�XWaU�E��[p��'�Dc��8�=�'�M��,r��r��o�Z�ՠz[I��"�c�8��9��?���˄�� bp7�+�C��(*S��&�%�K��q�w��w���0��+_<�V��jP�ӕEQ�˖����;i
�"��TW}�������X��OK,*��,�\�]\́�P(~��i3����A̘�\*���.�_���g����4��'��F&��8�hD��Mq˓X^#�ȕQ[�K�l�]K�3��(��
����-OC����Z��i}5BTl��!O��~J:t��ԯQX$������d�"�Ɖ��CU���H��c��|]!E�����
�l�0�}�r������?$JR���e0(м`
&��XNG��<�r��/�O�ZU�IbcHq�9��씢��Wk&��1keǎ�ݻ���^�n���waY6j�A)��E��1)�-*"{����~{rrr��ݻ_Y�f͑s��m��(Z��*"JDr===��r��=z�U�>v��O[E�睝��n۶�|mN��N��i+������Z��a�p��|��vZg@��IEND�B`�images/icon-32/cancel.png000064400000004705151161767170011140
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< gIDATxڔWkl�=3�/﮽~;k;��qBZ�������~�HHE�Ԃ��B*Z��GB�E* ��6-mxT"�JH��
��@q���N;�m�^�f��=w�koLxt�w<s��}�;��gp�2.��VR'�C�O~Ou52��ti������p�l�h�M#�ͤ�ԕxzfl�g2;�Q�Q[A��`���\��r�[�G�n�O��*5�P�;FE�]���ٶoLŦ���K�g���?���*�&ʵ"
���VUm�^�&��9������X
w��C)+�VU�n L�9� >��ͨء)x���|Mޚ��<�V�eg��Ο�
0"�;H�R�B�iPB!(--.��矡�X�5bf�i*��*�/�|�����ZG�cp�ٳ��kx�]�B��cn���V܈��%jn���c�!�_�Z���TT������s���t8S�4�]�矻�L��@%'T�0��m��λ�n��8Q��V�ސ�90�G�kXa/�;y����x�uhxܶ��^�z�ɤa�9_�
X�z���`�k�*͞��np���Gz#�b�y�oZ��NY �*�ƅpM����0D�X䎗���0��PuS'ꂥ����/��G"����:�����3��y��
J�N���ʰ�e2�q��h��{�e��?|�����
�/�"A�o�~��(�������.��R���xE��֍�6`�}��$���,4�9���W�څ��wB�<�ʟn�Ti),�y�>2�p�
T���������-�ؘf7�r�&��4GP��~������*OM��e��ߠ�{���A��9�����:�{Y���lZ��^��bT�`�#�LB���ϭ�ttǶn����ajj��q�����{��%V>�
��S�
w>�0�wu!��Y�c�;�*D6�i����n�<�L�֧c1�r�4I��l�)���S�s�`µո�o�M�7����3g����Ա��0�uLE�sL�tS�Xl���P��v�P�r�!��a�q�m��d�Ự�O|�]�d�$�͍J����H#��o<�N�>��������N&�@���x��yT��t�
x(���%�-9
��@ ��1V�4(�Ek���O_|g�G���nU���C6��,�6�y]�SRoq��Iś���9�1�H��&��sn� ��сz�@=I�R#�'�
�csR�HR�sd4$?�
���-�$�Ph@����X�ܳ(on�#��t��Js�3;Q��-�aIB䁼�b`Ҡ�M�I>�]�N��J��K��sYB�H�=�4jW���J�2̩˗��/��J��$X��V��v�Ҩ�W��O�3$s�`�i��Aϥ��1�]�!>f��j�ܭU�-*\�S��ukF4z����O���u�(/����b�VdK�H`��0-��p)B23c�����UNN����a�vs&�أh���x��
�ol���A.X�#/�����zW�E˺uHSA��K���2쫬���frII�w]q�dU�*`~2�?Te���&'2v��)���Ϻ�a�xl��v#�T�0��ܽ�:?S���[����E���K���fe�]B
b�ǹ�A���
!F�lK.Z�!I�]��}<Z�t����3���3��&淞
+�;�0EH�❝��щ0�<��\^�P�z�&Gpq|���xʣ�C�5i|w��H��vT/��ǹ�%kc�ár%i\�*G�������lҀ�g{��Ƙ�Ky��Q5T�Ti�r��/�}�I+{,�bëi���Rsi��L���dݒ����Ι�~0������`3ej����7 �Ƭ㞛&��P��6,'�Թ����S&�;�����9���V�Ӟ)��K_M���ݨ[�R���/�3�(4�Pa��Z/��U�ij�2Jp��$Fr�ԧ&6�1�� Vʰ]<�j��]g����D�7QRS����sW�Ο��r��
G}�J�&ۣ$\��0���������7.��W�\@>�^d����~?SZ��xE�]ÎВdw���ɽ�c���e��)�%�i�C�NMろC����#:NrhIބ���U0���(�G����x�����T����p�^M�Ú'
y�8����,R�)��zz��GǛ�
�r\o�y�N�Kl%���_d��,dC"Ke�*�����5~��2[������2Mb�u8u�Ƹ!(�@���c����|*,�뾚�jdM�{�(��ӵ'�Z��T�#��@��oG��E�E�P�����S4�K^~�/ho��ƵE�"��E�q��?'��9A�IEND�B`�images/icon-32/category.png000064400000004161151161767170011524
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<IDATxڤW[lW���Żv�&�;qC�\
jU�"��H�V�<E�(����\ ^P�x$�T�(Q�"�J�&J'�k{���xw�����}��x��$�������|�[n�쏱1DQD
�a�xab/~yo4���w�ԑ��.��_�h�aôM�L)ݎё�j�ָ�X�L �vC���i�6ĭ���3��^��Y_8p�R�z(�J#�x,{�'OzW���ӹ;y,|�+t�OE�{��K
�N|u��ib���ou�L���U�u»�%�U�DE�P�sM�
�H`|t&�F�{�Z����4��LSw��C�h��c�ތ%c��#��#
E�"g�l�8�OP)R�n��(k&x�O�c�@F\)՞UZ��(-͇�����Ǐ����k�ȉM!ga'p4���t��%ʊ��l&��\�����)��>�G��M����̱�o�D/r�����֡t
2
���0-*V�a�:��`xZ�-�(�U$�QL���B>��[)0�;���=�+�v$�yIE�V�5x|m4�g�"8�a,O�/%���2f�s$(<[�MuD��(�
�q�E�by��L��Ɏ.0-+>���7�}ILU�)�!8��Q%[BF-��a�YD$�]��m�O�
���p�(�O�c����zD�����&�z��FG/S�;v���C�s�}��ⷾ�$^?9B-�miݍ��w&�Jx��
���Ժ�OA~q9nH�sTO�6^9��e_��z�6Mjٖ��b��:� M2�u��/
�pkE��"�A�f�;��+���7ߡG@O��R_�T���4j�:�a��]b�x��x� �GC��B)��a�n��c�� Z�:*��� �U;�~�"��W��c�<
������?���|<]E�PǨ���녩)'����sx�Y���6ѶD�>�^n:�K�n�:MsPG��>���I$��Oh<u�m>�)�.�f��U0[j9oc��K�B��%C3t�|>v��vې�;/�C�rv)W��E
W:���c�&���Ke�l��-�݉l$���n�>�
6�����e��AO�k���͙b��-'%�n�F�6�P7�@��6���7p;_E��p
ꡉ�+S��b��w}�֘o��9�ڤe�Q�0L"�h��
ԲC@&��.�}�]W�%�j�`������fR�����
y6��µ�q��D`7�F���sK��效EQ�7��n]�'x�ZM�>��"n�vM
�seȴ����&��1oS��*�4w�'�RZ�m�"��l�M�(���i"�۔YwK���ik��v�¯S��ӎ�tZhTʌ�/��i��H��n��f�^?;��?))d�SS���L}a,��c�1s��RK��e��{0?;KUMZ�O9ѫ
��:����`4�ݷBr�Oģ���.y}������+����X�I��fiO�PY[C�X�G>�<7���ʐ���m�rg>���̯��S��&M%��3��!��7�{[��v9H�P��I���,�.�J딼2s�2��}d9爙��k��P_�ѾH0_��2?4��(Ε>��a�
�1���KX��1�Z[����n�j��
��=t�e�_*��D����P�4a��@!%��.&LyW���!��
Uz&@�ϣ\����E�sCm�ϕ�����al�jw�w�`�
�+4�r[ӿ���^JǒD�$�Uݑ�L30�hg�9�
A���P�榗�,W��lc������W�2�)
����϶p'�hR�Y)#�v*�Oe��'Rq��#b{�ybTV'5�I;��)���
�Y�]��?�-�ېOF��t\f�?�)(X��z ��v8<z�P(��%����{�C�{��Y���JgU�k����紡�E�Oϱ�$���+�͇��mF�s��e�b�,/�B�p�M\5����n�tt�w~}éD{1���s�fϪz;JtW
���c̡��l��d7���b���lב�lì��Y�̖��R5�BIEND�B`�images/icon-32/delete.png000064400000004564151161767170011160
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< IDATxڔWYl\g��63�/�}IR�q�6-m5M�6U�P��C�x@��P����$�
}`�Z�D (Q��$u���cljw{�ξ�e�?�gƞ�nZ�}|�3�=�;�|gez�n�/Eס55�7-4��;;Q>y��폆|�υ����8^ʼn��S�gK�����Bz������+��>�o���J����c0�������N��-8�"�[��b��/�ב�3�ə��l�/�s�~e�!:���7��;����?��X_���$(�u�P�pJK���=���������xYŏ5�_�Ph���{��'^�L���Q�C
�z�6�%�24����s*����>
��"�
D��?pJ;p�9gz�[�����ƕ���}�q�H��<"�=��^՚�y)�W��[P�/����;�SO>kݾ
g|>�|R�� §�T^ʦQȥ�ynE%T��`$�T
��U(}�}�E�~� |��IH�Z,�]�С#��,ܩ)(�#��x
�v�'�@K$�.b�n��Pa��V�����l��B_؏}+I�����4�$ܩ��{�~߱m8w�@�@�U.�cM��
VBG�p
MͭpJE\:�
����D��M�T�a��q:��l�,:�:�����p���������Ď=��{� �,���啯!�ӇV����g`G`\^�X��$�Rn�L)�5���L�\���*�<c��%��=��v��k����!�ӆ��n��. $/���_|��(�L�\Y�$�|�,&O�;��O��J%�X�"�/�!�o�
^(J�A���z��ך�������r&'�1
�ji�]ę=̥�CRQU�I�jCR5��t����&h-�մ1K�`i��k�����,M�}��� m�?=`
��\�!T)TޡG�⛰�S�x�!�/�_Q�#ņ�
��mzM̮+D�ؘ�u���tC<���OD$���ZϦ����aP���bc�o~��g�w����e#[��*f_�\���ez�L[�jȐ�R[�|Uks�'�F*�[�}�Y�,r�F0�Tű�����.g)�Lr�D��q:㲪<F�#@]��^�f#R��I��5)�2�c�������\[Eyi1hNrP yo%�=y�<V}�C�Q��ۡ>�"�N����Y!;)?Ho���S�X�|������I��0��A��\�{�"JzRg�����$�B2a�TӼ+��
Q��,��3M7��+Y�̃"�K��"������b@��b�5�_�!
T��P*�4$��Qx5��pRlN�� �d��'�~�|���sZ{�∎��zH;�=���l�(�.Q����������yP�W3.�j(��]���z8B#Z�OD�<X��^��=�3��LW�!��͈Qg>�W�_.mPթ����H[|.#�"�Q�.���<{�eMG�"һ
�ɟ��V�M�g�Ȱ��֥e�L���|
)�
��?��
+A0?��:L���[��K�G�26����ŕˈp �Q�#�D�#oK�3���34nK'���Y�3(BLq�;)S� ��P���R�D;Ǭ��E/��D�m�`b��%�������<��@���|�D��y�S-�]��tnUΆ�q�e��r�|+߰�q��m�?���Nݝ���(�O-�[�FㆆgW������,����
�Z�%-Alx/�����e���qG�-!}�k�-��nl�BӖ"�̫���)wx���=TR���Pat+�x��)�pP5A���#�U7f�ć��[אcd<37��{�&-n:YJ#��r[���tu?���P��*$�d���������@֨�BS{zىݶ�ܽ�X���k}���p
w=x�~���JS�B_�˳$]�㴒�BpY Vr���A�P�*��nA�l��fܶ�������|���'�[��`��|�`�#�'�T��rs��ˉ��}�X�&K�& A��H(�f�$E$�{e��u��Ͽ[x��<�T3Q�Z}�
et
M��
�|7�m\�5n5G���R{<�e.���"rg�J���kX�إU_�9k����[�fЯ@�FJTU�����h3y\j��86�"�\�C
��|�_�,�$��+n�yXv�?i
��Bvj�p����.ٰ�ו�pֿ_�5oՆ/M�g�q�f���XrB�i=�Xm����
��
��7�������Q�K����y����[^�`�E+P�vm�IEND�B`�images/icon-32/hikamarket.png000064400000004766151161767170012042
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< �IDATxڌW[lW]���}��I�:��8N�&}�j�RJ��
�*��� ~��WE%������J[T5�h��RJȃ�i��M\Ǿ����3s��k'N�`�3����{����{�מ��HS�W��OTJ���R0���6[�>yU�}�/���]{�ƪZ��7��8I���䂵��}Y��O��n���m4n��y)�g�m$ƕ�<��!��)Ϥ�����F;,�xY}l�R�Wj�i������V���H��ۦ|�s)����:�:��|-x��AbB���?��E��1��i0w���W��ǹ�%:�vn���3��uJO�k!��"�{��C;���Mhu�h�$[@lM ��,tq�D�3Q)*�{w�+�v�zt��=���p��y�z(�OG
�
�l�<�7���\��)�S�
��H�"�C��C@R%G�| n�m�5�}�SSC�9�E]���Uus�o�t�D@UPȕ���V�Z iR�.�.M�z�9�i��0i'C'3@g-6�{bg�a����K2X��|��w���7��Y�E#Wee���r4(-���1E�i�����`��蒚H�r��$"�D�1�y�0G�=��^�Z7���H�����gh(���q?v�>�{w�FM�舏��
6�Av���|$F���S�y��*����X?���~�r$q�؏��1�m|6��*�}���Fb�j9-uf�N8V+I��O��9�L�o�b��w<������xo��78����t�}�xB�Zԇ}�#�ы����D�e͐%�i��"�4p+�S�6Jb4��hG-DQ�7{��~`�� S㏓�c��!�Nd�7,6���e�~��?�3�/�a�b$�8������}��q �k�x���%B��ko�s�1r7nz��!�ӈ�߃Fh��Ocs�V��99�[�R.�4ǭ�Q�5��錀\�D���VXg�W07�
�|���q�G�q�d5ɘ�n�yD-A��7�M��W��_�'9n�4�$�pK�6];�pE�*_
\_PD´i��r��ٗe {��9qj�
ʅ,
�Dh�>��Y�Ǜ�IMXB�Uame�e>�b�z�0��IHDB��p2e�
���v:��Uk�Μ�pvv?�bj�}�9r�Zr���<������3�7L����|?�RB_i��ۋ���Lt��2��8�O֪���!
"�EF��d��BC���/ҙ�ܹ�@ex�~�w}�}��Nc5�[�A��
���r"M��h Vlw���)��+ 习L��%2��
V�}h����a���&�N�E�
�Mwm�i�S:�+EAYg�
�S���L����bb�f`p/&n�c�n���r4�Kx�г�3>�[�>Į����V�sD��rm�9��i�2$W�iz��h��.H;v]�jq��w
{�?��c��%���3�^�ƾQ�Y�8!^T�Q�V
Ͱ��J�>�ڬ8�e�+CH�@�ˈ���'q۶���Z���)�&뫵{v?�!:�X����|&�ʁE'��D���sMú:�d+�j�@a�U>�sT�;���zieK�s(%l���&��I����.����!ъ~Mb�\gP+���;�a�Y�75²�ʀ
tby(D�����|/����������F�F���D���;�:!��E�s4�wm9e*
��MXjZ����~����^���ZcaB�8�������KH�Ƕ�R�
8��~4�L�a���YvC��4�'�e��K��d���I����a��p/!���#���\�}����fn�$&G�r����2r�dn�=\�]�S�se�D��.�q4L��R���?~�JR,��
?"ӫ:
)G�e���
7�ò��L����y��V癮��@�z~���m?p�c�ӡ�1m�O�a���_@Oy�ݶ�����ɤ2��Z�(0 �z�a��:v�.��vn�x�f^�_�y�%���l:��~�}�U����z?>3���T�]n��>�u䥬!�
�o�n��{���dQ9ET(U�q�i:�ׯ��.s�_�SwH���*�l��Op��a���_3M��'�+�Zc��e���C
�PO����j�W&?21���ۊ4�����$I�A!�u�
eXI�θ���r���t\v�;��f<+A��g�2�\H^���~�%���F���UĊ�.�
Bʬ��1�d�ݚN8IEı�
Y�)/�U6үJ��̐�"ɥ���+i����\�H��Fd�w�l�wm�O��21
J)ٟm�I�]����Nԇ3�8{����ە{Vʍ�agljE�|o!}������K��/+)yO�h|{�_?�W(�5�/�|ת�b�nl�3ihl�Ҳ}-���Y�M���̊)�|��Q8�`�R����s�����6����M9�k_=�#��gn��'
cIEND�B`�images/icon-32/import.png000064400000004527151161767170011227
0ustar00�PNG
IHDR
szz� pHYs��~� IDATX���ۯ]�U�cι��W�s���k�:M7��R��
4n�bW�KQ[�KB��
!���R!(-H�IS5i�����&$�sl'q�/���e������q| }an������7�1甅����ژ�ţ_�``L��o�8��!�U�|��{��{�))"r�Lb��ڵ�������_M�~��t~�|�DP� St�$W�'�|"��U?����w~�_��/G�8�[�s��`�O<AȚS���֟���?��#�kS/��
Y�����_3��c|��&���ZEH�����-���9�u�t}!"��B��j�c{�߾�U�{�]%dM�"�>af
��z�I$���ۈ�����G=�����NU�MU��r��&�_ٻYAR����jN'SKĵ�ٽA7�!to̓
���??���ض巾�j�g�eI��i��琬#B�,�5�L�M��5`��X[�B{�?d��$,O��M�u��p�ܔ��Fq)
�d�_���;�I�
����%~��?�3����ɏ�%�"���f�v�ɤ���D�3m[x�K�K�S�H�Ey�3�d"��F�[��2QA�c�nʛ�����*Q33����_���?�2�P�%���[r�����ZBY��A�'�m�_����%ݳ�K��]F��f�0�QÑûP
b2�
��$D��
f�0R��=l�,a�V�o�c��G��/>}����?q��=����TRg����;�l��d^RC�0@Z�c���gi��Fg��t�r��
����=p��_x��c��-�������ӯ��E��pAp�6>�
E�8�H͂��Q��� g8
Eci��C�Zˌ�2��%R���6zn�I�T��ƻ.��tr�p� �6
����R�u҉�
C�ֶw���̔�b��9�2;��253G�ϒ��hR���3>��QQ����!�{G��k��X13D� �S���?����|�}������t@�
S�����q��u&BN�e��ޔ�6���u�v�E�BR0m
T�*�hTZ`��
EI��J�Fh�e�+���-�ƭd
����To:�.c}�P5
რ�(K%X�3���,���0��R����ӡ���{��k L!�@�)�i
$E@0&�[�s�<WT�*
C)�*E�'֍DM� E��y�뛿u���^�㝿���7s�q��ok@�6�U�4�;�U�U�
`�F�y�I$VFYFT�����"���5���:���f����}���_���ғ��o����x+�F�iP���D�`�s���Q�����x��S��uԌJǬ�1�\��3��L/��`y:�}n�>��Y(Wj
A���T��j֩�kA�E��8�?���Q�%U��b
����ò��m�-��O�y�����~}5��8�7Bk�B�
��B���44z��.��Ǚa���]6M���`4��DLj���2��c�B�j��?*.���S����+��nX@�Z6Ի�Śnhm�sb����,v��lPb�>3�Z�⩪1I�J�Y).�T�Ɉ)���3�u����s����ťef
m��!�
a.�bqT�ʒk����Tp�p�K�7�k�]�Z�CY.0�Ƙ��J��4?����}����a#�Ң��?m�Z=��G�RЊ�&L��V@�l�xde'�^��˳��`4CU�e�����2�r�vB���W.Tg_����|-
V�7 I%����|�pAc`�z��I!���T�4����EYi|�w��.�*beZڪ돯�
1%K�b��c?^��3?����%3���F��(<��t��ޤotk���W�t���q�,o�Ĕ���>����<��H��ׯ^��JH����ͣ��|�z���H�ڮ]w��j��#��*���v*�Dg��y��_�Wܨ,���;��^<���\8�S����H�+y%��.�_��������T8B�[Y��c�u����Z-v��M��R�t����[MN��=��S��Д�%����
Y9�ѹ⇯<S����֗�j�w?��?RE�O]�[�6��o�+�|�p�BF�ף�*���H)��ͬ�T���v9z�%YZᖝ�rˉU���U������¾Gá��qg�}�k�˫�(ոr�
!���8p���GUi�Z,//�{%�sT
��S��4
"NBY��_x��q�=[�q����D�����
�������g^�hp&���ԗIEND�B`�images/icon-32/index.html000064400000000032151161767170011167
0ustar00<html><body></body></html>images/icon-32/invoice.png000064400000003101151161767170011334
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<�IDATxڤWKoU>���cǏ8Ic�m�m��D[X��!E����/T��%�,(6HP*K��R�
R)P�("�JU5BmR��q��q���˗s���u�^�'��;�9�g�,.���s�U�+�\�!"
�L�$�"0`B}H�ޒ�r�|/��tʲ�+�RI�m�����pY|E����t d:lT��''� *�8 O0���p�3�+�w���3�@ ���"�����
fh:���\�Z���m��w&��ɾW��l
(_�Iox�n.�DM�{��i�
I"��G&v����B�K�T�e0�
�FlZ764n�[��kqr�|�@c�H?��{v�F(>��^y6��xB�9�4Mj��DC^e
E8��,7$��g�W�\�7&wC����"k5�@j�IK
R��b��sB!&L��^<TᵉT�4Â�GbyS����b�XR���ˋ�ޅR��GL����~�����s䎅!0-�ƶ9��h4)�җ�LF�T*�Q8\!��hrZ�-�s%.�ɭ0|ܸi�
c(�E�:k����^8�Mt�Y0��ܞ�܋fy�9%�I��W����iU|�v�x���n)×��D�Q��`�$����>ΨW븆�[��>@�ݞ��`
�"E���:�9�ٯ:����
Zv
ʕ
�ݳ�J��8,�B!H��m�/E�f��H$�TѸ�Mfeř��%ŝJ����(t�=Z�8�˿p���u�$�Y���U�(����{��p8�b�ޡ�ۗ��"��Ƶ.��t@6��M@
�A�'l�t�m2���bM�
��?r%4�Q�u�b��r����<?@FQ����v
�r��+����02( ��@e%���!��M�T��r����R�F�<ӝ`pυ"
�{?��H��e?���t�cZphh�E�1��??a�ȍ�l�;���1y�j��C7QrM�N4zZ<�`bF�"<���ԃnBR�VP��G���݊�J�z���&�LPw�P"6��|��8��Ѕ�����}��Z�[���|�|;���Þ�������+p(��!�#_D�{��χ�v������
[,C,���������Kp����V��/��l���_
�:/n�f�c��'��2\Cֱ�Vd�{���O>�L���Ư
cI�ٕ�$2Bm�w��7$Ԏ?;:福B�4�K�m�-��)���9�����]��\�
o�b�b�u��qO��w�0��{*�
�
�@��P�N����n�_�0݄�{wBs`v%��^eh�
��ʁ]���>�\����c/@
p�*'��R
������pt�(H(P:�6?�2xk��`$�ڮ�k%�R�6����f���ʼ�
�./���<�o �+���̇SSS��vi�ҵ8��|��;��w��D�ǂtv��"����r�M�?M̴�EIEND�B`�images/icon-32/new.png000064400000004464151161767170010506
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<�IDATxڔWk�]U��y���;/��IK;�(m�$RK���>b45�Dc|����G�1��
j�4j�c~��4c�B-�-�1�=�N;s�:Ͻ��>���҂uf��{�Y{�ok�o����C�G8.�R*l#���a߀��a��+7��ٻYYx/l{��U>n���>?۩M��ÿ'v���v\��sͧJB���~����\{���~o�@���ħ]k��_��;���}��� ��38ޡ�"��@"������w�֊U��
Wymr�4�\�.�2�k�-�^@��~u��/���5�/³V9+V�,l��gh�?Ő�'�:xÑ�Pjk2e@X9(��2���vИ��=�\�)=
��|]!Pq��_�����w
W
�M�E�÷���C�8�� ��uREs@n�ۿ�0x������}�V�k����6�A�;�G�X��m�A���Osq2��Թ����IG��vS��{K��J:pǷ�nͯjϜ����x[��T|����{-�ER���ܹ
��h�E"|����t��<�ܱ�I\(�)�
��t��m�,�N}in�$����
�ʸ�ߺ�g�&�
'ΐ�6��Ɖ��;��87~
�=��k���S��t�cɼ0#�jOC��PY� �m�
��WH$���s�>2*G�:�()��q��,�0$��9Fej$/B�3dqb@(�8�'[3LH�`�`�\���u�Yqx��
��1�损�<d�MR�l��(�4R3RFhD�$:���8˃��T�GbS��5ې��/�}�&�U�'Tp���;\'^rb��ū2Ϲ���U�YwAvr��ϛ*U�,�QF�n��&�HB�Un�kɸQ�h�%��,����n��$XtnF-�K��q�T�,"��MX�!ڄ�U��ʮP�w��x��u���v�Q�E�6d��l^�S} .��*� 6l�|��(��� DZ�R?g��s�kHV��x�֪+�����T�
�5��P�� IʂE"�G�
����l��
���|�3lQ�C������cDqS"
8��i���c/0�(��2\\���a��~�1�*��|��7K'sH�\�T8E>��@���"���s��,6D�X�j�gy)+������:x��Є��^H!S�������,�/`sa������$��/"��##&�V��po�pZ��C4g�r�k�a�m�,��*%;f��I���E/լ�&�d"W6�h!��H�a�F["�SRJh��@�W�w0[g�x4R!{���<����@�7�"�YW�eyK/P��Kg�;��S䣅T �#��E��Jۖ�LnMJ�'J9�bɆ�)�������穠a��,�%q��Λ��QKq�ПjI¬��Hc�Q(�
9�k:Iu
��[�6ڸ5����K�y%�M��B��r��~Z2��LR#:���G�bh��'��&!���Ff٫�L����NE��ZHg>�9�$�Dy9C��LE��=a��U����@�uC!$'�Y��� ʫ�VIZ��4����`�I˄C�H�<L{�dȔN��2�d5�:�f,_���;,����v����#��hL��rn�g��NC�N~�h��fZ����%WDp��F+�
�J�Ѵ�VPx�"D�r8c�a�A���a��pϞ#Ѿo��6O�{$��\P���'�?e���
::r�ݱCz��ځB�W�D�B�`k"�t\��K�����ID��|�=����}{ވ̼�=��E��+~c��M�䥓l4U�]�t8I��H7?��l<����Sf�XC,��0}���h�~|�.��Cg�n�g�t\
1*��O�������y��Hςz�*�zp�h�2����`�0��}��4��s~��������9
Y:�f�[��kZ��$ւ�ITFw`�Mm��6w�.t0��j`�C$�ϋ<M��a�O���%��'�Y���k�jw�]��ԣK
t��i��H�)���}�{�|nlt��\�ul�s$��a��z}!�������/�O<�H�b�J�9�6������x��Tv��8J�g�4�G��[G�b-Eo5YJ�Nk�g�k{=�b�����,2�]z�0E�N_����Z\,��4�ٵ۳U��~���G/���Y��2��ؗ��e^����|�v������)�����i�
0�����d��IEND�B`�images/icon-32/order-status.png000064400000003246151161767170012346
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<HIDATx��Wkl��汳���c/��&�!�LI��B^RD%�B��"��J$�QZ�����*RP�PUEM�$! ) J�@H$i�1�bc{Y�wY{�3;����+l(S��h��h��}��s�w�0���l,��>�
���M�aX]��]���_���ZTQQ!ܬj�V~��f��9�8l��Ҵ����w�~3ML
��R�b�%��W�0��%K��y�>%T�����R2�FR0m,�L��DT��ܚ6�L�� k?.ToO�~R=�˃�u�a0W|bGf#OR���r\
�uC`.��"oO'RH��˼��N�È�%L��|j�*�b���kjj�t p�?���C�pl���+'F��Xyk!�CΒ*�����Mƾ�-�B�X,/bYv����I��M��Y^_"���Y��I���%?��
��e,j5�Y�|���O�Qt!���>�h����@�p����
ւ��h28I�UF6���U�a����l]�.��@��F�l�$ȍ\�Q�y�AO҆_L��j
9�,���8lV�k�Iφ�)��o��^*�����
�^fS]���{P(�((i��2b�$f�W��QKӚ�v�
""���;��W�B�e��s�@\qx�'��A�g���1�L�aF��=?m]�T�ח0ᇋ�~�F#��
^p�O%4�EY�xo�fئY�ct,�h4��:����o�0��ÃWPq~��ի��o6<����
��`�,r��"�`hp���ų��t���B-G�I���w���J-^-�[MbK�֫|ĉT�Y��Dc�89o67��ߴѲ����!�t�9Ti�pz��j�fV=��%��s�/^���8w�s
*�Yk]2mn*��y�`Q�J�Hc�X����7m&�;��L�7r�W�������v�yI0��>��a!<$:o�>��c�o���8t\)m�O��Eaz��-��(j*�"Q�|[khG�ʻݶ�bl\��Y��(r��2�$�ŶM�?�s;L�
�(�.@$���-����m��3���;�l&�D<���g���ɶ����5[I>Q \+�P�PF2�q����$t��T�|���N�c5�?�^3�rq0�%�$���z�Xӈc[��)�:}�Q����?�����a]O�Ay��j���xۿ��GQ�;!�apj+���"��
�b�,��Vd��q<d�e5o#^HH�\���fm
��w.de���*"��W�
r7�D����C�"l��!�A46��'fR*Rc
DI��4��!�L���Y�7�]��=P���dq���0��'�T�ġ�nx�VT�� 3剝����R����}G
�xPd��j�~���)������z�O��(zQ\���I���Ձ�3�aM2���~�ku�k!�x�L��P�����!Ϥ�8N��������
��'��,{h*��N>ǵ-������v���sZ[TR;z�|�3|D\7XQSԤ���l�B�x��o��(WW/>�f��{��mϫ����%�'*M*��N}M��t�?���7���U�}{�|��KVS���k|cL.���]��m��?_�-�{��IEND�B`�images/icon-32/parent-category.png000064400000004626151161767170013021
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< 8IDATxڔWY�W=�tW����Y���x���`'R
$��E�@!�H��( �D�E�(������D�"����BH�����؞�=�V/��*Ϋ��i'1�zz]U��w�sϽ�L=�V/]בL&���Y��n߉�����t�t�[?���t���F�A���:fîV��啓�缧�ʛP��
n�ү�
�Q ��'����o�Vvd�(&bP5
1*+W�<�����J��.�����Z�ﺪ<�����6����U��X�lTm�ؒ��&7%�H�F}�.�̱`��>����1$0�evnߒ���J��U߱�T�M��ޠ
4UM's�g��mz"�!_X�5��>j"@�&�P�+��8A��GE�B���Hbzj�c��r������(�Ҹ�J?TEIn.�r���Z1�M+]����4�2�_��zAVzoӪ���9��������0��z?_�~$����ӷ���ùj�q
�2����nT
Cy�Rv��?�ÿ{�V����_�·��Sc���o��뎑�ņ
K���G�O@�Ǯ��_*L���\��wm��>�#/��x�w�^���������
�P��J�b���|ׅc��3�e�T��M۶b��)��
�|��z��[6o�}���J�tL,����D@�R�p b�}�텑/|�?@�Ý��Xyا믶�է�B�����!#'�a�'u̵mar�����ݴM߿qlhZ���t
�%���vp�2D#����g���0-5]�Cye�c3b��8e�_S
�����;�5ӧ�z���g1>[��z�ʅ�4u��4��I@�
�c��b�FJ7��
��ε,H(��X�a�M������R��p�|I���n��b�HY#���k�u^P�2t��_FL!ɖ.��9�D2�C�Gx�YS�3��v���z: -Ì��Gg/�k7�;]�P K1��b�x��+hU�kC��'��@�s0�6T��?C��ncJ/}�Xuy�U0�|W
pntڜ��j�.-�9��.�����AdQ�x�������O��z
DHcI�=��~ɒ�$�2^�>����C�Z����0w�ʔ&&184�D:2`y���`V�����,��H/L�+� q�Sw��#�����JDsA��{
w�
�0�r��|���s�S�J�*�̱�x�ߋȤR0�!ݎ��T|�De�s�![I:��O�3���14�9Se�yȱ&����Ss�0H
r�L;������G�Pɸċ�0�v��0�`
�� Y�F�]!��JnjL�VHe 4�Z/��.ڰ<̐�r�D�L
%e�1���v�uӷM�Qt$'�|BB�v�:��6PY\
�,YQ�\S��v�l�c�8z_�T`*�l-
b�� Sl����U��>(<���g��-a�0X�Fj�ajlme�w���-dƴ*piq�K�S�56��X��})��N�hܿg�����`G(�١=��'��Uc�%���^L�t�����w߸�&�X4��'�=F�ďYG�\�産:�:��2�/�k��F�q���(�$�[$#V1����{�b��fڼ79:�b�퓳`�ӊ�����3g�%�`*�T��n��j�~���5��'�f��R!�;��i#0��.��ny/�(�N� zؠj!/DDR�l\��X:���3���˵Gx�+����uM4/��k�¬�29:���.�Zؐ���ۈ'V�v���M��0J7�����U>�|�m1��Uh���h~pճ�{����r��u�r%��٫�l�8��W��N��6�F%��iU<�D�c�(l������/CtH@�T1C��B����
T_q���7^?�>=��\�]����ϝx�H{�/�bώ���A�Hvd�����R ȡ��$�d:$��X1�
(��\�����Ǘ�z����dd�����u���G^��2]*m�vqC���X����潴3�:帞@*^@!G�5�j51{�
��
T!�6.��^��k/�H^���5#�ޟ���[�[�իK�.{�f�c���]�ł��!]+�w`�ȃ�\��2�&�z�۪���oW�?����+3����V����2r�Q�����xV�=��67��2�#=��OLe6n��0��|�(UH�Sn�1�3V����������~4�z@v���!�}ڻ�'�o�G�aj<X
�x�֢ۮ��#�_��zh��s#
����O{�gUF�Ոމ�!�����|����WI<�F��~��@�o�ȯ��
0M��;{�IEND�B`�images/icon-32/pay.png000064400000004405151161767170010501
0ustar00�PNG
IHDR
szz�sRGB���bKGD������� pHYs��tIME�+(��I�IDATX�kpU����s��}$7�0�&L�*`��<�QТ���u��ʴl�NuhAZdDA�BQ��T��)6<�B���y�~H�$�S�̚sf���������Kߺ�)����[\y0�9�>���'n967V�z���ı�*4Ež�=��=���Ũ�]`�p����
��G�f��G�PS:,a$�Z�Z"a\6�Z$�J��R7ψ�q��%?�!��,����8+Z����my�}/��o�7
Y폷�Lw��%�"n4��!iɠ��D��6�.���hj2���ւ��6d�_�ټ�����
��j7>���G�H:�53R��dc�u���2F���r��>΅���6&�g�y�~�|����|P?��V�>�1�{GNK��V��˳)/:�.�.[�Ls�*tcG�ܑ
�k���Ň.
�7{aǜ��y��뜜�ܡ
�PP�*�f:BaN��L�Dz�i�)92�n�y��k&1�p��S��/��3\�f�7cɨD�9d� 5��ccj9����P��~�o���1Pxl#���q����w�)��ʎ�����eE��ܰ��$��v��܆ǖMQN�o܈O"�E7�����5e̊�l
<����Sn��)�G�>�5-(�1w_�ǖsQ#�6f����:T����������0oT���"�����)μk[�U²�4{��q���íe�vPռ���}V)%i��ߵ�V��O�0
R#8<5iw��4��I+�p<$- Ĵ�g`S\��_��&���Qރ!W��Q]S���ۆeA��tj�ɟ�/K�@�Dҏ:"G@
�>������k6L��:p;���E� ڃ��&���S"��l�-_��0��DB��848ٱ�k3g��}�|ݼ��UOsʬ�ժ۱�����_lD����ܽR6X�K��D����ĺ�ln�]9���͊�A�]��䡛`H��0���5R5����0���D7�=R�;���z�-�DJI��Ce�B�R���E"`��رI���O4KH&1����iC�t]����?�ĜM�<��*>mZCC�
���{$)N�e�9V��j躊i(l�{�US��LB���G���H�%hB!a�D�.��
������yz��\��C@s_�K8en;l<���S�`�UG(�iBjyk�z�煃�/F�4�A7�0�~I�ܚ?���O��ԣ$�n�2A7�X˾x���:��.\
B<���X!����U��ڟ�:���x�&_��)�M!��=����%ÞOvR!�fo�dm.mA�s�a�{�k���U����"��"�D!�hD&N4�=�.�xpˈ�PC�a�l��\p�l�Q����*�|�Mg�2:�)%BN��d���dfQd��$>�hwr�T�H��`^g!�D�鶕{�M��nۧ�j��H�aJ���<7q�%��w��ͫU��
�$���&�|f��;�S�̎��n��d����?�j���EH}"�1�������A;�"��j�b����:����i2(�C�/�M݆���[Ka�������R����y��L�]����%����E��R�*��c�@��bW�)�t��s�Ǝ6��Av�
P�Rb���c`�Q-A?���**�97��I�����)E�,,M�oU��]%�8Z�Qƺ�K>���J7�M'ҳU2�t6���5��ZϺ�⊌�+�c��"��x�C�2���m��J��E��=�p�[/WM�}�g��̽����g�k����% SG
����!������Ir]̉���%��<M�|^��_(��m��,��6ӡ��'1]ӑ1���t�,;�e���
�K��T�xRCgX��#�DQE�
��(�j\�eT���iu-���δ��T蓋^Q����ڄM�6�ܸ�b�_��VY�~x���F�VE
����~��f���}���旯�8�|��5�ܯ�0L�%�]���R�R�O�4�swV�p�֞��P�''�k4��䓹�G����'Kdz��<���ls�;ё)cft���
�:$uc��լ�\����g��;eIՓM�Ưp��2��_��_�e��e����~�%����IEND�B`�images/icon-32/report.png000064400000004534151161767170011226
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<�IDATxڜWk�U��3g^w��}���n�˖n����>��G
�AJ�A4j�~���CQ L4U���AD#�bPZ���T[��"��m�����{�ܙ93�9swK�Q'9w���9���ǰ�o�WrX�@�"��U��M�n��v,���:��^8�#�Q
�Z9��{q��8��P�sG7��<�z&�^*�a=Bm����)|��G���1. �W��P�
)]Ӈ��]PI�=`��^Xo����a_n���yh*M�7��l8{�����h���轘^�.��n��fA���s�T���7]�7�U*Uw2�|��,��Qz��9���r
�o��֕C�\'�����V�Dߪ��X�x6�:�"=g0v�$sR��9~��t�5%
�:d,>{sn����|$˒����,Z���.7��&t��v7�$θ#bc��Rx��E��/lZ��N��O
,|�aq�hH��X�&q�*I�Рp��@F�����<�첀�ߴ�.�����ȩ
�}��DBVYK��>m���A�W����aC��*���-_���Y�Č{��7,F���K����N�÷��K�L�F�m�@A���!��ѵ��DMu��#��������-����)r�ID!-����u�|��.��&�2�����}�f~RÂ>ڋ>��
(���3ᚸ�����ڋ�~dz�-�k�l�ř��Tp�����O��+H���44��X�G�H,�H�$��w�;�$�c��D2 ��Kf�j�DZ#�fB��%���M{�s��+�!&e{$NI�hw3��
nhF�
�Y�i�i�,��{ �U3�)�Ͼ3g"J�X�s͓88� �قs
�u�n3Y�ƹ�j3�$c#��h�e
�k6�V��!#�.FD���걅e�&~�~:y��U��E�&�dje5�֑�4�' ��M�p�,"�Sr�9kp���p&�g�y�P�>������d��x�D��ʴkOׄլף8�E�䇳e�JU��H���6��P�@�@;g\�I�6x��K����y���Q]ޞ�^7�Ҳd���Ƚ�*�ᦱH������M�7_t�~iݪ�ۓ�鱉����F�\]�z�G4���:f ��VpE���K�_9��'����F�;��Z���R+"�
�
�[mL+$9YȜX��z�R���(/����(n�L��J�F<QwD�%�$K����Fu�c�ڹgt�ze�p�v���c�ӎa�j74@oX'GVh_ļ�M�@���Q��͏X�&ĝn�W��䖏^/��������$1�T���l�-Vc���<�'�S�/\*L$4a�4�d��?�������It���M��k)^ee��M�'�y�Ç߉�·N0�:+�^T�~R@�i��%]y�v�S��_���߆�[����e8l��k���*���@y!g��T���֊
��%:ܔl��,v����W��0��Ch��v��R)�5�Q*���*0���ƣ~�x���"ӡ�8�v��r���ZF�23�hC���E"��x#�6���wy�vה���8'���^v���gǏ�R
'>���>��ȃ�:�|&h��:�(Ӣ��
��X+v`C���?�E�Ζz��']����C'?��W��?{���<W�t-�?F��Qp�c2X�w�V*��#���$Щ�di���pĺ���}X�<�f�9�i~�I���LI�������45c����ꐄ2�i�PB4�8���T�H��mc�%�l^�b�^�j|c���xww���h���
i��V�����!�,���l�3�����Ra�2]Nˡ���U���ё�<��qV�R��MD�
>rW%kA:ӑ\C�6����N�n�6�m<}V'%�zӠ�f��B�����.�8�p���mS�9���jKuO����t���U%���4âh�q�qk�-����R��f�إ�0j��U3R4�U?��yǼ�},�ڷV�'FX�X��vZ���Dj�OX��ukm
:��zE,zbK��ߗ����G�"�u)����BYZԢ��Ň�=J���<{��ю�`�`��K�e�f�8Q�5�?2-
%��a�b�w���v�=V��d9��{��)1
S�l�5ʤPf4���Vp��q�H���7�9�H�(
��s��R�S���_:<���
eV��jmv�ϭߵ���Nˏ�K�6���l�>�{H�9�b������T����S9���6�"g)#���_�F�W�
={����d�_e+Y@Z���IEND�B`�images/icon-32/save.png000064400000004375151161767170010654
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<�IDATxڤW[lW���v����I��M)qj.I[�!!��R���P�x
RyB<"�>
�"�RDA4*т�>$�Pr��I���/��뵽������3���C�:ҿ3;g�����^:=��CU4�\nagϗ��D,�'�������g�}T��q�~�q¹B�N����X�Z��s����,�{<���f���}��cP�#�ҥ^5�KИ@�1�w3��P�o
��#�x���8_2_gОWTd?��#�8��WB���͓*��t}
��P�]�"�w"���,�1uy
�^.���Op�
�4u�
�?V��(YWIq�@I���2T��c&\/ˉ���"�����ֻ����߰�5M�ɝ�����x���;mz`ΜEѾJ��`���"Ua�_�0E@Q+�P�ѺCC�J:?�Iz��Nߕ.ܖ��#��?�*^%�c(+X^P`
�j�J*�<,�C��
�6���>��^�?���?�+�Ĵ���o�T�s�}�;mM�����R�
f/
��C�㛟�5�\;��M�%#t#�"��h��p
�r=8z�E|��WP�Ƶ�5�itu��c�f����mH���}߳*&��`��1G>�}L~�1��C7(�u�̨��q�B���s�o�C~pv��ctd'����
�N���0��A
�<O�/�`���c�ߖ.\GŵP*�0X��voFGU��*e�%SV���[[�1Գ�u��YG0$��VUa�-��/�+iڄ�qhca���z��2\Dëb�\��
os��$�jG�\F��BQ��G��5��͗�\�Ћ����F�)L!+�o�/�x..����'S�
1I��v���02�K�'�_"�7��!S����e��:��e�"�ʃ��>
���8q�/`=]��b�җrT�5�XC
�C�0J���>�v/�e0_��m�Hc���N�T��#�_�EK��Q_��t�R�m����
M�[̓�I�v0
f��2�K� �V��-��X���
������>�Ǘ{=��Ryɼ�¡��<�PV�G7�%@#W�s��tW���T��rH
M�]�%c�m�o!Հ,��*�(�}
n-��@V8���iQ�(˔�~b۴oe�9�*7���u�L8U6�G#��2�Y��K�Wp(+�ȮL�R�
)�Y�����e��X�=$3KwUhZE�TOE�b��m�t�/K�-sv�Δg���2UCO!��*^�y���p��_�
`5�����p�J����M��CEᐊ�:�]��:B����S��&��N�L!�|!�?��'�ab����)����P����������K���N�+�t͛��+��T5��g��C}~0J��*�8�
�F>������1��Ip*�;��^<)��{+z��Hg���U��Jf�
E�4�,�Źp����������=�����O�=DU.��;����r���L������C�}�xo:]g?��$ϩԮ-Yx��D}&���׳[~����Gg�fi���T�W��!5���H?�B�9��D���c�^��ױ�����Sg���y��?��WW�@��؞� �}d>��K�"�]
,���
�b`
��V��(4�E#-�߁]���A"��2 ��s�D�|硔��]�����ȁ��0�%
X͖]���as(����W)��0<4���gp�Y\�7�]8�z�������l�7���m�
�2�������$J&��MRH�S��NR�?�kTdB�::�18�YC,�⼝�]+<{�l�
ʮ@M����ޙ�B��1A�����SN9�l*�X|�S�Y�Mç��=�Ҧ��������`��h���5;����L�ߴmhcN�5��aQU�~�MF@��T���V�z�P5]>�����'��`��OӍ/�&K�sX�i�����d�k��r^�5��5��F��X
�ԩ�Mmj�>H��
M]:I���h�}X��8m�)�'�I��L|�t)��$�n��l�1���ܮ�½[��k]$��E��i�s��լU���;R�US��C.�>h�eceK�O��a�
�n��o�h�Xy/_�z�,����
�50�ox��?��E�Q�IIEND�B`�images/icon-32/savenew.png000064400000004666151161767170011371
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< XIDATxڔWyl��}3{_��56�$�`piC��
�
M��J����R�J��J��!E=T����T�U)=B(�ڦ��ahC��
���.�z�Ϲ��ٵ�&@�H�fvg����{��˃X<D���ݔ�>�8B�fD�'�ww�IJ�y�sޫ�j��i�\������L|4�_)𞡳��"K���f0L��n���/
����u��e���zl�nnN��D����HlF:��8&��~v38xS��t�>��)xC���j& T&dzR��0&B`.8�
��fx�0�R×�qvp�r����x�b��ƚ:_�kA���e#��<J���r��)��
:L�n�
k1� x��ѿ���3�_���v9�on@��7:j��
�Uǃ��� �Qr�P$k����i1�Cb( ��7կǚ5�B:ۛIt�
ޖ��u!_�+�];S�Q�<�bQ�����-V"��҅H�Y-��������h�Ex��@`v�ߏD���B���v�FBŹI����/[�FY�
�T01ԅ=[��[��R�ل�d��~��d�i~Z�r.�'����>�ʑ}�2���:������:��e��9zn�ʫ�����=Y��-_��k�E����0p�n�
w��"];�2We�^�O=z�n����؈��x�����A6GY�`c��X���4~�cL��u�v���t�#(��RY����qݦ%uT��R�j�����Ģnh��ք�!�0(�������x��Ms%�(��:ϺC�rE%MF4�s�Y\V�hɅʗ
Y�*}�X�k���z���4���nttz��a>���!|��Zz��8d]%�a��kQt(JnGj/�:.��A*;g��`R��BLRoQ�$�g��j���C��wp�ٖ��)f��"�V��ˤ[/��(*NA�Y7
���Ǐ�
,ܲ��&A
&�|�F��F�p��p:�CfV�S6�po�]�`*�
q��Hi���\��r���GKL�.�l��r@������D��4�rd>SM�������,��^��5Մ*�$łA/+hq�Kuok;����C��Ć�~���E(
��I��.���fp�^J�J:�8U!���n6G��x�L�^�$+Uj��;��S~�_�Y��Zye�A9�DH=
�膩0H�6�*xv{��B��� Ƨ�Sn�8���_����7O�RA���/�P�("�����6�U�p�\����̈́Va���N"���;��J������9�%��T�ً'��
'A8H�U����+�\Bi��!�3$�@E
�]���#����й��H�-ȃ��.ښ�I�Mv)>�����\��n��K�l[5;�܊9��g���W������R�߿����^`R�����Ѕp�zjH����EkC/4���%Rz>���85:�]����.L:��Ӎ����k��F�B�B�~�KF��=+{8���5]�KyG�4��3v�ű��~��,顎�L�@��lm�_��)XP���ۖUR9�]e������S/�Pʡ��^�6u}L�?f+>guQ3��t��kH�g
�sض��4���@�X@>�'��?Z�R?@��@�im�.��5�-��q�"ᘺ>F,d�^�!�D��YZ3t}��r�����MF%|p�_x��I�6�B#ift�,|��.�S�؏���d�r~�o�噐��vC�����&&'h����LW9D�TŊ�����ā���sH��h.!D�2SL`<2��-FG�!:������$ӓ��Ӷ�b(e��Z-���1����H���iT�hU��*
TMAC]36oz:����#��h�o
��qL�)��hy��H�x�|��v
�>]�qr�i��D��}'�V��8���MJ�֩����6���}�2[�JŹ)���_���mmU.�u�**�l3u�K�h��13�Ij,D�)Q*�}��+��`���
�'���F���X@$CtJ�G����n�-�.wթ���gj�v>��2��>;���Ϧb��cӆ��(�T>i�������F]���f�G�y�
��q�F:�ù�c�Ȭwq����?,*.��ٿ��06\��7�S¸�p�}{[���E���9<V)�tc�}���9�]WK�E�Fl�x����5{�ѫ�'����`n��L=Ue�.��a!�R����
������V��6��fkz�T�Te��&JC��'���'O��׀����T���{ք�y�W��:�{G5Z�F���X���Z
���F�n0,�(��Iլ1�R���&�Q����z���70kf�0c���j�`
Ay�IEND�B`�images/icon-32/send-email.png000064400000003044151161767170011724
0ustar00�PNG
IHDR
szz� pHYs��~��IDATX��olg�?g��%w�}���t�VeqѺn*�K���"�u��-�Ә`� �+�U]� �&ޠ
��i �Hߠ�Md�4U��m�B����P�^Hm���w�����vRꦾ�'=�����}~�?B�N��V��Ok�L�b�-�x|/@�T�s6��M��p�I��fS��=��NM�FM�Y�vfff��ÇO��'9r�۪�n2�>�4LJ�������vEQEQ�$ Q�}�����7��N�СC_QU�����L2��jF<�H��ٳ'��eQ�e9�F�A��_ϳ�mtߑDb���n,�trr�d2i�۷�#���b��
t�ʓ��pG\��Q���B��$���֛����Y*�2UU
]��!�~oA:H���=�,A�h4�a�na*��#I}}}h���(k>n�a�);u^;�B��e�D"ѓ�fS�z�P(\��j#�f3�E���"������!M��r T��E�ŏr�?�CK���r7jl�H�A�.���l'������uwKw>�@$�#��Q�aC�I���h�x!�j���z��n��zyn���UA`�qY*Z���)��i��6�]�;_�Yu<�#\X*��
,-��Q�k<�}�ܿ� �]�A2�K��hP,)
ގ;B�tlF�r��~�,�-x�wǙ��yi�=M!=2��������l�B��.^�Z(�(����^ +a>��{�u��R\-5]�N5�s��ʛ�s���?x�|��]�P����e�9�J�
�8�%�u�u@We��<���2S�4�����{@zd��?��O]U�U�
�]�'�6���oI4m��V l�>�Rlu���Le&��t���g�ʤ)�5��/��BWev��Q�~�R��
u�xчѴdX k����0����g14����gr|8Lģo��Pe�2i�2�
e���^� �
x@��D��wVF��]�@�L����<o_�c�5@
=b2�бl�����@�
0N�&z�4�o@ن��C�����oz?\�������`O�n��ϰo�]�z�Bd�n�zʋ�'�r�J���Up�H�;b���l�-�聈���Z����mLv��7&�z�q�<�xnlX����
wj������r��(���ԭ!�^ ��i�u�}�u�<�u����Dqj`Y����z�����3_B�ބ�eYs��Z����j5|���p�hI�X����R>��q�K�e�T�}�R�Pg�:Wf�3���n�C�cǮ%�I��m۶����\(.V��E˲N�w��(��u��fn�C[�س�<��� "���[>����4�o4�1���n�٧��|.�"Oz�� <!�K��@���N#p?Oy�?���S�i|�x�:��s�z>��ɭ�m�~X�rq�wʙIEND�B`�images/icon-32/shipping-invoice.png000064400000004506151161767170013165
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<�IDATxڔW[l���wۻk;6,1���)hS%���rI�6 jU)U��m�V}H[�)�R���)IEi(�A ���
h����������wwvv.�gf�����Y�;�3���Qv~��66E���� ��X���a�t������J?���E�sE�5�1�����>�\��3���ڂz�$D*O�Q<�TPG�8�@���q���5�M�>��C�,��T,�9c��1趠��s�6Q!m�ڛ���S��B����������ѵ���g5Ms��j�ՙ�
��TVp�$��
�Aȫ��e�Ĺ_Lہ�z�<� Ccc���U]o�ҍ;�ј[խ�s�i'�u+#�d�@��uc¬
b�U�ӾD�bcc�b<�hԴJ�R�ή�7n�i��J%�>ҿ��"��R�*z?!�$��8����!&¡�rU �v]�b��+V�qk`@)��>}����9��A8��,>�m�
D?�\�����
�#2BF]�m��J�P|W�
��9N�W���+E��\��W9�>����J�M�+wK_!%����F�\�C�H��"�uk�g+VuHP|��}�͂[O��L�C��ETZ�M��to7����1��y��;�x%�P:���Q�*�TL����}�u��OO�@AU\�C�A�D��=c����+$/������H�-�'��C��9X�!��m�X�=��� ��e2k������5���QZ[6ˈF#Љ[d�ZV���i&�J�E��C��/Ivr([bN�ç'��J�&��A"�S7���ʝs`�w�&˂��+tC���o"���0>>�t:
���5䳹jN�D$�)�xU0�8�X�3�+�XauSo�"D"?ћ�����!ƋG�A�}�����DW����;g�8
�2�Ţ�t�А�\��d?���#ҦsH��0Y��zr��mf��8Z�1�8�Om�X�z���I��j��V_N���n��V��4t��92ޒ1cD/�M
�Y
��yɉ$���V�q�ߥy
��u�k�Jh��'|�B#.����V�Ppr�h�,ʃ�a%��5mJ%_Yg,�fȕ�H��dɒ��潮q������cŜ�U]�͡�fr�Rx�"#���-��2~��
)��l��i4�'(iJ>-^�n���Z��B�:'+��:wql�$\���;�ᡘ�uHn�}%�5Q�;~������¹s��$HF���]+ݮFW�BF^) d��k�=�ԝB�j�\&�U\�n�k�v7~Ic�Svp7�����N����Na
Ja�d�w�`P�?�5��h�y4����]�S�
d���.��[Z��kX�{��MM6f���`�d�Z���S.�@��w���~���dy�Ig�.'c��`�\�;Z��ZwzKӚʉOIlc!�ª����6QN� ��SH�"�YE�k�Zޥ��s@f���W��?�m�p�%�m�ӈ��"��.���#�!^PI�.#��,,���ض�SqM�>B��+z����a�ӟ��O�.e�=���C"�A�EM�#^��Ѽ���2�7H��]����_r�gMv�6�Gn)��qi9�j�~i ��a@�"��$K�e���
?ǗR*EjPbf��Iե�+N�̽3�n��/iU�=�)��T�"0"
mˈ�+s��S�۬3���z%��O9s�nK=Ѥ�Rz(�m�Jg�U�7t�.@��N�|}�}�'��{V��S���� �.B�O�]<`�TS
[oO��\'�t�]�~j��u���߷1�LH
��ܐ�&E�3o��5�k���N��mh~�y'םӶ��7����K�^�Z~DD�B-'B��U�^:���*9�G#��v�lXj$�,�`�Ԅ�:��_��_t�}�RR?+zZҰ�i��/p��+7o�L�d�ߴ��>$���K^x[���(G�J��֩�k�bq�ص�K�������d��'��z$������Y���?o��:�&ݹN������c��Ҏc\��eÊL�^�����f3?�79|-]�km�DU0_�U��I:�M��"�'�Drا^!�W\��k;��՟�!_F��\6��W.���,���h��?lfmɓ���y2��<W�X�O_����1��a�Fr���::ޡ�"��d�I�vq
����4U�B��#��C�s?0���sS��s��A��z�[���u")�Hꃞ>l^ӎx$<ݏ�/�L�0���IEND�B`�images/icon-32/up.png000064400000004763151161767170010343
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< �IDATxڌWI�]U����NOIw���i��CF�B�E$*�ҒR6�"�Bp�ƍ��\(�BW*RZ�b�qB
�3�C�Iw����9���w���KN�7�{����̣����4MXV�p��f|��sx�ŷ0��o^سs�+���b����İ���VéV��ԋ�
�=n��Qh�)
��e�1���$<_n�<��X��T���`$�n���ڭ��9�Z���.����3Vz��?L]{V�Wߍ�1|��c1��D���z�ɶɑO'�'�D�|�p�k�({U�w���!����m;����Tk_��3BGyt�=�`�z��e���5�t~C��*t,9�+��`4[h\zH�zWhyU�G��I�ن�Mc�k�;�v�C��#K�] ЧVnC�g���<�[�u|4
u�����W��՚
'Ē�0r*�4}���c�(�M��Je��j-�'ni�L@_�2O���3?���n�l�A�+`M�?�ߣ�b
�8���N���+�/�qh��6��>��X��=��#L�T��1��vO?�҅�
�'�
\��C. z��/Ύ����;��V�m�!�O�>á�aX&N�;�6�#�މ
a}���%!ea�։�s�p�n���[���am0���
FS��=�$� |�;P]*��uh��mOq�n�p���Ԯ��97O�'x�(�Y����>9��Ct�.߭��h�lO�=��p=��i<�w+j���$!��M�ʊ9pp/�BA
�$B�F4M�MnD�%&]�m�'��펃I�3��c4o�����>x�y,lE�$�I�P{z"��c�cc�rۮi&n�o���<8�it��<�"p��]V��g�����mgV�8|�2\E���q�<x�s)�K5Hߣ'$���u�<����ngդ&�+ו03xR3�]?,7��j�z_ew����
V#~��x��e��XD�
�K�ޘ�f�q��&<v��w�8*���§Q�������fF<��w�7!������� 7��6��f��^E*ƚ���e\y�<��
|��^Z�wjg�K8|�8^?/�`���@^�!\ǃ�мҀ���lC��
˘�yN���\f* 3k��(2�N�Hrx�}�}��$z$���/�i�8[^A���,z�6_�OpR�p�|IJzؤ�+P*3�k�.ֲp}��.z+
�\�ԁS��0�ؽ�9m&��*��)X�<|�����R�b^ׅ7����
�)e_� ���v�_Bpֺ������]�d�1X�
�c��2̰�5��J�^cB��I@g�=ZU3e<�wM^LO�+JJ�U��I��@��Umg��bJ
��2,3=lJk_����MA)�Y��4+��t$��s��8
����B�:�[*aL�X� H�捵��Z��ED}V$�?�_���ܘ��i���P�v��<e��u�%DŽ��1#�=E&W$��
�_`�0i�:�
��.����\�-ڮ���*�2���W�^t�j���l�È��P�#"���"$�-W�"��viy�[6㟢$�u��ʊ�.��A)v[]��p1�J��U�������/�I��U%���?/�����ˬ�T3�Y���l1�n;fs+t��b���x6�T��o&�2�K�T
�b��8c��khWx���k�u�<�d�v-�9�����Y%��H�m�C)��7:��[���r+�{�_o6aObS
�ۣ�a��l�c��ï��o��kd��z���҉���zy��WH�x����14-4/�
m},�_ضq�°���$�z�_��O�t<fr�`ڵ2�V�Tfa��0e
Ž&R,Ù���*N{��J�n/��N�(�}�3a_N���R>��P&�9�(ёAp�#����w)�i��K.K
H�DU�όf�%���ǡ{��TW�|�����|N�n��;���E���T�2��KO��Tפ���-&Zm&,dR�l�`s&���K8w�$��tW�s��=/=[̈́FD@٢�7?��*���˕Z��q�o�
�FƲ��$�G(!�hQ��Lg��L4z��8}��4�9[_|�;����#�ں������_�9���5�!G)�*2V����]���� %T*)C �Y�՛,�&Z�&;_��5J�*��o?.�x��\�����z��G�!t�[����#7��̎}���CF<9���m�On�-�+Mz�+��۪^���^�k�h-�:�;��c�"�nϐY�\�ދ�d"?6�L#�(����^�:�V4������E����{!�W�G�ŀU��fd5���R��5���(�f���}A[[r��/��
0U�G�2�IEND�B`�images/icon-32/update.png000064400000004625151161767170011176
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e< 7IDATx��Wk�UW��y�ss��f��1���*B�%�jTZkbkk��R4jc*6�4�Mc�
6�j�Z
M������g���@y�3�w��q�y�]��@�����;ٹ���[����aB|�/�K��dF��1@��i5�U���s�TfB��hf�ZKk���j�L7��'�n��"�0�|1��t`E�L��g[���fR�v#t�P)����;h��_�^#s�5�*A�tPB�a))�t�dL�m�|�
���
�;ŝv������"�D�GE�^����TW�fkS,ۜ��hk���*S�,zA
��G��#��8�����CQ�
E��Q:8���t�$�U(�̟�@p\
���l��D2�.`�7���cm+�l���e/X��M�H��Dh��b=�N�|�Q��g)��@@�Q�D�!\�B��#i���E�8�_5�ʥ�̙�`ν_�诼e���d>���.
��H�[�g��1�wS:L"A!6�X;������t%�_G��Yj����೮�l��g�.ny��7/�7��
�!8�W��V���[���A�b��MSa��I%0�p�x��tS��������i
�/�
3��}�7=�ښ�u2�_,���!c`I+��M+`y\*u�4�N`h�Z̊����b6�蔉���+���E�ˈNw�Y�����1�}T</�0���.y����m�}�R��GS ���-c��
|�f��-0�����=��mDa��Ӛ�춹�
T����3��1����05e���u���T+�N[���Bt�t��S#q:\�M��DuRU6�2�CR��;�����L2���o`;�"���ņ�
�^e}��T�/ད�H[u�����0B!g0��w�E�"�K��2�R&4�%�זI[7����/%-n�pf���;�a��&̨N�
����}��A�Nv�F��JѥT
Bq騀Ȫ��Ux�]�[)��D_�v J٪��덈��LP#�B�A��F*D�`?�e����R���TS�b���Rd&���"
T��eX�̋�`*���b{�$�6Rأ�C����[+�;���P���p?^
&��8�W��i9�$
�;��
��%��Kg�����d�r�<�p"T�9�N����oo��\��fT3��>a=M9�+W`�T���h�^F��w`'/0oju�!�p E��R���Q��X|���(��T�JS1CY�Z&�}�y�|D�P\ WW;�?Z�S?Dp����~@�G�MFJ�&�������/����I�Ѹ0��#љX9��>塤wB%��άP�E�M[�6u�����:�h���{ϟ��Ǵ��tv9Z�ِ�BQ��
Z�c^B����h���EE'���x䢪*�Um�n���(z�PM�?��m�0<:|jB¨�Q�.��J"��i/q�iإ
�G��� �A�|�SK��y2J/^�=�b6[����"��X9}3�-\��[
� {��rl}��� F �ҹ������߅P^FJ&&]@�'>��*:O`ncm\�%��3�绨��bU�w0R���o#�9v��N���XVb���Cj29L#���d:ar�P��B�X��d$������y��a��
��>�����'ڛپ��8
�&��R)0�N�^ȏ�O�>'�r�?"�~� '
��
<��C��,T�Ld����H�����'~a�A�ZS�P6�xݾ���4)��� ,� 疺d������;9�˱�8 �(�c����K��F0�:�t2�_Y�e����+a
A�b�;��-[����V{��9�o�ƶz�HLT7J}�e��v��o�gt��'LJ5�8�5!Q)�ӳ*ڛ'aA�TL����%+~�c`hG�uc��C�س�T���QH�^�}�֙(N�?KaQjn}�����}�C�!��E���Բ
RDŽ\T��g�����1IK�]�b�@h4D�lSD�8QE��zb�{��u8�}�����O������}GOQT"�Xv5)iy9��BJ�z��tsz�)I8c�S���U6n�x��Oclr6�
��>0�W@�9�1y��/
��Cg�>�_�ǓӐt�H�N�c(!��+���C/������2\s�`����}4����0C�^"��r�g4�O�L�L%d��Hi��(�8�h�3�r�]���(�B���x����Gp�1�l�h�����JV�Z
�}�dEbW�GFG�7�
�K�#�Q.|'�{2p�q���?�[��
;jЕIEND�B`�images/icon-32/vendor.png000064400000007024151161767170011205
0ustar00�PNG
IHDR szz�tEXtSoftwareAdobe
ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"
xmpMM:InstanceID="xmp.iid:03F8DD170DC311E4B81781F1E0B3F6B5"
xmpMM:DocumentID="xmp.did:03F8DD180DC311E4B81781F1E0B3F6B5">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:03F8DD150DC311E4B81781F1E0B3F6B5"
stRef:documentID="xmp.did:03F8DD160DC311E4B81781F1E0B3F6B5"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?> W)�
�IDATx��Wil\����߬ό�qlg��;�qBҲ7��B�)���
�H]�T�ЂZ��@�D�
� U��t����
�PZ���b�i�8���dz/o�v{�@pZ!�?}ҳߛy��s��}�9î['��!
�}�q�}���Ʃ=�l�cяI���e�r���ؖ�����6\q�o�:f���x�������V\�~��:.<�?`t:}��ɽFݖ�Ӓ�w�龏�f���ddǽj��>����
��>~�j�U���2��e�ݐ�Q�=)(�&��gZ3�2��/�?�Q�C,�n�؇�Dq���Z[�9�%�
-�AY������
@���_�d��0����'g��6m�ݢH�~��f�G-�W�P��S���x�T�7��q��Hq���ŃH�Oܻsc���kJce!UA*B���4��`�t��R�c��d�yk]���h�WJ�>��(:��h�
�U�%�c=}�T}�So����c�����U|P�[���,M��`QR�<�6wۛ��V��8&��l@���U�x����ұ�rߵ�'O���wb�����t�p:�A�(������{g�2ң�%�B����i3�`r��_;~u�۸���7�+��8�c���_Y���6y���c�&x���QT�Uѿ�=�{7�)���c�dŭ�rn�@���v�a��P(K�ҫ��l��5��`ޢJ>�B��u
��Z,��g�c�x�`meO�顾n4Z��'��Q��d�Gθ���2g;��$��-�K
�*���o�Ƙ�U�2ԇ<e��?��|2�4�� �:�p�
O��}������\��0��y��c��B!��j>6���.��^�C]7r�l�o��h��9ʭ�ʡ
5�l��ˇ,繨Δ� *�GCQ��H��
�7��K["��OGX�5�%I�=��'&�?��*����Q?"�\CE�uB�Mje�W�%��`s�$s�x�x8U:c��q�4�R�"uv��
?��c߸�o>m=v�̣�K��̶xm/P$-и�P=]������}������D"]"�0��3���Ŧ�=LMd�e0�cY>W<M�ꡄ�^��𑤲^
�Zj8����Im�k��
�����"�,YF:D����4w<pk�3�dj��S�Bdhʹ�"R��1J�xj
��_��xE
azF�"�ޡP�hbnf��Ȩ/��V�� �;�;�-�yh���pw\����VA.h�]�q�5(�<��8����n:��K2���A(�
�wP��F�i|wq�|}߱��W�8S"���5�������Ꝯ�^9^(BV���b�\�$(
�6e\�9��1<_�E�3[���嚌6(�1�Ρ�7�����Ux��q4G�s�z`��_��i��|C&yէN�1_��C�Ӧ����*�r@(Y0����2�P�D'���"��^���'HJ��Ӯ���4��������l��3��M�d�*L�Hh)��ɰ��ěp�K���$��11�����
�4�#�BS�l'��K���LsT��H� J��Vi���#X�S/����3~62yY��(p�V�L��v[u85�lT!3��[皂�_�e�ThX�j=x��{�Ø����
̩J͉�>A�[4�hF�X6��F�|{�\�8���sY>����jR/_<Џ9rE6��ƣ4���jrCB��۲�>���j
��n;�ӡaH�.��l���N�
�3"��E:�V%�0*�O3�T6�����e��/Ϥ|�
M(1��Yb<��x�+�B!�ʼnz;�wb.� 1�Q-M�I��d-кLג��I�.���D��d"�,)T�(���JtL?������GV~K�k�\�Yl X�?�^��y��ӈvO�s���BoLar�$�$1)���5a>,@N�4D��F���%.�[�����7Ӌe��������/Ǿ2��?�E֚�P��k���nMUéH\z��6��3��4&OG"�Q1v[�3�pG��tL�8�+����y��Fڔ(
��Z�b&��R���� +o,��U@D+P�H��02�m����e�s�b8;�h�тC���˱eE*u1�I�gy��
C>�>�C(nӘ��)���,ڔm�:�=�����A'�k�b�٣X۾G0g
'WdK�}Hi̓���zlf��:͆��g�j��b��(�`L3��\%4H؞$(�i���0;кe7NumG���]��M���4;[k◯�)�x*�o/�+�MĢ���q��K_&�ӥ+�d�ElO�`Mza�����;�:�;Wix�p�.�]����=<(~/�Z�@�;d.��v�"{�&
%&[�5��#
��w���e ͂q2)#C�S'�"��S�[V�7�����s�]M��v��>M�B$�ɘ"��I���`n�[v����-
N��Ξ=S����,�"^.P��UuV�ك�J�A�
#]l5]�%����8�A�D3�Ѭ%��Km7"���
~.�q�7�$���P>WkMmZ;~��CՅ���m�����E-�9n���">1<��n��8�+TuI����{���x���T��z�q���`�ܹip�z��+8��ǿ؊�x��e�IEND�B`�images/icon-32/view.png000064400000002651151161767170010663
0ustar00�PNG
IHDR
szz�sRGB���bKGD������� pHYs��tIME�3�
��)IDATX��K�\G��SU����3n�cw�1�l,$�B(^�)BB�쒀X!���H
�P�%�����Q6(^$D
�؉Lę`ylz���L���9,nwO�=��ł�JW}o=�����9
��&f�����^��W��{�#Ar�C�PI�\��߾��^\�������o���r=���$W��>z��B��hv����K�����f�p�h��<�d������N�C`f�X�֮?������^�mm;�z�K.u2�������`�!vs�W.\45�'�d
�A��ă8dQ�����˸|�%��Ǐ}�_^�p;&��h�����{��H4�G�{��*���kÈ�R�^e{��X��C��C������,���c"!��Y�
��*b;��ٮ��J�ʣ'�O�p"��P�c�6s���o���{�i/|���'�47?����R��ʏ�d.b)��U+Ŀ��D���q��
�q
�L���I@�Z�c����0,�M�k�ȷo�-/�G�U�@�ٱvP��_�͍
�s�Rc�=mV�^%?~|o�b���?))fF���p�sn�e|YC�mԛ��~߃�5�1���E�ex� !LA�x�j��Ν�R���
>� Y��*��!!���?��Q�n���"Y��5���_SԌ01�����Tt��='���X�t��j�J��W��Y��8X ��ДU�(�)e��E�����q�NpR^s'"�x��ĭ� ~���wm>��yfFJiדϡV%�F$�1A"&�4���{��R�0a`�<�`�#�� i:Nʀ'B�"�y��Y��Wu�ڕ�a�Ȝ�}7�4F����M
��%'�8\%������x�Dv5�2�1A������eI ���h'i1e@42 �j��Y fM8�V>u�(�>����l9p�SDؗgeY�0�_����<�~��U%ظ:P�i�ӄ��2�G603̌Z���113�<'�2��>�n�"�@������7�Rz@m��0��L�6LPY��Ŏ!���"B�e�����U3B`x�ɲ�P|���.]BD�F�C8��S��t:\�|Ue0������
kkk���r��i��f�[��H��
T�Fc��'�N��1%B�F�^�̙3���v�M�ݾ�}�բ�j�ǁ<������se���{����A��7�pa�ޱ�Ϳ^��K��v�����ds��]�i!��~��?���"��9g�]o=@�����g?���p��z�����X���Y��{�Od�y�e��"��?:vd���߷*��"�aIEND�B`�images/icon-48/account.png000064400000004053151161767170011352
0ustar00�PNG
IHDR00W��sBIT|d�bzTXtRaw profile type
APP1x�Uȱ
�0��Sx�w2BEB��A
W���l��z�k�GUUUϒk�if^n (_-�LD
+
H��zP�stIDATh��k��G����a�{�֥@B�咦5h�~0�%mTR�j�Aib��DKC4i�%m5�ne�BS
)BE���uw�]�^����gw�e��}���d>��gf��y�w�90�ILb�����ij���s)%W}#�Z���v��ܱ���>)��k����⭖[�l���+�]ki�/�P�H�r�hoeἹ�fWM���|���RJ�s��K4J��-��؇O?3�f�^�B6�|)V=�YKV�E��)�p��z.�m���<���
�+)��SVgK��ll��?��~~W����[��Y1��EHD�t����v?W�����ه���||�c�*�l�yF 8t�Ѓ"R�ذ��%۳NM���cZ��q��N,^3k+��n�C�Ҥ��ʄǂ�Q�դ�%�|j0@DTaQ�zbX����RVV��<��M�lt}"�X���*�p�?�Y|��*�7��ʎ^��>��sj#L�w6�O�_��WV��Ci�y<����
���,S�}������:�7�L�J{_
i�ٞ�s!RYKE�p��<C�Y)R|�!�f���_*��֬gWE��˽�M�L84y-8�8q/�t"�1q��/�+�)�E�F�!D�+��r�c��F "/"���3y3Lj1�W[��H�\�t&ID��~�'�=��ڛ���6�ʲ��"0�[�f�lN
B6�ςٕ���B!�zM��x�O�e~0cT.e����RJ������w��X�7��X�'�}����h�I]n�Њ�iW��n]�;-]v?}-�ڟ�d��P^�G��!T�G�E�g��X�r%kXDj����_����W��/�����c��G�c�N�X�v��o��DH�/�ݶw���Y��5t��Z۶�O�M��+`���d�h�Rm�p�OQ�����+�B�1킘���
��o���?�~r��^��z|
�m-X�[�Zu^��Ψ���܊���9rW��V�Z@.��b{;/�v��i���!��,�O_?����� (u��MSSӖ���m�L�5�**������ZWN��Xs+Y#����T���_CD���6r�>����aO5�n��Ҏ�7Ƴ5�HWwww�acnfi��*'�u�5��Ʀ����¸U�X�.}�UVWa�U�l&W֓N�bSI���oN//�����çyd8��d2��c���v�����.Ѣc�S�\p0��b�H x�����,V"�*��$�O�!���<��N��F�;v[:R�>~�|�}�C>ʤ0F����QX���
pQ�dQX�Q��UƓ��EO����(z��[�.�do�;��v�=e�Oa�`�����F�x�D)�B�>bS��]Ɂ�'���m�����8�=��7ϒ!�'?�����lhX���^ÉDX*�t�\zә�Q<�&�8N
�L�!����-��El��X�
�j����*OY�PJ���ɓ,^��P(��8��.����9
mZk<O#�C� |[3F��F��h(r3�njj� 4c�"G"$ ����t���AkM8��X?�7��C����a/Č)����0x�p5u÷�ma��8��`I�]@b5e�(�w��o�R~"��B,�`|��Fރ��`5�jD���A�9UG��uZD�`�����k�PAX+�
�
���9�HFr�;��(�({�9U囎>�w+`L���ߙ�6����6�rDe�<�a�SJ��9;J
��*�"�(5�&'Ѱ�vՉ����ǿ�����ؖJb�"v��E
�L�a
D�CIQ9��:��9q��d�m���w���$&��c�#�IEND�B`�images/icon-48/acl.png000064400000006517151161767170010464
0ustar00�PNG
IHDR00W��sRGB���
IDATh�՚{�\�y��3�]�wm�z}���
0�E4 ����)i��D��"E�*%j�F*MKDZ�(�Fj�FJ�J�����j��
A��R�!����؋/��:;3�|�����;k���H��Μ���=���Y�-��,����T{aa�n�K��dݺuLLL8k�_�y�V�����ȑ#��v?��c���Z@��G���P�W^��+�'h�Z�<��N����f�Z�F�$XkT�"B�v����<1-[g۶m���9p�رϜ8q�O+�
�f�j���cLyO��#!�����277���nڴEv��!o�SSS��=���ׯ7�f�J�:u�H�Z:c,���9ǫ�g��u\qŮ��i�h�ggg�35u��fdd
�z�4Mb�x����}��9!xT�tB�BDDشi+��x���UU�g�{�i���}晧oްa���!��j�s�r��.Y���o��RI������K�M9r�J��k�7��ڿ���j����Q��Z�<�YZZ`vv��s�
5?��V�{�핊�^8lzeV0T�&,.��}�ꫯ�"�T�>��S~||���!����FFF_�3��{B��j��/��4�
�y�͛�߶s�o�)ؿ�c����j�^��=�n[CP�e<�5�\+��-��i��
x���x��{fff�Bz�c����HGU����c{����133#{�\%����B V����luI��s�#�>��J
բ@:�6�J���S����j9���~CJ����iN�8F�&cz���.�JU[���֗��:t(�&�j���{Sk"iI��j�v�s&;&&&^��Y��h4V�=�>L�������n3:�N�ߋ���>�N�8a���f۹N�Z�j�H�<�z��<R:Џؙ�$!W~���en�$IH��v��֭����/�gv�N����L�qPU�ޏ
d�����v˺.�9�W����-���:�]�|��~�j�J�V��l�gdd�^S*B������399����y��Y�B����
��,�1�c/|�.��n7���g�����>ss�D�cJG���R�cx���&�Rۀ�y�f6l�P������j�-;�j�k��1�t���?�������N����\�����U%I�2}Qf��Z[v�~�Ǩ����K�>cI�/kmO�Q��;Z�0�s�
������{/�����ty�
��_�}�����q.'FKqf��˴�'�p^(𤽳�w���P߰��b>����0�n{�m�4-���~_˜<9C��Ƙ�~C(�����j�<��Z�T��X�e���\�@?:+H���F���Vֻ��-[����y��e�W6��*�Z�ֈ1�1*"��M�����aZ��9W�3�D��n�)A+"%�
^�����fga��C��:@�}"y����w�MtKQL%6��*�:��������c
*È���0n���=f?YI��x�>'�s.���N�<��O���O����ι�\��������O*��
l��h���c
=vZ7I�����d�m]�Q�mՈjDBƦ��`�gqa#k��ȍr��Q�7������W��6��<ڛ�4��zQ�л���$F�!�qlRA*c��I�U�O�b���::~Gb���l^�Zj?�[l���5�~d�l�)g�{��y�y�PC�a0�Q;�$L��
Y���?+X�?�
)�����5�i!k-��H���~�z��э��"�
,!��rI��� �$y^̩iR%D�k$)=�i�N��c7=�sy)k{��S4p姀1КW�SjM�V+�B)�J�r�.= C�����¿=�{\}���]���1/��!�����̾J�����۷_X_�<���
�u�~`2Ac�$�y��O�X@���%P��j/r����}��ع�F~|�|��M��8�K�w�!"��ͱ��C=f9KCZ���>����l��T�k�h�<��:��|�Lu�3�Ӵ���{�S~�o�������Iw�tG(�\?۶m#_��
z���1��:��t��u+bl��趷�\�Yn%M����C�,�� t�^Z�aCU�T*�{ǎ��-2\h<?J��ⲫncxIU�4��~i��g7^�S�Hm��Zh~q���Ջ��(D1@<D�6l#m��V"}�4F���~Dۡ3]H�Y@H���^����\��j���md(���{#�־��:��z���{���n��-�OG�s�����柄�O�ۧ8>;F�
Ci�k���d��CkN3^�G0����Mgh��Y�����b�w^��G?I@��E]6d�Rz��MHXB�����bL�0`n�G�#�=[P��.�"�%[���I�ewNNN^pN�kE�Ğ�lherj3��UH�an��\�lZ��&>�ahqށ��Yg5f�@,NM�����m��I����eH� �a�d����Wt)�KyO�.�ȡ� v�^*05��<jk˷��ZIRV
��X�=���C$�>Gh�BcbH_��G�� ���-f�O��c�+����<�J�7/&�
����w�v�ku�!*>D��)Y#%fҺe�Q/X�{O�ʾ_���I�r��[o'�l� J��R%mF/�#E�},:|�QEC(�����zLZ)��_�)��D������,�
�H����������.��#��r�$��.�(;��Z$ƈ��,[��s�vF{�A�V4FH��
T��)�"
F6n�.����J"��B�����0�L
-ԯo�Ԉ݀��I�v���z˨�*��ɓl��M5�"x�����̀�p����K�t}�CM�j}v�@b�ԠI�+�Xd�s>*�/~��q{>����>Ⱥ�S�{B(v�}v�ލ�'k�����~X���L�b��8�mt�����˩D Q1�EE��H���P�b���t'n�����o�-�Yz�T�"yo3�Rrx�1�S�+���}P�z��B��`��19O}i�jP�c�(�
`
R�ȀH
$�"��3�Faq��/!@�v�=
��dK��t���B#��U!�`dz��RcI���=�ey�TadؔZ�WfffΩ��<��QK��.:Tk=l9]�v��o�p�t���@L�
��O��<�U�=��f�]��=_�?G�`ɹ�w}���:���T}
�ހ�����d�����/������/��DIEND�B`�images/icon-48/block.png000064400000004527151161767170011016
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<�IDATx��YylT����{{ػ����}\RScU
�0��M
!l�RQZ�R�
��UEՖP��*�R��ڒ����J =����wl����{��{�v��{��]��ԑ��7y��;~��{���)�^��F���i��r�D�U������C����ߴiӆ��h�������U����O���rm��n���������tb��<]��� ---��l���8{�,�Ba��q8��������fee!777h��>�<]oǎ����V�EUUx<^�>֬���T��G[�Yjt�v>����Jܹs[�lY�l� Q�&D[ff&RRRV4dh�R��"5������hXs���)n|<� ����Hh`bb�s���Y,.�1H(�D
uu:�}P��@$�`pp�P(���E~A�#I\ؘ���L��j��P^^��uJMP�{����,���BԦX"�ks�r�#
�5�M�@'�@�:�}�Pz/T�Z<���i�h4>rr:�J虗��[�nA�Tbrr�����K�����xi�>�wo��!�f�a��}��!3;��ٞٵ���zj�+�=��ZIi�c'[�}�e����ǭ�V'�gdBc�F��q�I^
��֝�5zzps�hNlG��P�瑐���
]�����!\�����'�_a�^����@�$9�
�����#����_�Ę���V�%$��k5j.R���姈J�#&5l��|/��dnZ=�3����/a�<
f�����gBN�^wbbb�iN�}y/�9�%��ο��6~�%݈+�aV�rbf$S#A<��X)Ĺ��6������ᶓ�7�t�δ}S��&�"=+;h�2y���,��Bv"�[o��h��lY6�D*C�\�o�\�ã(^���Լ�H�pX�` ��\��������
9m�j��z��u�x���M����zw�-E[��q�ֺs��*�d(���ٯ�{�
��E�hć�
z�w���dD���՟P�F�3際��"�:@���D!�P)��`�kRC6F�z�B��˹b�%+��w|�2�i�@$��s���������꺎� x�cڕX��良��c�8�U(ͥ2��1i�M,�`0���pEI
0p�t+�x�\�gչY1K���j��1BZ1�|e=��w>�i�D+q�Հ?Jvn�\t���<K����k�'��y˟�,Ҿ���*�W���,���0}�[Хmtt
z�-��pd}2�p�5B���!�.��=W<}�8=A�k��^�H�®�T��w�
y4J3+ �xg�t[�_W�v��$���~�oY��g�^�ID���5�[�Wc��C�j=q>%rs��9}��&<_pV�cMf䭅�f����G�W��-YG���w��w�����/e�v��/������ԯPs����W�)���}�1�T㕢�$�[�c{�Ѿ�� ���[A��1d�������O[�G!�� ���K����A
�]S.��:˛x}���a|9��x >�
�
�� N�N�Ǎo`F�% i7ٸ��Q�;��<f��ϜZ
sN���_�o��c�1�~�u.�:��
(�`�����p�Cwf�H̅g+��10.��������^A�E��S�u`k����e�sC\�M����z��[`��u���������6�>邬����$'fs�#�8�S��W�)p�����ɪs�5~n��4?_D#Fr��N!f�y��D�:��s�^̹�x-�"h�ci�,*,
�$��Q0�<
���p�"��Shnm�"ޱc��I�}wp��:y0�y���%� ��6�vX�V�8�u̻�Z�0{�Zi9/<�_jB4<SЬ��ᄣ�5����>LM�˦J�ZLXH�q�
�y
��晄�ˀ������zv��T(��ڸSr���JELh.<2�����VU�\��F�q~~>���T�Szr�1e�vX�
�~<6zu��]R�
�!T$fY!w0Ǐ����ى��v������l9��k£+�/_�Xi�̙3�ݽ{7����n��d��Pߣ����B)����{�.]�zR���O��B��lt699������Nv��5�L����l���Ç��_ҽ��HM�:cI�GFFM�=�_h��?^Z�$f�9�C
d��tl�S�d#�w�����tww7
�_'Z`הs���5��e*��#G�T���L��A��P�IEND�B`�images/icon-48/category.png000064400000001335151161767170011533
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<IDATx��_kA�g/yh�"��IB�P)KE��/}
�b5BĖ�)�|�-�4H�Z1>iD8�5�/��-W��˃w��]���^Nif�fna�e~�3;��\���E@p����h%�6j�
�6h,^N�-�^�����?&�&�r�Q�yj��
+�(ڭPo��Ap�Ϳ�,���p���p��@�����`��jk��3��D6���W��{��ſA(צ�S�p�@��
@��Nل�upPA�j��
s��&��S���
�?y�C�o�nmr`��-?��1��i�?*ش<�Q�5�!��{|�+y�
��L+{�ڪ"=�`�$1Ӟ�����؛�3�xgq���atÌ�Z]!�pg��[XLW(|tq7:w��%������@��o�����`B��ċ����*�Od��9�9��W![I5�F��'��N��᪬���X��G= #%+��,F�*/�u�
x��t�GB\/Q��)~S
x&�^*eZ�J�6R~p��z�����I�����+�_��G��/}��#y�����Z�|�m�y��D��#��[2?��|�M�ʮ�"_��|�N}����WD@��`q�R�x[KIEND�B`�images/icon-48/characteristic.png000064400000003703151161767170012707
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<eIDATx��YYl��f��������0%����&�RD���DQ�4Q^�>U�T�*"��}hR��>���CR�<��@@a��Cba
�s��2sg��]f�j�:H�|��;g�����_�)˲�}n��,�ݻ{�����;;p���Xp��wL�;�u<G���y��F�u~Y�;���l��#?ᐽK�t��A� #}�y�ɟ�2�0�'#�X̷��H]�3e���� j��1�61�U�{W�#H������0Ӕx8�2w�@�������rm�xj�їg��P���B�dY�q�Ō�%2���nX��2�[�4�|jz��h���hd,�B���g��=�k� .,wN
���M��s`��ٖu�@S���Ψ�(��믢�9���Vt�xڤ�!u�1D�<Gƺt`�3DJ�%��6�a��m��Ҕ�@���k
@��Z�
bܵ S|���&�x���ŵ��@��9(��D7z<S7%L��0�ύ*��p�?�������C��[��4'ZϾ��Pw9�}��co/'�IC�}��"��b�9�>��d�>4��j�Q�`"��M�иr`1����?z��6��H�˒�
���R�R1���:��d�&ڽ�Mo<Қ8�x�D�`�k)���|�1%�Ym���
!4���$
�2�"�֒9�D^�S�L/k��t�����j�n�5�h�!���'�V$[��]���F%�U��8]dʀ��n:��*G�\��K1�@����ڱ�pH��?�4xݜ
��Ka��l��t���r��0�O�&h��Ǖ��895��[����>��j��d|;���B�͉����ᥘK6�)�I�g� U��8I?��o�B��I�}�ll��;cU&W�[�,��K��|�l6�qbb�����څ��W���FƮbæ߀��OJ�K0
�T��hR�S+�^�Z����4Q�|�(�ڒj�D���>�i,
ys�e�g3z�N��VS� ]�ݣ�0�ȑ��_��x�-��^�]U���^��˸���3��v��q��;p;�DF���E6�;j�Sj�j��(�������d�H���/�Gv@��� ��o�fsh��-'�Y���&�
�h>�wz��|5[�.Wj��B��৾
�]^�3y;w$�����9s �����k+����s|}�����.ԅ�J@٦VY�w%�aQ�LJ�R���NW?ڍ���Cftttbpp��F�����`*��vls�FP���r1�i�ɾ[
�w1:2z��T©�����6(S��Ԏ
�
��vj5���r��HfÅ���?j�Z����n��#���3#�R$���H��湑H�mǷ�&|�8�W����A�n�˫!'[�Uz�<�����H��B����&��Ճ?~
��G���כ��C}�(�,iFfW8�bGP���^���z{l���زR$�
�Sf}�y}�a�A������z�K�����o��M��-
���&''1>>�@__@<Ni����D�����{.�hKFTh�Li���s@��F"����cʏ�2��4����~�����K�L&����.��s��
�k�H���Οbs�npS�����9��*ߎ����C�����Fb��O�ܮ�P���j�N��o!�'!M����H4
QH��K�"�R�>L����7۪+o�L�q���dž!�H�+7��J�
B��;�pU�Fʥ�(��N!��.\��?"��Ħy��V#��0=U��
ՙ<x�p�#@�H�Mg��rL�lo����e~�+�(7Oz�n��M�Pɾ���,��x���;��0L���]�նIEND�B`�images/icon-48/discount.png000064400000011740151161767170011547
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<�IDATx��Z �Tՙ��۫���z�6i�� 6ň�@����I�3��- �40���N�!AMb2���&*�PA�i�fiz_�k���;�}U�vB������}������ !�_���y���-�Q=u��έgj�e˖���.r�¹�����F�o���G^rv���o��o�4|�W~�3��5��!#�6����צ.ߖ:cN��������/q{�Vv�忠�=e��u����<�6@��R�1�q;�
�Ƴ�>�ŕ�/|�;O����R6�9�漾�-������Z�af�9$��g�{G5Pl�iE��I|��Z�M �
M�DKM����_6CZη�o_z݂L��v���U�;�~,[0e!��"�{oC��f��-)�?���rT��3�uOķq��H�<b�gB�9�q�1���Ŕm$�l��t�����ƅ�h���߾��OM���~�z�:p�ų�,�oK���Y�Ӭ�E�N^8V�~�\T�V�a�8F~���4R}A��I���#�㤤~G�%ȃÚ�l��DfYѐ�׳D�\-^Ի���_8���9P��=/ݻ��E皡��7*����U��t�a���q�4N��m��\=�ZL�7
�@<�"H�N^�
�ũB!��H9q�G���(Qd��~ů���R�]:�����ٿفe�GN�%�CφU�x�]r�U�u�T�
BԩI���#�$�#�TW1�g�7�[�*b5^H!�Ր�|�����tb$j/���I_�V�r��;~�Z���[/���u�}��/a���?���f�� *�h�u����M�Et]4�"[�����w��b��_��Y<�N��C�+^�����=� �Z�4dI�0��߶)b��cb�r]Eu��\pzhv��ۥl��Ge�D����0���q��y��F%��~�{��z=+�L&=�sV��dy�Q
���C��}���,�NVi/
��si�y�ZuI��X������U��s-���!���.�Qs���Fȇ`bZE�����1��rñ�D*�2�2�x��$�S��";��55A9!�l�F*�y>�k���C��=1�Fq3��6�;���S良��K��v���gX�o�v-y�n����`��
�E"�i���?��5nj����v�$CE��*�E'�TxN�1P�
� ��SI�o����s,zx����O��==�H-�?4������8ϠV�\M��A�&�.c'cy���9����[s���w=Ez����MmX�r@Mo5��簑��(��Pp�(p�A�+��_ӇF������٬4�{�����g���ֿ�w8;�s�h�e�Ȭ<^�i�I��=(��XT2���I;tpv�Yكk��{�i��jb`��Ě���������5�^ր"��x��GX�_[1�뛤96�2�\�!F�Wʨb������@��;?j=v�:n/�|]��@�G���
�ϽT�|/t�£�t��ꢋv�MI�s�/
��z�
\7`/�h+�.+������kD�Ҥg�A��C�ƛ.��y|uJi��_^~_��1X뺈k����ݗ�쇢�',,�>�.P(��ۊ�8�9��!%@��>�8���ᤦPቤOZA�R�@��H��F���,�V� *�:�Dg'jC�;/���u������[鞻S�oޤ�h�h��#�t':`��70a�F.��̈��ȖB�w%LR8N�ȫ�A�gH�`-�#��)�$Cy0U��Dk��82�2ﰠW:EC(4x���#_s��)Yv�\��5��A��k��q.�P�K�r5DM�ф�PN��d%�xV�\@��� H���4��9h!�)� �?!6x8a�t7�Q_!��O� �'CD�}A���CpP̲�yv�<��v=n��a�|���=w|��#�9shN����
���^oe�~�=YbJ�p JS�y3(hZ����P�8f�2��&�Mz���j�
$9���$9��88]打h�
��I� �G��2I��鶓s`�;:�B�yHؕ��t��<�Z{�v��c}z+��
/�����(FS�RFZF^�Z kGj�S5��1�RɌ�I����H��o����K�@�����0����GH���x��7��3�GF��}A���L�^�B��2�?8�
P��l|�Xr�|J6��hׇ��q�<?��^�q1��7q��4�l����+Dz��D
��R5�����U�Dϒ��)��H5
7�"��ID*������Jj�t8{="�Mj�d�~
����
�d�f�
���l�w�/�3��|��I/���tUٰ�V]�!:`t
ls�oc��X'
a���z�I��H��A� GJG��x+I��&��j�n�5�I�`
C�(}��a��T���zqPk�
��p���)�Xb�w�^���j|�dʹ/�L��@��ͳ=43�J�
���e@����rxvȯ�L�>��b
��;Q7m�F�Aq��m~�X�A2� �ey-�A�H��b�1����6h�7��~�3ۮ�:�������u�%�&~�b~���JD�)��
F+����O�<l�h"%ֈ��5�B�;��4i��ps�mC@T�j.DAc�pe�R~���'P�9Ҋk��C�2}$I��B�Y
"Z�64�xMQl���bމK�j����ŷo9��!d�"�0�*�ޠA9���wjBA٣�5?��n#��B?H0�J�bo��6�R`����+;4.���l���.��3���
3+�3��5$��j2j��&��nN-�q�O�O}�2���z�k���j����(T�Ca�V���������c�Q��P��x%���B�XR'| ��6>�Dڨ���:��-ϑ�fAj�[E^��T��u�
d�E�y��k
���
%�15��M�d.Ag��M����Ev(�Ў�N��w�OP\�s9�I��ÀŠ���1�zR�#���"Rm�H�ܚYdTN������
�]4���)'���#��p^
2ȋ(Oхۑ���N�@
��O���ts�%�翾�RûlK;���ll���^�]p�5]\)٪��]�d��R��/
�VO#m�wa\��-kHtn%=ُ�,�b�l����G���%{���������cp��>��@C6G�ś�ԁђ�<YR~�aNf�Z��`����͍�ۃ!J6�B������<ޑH�j�>\VT���`@'ǂ�]�z>�}'�%���tݷ��ݿ$ꋡ�
?��ԣۨH�P�p���AJY2�y\�X~�T�K������0�U5L�gA��!�~�np|�}�t�[����H�����)o
�f�}|��*i�d&8g`d�&��T0�Ol
�諀.'���L��z�?�<�BW�U
N�T�2ON|��/�F(~:W���xt���#���q5m������K�?��L�sY\n��H�̀��i���$w�~o�g��q-[�g�FJ����`*S�׀�<�7�Ar8*�5
)�ȉ�{�8,��8�ܿ�u��JR'/q��u���F�ز*E
��ժ/�)�3�Vn\�^���r�, 䰚�!a��r�
a���;Si�~d��.)�}ʺ��i�����:y��Cg▵��k��]<���.U�J-�ađC�6ql�Uf�yG
��z0�R����P~g�+
�OSB�*(R��`���:���g%��pY{��6z������o�9��m��
S����`��ĝ�\)9��ة���rt����݈o�8�9Y9fb�RQ7��U,z@�٧�����B��#T?��=� ?<��
�H�I�%/%�}V�)`Y&�v���E�>��X
��vmY?�V��
�d��j��p�j��-����{�籵ɕM��^�f��%q�_�A�QP�,+S��n��Px�)�'������^̾���"i�%4����"��N
�v�ɐb� \k����E�>�sʒ���YbxȀ�ƺ`I}r�A��B�g�ٔ7�-�zy�Hg�yr�c�v!��#�L'��吔�_�Ɇ=Vq�^7gyh�̮�ޝ�k�툄�X.UMx��:~���1
]�,��,TUB��%�%55�g���
$g]P-���M�"�b�)�s2����{�h���;:������ߞ��:���F���-F(��Q��{��2mە��/`U���
\С"�W��{/O�*����]��$���y� V;��"�q��w��D��~s�ë�V�������iqz��#[�-��}�GU��_s��(�\t�aj��D��5?$����S��=_������áRȎ!QO�9��b����Zݕ�R��٨i�|�
�-�3��1f�.�{�*%�o��7�ɬU����]��HF��`C��4�#��l�p6qL]"�!e�y �����
f����W>{0%��^���#S��W>�灃������[�iGhL}o��1,8���i�}���b���-T:}��B����'ذy�!d�Z$ȭ�t��>2;3h��DEïs��O�kV寽�;�k��?u�(�^Q�,z(4�+����שG��9�N3d̀˖��}1m+ �(��V�I<�Xe���J�ť��x�'Zk��G���ѿ�t8�/��m�T*]�Z4�N�|�����~��c���TGG3�s>�Ov���O��6�m��w����~�'o2*�oU���^y�?tܣ���T�O�����ݴ��ũu���w��|ô#+V�|�t�u�.�ֱ͈L�"3�k����'z���ǙX��]s�O�N�)V��*?���_�[��w|��?��"p[�<�b1IEND�B`�images/icon-48/hikamarket.png000064400000010072151161767170012034
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<�IDATx��Z{p\�u�}߽��j��m,� V���H����bO�4�LH릤x��N��Ih��t�4Ii��v�t:i�v&��!Jʣ��lc[�e�2������=�|w�>�2��2�wW�����ι(\���,}�ڌw9��Y?�����$�=�����p<���t�T�ٲ(�B&��J:�E$�RM�m�/L ��
.ΔQ�Tv�]�~��c'/��_���N��Wd0�$�\ǿ��J��k����%���7C?�����;(�=���4���_�ܱ/tT�3O��V�LJ�wE�Lu�W�KK����v$�}���O��|��p2Fav6�C�}�ML=G��GlX��c�{Ͳ����*=ta�dq�6:F�'�u\�{��BW�`��P����*@�'��I$b}�O��v�|JL����ݥ��q���T�ﲔe-��R(�b�4���F��#b���FBJªy/��k��g���l�����pK�מ�<�>�vy�n��7"OFsذջp||�D˕Ͼ�G�vu/�PS���R�Fg%[<�*P"Y�Кn��`���s�(sՖ���Z�P��!D�����IZ\5pc�U��r��2)P��p���Sң��$y�M#��%�=5,�&������>68ܓr����?��*D�f�( ���G�hN��bl7:'ybt��+�.B�&{M>Y�N^�P�N&�|y�%%��'%�i��.��M�N��B�T+(GXp>'�9�18���b�I��1$�)[�C �NG�����
�0ԵXN���X�HQD�75�a$T�1ܔ���[i�§��taߛg�|�*�jc�vőI�H�&�F���좀�3�-4�遉0Q]�Sp��e�Z�*!��I�
</��{&H���㓷>�́�c��_X��|1�tFu�
��@`s�ip�z|Rf�h݅rM���1�އ��LXT�Rh$�:x����pu�%`q�-I����۴��}E�y����M�@@7r/��K�)��#�'1>���|�W���I�����{�2*���:<��p�S:��NO�u��e��qa��K��-2��%^�V�$�BdQ|# �%F��q\��q��{�A]�֯��.�Fứ��ǝ�R��
EU�qx���}�e/>��Y��+���Q�NҞ5Z>-r��HT�m�I���X�B�6���K����|�2�5?���G��e�Q�p�5��?;9��Uwc咡�=/?�YU�L2T�y><�!�%�Y���HŲk� �@�<E!�704��(���x�`����q�"�Y����e�%A���&9{�P�f#o����ݨV��;'�+�ly��ʡ�д��K�V
�r��O�gD����r�/�������Ëo��H �G�j��[>�����i�֦G�s�:����/�,Ϟ7m��.�(X%tF}��X�&'Y�R+R\�bYOo�բ������#��I��C���?r�yk#�9,��зq�ڍ$�GB��b0�pm1���F��Y>˘mhX�����j���2�D��k��n<��_mQ�c��ۿ����Fq;�j2��<�
�?�=��}��+֑
�f㖎R)*r�pA����0�8O�>+ !�P�=V[O
ҧĪ�J�إ�4�X��~��%�Y�?��ߡX��A�r��j�|��g��}@,�y�8�s�
u`�%�
�$���`�8�Y��P��{��\��%�m��Yd�6�KAZw�R|��?����Ȫm�5G������oF����v�0F/�b�x��}X��E�C_:�k�pt�U���7�u��w�ЮDJV�
U�L�J��J�\�p[���zb���H�r��x�G�s�~ם�����s�ݸ~����=-P�~?�O�
5�J�%�-u��6���-��`L8��4Znt�'ݼ�f �{o��y��D�����+0{�T�����Sm�P��V栵�)a�,4��| s��$ �SR��4/q�]�I��ك�@��/��]�=K�#��'���v���/���H�1$������`��fn���}MlT[
͂�t�1� <�R�u���X��(L�(n����s���
̜E!=�.,�rQ��
�"��J#����ѥJ��QUf����}�Qs��
!c�a-�&�!� _O#�&K��+�g0p�Z�x�o`x�m�Z������Y�^v]�
�|)G�2E�3OV��12za�,����g� A�Ʀe�h�<�q�D��!"���BW�o���6�+t��{�]X���Cj�1Kp\,͐�R(moaG-vjaD���z�m�y0���K��I{>?��o��%-}�ďq��70��f�4�5:Ǵ�JH�~TI�j�B���z���6���7�f0�pA7)
��'�tZ���v��}��>R��UK�B_�g�5��N
�~�2�$;�k�Ǡ��|h�Za��o����uǏ�g�z
��<��$Òt?���D��)��� �2��8�{�z�M���<�|A?�@Aӌ�mF4�}�::�
x��j�Q�F<���^�����*z����qj`(<�f��;-=�O�l��way�E�M
���U�a���0MӘ� ���:T6�ʆS���H���
,�\����M�O��,%$���#(�ꜯ��w�X�7*WJrm�r��/���Jm�vUV#|lW��>�]F\�[��d4�i���2q�e�+��x$hE��L�w ju
�;>;�{�� ���Ţ�R��]C�ʛmx��C����Xoc�A�S����pbr�U��1��tYE�c�P?
�p�@�+m�MZimDxױ͉:��S�
�~[�?q��OHO�:qLƥ��k���X*�S��FS��S�}S&"G��L��m5���K(��~�T��mD��K�68�Cx�/MyJj��ꊠ����s�lb ����(�����Q�5BM���c�H�2�Sn$�=H&z�K}�����#�h9�*N�:M�%d���S'v��M�-6TĶmv>��1�H/*SXm��#����/70(���ьR^�PD����7��#�c3#"xJΊм��}H'��+6�a>����CJ0p���~����90a]o�䍋���O[v+���V-�������#0T�Y�"uo����:/�o���q�6�O�J@�QxWZ�U�;�2�"��n�G:]�y�#eb���G=�3;�U�����J��}4�6<E���_�[#�M��H�2%���WS\��T/v��W"<�[w#%����:��$3IL�Ҩ�Vme���0���B����`��L!-��'J���>�=�wnJ^=�C\�8���+ӌ2Y��u�� �{~N�x��?x�o�C�r!��U�6�pn���:��vk�|��~��s<���Ȗ�Κ�㶨0��.Cfɞ8��;qnb��)7��J���v�HB3m�C��O�%�b)$�]��T;r;�)�g��D��1�ȗn�P���s�r/�L�_Z�y�[G�yw��:���c�\�oI���3^z�ʃ�L�jT��fJ�:�+by�'����#��}*�j�
�[4��U�״!�`�e/���wk5�R�+�|��vEo�}��d#[�cٱ�v2�^Ђ�1�lQ�#�ݷ
HX)�Q��2%����E0��}xo��h�&�x��F�=qM�ԕ4�R=z������G��p��n��U�o[OT�Y�j�@K���[xQ@��:o���Z�WhU���A�Q:�{���^�#�l�fb
�i|��Z�f�ړ�z+7�d_NJ$cj��Cn�/�:o�Ql�֩����
��5@[���
1�G�dnM�B����rO�ҙG�
r�=�Y��+}i}�MW:ҿr�NΘ�C��=��J�ӚtVaQy�<Im�c''�sv[�v�-�*.���5��-$�t�+�� =��|�Ȅap�P{�<���?�}��A����?ᡘ�CDIEND�B`�images/icon-48/index.html000064400000000032151161767170011176
0ustar00<html><body></body></html>images/icon-48/layout.png000064400000002622151161767170011233
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<4IDATx��Z�o�D3����d�m�V�HE��EH-ڄD\r�_P���?HN��co!�q��#E$�j�A%��&���s�7����k{�Q��R_��^�x���{of6deezr���6c,�97=�q\`�@��m�M˸TQ�h�}���g��(���9�h��M)�-�d-v���_��F�w�����i(9�z��bkk�Tg2y]?D�<xݓ����.|�F�t����Y0M�i�( %�(
�GZ�g���Hĵ����2�0�(*�C�W"p�����GR�C�Y}NG��m�������x��v���(������[��fY��fK��P�V�u�1�A��h
X���
@X�^�cC��O�m���~
o�>o�:��&���7�gwÉ}�h.�v���.�����3p��"u��ɏ�js0�LMMF�,[��~�HaJ�%_��/&���*�˿�]��JkWTf�)�*1�W�ѣ:��L�C]�*|����
���QB�h�aȠJ>��xPie��s�nb&i�
�6Ң�r��bs\x�� �"�t�^�O?\߈eP���2�ñ"4�"���,4
��Ҏ퀉�HC1 >��"�8� �A����Q�D�G7Wbx'.d*%�M"�o��#P��Ө]�+���sv\���� ��u�ҏ�y��WoD����d2ڝH�~�{|T%;t�f�ymm-Q?!�Rq�~=����~p���8�z�XZZ:��������/M[���eq�U��k�l�'sv�lnn��4횎3�|>/V���B��X;�E�Є�+�
d2����eq�E]�P�
���/b��sP��]��Z�X,�{���e�fo��* ɯ�b�0\�����WF�\{P�Vz�RJ��,�bB)��.�j݀P+c�4���\^a�ލp0��?��O����
M��}��pF,�����Hc�n}��������V�G����y�gI��|��Xť%X^�<p=o���믾L
������
���
���ͥ@��)�l��F|FSe���I@!��C��ߤ��Y�C�^��*z�����:��e��6���hs�����<��7M+�����*���oS�ʅW������F���_H
�?Y7[�<Ƨ�1_�s�a�&�Nm�~�o�5����!
������(�#N��E����b�x�w�/����b��C�;�ЉAB<B����W�T�%G�H�r�A��O�1b�N�ÆIEND�B`�images/icon-48/order.png000064400000007027151161767170011035
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<
�IDATx��Zyl�3�������� ���������
A%�R����U�HK!���"Ѣ�R
��r��PH
�J��&$i�IKB`�v�8�w��c��}3��9���|���9�{��D`��]w�'�8pl��0��
s�����4TWW�y��eA}}�
�2D"�|000�$I�\.���HN�z������
��,n$�(�B6�p�LF@�Y���D��M�Qp�"�����Px��{�J�kNv��넉��&�X��7����u$��a
�"
�#E���a���
�',<�
�;�!���w�'�|�9W(�MBe��CLT�X ���0�Q�IۢP�@�cc
�:�55^�nݺ��iJ(��뺉8�J\��J���˛O����6kmk��hD�.I���?̸ѯ�n�i��
݇z!�Io_���>T�MR�PKQ�
%H�x* +�F#P
��Dw�e�/
+o�e_���ܠ_�v�bH�RPUS���o]�j�e.F�i^"��~��1�}�~�������p�*�aX6�J�p�d��b|.�xƥ�64t���!;6��*N�{�a/�=O`x1'�R����\N�?2���Q1SE
�6*I��D�d�D"�ںω��x<�(�2�'O��*:�@�<�4�fqOn��(K�l��8TG:a`�E��!��a�`�6���)Q��@
^�ֹ���?�^�:�1���F��ަ�tu��"<����ph`3��T�1�H��0��l�:;�@Q˂,E0��I��;�74��._ڵb�����ڵk���@���H!c��$������C�8�aP
u�&7�N�i(`-��]����v�I��p����,+~�#+
�k,�1��F
�L��O��
'zX�૰��0o���8(a
����Q�n������WI�'�~�i044P�"���M�Z,b�cf�����/�G%��pL��N��y*�H��M�{������.h�U71�ԃa�ᵍ�0tt�ŋ�@�4�T)�r��H氒9��/x*�(*!�Q�x�/�73�F�/C�!�.�p��R�dGT@z ��ё4W��*�_ᩘg�ĭ^(�A�=)P,9m�p�j���\ҵ�<�?M2��
z��w!W�F8���gD���xms�Jm hkmA�@A
!I>@&
:J�=���Q�rL^D�H�%>��ʘ������b���9�d1ptdؿQ�Bx�r��X3�vcxdc��C��vhL4R8��e~�����1��௫�a�y��q�%��9���_\,��;���g`K#���^��B�&��:�F?$-��P(ě?ſ�K��<$d]mb��RظHs(�Bl|� 21�Vց�Q��<��4R��(|`��)tԬU�l|����m��(�7�/@KK,Z��,Yz.Y��"�ͨ;�iy��3�Qx�mć�A���Ul���|s�-�"C�ؐ�4+LU�4�`l|��B
�W,u\�Pu�?,���9q#���رa��[Q��N���B�I�DP*#�:ϓ�� ��'�,]�ڱ����_mذA�s�E�g��rT�V�,[G`a���P̍b,�B��x��y�6hJ6A�&�ç�ۡ�SH�
�-L�'Ȝ�bg�P2����`��TbMM�/�_HAw��ۯ�w>��
��.n�}��}^�
�?��
�aT�X�:2˗}�����,\����!�L��C�%�U�䆍�Vq�>p�`n��0d�� �G���ؘ���y0���,
?)��>�e��e�r{����+���<�:/
�-��܂-͟��H���Дh�\��+�n;u��dzBE�s��Ŏ�)���;}�S�����P0y�O�R��̱7���T�뷄W����\����
��g�%��y��^L����<VW*Z���,�(�j+O���|��"C��!��H8�
����o㖣�V)��@M
�,W���M7n����?��w�/v�/�b�&5h�
L���m���k�
�����3/��,�Z�h,
K>u>b�,��dv,�ё��~�4���I$�ﹷc�H|9~}#R-|��)�f^@ab�F�7�R���C�"�|��&���x���=�MU��+h���}�(Q
C=���<m.䶕[7mڧH��'��oB��!9��<��!����Z��
�M-���!}T���6���{\�`iz��M+��Y�y������Kӯ����By!�3��&é���XaB�;�o�YhF�x0V��d�rx��^k�V)6��yqrç�̲�ؗ�������Uh�����Rϵ/n�Yٕ}km;ĵ�E�ATF���:��/�����}I ��@C�?4�4��B�d|�p���]-8����D��-Y�d/���y��ܓ��ůʷ�%��99�����DjkS��6�&�
�H�4���>=�x�X���A�Ň�E����H��a�#��;e�����wOX�L9u���j邑!l>��p�%r��@�VG1�eyF~�c�2]�V��Lv��y�ܔ�s���?�p��;����ܧ�ƚ�!Wx�hC}M
�]}��|����(����뺡��ۃ-;���CrB�x�>��ڣs�N�\����1�dUl6��5q��A��#���Ds.�������3�Y��X��6���R#vʇh�����?�^���?E6$�6��du-�[7�<����c`�Eq��.��#S�4<��,'3]z����E��:`N�ʴ��~s�&�0hQn%j��77&
�J[@��Y�8���-ӜiaB�
�15B|�n��{/8�W�?�td��/)�b���
�И\۶!߉@Cc,]�R�f�C�3SA���c�=�8� )J�2.N�x�Ds![���5!/f�U6��-���
�٦6^�
�|���M�W��!c!*@
Qc^jL8���i`rbM]��ب�~�cs}��n�1��C"w�"[��(>��
�`>�Fc�ֺ�2>���.]v����rN���݁�cs�����G������\t��{��sb���0b�O�%��n�M��i9���|'\��U(��'T�?�Z��"�%h���8T�����OY�R&s�_Yl��ޛ�����z� �*��Ws�/�6�Ѹ�/�5�ؿ'���@e�JJ���'iP�����J(�mo��%�Q��\�Bl�M�n�9�֖���Z��5-Њ.~�Pnj8k&�
L�)�`�7����;�v����K�,�s}�DH�NՍ߽������omm]���B�if�-���^p�c�u�C���U:��.��^�;����δ�w�y� ϙ�h����p=b�;��~����F�2A˻��&��*�ζ�������M�KLOijIEND�B`�images/icon-48/payment.png000064400000003352151161767170011374
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<�IDATx��YKoU>wf<3��v��i�4M�V!�)��
�`Qu b
��n�A�
�A�*�(�l ��.�Z"@��tQ��AӒ�j��<�8~����{Ǐ8v<�"I���x�����2�9=��������8��
҅K�9��>*�l"V���>zq�����a#"� �tzhp�l�jF�kгN����4M}�����ء�3"�z<��P�-�u;,N6)IhQ�ߖ�xT���=ڢk�UB4u�.��mE
�J����<��ba[�i=�7'��xm�m���a��������d�.�]���6���9��rR)b���x�֚7�d��k\����r�D?���\ϓ�l|�8�����?��|>O� ��
�����2�kd7��i
�>�˦�4DN"���04�<ץ�[7�س������4'�(E���St��
���H@�>��G�aS61H��gB�O����L�zp�*�A��kT��)es�\�B>wA�F"
�
P�U6����in�$����iZ�P�5�tX�O��J\�Sp�*�Z��9���\�Y�>�xU�1�h�T+,ku����㖙z-�Xu�$C7
!���X��A��)H�<�����wi�?��I���GKr�̘A�eY�%PSO�.��1El�f��jե��hhx�N��L�?�ϳ
�b2�"�e��={�
*��G�l3I�f��XH���1gu
U�nzp�t�J:�.JjM=�^��͍��k&�V���y��
`^<N�@S�I�t��KT�*�;͘EI+�
�Q��i��S�MtD�>i7x��~�c5��q�'PӀ��9�%Ƥ>��Kyz땓�I�k4i����nϞkА�a1NxF���]�a��Z"�m�e�X��Eȫ�G��8�Cb:7
��-�R��c������{鏙R��B6@���\�����n&�2;��!,�p<�����-�i\Džka
�����Խ�ˌ�;t�Ц^B���B�"
"Cj�e�n�6ޠB�a;�Ř��Hw��HRZ�A�+w��4;��t�ƗT��r��8��3��@�+У�}thlW8�ή��`��4�O�K i
g��J�u��h#��\(�I
SE�@x�����buY\2��7�_��}�:3�"�Z$��JY��D7��M�\��d9�1!�0�e�}�St����z���IH�S��
�:�w�͘E�IQQ�[)���"�W�t>��DCN�X�Óg�
�`�O�&�x}�XW�J>$䂀���[3HS�����z���Z�'G� �y�:e|]Csy*W]�o���e�{��ZT��!��
Q��F�d��,<�2�}�m՛���"��`��:��82+��}w�:�:�`c�iп!��������g����QX�U��W®����l��i
*�|U-m�>QG�i�����e�6]��C㹬̌p��w�q%�\>:��B���~ 2
Ve���v�1Y��g4����\�B�
V���8�������L���H{D�?�Q���u���BL��t!;F)8�Jٕ5b`�"+�b�f�� �u�k���7�ɳ?o��Ubȹ�u��?4=====O��#�j��f[��IEND�B`�images/icon-48/plugin.png000064400000006546151161767170011225
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<
IDATx��Y[�%U^{��Uun�=����"2C@P&A�>(4�7��&�/��F���`����C��^#A�`��!g�!s���9u�{�����9}��g�'-65�T����ַ��J8�h�?G�Pq�����</��V(u���f���Duɹ�-��lQ<k����;y'��'�P)����|\�O��~�+7�8:u�s��IT��U�D2R�P��K[,,�������0������
��1�g�Z9.�姯��~!��5�t0�����&$n"�5��g����mV�|��/����j��-w�T-����Ѯ�.=ݎT����a�Cdy��o��zzJ�)ER~�fg��������8��&�T�$�tr�{�
�'�gQ�Cȕ[]��Ȕ;i?E���G �M#b���h�����Ĝ3�t�_
������x���p��H��YO,N��V�y
���Y+���?��I�9~��ت��Q��7�筨AP��YG�(�\Y.���Iϐ�;i�V!c�����*ǷJo{0��,4�J+C��1��~���=��Ql�B2�����%�QV��Z���eñ�r3�l���`s��=�>sJD-GR����
tU_d�y���=��?/uy����8��X�֎��O����s]P�WZq%�v����!��NOhYEZ���
bo0����2kE�����uH�7ޛw��iJZ�6����� pжb��2U0~��$��+�/�«M�p�SkH~��R�p���gi��緕(���vЅ��
;���afkn��`�sc59���kw`%�>'�Эz#D(~��ä��i��.!�*$fV��8�'�MX;ДTfo���5&�`�v�D���B(xbNDzD����
�_&���%�"�>�Lb�*_DGE&�x��T_�Q�5���d�h�L�4�m�H�N�do7�➭b]�&CJ��C#����`KZ$7&04��"�Xms���a�]����e+`��R<Poi���]���^�Q}��Lb�3��k��"�p�-/%|��K��
�`\�<
[5Fof�
5��'4����>�8x
�lk*����*tP�|m�j����3\-��ڠ��������v�w��%_\��j�a��DQ��QZ��.��l<����Cc���o�����ϬG'xL�|1�qJ�N%�]�j�ٞ���c��E�H�E,�`|ޯ�yct$�ձ��F`F
��[s$(`�(xc�&/�N`�:�6�8���э*������S����{}��_�s�}�g7������GƎ*0P�"�V�O�6Q];�<B��(xC�Q�f��|�q_1}�:��Y��'�9%�z9�ݚ��[�{[B�e���<���4{��_H��Rp!��pT
+�4%Oj/Q�#�v�T7�
�B�䄳#�G��[��b9fc��;\�ܣ�\�s� �f�ʓ���s�O.뤭=]w��RI�TB�=���oj�L�����}�V�{�+�y�J�
^$)���[�ظ��O�����H�bw;�Z�Z�4;=~䭌��[�QM��E��NIv�P��X�����Du��!��_����M�a�4���p���+8�
�r����0�S���>?��;b=�6߳I`��]�=�rK�G�5�P�'<���|a+��+��HfS��ߥ����W�b}���iH<�Fz�Յy����'q|t�}S2E���L����v��8���p+��`2bP#��)2�|)�nw6 ��kP�K�f�����#c���L~r�.�����E~`���N��TC0n0>��v4!�"h&_��za��ns?z���ԝ�n�@��[��c���'�^�������J�5��<�f�`���2�
�+�7�J4jd�{�r�}�,Tbi���>S�Z����ĉ1���Q
̲_Ǻ� ���:�����Ƌ���8�z�=�Dɺ
�W����C�k��J:��4����p�=q��ܟڻ,iv-�
368���@�ƍ<��W+�m}��`�H�y�[�Ϩ �/����0'%���4�toJ��z
(I���S�bTL���&�iSѷ����s�?0|m��
�)m(MQ��<��s*Ԛ<�F��D�3P
��4H�>�3��5�.v}<�c�la�f`����b��`*�-sh����H�0�#<, �"�+ůj5J��d}���'�6�����"�?�����*�f
�zB��eR�t@�WB\Zπ|������?�*�p~'VŞ3Ʊj�<#c7ܺޞc��Me=y�
0�O^���Pg�*��Q"��EO@*�#�9�$t���"�ćA4Y
�x!�.u��y�+[�|]�����ʶ(��ء�%���"5C
���@"�b�O(�]��z��xq�yk��prX
��ܰ�Nљ�����a1����A��*��*�b�.Ϲf,�~B¼H_u���*N�qn�n�����]<P����`�POP�Ă�Jn+�z�
/
����jI v��U����M��Hvs��<�촠��8,.��z/�&6~����,�*됲 Ϯ�2m
�� �[T�k`�>z�Z��F�:::+�<<�7b�cr`����@�R$zʐ.�+O���C
�q�}ň���[z-͍6a�LJFv��a�uU%���|lqr����3n|�9֫،��h=�41�k<�9W�'�Hzj���𢓹�b`���!K�Ě�h~3�譝3�D��S�U�n���s��,�9�-��d�|j�h�t#�m$v*�+������/3y��hp����F���cN�>+�b���Ҕ2��.6���Nxi@�Ͳ5E���xP�$����c����ק����c��nm��-s2�Ϣ����
x�Q��վ��A��Պ���ڪ̶7Z4x
p�ѥ����hh��Y�`.��g���Җ_��̛l�+�*��d����q
�7 =��?�l���X+���He�<O!���'�_m~{��]Yo��#9���⺼r�1�6:�Ʀ��%G=m����>�-��O9/V�vEQ��W�xA�A�IdB!�RM�6?͐�]R���?��OBG�[�QQ@=��U[���i��T�\�E��:�&�&qeu�Y�8R�W��x��_������Y|桽�67|�ʬ�;&��Q=��)T6V�6��|��ŗ^��<��߇�c�^ ��v�Y���[ſ?�(x˸�Q��m��?����IEND�B`�images/icon-48/products.png000064400000002551151161767170011562
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<IDATx�왻oE�����{�s�� �
JPpADE�+��D�?@�d���@��J�JC�#� #�)"�H�(vbsw�z�{��|�}�K��,K�{�3��wf~�;n8����s�9@<������S���;p���AP�����O.�_`����k܇��B�
P�|�T���_|҉/�o���5���Ƞ��uX�5Z�V�Υ�,������t����M|���[��n���7�r,�0�Hj��v�Iv������) �~�)���4���Ō���@�QMӀR?�0u"|P��
�ܼ�^��^+C���O�:`
���$w���]�1M�%h]qv~K�G�oz](���5��'�>E̻�b|Y^��r���މ�˯A��W����xo�+��6��+P]Jj4_��Bb����@�%���;A\t���
sbJGc��&�'- p�<�y�
0��r��
p�zj�|-��b6k�L��9��j�^�e&�PV5p��F�]�S[]�y���F��x�}w��;p��C���{��o��k/U`���B-i�x�Aj���E8[p���ox�:���:��(C��z��Ffk6���玕�v�v�����&���-��� ��ܒ�|m&D.���������B�Y.�q���Rj��dM��&/Ja@�}G��0$=r��������@\c����L��d
4*˶��W����#\9�Z�PK�ba�@�x��@lq����C:���o�`P�8u�`d�����P0����l$�$e��q�c0I��
�D
�b�� P����5��WJPyt@���Q&Joe� ?�U�=Uٮ:}��S�<P �(��b�&j��m;��X�W6Q�]�Tf
1���1���.�N���� �Pk���Ͻ�`*���d�Nv2����Aub`�@��Xe���Y��l��������x@,LNuF�s%�}�l}|�P�P��SL�
o[������
a�F;�N8o4�͝e$��;ݒ�6@�t�����%T�X2���[�j�����Z9�;"�Ǯ�NQ�;���j3���A���9!G�'�<��I.:��Y�[m�B%>i5M�Ա�[m$9�zX���'���ZPH�s��*��*4�8��9�T!�
�Ղ+��r�l��r����MvߏޱC�u?!�0H���^�I?5��>���۾P�6�u�q�8rf���hZ"��w�9��1�O�`R#i�@H�IEND�B`�images/icon-48/shipping.png000064400000006075151161767170011545
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<�IDATx��Y{�\�>�=w��d��;klm�D�.Z��6PM�jSR"�`�*���
H���T!�5�
$��`
ILm��纏y�g��͝���u6�2�{�Ν��;���7�����`���s�Xk�^�u��7���h�G���F�H,F�eQ�\"��s�ۭ����#�-Ή��/�ђ,?��)�JQ(&��T,��G#����(㟗��'��2r˗ɫN0�W����56�!�k�~O"�C�d�dE!���qj��T,)�͒�i���K%#~���;��$�:��On�"�c'ɷ��q۫X��1�px:�nO�{)���y.ٶ
�[To4�V�R��x$|`.�җ��d��"I�Iz�$#A~_�=Cv�x������.����x��6����f����uj��w]�U�tM=�B��7}{�W��6I�P�GY!I3I�c!��#{��s�b@�W��\��L��a�0�
�T*��un�"�d�ɒ�߉�o�4
����{����I
���DQ��6���٣��k�`���'x"����ԲZ���(�˃&i��a��v���Ugqΰ�^#J"t{ap+yV���I���c���|�L�]��;�whg9��C���_�!{�90�9ے,W�٢2��:EBƾ��?s!��
���ހ�F��ZE����ݬ�fF��&h�w��>>6#*|T�"�^����r���ٗ�H�0�?/Y�w(�����(�<h3��|��?-��
�e�J���ėEf�����p�&ғ�q�Rf0'�*����m�Fr�B/����[��:�W��s�D2%"h�9�z�<D[ѵó?�-R|9��K�7#�B1D��N�(��iA��w�6w�r������B��F��,EH礦Wl��wC���Pq�b�hU�@7��g����|��VW<�:��()�%Tˏ�h�33A�x��{����l��.�%D}_#�ү������A!���(?�S�0�ig[�0�B���!~���p�!�n��pZ;u���?�%ɡ�����[H6��涌$Щ?� @�}���
�ҭ=�v�ï�Qi}�}굺��nc>6�F/��ˠ�E�G�����A�F!�:��r�$2R��N�ڵ�Ƴ�L�&j�c����9[����|��D�j������\�z��*��[]�3�b'�"�O���ߩ�'�z���oAk�[H�+�=�XО��/�Q.P�zl�%�Y�\m9E"� x�h��R|D��Ý��`�0bMF��u�����O!�DED��(x9���.tx�?L��oB7/D�,^_�~濦ʟ���-h�q'x���ɜK�����~���dsuꁠ��4��P}_n���E"Q�WYh�
�9o�4،=]��~):@6
�o���'�����)P"���{�GI�urv��d,1%���}�^�'3�^BnfL��M3�+i%.\5J��(&4q�ƾ��yU��0B!!�&�m27jA�C]}��9-N�UA�v6�ҴL�t`�̤�,M��T��^ґ��E.d;����%�����n"�F#l���I�-#�V}�P���P��
tu�'E+��/@U���A�ڂ��EX�xO),�v�}�q�`5�1�x���夡�M��L�b�v�s?w�nu��G�.6�ܢ�3u�}�
u��WΒ�;@Zj}}�MPI���y]=��u�q���R#��H<ѦZ��p#w��s���Y��H�0*d���p5Z腢�d���܍��WL�u��32�N7��m���j��L��71�7��Ԯ�?I�`�e�;J��_��ăk�ڥ͚ll����S��Ӱȭ��A�h|�LZ��i:�t�CE/.����19�y7h�0*F�Q����7CX�2QXdp�^S�E����SSK�7aM�����ȩWŔ�Yu�j��d,Pb�x!�`��%�5��3d�V�
�+Z��ڸ}R�,]F,.��ǥJ�t?�ћ~�����%�����0qX7.����4D�=Ma|'[��<�l�;I�7�V7B�������� GBzG�=I��_,#���Jɞ��R�&R�X|�Q�>����A���fER��ѥ��ȱ|A1�]�d-q��v�=vh��)�>M���{0�����O"&�ǩ�/���/��b���PI$�U4�5p�0��z���ʹ�R��~���b
�V@��X7�_8E���{1um��mA�m�j��q��P��c��ߺ�,(�bG�D��
@�K�r��-�I�߇�i�����J"&-���*S�9�F�ɧc�Qqs�e&&(
�I#�yo�Cȝ�o���c4�`��7�TE�K�A�^%�^�,�o���`�ڒ�8��y�v���@2���n5j��E���G�����@`�#-�_!C�����nC������?�J�Zu�����vH3B�Y�/7����(��-�k���k`�f�0<X���;�c��ż�u��σ��H2���g\$�w�Z�Deo"ݷ)�M-�l���<�%�g`������ӧ�a֒o}��#LT�B䪨���Za�[Ў��2Q�T���{) ���f�Z�B��x4��q��-��
�.�s��a��+�X蜎�hL|W^�[�S�]yw�5zɳݐ�fo��^���;őכ����f�d
�\.K�rY)\9����,1uq�F"�?s���
`)/X��~�
U>����6]U)� �%��P&3����+U�*�
c^�[W����{�ޱcGGn�
�{����/C�C�B�<���
T�|���[��P8�W��Є�SX�c�|�#w1��@8�������~l�]k`��5����L]���^����σ��^0��`�/�)�p~����n����ڵ����������T��b�IEND�B`�images/icon-48/user.png000064400000004406151161767170010676
0ustar00�PNG
IHDR00W���IDATx^՚{�\U�?���ξ���۲[���
�(�!
��`����U��&�4 $E BM���
T�HВ"K�R���vvwfwf�=����죆O��/�ٛ9��sϙ�Z>�H>�q^����I�Z�Ce����=o_s����Z��s��FA˽���K@
��]�8�t�%fLũN�aGײ��K��Fc�E�˶2�na<�
�n���?�iuՂY�a0��%�����M�/~�!��>�P|��;kYW3�zu���A)��&d}=��0==��GIX֮ʶ}��9C��p�X�Y<��i�����|[*
ITccM�0���>���fݽv�kR������램9{��ӕ-��Ⱥ:l.Ga��m��9?e�����=<���(��Oq�W[֠;�����h����8���j]b�qIل��N`��~G����>�����';���X0�Jp���j�9�Ϧ
���ٓ�
���,��+�u?Gye�X
�-�^RZ^��o����1��B��U�U+�<b�X�\?JTe4�-ίqϽlK�ナ�=�{��s%�Q���$*��b�]]��7��;31�e���9���e�y���o/.���6ng/;��z+����>Vu�J.�zE����MOp�T�t�8�
�Y7���i��>�=�i�"6m�3�0e�叱y�zz2aX%�b4l����ԅ���Y:/Ł�/���|AP�v8�9`JU�˯K�x�Oυp�D/d��{���SWS2��Ն���6\�F|n�v������s�+�է���麤�m�,dM�o��ڪ�A]��8r
ǡR¶T��F������j�[����.�&�"օp߾��[�ԯL4�]�x�]����{���$����w�۶���=ߜ�
�-k���WS+�Cw���Û��05�,�#FK����z����U9�Ϯ�fi+7$].��R
�a�������ҧad��(twa���1�A�W�0��y��+/��n���]��vA�S>��j���=]D�J��^Z���Z�H&�/��}܄�A���h��2Kj�s�#O�-}=�P�:dv���U�d]�Du��H
��8���!,#�a��.��l'��a4�O�k�m��
p��MUu����*��X��Hap�&�,�0jnkj�}����H��z Kňg�(��`���Z]�_�z�B�iCҷ(�����u�Y��~��Ō���MXZ�J8�&��O:����k�N$�a̴x�\���փ{�ijf(�5t���~`,��b�#a�q�H+A3n��7��
���q=�ȇ�Rȍ��J���@`��*B��s��m���Lina0N�����Z��-@kV[i�F0^��������2sQ#z�5!�����7?d��=���ݣ
"�H���s�~��x�{O3����9�pIA�(������b��3��v`�fc�3�{��v�k�A�Q����\G *�x�ஃ�����t��SIVU�yJ"���Õm��"�����R��F)g��<s��p�\�n����\�d��
\��0y�<x9Ov�'�0�D�
G�D��A[ٯ�E0"��X�Ea��7�#���z�����
���n����k����dV=�e��;$�(R��
����-�V�5�A"���p�8�`,4F�
E:�~��'g�ď�U9HH�r���si9�����J���U��+R��sn�)�B��F��dB1!֔*
�ّ�����N��
�@8��R��z�%W-��ݚ��TT��x)��L:*�5D�������wi|Ccc
@P
��N,L@��/9���a Y�2X��5�(��j?`��75&�:��r��t��8��֟|�RkGw�b�5��5��X1i�1)$`�t�h�j�D
��њ��w<"��l4��7�z���KVG:R�R�~B0hc(EQ�_����X����P\s�5"�����R���2�דB�oš���~#c��t�8b��Ü8�8�<���4ZqU�)WIY.]��L����
�L+�l��Btv�s�BJ@'��:|����C�����N
4`� މ���qck�� �ݰ/�a8rٽl}q���
ژ��1�r����e�
5n|�v�?5`�uc�Z�g+ف;L6V+=�������̿]laIEND�B`�images/icon-48/vendor.png000064400000012062151161767210011205
0ustar00�PNG
IHDR00W��tEXtSoftwareAdobe
ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"
xmpMM:InstanceID="xmp.iid:F2D938770DC211E495F98422EC7E5E10"
xmpMM:DocumentID="xmp.did:F2D938780DC211E495F98422EC7E5E10">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:F2D938750DC211E495F98422EC7E5E10"
stRef:documentID="xmp.did:F2D938760DC211E495F98422EC7E5E10"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>ϭ�E�IDATx��Z ��y��{}N�\;3��]�s�:�+��6�D\qe���!ⲱ��'1� 6`���
㤌+�+N�����A������c�{�|/���ٙ
$���w�v���?����,B��yS�)���M��`Հ
�o��Y6�/��~�L!��xz�e�ҽh��
`�����O�~痫��\�,��{�W�c��REU7SM���3p�VZޣf
*Q5�ݦ��77Q
������/���O�[pg�g��߸~�,��p��Nf��fz֨�b^�読���(>I'�;h����L�v��|����>�e���=z����"���=y�"����'�k4+��wh��ח7
iM�Q��4�.͂�$4�Ua*F�f��9�8�^����αp���2墷\z�����a)U7�j��5FO>�eM�
��j�2�S^��6����*5{�*<�t�{CdKY�l�B_�w���n��V1�z������Lq ���vd�%�2��i�ŦT/����&�Y?�V���r[�0�a#@��k�`�
���
��Dä}/3�a��
%^dip N���g�
]=��
�t�(�%�>���߸���'���y�d�g`C�
�r�F�{c&tF�k�w�u
h܃k7�,�����G�sE��U�"xࡒa���e0+r%5��)f�}��B�����<h���}k瞙��\]�l�
���}�2��/��H�a�剢�S03Q8.C&��6!�(|�#�$x��O����7.�XK�m`���U��Z�3Ӎ��xj�=?x�|�ط�몟x��U}E���o*M�[@
�T,3�X�Hp�HAbwy�!����yͪ�ё�����N�7�>�ZMު�j�ܜ��o6�|�}��g*����-)�a�g�
y('�%��KByȻ��Dr�sB����|j�J5�l�@�+�i����i��+�)[�B1��1�G�̯]����w�P���?v�M�xD��!�����S�54ա�s�y��N�'I�!���&Z�ΏWBi��\FDO�X#%�S�,���+;d�Y�-Re)�ubz�������_��_�$xS
�\�Gw��/�r�u6�[(�A����'(��
\��s
�t���/�!֪"�g���7n���p��Z���}�\�e^�xg0y|�鹯��|2�kM�
���_�.�3Ż�ށQ�V5J�(�ӹ���,����i�0����z!�[�D>H���DBp�WMT�AXi�Z�t&����?��?>0\���ʁ�a���1����m��ZN`[���<H��
��z����)���*xuB�+x{�hxM��
�ϙJ�����Ԑ�jB9�$�%NÃ�e!����]�[A�V}�y���4�X �(����4�,||���<��@և.�ۊ��T��8�t�n�cl��(�M�@����yD������U��|A�LL|����N`n�*(���@ʁ::�#�'��#ɢI\b�0T�)]����� �����Y�q��j壁OQ$=��:��Z�Px.�x[^�*t����7#
�~j��^�?e(jn�&�3H۩���[��4�?>�Ъ���:GB&�y����#�!}@�x�X(��-�b�)����!���P�#�!$-�id�i�+��U�02�B9槯��0��j�5|�^#�
��l�<A�����(��kU|^0"ψ�j����B��
�:"��h
W���"�nc¥RF�X�U��~��ӳ)�/@2w#5����RRy�<,h���ڋ��-��:���4�����&0C�N��B:qOOPD�47�Y��\�Ѩ�$D���t-J.��P`H��M�:����*���ti�b��TVW
�*�9p��X[B:�%�Å�KK���CR`V^ ������ �$C2@H�̷���zS�S��4��.Winr�87�V��Z��OK�V||�GH8��D!������k:l�`X9i1sn��-'�j?��EK���(xȰNx�y�:?��i5���s6�89ZWrYa���*�7��s�\��*�ҰL�����w�ЌKp�0Q8�-�����u��o�.�@M��b(�*�B�q�ha
�F%��L�5�կm�<���}�'C��
�uuPb�y��<���ت�1@�U쮰�Y q}.�(CB��k(���Z{>�3x�Z��a!Z�q�]����Mty�S��Sh���^��sW׃(�ߠ�L�H�,7�lZ k̩NCc˾�,R�U���m���4�=-{ME�_�w��hd��8�x|)tY_�ݰY�+�*坁�?�n�w���,p�ہc3bE!
Y;�jAa�[´�U�'��!�V��e�Az��(_i�m~�к���Tf
�z�'���{gH�u|��}F�MG($k/R��o:�Zm��y?Bst��1^n4Io�"%S���ř�3���K�b�����B��ɉ���fҬ��Bۑm����B$rǖ?�p�eÕ�\9d�Y,�#2}�4\�濍B8���J�V#��.�5��909����+��IJ������d�;��ŢK~�,Va��)���IJ�c;i��m��S$�9�B�~4��?r!�l6��@ƶ!D��>��8�P�ǻ=�?+_,�3�|�:+]�AgxW�AP�{���{|f��cS�M��@s��e�l{1Te�*9&���@�T^|(�.�銣�PU���}Л�²%%8��B!�����^��}._����EMD���)�Yҕӵ��LF���x���X��ժ�s�ʕ�}n�g�OfR�s��3"*A�ޝ
����^�ս���<
E�����_Y�4ÄJy��c;�B#y��ځͮ�+:�``DZ��0���!bY�f0
;���13�L���IJ{�=y���z2��
�;��`�Q]Ro�Qv�]{�'*�p��o�٫����d����5�=�B�y�y�،+/��D��S�/�(,��;���t��[�jǎ����vT�0|�}���ETK�Wu�De_���8QH�K� ��R��&o��^��6qk����A����^`1�j�0/�x�gI��2Z�`hR��U���x掗���7�r�����An!)7����FFA���&��yzL�V
`�ր��:q�R?���-�
�v�rd<G1�zj!TE7�k'z�!f.�:6S���{�΅�f�b��ŷG��r_ڀ�|�:�~]���*�^��=��hfM)4=��$^m!�:��4�Vn|υ�_W���Ź���F��Nխ�d�4Nx���2j�钢L[�_]?�ɾ9�i��TuG�jm+-HX=j����A�ݱ�>)R��<
"�m#n�ŋ�퉸�������JH~���5�l5%�>�4Ea��K��+���*Х%N���s]b�@�h'H�D6�������F,q!Qʼn�H��ψ��%��I��#�3��h`<aFHb�@9p������"j�~�
�*��7NKC�U��}���\<]�JNHf��+�B���I�"��,��"zNe����CWr{��S[ǖ�Qt�f��z4턘�6���=x��;�'p���D�)�.!��EpI%`�u| �q��2�#3����*>BsF��
���c��:Z%_��Ӥ'm�K/�VRTf.�IzX!d
��dAh�U[dT����R2ḗU!h/���hz5^}��SV@�l��~q�ڕ��#�Es�i&
�X-��C!�BZ�**
�FkA2��^T8�B)mW��}y���J�$��+��M=V>84S&�|�+�קs�vW�d��"O�|�
o��C�t
�tW6�B �Y6�ZBy��4�� 9�m������t����S���9�����P�Q��Ȣ�!ZY�`)�\��J�L��t��[#/�tb�h�����t�d
/<��](�����r��ϓ�_���_��"
J�L���U�d��A�6�^bs_2井������s8'��8��,��n��e;��$:�s7
�1��[�ɢ�����h�B�<������4@��),��:SU��q-�#\�q%�j�l�,�y���
����?��7Ӱ�@�IEND�B`�images/index.html000064400000000032151161767210010010
0ustar00<html><body></body></html>images/infinity.png000064400000000601151161767210010354
0ustar00�PNG
IHDR
m�qsRGB���bKGD���̿ pHYs��tIME� ,ู�IDAT(�}��m�0E�do�Jez�pzo��
�!2�q�"@p+�w�J#炔I�H|���� �<�$f���1�I��k�c�vm��lu�?[��l�q.�h;�|��
A��1Iᗄ�!XK�߽��mAǃ��
��|HycN#�2��a�+����R+;����s�YГ���]e'�d�)�R�%���%,�ę��>x�իe˖M�cl��l*�������k�ٴ���'�+�/j�������*jZ+7�c@���$IEND�B`�images/leaflet/index.html000064400000000032151161767210011424
0ustar00<html><body></body></html>images/leaflet/layers-2x.png000064400000002353151161767210011773
0ustar00�PNG
IHDR44oq�`�IDATxb�O'H��J�JV:X4�vW?����m��x�����bM�����;��?厙ˡr%g�uPp���1oI�0f��w����s1��B��.\k���xvS�QGwRw�QǦ��ޒ����B�ydHu�i!��y(���m\oP�mDz��64�!����k������0�Y�
��*Op͜�P�+9��{���ș��T�����t��V.ݞ�6�!�w�ڮdY]��yg��.��\���fB����Q}�HԖ���m�R�1JF���Z���3���bX~_g��Yk �>ܾ�]>ck�����(ߍ��n��ݶ}y�!�E�g�S�������=��>��fr�*K4��R��墚v���e��Y�CL˖f�����
�R������e�M�,��k&#n��V.G�[ޤ92�D��S�x{���z��)�,����@���)I$�@�b�F��Π���4O�H��%֕�� m%���X��K�yэ��"-��@Xyvt#���ϻw����TL�I�aa�[ҹ�@��n�� -��
��M{&�[���j)
Oݦ���ԡ�vXY�Ц<�q�ʲs����q�~G��1�B,�{5
�Mv�
'�
��T��w,�J/B�
,E�fJ9A�ts�������ڶ�A�QՈ!���>v���I�kC��m��9���!s�g�yܙ��"v��l�S/rt)�\m�!a
�B��H
�%v��ۘ���tI�ќk�_SV�}����;�0���p�>��2{�`EjG�< 3�"��!���� գ�4bH�A=�BE.bA��"�n�DZҠpqS.7�.����C��j��am�<��07+zL�<nQGj���e����
�B8BaG��ii�D(']�`l̻���B:m�Va�6�!�!#LF�fvVpR�Jo��2G��Q��M�E�2��>�*^�2j$�=��#���stcYY�e�-I�cD3�Xeg�0RX;�
sD}Y[�����z�߃�9eo��8��P�9�b(a"-�v��_I��brKL�P�Х��CT
L�E���NsK=2��}F:!숲w8*fBk���n�l�-t�I�w~�a��
N�IwL�A����&�JF�9-�zn�ϰ愙�2Ňes��h��9arZ�>$'LJKP�D�DZ�6$&��!�0
�mH$̔s����q�C�IEND�B`�images/leaflet/layers.png000064400000001270151161767210011441
0ustar00�PNG
IHDRC�EIDATx�T3x$�=�ݡ<W)ϪN]�S�:ob��=ƶ��ì�,cOζ1��:N��y��x$8|�>��y��}����b��W'�"L�㯲��>�Mz��O.���
/�8/�B�9Cq�䮣��Ɨ� 0�2Ӿ�ޖ�ƭ��pч9����?�p�>ᝬ>���J١v{�h���L���/��8��n);(�pa�u�T�a�Y��ߤ�e��3�6\����و�M�_�2'ƿ<m���R�Z%!�\(�
l93�~��I��U��r���DV)�Bפ;����#�ƻ��7�'5�\Z��NJ�Ԛ�4b7�b0����1%���CKм
S��ɔ���D&b*�E��$�b)3U��rM�������&4c8�a�%�KS81V��1Z�����;ʙ8�
1�އy�Մ��'�Fj8�8䆸s�
U�+�/�μ�֪FAm��H�$G�{���e����������E�lN��$�!&��� �C�����HB1�Rk�%�ES(1V�l�[1����aP�+>[O4��u�P��'�-J<��=�n0������&Ԡu���0�
����v�����@�3�6Ȁ��#����~ZN�L�t±%��`xz��jL�F�K����*�3��6)����IEND�B`�images/leaflet/marker-icon-2x.png000064400000004640151161767210012704
0ustar00�PNG
IHDR2R!w��PLTELiq3y�6�8��7��.k�3x�<��7��8��7��4��6~�4u�.l�6��0w�3x�6��-w�1t�.k�5~�6�2u�4{�6~�5|�5z�7��.l�-k�1t�5�2u�2u�1s�.l�/l�0q�.m�0p�.m�.l�2v�2t�1j�.l�-l�.m�.l�/l�.l�/m�.l�-l�-m�.l�6�.l�+m�.l�.l�.k�7��4~�.l�.l�D��0��:��/��.��.��A��-��+��+��:��*��<��=��-��)��(��;��'��'�%~�8��$}�9��#|�8��!{�5~�;��
z�6��y�3|�(~�x�4��w�6��1x�v�u�1x�&}�3��/u�1��3��1��0�1��.t�/}�.r�T��N��5|�0q�/o�4z�P��3x�W��\��2t�V��Y��J��E��0p�Q��N��K����>��^��3w�[��G��6�G��B��2v�\��=��7��=��3y�P��7}�:�<��1s�7y�2s�H��L��R��R��M��O��E��T��Y��J��<��9��={�G��A��7��A��C��0q�s��8��J��6��N��;��K��5��=��8��?��4z�J��E��D�����H��B��I��F��A��2��U��/n�:����~�����?��G��F�У��B�����X��D�ϥ��1��G��>�е��K���������7�����?��S��N��R��d�����_��c��@��G��F��@��]��S��^��B�����4�̴��`��8�͍��C��3��^]��CtRNS7So����D&��a�����,���Ǐ�w�����>G���j��w��6�$\�R0Ħ����
�IDATx^���rG�^�!D �Ʈ
cpI/��x���qs�9'�s�䜃s��³�� ��SS��3�ӻ����9T�~���_�tՍ��?�o-UWݼbܽe�n��s�G����_iT
[:�o�˯V�]'�ީr�,_�xޔ���ڷn�d��3�3)�dZ�����&�n��9{���e�Gm1�,I�Z�tnf�xZT�5
�l6ϻ��7�-<�ؚj@U�m(����ͷXK�|v���ZuT-���.W���\��^۩ʃ;f]���$'p�|nWBg���]�� �]�5�!������]��W
�$�J�i(n�����O%��INRt��ry��$/q�u��Q��u+��ܕ[*ϓ���c
�=��q��c��o�������G1Y�87ݒ���r�ǘr�A+��ȉ��l���tM�|s��(����٫g�����i�D�q�8�;�T:X����
(S�Ǿ!�����iZ�����ڍד����%�߱����,�
:�A��PK��0Txl6� ± �6�!Ӌ!8l��
3�`��O)y8��@4�%`�y�P厓�Јs3�fpΩ�xb� ��Zu���\ـj�9p^�Hl�&t�s�P�S���6�y�.�0#}#̄�ox͏B��(-��AGX�l�^`d���ju�i$���ˌ:����L�EA�D���+�Ѩ���b�z���zQ�G�ѫՕ[�������m��(�ɂM�&�w*?���H��
�����A��{�'�o�9I�O�I^G��42������t/�H����
��I.jB��/�l,�&5�W/����p*>YL�THs)��M �x�_X_<~#BQԓ���h(JX��{+2��H��(jE��]�'˲���4�Y^(E#�
E����n@�m?(ھ��n|
�����-�L�^9vw����d,��b�
?�����I#�8�8&��1q� C$*6�%��b�@[���)�UQu��I7'�415�o`lrM��z�Mݛ�:�N�
�&�����$O�>F�ߪL��-�2����Ӫ�1B
��U�?���]��1N
���_�Pn�"�GMOp�i���[M��I�/,j�KG���)����ė�4�3��2�g�i�2���Z<Oq�0�e[1�9���12\�V�YiFZ"��(��l��QzhXQ��6Xe
��s8S��7��F�G��w����Hx�L�����wVe��d�d�j��)��|�T��{�UU��Y#��� ���"K��3:,�j
�dmJ�$��|r����Z2�x�H$�O�%;=���f�u>���ٚD�K'�'�4w�~�7�'fZ6n�rЋs����eyވ8bK�2���(l�Y9�ǩ
d?6e��:F�Y�3#�k,r��cD\���-f�w��'r��R~W���=��ո�)�f�ݠ{Ҿ���KE�=D�ʔ$=S�J�4=�gŃ��n����H�ݖʅB�̐�ֻ-�uED�f��J��q�Q�r�1���c`��0��Q7��y�+Q
J� !��Gݚ�%��W@h3)IEND�B`�images/leaflet/marker-icon.png000064400000002672151161767210012360
0ustar00�PNG
IHDR)�����IDATx�W�cY�څ����i�k�L��c�5��dm��x���f��U�^���=�<'���2��v��nX�0E���h��v*
��#Uj���*�i�G|���F���0�Z?��i�(�,'+��*�С������y��3�����.'�5�:�8�n@��)�ȵtv8~��Ò?����Nś�l�:��h����
z1� E���ڵ�vf���E�&7�M�!>�y��3<��)��e:��d�G�ߡ��b��)����*J��.Zw�h���ѵ�>�6Ŵ�(z4Ў�M����m=��m��-{B]��#���=���\>��1(QG����G��l�O^��%VD�]w��p���+��E����6l���M�]M��lW���r�}]c����I��JV��,���D���FA�+H��J}�;>z�>��O�p��
K6{G������e�U�����Gv3.笥����X߀�3
խ���T����gF�xUt�6v.����c�wӽ5t�q�{�u=�5l��:x�ϓ�.�.��JQ�n�489$tx)�f3���O}��������牳�Jx���ArӠcB���oST�%�~���8g��نaAYY��:ڟn�P$�{3EVm��6Ϙ��� ��!���q�R�:8`��.R,���|9���I�7�q�b��/X?xH�ݫ�Ӻ�V�-�Õ��2w.-��}�a#�8?!M��F1*|�܅�һ�x�7-���;�%�3��*;y5�b����.J�/%if+U�k�8�<�O��u��"L��Z���$���A�
��͒�5�@̖��7��?*<�囎����)��ę���6/�$��j'չP��v�2�|��}���]�R̿���$u��嶀�|��S�?��D��r\h���s�-
@$���y�}_����L���tܡ�M���M���N�FSX��t����91��q�x��Ep�.�U:�V�u�6F��M�ߒ�:�W�i�K���m�|s��@��Y�|�7M��$��є�
I��n*�N
���ȟT��
�u�$7��G����"r�]g��(u[I<�I��-�s��,R��p��q1��tm�Q@;�q��ѿ>�ܸpj���$4�隂}��v�#���h�ˢ�^����:�*�[G;��)���뀻��i�HJ6ҝZ;]���_g'���4��E�[� aj�y���e��u��q3�K��'�������?Sk��ήJa����Ŭ��xt�]�ǹG}�G��D�i�J�g]`�;i��Q�>�"�h"�Y}yN7�_5�>0a�IEND�B`�images/leaflet/marker-shadow.png000064400000001152151161767210012705
0ustar00�PNG
IHDR))i�}1IDATx�҅��@�
3��33�
s�Ҕ������p�T~�N��ܐ7d����~��_������"cP\�
�W��Aq�4�^ �W�$Aq�C�Q�_�R�Cfd7&�d՚�H͞_i�8�H�n���I���0bG�i(#T!�F1� 2�o�D$G��)��ɸ��*��� /��etԀZ�P��Hu����r�e��Q��-��ʘ"��~���aK,�Y��vG%�����Q������t���+˜Sd+^�Q�/0&�����MM�<�8����k̸��$��M
��c�.�
u$G��:I�q�}��i�D\ȷ�Dt�~�@���jKe��W�zRB�p�8�|�\Ŕ�$�zR��%)�C9���fR(E�W@���],WK!����~�Rt��r�H�A˄���P�À�a{�Ad$ٱ�+(R�g��Z��dG"
\��4��b�'|�|&y$�):0"�q!�P�;>�彁_ِ3����L5N��=�S�
����@`D�
�h���c�Ƨ��ġaM^�q����#�R�t�_�3�8�@bIEND�B`�images/mail/footer.png000064400000000742151161767210010751
0ustar00�PNG
IHDRX("ۄ4sRGB���bKGD������� pHYs��tIME� �!�bIDATx���-NQ��;�bIwQ*
���b]������i@V��!3�Ò�ˏ8G����1_�K[�R�<{V
���@`,���X�
���@`�W#+~�z�����)"w1�Գ�m㡾=����,���i�8�Y�A\�G�ˮ﵉Euuz��,�d@`,���X����;�+&�l�1g�͗Qe����5k�WU)�H�
Yuq}� Ѩl�@j`m��-d��!�R�l 3��N`�V��
7�\��_$��
7��`��-AF�y-�IEND�B`�images/mail/header.png000064400000001743151161767210010705
0ustar00�PNG
IHDRX&��rsRGB���bKGD������� pHYs��tIME�8����cIDATx���Kb�@���� r��)��Lw��l����c���Z#��_?�^9K��!3Y��.a��*�
�
c4
��Y@#��F���oI����I,
��
L�L��2#sI�r��$Q/�%�v��|�a���Z% H���(iaf%��2�li��{�-3+)�K�D$�����K��볞��5�"sμ�0�q�w\��^)�U��Ak��r���k*p5�Ң�����SO��̰�k��2�*if52����w�)����|�.�����%���jbf��Bɽvo�LҦ�d̳ʱ��>�\?d�l)-�ƕ:���u��缜G���Y�%�v��,���r�Fx�f�A���
�S�A5)�~i��]�s�8�T#�E�Ȓ]����e~�(c����e�tt�EX�4��oR��Wm�-_�e�$�y-3:Z��C�b����f&o2r:I��c����EZ�g��7fI�8x\�-�4���a�.�۵rYk���?J�x@GO
혱)a��q�dg��}a�h�<��^�\GIn�Lc�fNkS^�@����-;>���bFZ���/��9/m��j|���G�Ŕ�0��C+�2��ˎ���,#�^���)�'����>b?��}P}��eM���(��[F+�C��g�$iu$��q��sb����
�v�O�잽���Mk}XKʵ�'�<�zyn��P�e�֣�C'[Q��j�/��y\��`)�o�w�o����^�͛��Q[�{7�7{���,v�k#��̂�~��9\�99F��)�;��8Y@�AȻ��n�!��
d4
��F!��P��O��IEND�B`�images/mail/index.html000064400000000032151161767210010732
0ustar00<html><body></body></html>images/otree/empty.gif000064400000000070151161767210010760
0ustar00GIF89a�������!�,��������ڋ�ޜ;images/otree/folder.gif000064400000000564151161767210011105
0ustar00GIF89a�������۷R̙4�����q*����l��"�jɖ1��%���g۷q���n˘3����~Œ-�uǔ/����s
���yȕ0��(��Ʈ|�h�v�z��o���������u�����������!�.,�@�pH,�Ȥ�5L�@9`Y)�az@`0���D��pbm�ۣϐ�:���1Ĵ���+C-%���-�B-*���- �.-)���-�
-(���-!�
-$���-|Bg
" C+���D&���RKJA;images/otree/folderopen.gif000064400000000570151161767210011764
0ustar00GIF89a����s
���̙4������h�n˘3ɖ1�l�j���������ƚ��z��%Ϣ&�u�~�C*�p
������@ڿl�넙g����Pɠ!��p�r�ׄ��"�qȕ0��Ƭz����u����붶����ƚ���������!�5,���pH,�ȤR8
(�@9�YKaz�ʾ_ZĤ�`(�!�n[���0A���x٤!����~!'/}3mm31%�51�xw21#
��-���"��2+��+�5�3,���|B���$
D/���E.���RKIA;images/otree/index.html000064400000000032151161767210011126
0ustar00<html><body></body></html>images/otree/join.gif000064400000000105151161767210010560
0ustar00GIF89a�������!�,�����(��,�G�j4�bI����A;images/otree/joinbottom.gif000064400000000102151161767220012003
0ustar00GIF89a�������!�,�����(��,�G�j�H�扦F;images/otree/line.gif000064400000000102151161767220010546
0ustar00GIF89a�������!�,�����(��,�G��}W(Nd��h;images/otree/loading.gif000064400000002660151161767220011247
0ustar00GIF89a���������������������؞��������222RRR��즦������������������������DDD```�����輼�***666FFF������<<<NNN>>>HHH������ZZZ������ppp���������^^^\\\bbb������~~~������,,,VVVPPP���888XXX�����֜��������@@@���$$$
���rrrJJJ444jjj�����&&&|||BBBTTT
������LLL������fffhhh��ܠ��"""!�NETSCAPE2.0!�Created
with ajaxload.info!� ,h���
"&%��! (�� � )���#'*��
��������$�� ��
��ҩ���։����$$��%��с!� ,k���457���3 /9:=9�+//�8; ;0�,
2.6!� 5�-)1�<><2�.0��0?
���%$Ă$%������҃�Չ���ǂ��%��ȁ!� ,h������ %*���@A &E�
8>�F���BC4G��D��
"&%�$�!�(���)��#'�˹��ӂ�Ղ���$���%��с!� ,g�������%%���$$DNR��I Q���HJOS��0��457%��3 /���/�8��.6��FP��K L0���!� 5���L T2���MQ��!� ,h�������%%���$$��������������� %����
�NE���+VXV����
"&%U>�F��!�(GWYB[��)GZ�#'*��!� ,g�������%%���$$������������%��$������P�]
]�F !�DS,�\ �)457I `�C <23�/^_�MQ2/�8�.6��!� ,g�������%%���$$����������
"&���! (�$��)��#'*��+NR�AOa��6����a\Y3��͂[ZH��
��!� ,h������b=J�%%��Fc L$$��\ �O���d>"2��0?1��457��3�/�$�/�8��.6��2ǃ%B+]��,
�����S_SD���ڏ���;images/otree/minus.gif000064400000000126151161767220010760
0ustar00GIF89a����������!�,'�?�����Z�"�M3��"�e�*��:,k��uM�ܺ��;images/otree/minusbottom.gif000064400000000125151161767220012204
0ustar00GIF89a�������!�,&�/�����Z�"�M3���e�*��:,k��uM���z^;images/otree/nolines_minus.gif000064400000001535151161767220012514
0ustar00GIF89a�������!�,:H����*\�0�Ç
�
E�f�8�G�6j�Xq$F�!BdȲ�˗0;images/otree/nolines_plus.gif000064400000001546151161767220012346
0ustar00GIF89a�������!�,CH����*\�0�Ç
Q࿁fpQ�F���9�c��KV�q%A�/!BdH��͛8;images/otree/option.gif000064400000001103151161767220011131
0ustar00GIF89a�L(((555888999CCCDDDEEELLLOOO[[[bbbeeegggkkklllnnnqqqrrrttt{{{}}}������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!�,����������JJ��&HH��ED6II6?��;KBGCCFCJ9�=>33><
�-C.�/A*�78@;�:>85�4412�3240�+��*,�((,--,()�'
&!#$"& )�"%�(��Ёt������
�3� ;images/otree/page.gif000064400000001106151161767220010540
0ustar00GIF89a�������������������������������kt���^a�U�퓪�z�������턛ʊ����꒼�s~���������������mw�ej��������匮������gm����}������������ip�oz�r|�t�������������붶��ux�������!�A,��A�������.6��65�@
5��0@� 15�'�"5�/�(�<<)9�,��<??4��%*
�>>�73ʄ�<��7
#Ճ��?788߂&����2�A-�7�+���B��ף���*@`�Ç 0
���/vB��P
;images/otree/plus.gif000064400000000131151161767220010604
0ustar00GIF89a�������!�,*�/�����Z�"�'�h�n�y&���g��S��uM:����+;images/otree/plusbottom.gif000064400000000130151161767220012030
0ustar00GIF89a�������!�,)�/�����Z�"�'�h�n�y&���g��S��uM��~_;images/otree/world.png000064400000001343151161767220010775
0ustar00�PNG
IHDR�a�IDATx^��mHSa��r�eV,!L�"+
�0��>h��P�0)RXR B�3����%�A��6���Ӆ3�2���m�Z�Y������;�
va�����=<�s�a!"l�[�^朽!�{�mX�����
x���F�H��
b��>�+��U�7�T�+�(Z���ǖY�u��S� �]D����ΰIX!2`��~�b�̂F�y4a��+!����i7�
t�*�jq�.V~yF<��O���
��vx������6��ű\$�T;lLb�PկW�� �2{�mʄ�f,h1�[�=��g�FWQM�{�Vl7t0;�Y��s��H����
|~�$��n���!).
�
>
(��6-�H�=�1åDG��[�=JS�egҍǗ�2:���D���r�#\x)��z6��|�X@zᕷsF�F�����
�e�BQ��z��=�"ś��9��g[���ql���݃AZ��V�}�ip��ܛT^?�m��
��.,{%g��P^'Tb먶��D7����'�$�/��ڄ��1�b'
�#�gFl@#�ܑ��?�'R�d5 �:>&��Eْ�!�̘��=V��Q����{��,QH�F��L��I��S;�J��/��;��ц�1�VWtE����u�q���y�#�/<�[�8��D�KSx|IIEND�B`�images/progress.gif000064400000001662151161767220010361
0ustar00GIF89a&�
!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!��,&���Y�G��#��@�&\��aD�
Vxaƍ/R�ȱ�ȍi$�J�FZSࡋ3k��)�
͚<{>� 3���ES��Ԍ�1O�J��ũէS�>�z�T�R�t�
6�خ_˞E[���1Sڮ�
W�X3q�ޭ��m@;images/progress01.gif000064400000000301151161767220010507
0ustar00GIF89a&�S�!S�$X�*[�0`�8g�=j�[��\��^��b��g��l��o��s����!�,&n�֪mN%$��W�m��WN'���I�l;�-���Ӧ���,N���(���f� �Z~��n5x�x<&x��0�lF�k���n��ϫ�}g{|to�{�g������_;images/spinner.gif000064400000003041151161767230010165
0ustar00GIF89a�?
%%%666DDDLLLTTT[[[dddlllttt{{{������������������������������������������������������������������������������������������������������������������������������������������������������������!�NETSCAPE2.0!�?,�����n
��RC�~o�Y-1����J��eF�$�v1_oa��SFr��29?, 8:BS".J#EJ')C-W7"#
,W6C.&>K,�C9!;K
6?>$�'75-8)�+b1)#/(?5)�?:>!?!4W1/?
>8�K>�?$�:IBA!�?,
X��p��$zD�+��!=�3�����~/�T))@B�X�r
��C Ȅ���� w6D(>IB$0�B1�D3,�?:%�A!�?,Q��pXi�B��c~6CY[@~�g#�l���A������PT:ȆE�~'�F�D2:C<7
>B.%HMC"3�1WBA!�?,
O����L�H�,�M?ܢ��U2?
4B0%Y���*@~7�j��P�/D�~���<I�G��.
�j�?HA!�?,Z����� ���T��
�#���6��%����%,�V$G��0 =ݣ�
����][
w-w"{?>JH).{?(<{�?A!�?,P��o�Y �_);^d��O�X�ʱ8"��$�
g�r�)�12��D��b8
?*=B1f.�f6^A!�?,
O��p��ňB,C�w�ȅ���FU!�2�d�2��1A�H�ߢ�x�$-������
@~-X=? ?(D�0D
=?NCA!�?,
V��pH̸��S
ɼ�>�SH�T.��YB8dDA��6����
)h��B� d���+�h ? ?,C"+?=2"C=a�<?:DA!�?,Q��p��
�X��?��XS�'��HL!��
6Ԥ�Ӱ~�_�H)@�Z�J �?
0P'??
>5qG>7BOGA!�?,
N��0� �BE�p
!�C�zZS+�䞞_�`�����~�ꩠ�8V�H�(?4G.M??6zG_?HA!�?,
U����3��ȟ�!B�_��vѣ��u
�SV1 FY�꓾M
ݘ�]>�Z�X*�X
"/I8??PG/)??8i$>?A!�?,S����W��W���O�\~AWP�~(�9�Fñ6�j�s�|�G��
!
5!'7?&*?0)#C:?!C1/?
A;images/spinner_02.gif000064400000014616151161767230010500
0ustar00GIF89a@@����DBD���$"$dbd��䤢�TRT���424trt������
LJL���,*,ljl��쬪�\Z\���<:<|z|���������������DFD���$&$dfd��䤦�TVT���464tvt�����LNL���,.,lnl��쬮�\^\���<><|~|������������!�NETSCAPE2.0!� ?,@@���pH,�Ȥr�l:��$/��xѬvh���jKv6H`0LVn'Y�4��9�x�f�W�i4}Z<XC5�`8G-'&�D63 ;9?7�F&_0�?
3�-��Ei�v0�9hz1�B<�i-}
��:+q5G^`7�m�`/�88�C
`}<�_$�I2%=��`��P-�_�Px�.����7fP�(�ݠc�C�N�C�C��J�q�±D�A�C�
��x��O�EQ8�БF���dxH�P�j�lSǍ|����>�G�+N�Ȉ�GG�Y7�@GCdX#4�Ka�쐱�lp[DA\0l�q`�#��/)���"�%&�~Ѡ�r�!�@7��$= 2�n��D��uZ�����v2�@: \ŰR��2���
$�m�1n�C^�Q9�wA#��8�`�昀�E�2<j���q�f|��B�
Yj��@�
4$d��=��EQ�~wX�C4t�Kq�pV\}�:2SVp��S�R�qaS
����9Y��H���@
��"
,��C %�#Q"�1��Y�l�-�3i�X$-|��
ܴ�Ni�Xf��C!� >,@@����DBD���$"$��䤢�dbdTRT���424������trt
���LJL���,*,��쬪�\Z\���<:<������|z|ljl������DFD���$&$��䤦�dfdTVT���464��tvt���LNL���,.,��쬮�\^\���<><������|~|�������@�pH,�Ȥr�l:�ШtJ�Z��A�v�2q$��:�x=:�}����>��bI�a���E::EarH%6b/�1(
�B
k(G7r�g49xb'C+8H:3x,n,�k�Or6�^0�rP;r&n:�k/�O2'�n4�r
�R�k�Q�b��O:��u:�N�\g,+&�K:1�B0;��;T)z��&��
0.�A�ߕ8rnPa!�@� ���
gG�.4n�X��x.cʜ�f�
�Qt(x���Z(ę�F�b+M�����a�܋�XX<��[�08D�L*p�
@�����svP�X��.�g��)����g6ВKI��Ϩ�
�~����~�J���m��2�Ն�?�^L�CЦ�W3rx�m#]+T$a��.`ot�c�
�)����Bt��@CyAhH7B�8CYXs�s7�����������T��_�
��D��u�*��`#(F,���L7�`X��ɑ�wT�e�;B���$�N`Q��N���T!��h�p��H�]�&1�@b::|�
*<<�7L ��(�
5���`�A!� @,@@����DBD���$"$���dbd������TRT���424���trt���
���LJL���,*,���ljl������\Z\���<:<���|z|������DFD���$&$���dfd������TVT���464���tvt�����LNL���,.,���lnl������\^\���<><���|~|��������@����������������������-7���9���?<��#��@�������9'��$�6�8�0��
�(��:�?̋*,;�?4�/̼>��=(�)����%�3L,��U�a���4|Q����')��^`���G?j�Ţ�d5�����n��P�R,Y:zR�!@V��n��RK�J�J���/^�zh�
�P�谕���@Ǖ��
E���C�G⮒Q��0
�����>��f��!C�q�* ^U��OY
1�@����20���S�py[d���W���Q��.je����m�Fl�o�R�ȱ⮣`�Rx��E�p$��膈�2�^��!.
>����� }ر��+����Z9��0�B��Q�d,8W���S@V�h/���?��vZ-�!����)�2��&�Q����p�e抆���"��BMiK���)��fA
�)f�$�q��M��.V� ��378�ҘA d�d%>p��
?t CZ�`�jؼ�b$�Y�;�p��
]NC���*:y(,)��� �p棘�!� >,@@����DBD���$"$dbd������TRT424trt���������
LJL,*,ljl������\Z\<:<|z|�����������܌��������DFD���$&$dfd������TVT464tvt��������LNL,.,lnl������\^\<><|~|���������������@�pH,�Ȥr�l:�ШtJ�Z���v�2;$��;�x=:�}����>��X�ap��Mar3H6b0�LrGr
;�K)*=H;x-�
<9S;r�u:(k.�Pr&�x�R3%��!�$�U3��T���R=�Ɍ;�R�4�-!*&�O;4
b
,�;rU;5
�g
x�Uxn���C��ԸaAE����A�H��Ŋ5LdXࢇċCZd��GD�G�p�htP�fG
gbT[�!�I1*���s��%;n�q�̂�b@4X��Y��Sb@#T�$g\�h�J, ����ۚ6��cS���*��b؍�j�%-V�A���!�7�
i�@��N��f�=�x��
)�Xe�
.&���A��"5�QQ�Z�^X&��H�:�\#C�!���l��O<6J��!ck�KsqBZ�@�K���p��K4�Cǥ�LW�#�[���~� ��l���
Jm����1�D4��$|M
�8C\C`��
)��n���� ��S��"J;�
x��D
pPB
8p\�Di�A!� =,@@����DBD���$"$���dbd���TRT���424���trt���
LJL���,*,��쬪�\Z\���<:<������|z|���ljl������DFD���$&$��䤦�TVT���464��tvtLNL���,.,��쬮�\^\���<><������|~|lnl���������pH,�Ȥr�l:�ШtJ�Z��Kv�21���8�x=:�{����>��W�a���Mar;H%�9�L,rGr18�K(*6H81x+�:<Tr4�u'k.�P#
k�x&S0��!�$�+6�R;�o65b�P��g
�x.�N6ƫg0�.�N�3g8�btO83b1,n��p"2d�2�`�.��Tp�YD')R��D��8Bi-�A�Mp���JZ l���K(+((�ɳ�L�p��TUXA����NN�H4�`�BA����a��F;oLLФ�1X�8��(����v��#I�m3�a��% �A4#cW�M
{�ʁ�6��P���`z\��i�5*�.���*w�q��F{:�1Bo�%+�s�o#��"Q����L:"Cf�(q�0�`�W#9��E^�L���N1yEP��1X�N�
�E�0Pe�bB0� :�Y��h�X
",�YDBV
*�@
���
7�!B{D��_<�� �8]*�8�8��Q!� ?,@@�������DBD$"$������dbd������TRT424������trt
������LJL,*,������������\Z\<:<������|z|ljl������DFD$&$������������TVT464�����tvt������LNL,.,������������\^\<><������|~|lnl������pH,�Ȥr�l:�ШtJ�Z�����u:�kG
7d�0����ә�"��~7�bsO}f9E+�w'�M&�#E �}*�Le}>D<�}r�I
w&D��w;�K1+8E)�w�%=P��y�'w/aM6�
��%O���!�$�L���s>��N&3�$�E<5�Pڕ�N-(:/:`t(�"30����
{N��1҂O���PD�ԃP���``fR5NU��ɼ-�h�b!,*Z��y�Q�+
=��JB�*��Aq�J��@L0��
-xV�ʵ�ׯRp�0�@�H����*�xp;�CwV��)!��!�KjA�-��5��/ZQU���91�:�Ģ�x�x�hZ��P��45�.�P2?�Ȇ�&-BP�|N�����i3+�Ѣ�M:n܈����س��l�-��,{��PHܕ�|(G�_�*���2F�K\y�����V-X��
�"p�jGԠ[!��A+�5�A |@�wW��";�w����-@��HP���@6�7Q�@)�D�!� ?,@@�������DBD$"$������dbd������TRT424������tvt
������LJL,*,������ljl������\Z\<:<������|~|������DFD$&$������dfd������TVT464�����|z|������LNL,.,������lnl������\^\<><������������pH,
M�ק�0:�Ш�h9�W��5�z�v�Y����C#�i���q�C��Dz�\F>zj~nD<2��]&�dC50d!��Q6�cB
v%�R(�WB3~$q�P;�2?.�~:�P
��?�"�B6&?>/�5B�����W)>+��>����d�> �X9�=~�!v�9;J4)�#�t�n�1�F�v�@�)�B9>(���"�D5:z�!�Q�cfD��
5`ĐYQ��}�H�,��
8��g��d�&�y�T�47
l4%dbۘKS I�1���z\T��سhӪ]˶��!4�@4�u�xY�b�/>�����cH��ψ�j�i����4����!��|�������X
�ޗ:v&`��A���^\�����O��00~<�
R@jN��u�>,Ȱ����f��.��l}t8��(��$X�3���Y�6��Tر�Z
`������!�a�p���Y2�5�p�
\x����}`V�
�9c�0Y�Bx(p�4B�Aw=)�D!� ?,@@�������DBD������dbd$"$������TRT������trt424������LJL������ljl,*,������\Z\������|z|<:<
������DFD������dfd$&$������TVT�����tvt464������LNL������lnl,.,������\^\������|~|<><������pH,�Ȥr�$nJ�MsJ����bT�`"�-|��z����>�z�$�������?,F8)�{F;003;;~f1D;>Z!R�?;#w.�e:Dw&;���e)C%~"{;��/�?(�5{7��D
�9zȧ#�?!�
z3�~
<�C��t��53(4G;-w�t
�L< Z
�sd�s1o
:��a�FAOS`ؓ��xb��B�d8�a��2+��x!-CH5�8����,
�`4c�������c�rT(��F�C4��&
$@Qb�^ÊK��ٳhӪEKC��Ʋ`�2\Z\�K#.��`��A��;D�9pɂI#��)pg�~�x�q����z�dD�)'i���
����#C��6a���k�0�W����Sv�
p#�m�УK�(��Ӆ�0PF���Hvp7�x�
�p�$�j7�/�n?*�B��
?���A����If�g��&
���C\d1��w��PC31`F!x<��xF��X=4��
�.�0�B찁�8���@�D;js/dropdown.js000064400000007014151161767230007365
0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
!function ($) {
"use strict"; // jshint ;_;
/* DROPDOWN CLASS DEFINITION
* ========================= */
var toggle = '[data-toggle=hkdropdown]',
HKDropdown = function (element) {
var $el = $(element).on('click.dropdown.data-api',
this.toggle);
$('html').on('click.dropdown.data-api', function ()
{
$el.parent().removeClass('open');
});
};
HKDropdown.prototype = {
constructor: HKDropdown,
toggle: function (e) {
var $this = $(this), $parent, isActive;
if ($this.is('.disabled, :disabled')) return;
$parent = getParent($this);
isActive = $parent.hasClass('open');
clearMenus();
if (!isActive) {
if ('ontouchstart' in document.documentElement) {
// if mobile we we use a backdrop because click events don't
delegate
$('<div
class="hk-dropdown-backdrop"/>').insertBefore($(this)).on('click',
clearMenus);
}
$parent.toggleClass('open');
}
$this.focus();
return false;
},
keydown: function (e) {
var $this, $items, $active, $parent, isActive, index;
if (!/(38|40|27)/.test(e.keyCode)) return;
$this = $(this);
e.preventDefault();
e.stopPropagation();
if ($this.is('.disabled, :disabled')) return;
$parent = getParent($this);
isActive = $parent.hasClass('open');
if (!isActive || (isActive && e.keyCode == 27)) {
if (e.which == 27) $parent.find(toggle).focus();
return $this.click();
}
$items = $('[role=menu] li:not(.divider):visible a',
$parent);
if (!$items.length) return;
index = $items.index($items.filter(':focus'));
if (e.keyCode == 38 && index > 0) index--; // up
if (e.keyCode == 40 && index < $items.length - 1) index++; //
down
if (!~index) index = 0;
$items
.eq(index)
.focus();
}
};
function clearMenus() {
$('.hk-dropdown-backdrop').remove();
$(toggle).each(function () {
getParent($(this)).removeClass('open');
});
}
function getParent($this) {
var selector = $this.attr('data-target'), $parent;
if (!selector) {
selector = $this.attr('href');
selector = selector && /#/.test(selector) &&
selector.replace(/.*(?=#[^\s]*$)/, ''); //strip for ie7;
}
$parent = selector && $(selector);
if (!$parent || !$parent.length) $parent = $this.parent();
return $parent;
}
/* DROPDOWN PLUGIN DEFINITION
* ========================== */
var old = $.fn.hkdropdown;
$.fn.hkdropdown = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('hkdropdown');
if (!data) $this.data('hkdropdown', (data = new
HKDropdown(this)));
if (typeof option == 'string') data[option].call($this);
});
};
$.fn.hkdropdown.Constructor = HKDropdown;
/* DROPDOWN NO CONFLICT
* ==================== */
$.fn.hkdropdown.noConflict = function () {
$.fn.hkdropdown = old;
return this;
};
/* APPLY TO STANDARD DROPDOWN ELEMENTS
* =================================== */
$(document)
.on('click.hkdropdown.data-api', clearMenus)
.on('click.hkdropdown.data-api', '.hkdropdown form',
function (e) { e.stopPropagation(); })
.on('click.hkdropdown.data-api' , toggle,
HKDropdown.prototype.toggle)
.on('keydown.hkdropdown.data-api', toggle + ',
[role=menu]' , HKDropdown.prototype.keydown);
}(window.jQuery);
js/hikamarket.js000064400000043072151161767230007655 0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
(function() {
function preventDefault() { this.returnValue = false; }
function stopPropagation() { this.cancelBubble = true; }
var Oby = {
version: 20170309,
ajaxEvents : {},
hasClass: function(o,n) {
if(o.classList && o.classList.contains)
return o.classList.contains(n);
if(o.className == '' ) return false;
var reg = new RegExp("(^|\\s+)"+n+"(\\s+|$)");
return reg.test(o.className);
},
addClass: function(o,n) {
if(o.classList && o.classList.add)
return o.classList.add(n);
if( !this.hasClass(o,n) ) {
if( o.className == '' ) {
o.className = n;
} else {
o.className += ' '+n;
}
}
},
trim: function(s) {
if(s.trim) return s.trim();
return (s ? '' + s :
'').replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
},
removeClass: function(e, c) {
if(e.classList && e.classList.remove)
return e.classList.remove(c);
var t = this;
if( t.hasClass(e,c) ) {
var cn = ' ' + e.className + ' ';
e.className = t.trim(cn.replace(' '+c+' ','
'));
}
},
toggleClass: function(e,c) {
if(e.classList && e.classList.toggle)
return e.classList.toggle(c);
var t = this;
if( t.hasClass(e,c) ) {
return t.removeClass(e,c);
}
return t.addClass(e,c);
},
addEvent: function(d,e,f) {
if( d.attachEvent )
d.attachEvent('on' + e, f);
else if (d.addEventListener)
d.addEventListener(e, f, false);
else
d['on' + e] = f;
return f;
},
removeEvent: function(d,e,f) {
try {
if( d.detachEvent )
d.detachEvent('on' + e, f);
else if( d.removeEventListener)
d.removeEventListener(e, f, false);
else
d['on' + e] = null;
} catch(e) {}
},
cancelEvent: function(e) {
if( !e ) {
e = window.event;
if( !e )
return false;
}
if(e.stopPropagation)
e.stopPropagation();
else
e.cancelBubble = true;
if( e.preventDefault )
e.preventDefault();
else
e.returnValue = false;
return false;
},
fireEvent: function(obj,e,data) {
var d = document, evt = null;
if(document.createEvent) {
evt = d.createEvent('HTMLEvents');
evt.initEvent(e, false, true);
if(data) evt.data = data;
obj.dispatchEvent(evt);
return;
}
if(data && d.createEventObject) {
evt = d.createEventObject();
evt.data = data;
obj.fireEvent('on'+e, evt);
return;
}
obj.fireEvent('on'+e);
},
fireAjax: function(name,params) {
var t = this, ev, r = null, ret = [];
if( t.ajaxEvents[name] === undefined )
return false;
for(var e in t.ajaxEvents[name]) {
if( e == '_id' )
continue;
ev = t.ajaxEvents[name][e];
if(!ev || typeof(ev) != 'function')
continue;
try {
r = ev(params);
if(r !== undefined)
ret.push(r);
}catch(e){}
}
return ret;
},
registerAjax: function(name, fct) {
var t = this;
if(typeof(name) == 'object') {
var r = [];
for(var k = name.length - 1; k >= 0; k--) {
r[r.length] = t.registerAjax(name[k], fct);
}
return r;
}
if( t.ajaxEvents[name] === undefined )
t.ajaxEvents[name] = {'_id':0};
var id = t.ajaxEvents[name]['_id'];
t.ajaxEvents[name]['_id'] += 1;
t.ajaxEvents[name][id] = fct;
return id;
},
unregisterAjax: function(name, id) {
if( t.ajaxEvents[name] === undefined || t.ajaxEvents[name][id] ===
undefined)
return false;
t.ajaxEvents[name][id] = null;
return true;
},
ready: function(fct) {
var w = window, d = document, t = this;
if(d.readyState === "complete") {
fct();
return;
}
var done = false, top = true, root = d.documentElement,
init = function(e) {
if(e.type == 'readystatechange' && d.readyState !=
'complete') return;
t.removeEvent((e.type == 'load' ? w : d), e.type, init);
if(!done && (done = true))
fct();
},
poll = function() {
try{ root.doScroll('left'); } catch(e){ setTimeout(poll, 50);
return; }
init('poll');
};
if(d.createEventObject && root.doScroll) {
try{ top = !w.frameElement; } catch(e){}
if(top) poll();
}
t.addEvent(d,'DOMContentLoaded',init);
t.addEvent(d,'readystatechange',init);
t.addEvent(w,'load',init);
},
evalJSON: function(text, secure) {
if( typeof(text) != "string" || !text.length) return null;
if(JSON !== undefined && typeof(JSON.parse) ==
'function') {
try { var ret = JSON.parse(text); return ret; } catch(e) { }
}
if(secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u
\n\r\t]*$/).test(text.replace(/\\./g,
'@').replace(/"[^"\\\n\r]*"/g, '')))
return null;
try { var ret = eval('(' + text + ')'); return ret; }
catch(e) { }
return null;
},
getXHR: function() {
var xhr = null, w = window;
if(w.XMLHttpRequest || w.ActiveXObject) {
if(w.ActiveXObject) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {}
} else
xhr = new w.XMLHttpRequest();
}
return xhr;
},
xRequest: function(url, options, cb, cbError) {
var t = this, xhr = t.getXHR();
if(!options) options = {};
if(!cb) cb = function(){};
options.mode = options.mode || 'GET';
options.update = options.update || false;
xhr.onreadystatechange = function() {
if(xhr.readyState != 4)
return;
if( xhr.status == 200 || (xhr.status == 0 && xhr.responseText
> 0) || !cbError ) {
if(cb)
cb(xhr,options.params);
if(options.update)
t.updateElem(options.update, xhr.responseText);
} else {
cbError(xhr,options.params);
}
};
xhr.open(options.mode, url, true);
if(options.mode.toUpperCase() == 'POST' &&
typeof(options.data) == 'string') {
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
}
xhr.send( options.data );
},
getFormData: function(target) {
var d = document, ret = '';
if( typeof(target) == 'string' )
target = d.getElementById(target);
if( target === undefined )
target = d;
var typelist =
['input','select','textarea'];
for(var t in typelist) {
t = typelist[t];
var inputs = target.getElementsByTagName(t);
for(var i = 0; i < inputs.length; i++) {
if( !inputs[i].name || inputs[i].disabled )
continue;
var evalue = inputs[i].value, etype = '';
if( t == 'input' )
etype = inputs[i].type.toLowerCase();
if( (etype == 'radio' || etype == 'checkbox')
&& !inputs[i].checked )
evalue = null;
if(t == 'select' && inputs[i].multiple) {
for(var k = inputs[i].options.length - 1; k >= 0; k--) {
if(!inputs[i].options[k].selected)
continue;
if( ret != '' ) ret += '&';
ret += encodeURI(inputs[i].name) + '=' +
encodeURIComponent(inputs[i].options[k].value);
evalue = null;
}
}
if( (etype != 'file' && etype != 'submit')
&& evalue != null ) {
if( ret != '' ) ret += '&';
ret += encodeURI(inputs[i].name) + '=' +
encodeURIComponent(evalue);
}
}
}
return ret;
},
encodeFormData: function(data) {
var ret = '', v = null;
if(typeof(data) == "string")
return data;
for(var k in data) {
if(!data.hasOwnProperty(k))
continue;
v = data[k];
if( ret != '' ) ret += '&';
ret += encodeURI(k) + '=' + encodeURIComponent(v);
}
return ret;
},
updateElem: function(elem, data) {
var d = document, scripts = '';
if( typeof(elem) == 'string' )
elem = d.getElementById(elem);
var text =
data.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,
function(all, code){
scripts += code + '\n';
return '';
});
elem.innerHTML = text;
if( scripts != '' ) {
var script = d.createElement('script');
script.setAttribute('type', 'text/javascript');
script.text = scripts;
d.head.appendChild(script);
d.head.removeChild(script);
}
},
ease: function(v) {
return 1+Math.pow(v-1,3);
},
easeInOut: function(t,s,dt,du) {
return dt/2 * (1 - Math.cos(Math.PI*t/du)) + s;
},
scrollTo: function(name, anim, visible, margin) {
var t = this, d = document, w = window,
elem = d.getElementById(name);
if(!elem)
return;
if(margin === undefined) margin = 0;
if(!anim) {
window.scrollTo(0, elem.offsetTop - margin);
return;
}
if( t.anim && t.anim.timer )
clearInterval( t.anim.timer );
t.anim = { timer:null, s:null, dt:0, du:500, t:0, inc:10 };
if( w.scrollY )
t.anim.s = w.scrollY;
else if( d.documentElement.scrollTop )
t.anim.s = d.documentElement.scrollTop;
else
t.anim.s = d.body.scrollTop;
if(visible) {
if( d.documentElement.scrollTop )
h = d.documentElement.clientHeight;
else
h = d.body.clientHeight;
if(t.anim.s <= elem.offsetTop && (t.anim.s + h - 150) >
elem.offsetTop)
return;
}
t.anim.dt = elem.offsetTop - t.anim.s - margin;
var o = this;
t.anim.timer = setInterval( function() {
var a = o.anim;
if( !a || !a.timer )
return;
a.t += a.inc;
if( a.t < a.du ) {
window.scrollTo(0, o.easeInOut(a.t, a.s, a.dt, a.du), false, margin);
} else {
window.scrollTo(0, a.s + a.dt, false, margin);
clearInterval(a.timer);
a.timer = null;
}
}, t.anim.inc );
}
};
if((typeof(window.Oby) == 'undefined') || window.Oby.version <
Oby.version) {
window.Oby = Oby;
window.obscurelighty = Oby;
}
var hikamarket = {
submitFct: null,
submitBox: function(data) {
var t = this;
if( t.submitFct ) {
try {
t.submitFct(data);
} catch(err) {}
}
t.closeBox();
},
deleteId: function(id) { return window.hikashop.deleteId(id); },
dup: function(tplName, htmlblocks, id, extraData, appendTo) { return
window.hikashop.dup(tplName, htmlblocks, id, extraData, appendTo); },
deleteRow: function(id) { return window.hikashop.deleteRow(id); },
dupRow: function(tplName, htmlblocks, id, extraData) { return
window.hikashop.dupRow(tplName, htmlblocks, id, extraData); },
cleanTableRows: function(id) { return window.hikashop.cleanTableRows(id);
},
checkRow: function(id) { return window.hikashop.checkRow(id); },
isChecked: function(id,cancel) { return
window.hikashop.isChecked(id,cancel); },
checkAll: function(checkbox, stub) {
stub = stub || 'cb';
if(!checkbox.form)
return false;
var o = window.Oby, cb = checkbox.form, c = 0;
for(var i = 0, n = cb.elements.length; i < n; i++) {
var e = cb.elements[i];
if(e != checkbox && e.type == checkbox.type && ((stub
&& e.id.indexOf(stub) == 0) || !stub)) {
e.checked = checkbox.checked;
o.fireEvent(e, 'change');
c += (e.checked == true ? 1 : 0);
}
}
if(cb.boxchecked)
cb.boxchecked.value = c;
return true;
},
submitform: function(task, form, extra) { return
window.hikashop.submitform(task, form, extra); },
get: function(elem, target) { return window.hikashop.get(elem, target);
},
form: function(elem, target) { return window.hikashop.form(elem, target);
},
openBox: function(elem, url, jqmodal) { return
window.hikashop.openBox(elem, url, jqmodal); },
closeBox: function(parent) { return window.hikashop.closeBox(parent); },
tabSelect: function(m,c,id) { return window.hikashop.tabSelect(mc,id); },
getOffset: function(el) { return window.hikashop.getOffset(el); },
switchBlock: function(el, values, name) {
var dest = document.getElementById(name);
if(!dest) return;
if(typeof(values) == 'number') values = [values];
for(var i = values.length - 1; i >= 0; i--) {
if(values[i] == el.value) { dest.style.display = ''; return;
}
}
dest.style.display = 'none';
},
dataStore: function(name, value) {
if(localStorage) {
localStorage.setItem(name, value);
} else {
var expire = new Date(); expire.setDate(expire.getDate() + 5);
document.cookie = name+"="+value+";
expires="+expire;
}
},
dataGet: function(name) {
if(localStorage) {
return localStorage.getItem(name);
}
if(document.cookie.length > 0 &&
document.cookie.indexOf(name+"=") != -1) {
var s = name+"=", o = document.cookie.indexOf(s) + s.length, e
= document.cookie.indexOf(";",o);
if(e == -1) e = document.cookie.length;
return unescape(document.cookie.substring(o, e));
}
return null;
},
setArrayDisplay: function(fields, displayValue) {
var d = document, e = null;
if(displayValue === true) displayValue = '';
if(displayValue === false) displayValue = 'none';
for(var i = 0; i < fields.length; i++) {
e = d.getElementById(fields[i]);
if(e) e.style.display = displayValue;
}
},
dlTitle: function(parent) {
var t = this, d = document;
if(parent && typeof(parent) == 'string')
parent = d.getElementById(parent);
if(!parent)
parent = d;
var dt = parent.getElementsByTagName('dt'), val = null,
hkTip = (typeof(hkjQuery) != "undefined" &&
hkjQuery().hktooltip);
for(var i = 0; i < dt.length; i++) {
if(dt[i].offsetWidth < dt[i].scrollWidth &&
!dt[i].getAttribute('title')) {
val = (dt[i].innerText !== undefined) ? dt[i].innerText :
dt[i].textContent;
if(hkTip) {
dt[i].setAttribute('data-title', val);
hkjQuery(dt[i]).hktooltip({"html":
true,"container": "body"});
} else
dt[i].setAttribute('title', val);
}
}
},
collapseTitles: function() {
var t = this, d = document, w = window, o = w.Oby,
collapsedBlocks = t.dataGet('hkm_section_toggle');
collapsedBlocks = collapsedBlocks ? o.evalJSON(collapsedBlocks) : [];
if(!collapsedBlocks) collapsedBlocks = [];
d.querySelectorAll('[data-section-toggle]').forEach(function(el){
if(el.collapseTitleInit) return;
o.addEvent(el, 'click', t.collapseTitle);
var section = t._collapseGetSection(el);
if(section) {
if(collapsedBlocks.indexOf(section.name) >= 0) {
el.collapsed = true;
o.addClass(el, 'hk_closed');
} else
o.addClass(section.elem, 'open');
o.addClass(section.elem, 'hk_collapsing');
}
el.collapseTitleInit = true;
});
},
_collapseGetSection: function(el) {
if(!el) return false;
var d = document,
sectionName = el.getAttribute('data-section-toggle');
if(!sectionName) return false;
var section = d.getElementById('hikamarket_section_' +
sectionName);
if(!section) section = d.getElementById(sectionName);
return {name: sectionName, elem: section};
},
collapseTitle: function(evt) {
if(!evt) {
evt = window.event;
if(!evt) return false;
}
var w = window, t = w.hikamarket, o = w.Oby,
el = evt.target;
if(!el) return false;
var section = t._collapseGetSection(el);
if(!section) return false;
if(el.collapsed) {
o.addClass(section.elem, 'open');
o.removeClass(el, 'hk_closed');
} else {
o.removeClass(section.elem, 'open');
o.addClass(el, 'hk_closed');
}
var collapsedBlocks = t.dataGet('hkm_section_toggle');
collapsedBlocks = collapsedBlocks ? o.evalJSON(collapsedBlocks) : [];
if(!collapsedBlocks) collapsedBlocks = [];
var p = collapsedBlocks.indexOf(section.name);
if(p >= 0 && el.collapsed) {
collapsedBlocks.splice(p, 1);
}
if(p === -1 && !el.collapsed) {
collapsedBlocks.push(section.name);
}
t.dataStore('hkm_section_toggle',
JSON.stringify(collapsedBlocks));
el.collapsed = !el.collapsed;
},
noChzn: function() {
if(!window.jQuery)
return false;
jQuery('.no-chzn').each(function(i,el) {
var id = el.getAttribute('id'), chzn = null;
if(id) {
id =
id.replace('{','_').replace('}','_');
chzn = jQuery('#'+id+'_chzn');
} else {
chzn = el.nextSibling;
}
if(chzn) chzn.remove();
jQuery(el).removeClass('chzn-done').show();
});
return true;
},
switchTab: function(el) {
if(!el || !el.parentNode || !el.parentNode.parentNode) return false;
var d = document, w = window, o = w.Oby,
c = el.parentNode.parentNode,
r = c.getAttribute('rel'),
current = el.getAttribute('rel'),
dest = null;
if(!r || r.substring(0,5) != 'tabs:') return false;
if(current.substring(0,4) != 'tab:') return false;
var id = r.substring(5),
tabs = c.childNodes;
current = current.substring(4);
dest = d.getElementById(id + current);
if(!dest) return false;
for(var k = 0; k < tabs.length; k++) {
if(!tabs[k] || tabs[k].nodeName.toLowerCase() != 'li')
continue;
var i = 0, l = tabs[k].childNodes[i], lr = null;
while(l.nodeName.toLowerCase() != 'a' && i <
tabs[k].childNodes.length)
l = tabs[k].childNodes[++i];
if(l.nodeName.toLowerCase() == 'a')
lr = l.getAttribute('rel');
if(!lr || lr.substring(0,4) != 'tab:') continue;
var lid = lr.substring(4);
if(lid == current) continue;
o.removeClass(tabs[k], 'active');
var ld = d.getElementById(id + lid);
if(ld) ld.style.display = 'none';
}
dest.style.display = '';
o.addClass(el.parentNode, 'active');
el.blur();
return false;
},
callbackFct: function(t,url,keyword,tree,node,ev) {
return treeCallbackFct(t,url,keyword,tree,node,ev);
},
searchSubmit:function(el) {
if(el.form.limitstart)
el.form.limitstart.value=0;
el.form.submit();
},
searchReset:function(el) {
if(el.form.limitstart) el.form.limitstart.value=0;
if(el.form.search) el.form.search.value='';
var els = el.form.querySelectorAll("[data-search-reset]");
if(els) { for(var i = els.length - 1; i >= 0; i--) {
els[i].value = els[i].getAttribute('data-search-reset');
} }
el.form.submit();
},
searchFilters:function(el, id) {
var block = document.getElementById(id);
if(!block) return false;
block.style.display = (block.style.display == "none") ?
"" : "none";
return false;
}
};
window.hikamarket = hikamarket;
})();
js/index.html000064400000000032151161767230007161
0ustar00<html><body></body></html>js/leaflet.js000064400000422751151161767230007156
0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
/* @preserve
* Leaflet 1.3.4+Detached:
0e566b2ad5e696ba9f79a9d48a7e51c8f4892441.0e566b2, a JS library for
interactive maps. http://leafletjs.com
* (c) 2010-2018 Vladimir Agafonkin, (c) 2010-2011 CloudMade
*/
!function(t,i){"object"==typeof
exports&&"undefined"!=typeof
module?i(exports):"function"==typeof
define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use
strict";function i(t){var
i,e,n,o;for(e=1,n=arguments.length;e<n;e++){o=arguments[e];for(i in
o)t[i]=o[i]}return t}function e(t,i){var
e=Array.prototype.slice;if(t.bind)return
t.bind.apply(t,e.call(arguments,1));var n=e.call(arguments,2);return
function(){return
t.apply(i,n.length?n.concat(e.call(arguments)):arguments)}}function
n(t){return t._leaflet_id=t._leaflet_id||++ei,t._leaflet_id}function
o(t,i,e){var n,o,s,r;return
r=function(){n=!1,o&&(s.apply(e,o),o=!1)},s=function(){n?o=arguments:(t.apply(e,arguments),setTimeout(r,i),n=!0)}}function
s(t,i,e){var n=i[1],o=i[0],s=n-o;return
t===n&&e?t:((t-o)%s+s)%s+o}function r(){return!1}function
a(t,i){var e=Math.pow(10,void 0===i?6:i);return Math.round(t*e)/e}function
h(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function
u(t){return h(t).split(/\s+/)}function
l(t,i){t.hasOwnProperty("options")||(t.options=t.options?ii(t.options):{});for(var
e in i)t.options[e]=i[e];return t.options}function c(t,i,e){var
n=[];for(var o in
t)n.push(encodeURIComponent(e?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(i&&-1!==i.indexOf("?")?"&":"?")+n.join("&")}function
_(t,i){return t.replace(ni,function(t,e){var n=i[e];if(void 0===n)throw new
Error("No value provided for variable
"+t);return"function"==typeof
n&&(n=n(i)),n})}function d(t,i){for(var
e=0;e<t.length;e++)if(t[e]===i)return e;return-1}function p(t){return
window["webkit"+t]||window["moz"+t]||window["ms"+t]}function
m(t){var i=+new Date,e=Math.max(0,16-(i-ri));return
ri=i+e,window.setTimeout(t,e)}function f(t,i,n){if(!n||ai!==m)return
ai.call(window,e(t,i));t.call(i)}function
g(t){t&&hi.call(window,t)}function v(){}function
y(t){if("undefined"!=typeof
L&&L&&L.Mixin){t=oi(t)?t:[t];for(var
i=0;i<t.length;i++)t[i]===L.Mixin.Events&&console.warn("Deprecated
include of L.Mixin.Events: this property will be removed in future
releases, please inherit from L.Evented instead.",(new
Error).stack)}}function
x(t,i,e){this.x=e?Math.round(t):t,this.y=e?Math.round(i):i}function
w(t,i,e){return t instanceof x?t:oi(t)?new x(t[0],t[1]):void
0===t||null===t?t:"object"==typeof t&&"x"in
t&&"y"in t?new x(t.x,t.y):new x(t,i,e)}function
P(t,i){if(t)for(var
e=i?[t,i]:t,n=0,o=e.length;n<o;n++)this.extend(e[n])}function
b(t,i){return!t||t instanceof P?t:new P(t,i)}function T(t,i){if(t)for(var
e=i?[t,i]:t,n=0,o=e.length;n<o;n++)this.extend(e[n])}function
z(t,i){return t instanceof T?t:new T(t,i)}function
M(t,i,e){if(isNaN(t)||isNaN(i))throw new Error("Invalid LatLng object:
("+t+", "+i+")");this.lat=+t,this.lng=+i,void
0!==e&&(this.alt=+e)}function C(t,i,e){return t instanceof
M?t:oi(t)&&"object"!=typeof t[0]?3===t.length?new
M(t[0],t[1],t[2]):2===t.length?new M(t[0],t[1]):null:void
0===t||null===t?t:"object"==typeof t&&"lat"in
t?new M(t.lat,"lng"in t?t.lng:t.lon,t.alt):void 0===i?null:new
M(t,i,e)}function S(t,i,e,n){if(oi(t))return
this._a=t[0],this._b=t[1],this._c=t[2],void(this._d=t[3]);this._a=t,this._b=i,this._c=e,this._d=n}function
Z(t,i,e,n){return new S(t,i,e,n)}function E(t){return
document.createElementNS("http://www.w3.org/2000/svg",t)}function
k(t,i){var
e,n,o,s,r,a,h="";for(e=0,o=t.length;e<o;e++){for(n=0,s=(r=t[e]).length;n<s;n++)a=r[n],h+=(n?"L":"M")+a.x+"
"+a.y;h+=i?Ji?"z":"x":""}return
h||"M0 0"}function A(t){return
navigator.userAgent.toLowerCase().indexOf(t)>=0}function
B(t,i,e,n){return"touchstart"===i?O(t,e,n):"touchmove"===i?W(t,e,n):"touchend"===i&&H(t,e,n),this}function
I(t,i,e){var
n=t["_leaflet_"+i+e];return"touchstart"===i?t.removeEventListener(te,n,!1):"touchmove"===i?t.removeEventListener(ie,n,!1):"touchend"===i&&(t.removeEventListener(ee,n,!1),t.removeEventListener(ne,n,!1)),this}function
O(t,i,n){var
o=e(function(t){if("mouse"!==t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE){if(!(oe.indexOf(t.target.tagName)<0))return;Pt(t)}j(t,i)});t["_leaflet_touchstart"+n]=o,t.addEventListener(te,o,!1),re||(document.documentElement.addEventListener(te,R,!0),document.documentElement.addEventListener(ie,N,!0),document.documentElement.addEventListener(ee,D,!0),document.documentElement.addEventListener(ne,D,!0),re=!0)}function
R(t){se[t.pointerId]=t,ae++}function
N(t){se[t.pointerId]&&(se[t.pointerId]=t)}function D(t){delete
se[t.pointerId],ae--}function j(t,i){t.touches=[];for(var e in
se)t.touches.push(se[e]);t.changedTouches=[t],i(t)}function W(t,i,e){var
n=function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&j(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(ie,n,!1)}function
H(t,i,e){var
n=function(t){j(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(ee,n,!1),t.addEventListener(ne,n,!1)}function
F(t,i,e){function n(t){var
i;if(Vi){if(!bi||"mouse"===t.pointerType)return;i=ae}else
i=t.touches.length;if(!(i>1)){var
e=Date.now(),n=e-(s||e);r=t.touches?t.touches[0]:t,a=n>0&&n<=h,s=e}}function
o(t){if(a&&!r.cancelBubble){if(Vi){if(!bi||"mouse"===t.pointerType)return;var
e,n,o={};for(n in
r)e=r[n],o[n]=e&&e.bind?e.bind(r):e;r=o}r.type="dblclick",i(r),s=null}}var
s,r,a=!1,h=250;return
t[le+he+e]=n,t[le+ue+e]=o,t[le+"dblclick"+e]=i,t.addEventListener(he,n,!1),t.addEventListener(ue,o,!1),t.addEventListener("dblclick",i,!1),this}function
U(t,i){var e=t[le+he+i],n=t[le+ue+i],o=t[le+"dblclick"+i];return
t.removeEventListener(he,e,!1),t.removeEventListener(ue,n,!1),bi||t.removeEventListener("dblclick",o,!1),this}function
V(t){return"string"==typeof
t?document.getElementById(t):t}function q(t,i){var
e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var
n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function
G(t,i,e){var n=document.createElement(t);return
n.className=i||"",e&&e.appendChild(n),n}function K(t){var
i=t.parentNode;i&&i.removeChild(t)}function
Y(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function X(t){var
i=t.parentNode;i.lastChild!==t&&i.appendChild(t)}function J(t){var
i=t.parentNode;i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function
$(t,i){if(void 0!==t.classList)return t.classList.contains(i);var
e=et(t);return e.length>0&&new
RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function
Q(t,i){if(void 0!==t.classList)for(var
e=u(i),n=0,o=e.length;n<o;n++)t.classList.add(e[n]);else if(!$(t,i)){var
s=et(t);it(t,(s?s+" ":"")+i)}}function tt(t,i){void
0!==t.classList?t.classList.remove(i):it(t,h((" "+et(t)+"
").replace(" "+i+" "," ")))}function
it(t,i){void
0===t.className.baseVal?t.className=i:t.className.baseVal=i}function
et(t){return void
0===t.className.baseVal?t.className:t.className.baseVal}function
nt(t,i){"opacity"in
t.style?t.style.opacity=i:"filter"in
t.style&&ot(t,i)}function ot(t,i){var
e=!1,n="DXImageTransform.Microsoft.Alpha";try{e=t.filters.item(n)}catch(t){if(1===i)return}i=Math.round(100*i),e?(e.Enabled=100!==i,e.Opacity=i):t.style.filter+="
progid:"+n+"(opacity="+i+")"}function
st(t){for(var
i=document.documentElement.style,e=0;e<t.length;e++)if(t[e]in i)return
t[e];return!1}function rt(t,i,e){var n=i||new
x(0,0);t.style[ce]=(Ri?"translate("+n.x+"px,"+n.y+"px)":"translate3d("+n.x+"px,"+n.y+"px,0)")+(e?"
scale("+e+")":"")}function
at(t,i){t._leaflet_pos=i,ji?rt(t,i):(t.style.left=i.x+"px",t.style.top=i.y+"px")}function
ht(t){return t._leaflet_pos||new x(0,0)}function
ut(){mt(window,"dragstart",Pt)}function
lt(){ft(window,"dragstart",Pt)}function
ct(t){for(;-1===t.tabIndex;)t=t.parentNode;t.style&&(_t(),me=t,fe=t.style.outline,t.style.outline="none",mt(window,"keydown",_t))}function
_t(){me&&(me.style.outline=fe,me=void 0,fe=void
0,ft(window,"keydown",_t))}function
dt(t){do{t=t.parentNode}while(!(t.offsetWidth&&t.offsetHeight||t===document.body));return
t}function pt(t){var
i=t.getBoundingClientRect();return{x:i.width/t.offsetWidth||1,y:i.height/t.offsetHeight||1,boundingClientRect:i}}function
mt(t,i,e,n){if("object"==typeof i)for(var o in
i)gt(t,o,i[o],e);else for(var
s=0,r=(i=u(i)).length;s<r;s++)gt(t,i[s],e,n);return this}function
ft(t,i,e,n){if("object"==typeof i)for(var o in
i)vt(t,o,i[o],e);else if(i)for(var
s=0,r=(i=u(i)).length;s<r;s++)vt(t,i[s],e,n);else{for(var a in
t[ye])vt(t,a,t[ye][a]);delete t[ye]}return this}function gt(t,i,e,o){var
s=i+n(e)+(o?"_"+n(o):"");if(t[ye]&&t[ye][s])return
this;var r=function(i){return
e.call(o||t,i||window.event)},a=r;Vi&&0===i.indexOf("touch")?B(t,i,r,s):!qi||"dblclick"!==i||!F||Vi&&Ei?"addEventListener"in
t?"mousewheel"===i?t.addEventListener("onwheel"in
t?"wheel":"mousewheel",r,!1):"mouseenter"===i||"mouseleave"===i?(r=function(i){i=i||window.event,Ct(t,i)&&a(i)},t.addEventListener("mouseenter"===i?"mouseover":"mouseout",r,!1)):("click"===i&&zi&&(r=function(t){St(t,a)}),t.addEventListener(i,r,!1)):"attachEvent"in
t&&t.attachEvent("on"+i,r):F(t,r,s),t[ye]=t[ye]||{},t[ye][s]=r}function
vt(t,i,e,o){var
s=i+n(e)+(o?"_"+n(o):""),r=t[ye]&&t[ye][s];if(!r)return
this;Vi&&0===i.indexOf("touch")?I(t,i,s):!qi||"dblclick"!==i||!U||Vi&&Ei?"removeEventListener"in
t?"mousewheel"===i?t.removeEventListener("onwheel"in
t?"wheel":"mousewheel",r,!1):t.removeEventListener("mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,r,!1):"detachEvent"in
t&&t.detachEvent("on"+i,r):U(t,s),t[ye][s]=null}function
yt(t){return
t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,Mt(t),this}function
xt(t){return gt(t,"mousewheel",yt),this}function wt(t){return
mt(t,"mousedown touchstart
dblclick",yt),gt(t,"click",zt),this}function Pt(t){return
t.preventDefault?t.preventDefault():t.returnValue=!1,this}function
Lt(t){return Pt(t),yt(t),this}function bt(t,i){if(!i)return new
x(t.clientX,t.clientY);var e=pt(i),n=e.boundingClientRect;return new
x((t.clientX-n.left)/e.x-i.clientLeft,(t.clientY-n.top)/e.y-i.clientTop)}function
Tt(t){return
bi?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/xe:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}function
zt(t){we[t.type]=!0}function Mt(t){var i=we[t.type];return
we[t.type]=!1,i}function Ct(t,i){var
e=i.relatedTarget;if(!e)return!0;try{for(;e&&e!==t;)e=e.parentNode}catch(t){return!1}return
e!==t}function St(t,i){var
e=t.timeStamp||t.originalEvent&&t.originalEvent.timeStamp,n=ge&&e-ge;n&&n>100&&n<500||t.target._simulatedClick&&!t._simulated?Lt(t):(ge=e,i(t))}function
Zt(t,i){if(!i||!t.length)return t.slice();var e=i*i;return
t=Bt(t,e),t=kt(t,e)}function Et(t,i,e){return
Math.sqrt(Dt(t,i,e,!0))}function kt(t,i){var e=t.length,n=new(typeof
Uint8Array!=void
0+""?Uint8Array:Array)(e);n[0]=n[e-1]=1,At(t,n,i,0,e-1);var
o,s=[];for(o=0;o<e;o++)n[o]&&s.push(t[o]);return s}function
At(t,i,e,n,o){var
s,r,a,h=0;for(r=n+1;r<=o-1;r++)(a=Dt(t[r],t[n],t[o],!0))>h&&(s=r,h=a);h>e&&(i[s]=1,At(t,i,e,n,s),At(t,i,e,s,o))}function
Bt(t,i){for(var
e=[t[0]],n=1,o=0,s=t.length;n<s;n++)Nt(t[n],t[o])>i&&(e.push(t[n]),o=n);return
o<s-1&&e.push(t[s-1]),e}function It(t,i,e,n,o){var
s,r,a,h=n?ke:Rt(t,e),u=Rt(i,e);for(ke=u;;){if(!(h|u))return[t,i];if(h&u)return!1;a=Rt(r=Ot(t,i,s=h||u,e,o),e),s===h?(t=r,h=a):(i=r,u=a)}}function
Ot(t,i,e,n,o){var s,r,a=i.x-t.x,h=i.y-t.y,u=n.min,l=n.max;return
8&e?(s=t.x+a*(l.y-t.y)/h,r=l.y):4&e?(s=t.x+a*(u.y-t.y)/h,r=u.y):2&e?(s=l.x,r=t.y+h*(l.x-t.x)/a):1&e&&(s=u.x,r=t.y+h*(u.x-t.x)/a),new
x(s,r,o)}function Rt(t,i){var e=0;return
t.x<i.min.x?e|=1:t.x>i.max.x&&(e|=2),t.y<i.min.y?e|=4:t.y>i.max.y&&(e|=8),e}function
Nt(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Dt(t,i,e,n){var
o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return
u>0&&((o=((t.x-s)*a+(t.y-r)*h)/u)>1?(s=e.x,r=e.y):o>0&&(s+=a*o,r+=h*o)),a=t.x-s,h=t.y-r,n?a*a+h*h:new
x(s,r)}function jt(t){return!oi(t[0])||"object"!=typeof
t[0][0]&&void 0!==t[0][0]}function Wt(t){return
console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat
instead."),jt(t)}function Ht(t,i,e){var
n,o,s,r,a,h,u,l,c,_=[1,4,2,8];for(o=0,u=t.length;o<u;o++)t[o]._code=Rt(t[o],i);for(r=0;r<4;r++){for(l=_[r],n=[],o=0,s=(u=t.length)-1;o<u;s=o++)a=t[o],h=t[s],a._code&l?h._code&l||((c=Ot(h,a,l,i,e))._code=Rt(c,i),n.push(c)):(h._code&l&&((c=Ot(h,a,l,i,e))._code=Rt(c,i),n.push(c)),n.push(a));t=n}return
t}function Ft(t,i){var
e,n,o,s,r="Feature"===t.type?t.geometry:t,a=r?r.coordinates:null,h=[],u=i&&i.pointToLayer,l=i&&i.coordsToLatLng||Ut;if(!a&&!r)return
null;switch(r.type){case"Point":return e=l(a),u?u(t,e):new
$e(e);case"MultiPoint":for(o=0,s=a.length;o<s;o++)e=l(a[o]),h.push(u?u(t,e):new
$e(e));return new
Ke(h);case"LineString":case"MultiLineString":return
n=Vt(a,"LineString"===r.type?0:1,l),new
nn(n,i);case"Polygon":case"MultiPolygon":return
n=Vt(a,"Polygon"===r.type?1:2,l),new
on(n,i);case"GeometryCollection":for(o=0,s=r.geometries.length;o<s;o++){var
c=Ft({geometry:r.geometries[o],type:"Feature",properties:t.properties},i);c&&h.push(c)}return
new Ke(h);default:throw new Error("Invalid GeoJSON
object.")}}function Ut(t){return new M(t[1],t[0],t[2])}function
Vt(t,i,e){for(var
n,o=[],s=0,r=t.length;s<r;s++)n=i?Vt(t[s],i-1,e):(e||Ut)(t[s]),o.push(n);return
o}function qt(t,i){return i="number"==typeof i?i:6,void
0!==t.alt?[a(t.lng,i),a(t.lat,i),a(t.alt,i)]:[a(t.lng,i),a(t.lat,i)]}function
Gt(t,i,e,n){for(var
o=[],s=0,r=t.length;s<r;s++)o.push(i?Gt(t[s],i-1,e,n):qt(t[s],n));return!i&&e&&o.push(o[0]),o}function
Kt(t,e){return t.feature?i({},t.feature,{geometry:e}):Yt(e)}function
Yt(t){return"Feature"===t.type||"FeatureCollection"===t.type?t:{type:"Feature",properties:{},geometry:t}}function
Xt(t,i){return new sn(t,i)}function Jt(t,i){return new mn(t,i)}function
$t(t){return Xi?new vn(t):null}function Qt(t){return Ji||$i?new
Pn(t):null}var ti=Object.freeze;Object.freeze=function(t){return t};var
ii=Object.create||function(){function t(){}return function(i){return
t.prototype=i,new t}}(),ei=0,ni=/\{ *([\w_-]+)
*\}/g,oi=Array.isArray||function(t){return"[object
Array]"===Object.prototype.toString.call(t)},si="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",ri=0,ai=window.requestAnimationFrame||p("RequestAnimationFrame")||m,hi=window.cancelAnimationFrame||p("CancelAnimationFrame")||p("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)},ui=(Object.freeze||Object)({freeze:ti,extend:i,create:ii,bind:e,lastId:ei,stamp:n,throttle:o,wrapNum:s,falseFn:r,formatNum:a,trim:h,splitWords:u,setOptions:l,getParamString:c,template:_,isArray:oi,indexOf:d,emptyImageUrl:si,requestFn:ai,cancelFn:hi,requestAnimFrame:f,cancelAnimFrame:g});v.extend=function(t){var
e=function(){this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},n=e.__super__=this.prototype,o=ii(n);o.constructor=e,e.prototype=o;for(var
s in
this)this.hasOwnProperty(s)&&"prototype"!==s&&"__super__"!==s&&(e[s]=this[s]);return
t.statics&&(i(e,t.statics),delete
t.statics),t.includes&&(y(t.includes),i.apply(null,[o].concat(t.includes)),delete
t.includes),o.options&&(t.options=i(ii(o.options),t.options)),i(o,t),o._initHooks=[],o.callInitHooks=function(){if(!this._initHooksCalled){n.callInitHooks&&n.callInitHooks.call(this),this._initHooksCalled=!0;for(var
t=0,i=o._initHooks.length;t<i;t++)o._initHooks[t].call(this)}},e},v.include=function(t){return
i(this.prototype,t),this},v.mergeOptions=function(t){return
i(this.prototype.options,t),this},v.addInitHook=function(t){var
i=Array.prototype.slice.call(arguments,1),e="function"==typeof
t?t:function(){this[t].apply(this,i)};return
this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(e),this};var
li={on:function(t,i,e){if("object"==typeof t)for(var n in
t)this._on(n,t[n],i);else for(var
o=0,s=(t=u(t)).length;o<s;o++)this._on(t[o],i,e);return
this},off:function(t,i,e){if(t)if("object"==typeof t)for(var n in
t)this._off(n,t[n],i);else for(var
o=0,s=(t=u(t)).length;o<s;o++)this._off(t[o],i,e);else delete
this._events;return
this},_on:function(t,i,e){this._events=this._events||{};var
n=this._events[t];n||(n=[],this._events[t]=n),e===this&&(e=void
0);for(var
o={fn:i,ctx:e},s=n,r=0,a=s.length;r<a;r++)if(s[r].fn===i&&s[r].ctx===e)return;s.push(o)},_off:function(t,i,e){var
n,o,s;if(this._events&&(n=this._events[t]))if(i){if(e===this&&(e=void
0),n)for(o=0,s=n.length;o<s;o++){var
a=n[o];if(a.ctx===e&&a.fn===i)return
a.fn=r,this._firingCount&&(this._events[t]=n=n.slice()),void
n.splice(o,1)}}else{for(o=0,s=n.length;o<s;o++)n[o].fn=r;delete
this._events[t]}},fire:function(t,e,n){if(!this.listens(t,n))return
this;var
o=i({},e,{type:t,target:this,sourceTarget:e&&e.sourceTarget||this});if(this._events){var
s=this._events[t];if(s){this._firingCount=this._firingCount+1||1;for(var
r=0,a=s.length;r<a;r++){var
h=s[r];h.fn.call(h.ctx||this,o)}this._firingCount--}}return
n&&this._propagateEvent(o),this},listens:function(t,i){var
e=this._events&&this._events[t];if(e&&e.length)return!0;if(i)for(var
n in
this._eventParents)if(this._eventParents[n].listens(t,i))return!0;return!1},once:function(t,i,n){if("object"==typeof
t){for(var o in t)this.once(o,t[o],i);return this}var
s=e(function(){this.off(t,i,n).off(t,s,n)},this);return
this.on(t,i,n).on(t,s,n)},addEventParent:function(t){return
this._eventParents=this._eventParents||{},this._eventParents[n(t)]=t,this},removeEventParent:function(t){return
this._eventParents&&delete
this._eventParents[n(t)],this},_propagateEvent:function(t){for(var e in
this._eventParents)this._eventParents[e].fire(t.type,i({layer:t.target,propagatedFrom:t.target},t),!0)}};li.addEventListener=li.on,li.removeEventListener=li.clearAllEventListeners=li.off,li.addOneTimeEventListener=li.once,li.fireEvent=li.fire,li.hasEventListeners=li.listens;var
ci=v.extend(li),_i=Math.trunc||function(t){return
t>0?Math.floor(t):Math.ceil(t)};x.prototype={clone:function(){return new
x(this.x,this.y)},add:function(t){return
this.clone()._add(w(t))},_add:function(t){return
this.x+=t.x,this.y+=t.y,this},subtract:function(t){return
this.clone()._subtract(w(t))},_subtract:function(t){return
this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return
this.clone()._divideBy(t)},_divideBy:function(t){return
this.x/=t,this.y/=t,this},multiplyBy:function(t){return
this.clone()._multiplyBy(t)},_multiplyBy:function(t){return
this.x*=t,this.y*=t,this},scaleBy:function(t){return new
x(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new
x(this.x/t.x,this.y/t.y)},round:function(){return
this.clone()._round()},_round:function(){return
this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return
this.clone()._floor()},_floor:function(){return
this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return
this.clone()._ceil()},_ceil:function(){return
this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return
this.clone()._trunc()},_trunc:function(){return
this.x=_i(this.x),this.y=_i(this.y),this},distanceTo:function(t){var
i=(t=w(t)).x-this.x,e=t.y-this.y;return
Math.sqrt(i*i+e*e)},equals:function(t){return(t=w(t)).x===this.x&&t.y===this.y},contains:function(t){return
t=w(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+a(this.x)+",
"+a(this.y)+")"}},P.prototype={extend:function(t){return
t=w(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return
new
x((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return
new x(this.min.x,this.max.y)},getTopRight:function(){return new
x(this.max.x,this.min.y)},getTopLeft:function(){return
this.min},getBottomRight:function(){return
this.max},getSize:function(){return
this.max.subtract(this.min)},contains:function(t){var
i,e;return(t="number"==typeof t[0]||t instanceof
x?w(t):b(t))instanceof
P?(i=t.min,e=t.max):i=e=t,i.x>=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=b(t);var
i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return
s&&r},overlaps:function(t){t=b(t);var
i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.x<e.x,r=o.y>i.y&&n.y<e.y;return
s&&r},isValid:function(){return!(!this.min||!this.max)}},T.prototype={extend:function(t){var
i,e,n=this._southWest,o=this._northEast;if(t instanceof
M)i=t,e=t;else{if(!(t instanceof T))return
t?this.extend(C(t)||z(t)):this;if(i=t._southWest,e=t._northEast,!i||!e)return
this}return
n||o?(n.lat=Math.min(i.lat,n.lat),n.lng=Math.min(i.lng,n.lng),o.lat=Math.max(e.lat,o.lat),o.lng=Math.max(e.lng,o.lng)):(this._southWest=new
M(i.lat,i.lng),this._northEast=new
M(e.lat,e.lng)),this},pad:function(t){var
i=this._southWest,e=this._northEast,n=Math.abs(i.lat-e.lat)*t,o=Math.abs(i.lng-e.lng)*t;return
new T(new M(i.lat-n,i.lng-o),new
M(e.lat+n,e.lng+o))},getCenter:function(){return new
M((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return
this._southWest},getNorthEast:function(){return
this._northEast},getNorthWest:function(){return new
M(this.getNorth(),this.getWest())},getSouthEast:function(){return new
M(this.getSouth(),this.getEast())},getWest:function(){return
this._southWest.lng},getSouth:function(){return
this._southWest.lat},getEast:function(){return
this._northEast.lng},getNorth:function(){return
this._northEast.lat},contains:function(t){t="number"==typeof
t[0]||t instanceof M||"lat"in t?C(t):z(t);var
i,e,n=this._southWest,o=this._northEast;return t instanceof
T?(i=t.getSouthWest(),e=t.getNorthEast()):i=e=t,i.lat>=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=z(t);var
i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return
s&&r},overlaps:function(t){t=z(t);var
i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lat<e.lat,r=o.lng>i.lng&&n.lng<e.lng;return
s&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t,i){return!!t&&(t=z(t),this._southWest.equals(t.getSouthWest(),i)&&this._northEast.equals(t.getNorthEast(),i))},isValid:function(){return!(!this._southWest||!this._northEast)}},M.prototype={equals:function(t,i){return!!t&&(t=C(t),Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng))<=(void
0===i?1e-9:i))},toString:function(t){return"LatLng("+a(this.lat,t)+",
"+a(this.lng,t)+")"},distanceTo:function(t){return
pi.distance(this,C(t))},wrap:function(){return
pi.wrapLatLng(this)},toBounds:function(t){var
i=180*t/40075017,e=i/Math.cos(Math.PI/180*this.lat);return
z([this.lat-i,this.lng-e],[this.lat+i,this.lng+e])},clone:function(){return
new M(this.lat,this.lng,this.alt)}};var di={latLngToPoint:function(t,i){var
e=this.projection.project(t),n=this.scale(i);return
this.transformation._transform(e,n)},pointToLatLng:function(t,i){var
e=this.scale(i),n=this.transformation.untransform(t,e);return
this.projection.unproject(n)},project:function(t){return
this.projection.project(t)},unproject:function(t){return
this.projection.unproject(t)},scale:function(t){return
256*Math.pow(2,t)},zoom:function(t){return
Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){if(this.infinite)return
null;var i=this.projection.bounds,e=this.scale(t);return new
P(this.transformation.transform(i.min,e),this.transformation.transform(i.max,e))},infinite:!1,wrapLatLng:function(t){var
i=this.wrapLng?s(t.lng,this.wrapLng,!0):t.lng;return new
M(this.wrapLat?s(t.lat,this.wrapLat,!0):t.lat,i,t.alt)},wrapLatLngBounds:function(t){var
i=t.getCenter(),e=this.wrapLatLng(i),n=i.lat-e.lat,o=i.lng-e.lng;if(0===n&&0===o)return
t;var s=t.getSouthWest(),r=t.getNorthEast();return new T(new
M(s.lat-n,s.lng-o),new
M(r.lat-n,r.lng-o))}},pi=i({},di,{wrapLng:[-180,180],R:6371e3,distance:function(t,i){var
e=Math.PI/180,n=t.lat*e,o=i.lat*e,s=Math.sin((i.lat-t.lat)*e/2),r=Math.sin((i.lng-t.lng)*e/2),a=s*s+Math.cos(n)*Math.cos(o)*r*r,h=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));return
this.R*h}}),mi={R:6378137,MAX_LATITUDE:85.0511287798,project:function(t){var
i=Math.PI/180,e=this.MAX_LATITUDE,n=Math.max(Math.min(e,t.lat),-e),o=Math.sin(n*i);return
new
x(this.R*t.lng*i,this.R*Math.log((1+o)/(1-o))/2)},unproject:function(t){var
i=180/Math.PI;return new
M((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*i,t.x*i/this.R)},bounds:function(){var
t=6378137*Math.PI;return new
P([-t,-t],[t,t])}()};S.prototype={transform:function(t,i){return
this._transform(t.clone(),i)},_transform:function(t,i){return
i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return
i=i||1,new x((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}};var
fi,gi,vi,yi=i({},pi,{code:"EPSG:3857",projection:mi,transformation:function(){var
t=.5/(Math.PI*mi.R);return
Z(t,.5,-t,.5)}()}),xi=i({},yi,{code:"EPSG:900913"}),wi=document.documentElement.style,Pi="ActiveXObject"in
window,Li=Pi&&!document.addEventListener,bi="msLaunchUri"in
navigator&&!("documentMode"in
document),Ti=A("webkit"),zi=A("android"),Mi=A("android
2")||A("android
3"),Ci=parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1],10),Si=zi&&A("Google")&&Ci<537&&!("AudioNode"in
window),Zi=!!window.opera,Ei=A("chrome"),ki=A("gecko")&&!Ti&&!Zi&&!Pi,Ai=!Ei&&A("safari"),Bi=A("phantom"),Ii="OTransition"in
wi,Oi=0===navigator.platform.indexOf("Win"),Ri=Pi&&"transition"in
wi,Ni="WebKitCSSMatrix"in window&&"m11"in new
window.WebKitCSSMatrix&&!Mi,Di="MozPerspective"in
wi,ji=!window.L_DISABLE_3D&&(Ri||Ni||Di)&&!Ii&&!Bi,Wi="undefined"!=typeof
orientation||A("mobile"),Hi=Wi&&Ti,Fi=Wi&&Ni,Ui=!window.PointerEvent&&window.MSPointerEvent,Vi=!(!window.PointerEvent&&!Ui),qi=!window.L_NO_TOUCH&&(Vi||"ontouchstart"in
window||window.DocumentTouch&&document instanceof
window.DocumentTouch),Gi=Wi&&Zi,Ki=Wi&&ki,Yi=(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI)>1,Xi=!!document.createElement("canvas").getContext,Ji=!(!document.createElementNS||!E("svg").createSVGRect),$i=!Ji&&function(){try{var
t=document.createElement("div");t.innerHTML='<v:shape
adj="1"/>';var i=t.firstChild;return
i.style.behavior="url(#default#VML)",i&&"object"==typeof
i.adj}catch(t){return!1}}(),Qi=(Object.freeze||Object)({ie:Pi,ielt9:Li,edge:bi,webkit:Ti,android:zi,android23:Mi,androidStock:Si,opera:Zi,chrome:Ei,gecko:ki,safari:Ai,phantom:Bi,opera12:Ii,win:Oi,ie3d:Ri,webkit3d:Ni,gecko3d:Di,any3d:ji,mobile:Wi,mobileWebkit:Hi,mobileWebkit3d:Fi,msPointer:Ui,pointer:Vi,touch:qi,mobileOpera:Gi,mobileGecko:Ki,retina:Yi,canvas:Xi,svg:Ji,vml:$i}),te=Ui?"MSPointerDown":"pointerdown",ie=Ui?"MSPointerMove":"pointermove",ee=Ui?"MSPointerUp":"pointerup",ne=Ui?"MSPointerCancel":"pointercancel",oe=["INPUT","SELECT","OPTION"],se={},re=!1,ae=0,he=Ui?"MSPointerDown":Vi?"pointerdown":"touchstart",ue=Ui?"MSPointerUp":Vi?"pointerup":"touchend",le="_leaflet_",ce=st(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),_e=st(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),de="webkitTransition"===_e||"OTransition"===_e?_e+"End":"transitionend";if("onselectstart"in
document)fi=function(){mt(window,"selectstart",Pt)},gi=function(){ft(window,"selectstart",Pt)};else{var
pe=st(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);fi=function(){if(pe){var
t=document.documentElement.style;vi=t[pe],t[pe]="none"}},gi=function(){pe&&(document.documentElement.style[pe]=vi,vi=void
0)}}var
me,fe,ge,ve=(Object.freeze||Object)({TRANSFORM:ce,TRANSITION:_e,TRANSITION_END:de,get:V,getStyle:q,create:G,remove:K,empty:Y,toFront:X,toBack:J,hasClass:$,addClass:Q,removeClass:tt,setClass:it,getClass:et,setOpacity:nt,testProp:st,setTransform:rt,setPosition:at,getPosition:ht,disableTextSelection:fi,enableTextSelection:gi,disableImageDrag:ut,enableImageDrag:lt,preventOutline:ct,restoreOutline:_t,getSizedParentNode:dt,getScale:pt}),ye="_leaflet_events",xe=Oi&&Ei?2*window.devicePixelRatio:ki?window.devicePixelRatio:1,we={},Pe=(Object.freeze||Object)({on:mt,off:ft,stopPropagation:yt,disableScrollPropagation:xt,disableClickPropagation:wt,preventDefault:Pt,stop:Lt,getMousePosition:bt,getWheelDelta:Tt,fakeStop:zt,skipped:Mt,isExternalTarget:Ct,addListener:mt,removeListener:ft}),Le=ci.extend({run:function(t,i,e,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=ht(t),this._offset=i.subtract(this._startPos),this._startTime=+new
Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=f(this._animate,this),this._step()},_step:function(t){var
i=+new
Date-this._startTime,e=1e3*this._duration;i<e?this._runFrame(this._easeOut(i/e),t):(this._runFrame(1),this._complete())},_runFrame:function(t,i){var
e=this._startPos.add(this._offset.multiplyBy(t));i&&e._round(),at(this._el,e),this.fire("step")},_complete:function(){g(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return
1-Math.pow(1-t,this._easeOutPower)}}),be=ci.extend({options:{crs:yi,center:void
0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:[],maxBounds:void
0,renderer:void
0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(t,i){i=l(this,i),this._initContainer(t),this._initLayout(),this._onResize=e(this._onResize,this),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),void
0!==i.zoom&&(this._zoom=this._limitZoom(i.zoom)),i.center&&void
0!==i.zoom&&this.setView(C(i.center),i.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this.callInitHooks(),this._zoomAnimated=_e&&ji&&!Gi&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),mt(this._proxy,de,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(t,e,n){return
e=void
0===e?this._zoom:this._limitZoom(e),t=this._limitCenter(C(t),e,this.options.maxBounds),n=n||{},this._stop(),this._loaded&&!n.reset&&!0!==n&&(void
0!==n.animate&&(n.zoom=i({animate:n.animate},n.zoom),n.pan=i({animate:n.animate,duration:n.duration},n.pan)),this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan))?(clearTimeout(this._sizeTimer),this):(this._resetView(t,e),this)},setZoom:function(t,i){return
this._loaded?this.setView(this.getCenter(),t,{zoom:i}):(this._zoom=t,this)},zoomIn:function(t,i){return
t=t||(ji?this.options.zoomDelta:1),this.setZoom(this._zoom+t,i)},zoomOut:function(t,i){return
t=t||(ji?this.options.zoomDelta:1),this.setZoom(this._zoom-t,i)},setZoomAround:function(t,i,e){var
n=this.getZoomScale(i),o=this.getSize().divideBy(2),s=(t instanceof
x?t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1-1/n),r=this.containerPointToLatLng(o.add(s));return
this.setView(r,i,{zoom:e})},_getBoundsCenterZoom:function(t,i){i=i||{},t=t.getBounds?t.getBounds():z(t);var
e=w(i.paddingTopLeft||i.padding||[0,0]),n=w(i.paddingBottomRight||i.padding||[0,0]),o=this.getBoundsZoom(t,!1,e.add(n));if((o="number"==typeof
i.maxZoom?Math.min(i.maxZoom,o):o)===1/0)return{center:t.getCenter(),zoom:o};var
s=n.subtract(e).divideBy(2),r=this.project(t.getSouthWest(),o),a=this.project(t.getNorthEast(),o);return{center:this.unproject(r.add(a).divideBy(2).add(s),o),zoom:o}},fitBounds:function(t,i){if(!(t=z(t)).isValid())throw
new Error("Bounds are not valid.");var
e=this._getBoundsCenterZoom(t,i);return
this.setView(e.center,e.zoom,i)},fitWorld:function(t){return
this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,i){return
this.setView(t,this._zoom,{pan:i})},panBy:function(t,i){if(t=w(t).round(),i=i||{},!t.x&&!t.y)return
this.fire("moveend");if(!0!==i.animate&&!this.getSize().contains(t))return
this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this;if(this._panAnim||(this._panAnim=new
Le,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),i.noMoveStart||this.fire("movestart"),!1!==i.animate){Q(this._mapPane,"leaflet-pan-anim");var
e=this._getMapPanePos().subtract(t).round();this._panAnim.run(this._mapPane,e,i.duration||.25,i.easeLinearity)}else
this._rawPanBy(t),this.fire("move").fire("moveend");return
this},flyTo:function(t,i,e){function n(t){var
i=(g*g-m*m+(t?-1:1)*x*x*v*v)/(2*(t?g:m)*x*v),e=Math.sqrt(i*i+1)-i;return
e<1e-9?-18:Math.log(e)}function
o(t){return(Math.exp(t)-Math.exp(-t))/2}function
s(t){return(Math.exp(t)+Math.exp(-t))/2}function r(t){return
o(t)/s(t)}function a(t){return m*(s(w)/s(w+y*t))}function h(t){return
m*(s(w)*r(w+y*t)-o(w))/x}function u(t){return 1-Math.pow(1-t,1.5)}function
l(){var
e=(Date.now()-P)/b,n=u(e)*L;e<=1?(this._flyToFrame=f(l,this),this._move(this.unproject(c.add(_.subtract(c).multiplyBy(h(n)/v)),p),this.getScaleZoom(m/a(n),p),{flyTo:!0})):this._move(t,i)._moveEnd(!0)}if(!1===(e=e||{}).animate||!ji)return
this.setView(t,i,e);this._stop();var
c=this.project(this.getCenter()),_=this.project(t),d=this.getSize(),p=this._zoom;t=C(t),i=void
0===i?p:i;var
m=Math.max(d.x,d.y),g=m*this.getZoomScale(p,i),v=_.distanceTo(c)||1,y=1.42,x=y*y,w=n(0),P=Date.now(),L=(n(1)-w)/y,b=e.duration?1e3*e.duration:1e3*L*.8;return
this._moveStart(!0,e.noMoveStart),l.call(this),this},flyToBounds:function(t,i){var
e=this._getBoundsCenterZoom(t,i);return
this.flyTo(e.center,e.zoom,i)},setMaxBounds:function(t){return(t=z(t)).isValid()?(this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this.options.maxBounds=t,this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds)):(this.options.maxBounds=null,this.off("moveend",this._panInsideMaxBounds))},setMinZoom:function(t){var
i=this.options.minZoom;return
this.options.minZoom=t,this._loaded&&i!==t&&(this.fire("zoomlevelschange"),this.getZoom()<this.options.minZoom)?this.setZoom(t):this},setMaxZoom:function(t){var
i=this.options.maxZoom;return
this.options.maxZoom=t,this._loaded&&i!==t&&(this.fire("zoomlevelschange"),this.getZoom()>this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var
e=this.getCenter(),n=this._limitCenter(e,this._zoom,z(t));return
e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},invalidateSize:function(t){if(!this._loaded)return
this;t=i({animate:!1,pan:!0},!0===t?{animate:!0}:t);var
n=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var
o=this.getSize(),s=n.divideBy(2).round(),r=o.divideBy(2).round(),a=s.subtract(r);return
a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(e(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:n,newSize:o})):this},stop:function(){return
this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=i({timeout:1e4,watch:!1},t),!("geolocation"in
navigator))return
this._handleGeolocationError({code:0,message:"Geolocation not
supported."}),this;var
n=e(this._handleGeolocationResponse,this),o=e(this._handleGeolocationError,this);return
t.watch?this._locationWatchId=navigator.geolocation.watchPosition(n,o,t):navigator.geolocation.getCurrentPosition(n,o,t),this},stopLocate:function(){return
navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var
i=t.code,e=t.message||(1===i?"permission
denied":2===i?"position
unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation
error: "+e+"."})},_handleGeolocationResponse:function(t){var
i=new
M(t.coords.latitude,t.coords.longitude),e=i.toBounds(2*t.coords.accuracy),n=this._locateOptions;if(n.setView){var
o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var
s={latlng:i,bounds:e,timestamp:t.timestamp};for(var r in
t.coords)"number"==typeof
t.coords[r]&&(s[r]=t.coords[r]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return
this;var e=this[t]=new i(this);return
this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this._containerId!==this._container._leaflet_id)throw
new Error("Map container is being reused by another
instance");try{delete this._container._leaflet_id,delete
this._containerId}catch(t){this._container._leaflet_id=void
0,this._containerId=void 0}void
0!==this._locationWatchId&&this.stopLocate(),this._stop(),K(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(g(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload");var
t;for(t in this._layers)this._layers[t].remove();for(t in
this._panes)K(this._panes[t]);return this._layers=[],this._panes=[],delete
this._mapPane,delete this._renderer,this},createPane:function(t,i){var
e=G("div","leaflet-pane"+(t?"
leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return
t&&(this._panes[t]=e),e},getCenter:function(){return
this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return
this._zoom},getBounds:function(){var t=this.getPixelBounds();return new
T(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return
void
0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return
void 0===this.options.maxZoom?void
0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=z(t),e=w(e||[0,0]);var
n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(e),u=b(this.project(a,n),this.project(r,n)).getSize(),l=ji?this.options.zoomSnap:1,c=h.x/u.x,_=h.y/u.y,d=i?Math.max(c,_):Math.min(c,_);return
n=this.getScaleZoom(d,n),l&&(n=Math.round(n/(l/100))*(l/100),n=i?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return
this._size&&!this._sizeChanged||(this._size=new
x(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var
e=this._getTopLeftPoint(t,i);return new
P(e,e.add(this.getSize()))},getPixelOrigin:function(){return
this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return
this.options.crs.getProjectedBounds(void
0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof
t?this._panes[t]:t},getPanes:function(){return
this._panes},getContainer:function(){return
this._container},getZoomScale:function(t,i){var e=this.options.crs;return
i=void
0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var
e=this.options.crs;i=void 0===i?this._zoom:i;var
n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return
i=void
0===i?this._zoom:i,this.options.crs.latLngToPoint(C(t),i)},unproject:function(t,i){return
i=void
0===i?this._zoom:i,this.options.crs.pointToLatLng(w(t),i)},layerPointToLatLng:function(t){var
i=w(t).add(this.getPixelOrigin());return
this.unproject(i)},latLngToLayerPoint:function(t){return
this.project(C(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return
this.options.crs.wrapLatLng(C(t))},wrapLatLngBounds:function(t){return
this.options.crs.wrapLatLngBounds(z(t))},distance:function(t,i){return
this.options.crs.distance(C(t),C(i))},containerPointToLayerPoint:function(t){return
w(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return
w(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var
i=this.containerPointToLayerPoint(w(t));return
this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return
this.layerPointToContainerPoint(this.latLngToLayerPoint(C(t)))},mouseEventToContainerPoint:function(t){return
bt(t,this._container)},mouseEventToLayerPoint:function(t){return
this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return
this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var
i=this._container=V(t);if(!i)throw new Error("Map container not
found.");if(i._leaflet_id)throw new Error("Map container is
already
initialized.");mt(i,"scroll",this._onScroll,this),this._containerId=n(i)},_initLayout:function(){var
t=this._container;this._fadeAnimated=this.options.fadeAnimation&&ji,Q(t,"leaflet-container"+(qi?"
leaflet-touch":"")+(Yi?"
leaflet-retina":"")+(Li?"
leaflet-oldie":"")+(Ai?"
leaflet-safari":"")+(this._fadeAnimated?"
leaflet-fade-anim":""));var
i=q(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var
t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),at(this._mapPane,new
x(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(Q(t.markerPane,"leaflet-zoom-hide"),Q(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){at(this._mapPane,new
x(0,0));var
e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var
n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return
t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void
0===i&&(i=this._zoom);var n=this._zoom!==i;return
this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return
t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return
g(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){at(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return
this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw
new Error("Set map center and zoom
first.")},_initEvents:function(t){this._targets={},this._targets[n(this._container)]=this;var
i=t?ft:mt;i(this._container,"click dblclick mousedown mouseup
mouseover mouseout mousemove contextmenu
keypress",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),ji&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){g(this._resizeRequest),this._resizeRequest=f(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var
t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var
e,o=[],s="mouseout"===i||"mouseover"===i,r=t.target||t.srcElement,a=!1;r;){if((e=this._targets[n(r)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){a=!0;break}if(e&&e.listens(i,!0)){if(s&&!Ct(r,t))break;if(o.push(e),s)break}if(r===this._container)break;r=r.parentNode}return
o.length||a||s||!Ct(r,t)||(o=[this]),o},_handleDOMEvent:function(t){if(this._loaded&&!Mt(t)){var
i=t.type;"mousedown"!==i&&"keypress"!==i||ct(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,n){if("click"===t.type){var
o=i({},t);o.type="preclick",this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n=(n||[]).concat(this._findEventTargets(t,e))).length){var
s=n[0];"contextmenu"===e&&s.listens(e,!0)&&Pt(t);var
r={originalEvent:t};if("keypress"!==t.type){var
a=s.getLatLng&&(!s._radius||s._radius<=10);r.containerPoint=a?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),r.layerPoint=this.containerPointToLayerPoint(r.containerPoint),r.latlng=a?s.getLatLng():this.layerPointToLatLng(r.layerPoint)}for(var
h=0;h<n.length;h++)if(n[h].fire(e,r,!0),r.originalEvent._stopped||!1===n[h].options.bubblingMouseEvents&&-1!==d(this._mouseEvents,e))return}},_draggableMoved:function(t){return(t=t.dragging&&t.dragging.enabled()?t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var
t=0,i=this._handlers.length;t<i;t++)this._handlers[t].disable()},whenReady:function(t,i){return
this._loaded?t.call(i||this,{target:this}):this.on("load",t,i),this},_getMapPanePos:function(){return
ht(this._mapPane)||new x(0,0)},_moved:function(){var
t=this._getMapPanePos();return
t&&!t.equals([0,0])},_getTopLeftPoint:function(t,i){return(t&&void
0!==i?this._getNewPixelOrigin(t,i):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,i){var
e=this.getSize()._divideBy(2);return
this.project(t,i)._subtract(e)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,i,e){var
n=this._getNewPixelOrigin(e,i);return
this.project(t,i)._subtract(n)},_latLngBoundsToNewLayerBounds:function(t,i,e){var
n=this._getNewPixelOrigin(e,i);return
b([this.project(t.getSouthWest(),i)._subtract(n),this.project(t.getNorthWest(),i)._subtract(n),this.project(t.getSouthEast(),i)._subtract(n),this.project(t.getNorthEast(),i)._subtract(n)])},_getCenterLayerPoint:function(){return
this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return
this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,i,e){if(!e)return
t;var n=this.project(t,i),o=this.getSize().divideBy(2),s=new
P(n.subtract(o),n.add(o)),r=this._getBoundsOffset(s,e,i);return
r.round().equals([0,0])?t:this.unproject(n.add(r),i)},_limitOffset:function(t,i){if(!i)return
t;var e=this.getPixelBounds(),n=new P(e.min.add(t),e.max.add(t));return
t.add(this._getBoundsOffset(n,i))},_getBoundsOffset:function(t,i,e){var
n=b(this.project(i.getNorthEast(),e),this.project(i.getSouthWest(),e)),o=n.min.subtract(t.min),s=n.max.subtract(t.max);return
new
x(this._rebound(o.x,-s.x),this._rebound(o.y,-s.y))},_rebound:function(t,i){return
t+i>0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var
i=this.getMinZoom(),e=this.getMaxZoom(),n=ji?this.options.zoomSnap:1;return
n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){tt(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var
e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e))&&(this.panBy(e,i),!0)},_createAnimProxy:function(){var
t=this._proxy=G("div","leaflet-proxy
leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var
i=ce,e=this._proxy.style[i];rt(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load
moveend",function(){var
t=this.getCenter(),i=this.getZoom();rt(this._proxy,this.project(t,i),this.getZoomScale(i,1))},this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){K(this._proxy),delete
this._proxy},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var
n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(f(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,n,o){this._mapPane&&(n&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,Q(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:o}),setTimeout(e(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&tt(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),f(function(){this._moveEnd(!0)},this))}}),Te=v.extend({options:{position:"topright"},initialize:function(t){l(this,t)},getPosition:function(){return
this.options.position},setPosition:function(t){var i=this._map;return
i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return
this._container},addTo:function(t){this.remove(),this._map=t;var
i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return
Q(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this},remove:function(){return
this._map?(K(this._container),this.onRemove&&this.onRemove(this._map),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),ze=function(t){return
new Te(t)};be.include({addControl:function(t){return
t.addTo(this),this},removeControl:function(t){return
t.remove(),this},_initControlPos:function(){function t(t,o){var
s=e+t+" "+e+o;i[t+o]=G("div",s,n)}var
i=this._controlCorners={},e="leaflet-",n=this._controlContainer=G("div",e+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var
t in
this._controlCorners)K(this._controlCorners[t]);K(this._controlContainer),delete
this._controlCorners,delete this._controlContainer}});var
Me=Te.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return
e<n?-1:n<e?1:0}},initialize:function(t,i,e){l(this,e),this._layerControlInputs=[],this._layers=[],this._lastZIndex=0,this._handlingClick=!1;for(var
n in t)this._addLayer(t[n],n);for(n in
i)this._addLayer(i[n],n,!0)},onAdd:function(t){this._initLayout(),this._update(),this._map=t,t.on("zoomend",this._checkDisabledLayers,this);for(var
i=0;i<this._layers.length;i++)this._layers[i].layer.on("add
remove",this._onLayerChange,this);return
this._container},addTo:function(t){return
Te.prototype.addTo.call(this,t),this._expandIfNotCollapsed()},onRemove:function(){this._map.off("zoomend",this._checkDisabledLayers,this);for(var
t=0;t<this._layers.length;t++)this._layers[t].layer.off("add
remove",this._onLayerChange,this)},addBaseLayer:function(t,i){return
this._addLayer(t,i),this._map?this._update():this},addOverlay:function(t,i){return
this._addLayer(t,i,!0),this._map?this._update():this},removeLayer:function(t){t.off("add
remove",this._onLayerChange,this);var i=this._getLayer(n(t));return
i&&this._layers.splice(this._layers.indexOf(i),1),this._map?this._update():this},expand:function(){Q(this._container,"leaflet-control-layers-expanded"),this._form.style.height=null;var
t=this._map.getSize().y-(this._container.offsetTop+50);return
t<this._form.clientHeight?(Q(this._form,"leaflet-control-layers-scrollbar"),this._form.style.height=t+"px"):tt(this._form,"leaflet-control-layers-scrollbar"),this._checkDisabledLayers(),this},collapse:function(){return
tt(this._container,"leaflet-control-layers-expanded"),this},_initLayout:function(){var
t="leaflet-control-layers",i=this._container=G("div",t),e=this.options.collapsed;i.setAttribute("aria-haspopup",!0),wt(i),xt(i);var
n=this._form=G("form",t+"-list");e&&(this._map.on("click",this.collapse,this),zi||mt(i,{mouseenter:this.expand,mouseleave:this.collapse},this));var
o=this._layersLink=G("a",t+"-toggle",i);o.href="#",o.title="Layers",qi?(mt(o,"click",Lt),mt(o,"click",this.expand,this)):mt(o,"focus",this.expand,this),e||this.expand(),this._baseLayersList=G("div",t+"-base",n),this._separator=G("div",t+"-separator",n),this._overlaysList=G("div",t+"-overlays",n),i.appendChild(n)},_getLayer:function(t){for(var
i=0;i<this._layers.length;i++)if(this._layers[i]&&n(this._layers[i].layer)===t)return
this._layers[i]},_addLayer:function(t,i,n){this._map&&t.on("add
remove",this._onLayerChange,this),this._layers.push({layer:t,name:i,overlay:n}),this.options.sortLayers&&this._layers.sort(e(function(t,i){return
this.options.sortFunction(t.layer,i.layer,t.name,i.name)},this)),this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(!this._container)return
this;Y(this._baseLayersList),Y(this._overlaysList),this._layerControlInputs=[];var
t,i,e,n,o=0;for(e=0;e<this._layers.length;e++)n=this._layers[e],this._addItem(n),i=i||n.overlay,t=t||!n.overlay,o+=n.overlay?0:1;return
this.options.hideSingleBase&&(t=t&&o>1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var
i=this._getLayer(n(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var
e='<input type="radio"
class="leaflet-control-layers-selector"
name="'+t+'"'+(i?'
checked="checked"':"")+"/>",n=document.createElement("div");return
n.innerHTML=e,n.firstChild},_addItem:function(t){var
i,e=document.createElement("label"),o=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=o):i=this._createRadioElement("leaflet-base-layers",o),this._layerControlInputs.push(i),i.layerId=n(t.layer),mt(i,"click",this._onInputClick,this);var
s=document.createElement("span");s.innerHTML="
"+t.name;var r=document.createElement("div");return
e.appendChild(r),r.appendChild(i),r.appendChild(s),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var
t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var
s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s<o.length;s++)this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);for(s=0;s<n.length;s++)this._map.hasLayer(n[s])||this._map.addLayer(n[s]);this._handlingClick=!1,this._refocusOnMap()},_checkDisabledLayers:function(){for(var
t,i,e=this._layerControlInputs,n=this._map.getZoom(),o=e.length-1;o>=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void
0!==i.options.minZoom&&n<i.options.minZoom||void
0!==i.options.maxZoom&&n>i.options.maxZoom},_expandIfNotCollapsed:function(){return
this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return
this.expand()},_collapse:function(){return
this.collapse()}}),Ce=Te.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom
in",zoomOutText:"−",zoomOutTitle:"Zoom
out"},onAdd:function(t){var
i="leaflet-control-zoom",e=G("div",i+"
leaflet-bar"),n=this.options;return
this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend
zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend
zoomlevelschange",this._updateDisabled,this)},disable:function(){return
this._disabled=!0,this._updateDisabled(),this},enable:function(){return
this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoom<this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(t.shiftKey?3:1))},_zoomOut:function(t){!this._disabled&&this._map._zoom>this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var
s=G("a",e,n);return
s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),wt(s),mt(s,"click",Lt),mt(s,"click",o,this),mt(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var
t=this._map,i="leaflet-disabled";tt(this._zoomInButton,i),tt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMinZoom())&&Q(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMaxZoom())&&Q(this._zoomInButton,i)}});be.mergeOptions({zoomControl:!0}),be.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new
Ce,this.addControl(this.zoomControl))});var
Se=Te.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var
i=G("div","leaflet-control-scale"),e=this.options;return
this._addScales(e,"leaflet-control-scale-line",i),t.on(e.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=G("div",i,e)),t.imperial&&(this._iScale=G("div",i,e))},_update:function(){var
t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var
i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+"
km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var
i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+"
mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+"
ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var
i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return
e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1,i*e}}),Ze=Te.extend({options:{position:"bottomright",prefix:'<a
href="http://leafletjs.com" title="A JS library for
interactive
maps">Leaflet</a>'},initialize:function(t){l(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=G("div","leaflet-control-attribution"),wt(this._container);for(var
i in
t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return
this._update(),this._container},setPrefix:function(t){return
this.options.prefix=t,this._update(),this},addAttribution:function(t){return
t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return
t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var
t=[];for(var i in
this._attributions)this._attributions[i]&&t.push(i);var
e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(",
")),this._container.innerHTML=e.join(" |
")}}});be.mergeOptions({attributionControl:!0}),be.addInitHook(function(){this.options.attributionControl&&(new
Ze).addTo(this)});Te.Layers=Me,Te.Zoom=Ce,Te.Scale=Se,Te.Attribution=Ze,ze.layers=function(t,i,e){return
new Me(t,i,e)},ze.zoom=function(t){return new
Ce(t)},ze.scale=function(t){return new
Se(t)},ze.attribution=function(t){return new Ze(t)};var
Ee=v.extend({initialize:function(t){this._map=t},enable:function(){return
this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return
this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Ee.addTo=function(t,i){return
t.addHandler(i,this),this};var ke,Ae={Events:li},Be=qi?"touchstart
mousedown":"mousedown",Ie={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},Oe={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},Re=ci.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){l(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(mt(this._dragStartTarget,Be,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Re._dragging===this&&this.finishDrag(),ft(this._dragStartTarget,Be,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!$(this._element,"leaflet-zoom-anim")&&!(Re._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(Re._dragging=this,this._preventOutline&&ct(this._element),ut(),fi(),this._moving)))){this.fire("down");var
i=t.touches?t.touches[0]:t,e=dt(this._element);this._startPoint=new
x(i.clientX,i.clientY),this._parentScale=pt(e),mt(document,Oe[t.type],this._onMove,this),mt(document,Ie[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var
i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new
x(i.clientX,i.clientY)._subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)<this.options.clickTolerance||(e.x/=this._parentScale.x,e.y/=this._parentScale.y,Pt(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=ht(this._element).subtract(e),Q(document.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,window.SVGElementInstance&&this._lastTarget
instanceof
SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement),Q(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(e),this._moving=!0,g(this._animRequest),this._lastEvent=t,this._animRequest=f(this._updatePosition,this,!0)))}},_updatePosition:function(){var
t={originalEvent:this._lastEvent};this.fire("predrag",t),at(this._element,this._newPos),this.fire("drag",t)},_onUp:function(t){!t._simulated&&this._enabled&&this.finishDrag()},finishDrag:function(){tt(document.body,"leaflet-dragging"),this._lastTarget&&(tt(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var
t in
Oe)ft(document,Oe[t],this._onMove,this),ft(document,Ie[t],this._onUp,this);lt(),gi(),this._moved&&this._moving&&(g(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1,Re._dragging=!1}}),Ne=(Object.freeze||Object)({simplify:Zt,pointToSegmentDistance:Et,closestPointOnSegment:function(t,i,e){return
Dt(t,i,e)},clipSegment:It,_getEdgeIntersection:Ot,_getBitCode:Rt,_sqClosestPointOnSegment:Dt,isFlat:jt,_flat:Wt}),De=(Object.freeze||Object)({clipPolygon:Ht}),je={project:function(t){return
new x(t.lng,t.lat)},unproject:function(t){return new M(t.y,t.x)},bounds:new
P([-180,-90],[180,90])},We={R:6378137,R_MINOR:6356752.314245179,bounds:new
P([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(t){var
i=Math.PI/180,e=this.R,n=t.lat*i,o=this.R_MINOR/e,s=Math.sqrt(1-o*o),r=s*Math.sin(n),a=Math.tan(Math.PI/4-n/2)/Math.pow((1-r)/(1+r),s/2);return
n=-e*Math.log(Math.max(a,1e-10)),new
x(t.lng*i*e,n)},unproject:function(t){for(var
i,e=180/Math.PI,n=this.R,o=this.R_MINOR/n,s=Math.sqrt(1-o*o),r=Math.exp(-t.y/n),a=Math.PI/2-2*Math.atan(r),h=0,u=.1;h<15&&Math.abs(u)>1e-7;h++)i=s*Math.sin(a),i=Math.pow((1-i)/(1+i),s/2),a+=u=Math.PI/2-2*Math.atan(r*i)-a;return
new
M(a*e,t.x*e/n)}},He=(Object.freeze||Object)({LonLat:je,Mercator:We,SphericalMercator:mi}),Fe=i({},pi,{code:"EPSG:3395",projection:We,transformation:function(){var
t=.5/(Math.PI*We.R);return
Z(t,.5,-t,.5)}()}),Ue=i({},pi,{code:"EPSG:4326",projection:je,transformation:Z(1/180,1,-1/180,.5)}),Ve=i({},di,{projection:je,transformation:Z(1,0,-1,0),scale:function(t){return
Math.pow(2,t)},zoom:function(t){return
Math.log(t)/Math.LN2},distance:function(t,i){var
e=i.lng-t.lng,n=i.lat-t.lat;return
Math.sqrt(e*e+n*n)},infinite:!0});di.Earth=pi,di.EPSG3395=Fe,di.EPSG3857=yi,di.EPSG900913=xi,di.EPSG4326=Ue,di.Simple=Ve;var
qe=ci.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return
t.addLayer(this),this},remove:function(){return
this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return
t&&t.removeLayer(this),this},getPane:function(t){return
this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return
this._map._targets[n(t)]=this,this},removeInteractiveTarget:function(t){return
delete this._map._targets[n(t)],this},getAttribution:function(){return
this.options.attribution},_layerAdd:function(t){var
i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var
e=this.getEvents();i.on(e,this),this.once("remove",function(){i.off(e,this)},this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});be.include({addLayer:function(t){if(!t._layerAdd)throw
new Error("The provided object is not a Layer.");var
i=n(t);return
this._layers[i]?this:(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var
i=n(t);return
this._layers[i]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete
this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&n(t)in
this._layers},eachLayer:function(t,i){for(var e in
this._layers)t.call(i,this._layers[e]);return
this},_addLayers:function(t){for(var
i=0,e=(t=t?oi(t)?t:[t]:[]).length;i<e;i++)this.addLayer(t[i])},_addZoomLimit:function(t){!isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[n(t)]=t,this._updateZoomLevels())},_removeZoomLimit:function(t){var
i=n(t);this._zoomBoundLayers[i]&&(delete
this._zoomBoundLayers[i],this._updateZoomLevels())},_updateZoomLevels:function(){var
t=1/0,i=-1/0,e=this._getZoomSpan();for(var n in this._zoomBoundLayers){var
o=this._zoomBoundLayers[n].options;t=void
0===o.minZoom?t:Math.min(t,o.minZoom),i=void
0===o.maxZoom?i:Math.max(i,o.maxZoom)}this._layersMaxZoom=i===-1/0?void
0:i,this._layersMinZoom=t===1/0?void
0:t,e!==this._getZoomSpan()&&this.fire("zoomlevelschange"),void
0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void
0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()<this._layersMinZoom&&this.setZoom(this._layersMinZoom)}});var
Ge=qe.extend({initialize:function(t,i){l(this,i),this._layers={};var
e,n;if(t)for(e=0,n=t.length;e<n;e++)this.addLayer(t[e])},addLayer:function(t){var
i=this.getLayerId(t);return
this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var
i=t in this._layers?t:this.getLayerId(t);return
this._map&&this._layers[i]&&this._map.removeLayer(this._layers[i]),delete
this._layers[i],this},hasLayer:function(t){return!!t&&(t in
this._layers||this.getLayerId(t)in
this._layers)},clearLayers:function(){return
this.eachLayer(this.removeLayer,this)},invoke:function(t){var
i,e,n=Array.prototype.slice.call(arguments,1);for(i in
this._layers)(e=this._layers[i])[t]&&e[t].apply(e,n);return
this},onAdd:function(t){this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t)},eachLayer:function(t,i){for(var
e in this._layers)t.call(i,this._layers[e]);return
this},getLayer:function(t){return this._layers[t]},getLayers:function(){var
t=[];return this.eachLayer(t.push,t),t},setZIndex:function(t){return
this.invoke("setZIndex",t)},getLayerId:function(t){return
n(t)}}),Ke=Ge.extend({addLayer:function(t){return
this.hasLayer(t)?this:(t.addEventParent(this),Ge.prototype.addLayer.call(this,t),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return
this.hasLayer(t)?(t in
this._layers&&(t=this._layers[t]),t.removeEventParent(this),Ge.prototype.removeLayer.call(this,t),this.fire("layerremove",{layer:t})):this},setStyle:function(t){return
this.invoke("setStyle",t)},bringToFront:function(){return
this.invoke("bringToFront")},bringToBack:function(){return
this.invoke("bringToBack")},getBounds:function(){var t=new
T;for(var i in this._layers){var
e=this._layers[i];t.extend(e.getBounds?e.getBounds():e.getLatLng())}return
t}}),Ye=v.extend({options:{popupAnchor:[0,0],tooltipAnchor:[0,0]},initialize:function(t){l(this,t)},createIcon:function(t){return
this._createIcon("icon",t)},createShadow:function(t){return
this._createIcon("shadow",t)},_createIcon:function(t,i){var
e=this._getIconUrl(t);if(!e){if("icon"===t)throw new
Error("iconUrl not set in Icon options (see the docs).");return
null}var
n=this._createImg(e,i&&"IMG"===i.tagName?i:null);return
this._setIconStyles(n,t),n},_setIconStyles:function(t,i){var
e=this.options,n=e[i+"Size"];"number"==typeof
n&&(n=[n,n]);var
o=w(n),s=w("shadow"===i&&e.shadowAnchor||e.iconAnchor||o&&o.divideBy(2,!0));t.className="leaflet-marker-"+i+"
"+(e.className||""),s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),o&&(t.style.width=o.x+"px",t.style.height=o.y+"px")},_createImg:function(t,i){return
i=i||document.createElement("img"),i.src=t,i},_getIconUrl:function(t){return
Yi&&this.options[t+"RetinaUrl"]||this.options[t+"Url"]}}),Xe=Ye.extend({options:{iconUrl:"marker-icon.png",iconRetinaUrl:"marker-icon-2x.png",shadowUrl:"marker-shadow.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],tooltipAnchor:[16,-28],shadowSize:[41,41]},_getIconUrl:function(t){return
Xe.imagePath||(Xe.imagePath=this._detectIconPath()),(this.options.imagePath||Xe.imagePath)+Ye.prototype._getIconUrl.call(this,t)},_detectIconPath:function(){var
t=G("div","leaflet-default-icon-path",document.body),i=q(t,"background-image")||q(t,"backgroundImage");return
document.body.removeChild(t),i=null===i||0!==i.indexOf("url")?"":i.replace(/^url\(["']?/,"").replace(/marker-icon\.png["']?\)$/,"")}}),Je=Ee.extend({initialize:function(t){this._marker=t},addHooks:function(){var
t=this._marker._icon;this._draggable||(this._draggable=new
Re(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),Q(t,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&tt(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return
this._draggable&&this._draggable._moved},_adjustPan:function(t){var
i=this._marker,e=i._map,n=this._marker.options.autoPanSpeed,o=this._marker.options.autoPanPadding,s=ht(i._icon),r=e.getPixelBounds(),a=e.getPixelOrigin(),h=b(r.min._subtract(a).add(o),r.max._subtract(a).subtract(o));if(!h.contains(s)){var
u=w((Math.max(h.max.x,s.x)-h.max.x)/(r.max.x-h.max.x)-(Math.min(h.min.x,s.x)-h.min.x)/(r.min.x-h.min.x),(Math.max(h.max.y,s.y)-h.max.y)/(r.max.y-h.max.y)-(Math.min(h.min.y,s.y)-h.min.y)/(r.min.y-h.min.y)).multiplyBy(n);e.panBy(u,{animate:!1}),this._draggable._newPos._add(u),this._draggable._startPos._add(u),at(i._icon,this._draggable._newPos),this._onDrag(t),this._panRequest=f(this._adjustPan.bind(this,t))}},_onDragStart:function(){this._oldLatLng=this._marker.getLatLng(),this._marker.closePopup().fire("movestart").fire("dragstart")},_onPreDrag:function(t){this._marker.options.autoPan&&(g(this._panRequest),this._panRequest=f(this._adjustPan.bind(this,t)))},_onDrag:function(t){var
i=this._marker,e=i._shadow,n=ht(i._icon),o=i._map.layerPointToLatLng(n);e&&at(e,n),i._latlng=o,t.latlng=o,t.oldLatLng=this._oldLatLng,i.fire("move",t).fire("drag",t)},_onDragEnd:function(t){g(this._panRequest),delete
this._oldLatLng,this._marker.fire("moveend").fire("dragend",t)}}),$e=qe.extend({options:{icon:new
Xe,interactive:!0,keyboard:!0,title:"",alt:"",zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:"markerPane",bubblingMouseEvents:!1,draggable:!1,autoPan:!1,autoPanPadding:[50,50],autoPanSpeed:10},initialize:function(t,i){l(this,i),this._latlng=C(t)},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation,this._zoomAnimated&&t.on("zoomanim",this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(t){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),delete
this.dragging,this._zoomAnimated&&t.off("zoomanim",this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return
this._latlng},setLatLng:function(t){var i=this._latlng;return
this._latlng=C(t),this.update(),this.fire("move",{oldLatLng:i,latlng:this._latlng})},setZIndexOffset:function(t){return
this.options.zIndexOffset=t,this.update()},setIcon:function(t){return
this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return
this._icon},update:function(){if(this._icon&&this._map){var
t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return
this},_initIcon:function(){var
t=this.options,i="leaflet-zoom-"+(this._zoomAnimated?"animated":"hide"),e=t.icon.createIcon(this._icon),n=!1;e!==this._icon&&(this._icon&&this._removeIcon(),n=!0,t.title&&(e.title=t.title),"IMG"===e.tagName&&(e.alt=t.alt||"")),Q(e,i),t.keyboard&&(e.tabIndex="0"),this._icon=e,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex});var
o=t.icon.createShadow(this._shadow),s=!1;o!==this._shadow&&(this._removeShadow(),s=!0),o&&(Q(o,i),o.alt=""),this._shadow=o,t.opacity<1&&this._updateOpacity(),n&&this.getPane().appendChild(this._icon),this._initInteraction(),o&&s&&this.getPane("shadowPane").appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),K(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&K(this._shadow),this._shadow=null},_setPos:function(t){at(this._icon,t),this._shadow&&at(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var
i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(i)},_initInteraction:function(){if(this.options.interactive&&(Q(this._icon,"leaflet-interactive"),this.addInteractiveTarget(this._icon),Je)){var
t=this.options.draggable;this.dragging&&(t=this.dragging.enabled(),this.dragging.disable()),this.dragging=new
Je(this),t&&this.dragging.enable()}},setOpacity:function(t){return
this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var
t=this.options.opacity;nt(this._icon,t),this._shadow&&nt(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_getPopupAnchor:function(){return
this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return
this.options.icon.options.tooltipAnchor}}),Qe=qe.extend({options:{stroke:!0,color:"#3388ff",weight:3,opacity:1,lineCap:"round",lineJoin:"round",dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,fillRule:"evenodd",interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(t){this._renderer=t.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return
this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return
l(this,t),this._renderer&&this._renderer._updateStyle(this),this},bringToFront:function(){return
this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return
this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return
this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+this._renderer.options.tolerance}}),tn=Qe.extend({options:{fill:!0,radius:10},initialize:function(t,i){l(this,i),this._latlng=C(t),this._radius=this.options.radius},setLatLng:function(t){return
this._latlng=C(t),this.redraw(),this.fire("move",{latlng:this._latlng})},getLatLng:function(){return
this._latlng},setRadius:function(t){return
this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return
this._radius},setStyle:function(t){var
i=t&&t.radius||this._radius;return
Qe.prototype.setStyle.call(this,t),this.setRadius(i),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var
t=this._radius,i=this._radiusY||t,e=this._clickTolerance(),n=[t+e,i+e];this._pxBounds=new
P(this._point.subtract(n),this._point.add(n))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return
this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(t){return
t.distanceTo(this._point)<=this._radius+this._clickTolerance()}}),en=tn.extend({initialize:function(t,e,n){if("number"==typeof
e&&(e=i({},n,{radius:e})),l(this,e),this._latlng=C(t),isNaN(this.options.radius))throw
new Error("Circle radius cannot be
NaN");this._mRadius=this.options.radius},setRadius:function(t){return
this._mRadius=t,this.redraw()},getRadius:function(){return
this._mRadius},getBounds:function(){var
t=[this._radius,this._radiusY||this._radius];return new
T(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:Qe.prototype.setStyle,_project:function(){var
t=this._latlng.lng,i=this._latlng.lat,e=this._map,n=e.options.crs;if(n.distance===pi.distance){var
o=Math.PI/180,s=this._mRadius/pi.R/o,r=e.project([i+s,t]),a=e.project([i-s,t]),h=r.add(a).divideBy(2),u=e.unproject(h).lat,l=Math.acos((Math.cos(s*o)-Math.sin(i*o)*Math.sin(u*o))/(Math.cos(i*o)*Math.cos(u*o)))/o;(isNaN(l)||0===l)&&(l=s/Math.cos(Math.PI/180*i)),this._point=h.subtract(e.getPixelOrigin()),this._radius=isNaN(l)?0:h.x-e.project([u,t-l]).x,this._radiusY=h.y-r.y}else{var
c=n.unproject(n.project(this._latlng).subtract([this._mRadius,0]));this._point=e.latLngToLayerPoint(this._latlng),this._radius=this._point.x-e.latLngToLayerPoint(c).x}this._updateBounds()}}),nn=Qe.extend({options:{smoothFactor:1,noClip:!1},initialize:function(t,i){l(this,i),this._setLatLngs(t)},getLatLngs:function(){return
this._latlngs},setLatLngs:function(t){return
this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var
i,e,n=1/0,o=null,s=Dt,r=0,a=this._parts.length;r<a;r++)for(var
h=this._parts[r],u=1,l=h.length;u<l;u++){var
c=s(t,i=h[u-1],e=h[u],!0);c<n&&(n=c,o=s(t,i,e))}return
o&&(o.distance=Math.sqrt(n)),o},getCenter:function(){if(!this._map)throw
new Error("Must add layer to map before using getCenter()");var
t,i,e,n,o,s,r,a=this._rings[0],h=a.length;if(!h)return
null;for(t=0,i=0;t<h-1;t++)i+=a[t].distanceTo(a[t+1])/2;if(0===i)return
this._map.layerPointToLatLng(a[0]);for(t=0,n=0;t<h-1;t++)if(o=a[t],s=a[t+1],e=o.distanceTo(s),(n+=e)>i)return
r=(n-i)/e,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return
this._bounds},addLatLng:function(t,i){return
i=i||this._defaultShape(),t=C(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new
T,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return
jt(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var
i=[],e=jt(t),n=0,o=t.length;n<o;n++)e?(i[n]=C(t[n]),this._bounds.extend(i[n])):i[n]=this._convertLatLngs(t[n]);return
i},_project:function(){var t=new
P;this._rings=[],this._projectLatlngs(this._latlngs,this._rings,t);var
i=this._clickTolerance(),e=new
x(i,i);this._bounds.isValid()&&t.isValid()&&(t.min._subtract(e),t.max._add(e),this._pxBounds=t)},_projectLatlngs:function(t,i,e){var
n,o,s=t[0]instanceof
M,r=t.length;if(s){for(o=[],n=0;n<r;n++)o[n]=this._map.latLngToLayerPoint(t[n]),e.extend(o[n]);i.push(o)}else
for(n=0;n<r;n++)this._projectLatlngs(t[n],i,e)},_clipPoints:function(){var
t=this._renderer._bounds;if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else{var
i,e,n,o,s,r,a,h=this._parts;for(i=0,n=0,o=this._rings.length;i<o;i++)for(e=0,s=(a=this._rings[i]).length;e<s-1;e++)(r=It(a[e],a[e+1],t,e,!0))&&(h[n]=h[n]||[],h[n].push(r[0]),r[1]===a[e+1]&&e!==s-2||(h[n].push(r[1]),n++))}},_simplifyPoints:function(){for(var
t=this._parts,i=this.options.smoothFactor,e=0,n=t.length;e<n;e++)t[e]=Zt(t[e],i)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(t,i){var
e,n,o,s,r,a,h=this._clickTolerance();if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(e=0,s=this._parts.length;e<s;e++)for(n=0,o=(r=(a=this._parts[e]).length)-1;n<r;o=n++)if((i||0!==n)&&Et(t,a[o],a[n])<=h)return!0;return!1}});nn._flat=Wt;var
on=nn.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length},getCenter:function(){if(!this._map)throw
new Error("Must add layer to map before using getCenter()");var
t,i,e,n,o,s,r,a,h,u=this._rings[0],l=u.length;if(!l)return
null;for(s=r=a=0,t=0,i=l-1;t<l;i=t++)e=u[t],n=u[i],o=e.y*n.x-n.y*e.x,r+=(e.x+n.x)*o,a+=(e.y+n.y)*o,s+=3*o;return
h=0===s?u[0]:[r/s,a/s],this._map.layerPointToLatLng(h)},_convertLatLngs:function(t){var
i=nn.prototype._convertLatLngs.call(this,t),e=i.length;return
e>=2&&i[0]instanceof
M&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){nn.prototype._setLatLngs.call(this,t),jt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return
jt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var
t=this._renderer._bounds,i=this.options.weight,e=new x(i,i);if(t=new
P(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else
for(var
n,o=0,s=this._rings.length;o<s;o++)(n=Ht(this._rings[o],t,!0)).length&&this._parts.push(n)},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(t){var
i,e,n,o,s,r,a,h,u=!1;if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(o=0,a=this._parts.length;o<a;o++)for(s=0,r=(h=(i=this._parts[o]).length)-1;s<h;r=s++)e=i[s],n=i[r],e.y>t.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return
u||nn.prototype._containsPoint.call(this,t,!0)}}),sn=Ke.extend({initialize:function(t,i){l(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var
i,e,n,o=oi(t)?t:t.features;if(o){for(i=0,e=o.length;i<e;i++)((n=o[i]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return
this}var s=this.options;if(s.filter&&!s.filter(t))return this;var
r=Ft(t,s);return
r?(r.feature=Yt(t),r.defaultOptions=r.options,this.resetStyle(r),s.onEachFeature&&s.onEachFeature(t,r),this.addLayer(r)):this},resetStyle:function(t){return
t.options=i({},t.defaultOptions),this._setLayerStyle(t,this.options.style),this},setStyle:function(t){return
this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof
i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),rn={toGeoJSON:function(t){return
Kt(this,{type:"Point",coordinates:qt(this.getLatLng(),t)})}};$e.include(rn),en.include(rn),tn.include(rn),nn.include({toGeoJSON:function(t){var
i=!jt(this._latlngs),e=Gt(this._latlngs,i?1:0,!1,t);return
Kt(this,{type:(i?"Multi":"")+"LineString",coordinates:e})}}),on.include({toGeoJSON:function(t){var
i=!jt(this._latlngs),e=i&&!jt(this._latlngs[0]),n=Gt(this._latlngs,e?2:i?1:0,!0,t);return
i||(n=[n]),Kt(this,{type:(e?"Multi":"")+"Polygon",coordinates:n})}}),Ge.include({toMultiPoint:function(t){var
i=[];return
this.eachLayer(function(e){i.push(e.toGeoJSON(t).geometry.coordinates)}),Kt(this,{type:"MultiPoint",coordinates:i})},toGeoJSON:function(t){var
i=this.feature&&this.feature.geometry&&this.feature.geometry.type;if("MultiPoint"===i)return
this.toMultiPoint(t);var e="GeometryCollection"===i,n=[];return
this.eachLayer(function(i){if(i.toGeoJSON){var
o=i.toGeoJSON(t);if(e)n.push(o.geometry);else{var
s=Yt(o);"FeatureCollection"===s.type?n.push.apply(n,s.features):n.push(s)}}}),e?Kt(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}});var
an=Xt,hn=qe.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,i,e){this._url=t,this._bounds=z(i),l(this,e)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(Q(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){K(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return
this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return
t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return
this._map&&X(this._image),this},bringToBack:function(){return
this._map&&J(this._image),this},setUrl:function(t){return
this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return
this._bounds=z(t),this._map&&this._reset(),this},getEvents:function(){var
t={zoom:this._reset,viewreset:this._reset};return
this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return
this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return
this._bounds},getElement:function(){return
this._image},_initImage:function(){var
t="IMG"===this._url.tagName,i=this._image=t?this._url:G("img");Q(i,"leaflet-image-layer"),this._zoomAnimated&&Q(i,"leaflet-zoom-animated"),this.options.className&&Q(i,this.options.className),i.onselectstart=r,i.onmousemove=r,i.onload=e(this.fire,this,"load"),i.onerror=e(this._overlayOnError,this,"error"),(this.options.crossOrigin||""===this.options.crossOrigin)&&(i.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t?this._url=i.src:(i.src=this._url,i.alt=this.options.alt)},_animateZoom:function(t){var
i=this._map.getZoomScale(t.zoom),e=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;rt(this._image,e,i)},_reset:function(){var
t=this._image,i=new
P(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),e=i.getSize();at(t,i.min),t.style.width=e.x+"px",t.style.height=e.y+"px"},_updateOpacity:function(){nt(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&void
0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var
t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)}}),un=hn.extend({options:{autoplay:!0,loop:!0},_initImage:function(){var
t="VIDEO"===this._url.tagName,i=this._image=t?this._url:G("video");if(Q(i,"leaflet-image-layer"),this._zoomAnimated&&Q(i,"leaflet-zoom-animated"),i.onselectstart=r,i.onmousemove=r,i.onloadeddata=e(this.fire,this,"load"),t){for(var
n=i.getElementsByTagName("source"),o=[],s=0;s<n.length;s++)o.push(n[s].src);this._url=n.length>0?o:[i.src]}else{oi(this._url)||(this._url=[this._url]),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop;for(var
a=0;a<this._url.length;a++){var
h=G("source");h.src=this._url[a],i.appendChild(h)}}}}),ln=qe.extend({options:{offset:[0,7],className:"",pane:"popupPane"},initialize:function(t,i){l(this,t),this._source=i},onAdd:function(t){this._zoomAnimated=t._zoomAnimated,this._container||this._initLayout(),t._fadeAnimated&&nt(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&nt(this._container,1),this.bringToFront()},onRemove:function(t){t._fadeAnimated?(nt(this._container,0),this._removeTimeout=setTimeout(e(K,void
0,this._container),200)):K(this._container)},getLatLng:function(){return
this._latlng},setLatLng:function(t){return
this._latlng=C(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return
this._content},setContent:function(t){return
this._content=t,this.update(),this},getElement:function(){return
this._container},update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},getEvents:function(){var
t={zoom:this._updatePosition,viewreset:this._updatePosition};return
this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return
this._map&&X(this._container),this},bringToBack:function(){return
this._map&&J(this._container),this},_updateContent:function(){if(this._content){var
t=this._contentNode,i="function"==typeof
this._content?this._content(this._source||this):this._content;if("string"==typeof
i)t.innerHTML=i;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(i)}this.fire("contentupdate")}},_updatePosition:function(){if(this._map){var
t=this._map.latLngToLayerPoint(this._latlng),i=w(this.options.offset),e=this._getAnchor();this._zoomAnimated?at(this._container,t.add(e)):i=i.add(t).add(e);var
n=this._containerBottom=-i.y,o=this._containerLeft=-Math.round(this._containerWidth/2)+i.x;this._container.style.bottom=n+"px",this._container.style.left=o+"px"}},_getAnchor:function(){return[0,0]}}),cn=ln.extend({options:{maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:[5,5],keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:""},openOn:function(t){return
t.openPopup(this),this},onAdd:function(t){ln.prototype.onAdd.call(this,t),t.fire("popupopen",{popup:this}),this._source&&(this._source.fire("popupopen",{popup:this},!0),this._source
instanceof
Qe||this._source.on("preclick",yt))},onRemove:function(t){ln.prototype.onRemove.call(this,t),t.fire("popupclose",{popup:this}),this._source&&(this._source.fire("popupclose",{popup:this},!0),this._source
instanceof
Qe||this._source.off("preclick",yt))},getEvents:function(){var
t=ln.prototype.getEvents.call(this);return(void
0!==this.options.closeOnClick?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this._close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_close:function(){this._map&&this._map.closePopup(this)},_initLayout:function(){var
t="leaflet-popup",i=this._container=G("div",t+"
"+(this.options.className||"")+"
leaflet-zoom-animated"),e=this._wrapper=G("div",t+"-content-wrapper",i);if(this._contentNode=G("div",t+"-content",e),wt(e),xt(this._contentNode),mt(e,"contextmenu",yt),this._tipContainer=G("div",t+"-tip-container",i),this._tip=G("div",t+"-tip",this._tipContainer),this.options.closeButton){var
n=this._closeButton=G("a",t+"-close-button",i);n.href="#close",n.innerHTML="×",mt(n,"click",this._onCloseButtonClick,this)}},_updateLayout:function(){var
t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var
e=t.offsetWidth;e=Math.min(e,this.options.maxWidth),e=Math.max(e,this.options.minWidth),i.width=e+1+"px",i.whiteSpace="",i.height="";var
n=t.offsetHeight,o=this.options.maxHeight;o&&n>o?(i.height=o+"px",Q(t,"leaflet-popup-scrolled")):tt(t,"leaflet-popup-scrolled"),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var
i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();at(this._container,i.add(e))},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress)){var
t=this._map,i=parseInt(q(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new
x(this._containerLeft,-e-this._containerBottom);o._add(ht(this._container));var
s=t.layerPointToContainerPoint(o),r=w(this.options.autoPanPadding),a=w(this.options.autoPanPaddingTopLeft||r),h=w(this.options.autoPanPaddingBottomRight||r),u=t.getSize(),l=0,c=0;s.x+n+h.x>u.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c])}},_onCloseButtonClick:function(t){this._close(),Lt(t)},_getAnchor:function(){return
w(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});be.mergeOptions({closePopupOnClick:!0}),be.include({openPopup:function(t,i,e){return
t instanceof cn||(t=new
cn(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return
t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),qe.include({bindPopup:function(t,i){return
t instanceof
cn?(l(t,i),this._popup=t,t._source=this):(this._popup&&!i||(this._popup=new
cn(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return
this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){if(t
instanceof qe||(i=t,t=this),t instanceof Ke)for(var e in
this._layers){t=this._layers[e];break}return
i||(i=t.getCenter?t.getCenter():t.getLatLng()),this._popup&&this._map&&(this._popup._source=t,this._popup.update(),this._map.openPopup(this._popup,i)),this},closePopup:function(){return
this._popup&&this._popup._close(),this},togglePopup:function(t){return
this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return
this._popup&&this._popup.setContent(t),this},getPopup:function(){return
this._popup},_openPopup:function(t){var
i=t.layer||t.target;this._popup&&this._map&&(Lt(t),i
instanceof
Qe?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var
_n=ln.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){ln.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){ln.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var
t=ln.prototype.getEvents.call(this);return
qi&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var
t="leaflet-tooltip
"+(this.options.className||"")+"
leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=G("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var
i=this._map,e=this._container,n=i.latLngToContainerPoint(i.getCenter()),o=i.layerPointToContainerPoint(t),s=this.options.direction,r=e.offsetWidth,a=e.offsetHeight,h=w(this.options.offset),u=this._getAnchor();"top"===s?t=t.add(w(-r/2+h.x,-a+h.y+u.y,!0)):"bottom"===s?t=t.subtract(w(r/2-h.x,-h.y,!0)):"center"===s?t=t.subtract(w(r/2+h.x,a/2-u.y+h.y,!0)):"right"===s||"auto"===s&&o.x<n.x?(s="right",t=t.add(w(h.x+u.x,u.y-a/2+h.y,!0))):(s="left",t=t.subtract(w(r+u.x-h.x,a/2-u.y-h.y,!0))),tt(e,"leaflet-tooltip-right"),tt(e,"leaflet-tooltip-left"),tt(e,"leaflet-tooltip-top"),tt(e,"leaflet-tooltip-bottom"),Q(e,"leaflet-tooltip-"+s),at(e,t)},_updatePosition:function(){var
t=this._map.latLngToLayerPoint(this._latlng);this._setPosition(t)},setOpacity:function(t){this.options.opacity=t,this._container&&nt(this._container,t)},_animateZoom:function(t){var
i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPosition(i)},_getAnchor:function(){return
w(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():[0,0])}});be.include({openTooltip:function(t,i,e){return
t instanceof _n||(t=new
_n(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:this.addLayer(t)},closeTooltip:function(t){return
t&&this.removeLayer(t),this}}),qe.include({bindTooltip:function(t,i){return
t instanceof
_n?(l(t,i),this._tooltip=t,t._source=this):(this._tooltip&&!i||(this._tooltip=new
_n(i,this)),this._tooltip.setContent(t)),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return
this._tooltip&&(this._initTooltipInteractions(!0),this.closeTooltip(),this._tooltip=null),this},_initTooltipInteractions:function(t){if(t||!this._tooltipHandlersAdded){var
i=t?"off":"on",e={remove:this.closeTooltip,move:this._moveTooltip};this._tooltip.options.permanent?e.add=this._openTooltip:(e.mouseover=this._openTooltip,e.mouseout=this.closeTooltip,this._tooltip.options.sticky&&(e.mousemove=this._moveTooltip),qi&&(e.click=this._openTooltip)),this[i](e),this._tooltipHandlersAdded=!t}},openTooltip:function(t,i){if(t
instanceof qe||(i=t,t=this),t instanceof Ke)for(var e in
this._layers){t=this._layers[e];break}return
i||(i=t.getCenter?t.getCenter():t.getLatLng()),this._tooltip&&this._map&&(this._tooltip._source=t,this._tooltip.update(),this._map.openTooltip(this._tooltip,i),this._tooltip.options.interactive&&this._tooltip._container&&(Q(this._tooltip._container,"leaflet-clickable"),this.addInteractiveTarget(this._tooltip._container))),this},closeTooltip:function(){return
this._tooltip&&(this._tooltip._close(),this._tooltip.options.interactive&&this._tooltip._container&&(tt(this._tooltip._container,"leaflet-clickable"),this.removeInteractiveTarget(this._tooltip._container))),this},toggleTooltip:function(t){return
this._tooltip&&(this._tooltip._map?this.closeTooltip():this.openTooltip(t)),this},isTooltipOpen:function(){return
this._tooltip.isOpen()},setTooltipContent:function(t){return
this._tooltip&&this._tooltip.setContent(t),this},getTooltip:function(){return
this._tooltip},_openTooltip:function(t){var
i=t.layer||t.target;this._tooltip&&this._map&&this.openTooltip(i,this._tooltip.options.sticky?t.latlng:void
0)},_moveTooltip:function(t){var
i,e,n=t.latlng;this._tooltip.options.sticky&&t.originalEvent&&(i=this._map.mouseEventToContainerPoint(t.originalEvent),e=this._map.containerPointToLayerPoint(i),n=this._map.layerPointToLatLng(e)),this._tooltip.setLatLng(n)}});var
dn=Ye.extend({options:{iconSize:[12,12],html:!1,bgPos:null,className:"leaflet-div-icon"},createIcon:function(t){var
i=t&&"DIV"===t.tagName?t:document.createElement("div"),e=this.options;if(i.innerHTML=!1!==e.html?e.html:"",e.bgPos){var
n=w(e.bgPos);i.style.backgroundPosition=-n.x+"px
"+-n.y+"px"}return
this._setIconStyles(i,"icon"),i},createShadow:function(){return
null}});Ye.Default=Xe;var
pn=qe.extend({options:{tileSize:256,opacity:1,updateWhenIdle:Wi,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void
0,maxNativeZoom:void 0,minNativeZoom:void
0,noWrap:!1,pane:"tilePane",className:"",keepBuffer:2},initialize:function(t){l(this,t)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView(),this._update()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){this._removeAllTiles(),K(this._container),t._removeZoomLimit(this),this._container=null,this._tileZoom=void
0},bringToFront:function(){return
this._map&&(X(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return
this._map&&(J(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return
this._container},setOpacity:function(t){return
this.options.opacity=t,this._updateOpacity(),this},setZIndex:function(t){return
this.options.zIndex=t,this._updateZIndex(),this},isLoading:function(){return
this._loading},redraw:function(){return
this._map&&(this._removeAllTiles(),this._update()),this},getEvents:function(){var
t={viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return
this.options.updateWhenIdle||(this._onMove||(this._onMove=o(this._onMoveEnd,this.options.updateInterval,this)),t.move=this._onMove),this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},createTile:function(){return
document.createElement("div")},getTileSize:function(){var
t=this.options.tileSize;return t instanceof x?t:new
x(t,t)},_updateZIndex:function(){this._container&&void
0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t){for(var
i,e=this.getPane().children,n=-t(-1/0,1/0),o=0,s=e.length;o<s;o++)i=e[o].style.zIndex,e[o]!==this._container&&i&&(n=t(n,+i));isFinite(n)&&(this.options.zIndex=n+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!Li){nt(this._container,this.options.opacity);var
t=+new Date,i=!1,e=!1;for(var n in this._tiles){var
o=this._tiles[n];if(o.current&&o.loaded){var
s=Math.min(1,(t-o.loaded)/200);nt(o.el,s),s<1?i=!0:(o.active?e=!0:this._onOpaqueTile(o),o.active=!0)}}e&&!this._noPrune&&this._pruneTiles(),i&&(g(this._fadeFrame),this._fadeFrame=f(this._updateOpacity,this))}},_onOpaqueTile:r,_initContainer:function(){this._container||(this._container=G("div","leaflet-layer
"+(this.options.className||"")),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var
t=this._tileZoom,i=this.options.maxZoom;if(void 0!==t){for(var e in
this._levels)this._levels[e].el.children.length||e===t?(this._levels[e].el.style.zIndex=i-Math.abs(t-e),this._onUpdateLevel(e)):(K(this._levels[e].el),this._removeTilesAtZoom(e),this._onRemoveLevel(e),delete
this._levels[e]);var n=this._levels[t],o=this._map;return
n||((n=this._levels[t]={}).el=G("div","leaflet-tile-container
leaflet-zoom-animated",this._container),n.el.style.zIndex=i,n.origin=o.project(o.unproject(o.getPixelOrigin()),t).round(),n.zoom=t,this._setZoomTransform(n,o.getCenter(),o.getZoom()),n.el.offsetWidth,this._onCreateLevel(n)),this._level=n,n}},_onUpdateLevel:r,_onRemoveLevel:r,_onCreateLevel:r,_pruneTiles:function(){if(this._map){var
t,i,e=this._map.getZoom();if(e>this.options.maxZoom||e<this.options.minZoom)this._removeAllTiles();else{for(t
in this._tiles)(i=this._tiles[t]).retain=i.current;for(t in
this._tiles)if((i=this._tiles[t]).current&&!i.active){var
n=i.coords;this._retainParent(n.x,n.y,n.z,n.z-5)||this._retainChildren(n.x,n.y,n.z,n.z+2)}for(t
in
this._tiles)this._tiles[t].retain||this._removeTile(t)}}},_removeTilesAtZoom:function(t){for(var
i in
this._tiles)this._tiles[i].coords.z===t&&this._removeTile(i)},_removeAllTiles:function(){for(var
t in this._tiles)this._removeTile(t)},_invalidateAll:function(){for(var t
in this._levels)K(this._levels[t].el),this._onRemoveLevel(t),delete
this._levels[t];this._removeAllTiles(),this._tileZoom=void
0},_retainParent:function(t,i,e,n){var
o=Math.floor(t/2),s=Math.floor(i/2),r=e-1,a=new x(+o,+s);a.z=+r;var
h=this._tileCoordsToKey(a),u=this._tiles[h];return
u&&u.active?(u.retain=!0,!0):(u&&u.loaded&&(u.retain=!0),r>n&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var
o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var r=new
x(o,s);r.z=e+1;var
a=this._tileCoordsToKey(r),h=this._tiles[a];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1<n&&this._retainChildren(o,s,e+1,n))}},_resetView:function(t){var
i=t&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),i,i)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_clampZoom:function(t){var
i=this.options;return void
0!==i.minNativeZoom&&t<i.minNativeZoom?i.minNativeZoom:void
0!==i.maxNativeZoom&&i.maxNativeZoom<t?i.maxNativeZoom:t},_setView:function(t,i,e,n){var
o=this._clampZoom(Math.round(i));(void
0!==this.options.maxZoom&&o>this.options.maxZoom||void
0!==this.options.minZoom&&o<this.options.minZoom)&&(o=void
0);var
s=this.options.updateWhenZooming&&o!==this._tileZoom;n&&!s||(this._tileZoom=o,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),void
0!==o&&this._update(t),e||this._pruneTiles(),this._noPrune=!!e),this._setZoomTransforms(t,i)},_setZoomTransforms:function(t,i){for(var
e in
this._levels)this._setZoomTransform(this._levels[e],t,i)},_setZoomTransform:function(t,i,e){var
n=this._map.getZoomScale(e,t.zoom),o=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(i,e)).round();ji?rt(t.el,o,n):at(t.el,o)},_resetGrid:function(){var
t=this._map,i=t.options.crs,e=this._tileSize=this.getTileSize(),n=this._tileZoom,o=this._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRange=this._pxBoundsToTileRange(o)),this._wrapX=i.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0,i.wrapLng[0]],n).x/e.x),Math.ceil(t.project([0,i.wrapLng[1]],n).x/e.y)],this._wrapY=i.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([i.wrapLat[0],0],n).y/e.x),Math.ceil(t.project([i.wrapLat[1],0],n).y/e.y)]},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._update()},_getTiledPixelBounds:function(t){var
i=this._map,e=i._animatingZoom?Math.max(i._animateToZoom,i.getZoom()):i.getZoom(),n=i.getZoomScale(e,this._tileZoom),o=i.project(t,this._tileZoom).floor(),s=i.getSize().divideBy(2*n);return
new P(o.subtract(s),o.add(s))},_update:function(t){var
i=this._map;if(i){var e=this._clampZoom(i.getZoom());if(void
0===t&&(t=i.getCenter()),void 0!==this._tileZoom){var
n=this._getTiledPixelBounds(t),o=this._pxBoundsToTileRange(n),s=o.getCenter(),r=[],a=this.options.keepBuffer,h=new
P(o.getBottomLeft().subtract([a,-a]),o.getTopRight().add([a,-a]));if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y)))throw
new Error("Attempted to load an infinite number of
tiles");for(var u in this._tiles){var
l=this._tiles[u].coords;l.z===this._tileZoom&&h.contains(new
x(l.x,l.y))||(this._tiles[u].current=!1)}if(Math.abs(e-this._tileZoom)>1)this._setView(t,e);else{for(var
c=o.min.y;c<=o.max.y;c++)for(var _=o.min.x;_<=o.max.x;_++){var d=new
x(_,c);if(d.z=this._tileZoom,this._isValidTile(d)){var
p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:r.push(d)}}if(r.sort(function(t,i){return
t.distanceTo(s)-i.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));var
m=document.createDocumentFragment();for(_=0;_<r.length;_++)this._addTile(r[_],m);this._level.el.appendChild(m)}}}}},_isValidTile:function(t){var
i=this._map.options.crs;if(!i.infinite){var
e=this._globalTileRange;if(!i.wrapLng&&(t.x<e.min.x||t.x>e.max.x)||!i.wrapLat&&(t.y<e.min.y||t.y>e.max.y))return!1}if(!this.options.bounds)return!0;var
n=this._tileCoordsToBounds(t);return
z(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return
this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var
i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var
i=this._tileCoordsToNwSe(t),e=new T(i[0],i[1]);return
this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return
t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var
i=t.split(":"),e=new x(+i[0],+i[1]);return
e.z=+i[2],e},_removeTile:function(t){var
i=this._tiles[t];i&&(K(i.el),delete
this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){Q(t,"leaflet-tile");var
i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=r,t.onmousemove=r,Li&&this.options.opacity<1&&nt(t,this.options.opacity),zi&&!Mi&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var
n=this._getTilePos(t),o=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),e(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&f(e(this._tileReady,this,t,null,s)),at(s,n),this._tiles[o]={el:s,coords:t,current:!0},i.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,i,n){i&&this.fire("tileerror",{error:i,tile:n,coords:t});var
o=this._tileCoordsToKey(t);(n=this._tiles[o])&&(n.loaded=+new
Date,this._map._fadeAnimated?(nt(n.el,0),g(this._fadeFrame),this._fadeFrame=f(this._updateOpacity,this)):(n.active=!0,this._pruneTiles()),i||(Q(n.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:n.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),Li||!this._map._fadeAnimated?f(this._pruneTiles,this):setTimeout(e(this._pruneTiles,this),250)))},_getTilePos:function(t){return
t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var
i=new
x(this._wrapX?s(t.x,this._wrapX):t.x,this._wrapY?s(t.y,this._wrapY):t.y);return
i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return
new
P(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var
t in
this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),mn=pn.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=l(this,i)).detectRetina&&Yi&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof
i.subdomains&&(i.subdomains=i.subdomains.split("")),zi||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return
this._url=t,i||this.redraw(),this},createTile:function(t,i){var
n=document.createElement("img");return
mt(n,"load",e(this._tileOnLoad,this,i,n)),mt(n,"error",e(this._tileOnError,this,i,n)),(this.options.crossOrigin||""===this.options.crossOrigin)&&(n.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),n.alt="",n.setAttribute("role","presentation"),n.src=this.getTileUrl(t),n},getTileUrl:function(t){var
e={r:Yi?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var
n=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=n),e["-y"]=n}return
_(this._url,i(e,this.options))},_tileOnLoad:function(t,i){Li?setTimeout(e(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var
n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var
t=this._tileZoom,i=this.options.maxZoom,e=this.options.zoomReverse,n=this.options.zoomOffset;return
e&&(t=i-t),t+n},_getSubdomain:function(t){var
i=Math.abs(t.x+t.y)%this.options.subdomains.length;return
this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in
this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=r,i.onerror=r,i.complete||(i.src=si,K(i),delete
this._tiles[t]))},_removeTile:function(t){var i=this._tiles[t];if(i)return
Si||i.el.setAttribute("src",si),pn.prototype._removeTile.call(this,t)},_tileReady:function(t,i,e){if(this._map&&(!e||e.getAttribute("src")!==si))return
pn.prototype._tileReady.call(this,t,i,e)}}),fn=mn.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var
n=i({},this.defaultWmsParams);for(var o in e)o in
this.options||(n[o]=e[o]);var
s=(e=l(this,e)).detectRetina&&Yi?2:1,r=this.getTileSize();n.width=r.x*s,n.height=r.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var
i=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[i]=this._crs.code,mn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var
i=this._tileCoordsToNwSe(t),e=this._crs,n=b(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,r=(this._wmsVersion>=1.3&&this._crs===Ue?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),a=mn.prototype.getTileUrl.call(this,t);return
a+c(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+r},setParams:function(t,e){return
i(this.wmsParams,t),e||this.redraw(),this}});mn.WMS=fn,Jt.wms=function(t,i){return
new fn(t,i)};var
gn=qe.extend({options:{padding:.1,tolerance:0},initialize:function(t){l(this,t),n(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&Q(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var
t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return
this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var
e=this._map.getZoomScale(i,this._zoom),n=ht(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),r=this._map.project(t,i).subtract(s),a=o.multiplyBy(-e).add(n).add(o).subtract(r);ji?rt(this._container,a,e):at(this._container,a)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var
t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t
in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var
t in this._layers)this._layers[t]._update()},_update:function(){var
t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new
P(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),vn=gn.extend({getEvents:function(){var
t=gn.prototype.getEvents.call(this);return
t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){gn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var
t=this._container=document.createElement("canvas");mt(t,"mousemove",o(this._onMouseMove,32,this),this),mt(t,"click
dblclick mousedown mouseup
contextmenu",this._onClick,this),mt(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){g(this._redrawRequest),delete
this._ctx,K(this._container),ft(this._container),delete
this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){this._redrawBounds=null;for(var
t in
this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){this._drawnLayers={},gn.prototype._update.call(this);var
t=this._bounds,i=this._container,e=t.getSize(),n=Yi?2:1;at(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",Yi&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){gn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[n(t)]=t;var
i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var
i=t._order,e=i.next,o=i.prev;e?e.prev=o:this._drawLast=o,o?o.next=e:this._drawFirst=e,delete
this._drawnLayers[t._leaflet_id],delete t._order,delete
this._layers[n(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if("string"==typeof
t.options.dashArray){var i,e=t.options.dashArray.split(/[,
]+/),n=[];for(i=0;i<e.length;i++)n.push(Number(e[i]));t.options._dashArray=n}else
t.options._dashArray=t.options.dashArray},_requestRedraw:function(t){this._map&&(this._extendRedrawBounds(t),this._redrawRequest=this._redrawRequest||f(this._redraw,this))},_extendRedrawBounds:function(t){if(t._pxBounds){var
i=(t.options.weight||0)+1;this._redrawBounds=this._redrawBounds||new
P,this._redrawBounds.extend(t._pxBounds.min.subtract([i,i])),this._redrawBounds.extend(t._pxBounds.max.add([i,i]))}},_redraw:function(){this._redrawRequest=null,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBounds=null},_clear:function(){var
t=this._redrawBounds;if(t){var
i=t.getSize();this._ctx.clearRect(t.min.x,t.min.y,i.x,i.y)}else
this._ctx.clearRect(0,0,this._container.width,this._container.height)},_draw:function(){var
t,i=this._redrawBounds;if(this._ctx.save(),i){var
e=i.getSize();this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,e.x,e.y),this._ctx.clip()}this._drawing=!0;for(var
n=this._drawFirst;n;n=n.next)t=n.layer,(!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();this._drawing=!1,this._ctx.restore()},_updatePoly:function(t,i){if(this._drawing){var
e,n,o,s,r=t._parts,a=r.length,h=this._ctx;if(a){for(this._drawnLayers[t._leaflet_id]=t,h.beginPath(),e=0;e<a;e++){for(n=0,o=r[e].length;n<o;n++)s=r[e][n],h[n?"lineTo":"moveTo"](s.x,s.y);i&&h.closePath()}this._fillStroke(h,t)}}},_updateCircle:function(t){if(this._drawing&&!t._empty()){var
i=t._point,e=this._ctx,n=Math.max(Math.round(t._radius),1),o=(Math.max(Math.round(t._radiusY),1)||n)/n;this._drawnLayers[t._leaflet_id]=t,1!==o&&(e.save(),e.scale(1,o)),e.beginPath(),e.arc(i.x,i.y/o,n,0,2*Math.PI,!1),1!==o&&e.restore(),this._fillStroke(e,t)}},_fillStroke:function(t,i){var
e=i.options;e.fill&&(t.globalAlpha=e.fillOpacity,t.fillStyle=e.fillColor||e.color,t.fill(e.fillRule||"evenodd")),e.stroke&&0!==e.weight&&(t.setLineDash&&t.setLineDash(i.options&&i.options._dashArray||[]),t.globalAlpha=e.opacity,t.lineWidth=e.weight,t.strokeStyle=e.color,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.stroke())},_onClick:function(t){for(var
i,e,n=this._map.mouseEventToLayerPoint(t),o=this._drawFirst;o;o=o.next)(i=o.layer).options.interactive&&i._containsPoint(n)&&!this._map._draggableMoved(i)&&(e=i);e&&(zt(t),this._fireEvent([e],t))},_onMouseMove:function(t){if(this._map&&!this._map.dragging.moving()&&!this._map._animatingZoom){var
i=this._map.mouseEventToLayerPoint(t);this._handleMouseHover(t,i)}},_handleMouseOut:function(t){var
i=this._hoveredLayer;i&&(tt(this._container,"leaflet-interactive"),this._fireEvent([i],t,"mouseout"),this._hoveredLayer=null)},_handleMouseHover:function(t,i){for(var
e,n,o=this._drawFirst;o;o=o.next)(e=o.layer).options.interactive&&e._containsPoint(i)&&(n=e);n!==this._hoveredLayer&&(this._handleMouseOut(t),n&&(Q(this._container,"leaflet-interactive"),this._fireEvent([n],t,"mouseover"),this._hoveredLayer=n)),this._hoveredLayer&&this._fireEvent([this._hoveredLayer],t)},_fireEvent:function(t,i,e){this._map._fireDOMEvent(i,e||i.type,t)},_bringToFront:function(t){var
i=t._order,e=i.next,n=i.prev;e&&(e.prev=n,n?n.next=e:e&&(this._drawFirst=e),i.prev=this._drawLast,this._drawLast.next=i,i.next=null,this._drawLast=i,this._requestRedraw(t))},_bringToBack:function(t){var
i=t._order,e=i.next,n=i.prev;n&&(n.next=e,e?e.prev=n:n&&(this._drawLast=n),i.prev=null,i.next=this._drawFirst,this._drawFirst.prev=i,this._drawFirst=i,this._requestRedraw(t))}}),yn=function(){try{return
document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return
document.createElement("<lvml:"+t+'
class="lvml">')}}catch(t){return function(t){return
document.createElement("<"+t+'
xmlns="urn:schemas-microsoft.com:vml"
class="lvml">')}}}(),xn={_initContainer:function(){this._container=G("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(gn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var
i=t._container=yn("shape");Q(i,"leaflet-vml-shape
"+(this.options.className||"")),i.coordsize="1
1",t._path=yn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){var
i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var
i=t._container;K(i),t.removeInteractiveTarget(i),delete
this._layers[n(t)]},_updateStyle:function(t){var
i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=yn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=oi(n.dashArray)?n.dashArray.join("
"):n.dashArray.replace(/( *, *)/g,"
"):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=yn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var
i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0
0":"AL "+i.x+","+i.y+"
"+e+","+n+"
0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){X(t._container)},_bringToBack:function(t){J(t._container)}},wn=$i?yn:E,Pn=gn.extend({getEvents:function(){var
t=gn.prototype.getEvents.call(this);return
t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=wn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=wn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){K(this._container),ft(this._container),delete
this._container,delete this._rootGroup,delete
this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){gn.prototype._update.call(this);var
t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),at(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join("
")),this.fire("update")}},_initPath:function(t){var
i=t._path=wn("path");t.options.className&&Q(i,t.options.className),t.options.interactive&&Q(i,"leaflet-interactive"),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){K(t._path),t.removeInteractiveTarget(t._path),delete
this._layers[n(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var
i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,k(t._parts,i))},_updateCircle:function(t){var
i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+"
0 1,0 ",o=t._empty()?"M0
0":"M"+(i.x-e)+","+i.y+n+2*e+",0
"+n+2*-e+",0
";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){X(t._path)},_bringToBack:function(t){J(t._path)}});$i&&Pn.include(xn),be.include({getRenderer:function(t){var
i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return
i||(i=this._renderer=this._createRenderer()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void
0===t)return!1;var i=this._paneRenderers[t];return void
0===i&&(i=this._createRenderer({pane:t}),this._paneRenderers[t]=i),i},_createRenderer:function(t){return
this.options.preferCanvas&&$t(t)||Qt(t)}});var
Ln=on.extend({initialize:function(t,i){on.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return
this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return
t=z(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});Pn.create=wn,Pn.pointsToPath=k,sn.geometryToLayer=Ft,sn.coordsToLatLng=Ut,sn.coordsToLatLngs=Vt,sn.latLngToCoords=qt,sn.latLngsToCoords=Gt,sn.getFeature=Kt,sn.asFeature=Yt,be.mergeOptions({boxZoom:!0});var
bn=Ee.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){mt(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){ft(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return
this._moved},_destroy:function(){K(this._pane),delete
this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),fi(),ut(),this._startPoint=this._map.mouseEventToContainerPoint(t),mt(document,{contextmenu:Lt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=G("div","leaflet-zoom-box",this._container),Q(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var
i=new
P(this._point,this._startPoint),e=i.getSize();at(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(K(this._box),tt(this._container,"leaflet-crosshair")),gi(),lt(),ft(document,{contextmenu:Lt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(e(this._resetState,this),0);var
i=new
T(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});be.addInitHook("addHandler","boxZoom",bn),be.mergeOptions({doubleClickZoom:!0});var
Tn=Ee.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var
i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});be.addInitHook("addHandler","doubleClickZoom",Tn),be.mergeOptions({dragging:!0,inertia:!Mi,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var
zn=Ee.extend({addHooks:function(){if(!this._draggable){var
t=this._map;this._draggable=new
Re(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}Q(this._map._container,"leaflet-grab
leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){tt(this._map._container,"leaflet-grab"),tt(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return
this._draggable&&this._draggable._moved},moving:function(){return
this._draggable&&this._draggable._moving},_onDragStart:function(){var
t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var
i=z(this._map.options.maxBounds);this._offsetLimit=b(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else
this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var
i=this._lastTime=+new
Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var
t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return
t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var
t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.x<i.min.x&&(t.x=this._viscousLimit(t.x,i.min.x)),t.y<i.min.y&&(t.y=this._viscousLimit(t.y,i.min.y)),t.x>i.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var
t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)<Math.abs(s+e)?o:s;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=r},_onDragEnd:function(t){var
i=this._map,e=i.options,n=!e.inertia||this._times.length<2;if(i.fire("dragend",t),n)i.fire("moveend");else{this._prunePositions(+new
Date);var
o=this._lastPos.subtract(this._positions[0]),s=(this._lastTime-this._times[0])/1e3,r=e.easeLinearity,a=o.multiplyBy(r/s),h=a.distanceTo([0,0]),u=Math.min(e.inertiaMaxSpeed,h),l=a.multiplyBy(u/h),c=u/(e.inertiaDeceleration*r),_=l.multiplyBy(-c/2).round();_.x||_.y?(_=i._limitOffset(_,i.options.maxBounds),f(function(){i.panBy(_,{duration:c,easeLinearity:r,noMoveStart:!0,animate:!0})})):i.fire("moveend")}}});be.addInitHook("addHandler","dragging",zn),be.mergeOptions({keyboard:!0,keyboardPanDelta:80});var
Mn=Ee.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(t){this._map=t,this._setPanDelta(t.options.keyboardPanDelta),this._setZoomDelta(t.options.zoomDelta)},addHooks:function(){var
t=this._map._container;t.tabIndex<=0&&(t.tabIndex="0"),mt(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),ft(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){if(!this._focused){var
t=document.body,i=document.documentElement,e=t.scrollTop||i.scrollTop,n=t.scrollLeft||i.scrollLeft;this._map._container.focus(),window.scrollTo(n,e)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanDelta:function(t){var
i,e,n=this._panKeys={},o=this.keyCodes;for(i=0,e=o.left.length;i<e;i++)n[o.left[i]]=[-1*t,0];for(i=0,e=o.right.length;i<e;i++)n[o.right[i]]=[t,0];for(i=0,e=o.down.length;i<e;i++)n[o.down[i]]=[0,t];for(i=0,e=o.up.length;i<e;i++)n[o.up[i]]=[0,-1*t]},_setZoomDelta:function(t){var
i,e,n=this._zoomKeys={},o=this.keyCodes;for(i=0,e=o.zoomIn.length;i<e;i++)n[o.zoomIn[i]]=t;for(i=0,e=o.zoomOut.length;i<e;i++)n[o.zoomOut[i]]=-t},_addHooks:function(){mt(document,"keydown",this._onKeyDown,this)},_removeHooks:function(){ft(document,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var
i,e=t.keyCode,n=this._map;if(e in
this._panKeys)n._panAnim&&n._panAnim._inProgress||(i=this._panKeys[e],t.shiftKey&&(i=w(i).multiplyBy(3)),n.panBy(i),n.options.maxBounds&&n.panInsideBounds(n.options.maxBounds));else
if(e in
this._zoomKeys)n.setZoom(n.getZoom()+(t.shiftKey?3:1)*this._zoomKeys[e]);else{if(27!==e||!n._popup||!n._popup.options.closeOnEscapeKey)return;n.closePopup()}Lt(t)}}});be.addInitHook("addHandler","keyboard",Mn),be.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60});var
Cn=Ee.extend({addHooks:function(){mt(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){ft(this._map._container,"mousewheel",this._onWheelScroll,this)},_onWheelScroll:function(t){var
i=Tt(t),n=this._map.options.wheelDebounceTime;this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new
Date);var o=Math.max(n-(+new
Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e(this._performZoom,this),o),Lt(t)},_performZoom:function(){var
t=this._map,i=t.getZoom(),e=this._map.options.zoomSnap||0;t._stop();var
n=this._delta/(4*this._map.options.wheelPxPerZoomLevel),o=4*Math.log(2/(1+Math.exp(-Math.abs(n))))/Math.LN2,s=e?Math.ceil(o/e)*e:o,r=t._limitZoom(i+(this._delta>0?s:-s))-i;this._delta=0,this._startTime=null,r&&("center"===t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});be.addInitHook("addHandler","scrollWheelZoom",Cn),be.mergeOptions({tap:!0,tapTolerance:15});var
Sn=Ee.extend({addHooks:function(){mt(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){ft(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(Pt(t),this._fireClick=!0,t.touches.length>1)return
this._fireClick=!1,void clearTimeout(this._holdTimeout);var
i=t.touches[0],n=i.target;this._startPos=this._newPos=new
x(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&Q(n,"leaflet-active"),this._holdTimeout=setTimeout(e(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),this._simulateEvent("mousedown",i),mt(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),ft(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var
i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&tt(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return
this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var
i=t.touches[0];this._newPos=new
x(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var
e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});qi&&!Vi&&be.addInitHook("addHandler","tap",Sn),be.mergeOptions({touchZoom:qi&&!Mi,bounceAtZoomLimits:!0});var
Zn=Ee.extend({addHooks:function(){Q(this._map._container,"leaflet-touch-zoom"),mt(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){tt(this._map._container,"leaflet-touch-zoom"),ft(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var
i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var
e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),mt(document,"touchmove",this._onTouchMove,this),mt(document,"touchend",this._onTouchEnd,this),Pt(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var
i=this._map,n=i.mouseEventToContainerPoint(t.touches[0]),o=i.mouseEventToContainerPoint(t.touches[1]),s=n.distanceTo(o)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoom<i.getMinZoom()&&s<1||this._zoom>i.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var
r=n._add(o)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===r.x&&0===r.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),g(this._animRequest);var
a=e(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=f(a,this,!0),Pt(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,g(this._animRequest),ft(document,"touchmove",this._onTouchMove),ft(document,"touchend",this._onTouchEnd),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});be.addInitHook("addHandler","touchZoom",Zn),be.BoxZoom=bn,be.DoubleClickZoom=Tn,be.Drag=zn,be.Keyboard=Mn,be.ScrollWheelZoom=Cn,be.Tap=Sn,be.TouchZoom=Zn,Object.freeze=ti,t.version="1.3.4+HEAD.0e566b2",t.Control=Te,t.control=ze,t.Browser=Qi,t.Evented=ci,t.Mixin=Ae,t.Util=ui,t.Class=v,t.Handler=Ee,t.extend=i,t.bind=e,t.stamp=n,t.setOptions=l,t.DomEvent=Pe,t.DomUtil=ve,t.PosAnimation=Le,t.Draggable=Re,t.LineUtil=Ne,t.PolyUtil=De,t.Point=x,t.point=w,t.Bounds=P,t.bounds=b,t.Transformation=S,t.transformation=Z,t.Projection=He,t.LatLng=M,t.latLng=C,t.LatLngBounds=T,t.latLngBounds=z,t.CRS=di,t.GeoJSON=sn,t.geoJSON=Xt,t.geoJson=an,t.Layer=qe,t.LayerGroup=Ge,t.layerGroup=function(t,i){return
new Ge(t,i)},t.FeatureGroup=Ke,t.featureGroup=function(t){return new
Ke(t)},t.ImageOverlay=hn,t.imageOverlay=function(t,i,e){return new
hn(t,i,e)},t.VideoOverlay=un,t.videoOverlay=function(t,i,e){return new
un(t,i,e)},t.DivOverlay=ln,t.Popup=cn,t.popup=function(t,i){return new
cn(t,i)},t.Tooltip=_n,t.tooltip=function(t,i){return new
_n(t,i)},t.Icon=Ye,t.icon=function(t){return new
Ye(t)},t.DivIcon=dn,t.divIcon=function(t){return new
dn(t)},t.Marker=$e,t.marker=function(t,i){return new
$e(t,i)},t.TileLayer=mn,t.tileLayer=Jt,t.GridLayer=pn,t.gridLayer=function(t){return
new
pn(t)},t.SVG=Pn,t.svg=Qt,t.Renderer=gn,t.Canvas=vn,t.canvas=$t,t.Path=Qe,t.CircleMarker=tn,t.circleMarker=function(t,i){return
new tn(t,i)},t.Circle=en,t.circle=function(t,i,e){return new
en(t,i,e)},t.Polyline=nn,t.polyline=function(t,i){return new
nn(t,i)},t.Polygon=on,t.polygon=function(t,i){return new
on(t,i)},t.Rectangle=Ln,t.rectangle=function(t,i){return new
Ln(t,i)},t.Map=be,t.map=function(t,i){return new be(t,i)};var
En=window.L;t.noConflict=function(){return window.L=En,this},window.L=t});
js/otree.js000064400000171126151161767230006655 0ustar00/*
oTree : Obscurelighty Project ( http://www.obscurelighty.com/ )
Author: Jerome GLATIGNY <jerome@obscurelighty.com>
Copyright (C) 2010-2020 Jerome GLATIGNY
This file is part of Obscurelighty.
Obscurelighty is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Obscurelighty is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Obscurelighty. If not, see
<http://www.gnu.org/licenses/>.
The open source license for Obscurelighty and its modules permits you to
use the
software at no charge under the condition that if you use in an
application you
redistribute, the complete source code for your application must be
available and
freely redistributable under reasonable conditions. If you do not want to
release the
source code for your application, you may purchase a proprietary license
from his author.
*/
/** oTree
* version: 0.9.10
* release date: 2017-03-09
*/
(function(){
window.oTrees = {};
/** oNode
* @param id The identifier number
* @param pid The parent identifier number
* @param state The node State
* 0 - final node
* 1 - directory node closed
* 2 - directory node open
* 3 - directory node dynamic (closed)
* 4 - empty directory node
* 5 - root final node
* @param name The displayed name
* @param value The internal value for the node
* @param url The link url (href)
* @param icon The overloaded icon
*/
var oNode = function(id, pid, state, name, value, url, icon, checked,
noselection) {
var t = this;
t.id = id;
t.pid = pid;
t.state = state;
t.name = name;
t.value = value;
t.url = url;
t.checked = checked || false;
t.noselection = noselection || 0;
t._isLast = -1;
t.children = [];
t.icon = icon || null;
};
oNode.prototype = {
/** Add a Child
*/
add: function(id) {
this.children[this.children.length] = id;
},
/** Remove a Child
*/
rem: function(id) {
var t=this,f=false;
for(var i = 0; i < t.children.length; i++) {
if(f == true)
t.children[i-1] = t.children[i];
else if(t.children[i] == id)
f = true;
}
if(f == true)
t.children.splice(t.children.length-1, 1);
}
};
window.oNode = oNode;
/** oTree
* @param id
* @param conf
* @param callbackFct
* @param data
* @param render
*/
var oTree = function(id, conf, callbackFct, data, render) {
if(window.oTrees[id])
window.oTrees[id].destroy();
var t = this;
if(!conf) conf = {};
t.config = {
rootImg: conf.rootImg ||
'/media/com_hikamarket/images/otree/',
useSelection: (conf.useSelection === undefined) || conf.useSelection,
checkbox: conf.checkbox || false,
tricheckbox: conf.tricheckbox || false,
showLoading: conf.showLoading || false,
loadingText: conf.loadingText || ''
};
t.icon = {
loading : 'loading.gif',
folder : 'folder.gif',
folderOpen : 'folderopen.gif',
node : 'page.gif',
line : 'line.gif',
join : 'join.gif',
joinBottom : 'joinbottom.gif',
plus : 'plus.gif',
plusBottom : 'plusbottom.gif',
minus : 'minus.gif',
minusBottom : 'minusbottom.gif',
option : 'option.gif'
};
t.lNodes = [];
t.tmp = {
trichecks: []
};
t.selectedNode = null;
t.selectedFound = false;
t.written = false;
t.lNodes[0] = new oNode(0,-1);
t.nbRemovedNodes = 0;
t.iconWidth = 18;
t.id = id;
t.callbackFct = callbackFct;
t.callbackSelection = null;
t.callbackCheck = null;
window.oTrees[id] = t;
if(data) t.load(data);
if(render) t.render(render);
};
oTree.prototype = {
/** Destroy an oTree instance
*/
destroy: function() {
var t = this;
window.oTrees[t.id] = null;
t.icon = null;
t.config = null;
t.lNodes = null;
t.callbackFct = null;
t.callbackSelection = null;
t.loadingNode = null;
t.nbRemovedNodes = 0;
e = document.getElementById(t.id + '_otree');
if(!e)
e = document.getElementById(t.id);
if(e)
e.innerHTML = '';
t.id = null;
},
/** Add a new Icon in the configuration
* @param name
* @param url
*/
addIcon: function(name, url) {
this.icon[name] = url;
},
/** Create a new Node
* @param pid
* @param state
* @param name
* @param value
* @param url
* @param icon
* @return id
*/
add: function(pid, state, name, value, url, icon, checked, noselection)
{
var t=this,id=0;
if(!t.lNodes[pid])
return -1;
if(t.nbRemovedNodes == 0) {
id = t.lNodes.length;
} else {
for(var i = t.lNodes.length; i >= 1; i--) {
if(t.lNodes[i] == null) {
id = i;
i = 0;
t.nbRemovedNodes--;
break;
}
}
}
t.lNodes[id] = new oNode(id, pid, state, name, value, url, icon,
checked, noselection);
t.lNodes[pid].add(id);
return id;
},
/** Load a serialized tree
* @param data
* @param pid
*/
load: function(data, pid) {
if(typeof(data) != "object") return;
if(typeof(pid) == "undefined") pid = 0;
var nId = 0, i, l = data.length;
for(var id = 0; id < l; id++) {
if(typeof(data[id]) == "object" && data[id]) {
i = data[id];
nId = this.add(pid, i.status, i.name, i.value, i.url, i.icon,
i.checked, i.noselection);
if(i.data) {
this.load(i.data, nId);
}
}
}
},
/** Create a new Node and insert it for a specific identifier
* @param id
* @param pid
* @param state
* @param name
* @param value
* @param url
* @param icon
*/
ins: function(id, pid, state, name, value, url, icon, checked,
noselection) {
if(!this.lNodes[id]) {
this.lNodes[id] = new oNode(id, pid, state, name, value, url, icon,
checked, noselection);
this.lNodes[pid].add(id);
}
},
/** Insert a Node
* @param node
*/
insertNode: function(node) {
this.lNodes[node.id] = node;
this.lNodes[node.pid].add(node.id);
},
/** Set a Node.
* like "insertNode" but does not create the link with the
parent.
* @param node
*/
setNode: function(node) {
this.lNodes[node.id] = node;
},
/** Move a Node
* @param node
* @param dest
*/
moveNode: function(node,dest) {
var t = this;
if(typeof(node) == "number") node = t.get(node);
if(typeof(dest) == "number") dest = t.get(dest);
var old = t.lNodes[node.pid];
if(old) {
old.rem(node.id);
dest.add(node.id);
node.pid = dest.id;
t.update(old);
t.update(dest);
}
},
/** Remove a Node
* @param node The node to destroy (Node Object or Node Id)
* @param update Call an update on his parent or not
* @param rec Do not pass this parameter which is used for recursivity
*/
rem: function(node,update,rec) {
var t=this;
if(typeof(node) == "number") node = t.get(node);
if(typeof(update) == "undefined") update = true;
var p = t.get(node.pid);
if(node && node.children.length > 0) {
var o;
for(var i = node.children.length - 1; i >= 0; i--) {
o = node.children[i];
t.rem(o, false, true);
t.lNodes[o] = null;
}
node.children = [];
}
if(!rec) {
var id = node.id;
if(p) p.rem(id);
t.lNodes[id] = null;
}
t.nbRemovedNodes++;
if(update && p)
t.update(p);
},
/** Update a Node
* This function will call a "render"
* @param node The node to update (Node Object or Node Id)
* @return boolean
*/
update: function(node) {
if(node) {
if(typeof(node) == "number") node = this.get(node);
return this.render(this.id + '_d' + node.id, node.id);
}
return this.render();
},
/** Render the tree or just a part of it
* @param dest The render target (HTML Object or name of its ID)
* @param start The Node Id for the render root
* @return boolean
*/
render: function(dest, start) {
var t = this, d = document, str = '', n;
if(typeof(start) == "number")
n = t.lNodes[start];
else
n = t.lNodes[0];
t.processLast();
t.tmp.trichecks = [];
if(t.written == true || dest) {
if(typeof(dest) == "boolean" || !dest) dest = t.id;
if(t.written == false) {
t.written = true;
t.id = dest;
}
str = t.rnodes(n);
var e = d.getElementById(dest + '_otree');
if(!e) e = d.getElementById(dest);
if(!e) return false;
e.innerHTML = str;
} else {
str = '<div id="' + t.id + '_otree"
class="oTree">' + t.rnodes(n) +
'</div>';
d.write(str);
t.written = true;
}
if(t.config.tricheckbox && t.tmp.trichecks.length > 0) {
var id, c;
for(var i = t.tmp.trichecks.length - 1; i >= 0; i--) {
id = t.tmp.trichecks[i];
c = d.getElementById(t.id+'_c'+id);
if(c)
c.indeterminate = true;
}
}
t.tmp.trichecks = [];
return true;
},
/** Internal function
*/
rnodes: function(pNode) {
var t=this,str = '';
if(!pNode)
return str;
for(var i = 0; i < pNode.children.length; i++) {
var n = pNode.children[i];
if(t.lNodes[n])
str += t.rnode(t.lNodes[n]);
}
return str;
},
/** Internal function
*/
rnode: function(node) {
var t=this,str = '<div class="oTreeNode">',
style = '', ret = '', toFind = node.pid, found = true;
if(toFind > 0) {
var white = 0;
while(found) {
found = false;
if(toFind > 0 && toFind < t.lNodes.length &&
t.lNodes[toFind]) {
if(t.lNodes[toFind]._isLast == -1)
t.lNodes[toFind]._isLast = t.isLast(t.lNodes[toFind])?1:0;
if(t.lNodes[toFind]._isLast == 1) {
white++;
if(white == 6) {
ret = '<div
class="e'+white+'"></div>' + ret;
white = 0;
}
} else {
if(white > 0)
ret = '<div
class="e'+white+'"></div>' + ret;
white = 0;
ret = '<img src="' + t.config.rootImg +
t.icon.line + '" alt=""/>' + ret;
}
found = true;
toFind = t.lNodes[toFind].pid;
}
}
if(white > 0)
ret = '<div
class="e'+white+'"></div>' + ret;
}
str += ret;
// Cursor
var img, last = (node._isLast == 1);
if(node.state == 0 || node.state == 4) {
img = t.icon.join;
if(last) img = t.icon.joinBottom;
str += '<img src="' + t.config.rootImg + img +
'" alt=""/>';
} else if(node.state == 1 || node.state == 3) {
img = t.icon.plus;
if(last) img = t.icon.plusBottom;
str += '<a href="#"
onclick="window.oTrees.' + t.id + '.s(' + node.id +
');return false;"><img
id="'+t.id+'_j'+node.id+'" src="' +
t.config.rootImg + img + '"
alt=""/></a>';
} else if(node.state == 2) {
img = t.icon.minus;
if(last) img = t.icon.minusBottom;
str += '<a href="#"
onclick="window.oTrees.' + t.id + '.s(' + node.id +
');return false;"><img
id="'+t.id+'_j'+node.id+'" src="' +
t.config.rootImg + img + '"
alt=""/></a>';
}
if(t.config.checkbox && !node.noselection) {
var attr = '', chkName = t.config.checkbox;
if(typeof(chkName) == "string") {
if(chkName == "-")
chkName = "";
else if(chkName.substring(-1) != ']')
chkName += '[]';
} else
chkName = t.id+'[]';
if(node.checked) {
if(t.config.tricheckbox && node.checked === 2)
t.tmp.trichecks[t.tmp.trichecks.length] = node.id;
else
attr = ' checked="checked"';
}
str += '<input type="checkbox"
id="'+t.id+'_c'+node.id+'"
onchange="window.oTrees.' + t.id + '.chk(' + node.id +
',this.checked);" name="' + chkName + '"
value="' + node.value + '"' + attr +
'/>';
}
// Icon
str += '<img id="' + t.id + '_i' + node.id +
'" alt="" src="' + t.config.rootImg;
var name = node.name;
if(t.config.useSelection && node.url)
name = '<a
id="'+t.id+'_s'+node.id+'"
class="node" href="' + node.url + '"
onclick="window.oTrees.' + t.id + '.sel(' + node.id +
');">' + node.name + '</a>';
else if(node.url)
name = '<a
id="'+t.id+'_s'+node.id+'"
class="node" href="' + node.url +
'">' + node.name + '</a>';
else if((t.config.checkbox || t.config.useSelection) &&
!node.noselection)
name = '<a
id="'+t.id+'_s'+node.id+'"
class="node" href="#"
onclick="window.oTrees.' + t.id + '.sel(' + node.id +
');return false;">' + node.name +
'</a>';
else
name = '<span class="node">' + node.name +
'</span>';
if(node.state == 0 || node.state == 5) {
if(node.icon == null)
str += t.icon.node + '"/>' + name;
else
str += t.icon[node.icon] + '"/>' + name;
} else if(node.state == 1 || node.state == 3 || node.state == 4) {
if(node.icon == null)
str += t.icon.folder + '"/>' + name;
else
str += t.icon[node.icon] + '"/>' + name;
style = 'style="display:none;"';
} else if(node.state == 2) {
if(node.icon == null)
str += t.icon.folderOpen + '"/>' + name;
else
str += t.icon[node.icon] + '"/>' + name;
}
str += '</div>';
if(node.state > 0)
str += '<div id="' + t.id + '_d' + node.id
+ '" class="clip" ' + style + '>' +
t.rnodes(node) + '</div>';
return str;
},
/** Switch Node
* Open or Close a Directory Node
* @param node The node to switch (Node Object or Node Id)
*/
s: function(node) {
if(typeof(node) == "number") node = this.get(node);
if(node.state == 2)
this.c(node);
else
this.o(node);
},
/** Open a Node
* @param node The node to open (Node Object or Node Id)
*/
o: function(node) {
var t = this;
if(typeof(node) == "number") node = t.get(node);
// Closed Or Dynamic
if(node && (node.state == 1 || node.state == 3)) {
e = document.getElementById(t.id + '_d' + node.id);
e.style.display = '';
// Dynamic
if(node.state == 3) {
node.children = [];
if(t.config.showLoading) {
if(!t.loadingNode) {
t.loadingNode = new
oNode(0,node.id,0,t.config.loadingText,null,null,'loading');
t.loadingNode._isLast = 1;
} else
t.loadingNode.pid = node.id;
e.innerHTML = t.rnode(t.loadingNode);
}
if(t.callbackFct)
t.callbackFct(this, node, e);
}
if(node.icon == null) {
e = document.getElementById(t.id + '_i' + node.id);
e.src = t.config.rootImg + t.icon.folderOpen;
}
e = document.getElementById(t.id + '_j' + node.id);
if(t.isLast(node))
e.src = t.config.rootImg + t.icon.minusBottom;
else
e.src = t.config.rootImg + t.icon.minus;
node.state = 2;
}
},
/** Close a Node
* @param node The node to close (Node Object or Node Id)
*/
c: function(node) {
if(typeof(node) == "number") node = this.get(node);
// Open
if(node && node.state == 2) {
var t=this,d=document;
e = d.getElementById(t.id + '_d' + node.id);
e.style.display = 'none';
if(node.icon == null) {
e = d.getElementById(t.id + '_i' + node.id);
e.src = t.config.rootImg + t.icon.folder;
}
e = d.getElementById(t.id + '_j' + node.id);
if(t.isLast(node))
e.src = t.config.rootImg + t.icon.plusBottom;
else
e.src = t.config.rootImg + t.icon.plus;
node.state = 1;
}
},
/** Open To
* @param node The node to open to... (Node Object or Node Id)
*/
oTo: function(node) {
if(typeof(node) == "number") node = this.get(node);
if(node) {
var t=this,toOpId = node.pid;
while(toOpId > 0 && toOpId < t.lNodes.length) {
this.o(t.lNodes[toOpId]);
toOpId = t.lNodes[toOpId].pid;
}
}
},
/** Make a Selection
* @param id The Node Id to select (could be a node object)
*/
sel: function(id) {
if(id === null) return;
if(typeof(id) != "number") id = id.id;
var t=this,d=document,cn = t.lNodes[id];
if(!cn) return;
if(!t.config.useSelection && !t.config.checkbox) return;
if(t.config.checkbox) {
t.chk(cn,-1);
}
if(!t.config.useSelection) return;
if(t.selectedNode != id) {
var e, previous = t.selectedNode;
if(t.selectedNode || t.selectedNode == 0) {
e = d.getElementById(t.id + '_s' + t.selectedNode);
if(e)
e.className = "node";
}
e = d.getElementById(t.id + '_s' + id);
if(e)
e.className = "nodeSel";
t.selectedNode = id;
if(t.callbackSelection)
t.callbackSelection(this, t.selectedNode, previous);
} else {
var e = d.getElementById(t.id + '_s' + id);
if(e)
e.className = "nodeSel";
}
},
/**
*
*/
chk: function(id, value, call, fromP) {
if(id === null) return;
if(typeof(id) == "object") id = id.id;
if(!this.config.checkbox) return;
var t=this,d=document,cn=t.lNodes[id];
if(!cn) return;
var oldState = cn.checked;
if(typeof(value) == "number" && value < 0) {
if(cn.checked == 2)
cn.checked = true;
else
cn.checked = !cn.checked;
} else
cn.checked = value;
var e = d.getElementById(t.id+'_c'+id);
if(e) {
e.checked = cn.checked;
if(!t.config.tricheckbox)
e.indeterminate = false;
if(t.config.tricheckbox && oldState != cn.checked) {
e.indeterminate = false;
if(value === 2) {
e.checked = false;
e.indeterminate = true;
cn.checked = 2;
} else {
// Check/uncheck all children
for(var i = cn.children.length - 1; i >= 0; i--) {
t.chk(cn.children[i], cn.checked, call, true);
}
}
if(fromP === undefined) {
// Check/uncheck parent if necessary
var p = t.lNodes[cn.pid], o = null, cpt = 0;
if(p) {
for(var i = p.children.length - 1; i >= 0; i--) {
o = t.lNodes[p.children[i]];
if(o && o.checked && o.checked === true) {
cpt++;
}
}
if(cpt == p.children.length || cpt == 0) {
t.chk(p, cn.checked, call);
} else {
t.chk(p, 2, call);
}
}
}
}
}
if((call === undefined || call === null || call) &&
t.callbackCheck)
t.callbackCheck(this, id, value);
},
/**
*
*/
chks: function(ids,call,useId) {
var t = this;
if(!t.config.checkbox) return;
if(useId === undefined) useId = true;
if(call === undefined) call = false;
if(typeof(ids) == "string") {
// Check all
if(ids == "*") {
for(var i = 0; i < t.lNodes.length; i++) {
if(t.lNodes[i] && !t.lNodes[i].checked)
t.chk(t.lNodes[i],true,call);
}
return;
}
ids = ids.split(",");
}
for(var i = 0; i < t.lNodes.length; i++) {
if(t.lNodes[i] && t.lNodes[i].checked)
t.chk(t.lNodes[i],false,call);
}
if(useId) {
for(var j = ids.length -1; j >= 0; j--) {
var v = parseInt(ids[j]);
t.chk(v,true,call);
}
} else {
for(var j = ids.length -1; j >= 0; j--) {
for(var i = 0; i < t.lNodes.length; i++) {
if(t.lNodes[i] && t.lNodes[i].value == ids[j]) {
t.chk(i,true,call);
break;
}
}
}
}
},
/**
*
*/
getChk: function() {
var t = this, ret = [];
if(!t.config.checkbox) return false;
for(var i = 0; i < t.lNodes.length; i++) {
if(t.lNodes[i] && t.lNodes[i].checked &&
t.lNodes[i].checked === true && t.lNodes[i].value)
ret.push(t.lNodes[i].value);
}
return ret;
},
/** Find a Node
* @param value The value to found
* @param mode The mode for node state
* [null] - all nodes
* 0 - Final nodes
* 1 - Directory nodes
* @return the first node object which matched
*/
find: function(value, mode) {
if(typeof(mode) == "undefined") mode = -1;
var t = this;
for(var i = 0; i < t.lNodes.length; i++) {
if(t.lNodes[i] && t.lNodes[i].value == value) {
if(mode == -1)
return t.lNodes[i];
if(mode == 0 && (t.lNodes[i].state == 0 || t.lNodes[i].state
== 5))
return t.lNodes[i];
if(mode == 1 && t.lNodes[i].state >= 1 &&
t.lNodes[i].state != 5)
return t.lNodes[i];
}
}
return null;
},
/** Empty a directory
* @param node The node to empty (Node Object or Node Id)
*/
emptyDirectory: function(node) {
if(typeof(node) == "number") node = this.get(node);
if(node.state == 1 || node.state == 2 || node.state == 3) {
var t = this, d = document,
e = d.getElementById(t.id + '_j' + node.id),
a = e.parentNode;
var src = t.config.rootImg + t.icon.join;
if(node._isLast == 1)
src = t.config.rootImg + t.icon.joinBottom;
a.parentNode.replaceChild(e, a);
e.src = src;
node.state = 4;
if(node.icon == null) {
e = d.getElementById(t.id + '_i' + node.id);
if(!e) return;
e.src = t.config.rootImg + t.icon.folder;
}
e = d.getElementById(t.id + '_d' + node.id);
if(!e) return;
e.style.display = 'none';
e.innerHTML = '';
if(node && node.children.length > 0) {
var o;
for(var i = node.children.length - 1; i >= 0; i--) {
o = node.children[i];
t.rem(o, false);
t.lNodes[o] = null;
}
}
node.children = [];
}
},
/** Get a node
* @param id The node id
* @return the node object
*/
get: function(id) {
if(id >= 0 && id < this.lNodes.length &&
this.lNodes[id]) {
try {
return this.lNodes[id];
} catch(e) {
return null;
}
}
return null;
},
/** Internal function
*/
isLast: function(node) {
try {
var pChildren = this.lNodes[node.pid].children;
return (pChildren[pChildren.length - 1] == node.id);
} catch(e) {}
return true;
},
/** Internal function
* currently unused. Deprecated?
*/
cleanLast: function() {
for(var i = this.lNodes.length - 1; i >= 0; i--)
this.lNodes[i]._isLast = -1;
},
/** Internal function
*/
processLast: function() {
var t=this,n;
for(var i = t.lNodes.length - 1; i >= 0; i--) {
if(t.lNodes[i] && t.lNodes[i].children.length > 0) {
n = t.lNodes[i].children[ t.lNodes[i].children.length - 1 ];
t.lNodes[n]._isLast = 1;
for(var j = t.lNodes[i].children.length - 2; j >= 0; j--) {
t.lNodes[ t.lNodes[i].children[ j ]]._isLast = 0;
}
}
}
},
/**
*
*/
deep: function(node, max) {
if(typeof(node) == "number") node = this.get(node);
if(node == null) return -1;
if(typeof(max) == "undefined") max = 100;
var ret = 0, toFind = node.pid;
if(toFind == -1)
return ret;
while(toFind > 0 && this.lNodes[toFind]) {
ret++;
toFind = this.lNodes[toFind].pid;
if(ret >= max)
return ret;
}
return ret;
},
/**
*
*/
search: function(text) {
var t=this,d=document,r=null,e=null,pid=0;
if(text) {
r = new RegExp(text,"i");
for(var i = 0; i < t.lNodes.length; i++) {
if(t.lNodes[i])
t.lNodes[i].search = -1;
}
for(var i = 0; i < t.lNodes.length; i++) {
if(t.lNodes[i]) {
if(r.test(t.lNodes[i].name)) {
if(t.lNodes[i].search <= 0) {
t.lNodes[i].search = 2;
pid = t.lNodes[i].pid;
while(pid > 0 && t.lNodes[pid] &&
t.lNodes[pid].search <= 0) {
t.lNodes[pid].search = 1;
pid = t.lNodes[pid].pid;
}
} else {
t.lNodes[i].search = 2;
}
} else {
if(t.lNodes[i].search < 0)
t.lNodes[i].search = 0;
}
}
}
}
for(var i = 0; i < t.lNodes.length; i++) {
if(t.lNodes[i]) {
e = d.getElementById(t.id + '_s' + t.lNodes[i].id);
if(!text) {
t.lNodes[i].search = null;
if(e) {
e.parentNode.style.display = '';
e.className = "node";
}
} else {
if(e) {
e.className = "node";
if(t.lNodes[i].search > 0) {
e.parentNode.style.display = '';
if(t.lNodes[i].search > 1)
e.className = "nodeSel";
} else
e.parentNode.style.display = 'none';
}
}
}
}
}
};
oTree.version = 20160301;
if(!window.oTree || window.oTree.version < oTree.version)
window.oTree = oTree;
})();
/** oList
* version: 0.1.3
* release date: 2016-03-01
*/
(function(){
window.oLists = [];
/** oTree
* @param id
* @param conf
* @param callbackFct
* @param data
* @param render
*/
var oList = function(id, conf, callbackFct, data, render) {
if(window.oLists[id])
window.oLists[id].destroy();
var t = this;
if(!conf) conf = {};
t.config = {
hideBlocked: conf.hideBlocked || false,
table: conf.table || false,
defaultColumn: conf.defaultColumn || false,
displayFormat: conf.displayFormat || false,
gradientLoad: conf.gradientLoad || false
};
t.written = false;
t.id = id;
t.callbackFct = callbackFct;
t.callbackSelection = null;
t.callbackScroll = null;
t.highlighted = null;
t._fct = {};
window.oLists[id] = t;
if(data) t.load(data);
if(render) t.render(render);
};
oList.prototype = {
/** Destroy an oTree instance
*/
destroy: function() {
var t = this, d = document;
window.oLists[t.id] = null;
t.config = null;
t.lData = [];
t.callbackFct = null;
t.callbackSelection = null;
t.callbackScroll = null;
t.highlighted = null;
t.deinitScroll();
t._fct = {};
e = d.getElementById(t.id + '_olist');
if(!e) e = d.getElementById(t.id);
if(e) e.innerHTML = '';
t.id = null;
},
/** Load a serialized list
* @param data
* @param pid
*/
load: function(data) {
if(typeof(data) != "object")
return false;
var t = this;
t.lData = [];
for(var d in data) {
if(data.hasOwnProperty(d))
t.lData[ t.lData.length ] = t.getData(d, data[d]);
}
t.sort();
t.highlighted = null;
return (t.lData.length > 0);
},
/**
*
*/
add: function(key, name) {
this.lData[ this.lData.length ] = this.getData(key, name);
},
/**
*
*/
getData: function(key, data) {
var t = this, o = {key: key};
if(!t.config.table) {
o.name = data;
return o;
}
for(var h in t.config.table) {
if(!t.config.table.hasOwnProperty(h))
continue;
o[h] = '';
if(data[h])
o[h] = data[h];
}
return o;
},
/**
*
*/
sort: function(byKey) {
var t = this;
if(!t.lData || t.lData.length == 0)
return false;
if(byKey) {
t.lData.sort(function(a,b){
var x = a.key.toLowerCase(), y = b.key.toLowerCase();
return x < y ? -1 : ((x > y) ? 1 : 0);
});
return true;
}
if(!t.config.table) {
t.lData.sort(function(a,b){
var x = a.name.toLowerCase(), y = b.name.toLowerCase();
return x < y ? -1 : ((x > y) ? 1 : 0);
});
return true;
}
return false;
},
/** Render the tree or just a part of it
* @param dest The render target (HTML Object or name of its ID)
* @param start The Node Id for the render root
* @return boolean
*/
render: function(dest) {
var t = this, d = document, str = '';
if(t.written == true || dest) {
if(typeof(dest) == "boolean" || !dest) dest = t.id;
if(t.written == false) {
t.written = true;
t.id = dest;
}
str = (!t.config.table) ? t.rlist() : t.rtable();
var e = d.getElementById(dest + '_olist');
if(!e) e = d.getElementById(dest);
if(!e) return false;
e.innerHTML = str;
} else {
str = '<div id="' + t.id + '_olist"
class="oList">' + ((!t.config.table) ? t.rlist() :
t.rtable()) + '</div>';
d.write(str);
t.written = true;
}
if(t.config.gradientLoad)
t.initScroll();
return true;
},
rlist: function() {
var t = this, l = t.lData.length, n = null, str =
'<ul>';
for(var i = 0; i < l; i++) {
n = t.lData[i];
if(n && !n.hidden && (!n.block ||
!t.config.hideBlocked)) {
if(t.highlighted === null || t.highlighted != i)
str += '<li>';
else
str += '<li class="oListSelected">';
if(n.block)
str += '<span>' + (n.display ? n.display : n.name) +
'</span></li>';
else
str += '<a href="#"
onclick="window.oLists.' + t.id + '.sel(' + i +
');return false;">' + (n.display ? n.display : n.name) +
'</a></li>';
}
}
if(l > 0 && t.config.gradientLoad)
str += '<li
class="oListLoadMore"><span></span></li>';
str += '<ul>';
return str;
},
rtable: function() {
var t = this, l = t.lData.length, n = null, str = '<table
class="oListTable"><thead><tr>', extraClass =
'';
for(var h in t.config.table) {
if(!t.config.table.hasOwnProperty(h))
continue;
str +=
'<th>'+t.config.table[h]+'</th>';
}
str += '</tr></thead><tbody>';
for(var i = 0; i < l; i++) {
n = t.lData[i];
if(n && !n.hidden && (!n.block ||
!t.config.hideBlocked)) {
extraClass = (t.highlighted === null || t.highlighted != i) ?
'' : ' oListSelected';
if(n.block)
str += '<tr class="oListBlocked">';
else
str += '<tr onclick="window.oLists.' + t.id +
'.sel(' + i + ');return false;"
class="oListLine'+extraClass+'">';
for(var h in t.config.table) {
if(!t.config.table.hasOwnProperty(h))
continue;
str += '<td>' + n[h] + '</td>';
}
str += '</tr>';
}
}
if(l > 0 && t.config.gradientLoad)
str += '<tr class="oListBlocked
oListLoadMore"><td
colspan="'+t.config.table.length+'"></td></tr>';
str += '</tbody></table>';
return str;
},
initScroll: function(fct) {
var t = this;
if(!t.config.gradientLoad || t._fct['scroll'])
return;
if(!t.callbackScroll && fct !== undefined)
t.callbackScroll = fct;
if(!t.callbackScroll)
return;
var d = document, el = d.getElementById(t.id + '_olist');
if(!el)
return;
t._lastScroll = 0;
t._fct['scroll'] = window.Oby.addEvent(el, 'scroll',
function(evt) {
if(el.scrollHeight > t._lastScroll && el.scrollTop >=
(el.scrollHeight - el.offsetHeight - 25)) {
if(t.callbackScroll)
t.callbackScroll(t);
t._lastScroll = el.scrollHeight;
}
});
},
deinitScroll: function() {
var t = this;
if(t.config && t.config.gradientLoad)
t.config.gradientLoad = false;
if(!t._fct['scroll'])
return;
t.callbackScroll = null;
var d = document, el = d.getElementById(t.id + '_list');
if(!el)
return;
window.Oby.removeEvent(el, t._fct['scroll']);
},
/** Get a node
* @param id The node id
* @return the node object
*/
get: function(id) {
if(id >= 0 && id < this.lData.length &&
this.lData[id]) {
try {
return this.lData[id];
} catch(e) { return null; }
}
return null;
},
/** Make a Selection
* @param id The Node Id to select (could be a node object)
*/
sel: function(id) {
if(id === null || id === undefined) return;
var t=this,d=document,cn=t.lData[id];
if(!cn) return;
if(t.config.table) {
if(t.config.displayFormat)
cn = window.oNamebox.format(cn, t.config.displayFormat);
else if(t.config.defaultColumn)
cn = cn[t.config.defaultColumn];
}
if(t.callbackSelection)
t.callbackSelection(this, id, cn);
},
/**
*
*/
block: function(value) {
var t = this, p = false, m = (typeof(value) == 'object'), l =
null;
if(m) l = (value.length-1);
for(var i = t.lData.length - 1; i >= 0; i--) {
if(!m) {
if(t.lData[i].key == value) {
t.lData[i].block = true;
p = true;
}
} else {
for(var j = l; j >= 0; j--) {
if(t.lData[i].key == value[j]) {
t.lData[i].block = true;
p = true;
j = -1;
}
}
}
}
if(p)
t.render();
},
/**
*
*/
unblock: function(value) {
var t = this, p = false;
for(var i = t.lData.length - 1; i >= 0; i--) {
if(value === true || t.lData[i].key == value) {
delete t.lData[i].block;
p = true;
}
}
if(p)
t.render();
},
/**
*
*/
find: function(text) {
var t=this;
text = text.toLowerCase();
for(var i = t.lData.length - 1; i >= 0; i--) {
if(t.lData[i].name.toLowerCase() == text)
return i;
}
return null;
},
/**
*
*/
search: function(text) {
var t=this,d=document,r=null,e=null,dataLng=0;
if(text) {
text = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,
"\\$&");
r = new RegExp("(" + text + ")","i");
for(var i = t.lData.length - 1; i >= 0; i--) {
if(!t.lData[i])
continue;
if(!t.config.table) {
if(r.test(t.lData[i].name)) {
t.lData[i].hidden = false;
dataLng++;
t.lData[i].display = t.lData[i].name.replace(r,
'<em>$1</em>');
} else {
t.lData[i].hidden = true;
delete t.lData[i].display;
}
} else {
var test = false;
for(var v in t.lData[i]) {
if(v != 'key' && t.lData[i].hasOwnProperty(v)
&& typeof(t.lData[i][v]) == 'string')
test = r.test(t.lData[i][v]);
if(test)
break;
}
if(test) {
t.lData[i].hidden = false;
dataLng++;
} else {
t.lData[i].hidden = true;
delete t.lData[i].display;
}
}
}
} else {
for(var i = t.lData.length - 1; i >= 0; i--) {
if(t.lData[i]) {
delete t.lData[i].display;
delete t.lData[i].hidden;
}
}
dataLng = null;
}
t._dataLng = dataLng;
t.highlighted = null;
t.render();
},
highlightSet: function(id) {
var t=this;
if(t.highlighted === id)
return true;
if(id === null) {
t.highlighted = null;
return true;
}
if(!t.lData[id] || t.lData[id].hidden)
return false;
t.highlighted = id;
t.render();
// Force the ajax loading when we select the last element in the list
if(t.lData.length > 5 && id == (t.lData.length - 1)
&& t.config.gradientLoad)
window.oNameboxes[t.id].loadMore(t);
var d = document, container = d.getElementById(t.id +
'_olist'), el = null, e = null;
if(!container) e = d.getElementById(t.id);
if(!container)
return true;
el = container.firstChild;
if(t.config.table)
el = el.lastChild.firstChild;
for(var i = el.children.length - 1; i >= 0; i--) {
e = el.children[i];
if(e.className != 'oListSelected')
continue;
if(container.scrollTop > e.offsetTop)
container.scrollTop = e.offsetTop;
else if((container.scrollTop + container.clientHeight) <
(e.offsetTop + e.clientHeight))
container.scrollTop = e.offsetTop + e.clientHeight -
container.clientHeight;
}
return true;
},
highlightGet: function() {
return this.highlighted;
},
highlightMove: function(inc, cpt) {
var t=this,init=false,min=null;
if(t.highlighted === null) {
if(inc > 0)
t.highlighted = -1;
else
t.highlighted = t.lData.length;
init = true;
}
if(cpt !== undefined && cpt > 0) cpt--; else cpt = 0;
for(var i = t.highlighted + inc; i >= 0 && i <
t.lData.length; i += inc) {
if(!t.lData[i] || t.lData[i].hidden || t.lData[i].block)
continue;
if(cpt-- > 0) {
min = i;
continue;
}
return t.highlightSet(i);
}
if(min !== null)
return t.highlightSet(min);
if(init)
t.highlighted = null;
return false;
},
highlightNext: function(cpt) { return this.highlightMove(1,cpt); },
highlightPrevious: function(cpt) { return this.highlightMove(-1,cpt); },
};
oList.version = 20160301;
if(!window.oList || window.oList.version < oList.version)
window.oList = oList;
})();
/**
* oResize
* version: 0.0.1
* release date: 2018-01-15
*/
(function() {
var oResize = function(el, options) {
if(typeof(el) == 'string')
el = document.getElementById(el);
if(!el) return;
if(options === undefined &&
el.getAttribute('data-oresize')) {
try {
var params = JSON.parse( el.getAttribute('data-oresize') );
if(params) options = params;
}catch(e) {}
}
this.create(el, options);
};
/**
*
*/
oResize.init = function() {
if(!document.querySelectorAll)
return;
var d = document,
els = d.querySelectorAll('[data-oresize]');
if(!els || !els.length)
return;
for(var i = els.length - 1; i >= 0; i--) {
var el = els[i], opt = {};
try {
var params = JSON.parse( el.getAttribute('data-oresize') );
if(params)
opt = params;
}catch(e) {}
oResize.create(el, opt);
}
};
/**
*
*/
oResize.prototype = {
target: null,
options: null,
size: null,
storage: null,
/**
*
*/
create: function(el, options) {
var t = this, d = document;
t.options = options || {};
if(t.options.width === false && t.options.height === false)
return;
//
var r = d.createElement('div');
r.className = 'oresize';
r.style.position = 'absolute';
//
t.target = el;
el.appendChild(r);
t.sizer = r;
t.addEvent(r, 'mousedown', function(evt){ t.start(evt); });
//
//
var storage = el.getAttribute('data-oresize');
if(!storage || !localStorage) return;
t.storage = storage;
var size = localStorage.getItem('oresize.'+t.storage);
try { size = JSON.parse(size); } catch(e) {}
if(!size || (!size.h && !size.w))
return;
if(t.options.width !== false) {
size.w = Math.max(size.w, (t.options.width &&
t.options.width.min) ? t.options.width.min : 100);
if(t.options.width && t.options.width.max)
size.w = Math.min(size.w, t.options.width.max);
t.target.style.width = size.w + 'px';
}
if(t.options.height !== false) {
size.h = Math.max(size.h, (t.options.height &&
t.options.height.min) ? t.options.height.min : 100);
if(t.options.height && t.options.height.max)
size.h = Math.min(size.h, t.options.height.max);
t.target.style.height = size.h + 'px';
}
},
/**
*
*/
refresh: function() {
if(this.sizer.parentNode) return;
this.target.appendChild(this.sizer);
},
/**
*
*/
start: function(e) {
var t = this, d = document, w = window;
t.cancelEvent(e);
t.resizeEvt = t.addEvent(w, 'mousemove', function(evt){
t.resize(evt); });
t.stopEvt = t.addEvent(w, 'mouseup', function(evt){
t.stop(evt); });
},
/**
*
*/
stop: function(e) {
var t = this, d = document, w = window;
t.removeEvent(w, 'mousemove', t.resizeEvt);
t.removeEvent(w, 'mouseup', t.stopEvt);
},
/**
*
*/
resize: function(e) {
this.cancelEvent(e);
var t = this,
minW = (t.options.width && t.options.width.min) ?
t.options.width.min : 100,
minH = (t.options.height && t.options.height.min) ?
t.options.height.min : 100,
offset = t.getOffset(t.target),
w = Math.max((e.clientX - offset.left), minW),
h = Math.max((e.clientY - offset.top), minH);
size = {};
if(t.options.width !== false) {
if(t.options.width && t.options.width.max)
w = Math.min(w, t.options.width.max);
t.target.style.width = w + 'px';
size.w = w;
}
if(t.options.height !== false) {
if(t.options.height && t.options.height.max)
h = Math.min(h, t.options.height.max);
t.target.style.height = h + 'px';
size.h = h;
}
if(t.storage && size && (size.h || size.w)) {
localStorage.setItem('oresize.'+t.storage,
JSON.stringify(size));
}
},
/**
*
*/
addEvent: function(d,e,f) {
if( d.attachEvent )
d.attachEvent('on' + e, f);
else if (d.addEventListener)
d.addEventListener(e, f, false);
else
d['on' + e] = f;
return f;
},
removeEvent: function(d,e,f) {
try {
if( d.detachEvent )
d.detachEvent('on' + e, f);
else if( d.removeEventListener)
d.removeEventListener(e, f, false);
else
d['on' + e] = null;
} catch(e) {}
},
cancelEvent: function(e) {
e = e || window.event;
if( !e )
return false;
if(e.stopPropagation) e.stopPropagation();
else e.cancelBubble = true;
if( e.preventDefault ) e.preventDefault();
else e.returnValue = false;
return false;
},
/**
*
*/
getOffset: function(el, scroll) {
var rect = el.getBoundingClientRect(),
scrollLeft = window.pageXOffset ||
document.documentElement.scrollLeft,
scrollTop = window.pageYOffset || document.documentElement.scrollTop;
if(!scroll)
return { top: rect.top , left: rect.left };
return { top: rect.top + scrollTop, left: rect.left + scrollLeft };
}
};
oResize.version = 20180901;
if(!window.oResize || window.oResize.version < oResize.version)
window.oResize = oResize;
})();
/**
* oNamebox
* version: 0.1.3
* release date: 2016-03-01
*/
(function(){
window.oNameboxes = [];
/**
*
* @param {Object} id
* @param {Object} data
* @param {Object} conf
*/
var oNamebox = function(id, data, conf) {
var t = this;
t.id = id;
t.data = data;
t.cache = {};
conf = conf || {};
t._conf = conf;
t._fct = {};
t._ctrlKey = false;
t.config = {
add: conf.add || false,
add_url: conf.add_url || '',
default_text: conf.default_text || '',
default_value: conf.default_value || '',
img_dir: conf.img_dir || '',
onlyNode: conf.onlyNode || false,
map: conf.map || '',
min: conf.min || 3,
sort: conf.sort || false,
tree_url: conf.tree_url || '',
tree_key: conf.tree_key || 'NODEID',
url_keyword: conf.url_keyword || 'SEARCH',
url_pagination: conf.url_pagination || 'PAGE',
olist: conf.olist || {}
};
t.mode = conf.mode || 'list';
t.multiple = (conf.multiple === undefined || conf.multiple === true);
t.content = null;
t.url = conf.url || '';
t.cb = {};
t.init();
window.oNameboxes[id] = t;
};
/**
*
*/
oNamebox.deleteId = function(id) {
var d = document, el = id;
if(typeof(id) == "string") el = d.getElementById(id);
if(!el) return;
el.parentNode.removeChild(el);
};
oNamebox.cancelEvent = function(e) {
e = e || window.event;
if( !e )
return false;
if(e.stopPropagation) e.stopPropagation();
else e.cancelBubble = true;
if( e.preventDefault ) e.preventDefault();
else e.returnValue = false;
return false;
};
/**
*
*/
oNamebox.treeCbFct = function(t,url,keyword,tree,node,ev) {
var o = window.Oby;
o.xRequest(url.replace(keyword, node.value), null,
function(xhr,params) {
var json = o.evalJSON(xhr.responseText);
if(json.length == 0)
return tree.emptyDirectory(node);
var s = json.length, n;
tree.load(json, node.id);
tree.update(node);
if(tree.selectOnOpen) {
n = tree.find(tree.selectOnOpen);
if(n) tree.sel(n);
tree.selectOnOpen = null;
}
},
function(xhr, params) { tree.add(node.id, 0, "error");
tree.update(node); }
);
return false;
};
/**
*
*/
oNamebox.format = function(obj, format) {
var m = format.match(/{[_a-zA-Z0-9]+}/g);
if(!m)
return obj;
var ret = ''+format, r = null, v = '', k =
'';
for(var i = m.length - 1; i >= 0; i--) {
r = new RegExp(m[i], 'g');
k = m[i].replace(/{|}/g,'');
v = '';
if(obj[k])
v = obj[k];
ret = ret.replace(r, v);
}
return ret;
};
/**
*
*/
oNamebox.prototype = {
/**
*
*/
init: function() {
var t = this, d = document;
if(t.mode == 'list') {
t.container = d.getElementById(t.id+'_olist');
} else {
t.container = d.getElementById(t.id+'_otree');
}
if(window.oResize &&
t.container.parentNode.getAttribute('data-oresize')) {
t.container = t.container.parentNode;
//
t.resize = new oResize(t.container,
{width:false,height:{min:100,max:550}});
}
if(t.mode == 'list') {
// t.container = d.getElementById(t.id+'_olist');
t.content = new window.oList(t.id,t.config.olist,null,t.data,false);
t.content.callbackSelection = function(ol,id,value) {
var d = document, node = ol.get(id);
if(node.key && t.config.olist &&
t.config.olist.displayFormat)
t.set(value, node.key);
else if(node.key && node.name)
t.set(node.name, node.key);
else if(t.content.config.table && node.key)
t.set(value, node.key);
t.container.style.display = "none";
c = d.getElementById(t.id+"_text");
if(c) c.value = "";
ol.sel(null);
if(t._ctrlKey && c)
c.focus();
};
if(t.config.olist && t.config.olist.gradientLoad)
t.content.callbackScroll = function(el) { t.loadMore(el); };
} else {
// t.container = d.getElementById(t.id+'_otree');
var options = {rootImg:(t.config.img_dir+'otree/'),
showLoading:false};
t.content = new window.oTree(t.id, options, null, t.data, false);
t.content.addIcon("world","world.png");
if(t.config.tree_url) {
t.content.callbackFct = function(tree,node,ev) {
return window.oNamebox.treeCbFct(t.content, t.config.tree_url,
t.config.tree_key, tree, node, ev);
};
}
t.content.callbackSelection = function(tree,id) {
var d = document, node = tree.get(id);
if(!t.config.onlyNode || node.state == 0) {
if(node.value && node.name)
t.set(node.name, node.value);
} else if(node.state >= 1 && node.state <= 4) {
tree.s(node);
return;
}
t.container.style.display = "none";
c = d.getElementById(t.id+"_text");
if(c) c.value = "";
tree.sel(0);
if(t._ctrlKey && c)
c.focus();
};
}
t.content.render(true);
t.initKeyboard();
if(t.config.sort) {
if(!window.hkjQuery && !window.jQuery) return;
if(!window.hkjQuery) window.hkjQuery = window.jQuery.noConflict();
hkjQuery(document).ready(function($) {
$('#'+t.id).sortable({
cursor: "move", items: "div",
stop: function(event, ui) {
$("#"+t.id+"
.nametext").appendTo("#"+t.id);
$("#"+t.id+"hikaclear").appendTo("#"+t.id);
}
});
$("#"+t.id).disableSelection();
});
}
},
initKeyboard: function() {
var t = this, d = document, w = window, o = w.Oby, c = t.content;
t._fct['doc.keydown'] = o.addEvent(d, 'keydown',
function(evt) {
if(!evt) var evt = w.event;
if(evt.keyCode == 17) t._ctrlKey = true;
});
t._fct['doc.keyup'] = o.addEvent(d, 'keyup',
function(evt) {
if(!evt) var evt = w.event;
if(evt.keyCode == 17) t._ctrlKey = false;
});
var input_elem = d.getElementById(t.id + "_text");
if(t.mode != 'list' || !input_elem)
return;
t._fct['keypress'] = o.addEvent(input_elem,
'keypress', function(evt) {
if(!evt) var evt = w.event;
if(evt.keyCode == 13) o.cancelEvent(evt);
});
t._fct['keydown'] = o.addEvent(input_elem,
'keydown', function(evt) {
if(!evt) var evt = w.event;
if(evt.keyCode == 8 && t.multiple && (t._inputEmpty ===
undefined || t._inputEmpty === null))
t._inputEmpty = (this.value == '');
else if(evt.keyCode == 13)
t._inputEnter = true;
else if(evt.keyCode == 33 || evt.keyCode == 34)
o.cancelEvent(evt);
});
t._fct['keyup'] = o.addEvent(input_elem, 'keyup',
function(evt) {
if(!evt) var evt = w.event;
if(evt.keyCode == 13) {
// Enter
if(!t._inputEnter)
return;
delete t._inputEnter;
o.cancelEvent(evt);
var id = c.highlightGet(), node = null;
if(id == null && input_elem.value != '')
id = t.content.find(input_elem.value);
if(id === null && ((t.content._dataLng !== null &&
t.content._dataLng == 1) || t.content.lData.length == 1)) {
for(var i = 0; i < t.content.lData.length - 1; i++) {
if(!t.content.lData[i] || t.content.lData[i].block ||
t.content.lData[i].hidden)
continue;
id = i;
break;
}
}
if(id !== null)
node = c.get(id);
if(id !== null && node) {
if(!node.block && !node.hidden && node.key &&
node.name) {
t.set(node.name, node.key);
} else if(!node.block && !node.hidden &&
c.config.table && node.key) {
var value = node.value;
if(c.config.displayFormat)
value = w.oNamebox.format(node, c.config.displayFormat);
else if(t.config.defaultColumn)
value = node[c.config.defaultColumn];
t.set(value, node.key);
}
if(input_elem.value != '') {
input_elem.value = '';
t.content.search(null);
}
} else if(input_elem.value != '' &&
t.config.add_url) {
var add = d.getElementById(t.id + '_add');
if(add)
t.create(add.firstChild, true);
}
} else if(evt.keyCode == 40) {
// Down
c.highlightNext();
o.cancelEvent(evt);
} else if(evt.keyCode == 38) {
// Up
c.highlightPrevious();
o.cancelEvent(evt);
} else if(evt.keyCode == 34) {
// Page down
c.highlightNext(5);
o.cancelEvent(evt);
} else if(evt.keyCode == 33) {
// Page up
c.highlightPrevious(5);
o.cancelEvent(evt);
} else if(evt.keyCode == 8 && t.multiple) {
// backspace
if(!t._inputEmpty) {
t._inputEmpty = null;
return;
}
t._inputEmpty = null;
if(input_elem.value != '')
return;
// If multi, delete the last element
var values = t.get();
if(!values && !values.length)
return;
var v = values.pop(), cur = d.getElementById(t.id + "-" +
v.value);
if(cur && cur.firstChild)
t.unset(cur.firstChild, v.value);
o.cancelEvent(evt);
}
});
},
/**
*
*/
set: function(name, value) {
var t = this, d = document;
if(t.multiple) {
var blocks = {map: (t.config.map + "[]"), key: value, name:
name},
cur = d.getElementById(t.id + "-" + value);
if(t.config.map == '')
blocks['map'] = '';
if(!cur)
t.dup(t.id + "tpl", blocks, t.id + "-" + value);
if(t.mode == 'list')
t.content.block(value);
} else {
var v = d.getElementById(t.id+"_valuehidden"),
n = d.getElementById(t.id+"_valuetext"),
a = d.getElementById(t.id+'_add');
if(v) v.value = value;
if(n) n.innerHTML = name;
if(a) a.style.display = 'none';
}
t.cache.lastSearch = false;
if(t.modifiedData) {
t.loadData(false);
t.modifiedData = false;
}
t.fire('set', {el:t,name:name,value:value});
},
/**
*
*/
unset: function(el, value) {
var t = this, w = window;
w.oNamebox.deleteId(el.parentNode);
if(t.multiple && t.mode == 'list')
t.content.unblock(value);
t.fire('unset', {el:t,obj:el,value:value});
},
/**
*
*/
get: function() {
var t = this, d = document, ret = null;
if(t.multiple) {
ret = [];
var tplElem = d.getElementById(t.id + "tpl");
if(!tplElem)
return ret;
var container = tplElem.parentNode,
elems = container.getElementsByTagName('input');
for(var i = 0; i < elems.length; i++) {
if(elems[i].type.toLowerCase() != 'hidden' ||
elems[i].name.substring(0,1) == '{')
continue;
var txt = elems[i].nextSibling, c = '';
if(txt && txt.nodeType == 3) {
if(txt.textContent)
c = txt.textContent;
else if(txt.nodeValue)
c = txt.nodeValue;
else if(txt.data)
c = txt.data;
}
ret[ ret.length ] = {
'name': c,
'value': elems[i].value
};
}
} else {
ret = {'value':null,'name':null};
var v = d.getElementById(t.id+"_valuehidden"),
n = d.getElementById(t.id+"_valuetext");
if(v) ret.value = v.value;
if(n) ret.name = n.innerHTML;
}
return ret;
},
/**
*
*/
changeUrl: function(url, others) {
var t = this;
if(t.url == url)
return false;
t.url = url;
if(others !== undefined && others) {
if(others.tree)
t.config.tree_url = others.tree;
if(others.add)
t.config.add_url = others.add;
}
t.clear();
if(t.content && t.mode == 'list') {
t.content.load({});
window.Oby.xRequest(
t.url.replace(t.config.url_keyword, ''),
{},
function(xhr){
data = window.Oby.evalJSON(xhr.responseText);
if(data) {
t.content.load(data);
t.data = data;
}
},function(xhr){});
}
t.fire('changeUrl', {el:t,url:url,others:others});
},
/**
*
*/
destroy: function() {
var t = this, w = window, d = document,
input_elem = d.getElementById(t.id + "_text");
for(var f in t._fct) {
if(!t._fct.hasOwnProperty(f))
continue;
if(f.substring(0, 4) != 'doc.')
w.Oby.removeEvent(input_elem, t._fct[f]);
else
w.Oby.removeEvent(d, t._fct[f]);
}
if(t.content)
t.content.destroy();
delete t._fct;
delete t._conf;
delete t.data;
delete t.config;
delete t.cache;
},
/**
*
*/
search: function(el) {
var t = this, d = document, w = window,
s = d.getElementById(t.id+"_span");
if(typeof(el) == "string")
el = d.getElementById(el);
if(!el)
return false;
s.innerHTML = el.value;
el.style.width = s.offsetWidth + 30 + "px";
if(!t.content)
return false;
if(t.cache.lastSearch == el.value)
return false;
if(t.config.add) {
var add_el = d.getElementById(t.id+'_add');
if(add_el)
add_el.style.display = (el.value.length == 0) ? 'none' :
'';
}
if(!t.url) {
t.content.search(el.value);
} else {
if(el.value.length < t.config.min) {
if(t.modifiedData) {
t.loadData(false);
t.modifiedData = false;
}
t.content.search(el.value);
} else {
var url = t.url.replace(t.config.url_keyword, el.value);
if(t.config.url_pagination)
url.replace(t.config.url_pagination, 0);
w.Oby.xRequest(
url,
null,
function(xhr,params) {
t.modifiedData = true;
var p = w.Oby.evalJSON(xhr.responseText),
data = (p.data ? p.data : p);
t.loadData(data);
if(data && data.length)
t.content.config.gradientLoad = true;
},
function(xhr,params) { t.content.search(el.value); }
);
}
}
t.cache.lastSearch = el.value;
},
/**
*
*/
loadMore: function(el) {
if(!this.url) {
el.deinitScroll();
return false;
}
var t = this, d = document, w = window,
input = d.getElementById(t.id + "_text"),
url = t.url.replace(t.config.url_keyword, input.value);
if(t.config.url_pagination)
url = url.replace(t.config.url_pagination, t.content.lData.length);
w.Oby.xRequest(
url,
null,
function(xhr,params) {
var p = w.Oby.evalJSON(xhr.responseText),
data = ((p.data) ? p.data : p),
u = false, i = (input.value == '');
if(!data || data.length == 0) {
t.content.config.gradientLoad = false;
if(i) {
t.url = '';
t.content.render();
}
return;
}
for(var k in data) {
if(!data.hasOwnProperty(k))
continue;
if(i && !t.data[k]) {
t.data[k] = data[k];
u = true;
} else if(!i && !t.content.lData[k]) {
t.content.lData[k] = data[k];
u = true;
}
}
if(u && i) {
// Keep the highlight selection
var hl = t.content.highlightGet();
t.loadData(false);
t.content.highlightSet(hl);
}
if(u && !i)
t.content.render();
},
function(xhr,params) {}
);
},
/**
*
*/
loadData: function(data) {
var t = this;
d = data || t.data;
if(t.mode == 'list') {
t.content.load(d);
if(t.url)
t.content.config.gradientLoad = true;
t.content.render();
} else {
delete t.content.lNodes;
t.content.lNodes = [];
t.content.lNodes[0] = new window.oNode(0,-1);
t.content.load(d);
t.content.render();
}
},
/**
*
*/
focus: function(el) {
var d = document, w = window, t = this,
c = d.getElementById(t.id);
if(typeof(el) == "string")
el = d.getElementById(el);
if(el) el.focus();
if(t.content) t.content.search(el.value);
if(!t.container)
return false;
t.container.style.display = "";
t.fire('focus', {el: t, input: el});
var f = null;
f = function(evt) {
if (!evt) var evt = window.event;
var trg = (window.event) ? evt.srcElement : evt.target;
while(trg != null) {
if(trg == el || trg == t.container || trg == c)
return;
trg = trg.parentNode;
}
t.container.style.display = "none";
t.fire('blur', {el: t, input: el});
window.Oby.removeEvent(document, "mousedown", f);
};
window.Oby.addEvent(document, "mousedown", f);
return false;
},
/**
*
*/
clear: function() {
var d = document, t = this,
el = d.getElementById(t.id), e = null;
delete t.cache;
t.cache = {};
if(!el)
return false;
if(t.multiple) {
for(var i = el.children.length - 1; i >= 0; i--) {
e = el.children[i];
if(e.tagName.toLowerCase() == 'div' && e.className
== 'namebox' && e.style.display != 'none')
el.removeChild(e);
}
if(t.mode == 'list')
t.content.unblock(true);
} else
t.set(t.config.default_text, t.config.default_value);
},
/**
*
*/
clean: function(el, text) {
var t = this;
t.set(text, t.config.default_value);
window.Oby.cancelEvent();
},
/**
*
*/
create: function(el,conf) {
var t = this, d = document, w = window;
window.Oby.cancelEvent();
if(!t.config.add || !t.config.add_url)
return false;
var n = d.getElementById(t.id+"_text"),
l = d.getElementById(t.id+'_loading');
value = null;
if(!n || !n.value || n.value.length == 0)
return false;
var check = t.content.find(n.value, true);
if(check !== null) {
var node = t.content.get(check);
t.set(node.name, node.value);
n.value = '';
return;
}
if(conf && !confirm(encodeURIComponent(n.value) + '
?'))
return false;
value = 'value=' + encodeURIComponent(n.value);
n.value = '';
if(el) el.style.display = 'none';
if(l) l.style.display = '';
w.Oby.xRequest(t.config.add_url,{mode:'POST',data:value},function(xhr,params){
if(l) l.style.display = 'none';
if(el) el.style.display = '';
if(el) el.parentNode.style.display = 'none';
if(xhr.responseText) {
var data = w.Oby.evalJSON(xhr.responseText);
if(data && data.value && data.name) {
if(t.mode == 'list')
t.content.add(data.value, data.name);
t.set(data.name, data.value);
t.data[data.value] = data.name;
}
}
},function(xhr,params){
if(l) l.style.display = 'none';
if(el) el.style.display = '';
if(el) el.parentNode.style.display = 'none';
});
return false;
},
/**
*
* @param {Object} tplName
* @param {Object} htmlblocks
* @param {Object} id
* @param {Object} extraData
* @param {Object} appendTo
*/
dup: function(tplName, htmlblocks, id, extraData, appendTo) {
var d = document, tplElem = d.getElementById(tplName);
if(!tplElem) return;
var container = tplElem.parentNode;
elem = tplElem.cloneNode(true);
if(!appendTo) {
container.insertBefore(elem, tplElem);
} else {
if(typeof(appendTo) == "string")
appendTo = d.getElementById(appendTo);
appendTo.appendChild(elem);
}
elem.style.display = "";
elem.id = '';
if(id)
elem.id = id;
for(var k in htmlblocks) {
elem.innerHTML = elem.innerHTML.replace(new
RegExp("{"+k+"}","g"), htmlblocks[k]);
elem.innerHTML = elem.innerHTML.replace(new
RegExp("%7B"+k+"%7D","g"), htmlblocks[k]);
}
if(extraData) {
for(var k in extraData) {
elem.innerHTML = elem.innerHTML.replace(new
RegExp('{'+k+'}','g'), extraData[k]);
elem.innerHTML = elem.innerHTML.replace(new
RegExp('%7B'+k+'%7D','g'), extraData[k]);
}
}
},
fire: function(name, params) {
var t = this, ev;
if(t.cb[name] === undefined)
return false;
for(var e in t.cb[name]) {
if( e != '_id' ) {
ev = t.cb[name][e];
ev(params);
}
}
return true;
},
register: function(name, fct) {
var t = this;
if(t.cb[name] === undefined )
t.cb[name] = {'_id':0};
var id = t.cb[name]['_id'];
t.cb[name]['_id'] += 1;
t.cb[name][id] = fct;
return id;
},
unregister: function(name, id) {
if(t.cb[name] === undefined || t.cb[name][id] === undefined)
return false;
t.cb[name][id] = null;
return true;
},
};
oNamebox.version = 20180901;
if(!window.oNamebox || !window.oNamebox.version || window.oNamebox.version
< oNamebox.version)
window.oNamebox = oNamebox;
})();
js/tooltip.js000064400000020266151161767230007227 0ustar00/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
!function ($) {
"use strict";
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var HKTooltip = function (element, options) {
this.init('hktooltip', element, options); };
HKTooltip.prototype = {
constructor: HKTooltip,
init: function (type, element, options) {
var t = this, eventIn, eventOut, triggers, trigger, i;
t.type = type;
t.$element = $(element);
t.options = t.getOptions(options);
t.enabled = true;
triggers = t.options.trigger.split(' ');
for(i = triggers.length; i--;) {
trigger = triggers[i];
if (trigger == 'click') {
t.$element.on('click.' + t.type, t.options.selector,
$.proxy(t.toggle, t));
} else if (trigger != 'manual') {
eventIn = trigger == 'hover' ? 'mouseenter' :
'focus';
eventOut = trigger == 'hover' ? 'mouseleave' :
'blur';
t.$element.on(eventIn + '.' + t.type, t.options.selector,
$.proxy(t.enter, t));
t.$element.on(eventOut + '.' + t.type, t.options.selector,
$.proxy(t.leave, t));
}
}
t.options.selector ? (t._options = $.extend({}, t.options, { trigger:
'manual', selector: '' })) : t.fixTitle();
},
getOptions: function (options) {
options = $.extend({}, $.fn[this.type].defaults, this.$element.data(),
options);
if (options.delay && typeof options.delay == 'number')
{
options.delay = { show: options.delay, hide: options.delay };
}
return options;
},
enter: function (e) {
var defaults = $.fn[this.type].defaults, options = {}, self;
this._options && $.each(this._options, function (key, value) {
if (defaults[key] != value) options[key] = value;
}, this);
self = $(e.currentTarget)[this.type](options).data(this.type);
if (!self.options.delay || !self.options.delay.show) return self.show();
clearTimeout(this.timeout);
self.hoverState = 'in';
this.timeout = setTimeout(function() {
if (self.hoverState == 'in') self.show();
}, self.options.delay.show);
},
leave: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type);
if (this.timeout) clearTimeout(this.timeout);
if (!self.options.delay || !self.options.delay.hide) return self.hide();
self.hoverState = 'out';
this.timeout = setTimeout(function() {
if (self.hoverState == 'out') self.hide();
}, self.options.delay.hide);
},
show: function () {
var $tip, pos, actualWidth, actualHeight, placement, tp, e =
$.Event('show');
if (!this.hasContent() || !this.enabled)
return;
this.$element.trigger(e);
if (e.isDefaultPrevented()) return;
$tip = this.tip();
this.setContent();
if (this.options.animation) {
$tip.addClass('fade');
}
placement = typeof this.options.placement == 'function' ?
this.options.placement.call(this, $tip[0], this.$element[0]) :
this.options.placement;
$tip
.detach()
.css({ top: 0, left: 0, display: 'block' });
this.options.container ? $tip.appendTo(this.options.container) :
$tip.insertAfter(this.$element);
pos = this.getPosition();
actualWidth = $tip[0].offsetWidth;
actualHeight = $tip[0].offsetHeight;
switch (placement) {
case 'bottom':
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 -
actualWidth / 2};
break;
case 'top':
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 -
actualWidth / 2};
break;
case 'left':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left
- actualWidth};
break;
case 'right':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left
+ pos.width};
break;
}
this.applyPlacement(tp, placement);
this.$element.trigger('shown');
},
applyPlacement: function(offset, placement){
var $tip = this.tip(), width = $tip[0].offsetWidth, height =
$tip[0].offsetHeight, actualWidth, actualHeight, delta, replace;
$tip
.offset(offset)
.addClass(placement)
.addClass('in');
actualWidth = $tip[0].offsetWidth;
actualHeight = $tip[0].offsetHeight;
if (placement == 'top' && actualHeight != height) {
offset.top = offset.top + height - actualHeight;
replace = true;
}
if (placement == 'bottom' || placement == 'top') {
delta = 0;
if (offset.left < 0){
delta = offset.left * -2;
offset.left = 0;
$tip.offset(offset);
actualWidth = $tip[0].offsetWidth;
actualHeight = $tip[0].offsetHeight;
}
this.replaceArrow(delta - width + actualWidth, actualWidth,
'left');
} else {
this.replaceArrow(actualHeight - height, actualHeight,
'top');
}
if (replace) $tip.offset(offset);
},
replaceArrow: function(delta, dimension, position){
this.arrow().css(position, delta ? (50 * (1 - delta / dimension) +
"%") : '');
},
setContent: function () {
var $tip = this.tip(), title = this.getTitle();
$tip.find('.hk-tooltip-inner')[this.options.html ?
'html' : 'text'](title);
$tip.removeClass('fade in top bottom left right');
},
hide: function () {
// var that = this, $tip = this.tip(), e = $.Event('hide');
var that = this, $tip = this.tip(), e = $.Event('hideme');
this.$element.trigger(e);
if (e.isDefaultPrevented()) return
$tip.removeClass('in');
function removeWithAnimation() {
var timeout = setTimeout(function () {
$tip.off($.support.transition.end).detach();
}, 500);
$tip.one($.support.transition.end, function () {
clearTimeout(timeout);
$tip.detach();
});
}
$.support.transition && this.$tip.hasClass('fade') ?
removeWithAnimation() :
$tip.detach();
this.$element.trigger('hidden');
return this;
},
fixTitle: function () {
var $e = this.$element;
if ($e.attr('title') ||
typeof($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') ||
'').attr('title', '');
}
},
hasContent: function () { return this.getTitle(); },
getPosition: function () {
var el = this.$element[0];
return $.extend({}, (typeof el.getBoundingClientRect ==
'function') ? el.getBoundingClientRect() : {
width: el.offsetWidth
, height: el.offsetHeight
}, this.$element.offset());
},
getTitle: function () {
var title, $e = this.$element, o = this.options;
title = $e.attr('data-original-title') || (typeof o.title ==
'function' ? o.title.call($e[0]) : o.title);
return title;
},
tip: function () { return this.$tip = this.$tip ||
$(this.options.template); },
arrow: function() { return this.$arrow = this.$arrow ||
this.tip().find(".hk-tooltip-arrow"); },
validate: function () {
if (!this.$element[0].parentNode) {
this.hide();
this.$element = null;
this.options = null;
}
},
enable: function () { this.enabled = true; },
disable: function () { this.enabled = false; },
toggleEnabled: function () { this.enabled = !this.enabled; },
toggle: function (e) {
var self = e ?
$(e.currentTarget)[this.type](this._options).data(this.type) : this;
self.tip().hasClass('in') ? self.hide() : self.show();
},
destroy: function () {
this.hide().$element.off('.' +
this.type).removeData(this.type);
}
};
/* TOOLTIP PLUGIN DEFINITION
* ========================= */
var old = $.fn.hktooltip;
$.fn.hktooltip = function ( option ) {
return this.each(function () {
var $this = $(this), data = $this.data('hktooltip'), options =
typeof option == 'object' && option;
if (!data) $this.data('hktooltip', (data = new HKTooltip(this,
options)));
if (typeof option == 'string') data[option]();
});
};
$.fn.hktooltip.Constructor = HKTooltip;
$.fn.hktooltip.defaults = {
animation: true,
placement: 'top',
selector: false,
template: '<div class="hk-tooltip"><div
class="hk-tooltip-arrow"></div><div
class="hk-tooltip-inner"></div></div>',
trigger: 'hover focus',
title: '',
delay: 0,
html: true,
container: false
};
/* TOOLTIP NO CONFLICT
* =================== */
$.fn.hktooltip.noConflict = function () {
$.fn.hktooltip = old;
return this;
};
}(window.jQuery);
mail/index.html000064400000000032151161767230007467
0ustar00<html><body></body></html>mail/order_status_notification.html.php000064400000020142151161767230014436
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail {width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail {width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikamarket/images/mail/header.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}media/com_hikashop/images/icons/icon-48-order.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:ORDER_TITLE}
</h1>
<h2 style="color:#1c8faf
!important;font-size:12px;font-weight:bold; padding-bottom:10px">
{TXT:ORDER_CHANGED}
</h2>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_VENDOR}</h3>
{TXT:SALE_BEGIN_MESSAGE}
</p>
<!--{IF:acl.address}-->
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd;padding-top:10px;padding-bottom:10px;">
{TXT:SALE_CUSTOMER}
</h1>
<table class="w550" border="0"
cellspacing="0" cellpadding="0" width="550"
style="margin-top:10px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<!--{IF:acl.billingaddress}-->
<td style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:BILLING_ADDRESS}</td>
<!--{ENDIF:acl.billingaddress}-->
<!--{IF:acl.shippingaddress}-->
<td style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:SHIPPING_ADDRESS}</td>
<!--{ENDIF:acl.shippingaddress}-->
</tr>
<tr>
<!--{IF:acl.billingaddress}-->
<td>{VAR:BILLING_ADDRESS}</td>
<!--{ENDIF:acl.billingaddress}-->
<!--{IF:acl.shippingaddress}-->
<td>{VAR:SHIPPING_ADDRESS}</td>
<!--{ENDIF:acl.shippingaddress}-->
</tr>
</table>
<!--{ENDIF:acl.address}-->
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd;padding-top:10px;padding-bottom:10px;">
{TXT:SUMMARY_OF_YOUR_SALE}
</h1>
<table class="w550" border="0"
cellspacing="0" cellpadding="0" width="550"
style="margin-top:10px;margin-bottom:10px;font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<tr>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:left;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_NAME}</td>
{TXT:CUSTOMFIELD_NAME}
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_PRICE}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_QUANTITY}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_TOTAL}</td>
</tr>
<!--{START:PRODUCT_LINE}-->
<tr>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;">
{LINEVAR:PRODUCT_IMG}
{LINEVAR:PRODUCT_NAME}<!--{IF:ORDER_PRODUCT_CODE}-->
{LINEVAR:PRODUCT_CODE}<!--{ENDIF:ORDER_PRODUCT_CODE}-->
</td>
{LINEVAR:CUSTOMFIELD_VALUE}
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_PRICE}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_QUANTIY}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_TOTAL}</td>
</tr>
<!--{END:PRODUCT_LINE}-->
<!--{START:ORDER_FOOTER}-->
<tr>
<td colspan="{TXT:FOOTER_COLSPAN}"
style="text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{LINEVAR:NAME}</td>
<td style="text-align:right">{LINEVAR:VALUE}</td>
</tr>
<!--{END:ORDER_FOOTER}-->
</table>
<!--{IF:PAYMENT}-->
<p>
<span style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PAYMENT_METHOD}
:</span> {VAR:PAYMENT}
</p>
<!--{ENDIF:PAYMENT}-->
<!--{IF:SHIPPING}-->
<p>
<span style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:HIKASHOP_SHIPPING_METHOD}
:</span> {VAR:SHIPPING}
</p>
<!--{ENDIF:SHIPPING}-->
<!--{IF:ORDER_SUMMARY}-->
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd;padding-top:10px;padding-bottom:10px;">
{TXT:ADDITIONAL_INFORMATION}
</h1>
<p style="border-bottom:1px solid
#ddd;padding-bottom:10px;">
{VAR:ORDER_SUMMARY}
</p>
<!--{ENDIF:ORDER_SUMMARY}-->
<p>
{TXT:SALE_END_MESSAGE}
</p>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikamarket/images/mail/footer.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/order_status_notification.preload.php000064400000046454151161767230015136
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$orderClass = hikamarket::get('shop.class.order');
$imageHelper = hikamarket::get('shop.helper.image');
$productClass = hikamarket::get('shop.class.product');
$fieldsClass = hikamarket::get('shop.class.field');
global $Itemid;
$url_itemid = '';
if(!empty($Itemid))
$url_itemid = '&Itemid=' . $Itemid;
$customer = $data->customer;
if(!isset($data->order))
$data->order = new stdClass();
$fs =
array('order_number','order_discount_tax','order_shipping_tax','order_payment_tax','order_full_price','order_shipping_price','order_payment_price','order_discount_price','order_currency_id','order_status');
foreach($fs as $f) {
if(isset($data->$f) && !isset($data->order->$f))
$data->order->$f = $data->$f;
if(isset($data->old->$f) && !isset($data->order->$f))
$data->order->$f = $data->old->$f;
}
if($app->isAdmin()) {
$view = 'shop.order';
$order_url =
HIKASHOP_LIVE.'index.php?option=com_hikamarket&ctrl=order&task=show&cid='
. (int)$data->order_id;
} else {
$view = 'shop.address';
$order_url =
hikamarket::completeLink('order&task=show&cid=' .
(int)$data->order_id);
}
$order_number = isset($data->order->order_number) ?
$data->order->order_number :
@$data->order->old->order_number;
$url = '<a href="' . $order_url . '">'
. $order_number . '</a>';
$data->order->order_url = $order_url;
$data->cart = $orderClass->loadFullOrder($data->order_id, true,
false);
$data->cart->coupon = new stdClass();
if(hikashop_level(2)) {
$null = null;
$itemFields =
$fieldsClass->getFields('display:mail_status_notif=1',
$data->cart->products, 'item');
}
$price = new stdClass();
$tax = $data->cart->order_subtotal -
$data->cart->order_subtotal_no_vat +
$data->order->order_discount_tax +
$data->order->order_shipping_tax +
$data->order->order_payment_tax;
$price->price_value = $data->order->order_full_price - $tax;
$price->price_value_with_tax = $data->order->order_full_price;
$data->cart->full_total = new stdClass;
$data->cart->full_total->prices = array($price);
$data->cart->coupon->discount_value =&
$data->order->order_discount_price;
$colspan = 4;
$vendor_name = $data->vendor->vendor_name;
$customer_name = @$data->customer->name;
if(empty($customer_name))
$customer_name =
@$data->cart->billing_address->address_firstname;
$vendor_access = hikamarket::getAclVendor($data->vendor);
$acl = array(
'notify' => hikamarket::aclTest('order/notify',
$vendor_access),
'billingaddress' =>
hikamarket::aclTest('order/show/billingaddress',
$vendor_access),
'shippingaddress' =>
hikamarket::aclTest('order/show/shippingaddress',
$vendor_access),
'customfields' =>
hikamarket::aclTest('order/show/customfields', $vendor_access),
);
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'URL' => $order_url,
'ORDER_PRODUCT_CODE' =>
(bool)$shopConfig->get('show_code', false),
'order' => $data->cart,
'billing_address' => @$data->cart->billing_address,
'shipping_address' => @$data->cart->shipping_address,
'vendor' => $data->vendor,
'customer' => @$data->customer,
'acl.address' => !$acl['notify'] ||
$acl['billingaddress'] || $acl['shippingaddress'],
'acl.billingaddress' => !$acl['notify'] ||
$acl['billingaddress'],
'acl.shippingaddress' => !$acl['notify'] ||
$acl['shippingaddress'],
);
$texts = array(
'BILLING_ADDRESS' =>
JText::_('HIKASHOP_BILLING_ADDRESS'),
'SHIPPING_ADDRESS' =>
JText::_('HIKASHOP_SHIPPING_ADDRESS'),
'SUMMARY_OF_YOUR_SALE' =>
JText::_('SUMMARY_OF_YOUR_SALE'),
'MAIL_HEADER' => JText::_('HIKASHOP_MAIL_HEADER'),
'PRODUCT_NAME' => JText::_('CART_PRODUCT_NAME'),
'PRODUCT_CODE' => JText::_('CART_PRODUCT_CODE'),
'PRODUCT_PRICE' =>
JText::_('CART_PRODUCT_UNIT_PRICE'),
'PRODUCT_QUANTITY' =>
JText::_('CART_PRODUCT_QUANTITY'),
'PRODUCT_TOTAL' => JText::_('HIKASHOP_TOTAL'),
'ADDITIONAL_INFORMATION' =>
JText::_('ADDITIONAL_INFORMATION'),
'ORDER_TITLE' => JText::_('YOUR_SALE'),
'HI_VENDOR' => JText::sprintf('HI_VENDOR',
$vendor_name),
'ORDER_CHANGED' =>
JText::sprintf('ORDER_STATUS_CHANGED_TO', $url,
$data->mail_status),
'SALE_BEGIN_MESSAGE' =>
JText::sprintf('MAIL_SALE_BEGIN_MESSAGE', $order_number,
$customer_name, HIKASHOP_LIVE),
'SALE_END_MESSAGE' =>
JText::sprintf('MAIL_SALE_END_MESSAGE', HIKASHOP_LIVE) .
'<br/>' . JText::sprintf('BEST_REGARDS_VENDOR',
$vendor_name),
'CUSTOMFIELD_NAME' => '',
'FOOTER_COLSPAN' => 3,
);
if(!empty($data->usermsg->usermsg))
$texts['ORDER_CHANGED'] = $data->usermsg->usermsg;
$templates = array();
$products_ids = array();
foreach($data->cart->products as $item) {
$products_ids[] = $item->product_id;
}
$productClass->getProducts($products_ids);
$cartProducts = array();
$cartFooters = array();
if(!empty($data->cart->products)) {
$fields = null;
if(hikashop_level(1) && $acl['customfields']) {
$null = null;
$fields =
$fieldsClass->getFields('display:mail_status_notif=1', $null,
'product');
if(!empty($fields)){
$product_customfields = array();
$usefulFields = array();
foreach($fields as $field) {
$namekey = $field->field_namekey;
foreach($productClass->all_products as $product) {
if(!empty($product->$namekey)) {
$usefulFields[] = $field;
break;
}
}
}
$fields = $usefulFields;
}
if(!empty($fields)) {
foreach($fields as $field) {
$texts['FOOTER_COLSPAN']++;
$texts['CUSTOMFIELD_NAME'] .= '<td
style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:left;color:#1c8faf
!important;font-size:12px;font-weight:bold;">'.$fieldsClass->getFieldName($field).'</td>';
}
}
}
$group = $shopConfig->get('group_options', 0);
$subtotal = 0;
foreach($data->cart->products as $item) {
if($group && $item->order_product_option_parent_id)
continue;
$product = @$productClass->all_products[$item->product_id];
$cartProduct = array(
'PRODUCT_CODE' => $item->order_product_code,
'PRODUCT_QUANTIY' => $item->order_product_quantity,
'PRODUCT_IMG' => '',
'item' => $item,
'product' => $product,
);
if(!empty($item->images[0]->file_path)) {
$img = $imageHelper->getThumbnail($item->images[0]->file_path,
array(50, 50), array('forcesize' => true, 'scale'
=> 'outside'));
if($img->success) {
$image = str_replace('../', HIKASHOP_LIVE, $img->url);
$cartProduct['PRODUCT_IMG'] = '<img
src="'.$image.'" alt=""
style="float:left;margin-top:3px;margin-bottom:3px;margin-right:6px;max-height:50px;max-width:50px;"/>';
}
}
$t = '<p>' . $item->order_product_name;
if($group) {
$display_item_price = false;
foreach($data->cart->products as $j => $optionElement) {
if($optionElement->order_product_option_parent_id !=
$item->order_product_id) continue;
if($optionElement->order_product_price > 0)
$display_item_price = true;
}
if($display_item_price) {
if($shopConfig->get('price_with_tax'))
$t .= '
'.$currencyHelper->format($item->order_product_price +
$item->order_product_tax, $data->order->order_currency_id);
else
$t .= '
'.$currencyHelper->format($item->order_product_price,
$data->order->order_currency_id);
}
}
$t .= '</p>';
if(!empty($itemFields)) {
foreach($itemFields as $field) {
$namekey = $field->field_namekey;
if(!isset($item->$namekey) || !strlen($item->$namekey))
continue;
$t .= '<p>' . $fieldsClass->getFieldName($field) .
': ' . $fieldsClass->show($field, $item->$namekey,
'user_email') . '</p>';
}
}
$cartProduct['CUSTOMFIELD_VALUE'] = '';
if(!empty($fields) && hikashop_level(1)){
foreach($fields as $field){
$namekey = $field->field_namekey;
$productData = @$productClass->all_products[$item->product_id];
$cartProduct['CUSTOMFIELD_VALUE'] .= '<td
style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">'.(empty($productData->$namekey)?'':$fieldsClass->show($field,$productData->$namekey)).'</td>';
}
}
if($group) {
foreach($data->cart->products as $j => $optionElement) {
if($optionElement->order_product_option_parent_id !=
$item->order_product_id) continue;
$item->order_product_price
+=$optionElement->order_product_price;
$item->order_product_tax +=$optionElement->order_product_tax;
$item->order_product_total_price+=$optionElement->order_product_total_price;
$item->order_product_total_price_no_vat+=$optionElement->order_product_total_price_no_vat;
$t .= '<p
class="hikashop_order_option_name">' .
$optionElement->order_product_name;
if($optionElement->order_product_price > 0) {
if($shopConfig->get('price_with_tax'))
$t .= ' ( +
'.$currencyHelper->format($optionElement->order_product_price +
$optionElement->order_product_tax,$data->order->order_currency_id).'
)';
else
$t .= ' ( +
'.$currencyHelper->format($optionElement->order_product_price,$data->order->order_currency_id).'
)';
}
$t .= '</p>';
}
}
$cartProduct['PRODUCT_NAME'] = $t;
$t = '';
$statusDownload =
explode(',',$shopConfig->get('order_status_for_download','confirmed,shipped'));
if(!empty($item->files) &&
in_array($data->order->order_status, $statusDownload)) {
}
$cartProduct['PRODUCT_DOWNLOAD'] = $t;
if($shopConfig->get('price_with_tax')) {
$unit_price =
$currencyHelper->format($item->order_product_price+$item->order_product_tax,
$data->order->order_currency_id);
$total_price =
$currencyHelper->format($item->order_product_total_price,
$data->order->order_currency_id);
$subtotal += $item->order_product_total_price;
} else {
$unit_price = $currencyHelper->format($item->order_product_price,
$data->order->order_currency_id);
$total_price =
$currencyHelper->format($item->order_product_total_price_no_vat,
$data->order->order_currency_id);
$subtotal += $item->order_product_total_price_no_vat;
}
$cartProduct['PRODUCT_PRICE'] = $unit_price;
$cartProduct['PRODUCT_TOTAL'] = $total_price;
$cartProducts[] = $cartProduct;
}
$templates['PRODUCT_LINE'] = $cartProducts;
if(bccomp($data->order->order_discount_price,0,5) ||
bccomp($data->order->order_shipping_price,0,5) ||
bccomp($data->order->order_payment_price,0,5) ||
($data->cart->full_total->prices[0]->price_value!=$data->cart->full_total->prices[0]->price_value_with_tax)
|| !empty($data->cart->additional)) {
$cartFooters[] = array(
'NAME' => JText::_('SUBTOTAL'),
'VALUE' =>
$currencyHelper->format($subtotal,$data->order->order_currency_id)
);
}
if(bccomp($data->order->order_discount_price,0,5)) {
if($shopConfig->get('price_with_tax'))
$t = $currencyHelper->format($data->order->order_discount_price
* -1, $data->order->order_currency_id);
else
$t =
$currencyHelper->format(($data->order->order_discount_price -
@$data->order->order_discount_tax) * -1,
$data->order->order_currency_id);
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_COUPON'),
'VALUE' => $t
);
}
if(bccomp($data->order->order_shipping_price,0,5)) {
if($shopConfig->get('price_with_tax'))
$t =
$currencyHelper->format($data->order->order_shipping_price,
$data->order->order_currency_id);
else
$t = $currencyHelper->format($data->order->order_shipping_price
- @$data->order->order_shipping_tax,
$data->order->order_currency_id);
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_SHIPPING'),
'VALUE' => $t
);
}
if(bccomp($data->order->order_payment_price,0,5)) {
if($shopConfig->get('price_with_tax'))
$t = $currencyHelper->format($data->cart->order_payment_price,
$data->cart->order_currency_id);
else
$t = $currencyHelper->format($data->cart->order_payment_price -
@$data->cart->order_payment_tax,
$data->cart->order_currency_id);
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_PAYMENT'),
'VALUE' => $t
);
}
if(!empty($data->cart->additional)) {
$exclude_additionnal = explode(',',
$shopConfig->get('order_additional_hide', ''));
foreach($data->cart->additional as $additional) {
if(in_array($additional->order_product_name, $exclude_additionnal))
continue;
if(!empty($additional->order_product_price) ||
empty($additionaltionnal->order_product_options)) {
if($shopConfig->get('price_with_tax'))
$t = $currencyHelper->format($additional->order_product_price +
@$additional->order_product_tax,
$data->order->order_currency_id);
else
$t = $currencyHelper->format($additional->order_product_price,
$data->order->order_currency_id);
} else {
$t = $additional->order_product_options;
}
$cartFooters[] = array(
'NAME' => JText::_($additional->order_product_name),
'VALUE' => $t
);
}
}
if($data->cart->full_total->prices[0]->price_value !=
$data->cart->full_total->prices[0]->price_value_with_tax) {
if($shopConfig->get('detailed_tax_display') &&
!empty($data->cart->order_tax_info)) {
foreach($data->cart->order_tax_info as $tax) {
$cartFooters[] = array(
'NAME' => $tax->tax_namekey,
'VALUE' =>
$currencyHelper->format($tax->tax_amount,
$data->order->order_currency_id)
);
}
} else {
$cartFooters[] = array(
'NAME' => JText::_('ORDER_TOTAL_WITHOUT_VAT'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value,
$data->order->order_currency_id)
);
}
$cartFooters[] = array(
'NAME' => JText::_('ORDER_TOTAL_WITH_VAT'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value_with_tax,
$data->order->order_currency_id)
);
} else {
$cartFooters[] = array(
'NAME' =>
JText::_('HIKAM_CUSTOMER_FINAL_TOTAL'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value_with_tax,
$data->order->order_currency_id)
);
}
$vendor_price =
(float)hikamarket::toFloat($data->cart->order_vendor_price);
if($vendor_price < 0)
$vendor_price +=
$data->cart->full_total->prices[0]->price_value_with_tax;
if($vendor_price != 0) {
$cartFooters[] = array(
'NAME' => JText::_('HIKAM_VENDOR_FINAL_TOTAL'),
'VALUE' => $currencyHelper->format($vendor_price,
$data->order->order_currency_id)
);
}
$templates['ORDER_FOOTER'] = $cartFooters;
}
if(!empty($data->cart->order_payment_method)) {
if(!is_numeric($data->cart->order_payment_id)) {
$vars['PAYMENT'] =
$data->cart->order_payment_method.'
'.$data->cart->order_payment_id;
} else {
$paymentClass = hikamarket::get('shop.class.payment');
$payment = $paymentClass->get($data->cart->order_payment_id);
if(!empty($payment))
$vars['PAYMENT'] = $payment->payment_name;
unset($paymentClass);
}
}
if(!empty($data->cart->order_shipping_id)) {
$shippingClass = hikamarket::get('shop.class.shipping');
if(!empty($data->cart->order_shipping_method)) {
if(!is_numeric($data->cart->order_shipping_id)) {
$shipping_name =
$shippingClass->getShippingName($data->cart->order_shipping_method,
$data->cart->order_shipping_id);
$vars['SHIPPING'] = $shipping_name;
$vars['SHIPPING_TXT'] = $vars['SHIPPING'];
} else {
$shipping =
$shippingClass->get($data->cart->order_shipping_id);
$vars['SHIPPING'] = $shipping->shipping_name;
$vars['SHIPPING_TXT'] = $vars['SHIPPING'];
}
} else {
$shippings_data = array();
$shipping_ids = explode(';',
$data->cart->order_shipping_id);
$shippingClass = hikamarket::get('shop.class.shipping');
foreach($shipping_ids as $key) {
$shipping_data = '';
list($k, $w) = explode('@', $key);
$shipping_id = $k;
if(isset($data->cart->shippings[$shipping_id])) {
$shipping = $data->cart->shippings[$shipping_id];
$shipping_data = $shipping->shipping_name;
} else {
foreach($data->cart->products as $order_product) {
if($order_product->order_product_shipping_id == $key) {
if(!is_numeric($order_product->order_product_shipping_id)) {
$shipping_name =
$shippingClass->getShippingName($order_product->order_product_shipping_method,
$shipping_id);
$shipping_data = $shipping_name;
} else {
$shipping_method_data = $shippingClass->get($shipping_id);
$shipping_data = $shipping_method_data->shipping_name;
}
break;
}
}
if(empty($shipping_data))
$shipping_data = '[ ' . $key . ' ]';
}
if(isset($data->cart->order_shipping_params->prices[$key])) {
$price_params =
$data->cart->order_shipping_params->prices[$key];
if($shopConfig->get('price_with_tax'))
$shipping_data .= ' (' .
$currencyHelper->format($price_params->price_with_tax,
$data->cart->order_currency_id) . ')';
else
$shipping_data .= ' (' .
$currencyHelper->format($price_params->price_with_tax -
@$price_params->tax, $data->cart->order_currency_id) .
')';
}
$shippings_data[] = $shipping_data;
}
if(!empty($shippings_data)) {
$vars['SHIPPING'] =
'<ul><li>'.implode('</li><li>',
$shippings_data).'</li></ul>';
$vars['SHIPPING_TXT'] = ' - ' . implode("\r\n -
", $shippings_data);
}
}
unset($shippingClass);
} else {
$vars['SHIPPING'] = '';
}
ob_start();
$sep = '';
if(hikashop_level(2)) {
$fields =
$fieldsClass->getFields('display:mail_status_notif=1',$data,'order','');
foreach($fields as $fieldName => $oneExtraField) {
if(isset($data->$fieldName) &&
!isset($data->cart->$fieldName))
$data->cart->$fieldName = $data->$fieldName;
if(empty($data->cart->$fieldName))
continue;
echo $sep .
$fieldsClass->trans($oneExtraField->field_realname).' :
'.$fieldsClass->show($oneExtraField,
$data->cart->$fieldName,'user_email');
$sep = '<br />';
}
}
JPluginHelper::importPlugin('hikashop');
JFactory::getApplication()->triggerEvent('onAfterOrderProductsListingDisplay',
array(&$data->cart, 'email_notification_html'));
$content = ob_get_clean();
$vars['ORDER_SUMMARY'] = $content;
$vars['BILLING_ADDRESS'] = '';
$vars['SHIPPING_ADDRESS'] = '';
$params = null;
$js = '';
$template = trim(hikamarket::getLayout($view, 'address_template',
$params, $js));
if(!empty($data->cart->billing_address) &&
!empty($data->cart->fields)) {
$billing = $template;
foreach($data->cart->fields as $field) {
$fieldname = $field->field_namekey;
if(!empty($data->cart->billing_address->$fieldname))
$billing = str_replace('{' . $fieldname . '}',
$fieldsClass->show($field,
$data->cart->billing_address->$fieldname, 'user_email'),
$billing);
}
$vars['BILLING_ADDRESS'] =
str_replace(array("\r\n","\r","\n"),'<br/>',preg_replace('#{(?:(?!}).)*}#i','',$billing));
}
if(!empty($data->cart->override_shipping_address)) {
$vars['SHIPPING_ADDRESS'] =
$data->cart->override_shipping_address;
} elseif(!empty($data->cart->order_shipping_id) &&
!empty($data->cart->shipping_address)) {
$shipping = $template;
foreach($data->cart->fields as $field) {
$fieldname = $field->field_namekey;
if(!empty($data->cart->shipping_address->$fieldname))
$shipping = str_replace('{' . $fieldname . '}',
$fieldsClass->show($field,
$data->cart->shipping_address->$fieldname,
'user_email'), $shipping);
}
$vars['SHIPPING_ADDRESS'] = str_replace(array("\r\n",
"\r", "\n"), '<br/>',
preg_replace('#{(?:(?!}).)*}#i', '', $shipping));
} else {
$vars['SHIPPING_ADDRESS'] = $vars['BILLING_ADDRESS'];
}
mail/order_status_notification.preview.php000064400000004564151161767230015165
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class market_order_status_notificationPreviewMaker {
public $displaySubmitButton = false;
public $type = 'order';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
$orderClass = hikashop_get('class.order');
$order = $orderClass->loadFullOrder((int)$data);
if(empty($order->mail_status))
$order->mail_status =
hikamarket::orderStatus(@$order->order_status);
else
$order->mail_status =
hikamarket::orderStatus($order->mail_status);
if(isset($order->hikamarket->vendor)) {
$order->vendor = $order->hikamarket->vendor;
} else {
$vendorClass = hikamarket::get('class.vendor');
$vendor_id = max(1, (int)$order->order_vendor_id);
$order->vendor = $vendorClass->get($vendor_id);
}
$mailClass = hikamarket::get('class.mail');
$mail = $mailClass->load('order_status_notification',
$order);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject =
'MARKET_ORDER_STATUS_NOTIFICATION_SUBJECT';
$mail->dst_email = $order->vendor->vendor_email;
$mail->dst_name = $order->vendor->vendor_name;
return $mail;
}
public function getDefaultData() {
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$html = $nameboxType->display(
'data',
(int)$data,
hikashopNameboxType::NAMEBOX_SINGLE,
'order',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html){
hikashop_display(JText::_('PLEASE_FIRST_CREATE_AN_ORDER'),
'info');
return;
}
if(empty($data)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_AN_ORDER_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php echo JText::_('HIKASHOP_ORDER');
?></dt>
<dd><?php echo $html; ?></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data'])
return;
w.oNameboxes['data'].register('set', function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}
mail/product_approval.html.php000064400000011507151161767230012543
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail{width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail{width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:HIKASHOP_MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikamarket/images/mail/header.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}/media/com_hikashop/images/icons/icon-48-product.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:MAIL_TITLE}
</h1>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_VENDOR}</h3>
{TXT:PRODUCT_APPROVAL_BEGIN_MESSAGE}
</p>
<!--{IF:product}-->
<p>
<strong>{TXT:PRODUCT}</strong>: <a
href="{VAR:PRODUCT_URL}">{VAR:product.product_name}</a>
</p>
<!--{ENDIF:product}-->
<!--{IF:products}-->
<ul>
<!--{START:products}-->
<li><a
href="{LINEVAR:url}">{LINEVAR:product_name}</a></li>
<!--{END:products}-->
</ul>
<!--{ENDIF:products}-->
<!--{IF:message}-->
<h4>{TXT:APPROVAL_ADDITIONAL_MESSAGE}</h4>
<p>
{VAR:message}
</p>
<!--{ENDIF:message}-->
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikamarket/images/mail/footer.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/product_approval.preload.php000064400000002254151161767230013224
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$vendor_name = $data->vendor->vendor_name;
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'PRODUCT_URL' => @$product_url,
'vendor' => $data->vendor,
'message' => !empty($data->message) ?
nl2br($data->message) : '',
);
if(isset($data->product)) {
$vars['product'] = $data->product;
$vars['PRODUCT_URL'] =
hikashop_frontendLink('index.php?option=com_hikashop&ctrl=product&task=show&cid='.(int)$data->product->product_id);
}
if(isset($data->products)) {
foreach($data->products as &$p) {
$p->url =
hikashop_frontendLink('index.php?option=com_hikashop&ctrl=product&task=show&cid='.(int)$p->product_id);
}
$vars['products'] = true;
$templates['products'] = $data->products;
}
$texts = array(
'MAIL_TITLE' =>
JText::_('HIKAM_EMAIL_PRODUCT_APPROVAL'),
'MAIL_HEADER' =>
JText::_('HIKAMARKET_MAIL_HEADER'),
'HI_VENDOR' => JText::sprintf('HI_VENDOR',
$vendor_name),
);
mail/product_approval.preview.php000064400000004471151161767230013262
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class market_product_approvalPreviewMaker {
public $displaySubmitButton = true;
public $type = 'product';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
$producClass = hikashop_get('class.product');
$vendorClass = hikamarket::get('class.vendor');
$params = new stdClass();
$params->product =
$producClass->get((int)$data['product']);
$params->vendor = $vendorClass->get(
(int)$params->product->product_vendor_id );
$params->message = $data['message'];
$mailClass = hikamarket::get('class.mail');
$mail = $mailClass->load('product_approval', $params);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject = 'MARKET_PRODUCT_APPROVAL_SUBJECT';
return $mail;
}
public function getDefaultData() {
return array(
'product' => 0,
'message' => '',
);
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$html = $nameboxType->display(
'data[product]',
(int)$data['product'],
hikashopNameboxType::NAMEBOX_SINGLE,
'product',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html) {
hikashop_display(JText::_('PLEASE_FIRST_CREATE_A_PRODUCT'),
'info');
return;
}
if(empty($data)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_PRODUCT_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php echo JText::_('HIKA_PRODUCT_NAME');
?></dt>
<dd><?php echo $html; ?></dd>
</dl>
<dl class="hika_options">
<dt><?php echo JText::_('MESSAGE'); ?></dt>
<dd><textarea name="data[message]"
style="width:90%;"><?php echo
htmlentities(@$data['message']);
?></textarea></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data_product'])
return;
w.oNameboxes['data_product'].register('set',
function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}
mail/product_creation.html.php000064400000011150151161767230012515
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail{width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail{width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:HIKASHOP_MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikashop/images/mail/header_black.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}/media/com_hikashop/images/icons/icon-48-product.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:MAIL_TITLE}
</h1>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_ADMIN}</h3>
{TXT:PRODUCT_CREATION_BEGIN_MESSAGE}
</p>
<p>
<strong>{TXT:VENDOR}</strong>: <a
href="{VAR:VENDOR_URL}">{VAR:vendor.vendor_name}</a>
</p>
<p>
<strong>{TXT:PRODUCT}</strong>: <a
href="{VAR:PRODUCT_URL}">{VAR:product.product_name}</a>
</p>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikashop/images/mail/footer_black.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/product_creation.preload.php000064400000001453151161767230013204
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'PRODUCT_URL' =>
HIKASHOP_LIVE.'administrator/index.php?option=com_hikashop&ctrl=product&task=edit&cid='.$data->product->product_id,
'VENDOR_URL'=>
HIKASHOP_LIVE.'administrator/index.php?option=com_hikamarket&ctrl=vendor&task=edit&cid='.$data->vendor->vendor_id,
'product' => $data->product,
'vendor' => $data->vendor
);
$texts = array(
'MAIL_TITLE' =>
JText::_('HIKAM_EMAIL_PRODUCT_CREATION'),
'MAIL_HEADER' =>
JText::_('HIKAMARKET_MAIL_HEADER'),
);
mail/product_creation.preview.php000064400000003734151161767230013243
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class market_product_creationPreviewMaker {
public $displaySubmitButton = false;
public $type = 'product';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
$producClass = hikashop_get('class.product');
$vendorClass = hikamarket::get('class.vendor');
$params = new stdClass();
$params->product = $producClass->get((int)$data);
$params->vendor = $vendorClass->get(
(int)$params->product->product_vendor_id );
$mailClass = hikamarket::get('class.mail');
$mail = $mailClass->load('product_creation', $params);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject = 'MARKET_PRODUCT_CREATION_SUBJECT';
return $mail;
}
public function getDefaultData() {
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$html = $nameboxType->display(
'data',
(int)$data,
hikashopNameboxType::NAMEBOX_SINGLE,
'product',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html) {
hikashop_display(JText::_('PLEASE_FIRST_CREATE_A_PRODUCT'),
'info');
return;
}
if(empty($data)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_PRODUCT_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php echo JText::_('HIKA_PRODUCT_NAME');
?></dt>
<dd><?php echo $html; ?></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data'])
return;
w.oNameboxes['data'].register('set', function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}
mail/product_decline.html.php000064400000011501151161767230012314
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail{width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail{width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:HIKASHOP_MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikamarket/images/mail/header.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}/media/com_hikashop/images/icons/icon-48-product.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:MAIL_TITLE}
</h1>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_VENDOR}</h3>
{TXT:PRODUCT_DECLINE_BEGIN_MESSAGE}
</p>
<!--{IF:product}-->
<p>
<strong>{TXT:PRODUCT}</strong>: <a
href="{VAR:PRODUCT_URL}">{VAR:product.product_name}</a>
</p>
<!--{ENDIF:product}-->
<!--{IF:products}-->
<ul>
<!--{START:products}-->
<li><a
href="{LINEVAR:url}">{LINEVAR:product_name}</a></li>
<!--{END:products}-->
</ul>
<!--{ENDIF:products}-->
<!--{IF:message}-->
<h4>{TXT:PRODUCT_DECLINE_REASON}</h4>
<p>
{VAR:message}
</p>
<!--{ENDIF:message}-->
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikamarket/images/mail/footer.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/product_decline.preload.php000064400000002177151161767230013007
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$vendor_name = $data->vendor->vendor_name;
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'PRODUCT_URL' => '',
'vendor' => $data->vendor,
'message' => !empty($data->message) ?
nl2br($data->message) : '',
);
if(isset($data->product)) {
$vars['product'] = $data->product;
$vars['PRODUCT_URL'] =
hikashop_frontendLink('index.php?option=com_hikashop&ctrl=product&task=show&cid='.(int)$data->product->product_id);
}
if(isset($data->products)) {
foreach($data->products as &$p) {
$p->url =
hikashop_frontendLink('index.php?option=com_hikashop&ctrl=product&task=show&cid='.(int)$p->product_id);
}
$vars['products'] = $data->products;
}
$texts = array(
'MAIL_TITLE' =>
JText::_('HIKAM_EMAIL_PRODUCT_DECLINE'),
'MAIL_HEADER' =>
JText::_('HIKAMARKET_MAIL_HEADER'),
'HI_VENDOR' => JText::sprintf('HI_VENDOR',
$vendor_name),
);
mail/product_decline.preview.php000064400000004466151161767230013045
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class market_product_declinePreviewMaker {
public $displaySubmitButton = true;
public $type = 'product';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
$producClass = hikashop_get('class.product');
$vendorClass = hikamarket::get('class.vendor');
$params = new stdClass();
$params->product =
$producClass->get((int)$data['product']);
$params->vendor = $vendorClass->get(
(int)$params->product->product_vendor_id );
$params->message = $data['message'];
$mailClass = hikamarket::get('class.mail');
$mail = $mailClass->load('product_decline', $params);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject = 'MARKET_PRODUCT_DECLINE_SUBJECT';
return $mail;
}
public function getDefaultData() {
return array(
'product' => 0,
'message' => '',
);
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$html = $nameboxType->display(
'data[product]',
(int)$data['product'],
hikashopNameboxType::NAMEBOX_SINGLE,
'product',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html) {
hikashop_display(JText::_('PLEASE_FIRST_CREATE_A_PRODUCT'),
'info');
return;
}
if(empty($data)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_PRODUCT_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php echo JText::_('HIKA_PRODUCT_NAME');
?></dt>
<dd><?php echo $html; ?></dd>
</dl>
<dl class="hika_options">
<dt><?php echo JText::_('MESSAGE'); ?></dt>
<dd><textarea name="data[message]"
style="width:90%;"><?php echo
htmlentities(@$data['message']);
?></textarea></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data_product'])
return;
w.oNameboxes['data_product'].register('set',
function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}
mail/product_modification.html.php000064400000011161151161767230013360
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail{width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail{width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:HIKASHOP_MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikashop/images/mail/header_black.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}/media/com_hikashop/images/icons/icon-48-product.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:MAIL_TITLE}
</h1>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_ADMIN}</h3>
{TXT:PRODUCT_MODIFICATION_BEGIN_MESSAGE}
</p>
<p>
<strong>{TXT:HIKA_VENDOR}</strong>: <a
href="{VAR:VENDOR_URL}">{VAR:vendor.vendor_name}</a>
</p>
<p>
<strong>{TXT:PRODUCT}</strong>: <a
href="{VAR:PRODUCT_URL}">{VAR:product.product_name}</a>
</p>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikashop/images/mail/footer_black.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/product_modification.preload.php000064400000002111151161767230014035
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'PRODUCT_URL' =>
HIKASHOP_LIVE.'administrator/index.php?option=com_hikashop&ctrl=product&task=edit&cid='.$data->product->product_id,
'VENDOR_URL'=>
HIKASHOP_LIVE.'administrator/index.php?option=com_hikamarket&ctrl=vendor&task=edit&cid='.$data->vendor->vendor_id,
'product' => $data->product,
'vendor' => $data->vendor
);
if(empty($data->product->product_name)) {
$productClass = hikamarket::get('shop.class.product');
$vars['product'] =
$productClass->get($data->product->product_id);
}
if(empty($data->product->product_name))
$data->product->product_name =
'<em>'.JText::_('NO_NAME').'</em>';
$texts = array(
'MAIL_TITLE' =>
JText::_('HIKAM_EMAIL_PRODUCT_MODIFICATION'),
'MAIL_HEADER' =>
JText::_('HIKAMARKET_MAIL_HEADER'),
);
mail/product_modification.preview.php000064400000004117151161767230014100
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class market_product_modificationPreviewMaker {
public $displaySubmitButton = false;
public $type = 'product';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
$producClass = hikashop_get('class.product');
$vendorClass = hikamarket::get('class.vendor');
$params = new stdClass();
$params->product = $producClass->get((int)$data);
$params->vendor = $vendorClass->get(
(int)$params->product->product_vendor_id );
$mailClass = hikamarket::get('class.mail');
$mail = $mailClass->load('product_modification', $params);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject = 'MARKET_PRODUCT_MODIFICATION_SUBJECT';
$mail->dst_email = $params->vendor->vendor_email;
$mail->dst_name = $params->vendor->vendor_name;
return $mail;
}
public function getDefaultData() {
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$html = $nameboxType->display(
'data',
(int)$data,
hikashopNameboxType::NAMEBOX_SINGLE,
'product',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html) {
hikashop_display(JText::_('PLEASE_FIRST_CREATE_A_PRODUCT'),
'info');
return;
}
if(empty($data)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_PRODUCT_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php echo JText::_('HIKASHOP_PRODUCT');
?></dt>
<dd><?php echo $html; ?></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data'])
return;
w.oNameboxes['data'].register('set', function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}
mail/template/index.html000064400000000032151161767230011302
0ustar00<html><body></body></html>mail/template/vendor.html.php000064400000005175151161767230012273
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikashop_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikashop_mail{width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikashop_mail{width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
{VAR:TPL_CSS}
</style>
<div id="hikashop_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikamarket/images/mail/header.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
{VAR:TPL_CONTENT}
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikamarket/images/mail/footer.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/user_order_notification.html.php000064400000012527151161767230014101
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}/media/com_hikashop/images/icons/icon-48-order.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:ORDER_TITLE}
</h1>
<h2 style="color:#1c8faf
!important;font-size:12px;font-weight:bold; padding-bottom:10px">
{TXT:ORDER_CHANGED}
</h2>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_CUSTOMER}</h3>
{TXT:ORDER_BEGIN_MESSAGE}
</p>
<table class="w550" border="0"
cellspacing="0" cellpadding="0" width="550"
style="margin-top:10px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<!--{IF:BILLING_ADDRESS}--><td style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:BILLING_ADDRESS}</td><!--{ENDIF:BILLING_ADDRESS}-->
<!--{IF:SHIPPING}--><!--{IF:SHIPPING_ADDRESS}--><td
style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:SHIPPING_ADDRESS}</td><!--{ENDIF:SHIPPING_ADDRESS}--><!--{ENDIF:SHIPPING}-->
</tr>
<tr>
<!--{IF:BILLING_ADDRESS}--><td>{VAR:BILLING_ADDRESS}</td><!--{ENDIF:BILLING_ADDRESS}-->
<!--{IF:SHIPPING}--><!--{IF:SHIPPING_ADDRESS}--><td>{VAR:SHIPPING_ADDRESS}</td><!--{ENDIF:SHIPPING_ADDRESS}--><!--{ENDIF:SHIPPING}-->
</tr>
</table>
<!--{IF:SHOW_ORDER_CONTENT}-->
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd;padding-top:10px;padding-bottom:10px;">
{TXT:SUMMARY_OF_YOUR_ORDER}
</h1>
<!--{START:VENDOR_LINE}-->
<!--{IF:VENDOR_CONTENT}-->{VAR:VENDOR_CONTENT}<!--{ENDIF:VENDOR_CONTENT}-->
<table class="w550" border="0"
cellspacing="0" cellpadding="0" width="550"
style="margin-top:10px;margin-bottom:10px;font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<tr>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:left;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_NAME}</td>
{TXT:CUSTOMFIELD_NAME}
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_PRICE}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_QUANTITY}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_TOTAL}</td>
</tr>
<!--{START:PRODUCT_LINE}-->
<tr>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;">
{LINEVAR:PRODUCT_IMG}
{LINEVAR:PRODUCT_NAME}<!--{IF:ORDER_PRODUCT_CODE}-->
{LINEVAR:PRODUCT_CODE}<!--{ENDIF:ORDER_PRODUCT_CODE}-->
{LINEVAR:PRODUCT_DOWNLOAD}
{LINEVAR:PRODUCT_DETAILS}
</td>
{LINEVAR:CUSTOMFIELD_VALUE}
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_PRICE}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_QUANTITY}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_TOTAL}</td>
</tr>
<!--{END:PRODUCT_LINE}-->
<!--{START:ORDER_FOOTER}-->
<tr>
<td colspan="{TXT:FOOTER_COLSPAN}"
style="text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{LINEVAR:NAME}</td>
<td style="text-align:right">{LINEVAR:VALUE}</td>
</tr>
<!--{END:ORDER_FOOTER}-->
</table>
<!--{END:VENDOR_LINE}-->
<!--{ENDIF:SHOW_ORDER_CONTENT}-->
<!--{IF:PAYMENT}-->
<p>
<span style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PAYMENT_METHOD}
:</span> {VAR:PAYMENT}
</p>
<!--{ENDIF:PAYMENT}-->
<!--{IF:SHIPPING}-->
<p>
<span style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:HIKASHOP_SHIPPING_METHOD}
:</span> {VAR:SHIPPING}
</p>
<!--{ENDIF:SHIPPING}-->
<!--{IF:ORDER_SUMMARY}-->
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd;padding-top:10px;padding-bottom:10px;">
{TXT:ADDITIONAL_INFORMATION}
</h1>
<p style="border-bottom:1px solid
#ddd;padding-bottom:10px;">
{VAR:ORDER_SUMMARY}
</p>
<!--{ENDIF:ORDER_SUMMARY}-->
<p>
{TXT:ORDER_END_MESSAGE}
</p>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
mail/user_order_notification.preload.php000064400000051412151161767230014557
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$app = JFactory::getApplication();
$config = hikashop_config();
$orderClass = hikashop_get('class.order');
$imageHelper = hikashop_get('helper.image');
$productClass = hikashop_get('class.product');
$fieldsClass = hikashop_get('class.field');
global $Itemid;
$url_itemid = (!empty($Itemid)) ? '&Itemid=' . $Itemid :
'';
if(isset($data->url_itemid))
$url_itemid = (!empty($data->url_itemid) ?
'&Itemid=':'') . $data->url_itemid;
$order_url = $data->order_url;
$mail_status = $data->mail_status;
$customer = $data->customer;
if(!isset($data->order))
$data->order = new stdClass();
$fs =
array('order_number','order_discount_tax','order_shipping_tax','order_payment_tax','order_full_price','order_shipping_price','order_payment_price','order_discount_price','order_currency_id','order_status');
foreach($fs as $f) {
if(isset($data->$f) && !isset($data->order->$f))
$data->order->$f = $data->$f;
}
$data->order->order_url = $order_url;
$data->cart = $orderClass->loadFullOrder($data->order_id, true,
false);
if(hikashop_level(2)) {
$itemFields =
$fieldsClass->getFields('display:mail_status_notif=1',
$data->cart->products, 'item');
}
$url = $data->order_number = $data->cart->order_number;
$url = '<a href="'.$order_url.'">'.
$url.'</a>';
$data->cart->coupon = new stdClass();
$price = new stdClass();
$tax = $data->cart->order_subtotal -
$data->cart->order_subtotal_no_vat -
$data->cart->order_discount_tax +
$data->cart->order_shipping_tax +
$data->cart->order_payment_tax;
$price->price_value = max(0, $data->cart->order_full_price -
$tax);
$price->price_value_with_tax = $data->cart->order_full_price;
$data->cart->full_total = new stdClass;
$data->cart->full_total->prices = array($price);
$data->cart->coupon->discount_value =&
$data->cart->order_discount_price;
if($app->isAdmin()) {
$view = 'order';
} else {
$view = 'address';
}
$colspan = 4;
$customer_name = @$customer->name;
if(empty($customer_name))
$customer_name =
@$data->cart->billing_address->address_firstname.'
'.@$data->cart->billing_address->address_lastname;
$data->mail_params_config = array(
'begin_msg' => array('textarea',
'HIKAM_MAIL_BEGIN_MESSAGE', ''),
'billing_address' => array('boolean',
'HIKAM_MAIL_DISP_BILLING_ADDR', 1),
'shipping_address' => array('boolean',
'HIKAM_MAIL_DISP_SHIPPING_ADDR', 1),
'products' => array('boolean',
'HIKAM_MAIL_DISP_PRODUCTS', 1),
'payment_method' => array('boolean',
'HIKAM_MAIL_DISP_PAYMENT', 1),
'shipping_method' => array('boolean',
'HIKAM_MAIL_DISP_SHIPPING', 1),
'fields' => array('boolean',
'HIKAM_MAIL_DISP_FIELDS', 1),
'end_msg' => array('textarea',
'HIKAM_MAIL_END_MESSAGE', ''),
);
if(empty($data->mail_params))
$data->mail_params = array();
foreach($data->mail_params_config as $k => $v) {
if(!isset($data->mail_params[$k]))
$data->mail_params[$k] = $v[2];
}
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'URL' => $order_url,
'ORDER_PRODUCT_CODE' =>
(bool)$config->get('show_code', false),
'order' => $data->cart,
'user' => $customer,
'billing_address' => @$data->cart->billing_address,
'shipping_address' => @$data->cart->shipping_address,
'TPL_HEADER' => (bool)@$customer->user_cms_id,
'TPL_HEADER_URL' => $order_url,
'SHOW_ORDER_CONTENT' => true,
);
$texts = array(
'BILLING_ADDRESS' =>
JText::_('HIKASHOP_BILLING_ADDRESS'),
'SHIPPING_ADDRESS' =>
JText::_('HIKASHOP_SHIPPING_ADDRESS'),
'SUMMARY_OF_YOUR_ORDER' =>
JText::_('SUMMARY_OF_YOUR_ORDER'),
'MAIL_HEADER' => JText::_('HIKASHOP_MAIL_HEADER'),
'TPL_HEADER_TEXT' =>
JText::_('HIKASHOP_MAIL_HEADER'),
'USER_ACCOUNT' => (bool)@$customer->user_cms_id,
'PRODUCT_NAME' => JText::_('CART_PRODUCT_NAME'),
'PRODUCT_CODE' => JText::_('CART_PRODUCT_CODE'),
'PRODUCT_PRICE' =>
JText::_('CART_PRODUCT_UNIT_PRICE'),
'PRODUCT_QUANTITY' =>
JText::_('CART_PRODUCT_QUANTITY'),
'PRODUCT_TOTAL' => JText::_('HIKASHOP_TOTAL'),
'ADDITIONAL_INFORMATION' =>
JText::_('ADDITIONAL_INFORMATION'),
'ORDER_TITLE' => JText::_('YOUR_ORDER'),
'HI_CUSTOMER' => JText::sprintf('HI_CUSTOMER',
$customer_name),
'ORDER_CHANGED' =>
JText::sprintf('ORDER_STATUS_CHANGED_TO', $url,
$data->mail_status),
'ORDER_BEGIN_MESSAGE' =>
JText::sprintf('THANK_YOU_FOR_YOUR_ORDER_BEGIN', HIKASHOP_LIVE),
'ORDER_END_MESSAGE' =>
JText::sprintf('THANK_YOU_FOR_YOUR_ORDER', HIKASHOP_LIVE) .
'<br/>' .
JText::sprintf('BEST_REGARDS_CUSTOMER',$mail->from_name),
);
if(!empty($data->usermsg->usermsg)) {
$texts['ORDER_CHANGED'] = $data->usermsg->usermsg;
}
if(empty($data->mail_params['products']))
$vars['SHOW_ORDER_CONTENT'] = false;
if(!empty($data->mail_params['begin_msg']))
$texts['ORDER_BEGIN_MESSAGE'] =
nl2br($data->mail_params['begin_msg']);
if(!empty($data->mail_params['end_msg']))
$texts['ORDER_END_MESSAGE'] =
nl2br($data->mail_params['end_msg']);
$templates = array();
$products_ids = array();
foreach($data->cart->products as $item) { $products_ids[] =
$item->product_id; }
$productClass->getProducts($products_ids);
$cartProducts = array();
$cartFooters = array();
if(!empty($data->cart->products) &&
!empty($data->mail_params['products'])) {
$null = null;
$fields = null;
$texts['CUSTOMFIELD_NAME'] = '';
$texts['FOOTER_COLSPAN'] = 3;
if(hikashop_level(1)){
$fields =
$fieldsClass->getFields('display:mail_status_notif=1',$null,'product');
if(!empty($fields)){
$product_customfields = array();
$usefulFields = array();
foreach($fields as $field){
$namekey = $field->field_namekey;
foreach($productClass->all_products as $product){
if(!empty($product->$namekey)){
$usefulFields[] = $field;
break;
}
}
}
$fields = $usefulFields;
}
if(!empty($fields)){
foreach($fields as $field){
$texts['FOOTER_COLSPAN']++;
$texts['CUSTOMFIELD_NAME'].='<td
style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:left;color:#1c8faf
!important;font-size:12px;font-weight:bold;">'.$fieldsClass->getFieldName($field).'</td>';
}
}
}
$group = $config->get('group_options',0);
$subtotal = 0;
foreach($data->cart->products as $item) {
if($group && $item->order_product_option_parent_id)
continue;
$product = @$productClass->all_products[$item->product_id];
$cartProduct = array(
'PRODUCT_CODE' => $item->order_product_code,
'PRODUCT_QUANTITY' => $item->order_product_quantity,
'PRODUCT_IMG' => '',
'item' => $item,
'product' => $product,
);
if(!empty($item->images[0]->file_path) &&
$config->get('thumbnail', 1) != 0) {
$img = $imageHelper->getThumbnail($item->images[0]->file_path,
array(50, 50), array('forcesize' => true, 'scale'
=> 'outside'));
if($img->success) {
if(substr($img->url, 0, 3) == '../')
$image = str_replace('../', HIKASHOP_LIVE, $img->url);
else
$image = substr(HIKASHOP_LIVE, 0, strpos(HIKASHOP_LIVE, '/',
9)) . $img->url;
$attributes = '';
if($img->external)
$attributes = '
width="'.$img->req_width.'"
height="'.$img->req_height.'"';
$cartProduct['PRODUCT_IMG'] = '<img
src="'.$image.'" alt=""
style="float:left;margin-top:3px;margin-bottom:3px;margin-right:6px;"'.$attributes.'/>';
}
}
$t = '<p>' . $item->order_product_name;
if($group){
$display_item_price=false;
foreach($data->cart->products as $j => $optionElement){
if($optionElement->order_product_option_parent_id !=
$item->order_product_id) continue;
if($optionElement->order_product_price>0){
$display_item_price = true;
}
}
if($display_item_price){
if($config->get('price_with_tax')){
$t .= '
'.$currencyHelper->format($item->order_product_price+$item->order_product_tax,$data->cart->order_currency_id);
}else{
$t .= '
'.$currencyHelper->format($item->order_product_price,$data->cart->order_currency_id);
}
}
}
$t .= '</p>';
if(!empty($itemFields)){
foreach($itemFields as $field){
$namekey = $field->field_namekey;
if(!isset($item->$namekey) || (empty($item->$namekey) &&
!strlen($item->$namekey))) continue;
$t .=
'<p>'.$fieldsClass->getFieldName($field).':
'.$fieldsClass->show($field,$item->$namekey,'user_email').'</p>';
}
}
$cartProduct['CUSTOMFIELD_VALUE'] = '';
if(!empty($fields) && hikashop_level(1)){
foreach($fields as $field){
$namekey = $field->field_namekey;
$productData = @$productClass->all_products[$item->product_id];
$cartProduct['CUSTOMFIELD_VALUE'] .= '<td
style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">'.(empty($productData->$namekey)?'':$fieldsClass->show($field,$productData->$namekey)).'</td>';
}
}
if($group){
foreach($data->cart->products as $j => $optionElement){
if($optionElement->order_product_option_parent_id !=
$item->order_product_id) continue;
$item->order_product_price
+=$optionElement->order_product_price;
$item->order_product_tax +=$optionElement->order_product_tax;
$item->order_product_total_price+=$optionElement->order_product_total_price;
$item->order_product_total_price_no_vat+=$optionElement->order_product_total_price_no_vat;
$t .= '<p
class="hikashop_order_option_name">' .
$optionElement->order_product_name;
if($optionElement->order_product_price>0){
if($config->get('price_with_tax')){
$t .= ' ( +
'.$currencyHelper->format($optionElement->order_product_price+$optionElement->order_product_tax,$data->cart->order_currency_id).'
)';
}else{
$t .= ' ( +
'.$currencyHelper->format($optionElement->order_product_price,$data->cart->order_currency_id).'
)';
}
}
$t .= '</p>';
}
}
$cartProduct['PRODUCT_NAME'] = $t;
$t = '';
$statusDownload =
explode(',',$config->get('order_status_for_download','confirmed,shipped'));
if(!empty($item->files) &&
in_array($data->order->order_status,$statusDownload)){
$t .= '<p>';
foreach($item->files as $file){
$fileName = empty($file->file_name) ? $file->file_path :
$file->file_name;
$file_pos = empty($file->file_pos) ? '' :
('&file_pos=' . $file->file_pos);
if(empty($customer->user_cms_id))
$file_pos .= '&order_token=' .
$data->cart->order_token;
$oid = $data->order_id;
if(!empty($data->cart->order_parent_id))
$oid = $data->cart->order_parent_id;
$t .= '<a
href="'.hikashop_frontendLink('index.php?option=com_hikashop&ctrl=order&task=download&file_id='.$file->file_id.'&order_id='.$oid.$file_pos.$url_itemid).'">'.$fileName.'</a><br/>';
}
$t .= '</p>';
}
$cartProduct['PRODUCT_DOWNLOAD'] = $t;
if($config->get('price_with_tax')){
$unit_price =
$currencyHelper->format($item->order_product_price+$item->order_product_tax,$data->cart->order_currency_id);
$total_price =
$currencyHelper->format($item->order_product_total_price,$data->cart->order_currency_id);
$subtotal += $item->order_product_total_price;
}else{
$unit_price =
$currencyHelper->format($item->order_product_price,$data->cart->order_currency_id);
$total_price =
$currencyHelper->format($item->order_product_total_price_no_vat,$data->cart->order_currency_id);
$subtotal += $item->order_product_total_price_no_vat;
}
$cartProduct['PRODUCT_PRICE'] = $unit_price;
$cartProduct['PRODUCT_TOTAL'] = $total_price;
$cartProducts[] = $cartProduct;
}
$templates['PRODUCT_LINE'] = $cartProducts;
if(bccomp($data->cart->order_discount_price,0,5) != 0 ||
bccomp($data->cart->order_shipping_price,0,5) != 0 ||
bccomp($data->cart->order_payment_price,0,5) != 0 ||
($data->cart->full_total->prices[0]->price_value!=$data->cart->full_total->prices[0]->price_value_with_tax)
|| !empty($data->cart->additional)){
$cartFooters[] = array(
'NAME' => JText::_('SUBTOTAL'),
'VALUE' =>
$currencyHelper->format($subtotal,$data->cart->order_currency_id)
);
}
if(bccomp($data->cart->order_discount_price,0,5) != 0) {
if($config->get('price_with_tax')) {
$t =
$currencyHelper->format($data->cart->order_discount_price*-1,$data->cart->order_currency_id);
}else{
$t =
$currencyHelper->format(($data->cart->order_discount_price-@$data->cart->order_discount_tax)*-1,$data->cart->order_currency_id);
}
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_COUPON'),
'VALUE' => $t
);
}
if(bccomp($data->cart->order_shipping_price,0,5) != 0){
if($config->get('price_with_tax')) {
$t =
$currencyHelper->format($data->cart->order_shipping_price,$data->cart->order_currency_id);
}else{
$t =
$currencyHelper->format($data->cart->order_shipping_price-@$data->cart->order_shipping_tax,$data->cart->order_currency_id);
}
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_SHIPPING'),
'VALUE' => $t
);
}
if(bccomp($data->cart->order_payment_price,0,5) != 0){
if($config->get('price_with_tax')) {
$t = $currencyHelper->format($data->cart->order_payment_price,
$data->cart->order_currency_id);
} else {
$t = $currencyHelper->format($data->cart->order_payment_price -
@$data->cart->order_payment_tax,
$data->cart->order_currency_id);
}
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_PAYMENT'),
'VALUE' => $t
);
}
if(!empty($data->cart->additional)) {
$exclude_additionnal = explode(',',
$config->get('order_additional_hide', ''));
foreach($data->cart->additional as $additional) {
if(in_array($additional->order_product_name, $exclude_additionnal))
continue;
if( (!empty($additional->order_product_price) &&
($additional->order_product_price > 0) ) ||
empty($additional->order_product_options)) {
if($config->get('price_with_tax')){
$t = $currencyHelper->format($additional->order_product_price +
@$additional->order_product_tax, $data->cart->order_currency_id);
}else{
$t = $currencyHelper->format($additional->order_product_price,
$data->cart->order_currency_id);
}
} else {
$t = $additional->order_product_options;
}
$cartFooters[] = array(
'NAME' => JText::_($additional->order_product_name),
'VALUE' => $t
);
}
}
if($data->cart->full_total->prices[0]->price_value!=$data->cart->full_total->prices[0]->price_value_with_tax)
{
if($config->get('detailed_tax_display') &&
!empty($data->cart->order_tax_info)) {
foreach($data->cart->order_tax_info as $tax) {
$cartFooters[] = array(
'NAME' => $tax->tax_namekey,
'VALUE' =>
$currencyHelper->format($tax->tax_amount,$data->cart->order_currency_id)
);
}
} else {
$cartFooters[] = array(
'NAME' => JText::_('ORDER_TOTAL_WITHOUT_VAT'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value,$data->cart->order_currency_id)
);
}
$cartFooters[] = array(
'NAME' => JText::_('ORDER_TOTAL_WITH_VAT'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value_with_tax,$data->cart->order_currency_id)
);
} else {
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_TOTAL'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value_with_tax,$data->cart->order_currency_id)
);
}
$templates['ORDER_FOOTER'] = $cartFooters;
}
if(!empty($data->cart->order_payment_method) &&
!empty($data->mail_params['payment'])) {
if(!is_numeric($data->cart->order_payment_id)){
$vars['PAYMENT'] =
$data->cart->order_payment_method.'
'.$data->cart->order_payment_id;
} else {
$paymentClass = hikashop_get('class.payment');
$payment = $paymentClass->get($data->cart->order_payment_id);
$vars['PAYMENT'] = $payment->payment_name;
unset($paymentClass);
}
}
if(!empty($data->cart->order_shipping_id) &&
!empty($data->mail_params['shipping'])) {
$shippingClass = hikashop_get('class.shipping');
if(!empty($data->cart->order_shipping_method)) {
if(!is_numeric($data->cart->order_shipping_id)){
$shipping_name =
$shippingClass->getShippingName($data->cart->order_shipping_method,
$data->cart->order_shipping_id);
$vars['SHIPPING'] = $shipping_name;
$vars['SHIPPING_TXT'] = $vars['SHIPPING'];
}else{
$shipping =
$shippingClass->get($data->cart->order_shipping_id);
$vars['SHIPPING'] = $shipping->shipping_name;
$vars['SHIPPING_TXT'] = $vars['SHIPPING'];
}
} else {
$shippings_data = array();
$shipping_ids = explode(';',
$data->cart->order_shipping_id);
$shippingClass = hikashop_get('class.shipping');
foreach($shipping_ids as $key) {
$shipping_data = '';
list($k, $w) = explode('@', $key);
$shipping_id = $k;
if(isset($data->cart->shippings[$shipping_id])) {
$shipping = $data->cart->shippings[$shipping_id];
$shipping_data = $shipping->shipping_name;
} else {
foreach($data->cart->products as $order_product) {
if($order_product->order_product_shipping_id == $key) {
if(!is_numeric($order_product->order_product_shipping_id)){
$shipping_name =
$shippingClass->getShippingName($order_product->order_product_shipping_method,
$shipping_id);
$shipping_data = $shipping_name;
}else{
$shipping_method_data = $shippingClass->get($shipping_id);
$shipping_data = $shipping_method_data->shipping_name;
}
break;
}
}
if(empty($shipping_data))
$shipping_data = '[ ' . $key . ' ]';
}
if(isset($data->cart->order_shipping_params->prices[$key])) {
$price_params =
$data->cart->order_shipping_params->prices[$key];
if($config->get('price_with_tax')){
$shipping_data .= ' (' .
$currencyHelper->format($price_params->price_with_tax,
$data->cart->order_currency_id) . ')';
}else{
$shipping_data .= ' (' .
$currencyHelper->format($price_params->price_with_tax -
@$price_params->tax, $data->cart->order_currency_id) .
')';
}
}
$shippings_data[] = $shipping_data;
}
if(!empty($shippings_data)) {
$vars['SHIPPING'] =
'<ul><li>'.implode('</li><li>',
$shippings_data).'</li></ul>';
$vars['SHIPPING_TXT'] = ' - ' . implode("\r\n -
", $shippings_data);
}
}
unset($shippingClass);
} else {
$vars['SHIPPING'] = '';
}
ob_start();
$sep = '';
if(hikashop_level(2) &&
!empty($data->mail_params['fields'])) {
$fields =
$fieldsClass->getFields('display:mail_status_notif=1',$data->cart,'order','');
foreach($fields as $fieldName => $oneExtraField) {
if(isset($data->$fieldName) &&
!isset($data->cart->$fieldName))
$data->cart->$fieldName = $data->$fieldName;
if($oneExtraField->field_type != 'customtext' &&
empty($data->cart->$fieldName))
continue;
echo $sep .
$fieldsClass->trans($oneExtraField->field_realname).' :
'.$fieldsClass->show($oneExtraField,
@$data->cart->$fieldName,'user_email');
$sep = '<br />';
}
}
JPluginHelper::importPlugin('hikashop');
$app = JFactory::getApplication();
$app->triggerEvent('onAfterOrderProductsListingDisplay',
array(&$data->cart, 'email_notification_html'));
$content = ob_get_clean();
$vars['ORDER_SUMMARY'] = trim($content);
$unpaid_statuses = explode(',',
$config->get('order_unpaid_statuses', 'created'));
if(in_array($data->order_status, $unpaid_statuses) &&
!empty($data->cart->order_payment_method) &&
$data->cart->order_type == 'sale') {
ob_start();
if($data->cart->order_full_price > 0 && hikashop_level(1)
&& $config->get('allow_payment_button',1)) {
echo '<p>' .
JText::_('ORDER_VALID_AFTER_PAYMENT') . '</p>';
$pay_url =
'index.php?option=com_hikashop&ctrl=order&task=pay&order_id='.$data->order_id.$url_itemid;
if(empty($customer->user_cms_id) &&
!empty($data->cart->order_token)) {
$pay_url .=
'&order_token='.urlencode($data->cart->order_token);
}
$pay_url = hikashop_frontendLink($pay_url);
if($config->get('force_ssl',0) &&
strpos('https://',$pay_url) === false) {
$pay_url =
str_replace('http://','https://',$pay_url);
}
echo '<p><a href="'. $pay_url
.'">'.JText::_('PAY_NOW') .
'</a></p>';
}
$content = ob_get_clean();
$vars['ORDER_SUMMARY'] .= $content;
}
$vars['BILLING_ADDRESS'] = '';
$vars['SHIPPING_ADDRESS'] = '';
$addressClass = hikashop_get('class.address');
if(!empty($data->cart->billing_address) &&
!empty($data->cart->fields) &&
!empty($data->mail_params['billing_address'])) {
$vars['BILLING_ADDRESS'] =
$addressClass->displayAddress($data->cart->fields,$data->cart->billing_address,$view);
}
if(!empty($data->mail_params['shipping_address'])) {
if(!empty($data->cart->override_shipping_address)) {
$vars['SHIPPING_ADDRESS'] =
$data->cart->override_shipping_address;
} elseif(!empty($data->cart->order_shipping_id) &&
!empty($data->cart->shipping_address) &&
!empty($data->cart->fields)) {
$vars['SHIPPING_ADDRESS'] =
$addressClass->displayAddress($data->cart->fields,$data->cart->shipping_address,$view);
} else {
$vars['SHIPPING_ADDRESS'] =
$vars['BILLING_ADDRESS'];
}
}
mail/user_order_notification.preview.php000064400000003174151161767230014614
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class user_order_notificationPreviewMaker {
public $displaySubmitButton = true;
public $type = 'order';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
$orderClass = hikashop_get('class.order');
$order = $orderClass->loadNotification((int)$data,
'market.user_order_notification');
return $order->mail;
}
public function getDefaultData() {
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$html = $nameboxType->display(
'data',
(int)$data,
hikashopNameboxType::NAMEBOX_SINGLE,
'order',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html){
hikashop_display(JText::_('PLEASE_FIRST_CREATE_AN_ORDER'),
'info');
return;
}
if(empty($data)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_AN_ORDER_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php
echo JText::_('HIKASHOP_ORDER');
?></dt>
<dd><?php
echo $html;
?></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data'])
return;
w.oNameboxes['data'].register('set', function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}
mail/user_order_notification.text.php000064400000001561151161767230014115
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
echo JText::sprintf('HI_CUSTOMER',
@$data->customer->name)."\n"."\n";
$url = $data->order_number;
$config =& hikashop_config();
if($config->get('simplified_registration', 0) != 2) {
$url .= "\n".'( '.$data->order_url.'
)'."\n";
}
if(!empty($data->usermsg->usermsg)) {
echo $data->usermsg->usermsg;
} else {
echo JText::sprintf('ORDER_STATUS_CHANGED_TO', $url,
$data->mail_status);
}
echo "\n"."\n" .
JText::sprintf('THANK_YOU_FOR_YOUR_ORDER', HIKASHOP_LIVE) .
"\n"."\n" .
str_replace('<br/>', "\n",
JText::sprintf('BEST_REGARDS_CUSTOMER', $mail->from_name));
mail/vendor_admin_registration.html.php000064400000010775151161767230014424
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail{width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail{width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:HIKASHOP_MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikashop/images/mail/header_black.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}/media/com_hikashop/images/icons/icon-48-product.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:MAIL_TITLE}
</h1>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_ADMIN}</h3>
{TXT:VENDOR_CREATION_BEGIN_MESSAGE}
</p>
<p>
<strong>{TXT:HIKA_VENDOR}</strong>: <a
href="{VAR:VENDOR_URL}">{VAR:vendor_name}</a>
</p>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikashop/images/mail/footer_black.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/vendor_admin_registration.preload.php000064400000001313151161767230015072
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'VENDOR_URL'=>
HIKASHOP_LIVE.'administrator/index.php?option=com_hikamarket&ctrl=vendor&task=edit&cid='.$data->vendor->vendor_id,
'vendor' => $data->vendor,
'user' => $data->user,
'vendor_name' => $data->vendor_name,
);
$texts = array(
'MAIL_TITLE' =>
JText::_('VENDOR_REGISTRATION_EMAIL_SUBJECT'),
'MAIL_HEADER' =>
JText::_('HIKAMARKET_MAIL_HEADER'),
);
mail/vendor_admin_registration.preview.php000064400000005464151161767230015140
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class market_vendor_admin_registrationPreviewMaker {
public $displaySubmitButton = false;
public $type = 'registration';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
if(empty($data['vendor']))
$data['vendor'] = 1;
$userClass = hikashop_get('class.user');
$vendorClass = hikamarket::get('class.vendor');
$params = new stdClass();
$params->user = $userClass->get((int)$data['user']);
$params->vendor =
$vendorClass->get((int)$data['vendor']);
$params->vendor_name = $params->vendor->vendor_name;
$mailClass = hikamarket::get('class.mail');
$mail = $mailClass->load('vendor_admin_registration',
$params);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject =
'MARKET_VENDOR_ADMIN_REGISTRATION_SUBJECT';
return $mail;
}
public function getDefaultData() {
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$marketNameboxType = hikamarket::get('type.namebox');
$html_user = $nameboxType->display(
'data[user]',
(int)$data['user'],
hikashopNameboxType::NAMEBOX_SINGLE,
'user',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html_user) {
hikashop_display(JText::_('PLEASE_FIRST_CREATE_A_PRODUCT'),
'info');
return;
}
$html_vendor = $marketNameboxType->display(
'data[vendor]',
(int)$data['vendor'],
hikashopNameboxType::NAMEBOX_SINGLE,
'vendor',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(empty($html_user)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_USER_FOR_THE_PREVIEW'));
}
if(empty($html_vendor)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_VENDOR_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php echo JText::_('HIKA_USER'); ?></dt>
<dd><?php echo $html_user; ?></dd>
</dl>
<dl class="hika_options">
<dt><?php echo JText::_('HIKAMARKET_VENDOR');
?></dt>
<dd><?php echo $html_vendor; ?></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data_user'])
return;
w.oNameboxes['data_user'].register('set', function(e)
{
hikashop.submitform('preview','adminForm');
});
w.oNameboxes['data_vendor'].register('set',
function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}
mail/vendor_payment_notification.html.php000064400000017115151161767230014760
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail {width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail {width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikamarket/images/mail/header.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}media/com_hikashop/images/icons/icon-48-order.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:MAIL_TITLE}
</h1>
<h2 style="color:#1c8faf
!important;font-size:12px;font-weight:bold; padding-bottom:10px">
{TXT:YOU_HAVE_BEEN_PAID}
</h2>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_VENDOR}</h3>
{TXT:SALE_BEGIN_MESSAGE}
</p>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd;padding-top:10px;padding-bottom:10px;">
{TXT:SALE_CUSTOMER}
</h1>
<table class="w550" border="0"
cellspacing="0" cellpadding="0" width="550"
style="margin-top:10px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:BILLING_ADDRESS}</td>
</tr>
<tr>
<td>{VAR:BILLING_ADDRESS}</td>
</tr>
</table>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd;padding-top:10px;padding-bottom:10px;">
{TXT:SUMMARY_OF_YOUR_SALE}
</h1>
<table class="w550" border="0"
cellspacing="0" cellpadding="0" width="550"
style="margin-top:10px;margin-bottom:10px;font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<tr>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:left;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_NAME}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_PRICE}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_QUANTITY}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PRODUCT_TOTAL}</td>
</tr>
<!--{START:PRODUCT_LINE}-->
<tr>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;">
{LINEVAR:PRODUCT_IMG}
{LINEVAR:PRODUCT_NAME}<!--{IF:ORDER_PRODUCT_CODE}-->
{LINEVAR:PRODUCT_CODE}<!--{ENDIF:ORDER_PRODUCT_CODE}-->
</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_PRICE}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_QUANTIY}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_TOTAL}</td>
</tr>
<!--{END:PRODUCT_LINE}-->
<!--{START:ORDER_FOOTER}-->
<tr>
<td colspan="3" style="text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{LINEVAR:NAME}</td>
<td style="text-align:right">{LINEVAR:VALUE}</td>
</tr>
<!--{END:ORDER_FOOTER}-->
</table>
<!--{IF:PAYMENT}-->
<p>
<span style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:PAYMENT_METHOD}
:</span> {VAR:PAYMENT}
</p>
<!--{ENDIF:PAYMENT}-->
<!--{IF:SHIPPING}-->
<p>
<span style="color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:HIKASHOP_SHIPPING_METHOD}
:</span> {VAR:SHIPPING}
</p>
<!--{ENDIF:SHIPPING}-->
<!--{IF:ORDER_SUMMARY}-->
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd;padding-top:10px;padding-bottom:10px;">
{TXT:ADDITIONAL_INFORMATION}
</h1>
<p style="border-bottom:1px solid
#ddd;padding-bottom:10px;">
{VAR:ORDER_SUMMARY}
</p>
<!--{ENDIF:ORDER_SUMMARY}-->
<p>
{TXT:SALE_END_MESSAGE}
</p>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikamarket/images/mail/footer.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/vendor_payment_notification.preload.php000064400000032521151161767230015440
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$app = JFactory::getApplication();
$config = hikamarket::config();
$shopConfig = hikamarket::config(false);
$orderClass = hikamarket::get('shop.class.order');
$imageHelper = hikamarket::get('shop.helper.image');
$productClass = hikamarket::get('shop.class.product');
$fieldsClass = hikamarket::get('shop.class.field');
global $Itemid;
$url_itemid = '';
if(!empty($Itemid))
$url_itemid = '&Itemid=' . $Itemid;
$customer = $data->order->customer;
if($app->isAdmin()) {
$view = 'shop.order';
$order_url =
HIKASHOP_LIVE.'index.php?option=com_hikamarket&ctrl=order&task=show&cid='
. (int)$data->order_id;
} else {
$view = 'shop.address';
$order_url =
hikamarket::completeLink('order&task=show&cid=' .
(int)$data->order_id);
}
$order_number = isset($data->order->order_number) ?
$data->order->order_number :
@$data->order->old->order_number;
$url = '<a href="' . $order_url . '">'
. $order_number . '</a>';
$data->order->order_url = $order_url;
$data->cart = $orderClass->loadFullOrder($data->order_id, true,
false);
$data->cart->coupon = new stdClass();
$itemFields = null;
$price = new stdClass();
$tax = $data->cart->order_subtotal -
$data->cart->order_subtotal_no_vat +
$data->order->order_discount_tax +
$data->order->order_shipping_tax +
$data->order->order_payment_tax;
$price->price_value = $data->order->order_full_price - $tax;
$price->price_value_with_tax = $data->order->order_full_price;
$data->cart->full_total = new stdClass;
$data->cart->full_total->prices = array($price);
$data->cart->coupon->discount_value =&
$data->order->order_discount_price;
$vendor_name = $data->vendor->vendor_name;
$customer_name = @$data->customer->name;
if(empty($customer_name))
$customer_name =
@$data->cart->billing_address->address_firstname;
$vendor_access = hikamarket::getAclVendor($data->vendor);
$acl = array(
'notify' => hikamarket::aclTest('order/notify',
$vendor_access),
'billingaddress' =>
hikamarket::aclTest('order/show/billingaddress',
$vendor_access),
'shippingaddress' =>
hikamarket::aclTest('order/show/shippingaddress',
$vendor_access),
'customfields' =>
hikamarket::aclTest('order/show/customfields', $vendor_access),
);
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'URL' => $order_url,
'ORDER_PRODUCT_CODE' =>
(bool)$shopConfig->get('show_product_code', false),
'order' => $data->cart,
'billing_addr' => @$data->cart->billing_address,
'vendor' => $data->vendor,
'customer' => @$data->customer,
'PAYMENT' => '',
'BILLING_ADDRESS' => '',
'ORDER_SUMMARY' => '',
);
$texts = array(
'BILLING_ADDRESS' =>
JText::_('HIKASHOP_BILLING_ADDRESS'),
'SHIPPING_ADDRESS' =>
JText::_('HIKASHOP_SHIPPING_ADDRESS'),
'SUMMARY_OF_YOUR_SALE' =>
JText::_('SUMMARY_OF_YOUR_SALE'),
'MAIL_HEADER' => JText::_('HIKASHOP_MAIL_HEADER'),
'PRODUCT_NAME' => JText::_('CART_PRODUCT_NAME'),
'PRODUCT_CODE' => JText::_('CART_PRODUCT_CODE'),
'PRODUCT_PRICE' =>
JText::_('CART_PRODUCT_UNIT_PRICE'),
'PRODUCT_QUANTITY' =>
JText::_('CART_PRODUCT_QUANTITY'),
'PRODUCT_TOTAL' => JText::_('HIKASHOP_TOTAL'),
'ADDITIONAL_INFORMATION' =>
JText::_('ADDITIONAL_INFORMATION'),
'MAIL_TITLE' => JText::_('YOUR_PAYMENT'),
'HI_VENDOR' => JText::sprintf('HI_VENDOR',
$vendor_name),
'YOU_HAVE_BEEN_PAID' =>
JText::_('YOU_HAVE_BEEN_PAID'),
'ORDER_CHANGED' =>
JText::sprintf('ORDER_STATUS_CHANGED_TO', $url,
$data->mail_status),
'SALE_BEGIN_MESSAGE' =>
JText::sprintf('MAIL_SALE_BEGIN_MESSAGE', $order_number,
$customer_name, HIKASHOP_LIVE),
'SALE_END_MESSAGE' =>
JText::sprintf('MAIL_SALE_END_MESSAGE', HIKASHOP_LIVE) .
'<br/>' . JText::sprintf('BEST_REGARDS_VENDOR',
$vendor_name),
);
if(!empty($data->usermsg->usermsg))
$texts['ORDER_CHANGED'] = $data->usermsg->usermsg;
$templates = array();
$products_ids = array();
foreach($data->cart->products as $item) {
$products_ids[] = $item->product_id;
}
$productClass->getProducts($products_ids);
$cartProducts = array();
$cartFooters = array();
{
$group = $shopConfig->get('group_options',0);
$subtotal = 0;
foreach($data->cart->products as $item) {
if($group && $item->order_product_option_parent_id)
continue;
$product = @$productClass->products[$item->product_id];
$cartProduct = array(
'PRODUCT_CODE' => $item->order_product_code,
'PRODUCT_QUANTIY' => $item->order_product_quantity,
'PRODUCT_IMG' => '',
'item' => $item,
'product' => $product,
);
if(!empty($item->images[0]->file_path)) {
$img = $imageHelper->getThumbnail($item->images[0]->file_path,
array(50, 50), array('forcesize' => true, 'scale'
=> 'outside'));
if($img->success) {
$image = str_replace('../', HIKASHOP_LIVE, $img->url);
$cartProduct['PRODUCT_IMG'] = '<img
src="'.$image.'" alt=""
style="float:left;margin-top:3px;margin-bottom:3px;margin-right:6px;max-height:50px;max-width:50px;"/>';
}
}
$t = '<p>' . $item->order_product_name;
if($group) {
$display_item_price = false;
foreach($data->cart->products as $j => $optionElement) {
if($optionElement->order_product_option_parent_id !=
$item->order_product_id) continue;
if($optionElement->order_product_price > 0)
$display_item_price = true;
}
if($display_item_price) {
if($shopConfig->get('price_with_tax'))
$t .= '
'.$currencyHelper->format($item->order_product_price +
$item->order_product_tax, $data->order->order_currency_id);
else
$t .= '
'.$currencyHelper->format($item->order_product_price,
$data->order->order_currency_id);
}
}
$t .= '</p>';
if(!empty($itemFields)) {
foreach($itemFields as $field) {
$namekey = $field->field_namekey;
if(!isset($item->$namekey) || !strlen($item->$namekey))
continue;
$t .= '<p>' . $fieldsClass->getFieldName($field) .
': ' . $fieldsClass->show($field, $item->$namekey,
'user_email') . '</p>';
}
}
if($group) {
foreach($data->cart->products as $j => $optionElement) {
if($optionElement->order_product_option_parent_id !=
$item->order_product_id) continue;
$item->order_product_price
+=$optionElement->order_product_price;
$item->order_product_tax +=$optionElement->order_product_tax;
$item->order_product_total_price+=$optionElement->order_product_total_price;
$item->order_product_total_price_no_vat+=$optionElement->order_product_total_price_no_vat;
$t .= '<p
class="hikashop_order_option_name">' .
$optionElement->order_product_name;
if($optionElement->order_product_price > 0) {
if($shopConfig->get('price_with_tax'))
$t .= ' ( +
'.$currencyHelper->format($optionElement->order_product_price +
$optionElement->order_product_tax,$data->order->order_currency_id).'
)';
else
$t .= ' ( +
'.$currencyHelper->format($optionElement->order_product_price,$data->order->order_currency_id).'
)';
}
$t .= '</p>';
}
}
$cartProduct['PRODUCT_NAME'] = $t;
$cartProduct['PRODUCT_DOWNLOAD'] = '';
if($shopConfig->get('price_with_tax')) {
$unit_price =
$currencyHelper->format($item->order_product_price+$item->order_product_tax,
$data->order->order_currency_id);
$total_price =
$currencyHelper->format($item->order_product_total_price,
$data->order->order_currency_id);
$subtotal += $item->order_product_total_price;
} else {
$unit_price = $currencyHelper->format($item->order_product_price,
$data->order->order_currency_id);
$total_price =
$currencyHelper->format($item->order_product_total_price_no_vat,
$data->order->order_currency_id);
$subtotal += $item->order_product_total_price_no_vat;
}
$cartProduct['PRODUCT_PRICE'] = $unit_price;
$cartProduct['PRODUCT_TOTAL'] = $total_price;
$cartProducts[] = $cartProduct;
}
$templates['PRODUCT_LINE'] = $cartProducts;
if(bccomp($data->order->order_discount_price,0,5) ||
bccomp($data->order->order_shipping_price,0,5) ||
bccomp($data->order->order_payment_price,0,5) ||
($data->cart->full_total->prices[0]->price_value!=$data->cart->full_total->prices[0]->price_value_with_tax)
|| !empty($data->cart->additional)) {
$cartFooters[] = array(
'NAME' => JText::_('SUBTOTAL'),
'VALUE' =>
$currencyHelper->format($subtotal,$data->order->order_currency_id)
);
}
if(bccomp($data->order->order_discount_price,0,5)) {
if($shopConfig->get('price_with_tax'))
$t = $currencyHelper->format($data->order->order_discount_price
* -1, $data->order->order_currency_id);
else
$t =
$currencyHelper->format(($data->order->order_discount_price -
@$data->order->order_discount_tax) * -1,
$data->order->order_currency_id);
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_COUPON'),
'VALUE' => $t
);
}
if(bccomp($data->order->order_shipping_price,0,5)) {
if($shopConfig->get('price_with_tax'))
$t =
$currencyHelper->format($data->order->order_shipping_price,
$data->order->order_currency_id);
else
$t = $currencyHelper->format($data->order->order_shipping_price
- @$data->order->order_shipping_tax,
$data->order->order_currency_id);
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_SHIPPING'),
'VALUE' => $t
);
}
if(bccomp($data->order->order_payment_price,0,5)) {
if($shopConfig->get('price_with_tax'))
$t = $currencyHelper->format($data->cart->order_payment_price,
$data->cart->order_currency_id);
else
$t = $currencyHelper->format($data->cart->order_payment_price -
@$data->cart->order_payment_tax,
$data->cart->order_currency_id);
$cartFooters[] = array(
'NAME' => JText::_('HIKASHOP_PAYMENT'),
'VALUE' => $t
);
}
if(!empty($data->cart->additional)) {
$exclude_additionnal = explode(',',
$shopConfig->get('order_additional_hide', ''));
foreach($data->cart->additional as $additional) {
if(in_array($additional->order_product_name, $exclude_additionnal))
continue;
if(!empty($additional->order_product_price) ||
empty($additionaltionnal->order_product_options)) {
if($shopConfig->get('price_with_tax'))
$t = $currencyHelper->format($additional->order_product_price +
@$additional->order_product_tax,
$data->order->order_currency_id);
else
$t = $currencyHelper->format($additional->order_product_price,
$data->order->order_currency_id);
} else {
$t = $additional->order_product_options;
}
$cartFooters[] = array(
'NAME' => JText::_($additional->order_product_name),
'VALUE' => $t
);
}
}
if($data->cart->full_total->prices[0]->price_value !=
$data->cart->full_total->prices[0]->price_value_with_tax) {
if($shopConfig->get('detailed_tax_display') &&
!empty($data->cart->order_tax_info)) {
foreach($data->cart->order_tax_info as $tax) {
$cartFooters[] = array(
'NAME' => $tax->tax_namekey,
'VALUE' =>
$currencyHelper->format($tax->tax_amount,
$data->order->order_currency_id)
);
}
} else {
$cartFooters[] = array(
'NAME' => JText::_('ORDER_TOTAL_WITHOUT_VAT'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value,
$data->order->order_currency_id)
);
}
$cartFooters[] = array(
'NAME' => JText::_('ORDER_TOTAL_WITH_VAT'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value_with_tax,
$data->order->order_currency_id)
);
} else {
$cartFooters[] = array(
'NAME' =>
JText::_('HIKAM_CUSTOMER_FINAL_TOTAL'),
'VALUE' =>
$currencyHelper->format($data->cart->full_total->prices[0]->price_value_with_tax,
$data->order->order_currency_id)
);
}
$vendor_price =
(float)hikamarket::toFloat($data->cart->order_vendor_price);
if($vendor_price < 0)
$vendor_price +=
$data->cart->full_total->prices[0]->price_value_with_tax;
if($vendor_price != 0) {
$cartFooters[] = array(
'NAME' => JText::_('HIKAM_VENDOR_FINAL_TOTAL'),
'VALUE' => $currencyHelper->format($vendor_price,
$data->order->order_currency_id)
);
}
$templates['ORDER_FOOTER'] = $cartFooters;
}
if(!empty($data->cart->order_payment_method)) {
if(!is_numeric($data->cart->order_payment_id)) {
$vars['PAYMENT'] =
$data->cart->order_payment_method.'
'.$data->cart->order_payment_id;
} else {
$paymentClass = hikamarket::get('shop.class.payment');
$payment = $paymentClass->get($data->cart->order_payment_id);
if(!empty($payment))
$vars['PAYMENT'] = $payment->payment_name;
unset($paymentClass);
}
}
ob_start();
JPluginHelper::importPlugin('hikashop');
JFactory::getApplication()->triggerEvent('onAfterOrderProductsListingDisplay',
array(&$data->cart,
'email_vendor_payment_notification_html'));
$content = ob_get_clean();
$vars['ORDER_SUMMARY'] = $content;
$vars['BILLING_ADDRESS'] = '';
$params = null;
$js = '';
$template = trim(hikamarket::getLayout($view, 'address_template',
$params, $js));
if(!empty($data->cart->billing_address) &&
!empty($data->cart->fields)) {
$billing = $template;
foreach($data->cart->fields as $field) {
$fieldname = $field->field_namekey;
if(!empty($data->cart->billing_address->$fieldname))
$billing = str_replace('{' . $fieldname . '}',
$fieldsClass->show($field,
$data->cart->billing_address->$fieldname, 'user_email'),
$billing);
}
$vars['BILLING_ADDRESS'] =
str_replace(array("\r\n","\r","\n"),'<br/>',preg_replace('#{(?:(?!}).)*}#i','',$billing));
}
mail/vendor_payment_request.html.php000064400000013566151161767230013770
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail{width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail{width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:HIKASHOP_MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikashop/images/mail/header_black.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}/media/com_hikashop/images/icons/icon-48-payment.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:MAIL_TITLE}
</h1>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_ADMIN}</h3>
{TXT:VENDOR_PAYMENT_REQUEST_BEGIN_MESSAGE}
</p>
<p>
<strong>{TXT:HIKA_VENDOR}</strong>: <a
href="{VAR:VENDOR_URL}">{VAR:vendor.vendor_name}</a>
</p>
<table class="w550" border="0"
cellspacing="0" cellpadding="0" width="550"
style="margin-top:10px;margin-bottom:10px;font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<tr>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:left;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:ORDER_STATUS}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:HIKAM_STATS_TOTAL_ORDERS}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{TXT:HIKASHOP_TOTAL}</td>
</tr>
<!--{START:REQUEST_LINE}-->
<tr>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;">{LINEVAR:NAME}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:COUNT}</td>
<td style="border-bottom:1px solid
#ddd;padding-bottom:3px;text-align:right">{LINEVAR:TOTAL}</td>
</tr>
<!--{END:REQUEST_LINE}-->
<!--{START:REQUEST_FOOTER}-->
<tr>
<td colspan="2" style="text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{LINEVAR:COUNT}</td>
<td style="text-align:right;color:#1c8faf
!important;font-size:12px;font-weight:bold;">{LINEVAR:TOTAL}</td>
</tr>
<!--{END:REQUEST_FOOTER}-->
</table>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}/media/com_hikashop/images/mail/footer_black.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/vendor_payment_request.preload.php000064400000003407151161767230014443
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'VENDOR_URL'=>
HIKASHOP_LIVE.'administrator/index.php?option=com_hikamarket&ctrl=vendor&task=edit&cid='.$data->vendor->vendor_id,
'vendor' => $data->vendor,
'user' => $data->user
);
$texts = array(
'MAIL_TITLE' =>
JText::_('VENDOR_PAYMENT_REQUEST_EMAIL_SUBJECT'),
'MAIL_HEADER' =>
JText::_('HIKAMARKET_MAIL_HEADER'),
);
$currencyClass = hikamarket::get('shop.class.currency');
$vendorClass = hikamarket::get('class.vendor');
$stats = $vendorClass->getUnpaidOrders($data->vendor);
$total = new stdClass();
$total->count = 0;
$total->value = 0;
$total->currency = (int)$data->vendor->vendor_currency_id;
if(empty($total->currency))
$total->currency = hikashop_getCurrency();
$templates['REQUEST_LINE'] = array();
foreach($stats as $d) {
$total->count += (int)$d->count;
if($data->vendor->vendor_currency_id == $d->currency)
$total->value += hikamarket::toFloat( (int)$d->value );
else
$total->value +=
$currencyClass->convertUniquePrice((float)hikamarket::toFloat($d->value),
(int)$d->currency, (int)$data->vendor->vendor_currency_id);
$templates['REQUEST_LINE'][] = array(
'NAME' => hikamarket::orderStatus($d->status),
'COUNT' => (int)$d->count,
'TOTAL' => $currencyClass->format($d->value,
$d->currency)
);
}
$templates['REQUEST_FOOTER'] = array(
array(
'COUNT' => $total->count,
'TOTAL' => $currencyClass->format($total->value,
$total->currency)
)
);
mail/vendor_payment_request.preview.php000064400000005454151161767230014502
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class market_vendor_payment_requestPreviewMaker {
public $displaySubmitButton = false;
public $type = 'market';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
if(empty($data['vendor']))
$data['vendor'] = 1;
$userClass = hikashop_get('class.user');
$vendorClass = hikamarket::get('class.vendor');
$params = new stdClass();
$params->user = $userClass->get((int)$data['user']);
$params->vendor =
$vendorClass->get((int)$data['vendor']);
$params->vendor_name = $params->vendor->vendor_name;
$mailClass = hikamarket::get('class.mail');
$mail = $mailClass->load('vendor_admin_registration',
$params);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject = 'MARKET_VENDOR_PAYMENT_REQUEST_SUBJECT';
return $mail;
}
public function getDefaultData() {
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$marketNameboxType = hikamarket::get('type.namebox');
$html_user = $nameboxType->display(
'data[user]',
(int)$data['user'],
hikashopNameboxType::NAMEBOX_SINGLE,
'user',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html_user) {
hikashop_display(JText::_('PLEASE_FIRST_CREATE_A_PRODUCT'),
'info');
return;
}
$html_vendor = $marketNameboxType->display(
'data[vendor]',
(int)$data['vendor'],
hikashopNameboxType::NAMEBOX_SINGLE,
'vendor',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(empty($html_user)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_PRODUCT_FOR_THE_PREVIEW'));
}
if(empty($html_vendor)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_PRODUCT_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php echo JText::_('HIKA_USER'); ?></dt>
<dd><?php echo $html_user; ?></dd>
</dl>
<dl class="hika_options">
<dt><?php echo JText::_('HIKAMARKET_VENDOR');
?></dt>
<dd><?php echo $html_vendor; ?></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data_user'])
return;
w.oNameboxes['data_user'].register('set', function(e)
{
hikashop.submitform('preview','adminForm');
});
w.oNameboxes['data_vendor'].register('set',
function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}
mail/vendor_registration.html.php000064400000010622151161767230013243
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><style type="text/css">
body.hikashop_mail { background-color:#ffffff; color:#575757; }
.ReadMsgBody{width:100%;}
.ExternalClass{width:100%;}
div, p, a, li, td {-webkit-text-size-adjust:none;}
@media (min-width:600px){
#hikamarket_mail {width:600px !important;margin:auto !important;}
.pict img {max-width:500px !important;height:auto !important;}
}
@media (max-width:330px){
#hikamarket_mail {width:300px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 10px !important;}
.pict img {max-width:278px; height:auto !important;}
}
@media (min-width:331px) and (max-width:480px){
#hikamarket_mail{width:450px !important; margin:auto !important;}
table[class=w600], td[class=w600], table[class=w598], td[class=w598],
table[class=w500], td[class=w500], img[class="w600"]{width:100%
!important;}
td[class="w49"] { width: 20px !important;}
.pict img {max-width:408px; height:auto !important;}
}
h1{color:#1c8faf;font-size:16px;font-weight:bold;border-bottom:1px solid
#ddd; padding-bottom:10px;}
h2{color:#89a9c1;font-size:14px;font-weight:bold;margin-top:20px;margin-bottom:5px;border-bottom:1px
solid #d6d6d6;padding-bottom:4px;}
a:visited{cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;}
</style>
<div id="hikamarket_mail" style="font-family:Arial,
Helvetica,sans-serif;font-size:12px;line-height:18px;width:100%;background-color:#ffffff;padding-bottom:20px;color:#5b5b5b;">
<div class="hikashop_online" style="font-family:Arial,
Helvetica,sans-serif;font-size:11px;line-height:18px;color:#6a5c6b;text-decoration:none;margin:10px;text-align:center;">
<a
style="cursor:pointer;color:#2d9cbb;text-decoration:none;border:none;"
href="{VAR:URL}">
<span class="hikashop_online"
style="color:#6a5c6b;text-decoration:none;font-size:11px;margin-top:10px;margin-bottom:10px;text-align:center;">
{TXT:MAIL_HEADER}
</span>
</a>
</div>
<table class="w600" style="font-family:Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin:auto;background-color:#ebebeb;"
border="0" cellspacing="0" cellpadding="0"
width="600" align="center">
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="bottom">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikamarket/images/mail/header.png"
border="0" alt="" />
</td>
</tr>
<tr>
<td class="w600" style="" width="600"
align="center">
<table class="w600" border="0"
cellspacing="0" cellpadding="0" width="600"
style="margin:0px;font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;">
<tr>
<td class="w20" width="20"></td>
<td class="w560 pict" style="text-align:left;
color:#575757" width="560">
<div id="title" style="font-family: Arial,
Helvetica, sans-serif;font-size:12px;line-height:18px;">
<img
src="{VAR:LIVE_SITE}media/com_hikashop/images/icons/icon-48-user.png"
border="0" alt=""
style="float:left;margin-right:4px;"/>
<h1 style="color:#1c8faf
!important;font-size:16px;font-weight:bold; border-bottom:1px solid #ddd;
padding-bottom:10px">
{TXT:VENDOR_REGISTRATION}
</h1>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
<tr>
<td class="w20" width="20"></td>
<td style="border:1px solid
#adadad;background-color:#ffffff;">
<div class="w550" width="550"
id="content" style="font-family: Arial, Helvetica,
sans-serif;font-size:12px;line-height:18px;margin-left:5px;margin-right:5px;">
<p>
<h3 style="color:#393939 !important; font-size:14px;
font-weight:normal;
font-weight:bold;margin-bottom:0px;padding:0px;">{TXT:HI_VENDOR}</h3>
{TXT:VENDOR_REGISTRATION_BEGIN_MESSAGE}
</p>
</div>
</td>
<td class="w20" width="20"></td>
</tr>
</table>
</td>
</tr>
<tr style="line-height: 0px;">
<td class="w600" style="line-height:0px"
width="600" valign="top">
<img class="w600"
src="{VAR:LIVE_SITE}media/com_hikamarket/images/mail/footer.png"
border="0" alt="--" />
</td>
</tr>
</table>
</div>
mail/vendor_registration.preload.php000064400000001627151161767230013732
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
$vars = array(
'LIVE_SITE' => HIKASHOP_LIVE,
'vendor_name' => @$data->vendor_name,
'URL' => HIKASHOP_LIVE,
'vendor' => @$data->vendor,
'user' => @$data->user
);
$texts = array(
'MAIL_TITLE' =>
JText::_('HIKAM_EMAIL_VENDOR_REGISTRATION'),
'HI_VENDOR' => JText::sprintf('HI_VENDOR',
@$data->name),
'MAIL_HEADER' =>
JText::_('HIKAMARKET_MAIL_HEADER')
);
$msg = JText::_('VENDOR_REGISTRATION_BEGIN_MESSAGE');
if(strpos($msg, '%s') !== false) {
$texts['VENDOR_REGISTRATION_BEGIN_MESSAGE'] =
JText::sprintf('VENDOR_REGISTRATION_BEGIN_MESSAGE',
HIKASHOP_LIVE, $data->name, $data->vendor->vendor_id);
}
mail/vendor_registration.preview.php000064400000005512151161767230013762
0ustar00<?php
/**
* @package HikaMarket for Joomla!
* @version 3.1.1
* @author Obsidev S.A.R.L.
* @copyright (C) 2011-2020 OBSIDEV. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class market_vendor_registrationPreviewMaker {
public $displaySubmitButton = false;
public $type = 'registration';
public function prepareMail($data = null) {
if(empty($data))
return $this->getDefaultData();
if(empty($data['vendor']))
$data['vendor'] = 1;
$userClass = hikashop_get('class.user');
$vendorClass = hikamarket::get('class.vendor');
$params = new stdClass();
$params->user = $userClass->get((int)$data['user']);
$params->vendor =
$vendorClass->get((int)$data['vendor']);
$params->vendor_name = $params->vendor->vendor_name;
$params->name = $params->user->name;
$mailClass = hikamarket::get('class.mail');
$mail = $mailClass->load('vendor_registration', $params);
$mail->hikamarket = true;
if(empty($mail->subject))
$mail->subject = 'MARKET_VENDOR_REGISTRATION_SUBJECT';
return $mail;
}
public function getDefaultData() {
}
public function getSelector($data) {
$nameboxType = hikashop_get('type.namebox');
$marketNameboxType = hikamarket::get('type.namebox');
$html_user = $nameboxType->display(
'data[user]',
(int)$data['user'],
hikashopNameboxType::NAMEBOX_SINGLE,
'user',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(!$html_user) {
hikashop_display(JText::_('PLEASE_FIRST_CREATE_A_PRODUCT'),
'info');
return;
}
$html_vendor = $marketNameboxType->display(
'data[vendor]',
(int)$data['vendor'],
hikashopNameboxType::NAMEBOX_SINGLE,
'vendor',
array(
'delete' => false,
'default_text' =>
'<em>'.JText::_('HIKA_NONE').'</em>',
'returnOnEmpty' => false,
)
);
if(empty($html_user)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_USER_FOR_THE_PREVIEW'));
}
if(empty($html_vendor)) {
echo
hikashop_display(Jtext::_('PLEASE_SELECT_A_VENDOR_FOR_THE_PREVIEW'));
}
?>
<dl class="hika_options">
<dt><?php echo JText::_('HIKA_USER'); ?></dt>
<dd><?php echo $html_user; ?></dd>
</dl>
<dl class="hika_options">
<dt><?php echo JText::_('HIKAMARKET_VENDOR');
?></dt>
<dd><?php echo $html_vendor; ?></dd>
</dl>
<script type="text/javascript">
window.Oby.ready(function() {
var w = window;
if(!w.oNameboxes['data_user'])
return;
w.oNameboxes['data_user'].register('set', function(e)
{
hikashop.submitform('preview','adminForm');
});
w.oNameboxes['data_vendor'].register('set',
function(e) {
hikashop.submitform('preview','adminForm');
});
});
</script>
<?php
}
}