Файловый менеджер - Редактировать - /home/lmsyaran/public_html/administrator/components/com_hikashop/helpers/helper.php
Назад
<?php /** * @package HikaShop for Joomla! * @version 2.2.3 * @author hikashop.com * @copyright (C) 2010-2013 HIKARI SOFTWARE. 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'); jimport('joomla.filesystem.file'); $jversion = preg_replace('#[^0-9\.]#i','',JVERSION); define('HIKASHOP_J16',version_compare($jversion,'1.6.0','>=') ? true : false); define('HIKASHOP_J17',version_compare($jversion,'1.7.0','>=') ? true : false); define('HIKASHOP_J25',version_compare($jversion,'2.5.0','>=') ? true : false); define('HIKASHOP_J30',version_compare($jversion,'3.0.0','>=') ? true : false); define('HIKASHOP_PHP5',version_compare(PHP_VERSION,'5.0.0', '>=') ? true : false); class hikashop{ function getDate($time = 0,$format = '%d %B %Y %H:%M'){ return hikashop_getDate($time,$format); } function isAllowed($allowedGroups,$id=null,$type='user'){ return hikashop_isAllowed($allowedGroups,$id,$type); } function addACLFilters(&$filters,$field,$table='',$level=2){ return hikashop_addACLFilters($filters,$field,$table,$level); } function currentURL($checkInRequest=''){ return hikashop_currentURL($checkInRequest); } function getTime($date){ return hikashop_getTime($date); } function getIP(){ return hikashop_getIP(); } function encode(&$data,$type='order',$format='') { return hikashop_encode($data,$type,$format); } function base($id){ return hikashop_base($id); } function decode($str,$type='order') { return hikashop_decode($str,$type); } function &array_path(&$array, $path) { return hikashop_array_path($array, $path); } function toFloat($val){ return hikashop_toFloat($val); } function loadUser($full=false,$reset=false){ return hikashop_loadUser($full,$reset); } function getZone($type='shipping'){ return hikashop_getZone($type); } function getCurrency(){ return hikashop_getCurrency(); } function cleanCart(){ return hikashop_cleanCart(); } function import( $type, $name, $dispatcher = null ){ return hikashop_import( $type, $name, $dispatcher); } function createDir($dir,$report = true){ return hikashop_createDir($dir,$report); } function initModule(){ return hikashop_initModule(); } function absoluteURL($text){ return hikashop_absoluteURL($text); } function setTitle($name,$picture,$link){ return hikashop_setTitle($name,$picture,$link); } function getMenu($title="",$menu_style='content_top'){ return hikashop_getMenu($title,$menu_style); } function getLayout($controller,$layout,$params,&$js){ return hikashop_getLayout($controller,$layout,$params,$js); } function setExplorer($task,$defaultId=0,$popup=false,$type=''){ return hikashop_setExplorer($task,$defaultId,$popup,$type); } function frontendLink($link,$popup = false){ return hikashop_frontendLink($link,$popup); } function backendLink($link,$popup = false){ return hikashop_backendLink($link,$popup); } function bytes($val) { return hikashop_bytes($val); } function display($messages,$type = 'success',$return = false){ return hikashop_display($messages,$type,$return); } function completeLink($link,$popup = false,$redirect = false){ return hikashop_completeLink($link,$popup,$redirect); } function table($name,$component = true){ return hikashop_table($name,$component); } function secureField($fieldName){ return hikashop_secureField($fieldName); } function increasePerf(){ hikashop_increasePerf(); } function &config($reload = false){ return hikashop_config($reload); } function level($level){ return hikashop_level($level); } function footer(){ return hikashop_footer(); } function search($searchString,$object,$exclude=''){ return hikashop_search($searchString,$object,$exclude); } function get($path){ return hikashop_get($path); } function getCID($field = '',$int=true){ return hikashop_getCID($field,$int); } function tooltip($desc,$title='', $image='tooltip.png', $name = '',$href='', $link=1){ return hikashop_tooltip($desc,$title, $image, $name,$href, $link); } function checkRobots(){ return hikashop_checkRobots(); } } function hikashop_getDate($time = 0,$format = '%d %B %Y %H:%M'){ if(empty($time)) return ''; if(is_numeric($format)) $format = JText::_('DATE_FORMAT_LC'.$format); if(HIKASHOP_J16){ $format = str_replace(array('%A','%d','%B','%m','%Y','%y','%H','%M','%S','%a'),array('l','d','F','m','Y','y','H','i','s','D'),$format); return JHTML::_('date',$time,$format,false); } static $timeoffset = null; if($timeoffset === null) { $config = JFactory::getConfig(); $timeoffset = $config->getValue('config.offset'); } return JHTML::_('date',$time- date('Z'),$format,$timeoffset); } function hikashop_isAllowed($allowedGroups,$id=null,$type='user'){ if($allowedGroups == 'all') return true; if($allowedGroups == 'none') return false; if(!is_array($allowedGroups)) $allowedGroups = explode(',',$allowedGroups); if(!HIKASHOP_J16){ if($type=='user'){ $my = JFactory::getUser($id); if(empty($my->id)){ $group = 29; }else{ $group = (int)@$my->gid; } }else{ $group = $id; } return in_array($group,$allowedGroups); } if($type=='user'){ jimport('joomla.access.access'); $my = JFactory::getUser($id); $config =& hikashop_config(); $userGroups = JAccess::getGroupsByUser($my->id, (bool)$config->get('inherit_parent_group_access')); }else{ $userGroups = array($id); } $inter = array_intersect($userGroups,$allowedGroups); if(empty($inter)) return false; return true; } function hikashop_addACLFilters(&$filters, $field, $table='', $level=2, $allowNull=false, $user_id=0){ if(hikashop_level($level)){ if(empty($user_id) || (int)$user_id == 0) { $my = JFactory::getUser(); } else { $userClass = hikashop_get('class.user'); $hkUser = $userClass->get($user_id); $my = JFactory::getUser($hkUser->user_cms_id); } if(!HIKASHOP_J16){ if(empty($my->id)){ $userGroups = array(29); }else{ $userGroups = array($my->gid); } }else{ jimport('joomla.access.access'); $config =& hikashop_config(); $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).')'; } } } function hikashop_currentURL($checkInRequest='',$safe=true){ if(!empty($checkInRequest)){ $url = JRequest::getVar($checkInRequest,''); if(!empty($url)){ if(strpos($url,'http')!==0&&strpos($url,'/')!==0){ if($checkInRequest=='return_url'){ $url = base64_decode(urldecode($url)); }elseif($checkInRequest=='url'){ $url = urldecode($url); } } if($safe){ $url = str_replace(array('"',"'",'<','>',';'),array('%22','%27','%3C','%3E','%3B'),$url); } return $url; } } if(!empty($_SERVER["REDIRECT_URL"]) && preg_match('#.*index\.php$#',$_SERVER["REDIRECT_URL"]) && empty($_SERVER['QUERY_STRING'])&&empty($_SERVER['REDIRECT_QUERY_STRING']) && !empty($_SERVER["REQUEST_URI"])){ $requestUri = $_SERVER["REQUEST_URI"]; }elseif(!empty($_SERVER["REDIRECT_URL"]) && (isset($_SERVER['QUERY_STRING'])||isset($_SERVER['REDIRECT_QUERY_STRING']))){ $requestUri = $_SERVER["REDIRECT_URL"]; if (!empty($_SERVER['REDIRECT_QUERY_STRING'])) $requestUri = rtrim($requestUri,'/').'?'.$_SERVER['REDIRECT_QUERY_STRING']; elseif (!empty($_SERVER['QUERY_STRING'])) $requestUri = rtrim($requestUri,'/').'?'.$_SERVER['QUERY_STRING']; }elseif(isset($_SERVER["REQUEST_URI"])){ $requestUri = $_SERVER["REQUEST_URI"]; }else{ $requestUri = $_SERVER['PHP_SELF']; if (!empty($_SERVER['QUERY_STRING'])) $requestUri = rtrim($requestUri,'/').'?'.$_SERVER['QUERY_STRING']; } $result = (hikashop_isSSL() ? 'https://' : 'http://').$_SERVER["HTTP_HOST"].$requestUri; if($safe){ $result = str_replace(array('"',"'",'<','>',';'),array('%22','%27','%3C','%3E','%3B'),$result); } return $result; } function hikashop_getTime($date){ static $timeoffset = null; if($timeoffset === null){ $config = JFactory::getConfig(); if(!HIKASHOP_J30){ $timeoffset = $config->getValue('config.offset'); } else { $timeoffset = $config->get('offset'); } if(HIKASHOP_J16){ $dateC = JFactory::getDate($date,$timeoffset); $timeoffset = $dateC->getOffsetFromGMT(true); } } return strtotime($date) - $timeoffset *60*60 + date('Z'); } function hikashop_getIP(){ $ip = ''; if( !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && strlen($_SERVER['HTTP_X_FORWARDED_FOR']) > 6){ $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }elseif( !empty($_SERVER['HTTP_CLIENT_IP']) && strlen($_SERVER['HTTP_CLIENT_IP']) > 6){ $ip = $_SERVER['HTTP_CLIENT_IP']; }elseif(!empty($_SERVER['REMOTE_ADDR']) && strlen($_SERVER['REMOTE_ADDR']) > 6){ $ip = $_SERVER['REMOTE_ADDR']; } return strip_tags($ip); } function hikashop_isSSL(){ if((isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) || $_SERVER['SERVER_PORT'] == 443 || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') ) { return true; }else{ return false; } } function hikashop_getUpgradeLink($tolevel){ $config =& hikashop_config(); $text = ''; if($tolevel=='essential'){ $text = 'ONLY_COMMERCIAL'; }elseif($tolevel=='business'){ $text = 'ONLY_FROM_BUSINESS'; } return ' <a class="hikaupgradelink" href="'.HIKASHOP_REDIRECT.'upgrade-hikashop-'.strtolower($config->get('level')).'-to-'.$tolevel.'" target="_blank">'.JText::_($text).'</a>'; } function hikashop_encode(&$data,$type='order', $format = '') { $id = null; if(is_object($data)){ if($type=='order') $id = $data->order_id; if($type=='invoice') $id = $data->order_invoice_id; }else{ $id = $data; } if(is_object($data) && ($type=='order' || $type=='invoice') && hikashop_level(1)){ JPluginHelper::importPlugin( 'hikashop' ); $dispatcher = JDispatcher::getInstance(); $result=''; $trigger_name = 'onBefore'.ucfirst($type).'NumberGenerate'; $dispatcher->trigger($trigger_name, array( &$data, &$result) ); if(!empty($result)){ return $result; } $config =& hikashop_config(); if(empty($format)) { $format = $config->get($type.'_number_format','{automatic_code}'); } if(preg_match('#\{id *(?:size=(?:"|\')(.*)(?:"|\'))? *\}#Ui',$format,$matches)){ $copy = $id; if(!empty($matches[1])){ $copy = sprintf('%0'.$matches[1].'d', $copy); } $format = str_replace($matches[0],$copy,$format); } $matches=null; if(preg_match('#\{date *format=(?:"|\')(.*)(?:"|\') *\}#Ui',$format,$matches)){ $format = str_replace($matches[0],date($matches[1],$data->order_modified),$format); } if(strpos($format,'{automatic_code}')!==false){ $format = str_replace('{automatic_code}',hikashop_base($id),$format); } if(preg_match_all('#\{user ([a-z_0-9]+)\}#i',$format,$matches)){ if(empty($data->customer)){ $class = hikashop_get('class.user'); $data->customer = $class->get($data->order_customer_id); } foreach($matches[1] as $match){ if(isset($data->customer->$match)){ $format = str_replace('{user '.$match.'}',$data->customer->$match,$format); }else{ $format = str_replace('{user '.$match.'}','',$format); } } } if(preg_match_all('#\{([a-z_0-9]+)\}#i',$format,$matches)){ foreach($matches[1] as $match){ if(isset($data->$match)){ $format = str_replace('{'.$match.'}',$data->$match,$format); }else{ $format = str_replace('{'.$match.'}','',$format); } } } return $format; } return hikashop_base($id); } function hikashop_base($id){ $base=23; $chars='ABCDEFGHJKLMNPQRSTUWXYZ'; $str = ''; $val2=(string)$id; do { $i = $id % $base; $str = $chars[$i].$str; $id = ($id - $i) / $base; } while($id > 0); $str2=''; $size = strlen($val2); for($i=0;$i<$size;$i++){ if(isset($str[$i]))$str2.=$str[$i]; $str2.=$val2[$i]; } if($i<strlen($str)){ $str2.=substr($str,$i); } return $str2; } function hikashop_decode($str,$type='order') { $config =& hikashop_config(); if($type=='order' && hikashop_level(1)){ JPluginHelper::importPlugin( 'hikashop' ); $dispatcher = JDispatcher::getInstance(); $result=''; $dispatcher->trigger( 'onBeforeOrderNumberRevert', array( & $str) ); if(!empty($result)){ return $result; } $format = $config->get('order_number_format','{automatic_code}'); $format = str_replace(array('^','$','.','[',']','|','(',')','?','*','+'),array('\^','\$','\.','\[','\]','\|','\(','\)','\?','\*','\+'),$format); if(preg_match('#\{date *format=(?:"|\')(.*)(?:"|\') *\}#Ui',$format,$matches)){ $format = str_replace($matches[0],'(?:'.preg_replace('#[a-z]+#i','[0-9a-z]+',$matches[1]).')',$format); } if(preg_match('#\{id *(?:size=(?:"|\')(.*)(?:"|\'))? *\}#Ui',$format,$matches)){ $format = str_replace($matches[0],'([0-9]+)',$format); } if(strpos($format,'{automatic_code}')!==false){ $format = str_replace('{automatic_code}','([0-9a-z]+)',$format); } if(preg_match_all('#\{([a-z_0-9]+)\}#i',$format,$matches)){ foreach($matches[1] as $match){ if(isset($data->$match)){ $format = str_replace('{'.$match.'}','.*',$format); }else{ $format = str_replace('{'.$match.'}','',$format); } } } $format = str_replace(array('{','}'),array('\{','\}'),$format); if(preg_match('#'.$format.'#i',$str,$matches)){ foreach($matches as $i => $match){ if($i){ return ltrim(preg_replace('#[^0-9]#','',$match),'0'); } } } } return preg_replace('#[^0-9]#','',$str); } function &hikashop_array_path(&$array, $path) { settype($path, 'array'); $offset =& $array; foreach ($path as $index) { if (!isset($offset[$index])) { return false; } $offset =& $offset[$index]; } return $offset; } function hikashop_toFloat($val){ if(preg_match_all('#-?[0-9]+#',$val,$parts) && count($parts[0])>1){ $dec=array_pop($parts[0]); return (float) implode('',$parts[0]).'.'.$dec; } return (float) $val; } function hikashop_loadUser($full=false,$reset=false){ static $user = null; if($reset){ $user = null; return true; } if(!isset($user) || $user === null){ $app = JFactory::getApplication(); $user_id = (int)$app->getUserState( HIKASHOP_COMPONENT.'.user_id' ); $class = hikashop_get('class.user'); if(empty($user_id)){ $userCMS = JFactory::getUser(); if(!$userCMS->guest){ $user_id = $class->getID($userCMS->get('id')); }else{ return $user; } } $user = $class->get($user_id); } if($full){ return $user; }else{ return $user->user_id; } } function hikashop_getZone($type = 'shipping'){ $app = JFactory::getApplication(); $shipping_address = $app->getUserState( HIKASHOP_COMPONENT.'.'.$type.'_address',0); $zone_id =0; if(empty($shipping_address) && $type == 'shipping'){ $shipping_address = $app->getUserState( HIKASHOP_COMPONENT.'.'.'billing_address',0); } if(!empty($shipping_address)){ $useMainZone=false; $id = $app->getUserState( HIKASHOP_COMPONENT.'.shipping_id',''); if($id){ if(is_array($id)) $id = reset($id); $class = hikashop_get('class.shipping'); $shipping = $class->get($id); if(!empty($shipping->shipping_params)) $params = unserialize($shipping->shipping_params); $override = 0; if(isset($params->shipping_override_address)) { $override = (int)$params->shipping_override_address; } if($override && $type == 'shipping'){ $config =& hikashop_config(); $zone_id = explode(',',$config->get('main_tax_zone',$zone_id)); if(count($zone_id)){ $zone_id = array_shift($zone_id); }else{ $zone_id=0; } return $zone_id; } } $addressClass = hikashop_get('class.address'); $address = $addressClass->get($shipping_address); if(!empty($address)){ $field = 'address_country'; if(!empty($address->address_state)){ $field = 'address_state'; } static $zones = array(); if(empty($zones[$address->$field])){ $zoneClass = hikashop_get('class.zone'); $zones[$address->$field] = $zoneClass->get($address->$field); } if(!empty($zones[$address->$field])){ $zone_id = $zones[$address->$field]->zone_id; } } } if(empty($zone_id)){ $zone_id =$app->getUserState( HIKASHOP_COMPONENT.'.zone_id', 0 ); if(empty($zone_id)){ $config =& hikashop_config(); $zone_id = explode(',',$config->get('main_tax_zone',$zone_id)); if(count($zone_id)){ $zone_id = array_shift($zone_id); }else{ $zone_id=0; } $app->setUserState( HIKASHOP_COMPONENT.'.zone_id', $zone_id ); } } return (int)$zone_id; } function hikashop_getCurrency(){ $config =& hikashop_config(); $main_currency = (int)$config->get('main_currency',1); $app = JFactory::getApplication(); $currency_id = (int)$app->getUserState( HIKASHOP_COMPONENT.'.currency_id', $main_currency ); if($currency_id!=$main_currency && !$app->isAdmin()){ static $checked = array(); if(!isset($checked[$currency_id])){ $checked[$currency_id]=true; $db = JFactory::getDBO(); $db->setQuery('SELECT currency_id FROM '.hikashop_table('currency').' WHERE currency_id = '.$currency_id. ' AND ( currency_published=1 OR currency_displayed=1 )'); $currency_id = $db->loadResult(); } } if(empty($currency_id)){ $app->setUserState( HIKASHOP_COMPONENT.'.currency_id', $main_currency ); $currency_id=$main_currency; } return $currency_id; } function hikashop_cleanCart(){ $config =& hikashop_config(); $period = $config->get('cart_retaining_period'); $check = $config->get('cart_retaining_period_check_frequency',86400); $checked = $config->get('cart_retaining_period_checked',0); $max = time()-$check; if(!$checked || $checked<$max){ $query = 'SELECT cart_id FROM '.hikashop_table('cart').' WHERE cart_modified < '.(time()-$period); $database = JFactory::getDBO(); $database->setQuery($query); if(!HIKASHOP_J25){ $ids = $database->loadResultArray(); } else { $ids = $database->loadColumn(); } if(!empty($ids)){ $query = 'DELETE FROM '.hikashop_table('cart_product').' WHERE cart_id IN ('.implode(',',$ids).')'; $database->setQuery($query); $database->query(); $query = 'DELETE FROM '.hikashop_table('cart').' WHERE cart_id IN ('.implode(',',$ids).')'; $database->setQuery($query); $database->query(); } $options = array('cart_retaining_period_checked'=>time()); $config->save($options); } } function hikashop_import( $type, $name, $dispatcher = null ){ $type = preg_replace('#[^A-Z0-9_\.-]#i', '', $type); $name = preg_replace('#[^A-Z0-9_\.-]#i', '', $name); if(!HIKASHOP_J16){ $path = JPATH_PLUGINS.DS.$type.DS.$name.'.php'; }else{ $path = JPATH_PLUGINS.DS.$type.DS.$name.DS.$name.'.php'; } $instance=false; if (file_exists( $path )){ require_once( $path ); if($type=='editors-xtd') $typeName = 'Button'; else $typeName = $type; $className = 'plg'.$typeName.$name; if(class_exists($className)){ if($dispatcher==null){ $dispatcher = JDispatcher::getInstance(); } $instance = new $className($dispatcher, array('name'=>$name,'type'=>$type)); } } return $instance; } function hikashop_createDir($dir,$report = true){ if(is_dir($dir)) return true; jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $indexhtml = '<html><body bgcolor="#FFFFFF"></body></html>'; if(!JFolder::create($dir)){ if($report) hikashop_display('Could not create the directly '.$dir,'error'); return false; } if(!JFile::write($dir.DS.'index.html',$indexhtml)){ if($report) hikashop_display('Could not create the file '.$dir.DS.'index.html','error'); } return true; } function hikashop_initModule(){ static $done = false; if(!$done){ $fe = JRequest::getVar('hikashop_front_end_main',0); if(empty($fe)){ $done = true; if(!HIKASHOP_PHP5) { $lang =& JFactory::getLanguage(); } else { $lang = JFactory::getLanguage(); } $override_path = JLanguage::getLanguagePath(JPATH_ROOT).DS.'overrides'.$lang->getTag().'.override.ini'; if(version_compare(JVERSION,'1.6','>=')&& file_exists($override_path)){ $lang->override = $lang->parse($override_path); } $lang->load(HIKASHOP_COMPONENT,JPATH_SITE); if(version_compare(JVERSION,'1.6','<') && file_exists($override_path)){ $lang->_load($override_path,'override'); } } } return true; } // //-->"; function hikashop_absoluteURL($text){ static $mainurl = ''; if(empty($mainurl)){ $urls = parse_url(HIKASHOP_LIVE); if(!empty($urls['path'])){ $mainurl = substr(HIKASHOP_LIVE,0,strrpos(HIKASHOP_LIVE,$urls['path'])).'/'; }else{ $mainurl = HIKASHOP_LIVE; } } $text = str_replace(array('href="../undefined/','href="../../undefined/','href="../../../undefined//','href="undefined/'),array('href="'.$mainurl,'href="'.$mainurl,'href="'.$mainurl,'href="'.HIKASHOP_LIVE),$text); $text = preg_replace('#href="(/?administrator)?/({|%7B)#Uis','href="$2',$text); $replace = array(); $replaceBy = array(); if($mainurl !== HIKASHOP_LIVE){ $replace[] = '#(href|src|action|background)[ ]*=[ ]*\"(?!(\{|%7B|\#|[a-z]{3,7}:|/))(?:\.\./)#i'; $replaceBy[] = '$1="'.substr(HIKASHOP_LIVE,0,strrpos(rtrim(HIKASHOP_LIVE,'/'),'/')+1); } $replace[] = '#(href|src|action|background)[ ]*=[ ]*\"(?!(\{|%7B|\#|[a-z]{3,7}:|/))(?:\.\./|\./)?#i'; $replaceBy[] = '$1="'.HIKASHOP_LIVE; $replace[] = '#(href|src|action|background)[ ]*=[ ]*\"(?!(\{|%7B|\#|[a-z]{3,7}:))/#i'; $replaceBy[] = '$1="'.$mainurl; $replace[] = '#((background-image|background)[ ]*:[ ]*url\(\'?"?(?!([a-z]{3,7}:|/|\'|"))(?:\.\./|\./)?)#i'; $replaceBy[] = '$1'.HIKASHOP_LIVE; return preg_replace($replace,$replaceBy,$text); } function hikashop_disallowUrlRedirect($url){ $url = str_replace(array('http://www.','https://www.','https://'), array('http://','http://','http://'),$url); $live = str_replace(array('http://www.','https://www.','https://'), array('http://','http://','http://'),HIKASHOP_LIVE); if(strpos($url,$live)!==0 && preg_match('#^http://.*#',$url)) return true; return false; } function hikashop_setTitle($name,$picture,$link){ $config =& hikashop_config(); $menu_style = $config->get('menu_style','title_bottom'); $html = '<a href="'. hikashop_completeLink($link).'">'.$name.'</a>'; if($menu_style!='content_top'){ $html = hikashop_getMenu($html,$menu_style); } JToolBarHelper::title( $html , $picture.'.png' ); if(HIKASHOP_J25) { $doc = JFactory::getDocument(); $app = JFactory::getApplication(); $doc->setTitle($app->getCfg('sitename'). ' - ' .JText::_('JADMINISTRATION').' - '.$name); } } function hikashop_getMenu($title="",$menu_style='content_top'){ $document = JFactory::getDocument(); $controller = new hikashopBridgeController(array('name'=>'menu')); $viewType = $document->getType(); if(!HIKASHOP_PHP5) { $view = & $controller->getView( '', $viewType, ''); } else { $view = $controller->getView( '', $viewType, ''); } $view->setLayout('default'); ob_start(); $view->display(null,$title,$menu_style); return ob_get_clean(); } function hikashop_getLayout($controller,$layout,$params,&$js){ $base_path=HIKASHOP_FRONT; $app = JFactory::getApplication(); if($app->isAdmin()){ $base_path=HIKASHOP_BACK; } $base_path=rtrim($base_path,DS); $document = JFactory::getDocument(); $controller = new hikashopBridgeController(array('name'=>$controller,'base_path'=>$base_path)); $viewType = $document->getType(); if(!HIKASHOP_PHP5) { $view = & $controller->getView( '', $viewType, '',array('base_path'=>$base_path)); } else { $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($layout); ob_start(); $view->display(null,$params); $js = @$view->js; return ob_get_clean(); } function hikashop_setExplorer($task,$defaultId=0,$popup=false,$type=''){ $document = JFactory::getDocument(); $controller = new hikashopBridgeController(array('name'=>'explorer')); $viewType = $document->getType(); if(!HIKASHOP_PHP5) { $view =& $controller->getView('', $viewType, ''); } else { $view = $controller->getView('', $viewType, ''); } $view->setLayout('default'); ob_start(); $view->display(null,$task,$defaultId,$popup,$type); return ob_get_clean(); } function hikashop_frontendLink($link,$popup = false){ if($popup) $link .= '&tmpl=component'; $config = hikashop_config(); $app = JFactory::getApplication(); if(!$app->isAdmin() && $config->get('use_sef',0)){ $link = ltrim(JRoute::_($link,false),'/'); } static $mainurl = ''; static $otherarguments = false; if(empty($mainurl)){ $urls = parse_url(HIKASHOP_LIVE); if(isset($urls['path']) AND strlen($urls['path'])>0){ $mainurl = substr(HIKASHOP_LIVE,0,strrpos(HIKASHOP_LIVE,$urls['path'])).'/'; $otherarguments = trim(str_replace($mainurl,'',HIKASHOP_LIVE),'/'); if(strlen($otherarguments) > 0) $otherarguments .= '/'; }else{ $mainurl = HIKASHOP_LIVE; } } if($otherarguments && strpos($link,$otherarguments) === false){ $link = $otherarguments.$link; } return $mainurl.$link; } function hikashop_backendLink($link,$popup = false){ static $mainurl = ''; static $otherarguments = false; if(empty($mainurl)){ $urls = parse_url(HIKASHOP_LIVE); if(!empty($urls['path'])){ $mainurl = substr(HIKASHOP_LIVE,0,strrpos(HIKASHOP_LIVE,$urls['path'])).'/'; $otherarguments = trim(str_replace($mainurl,'',HIKASHOP_LIVE),'/'); if(!empty($otherarguments)) $otherarguments .= '/'; }else{ $mainurl = HIKASHOP_LIVE; } } if($otherarguments && strpos($link,$otherarguments) === false){ $link = $otherarguments.$link; } return $mainurl.$link; } function hikashop_bytes($val) { $val = trim($val); if(empty($val)){ return 0; } $last = strtolower($val[strlen($val)-1]); switch($last) { case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return (int)$val; } function hikashop_display($messages, $type = 'success', $return = false, $close = true){ if(empty($messages)) return; if(!is_array($messages)) $messages = array($messages); $app = JFactory::getApplication(); if(($app->isAdmin() && !HIKASHOP_BACK_RESPONSIVE) || (!$app->isAdmin() && !HIKASHOP_RESPONSIVE)) { $html = '<div id="hikashop_messages_'.$type.'" class="hikashop_messages hikashop_'.$type.'"><ul><li>'.implode('</li><li>',$messages).'</li></ul></div>'; } else { $html = '<div class="alert alert-'.$type.' alert-block">'.($close?'<button type="button" class="close" data-dismiss="alert">×</button>':'').'<p>'.implode('</p><p>',$messages).'</p></div>'; } if($return){ return $html; } echo $html; } function hikashop_completeLink($link,$popup = false,$redirect = false, $js = false){ if($popup) $link .= '&tmpl=component'; $ret = JRoute::_('index.php?option='.HIKASHOP_COMPONENT.'&ctrl='.$link,!$redirect); if($js) return str_replace('&', '&', $ret); return $ret; } function hikashop_table($name,$component = true){ $prefix = $component ? HIKASHOP_DBPREFIX : '#__'; return $prefix.$name; } function hikashop_secureField($fieldName){ if (!is_string($fieldName) || preg_match('|[^a-z0-9#_.-]|i',$fieldName) !== 0 ){ die('field "'.$fieldName .'" not secured'); } return $fieldName; } function hikashop_increasePerf(){ @ini_set('max_execution_time',0); if(hikashop_bytes(@ini_get('memory_limit')) < 60000000){ $config = hikashop_config(); if($config->get('hikaincreasemem','1')){ if(!empty($_SESSION['hikaincreasemem'])){ $newConfig = new stdClass(); $newConfig->hikaincreasemem = 0; $config->save($newConfig); unset($_SESSION['hikaincreasemem']); return; } if(isset($_SESSION)) $_SESSION['hikaincreasemem'] = 1; @ini_set('memory_limit','64M'); if(isset($_SESSION['hikaincreasemem'])) unset($_SESSION['hikaincreasemem']); } } } function &hikashop_config($reload = false){ static $configClass = null; if($configClass === null || $reload || !is_object($configClass) || $configClass->get('configClassInit',0) == 0){ $configClass = hikashop_get('class.config'); $configClass->load(); $configClass->set('configClassInit',1); } return $configClass; } function hikashop_level($level){ $config =& hikashop_config(); if($config->get($config->get('level'),0) >= $level) return true; return false; } function hikashop_footer(){ $config =& hikashop_config(); if($config->get('show_footer',true)=='-1') return ''; $description = $config->get('description_'.strtolower($config->get('level')),'Joomla!<sup style="font-size:6px">TM</sup> Ecommerce System'); $link = 'http://www.hikashop.com'; $aff = $config->get('partner_id'); if(!empty($aff)){ $link.='?partner_id='.$aff; } $text = '<!-- HikaShop Component powered by '.$link.' --> <!-- version '.$config->get('level').' : '.$config->get('version').' [1312231536] -->'; if(!$config->get('show_footer',true)) return $text; $text .= '<div class="hikashop_footer" style="text-align:center" align="center"><a href="'.$link.'" target="_blank" title="'.HIKASHOP_NAME.' : '.strip_tags($description).'">'.HIKASHOP_NAME.' '; $app= JFactory::getApplication(); if($app->isAdmin()){ $text .= $config->get('level').' '.$config->get('version'); } $text .= ', '.$description.'</a></div>'; return $text; } function hikashop_search($searchString,$object,$exclude=''){ if(empty($object) || is_numeric($object)) return $object; if(is_string($object)){ return preg_replace('#('.str_replace('#','\#',$searchString).')#i','<span class="searchtext">$1</span>',$object); } if(is_array($object)){ foreach($object as $key => $element){ $object[$key] = hikashop_search($searchString,$element,$exclude); } }elseif(is_object($object)){ foreach($object as $key => $element){ if((is_string($exclude) && $key != $exclude) || (is_array($exclude) && !in_array($key, $exclude))) $object->$key = hikashop_search($searchString,$element,$exclude); } } return $object; } function hikashop_get($path){ list($group,$class) = explode('.',$path); if($group=='controller'){ $className = $class.ucfirst($group);; }else{ $className = 'hikashop'.ucfirst($class).ucfirst($group); } if(class_exists($className.'Override')) $className .= 'Override'; if(!class_exists($className)) { $app = JFactory::getApplication(); $path = JPATH_THEMES.DS.$app->getTemplate().DS.'html'.DS.'com_hikashop'.DS.'administrator'.DS; $override = str_replace(HIKASHOP_BACK, $path, constant(strtoupper('HIKASHOP_'.$group))).$class.'.override.php'; if(JFile::exists($override)) { $originalFile = constant(strtoupper('HIKASHOP_'.$group)).$class.'.php'; include_once($override); $className .= 'Override'; } else { include_once(constant(strtoupper('HIKASHOP_'.$group)).$class.'.php'); } } if(!class_exists($className)) return null; $args = func_get_args(); array_shift($args); switch(count($args)){ 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]); case 0: default: return new $className(); } } function hikashop_getCID($field = '',$int=true){ $oneResult = JRequest::getVar( 'cid', array(), '', 'array' ); if(is_array($oneResult)) $oneResult = reset($oneResult); if(empty($oneResult) && !empty($field)) $oneResult=JRequest::getCmd( $field,0); if($int) return intval($oneResult); return $oneResult; } function hikashop_tooltip($desc, $title = '', $image = 'tooltip.png', $name = '',$href = '', $link = 1) { return JHTML::_('tooltip', str_replace(array("'", "::"), array("'", ":"), $desc), str_replace(array("'", '::'), array("'", ':'), $title), $image, str_replace(array("'", '"', '::'), array("'", """, ':'), $name), $href, $link); } function hikashop_checkRobots(){ if(preg_match('#(libwww-perl|python)#i',@$_SERVER['HTTP_USER_AGENT'])) die('Not allowed for robots. Please contact us if you are not a robot'); } function hikashop_loadJslib($name){ static $loadLibs = array(); $doc = JFactory::getDocument(); $name = strtolower($name); $ret = false; if(isset($loadLibs[$name])) return $loadLibs[$name]; switch($name) { case 'mootools': if(!HIKASHOP_J30) JHTML::_('behavior.mootools'); else JHTML::_('behavior.framework'); break; case 'jquery': $doc->addScript(HIKASHOP_JS.'jquery.min.js'); $doc->addScript(HIKASHOP_JS.'jquery-ui.min.js'); $ret = true; break; case 'otree': $doc->addScript(HIKASHOP_JS.'otree.js'); $doc->addStyleSheet(HIKASHOP_CSS.'otree.css'); $ret = true; break; case 'opload': $doc->addScript(HIKASHOP_JS.'opload.js'); $doc->addStyleSheet(HIKASHOP_CSS.'opload.css'); $ret = true; break; } $loadLibs[$name] = $ret; return $ret; } function hikashop_cleanURL($url, $forceInternURL=false){ $parsedURL = parse_url($url); $parsedCurrent = parse_url(JURI::base()); if($forceInternURL==false){ if(isset($parsedURL['scheme'])){ return $url; } } if(preg_match('#https?://#',$url)){ return $url; } if(preg_match('#www.#',$url)){ return $parsedCurrent['scheme'].'://'.$url; } if($parsedURL['path'][0]!='/'){ $parsedURL['path']='/'.$parsedURL['path']; } if(!isset($parsedURL['query'])) $endUrl = $parsedURL['path']; else $endUrl = $parsedURL['path'].'?'.$parsedURL['query']; $cleanUrl = $parsedCurrent['scheme'].'://'.$parsedCurrent['host'].$endUrl; return $cleanUrl; } function hikashop_orderStatus($order_status) { $order_upper = JString::strtoupper($order_status); $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; } function hikashop_getEscaped($text, $extra = false) { $db = JFactory::getDBO(); if(HIKASHOP_J30){ return $db->escape($text, $extra); }else{ return $db->getEscaped($text, $extra); } } if(!HIKASHOP_J30){ function hikashop_getFormToken() { return JUtility::getToken(); } } else { function hikashop_getFormToken() { return JSession::getFormToken(); } } if(!class_exists('hikashopBridgeController')){ if(!HIKASHOP_J30){ class hikashopBridgeController extends JController {} } else { class hikashopBridgeController extends JControllerLegacy {} } } class hikashopController extends hikashopBridgeController { var $pkey = array(); var $table = array(); var $groupMap = ''; var $groupVal = null; var $orderingMap =''; var $display = array('listing','show','cancel',''); var $modify_views = array('edit','selectlisting','childlisting','newchild'); var $add = array('add'); var $modify = array('apply','save','save2new','store','orderdown','orderup','saveorder','savechild','addchild','toggle'); var $delete = array('delete','remove'); var $publish_return_view='listing'; function __construct($config = array(),$skip=false){ if(!$skip){ parent::__construct($config); $this->registerDefaultTask('listing'); } } function listing(){ JRequest::setVar( 'layout', 'listing' ); return $this->display(); } function show(){ JRequest::setVar( 'layout', 'show' ); return $this->display(); } function edit(){ JRequest::setVar('hidemainmenu',1); JRequest::setVar( 'layout', 'form' ); return $this->display(); } function add(){ JRequest::setVar('hidemainmenu',1); JRequest::setVar( 'layout', 'form' ); return $this->display(); } function apply(){ $status = $this->store(); return $this->edit(); } function save(){ $this->store(); return $this->listing(); } function save2new(){ $this->store(true); return $this->edit(); } function orderdown(){ if(!empty($this->table)&&!empty($this->pkey)&&(empty($this->groupMap)||isset($this->groupVal))&&!empty($this->orderingMap)){ $orderClass = hikashop_get('helper.order'); $orderClass->pkey = $this->pkey; $orderClass->table = $this->table; $orderClass->groupMap = $this->groupMap; $orderClass->groupVal = $this->groupVal; $orderClass->orderingMap = $this->orderingMap; if(!empty($this->main_pkey)){ $orderClass->main_pkey = $this->main_pkey; } $orderClass->order(true); } return $this->listing(); } function orderup(){ if(!empty($this->table)&&!empty($this->pkey)&&(empty($this->groupMap)||isset($this->groupVal))&&!empty($this->orderingMap)){ $orderClass = hikashop_get('helper.order'); $orderClass->pkey = $this->pkey; $orderClass->table = $this->table; $orderClass->groupMap = $this->groupMap; $orderClass->groupVal = $this->groupVal; $orderClass->orderingMap = $this->orderingMap; if(!empty($this->main_pkey)){ $orderClass->main_pkey = $this->main_pkey; } $orderClass->order(false); } return $this->listing(); } function saveorder(){ if(!empty($this->table)&&!empty($this->pkey)&&(empty($this->groupMap)||isset($this->groupVal))&&!empty($this->orderingMap)){ $orderClass = hikashop_get('helper.order'); $orderClass->pkey = $this->pkey; $orderClass->table = $this->table; $orderClass->groupMap = $this->groupMap; $orderClass->groupVal = $this->groupVal; $orderClass->orderingMap = $this->orderingMap; if(!empty($this->main_pkey)){ $orderClass->main_pkey = $this->main_pkey; } $orderClass->save(); } return $this->listing(); } function store($new=false){ if(!HIKASHOP_PHP5) { $app =& JFactory::getApplication(); } else { $app = JFactory::getApplication(); } $class = hikashop_get('class.'.$this->type); $status = $class->saveForm(); if($status) { if(!HIKASHOP_J30) $app->enqueueMessage(JText::_( 'HIKASHOP_SUCC_SAVED' ), 'success'); else $app->enqueueMessage(JText::_( 'HIKASHOP_SUCC_SAVED' )); if(!$new) JRequest::setVar( 'cid', $status ); else JRequest::setVar( 'cid', 0 ); JRequest::setVar( 'fail', null ); } else { $app->enqueueMessage(JText::_( 'ERROR_SAVING' ), 'error'); if(!empty($class->errors)){ foreach($class->errors as $oneError){ $app->enqueueMessage($oneError, 'error'); } } } return $status; } function remove(){ $cids = JRequest::getVar( 'cid', array(), '', 'array' ); $class = hikashop_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(); } function publish(){ $cid = JRequest::getVar( 'cid', array(), 'post', 'array' ); JArrayHelper::toInteger($cid); return $this->_toggle($cid,1); } function unpublish(){ $cid = JRequest::getVar( 'cid', array(), 'post', 'array' ); JArrayHelper::toInteger($cid); return $this->_toggle($cid,0); } function _toggle($cid, $publish){ if (empty( $cid )) { JError::raiseWarning( 500, 'No items selected' ); } if(in_array($this->type,array('product','category'))){ JPluginHelper::importPlugin( 'hikashop' ); $dispatcher = JDispatcher::getInstance(); $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; $dispatcher->trigger( '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 '.hikashop_table($this->type) . ' SET '.key($this->toggle).' = ' . (int)$publish . ' WHERE '.reset($this->toggle).' IN ( '.$cids.' )'; $db->setQuery( $query ); if (!$db->query()) { JError::raiseWarning( 500, $db->getErrorMsg() ); }elseif(in_array($this->type,array('product','category'))){ if(!empty($objs)){ foreach($objs as $element){ $dispatcher->trigger( 'onAfter'.ucfirst($this->type).'Update', array( & $element ) ); } } } $task = $this->publish_return_view; return $this->$task(); } function getModel($name = '', $prefix = '', $config = array(),$do=false) { if($do) return parent::getModel($name, $prefix , $config); return false; } function authorise($task){ return $this->authorize($task); } function authorize($task){ if(!$this->isIn($task,array('modify_views','add','modify','delete','display'))){ return false; } if($this->isIn($task,array('modify','delete')) && !JRequest::checkToken('request')){ return false; } $app = JFactory::getApplication(); $name = $this->getName(); if(!empty($name) && $app->isAdmin()){ if(hikashop_level(2)){ $config =& hikashop_config(); if($this->isIn($task,array('display'))){ $task = 'view'; }elseif($this->isIn($task,array('modify_views','add','modify'))){ $task = 'manage'; }elseif($this->isIn($task,array('delete'))){ $task = 'delete'; }else{ return true; } if(!hikashop_isAllowed($config->get('acl_'.$name.'_'.$task,'all'))){ hikashop_display(JText::_('RESSOURCE_NOT_ALLOWED'),'error'); return false; } } } return true; } function isIn($task,$lists){ foreach($lists as $list){ if(in_array($task,$this->$list)){ return true; } } return false; } function execute($task){ if(substr($task,0,12)=='triggerplug-'){ JPluginHelper::importPlugin( 'hikashop' ); $dispatcher =& JDispatcher::getInstance(); $parts = explode('-',$task,2); $event = 'onTriggerPlug'.array_pop($parts); $dispatcher->trigger( $event, array( ) ); return true; } if(HIKASHOP_J30){ if(!$this->authorize($task)){ return JError::raiseError(403, JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')); } } return parent::execute($task); } function display($cachable = false, $urlparams = false){ $config =& hikashop_config(); $menu_style = $config->get('menu_style','title_bottom'); if($menu_style=='content_top'){ $app = JFactory::getApplication(); if($app->isAdmin() && JRequest::getString('tmpl') !== 'component'){ echo hikashop_getMenu('',$menu_style); } } return parent::display(); } function getUploadSetting($upload_key, $caller = '') { return false; } function manageUpload($upload_key, &$ret, $uploadConfig, $caller = '') { } } class hikashopClass extends JObject{ var $tables = array(); var $pkeys = array(); var $namekeys = array(); function __construct( $config = array() ){ $this->database = JFactory::getDBO(); return parent::__construct($config); } function save(&$element){ $pkey = end($this->pkeys); if(empty($pkey)){ $pkey = end($this->namekeys); }elseif(empty($element->$pkey)){ $tmp = end($this->namekeys); if(!empty($tmp)){ if(!empty($element->$tmp)){ $pkey = $tmp; }else{ $element->$tmp=$this->getNamekey($element); if($element->$tmp===false){ return false; } } } } if(!HIKASHOP_J16){ $obj = new JTable($this->getTable(),$pkey,$this->database); $obj->setProperties($element); }else{ $obj =& $element; } if(empty($element->$pkey)){ $query = $this->_getInsert($this->getTable(),$obj); $this->database->setQuery($query); $status = $this->database->query(); }else{ if(count((array) $element) > 1){ $status = $this->database->updateObject($this->getTable(),$obj,$pkey); }else{ $status = true; } } if($status){ return empty($element->$pkey) ? $this->database->insertid() : $element->$pkey; } return false; } function getTable(){ return hikashop_table(end($this->tables)); } function _getInsert( $table, &$object, $keyName = NULL ) { if(!HIKASHOP_J30){ $fmtsql = 'INSERT IGNORE INTO '.$this->database->nameQuote($table).' ( %s ) VALUES ( %s ) '; } else { $fmtsql = 'INSERT IGNORE INTO '.$this->database->quoteName($table).' ( %s ) VALUES ( %s ) '; } $fields = array(); foreach (get_object_vars( $object ) as $k => $v) { if (is_array($v) or is_object($v) or $v === NULL or $k[0] == '_') { continue; } if(!HIKASHOP_J30){ $fields[] = $this->database->nameQuote( $k ); $values[] = $this->database->isQuoted( $k ) ? $this->database->Quote( $v ) : (int) $v; } else { $fields[] = $this->database->quoteName( $k ); $values[] = $this->database->Quote( $v ); } } return sprintf( $fmtsql, implode( ",", $fields ) , implode( ",", $values ) ); } function delete(&$elementsToDelete){ if(!is_array($elementsToDelete)){ $elements = array($elementsToDelete); }else{ $elements = $elementsToDelete; } $isNumeric = is_numeric(reset($elements)); $strings = array(); foreach($elements as $key => $val){ $strings[$key] = $this->database->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 '.$this->getTable().' WHERE '.($isNumeric?end($this->pkeys):end($this->namekeys)).' IN ( '.implode(',',$strings).');'; $this->database->setQuery($query); if(!HIKASHOP_J25){ $otherElements = $this->database->loadResultArray(); } else { $otherElements = $this->database->loadColumn(); } foreach($otherElements as $key => $val){ $otherElements[$key] = $this->database->Quote($val); } break; } } $result = true; $tables=array(); if(empty($this->tables)){ $tables[0]=$this->getTable(); }else{ foreach($this->tables as $i => $oneTable){ $tables[$i]=hikashop_table($oneTable); } } 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(',',$strings).')'; } $query = 'DELETE FROM '.$oneTable.$whereIn; $this->database->setQuery($query); $result = $this->database->query() && $result; } return $result; } function get($element,$default=null){ if(empty($element)) return null; $pkey = end($this->pkeys); $namekey = end($this->namekeys); if(!is_numeric($element) && !empty($namekey)) { $pkey = $namekey; } $query = 'SELECT * FROM '.$this->getTable().' WHERE '.$pkey.' = '.$this->database->Quote($element).' LIMIT 1'; $this->database->setQuery($query); return $this->database->loadObject(); } } if(!class_exists('hikashopBridgeView')){ if(!HIKASHOP_J30){ class hikashopBridgeView extends JView {} } else { class hikashopBridgeView extends JViewLegacy {} } } class hikashopView extends hikashopBridgeView { var $triggerView = false; var $toolbar = array(); var $direction = 'ltr'; function display($tpl = null) { $lang = JFactory::getLanguage(); if($lang->isRTL()) $this->direction = 'rtl'; if($this->triggerView) { JPluginHelper::importPlugin('hikashop'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onHikashopBeforeDisplayView', array(&$this)); } if(!empty($this->toolbar)) { $toolbarHelper = hikashop_get('helper.toolbar'); $toolbarHelper->process($this->toolbar); } parent::display($tpl); if($this->triggerView) { $dispatcher->trigger('onHikashopAfterDisplayView', array( &$this)); } } function &getPageInfo($default = '', $dir = 'asc') { $app = JFactory::getApplication(); $pageInfo = new stdClass(); $pageInfo->search = $app->getUserStateFromRequest($this->paramBase.'.search', 'search', '', 'string'); $pageInfo->filter = new stdClass(); $pageInfo->filter->order = new stdClass(); $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(JRequest::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 = JString::strtolower($app->getUserStateFromRequest($this->paramBase.'.search', 'search', '', 'string')); $pageInfo->elements = new stdClass(); $this->assignRef('pageInfo', $pageInfo); return $pageInfo; } function getPageInfoTotal($query, $countValue = '*') { if(empty($this->pageInfo)) return false; $db = JFactory::getDBO(); $app = JFactory::getApplication(); $db->setQuery('SELECT COUNT('.$countValue.') '.$query); $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); } } function processFilters(&$filters, &$order, $searchMap = array(), $orderingAccept = array()) { if(!empty($this->pageInfo->search)) { $db = JFactory::getDBO(); if(!HIKASHOP_J30) { $searchVal = '\'%' . $db->getEscaped(JString::strtolower($this->pageInfo->search), true) . '%\''; } else { $searchVal = '\'%' . $db->escape(JString::strtolower($this->pageInfo->search), true) . '%\''; } $filters[] = '('.implode(' LIKE '.$searchVal.' OR ',$searchMap).' LIKE '.$searchVal.')'; } if(!empty($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); if(empty($orderingAccept) || in_array($t.'.', $orderingAccept) || in_array($this->pageInfo->filter->order->value, $orderingAccept)) $order = ' ORDER BY '.$this->pageInfo->filter->order->value.' '.$this->pageInfo->filter->order->dir; } } function getPagination($max = 500, $limit = 100) { if(empty($this->pageInfo)) return false; jimport('joomla.html.pagination'); if($this->pageInfo->limit->value == $max) $this->pageInfo->limit->value = $limit; $pagination = new JPagination($this->pageInfo->elements->total, $this->pageInfo->limit->start, $this->pageInfo->limit->value); $this->assignRef('pagination', $pagination); return $pagination; } 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; } } class hikashopPlugin extends JPlugin { var $db; var $type = 'plugin'; var $multiple = false; var $plugin_params = null; var $toolbar = array(); function __construct(&$subject, $config) { $this->db = JFactory::getDBO(); parent::__construct($subject, $config); } function pluginParams($id = 0) { $this->plugin_params = null; $this->plugin_data = null; if(!empty($this->name) && in_array($this->type, array('payment', 'shipping', 'plugin'))) { $query = 'SELECT * FROM '.hikashop_table($this->type).' WHERE '.$this->type.'_type = '.$this->db->Quote($this->name); if($id > 0) { $query .= ' AND '.$this->type.'_id = ' . (int)$id; } $this->db->setQuery($query); $this->db->query(); $data = $this->db->loadObject(); if(!empty($data)) { $params = $this->type.'_params'; $this->plugin_params = unserialize($data->$params); $this->plugin_data = $data; unset($this->plugin_data->$params); return true; } } return false; } function isMultiple() { return $this->multiple; } function configurationHead() { return array(); } function configurationLine($id = 0) { return null; } function listPlugins($name, &$values, $full = true){ if(in_array($this->type, array('payment', 'shipping','plugin'))) { if($this->multiple) { $query = 'SELECT '.$this->type.'_id as id, '.$this->type.'_name as name FROM '.hikashop_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; }; } } function pluginConfiguration(&$elements) { $app = JFactory::getApplication(); $this->plugins =& $elements; $this->pluginName = JRequest::getCmd('name', $this->type); $this->pluginView = ''; $plugin_id = JRequest::getInt('plugin_id',0); if($plugin_id == 0) { $plugin_id = JRequest::getInt($this->type.'_id', 0); } $this->toolbar = array( 'save', 'apply', 'cancel' => array('name' => 'link', 'icon' => 'cancel', 'alt' => JText::_('HIKA_CANCEL'), 'url' => hikashop_completeLink('plugins')), ); if(!empty($this->doc_form)) { $this->toolbar[] = '|'; $this->toolbar[] = array('name' => 'pophelp', 'target' => $this->type.'-'.$this->doc_form.'-form'); } if(empty($this->title)) { $this->title = JText::_('HIKASHOP_PLUGIN_METHOD'); } if($plugin_id == 0) { hikashop_setTitle($this->title, 'plugin', 'plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName.'&subtask=edit'); } else { hikashop_setTitle($this->title, 'plugin', 'plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName.'&subtask='.$this->type.'_edit&'.$this->type.'_id='.$plugin_id); } } function pluginMultipleConfiguration(&$elements) { if(!$this->multiple) return; $app = JFactory::getApplication(); $this->plugins =& $elements; $this->pluginName = JRequest::getCmd('name', $this->type); $this->pluginView = 'sublisting'; $this->subtask = JRequest::getCmd('subtask',''); $this->task = JRequest::getVar('task'); if(empty($this->title)) { $this->title = JText::_('HIKASHOP_PLUGIN_METHOD'); } if($this->subtask == 'copy') { if(!in_array($this->task, array('orderup', 'orderdown', 'saveorder'))) { $pluginIds = JRequest::getVar('cid', array(), '', 'array'); JArrayHelper::toInteger($pluginIds); $result = true; if(!empty($pluginIds) && in_array($this->type, array('payment','shipping'))) { $this->db->setQuery('SELECT * FROM '.hikashop_table($this->type).' WHERE '.$this->type.'_id IN ('.implode(',',$pluginIds).')'); $plugins = $this->db->loadObjectList(); $helper = hikashop_get('class.'.$this->type); $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(hikashop_completeLink('plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName, false, true)); } } } $this->toolbar = array( array('name' => 'link', 'icon'=>'new','alt' => JText::_('HIKA_NEW'), 'url' => hikashop_completeLink('plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName.'&subtask=edit')), 'cancel', '|', array('name' => 'pophelp', 'target' => 'plugins-'.$this->doc_listing.'sublisting') ); hikashop_setTitle($this->title, 'plugin', 'plugins&plugin_type='.$this->type.'&task=edit&name='.$this->pluginName); $this->toggleClass = hikashop_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(HIKASHOP_COMPONENT.'.plugin_type.'.$this->type, $this->pluginName); } } class hikashopPaymentPlugin extends hikashopPlugin { var $type = 'payment'; var $accepted_currencies = array(); var $doc_form = 'generic'; function onPaymentDisplay(&$order, &$methods, &$usable_methods) { if(empty($methods) || empty($this->name)) return true; if(!empty($order->total)) { $currencyClass = hikashop_get('class.currency'); $null = null; $currency_id = intval(@$order->total->prices[0]->price_currency_id); $currency = $currencyClass->getCurrencies($currency_id, $null); if(!empty($currency) && !empty($this->accepted_currencies) && !in_array(@$currency[$currency_id]->currency_code, $this->accepted_currencies)) return true; $this->currency = $currency; $this->currency_id = $currency_id; } $currencyClass = hikashop_get('class.currency'); $this->currencyClass = $currencyClass; $shippingClass = hikashop_get('class.shipping'); $volumeHelper = hikashop_get('helper.volume'); $weightHelper = hikashop_get('helper.weight'); foreach($methods as $method) { if($method->payment_type != $this->name || !$method->enabled || !$method->payment_published) continue; if(method_exists($this, 'needCC')) { $this->needCC($method); } else if(!empty($this->ask_cc)) { $method->ask_cc = true; if(!empty($this->ask_owner)) $method->ask_owner = true; if(!empty($method->payment_params->ask_ccv)) $method->ask_ccv = true; } if(@$method->payment_params->payment_price_use_tax) { if(isset($order->total->prices[0]->price_value_with_tax)) $price = $order->total->prices[0]->price_value_with_tax; if(isset($order->full_total->prices[0]->price_value_with_tax)) $price = $order->full_total->prices[0]->price_value_with_tax; } else { if(isset($order->order_full_price)) $price = $order->order_full_price; if(isset($order->total->prices[0]->price_value)) $price = $order->total->prices[0]->price_value; if(isset($order->full_total->prices[0]->price_value)) $price =$order->full_total->prices[0]->price_value; } if(!empty($method->payment_params->payment_min_price) && hikashop_toFloat($method->payment_params->payment_min_price) > $price) { $method->errors['min_price'] = (hikashop_toFloat($method->payment_params->payment_min_price) - $price); continue; } if(!empty($method->payment_params->payment_max_price) && hikashop_toFloat($method->payment_params->payment_max_price) < $price){ $method->errors['max_price'] = ($price - hikashop_toFloat($method->payment_params->payment_max_price)); continue; } if(!empty($method->payment_params->payment_max_volume) && bccomp((float)@$method->payment_params->payment_max_volume, 0, 3)) { $method->payment_params->payment_max_volume_orig = $method->payment_params->payment_max_volume; $method->payment_params->payment_max_volume = $volumeHelper->convert($method->payment_params->payment_max_volume, @$method->payment_params->payment_size_unit); if($method->payment_params->payment_max_volume < $order->volume){ $method->errors['max_volume'] = ($method->payment_params->payment_max_volume - $order->volume); continue; } } if(!empty($method->payment_params->payment_min_volume) && bccomp((float)@$method->payment_params->payment_min_volume, 0, 3)) { $method->payment_params->payment_min_volume_orig = $method->payment_params->payment_min_volume; $method->payment_params->payment_min_volume = $volumeHelper->convert($method->payment_params->payment_min_volume, @$method->payment_params->payment_size_unit); if($method->payment_params->payment_min_volume > $order->volume){ $method->errors['min_volume'] = ($order->volume - $method->payment_params->payment_min_volume); continue; } } if(!empty($method->payment_params->payment_max_weight) && bccomp((float)@$method->payment_params->payment_max_weight, 0, 3)) { $method->payment_params->payment_max_weight_orig = $method->payment_params->payment_max_weight; $method->payment_params->payment_max_weight = $weightHelper->convert($method->payment_params->payment_max_weight, @$method->payment_params->payment_weight_unit); if($method->payment_params->payment_max_weight < $order->weight){ $method->errors['max_weight'] = ($method->payment_params->payment_max_weight - $order->weight); continue; } } if(!empty($method->payment_params->payment_min_weight) && bccomp((float)@$method->payment_params->payment_min_weight,0,3)){ $method->payment_params->payment_min_weight_orig = $method->payment_params->payment_min_weight; $method->payment_params->payment_min_weight = $weightHelper->convert($method->payment_params->payment_min_weight, @$method->payment_params->payment_weight_unit); if($method->payment_params->payment_min_weight > $order->weight){ $method->errors['min_weight'] = ($order->weight - $method->payment_params->payment_min_weight); continue; } } if(!empty($method->payment_params->payment_max_quantity) && (int)$method->payment_params->payment_max_quantity) { if($method->payment_params->payment_max_quantity < $order->total_quantity){ $method->errors['max_quantity'] = ($method->payment_params->payment_max_quantity - $order->total_quantity); continue; } } if(!empty($method->payment_params->payment_min_quantity) && (int)$method->payment_params->payment_min_quantity){ if($method->payment_params->payment_min_quantity > $order->total_quantity){ $method->errors['min_quantity'] = ($order->total_quantity - $method->payment_params->payment_min_quantity); continue; } } if(!$this->checkPaymentDisplay($method, $order)) continue; if((int)$method->payment_ordering > 0 && !isset($usable_methods[(int)$method->payment_ordering])) $usable_methods[(int)$method->payment_ordering] = $method; else $usable_methods[] = $method; } return true; } function onPaymentSave(&$cart, &$rates, &$payment_id) { $usable = array(); $this->onPaymentDisplay($cart, $rates, $usable); $payment_id = (int)$payment_id; foreach($usable as $usable_method) { if($usable_method->payment_id == $payment_id) return $usable_method; } return false; } function onPaymentConfiguration(&$element) { $this->pluginConfiguration($element); if(empty($element) || empty($element->payment_type)) { $element = new stdClass(); $element->payment_type = $this->pluginName; $element->payment_params= new stdClass(); $this->getPaymentDefaultValues($element); } $this->order_statuses = hikashop_get('type.categorysub'); $this->order_statuses->type = 'status'; $this->currency = hikashop_get('type.currency'); $this->weight = hikashop_get('type.weight'); $this->volume = hikashop_get('type.volume'); } function onPaymentConfigurationSave(&$element) { if(!empty($this->pluginConfig)) { $formData = JRequest::getVar('data', array(), '', 'array', JREQUEST_ALLOWRAW); if(isset($formData['payment']['payment_params'])) { foreach($this->pluginConfig as $key => $config) { if($config[1] == 'textarea' || $config[1] == 'big-textarea') { $element->payment_params->$key = @$formData['payment']['payment_params'][$key]; } } } } return true; } function onBeforeOrderCreate(&$order, &$do) { $app = JFactory::getApplication(); if($app->isAdmin()) return true; if(empty($order->order_payment_method) || $order->order_payment_method != $this->name) return true; $this->loadOrderData($order); $this->loadPaymentParams($order); if(empty($this->payment_params)) { $do = false; return true; } } function onAfterOrderConfirm(&$order, &$methods, $method_id) { $method = $methods[$method_id]; $this->payment_params =& $method->payment_params; $this->payment_name = $method->payment_name; $this->loadOrderData($order); } function onPaymentNotification(&$statuses) { } function getOrder($order_id) { $ret = null; if(empty($order_id)) return $ret; $orderClass = hikashop_get('class.order'); $ret = $orderClass->get($order_id); return $ret; } function modifyOrder(&$order_id, $order_status, $history = null, $email = null) { if(is_object($order_id)) { $order =& $order_id; } else { $order = new stdClass(); $order->order_id = $order_id; } if($order_status !== null) $order->order_status = $order_status; $history_notified = 0; $history_amount = ''; $history_data = ''; $history_type = ''; if(!empty($history)) { if($history === true) { $history_notified = 1; } else if(is_array($history)) { $history_notified = (int)@$history['notified']; $history_amount = @$history['amount']; $history_data = @$history['data']; $history_type = @$history['type']; } else { $history_notified = (int)@$history->notified; $history_amount = @$history->amount; $history_data = @$history->data; $history_type = @$history->type; } } $order->history = new stdClass(); $order->history->history_reason = JText::sprintf('AUTOMATIC_PAYMENT_NOTIFICATION'); $order->history->history_notified = $history_notified; $order->history->history_payment_method = $this->name; $order->history->history_type = 'payment'; if(!empty($history_amount)) $order->history->history_amount = $history_amount; if(!empty($history_data)) $order->history->history_data = $history_data; if(!empty($history_type)) $order->history->history_type = $history_type; if(!is_object($order_id) && $order_id !== false) { $orderClass = hikashop_get('class.order'); $orderClass->save($order); } if(empty($email)) return; $mailer = JFactory::getMailer(); $config =& hikashop_config(); $sender = array( $config->get('from_email'), $config->get('from_name') ); $mailer->setSender($sender); $mailer->addRecipient(explode(',', $config->get('payment_notification_email'))); $payment_status = $order_status; $mail_status = hikashop_orderStatus($order_status); $order_number = ''; global $Itemid; $this->url_itemid = empty($Itemid) ? '' : '&Itemid=' . $Itemid; if(is_object($order_id)) { $subject = JText::sprintf('PAYMENT_NOTIFICATION', $this->name, $payment_status); $url = HIKASHOP_LIVE.'administrator/index.php?option=com_hikashop&ctrl=order&task=listing'. $this->url_itemid; } elseif($order_id !== false) { $dbOrder = $orderClass->get($order_id); $order_number = $dbOrder->order_number; $subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', $this->name, $payment_status, $order_number); $url = HIKASHOP_LIVE.'administrator/index.php?option=com_hikashop&ctrl=order&task=edit&order_id=' . $order_id . $this->url_itemid; } $order_text = ''; if(is_string($email)) $order_text = "\r\n\r\n" . $email; $body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', $this->name, $payment_status)) . ' ' . JText::sprintf('ORDER_STATUS_CHANGED', $mail_status) . "\r\n".JText::sprintf('NOTIFICATION_OF_ORDER_ON_WEBSITE', $order_number, HIKASHOP_LIVE). "\r\n".str_replace('<br/>', "\r\n", JText::sprintf('ACCESS_ORDER_WITH_LINK', $url)) . $order_text; if(is_object($email)) { if(!empty($email->subject)) $subject = $email->subject; if(!empty($email->body)) $body = $email->body; } $mailer->setSubject($subject); $mailer->setBody($body); $mailer->Send(); } function loadOrderData(&$order) { $this->app = JFactory::getApplication(); $lang = JFactory::getLanguage(); $currencyClass = hikashop_get('class.currency'); $cartClass = hikashop_get('class.cart'); $this->currency = 0; if(!empty($order->order_currency_id)) { $currencies = null; $currencies = $currencyClass->getCurrencies($order->order_currency_id, $currencies); $this->currency = $currencies[$order->order_currency_id]; } hikashop_loadUser(true, true); $this->user = hikashop_loadUser(true); $this->locale = strtolower(substr($lang->get('tag'), 0, 2)); global $Itemid; $this->url_itemid = empty($Itemid) ? '' : '&Itemid=' . $Itemid; $billing_address = $this->app->getUserState(HIKASHOP_COMPONENT.'.billing_address'); if(!empty($billing_address)) $cartClass->loadAddress($order->cart, $billing_address, 'object', 'billing'); $shipping_address = $this->app->getUserState(HIKASHOP_COMPONENT.'.shipping_address'); if(!empty($shipping_address)) $cartClass->loadAddress($order->cart, $shipping_address, 'object', 'shipping'); } function loadPaymentParams(&$order) { $payment_id = @$order->order_payment_id; $this->payment_params = null; if(!empty($order->order_payment_method) && $order->order_payment_method == $this->name && !empty($payment_id) && $this->pluginParams($payment_id)) $this->payment_params =& $this->plugin_params; } function ccLoad($ccv = true) { if(!isset($this->app)) $this->app = JFactory::getApplication(); $this->cc_number = $this->app->getUserState(HIKASHOP_COMPONENT.'.cc_number'); if(!empty($this->cc_number)) $this->cc_number = base64_decode($this->cc_number); $this->cc_month = $this->app->getUserState(HIKASHOP_COMPONENT.'.cc_month'); if(!empty($this->cc_month)) $this->cc_month = base64_decode($this->cc_month); $this->cc_year = $this->app->getUserState(HIKASHOP_COMPONENT.'.cc_year'); if(!empty($this->cc_year)) $this->cc_year = base64_decode($this->cc_year); $this->cc_type = $this->app->getUserState( HIKASHOP_COMPONENT.'.cc_type'); if(!empty($this->cc_type)){ $this->cc_type = base64_decode($this->cc_type); } $this->cc_owner = $this->app->getUserState( HIKASHOP_COMPONENT.'.cc_owner'); if(!empty($this->cc_owner)){ $this->cc_owner = base64_decode($this->cc_owner); } $this->cc_CCV = ''; if($ccv) { $this->cc_CCV = $this->app->getUserState(HIKASHOP_COMPONENT.'.cc_CCV'); if(!empty($this->cc_CCV)) $this->cc_CCV = base64_decode($this->cc_CCV); } } function ccClear() { if(!isset($this->app)) $this->app = JFactory::getApplication(); $this->app->setUserState(HIKASHOP_COMPONENT.'.cc_number', ''); $this->app->setUserState(HIKASHOP_COMPONENT.'.cc_month', ''); $this->app->setUserState(HIKASHOP_COMPONENT.'.cc_year', ''); $this->app->setUserState(HIKASHOP_COMPONENT.'.cc_type', ''); $this->app->setUserState(HIKASHOP_COMPONENT.'.cc_owner', ''); $this->app->setUserState(HIKASHOP_COMPONENT.'.cc_CCV', ''); $this->app->setUserState(HIKASHOP_COMPONENT.'.cc_valid', 0); } function showPage($name = 'thanks') { if(!HIKASHOP_J30) JHTML::_('behavior.mootools'); else JHTML::_('behavior.framework'); $app = JFactory::getApplication(); $path = JPATH_THEMES.DS.$app->getTemplate().DS.'hikashoppayment'.DS.$this->name.'_'.$name.'.php'; if(!file_exists($path)) { if(version_compare(JVERSION,'1.6','<')) $path = JPATH_PLUGINS .DS.'hikashoppayment'.DS.$this->name.'_'.$name.'.php'; else $path = JPATH_PLUGINS .DS.'hikashoppayment'.DS.$this->name.DS.$this->name.'_'.$name.'.php'; } if(!file_exists($path)) { } if(!file_exists($path)) return false; require($path); return true; } function writeToLog($data) { if($data === null) { $dbg = ob_get_clean(); } else { $dbg = $data; } if(!empty($dbg)) { $dbg = '-- ' . date('m.d.y H:i:s') . ' --' . "\r\n" . $dbg; $config =& hikashop::config(); jimport('joomla.filesystem.file'); $file = $config->get('payment_log_file', ''); $file = rtrim(JPath::clean(html_entity_decode($file)), DS . ' '); if(!preg_match('#^([A-Z]:)?/.*#',$file)){ if(!$file[0] == '/' || !file_exists($file)) { $file = JPath::clean(HIKASHOP_ROOT . DS . trim($file, DS . ' ')); } } if(!empty($file) && defined('FILE_APPEND')) { if(!file_exists(dirname($file))) { jimport('joomla.filesystem.folder'); JFolder::create(dirname($file)); } file_put_contents($file, $dbg, FILE_APPEND); } } if($data === null) { ob_start(); } } function getPaymentDefaultValues(&$element){} function checkPaymentDisplay(&$method, &$order) { return true; } } class hikashopShippingPlugin extends hikashopPlugin { var $type = 'shipping'; function onShippingDisplay(&$order, &$dbrates, &$usable_rates, &$messages) { $config =& hikashop_config(); if(!$config->get('force_shipping') && bccomp(@$order->weight, 0, 5) <= 0) return false; if(empty($dbrates) || empty($this->name)) return false; $rates = array(); foreach($dbrates as $k => $rate) { if($rate->shipping_type == $this->name && !empty($rate->shipping_published)) { $rates[] = $rate; } } if(empty($rates)) return false; $currencyClass = hikashop_get('class.currency'); $shippingClass = hikashop_get('class.shipping'); $volumeHelper = hikashop_get('helper.volume'); $weightHelper = hikashop_get('helper.weight'); foreach($rates as &$rate) { $rate->shippingkey = $shippingClass->getShippingProductsData($order, $order->products); $shipping_prices = $order->shipping_prices[$rate->shippingkey]; if(!isset($rate->shipping_params->shipping_price_use_tax)) $rate->shipping_params->shipping_price_use_tax = 1; if(!isset($rate->shipping_params->shipping_virtual_included) || $rate->shipping_params->shipping_virtual_included) { if($rate->shipping_params->shipping_price_use_tax) $price = $shipping_prices->all_with_tax; else $price = $shipping_prices->all_without_tax; } else { if($rate->shipping_params->shipping_price_use_tax) $price = $shipping_prices->real_with_tax; else $price = $shipping_prices->real_without_tax; } if(bccomp($price, 0, 5) && isset($rate->shipping_params->shipping_percentage) && bccomp($rate->shipping_params->shipping_percentage, 0, 3)) $rate->shipping_price = round($rate->shipping_price + $price * $rate->shipping_params->shipping_percentage / 100, $currencyClass->getRounding($rate->shipping_currency_id)); if(!empty($rate->shipping_params->shipping_min_price) && hikashop_toFloat($rate->shipping_params->shipping_min_price) > $price) $rate->errors['min_price'] = (hikashop_toFloat($rate->shipping_params->shipping_min_price) - $price); if(!empty($rate->shipping_params->shipping_max_price) && hikashop_toFloat($rate->shipping_params->shipping_max_price) < $price) $rate->errors['max_price'] = ($price - hikashop_toFloat($rate->shipping_params->shipping_max_price)); if(!empty($rate->shipping_params->shipping_max_volume) && bccomp((float)@$rate->shipping_params->shipping_max_volume, 0, 3)) { $rate->shipping_params->shipping_max_volume_orig = $rate->shipping_params->shipping_max_volume; $rate->shipping_params->shipping_max_volume = $volumeHelper->convert($rate->shipping_params->shipping_max_volume, @$rate->shipping_params->shipping_size_unit); if($rate->shipping_params->shipping_max_volume < $shipping_prices->volume) $rate->errors['max_volume'] = ($rate->shipping_params->shipping_max_volume - $shipping_prices->volume); } if(!empty($rate->shipping_params->shipping_min_volume) && bccomp((float)@$rate->shipping_params->shipping_min_volume, 0, 3)) { $rate->shipping_params->shipping_min_volume_orig = $rate->shipping_params->shipping_min_volume; $rate->shipping_params->shipping_min_volume = $volumeHelper->convert($rate->shipping_params->shipping_min_volume, @$rate->shipping_params->shipping_size_unit); if($rate->shipping_params->shipping_min_volume > $shipping_prices->volume) $rate->errors['min_volume'] = ($shipping_prices->volume - $rate->shipping_params->shipping_min_volume); } if(!empty($rate->shipping_params->shipping_max_weight) && bccomp((float)@$rate->shipping_params->shipping_max_weight, 0, 3)) { $rate->shipping_params->shipping_max_weight_orig = $rate->shipping_params->shipping_max_weight; $rate->shipping_params->shipping_max_weight = $weightHelper->convert($rate->shipping_params->shipping_max_weight, @$rate->shipping_params->shipping_weight_unit); if($rate->shipping_params->shipping_max_weight < $shipping_prices->weight) $rate->errors['max_weight'] = ($rate->shipping_params->shipping_max_weight - $shipping_prices->weight); } if(!empty($rate->shipping_params->shipping_min_weight) && bccomp((float)@$rate->shipping_params->shipping_min_weight,0,3)){ $rate->shipping_params->shipping_min_weight_orig = $rate->shipping_params->shipping_min_weight; $rate->shipping_params->shipping_min_weight = $weightHelper->convert($rate->shipping_params->shipping_min_weight, @$rate->shipping_params->shipping_weight_unit); if($rate->shipping_params->shipping_min_weight > $shipping_prices->weight) $rate->errors['min_weight'] = ($shipping_prices->weight - $rate->shipping_params->shipping_min_weight); } if(!empty($rate->shipping_params->shipping_max_quantity) && (int)$rate->shipping_params->shipping_max_quantity) { if($rate->shipping_params->shipping_max_quantity < $shipping_prices->total_quantity) $rate->errors['max_quantity'] = ($rate->shipping_params->shipping_max_quantity - $shipping_prices->total_quantity); } if(!empty($rate->shipping_params->shipping_min_quantity) && (int)$rate->shipping_params->shipping_min_quantity){ if($rate->shipping_params->shipping_min_quantity > $shipping_prices->total_quantity) $rate->errors['min_quantity'] = ($shipping_prices->total_quantity - $rate->shipping_params->shipping_min_quantity); } if(isset($rate->shipping_params->shipping_per_product) && $rate->shipping_params->shipping_per_product) { if(!isset($order->shipping_prices[$rate->shippingkey]->price_per_product)){ $order->shipping_prices[$rate->shippingkey]->price_per_product = array(); } $order->shipping_prices[$rate->shippingkey]->price_per_product[$rate->shipping_id] = array( 'price' => (float)$rate->shipping_params->shipping_price_per_product, 'products' => array() ); } unset($rate); } foreach($order->shipping_prices as $key => $shipping_price) { if(!empty($shipping_price->price_per_product) && !empty($shipping_price->products)) { $query = 'SELECT a.shipping_id, a.shipping_price_ref_id as `ref_id`, a.shipping_price_min_quantity as `min_quantity`, a.shipping_price_value as `price`, a.shipping_fee_value as `fee` '. ' FROM ' . hikashop_table('shipping_price') . ' AS a '. ' WHERE a.shipping_id IN (' . implode(',', array_keys($shipping_price->price_per_product)) . ') '. ' AND a.shipping_price_ref_id IN (' . implode(',', array_keys($shipping_price->products)) . ') AND a.shipping_price_ref_type = \'product\' '. ' ORDER BY a.shipping_id, a.shipping_price_ref_id, a.shipping_price_min_quantity'; $db = JFactory::getDBO(); $db->setQuery($query); $ret = $db->loadObjectList(); if(!empty($ret)) { foreach($ret as $ship) { if($ship->min_quantity <= $shipping_price->products[$ship->ref_id]) { $order->shipping_prices[$key]->price_per_product[$ship->shipping_id]['products'][$ship->ref_id] = ($ship->price * $shipping_price->products[$ship->ref_id]) + $ship->fee; } } } } } foreach($rates as &$rate) { if(!isset($rate->shippingkey)) continue; $shipping_prices =& $order->shipping_prices[$rate->shippingkey]; if(isset($shipping_prices->price_per_product[$rate->shipping_id]) && !empty($order->products)) { $rate_prices =& $order->shipping_prices[$rate->shippingkey]->price_per_product[$rate->shipping_id]; $price = 0; foreach($order->products as $k => $row) { if(!empty($rate->products) && !in_array($row->product_id, $rate->products)) continue; if(isset($rate_prices['products'][$row->product_id])) { $price += $rate_prices['products'][$row->product_id]; $rate_prices['products'][$row->product_id] = 0; } elseif(isset($rate_prices['products'][$row->product_parent_id])) { $price += $rate_prices['products'][$row->product_parent_id]; $rate_prices['products'][$row->product_parent_id] = 0; } elseif(!isset($rate->shipping_params->shipping_virtual_included) || $rate->shipping_params->shipping_virtual_included || $row->product_weight > 0) { $price += $rate_prices['price'] * $row->cart_product_quantity; } } if($price > 0) { if(!isset($rate->shipping_price_base)) $rate->shipping_price_base = hikashop_toFloat($rate->shipping_price); else $rate->shipping_price = $rate->shipping_price_base; $rate->shipping_price = round($rate->shipping_price + $price, $currencyClass->getRounding($rate->shipping_currency_id)); } if($price < 0) { if(!isset($rate->errors['product_excluded'])) $rate->errors['product_excluded'] = 0; $rate->errors['product_excluded']++; } unset($rate_prices); } unset($shipping_prices); if(empty($rate->errors)) $usable_rates[$rate->shipping_id] = $rate; else $messages[] = $rate->errors; } return true; } function onShippingSave(&$cart, &$methods, &$shipping_id, $warehouse_id = null) { $usable_methods = array(); $errors = array(); $shipping = hikashop_get('class.shipping'); $usable_methods = $shipping->getShippings($cart); foreach($usable_methods as $k => $usable_method) { if(($usable_method->shipping_id == $shipping_id) && ($warehouse_id == null || (isset($usable_method->shipping_warehouse_id) && $usable_method->shipping_warehouse_id == $warehouse_id))) return $usable_method; } return false; } function onShippingConfiguration(&$element) { $this->pluginConfiguration($element); if(empty($element) || empty($element->shipping_type)) { $element = new stdClass(); $element->shipping_type = $this->pluginName; $element->shipping_params = new stdClass(); $this->getShippingDefaultValues($element); } $this->currency = hikashop_get('type.currency'); $this->weight = hikashop_get('type.weight'); $this->volume = hikashop_get('type.volume'); } function onShippingConfigurationSave(&$element) { if(!empty($this->pluginConfig)) { $formData = JRequest::getVar('data', array(), '', 'array', JREQUEST_ALLOWRAW); if(isset($formData['shipping']['shipping_params'])) { foreach($this->pluginConfig as $key => $config) { if($config[1] == 'textarea' || $config[1] == 'big-textarea') { $element->shipping_params->$key = @$formData['shipping']['shipping_params'][$key]; } } } } return true; } function onAfterOrderConfirm(&$order,&$methods,$method_id) { return true; } function getShippingAddress($id = 0) { $app = JFactory::getApplication(); if($id == 0 && !$app->isAdmin()) { $id = $app->getUserState(HIKASHOP_COMPONENT.'.shipping_id', null); if(!empty($id) && is_array($id)) $id = (int)reset($id); else $id = 0; } if(empty($id)) return false; $shippingClass = hikashop_get('class.shipping'); $shipping = $shippingClass->get($id); if($shipping->shipping_type != $this->name) return false; $params = unserialize($shipping->shipping_params); $override = 0; if(isset($params->shipping_override_address)) { $override = (int)$params->shipping_override_address; } switch($override) { case 4: if(!empty($params->shipping_override_address_text)) return $params->shipping_override_address_text; break; case 3: if(!empty($params->shipping_override_address_text)) return str_replace(array("\r\n","\n","\r"),"<br/>", htmlentities($params->shipping_override_address_text, ENT_COMPAT, 'UTF-8') ); break; case 2: return ''; case 1: $config =& hikashop_config(); return str_replace(array("\r\n","\n","\r"),"<br/>", $config->get('store_address')); case 0: default: return false; } return false; } function getShippingDefaultValues(&$element) {} } JHTML::_('select.booleanlist','hikashop'); if(HIKASHOP_J25){ class hikaParameter extends JRegistry { function get($path, $default = null) { $value = parent::get($path, 'noval'); if($value==='noval') $value = parent::get('data.'.$path,$default); return $value; } } class hikaLanguage extends JLanguage { function __construct($old = null) { if(is_string($old)) { parent::__construct($old); $old = JFactory::getLanguage($old); }else{ parent::__construct($old->lang); } if(is_object($old)) { $this->strings = $old->strings; $this->override = $old->override; $this->paths = $old->paths; $this->metadata = $old->metadata; $this->locale = $old->locale; $this->lang = $old->lang; $this->default = $old->default; $this->debug = $old->debug; $this->orphans = $old->orphans; } } function publicLoadLanguage($filename, $extension = 'unknown') { if($extension == 'override') return $this->reloadOverride($filename); return $this->loadLanguage($filename, $extension); } function reloadOverride($filename = null) { $ret = false; if(empty($this->lang) && empty($file)) return $ret; if(empty($filename)) $filename = JPATH_BASE.'/language/overrides/'.$this->lang.'.override.ini'; if(file_exists($filename) && $contents = $this->parse($filename)) { if(is_array($contents)) { $this->override = $contents; $this->strings = array_merge($this->strings, $this->override); $ret = true; } unset($contents); } return $ret; } } JFactory::$language = new hikaLanguage(JFactory::$language); }else{ jimport('joomla.html.parameter'); class hikaParameter extends JParameter {} } define('HIKASHOP_COMPONENT','com_hikashop'); define('HIKASHOP_LIVE',rtrim(JURI::root(),'/').'/'); define('HIKASHOP_ROOT',rtrim(JPATH_ROOT,DS).DS); define('HIKASHOP_FRONT',rtrim(JPATH_SITE,DS).DS.'components'.DS.HIKASHOP_COMPONENT.DS); define('HIKASHOP_BACK',rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.HIKASHOP_COMPONENT.DS); define('HIKASHOP_HELPER',HIKASHOP_BACK.'helpers'.DS); define('HIKASHOP_BUTTON',HIKASHOP_BACK.'buttons'); define('HIKASHOP_CLASS',HIKASHOP_BACK.'classes'.DS); define('HIKASHOP_INC',HIKASHOP_BACK.'inc'.DS); define('HIKASHOP_VIEW',HIKASHOP_BACK.'views'.DS); define('HIKASHOP_TYPE',HIKASHOP_BACK.'types'.DS); define('HIKASHOP_MEDIA',HIKASHOP_ROOT.'media'.DS.HIKASHOP_COMPONENT.DS); define('HIKASHOP_DBPREFIX','#__hikashop_'); $app = JFactory::getApplication(); $configClass =& hikashop_config(); if(!HIKASHOP_PHP5) { $lang =& JFactory::getLanguage(); $doc =& JFactory::getDocument(); } else { $lang = JFactory::getLanguage(); $doc = JFactory::getDocument(); } if($configClass->get('bootstrap_design', HIKASHOP_J30)) { define('HIKASHOP_RESPONSIVE', true); } else { define('HIKASHOP_RESPONSIVE', false); } if($configClass->get('bootstrap_back_design', HIKASHOP_J30)) { define('HIKASHOP_BACK_RESPONSIVE', true); } else { define('HIKASHOP_BACK_RESPONSIVE', false); } if(HIKASHOP_J30 && (($app->isAdmin() && HIKASHOP_BACK_RESPONSIVE) || (!$app->isAdmin() && HIKASHOP_RESPONSIVE))){ include_once(dirname(__FILE__).DS.'joomla30.php'); }else{ class JHtmlHikaselect extends JHTMLSelect{} } define('HIKASHOP_RESSOURCE_VERSION', str_replace('.', '', $configClass->get('version'))); if($app->isAdmin()){ define('HIKASHOP_CONTROLLER',HIKASHOP_BACK.'controllers'.DS); define('HIKASHOP_IMAGES','../media/'.HIKASHOP_COMPONENT.'/images/'); define('HIKASHOP_CSS','../media/'.HIKASHOP_COMPONENT.'/css/'); define('HIKASHOP_JS','../media/'.HIKASHOP_COMPONENT.'/js/'); $css_type = 'backend'; $doc->addScript(HIKASHOP_JS.'hikashop.js?v='.HIKASHOP_RESSOURCE_VERSION); $doc->addStyleSheet(HIKASHOP_CSS.'menu.css?v='.HIKASHOP_RESSOURCE_VERSION); if(HIKASHOP_J30 && $_REQUEST['option']==HIKASHOP_COMPONENT){ JHTML::_('behavior.framework'); JHtml::_('formbehavior.chosen', 'select'); } }else{ define('HIKASHOP_CONTROLLER',HIKASHOP_FRONT.'controllers'.DS); define('HIKASHOP_IMAGES',JURI::base(true).'/media/'.HIKASHOP_COMPONENT.'/images/'); define('HIKASHOP_CSS',JURI::base(true).'/media/'.HIKASHOP_COMPONENT.'/css/'); define('HIKASHOP_JS',JURI::base(true).'/media/'.HIKASHOP_COMPONENT.'/js/'); $css_type = 'frontend'; $doc->addScript(HIKASHOP_JS.'hikashop.js?v='.HIKASHOP_RESSOURCE_VERSION); if(HIKASHOP_J30 && $configClass->get('bootstrap_forcechosen', 0)){ JHTML::_('behavior.framework'); JHtml::_('formbehavior.chosen', 'select'); } } $css = $configClass->get('css_'.$css_type,'default'); if(!empty($css)){ $doc->addStyleSheet( HIKASHOP_CSS.$css_type.'_'.$css.'.css?v='.HIKASHOP_RESSOURCE_VERSION); } if(!$app->isAdmin()){ $style = $configClass->get('css_style',''); if(!empty($style)){ $doc->addStyleSheet( HIKASHOP_CSS.'style_'.$style.'.css?v='.HIKASHOP_RESSOURCE_VERSION); } } if($lang->isRTL()){ $doc->addStyleSheet( HIKASHOP_CSS.'rtl.css?v='.HIKASHOP_RESSOURCE_VERSION); } $override_path = JLanguage::getLanguagePath(JPATH_ROOT).DS.'overrides'.DS.$lang->getTag().'.override.ini'; $lang->load(HIKASHOP_COMPONENT,JPATH_SITE); if(file_exists($override_path)){ if(!HIKASHOP_J16){ $lang->_load($override_path,'override'); }elseif(HIKASHOP_J25){ $lang->publicLoadLanguage($override_path,'override'); } } define('HIKASHOP_NAME','HikaShop'); define('HIKASHOP_TEMPLATE',HIKASHOP_FRONT.'templates'.DS); define('HIKASHOP_URL','http://www.hikashop.com/'); define('HIKASHOP_UPDATEURL',HIKASHOP_URL.'index.php?option=com_updateme&ctrl=update&task='); define('HIKASHOP_HELPURL',HIKASHOP_URL.'index.php?option=com_updateme&ctrl=doc&component='.HIKASHOP_NAME.'&page='); define('HIKASHOP_REDIRECT',HIKASHOP_URL.'index.php?option=com_updateme&ctrl=redirect&page='); if (is_callable("date_default_timezone_set")) date_default_timezone_set(@date_default_timezone_get()); if(!function_exists('bccomp')){ function bccomp($Num1,$Num2,$Scale=0) { if(!preg_match("/^\+?(\d+)(\.\d+)?$/",$Num1,$Tmp1)|| !preg_match("/^\+?(\d+)(\.\d+)?$/",$Num2,$Tmp2)) return('0'); $Num1=ltrim($Tmp1[1],'0'); $Num2=ltrim($Tmp2[1],'0'); if(strlen($Num1)>strlen($Num2)) return(1); else { if(strlen($Num1)<strlen($Num2)) return(-1); else { $Dec1=isset($Tmp1[2])?rtrim(substr($Tmp1[2],1),'0'):''; $Dec2=isset($Tmp2[2])?rtrim(substr($Tmp2[2],1),'0'):''; if($Scale!=null) { $Dec1=substr($Dec1,0,$Scale); $Dec2=substr($Dec2,0,$Scale); } $DLen=max(strlen($Dec1),strlen($Dec2)); $Num1.=str_pad($Dec1,$DLen,'0'); $Num2.=str_pad($Dec2,$DLen,'0'); for($i=0;$i<strlen($Num1);$i++) { if((int)$Num1{$i}>(int)$Num2{$i}) return(1); else if((int)$Num1{$i}<(int)$Num2{$i}) return(-1); } return(0); } } } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка