Advertisement
Guest User

Untitled

a guest
Aug 6th, 2014
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 89.83 KB | None | 0 0
  1. <?php
  2.  
  3. class hikashopFilterClass extends hikashopClass{
  4.  
  5.     var $tables = array('filter');
  6.     var $pkeys = array('filter_id');
  7.     var $toggle = array('filter_published'=>'filter_id');
  8.  
  9.     function saveForm(){
  10.         $app = JFactory::getApplication();
  11.         $filter = new stdClass();
  12.         $filter->filter_id = hikashop_getCID('filter_id');
  13.         $new=false;
  14.         $problem=false;
  15.         if(empty($filter->filter_id)) $new = true;
  16.         $formData = JRequest::getVar( 'data', array(), '', 'array' );
  17.         foreach($formData['filter'] as $column => $value){
  18.             hikashop_secureField($column);
  19.             if(is_array($value)){
  20.                 $value = implode(',',$value);
  21.             }
  22.             $filter->$column = strip_tags($value);
  23.         }
  24.  
  25.         if(empty($filter->filter_name)){
  26.             $app->enqueueMessage(JText::_('SPECIFY_A_NAME'), 'error');
  27.             $problem = true;
  28.         }
  29.  
  30.         //Create namekey
  31.         if(empty($filter->filter_id)){
  32.             $filter->filter_namekey=$filter->filter_name;
  33.             $search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
  34.             $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");
  35.             $test = str_replace($search, $replace, $filter->filter_namekey);
  36.             $test=preg_replace('#[^a-z0-9_-]#i','',$test);
  37.  
  38.             if(empty($test)){
  39.                 $query = 'SELECT MAX(`filter_id`) FROM '.hikashop_table('filter');
  40.                 $this->database->setQuery($query);
  41.                 $last_pid = $this->database->loadResult();
  42.                 $last_pid++;
  43.                 $filter->filter_namekey = 'filter_'.$last_pid;
  44.             }else{
  45.                 $query = 'SELECT filter_id FROM '.hikashop_table('filter').' WHERE filter_namekey  = '.$this->database->Quote($filter->filter_name).' AND filter_id!='.(int)$filter->filter_id.' LIMIT 1';
  46.                 $this->database->setQuery($query);
  47.                 if($this->database->loadResult()){
  48.                     $app = JFactory::getApplication();
  49.                     $app->enqueueMessage(JText::_( 'DUPLICATE_PRODUCT' ), 'error');
  50.                     JRequest::setVar( 'fail', $filter  );
  51.                     return false;
  52.                 }
  53.                 $test = str_replace($search, $replace, $filter->filter_name);
  54.                 $filter->filter_namekey = preg_replace('#[^a-z0-9_-]#i','_',$test);
  55.             }
  56.         }
  57.  
  58.  
  59.         //Case where the apply on have multiple values (text)
  60.         if($formData['filter']['filter_type']=='text'){
  61.             $filter->filter_data=serialize(@$formData['filter']['filter_data_text']);
  62.         }else if($formData['filter']['filter_type']=='cursor'){
  63.             $filter->filter_data=serialize(@$formData['filter']['filter_data_cursor']);
  64.         }else{
  65.             $filter->filter_data=serialize(@$formData['filter']['filter_data']);
  66.         }
  67.  
  68.         //Case where sort is selected with a checkbor or a multiple dropdown
  69.         if($formData['filter']['filter_type']=='checkbox' && $formData['filter']['filter_data']=='sort'){
  70.             $app->enqueueMessage(JText::sprintf('NOT_COMPAT_WITH_SORTING',JText::_('FIELD_CHECKBOX'),JText::_('FIELD_RADIO')));
  71.             $filter->filter_type='radio';
  72.         }
  73.         if($formData['filter']['filter_type']=='multipledropdown' && $formData['filter']['filter_data']=='sort'){
  74.             $app->enqueueMessage(JText::sprintf('NOT_COMPAT_WITH_SORTING',JText::_('FIELD_MULTIPLEDROPDOWN'),JText::_('FIELD_SINGLEDROPDOWN')));
  75.             $filter->filter_type='singledropdown';
  76.         }
  77.  
  78.         //Case where position is inside and type is checkbox or radio
  79.         if(($formData['filter']['filter_type']=='checkbox' || $formData['filter']['filter_type']=='radio' || $formData['filter']['filter_type']=='cursor') && @$formData['filter']['title_position']=='inside'){
  80.             $app->enqueueMessage(JText::_('NO_TITLE_INSIDE'));
  81.             $filter->filter_options['title_position']='top';
  82.         }else{
  83.         $filter->filter_options['title_position']=@$formData['filter']['title_position'];
  84.         }
  85.  
  86.         //If currencies are empty
  87.         if(empty($formData['filter']['filter_currencies']) && $formData['filter']['filter_data']=='price' && $formData['filter']['filter_type']!='text' && $formData['filter']['filter_type']!='cursor'){
  88.             $app->enqueueMessage(JText::_('NO_CURRENCY_SELECTED'));
  89.             $formData['filter']['filter_currencies']=array();
  90.             $formData['filter']['filter_currencies'][0]=1;
  91.         }
  92.         //if custom field not allow with this category
  93.         if($formData['filter']['filter_data']=='custom_field'){
  94.             if($formData['filter']['filter_category_childs']){
  95.                 $categories_filter=array();
  96.                 $categoryClass = hikashop_get('class.category');
  97.                 $childs = $categoryClass->getChilds($formData['filter']['filter_category_id'],true);
  98.                 foreach($childs as $cat){
  99.                      $categories_filter[]='field_categories LIKE \'%,'.$cat->category_id.',%\'';
  100.                 }
  101.                 $filters=implode(' OR ',$categories_filter);
  102.                 if(empty($filters)){
  103.                     $filters.= ' field_categories LIKE \'%,'.(int)$formData['filter']['filter_category_id'].',%\'';
  104.                 }else{
  105.                     $filters.= 'OR field_categories LIKE \'%,'.(int)$formData['filter']['filter_category_id'].',%\'';
  106.                 }
  107.             }else{
  108.                 $filters= 'field_categories LIKE \'%,'.(int)$formData['filter']['filter_category_id'].',%\'';
  109.             }
  110.             $found=false;
  111.  
  112.             if(!empty($formData['filter']['custom_field'])){
  113.                 $database = JFactory::getDBO();
  114.                 $database->setQuery('SELECT * FROM '.hikashop_table('field').' WHERE ('.$filters.' OR field_categories LIKE "all") AND field_table IN ("product") AND field_published=1');
  115.                 $fields=$database->loadObjectList('field_realname');
  116.                 if(!empty($fields)){
  117.                     foreach($fields as $field){
  118.                         if($field->field_namekey==$formData['filter']['custom_field']){
  119.                             $filter->filter_options['custom_field']=$formData['filter']['custom_field'];
  120.                             $found=true;
  121.                             break;
  122.                         }
  123.                     }
  124.                 }
  125.             }
  126.             if(!$found){
  127.                 $app->enqueueMessage(JText::_('CUSTOM_FIELD_NOT_AVAILABLE_FOR_CATEGORY'));
  128.                 if(!empty($fields)){
  129.                     $fields=reset($fields);
  130.                     $filter->filter_options['custom_field']=$fields->field_namekey;
  131.                 }else{
  132.                     $filter->filter_options['custom_field']='';
  133.                 }
  134.             }
  135.         }
  136.  
  137.         //Recording values
  138.         $filterValues = JRequest::getVar('filter_values', array(), '', 'array' );
  139.         if(!empty($filterValues)){
  140.             $filterValuesFinal=array();
  141.             foreach($filterValues['value'] as $key => $value){
  142.                 if(is_numeric($value)){
  143.                     $filterValuesFinal[]= strip_tags($key).'::'.strip_tags($value);
  144.                 }
  145.             }
  146.             $filter->filter_value=implode("\n",$filterValuesFinal);
  147.         }
  148.  
  149.         //Put some values in the option field
  150.         $filter->filter_options['column_width']=$formData['filter']['column_width'];
  151.         if(!empty($formData['filter']['filter_size'])){
  152.             $filter->filter_options['filter_size']=$formData['filter']['filter_size'];
  153.         }else{
  154.             $filter->filter_options['filter_size']=1;
  155.         }
  156.         if($formData['filter']['filter_type']=='cursor'){
  157.             $filter->filter_options['cursor_number']=$formData['filter']['cursor_number'];
  158.  
  159.             if(empty($formData['filter']['cursor_min'])){
  160.                 $formData['filter']['cursor_min']='0';
  161.             }
  162.             if(empty($formData['filter']['cursor_max']) || $formData['filter']['cursor_min']==$formData['filter']['cursor_max']){
  163.                 $app->enqueueMessage(JText::_('MIN_MAX_NOT_SET'), 'error');
  164.                 $problem = true;
  165.             }
  166.             $filter->filter_options['cursor_min']=$formData['filter']['cursor_min'];
  167.             $filter->filter_options['cursor_max']=$formData['filter']['cursor_max'];
  168.             $filter->filter_options['cursor_step']=$formData['filter']['cursor_step'];
  169.             $filter->filter_options['cursor_effect']=$formData['filter']['cursor_effect'];
  170.             $filter->filter_options['cursor_width']=$formData['filter']['cursor_width'];
  171.             $filter->filter_options['cursor_width']=$formData['filter']['cursor_width'];
  172.             $filter->filter_options['title_position']=$formData['filter']['title_position_cursor'];
  173.         }
  174.         if(!empty($formData['filter']['defined_limits'])){
  175.             $filter->filter_options['defined_limits']=@$formData['filter']['defined_limits'];
  176.         }
  177.         if($formData['filter']['filter_data']=='price'){
  178.             $filter->filter_options['currencies']=@$formData['filter']['filter_currencies'];
  179.         }
  180.         if($formData['filter']['filter_type']=='text'){
  181.             $filter->filter_options['max_char']=$formData['filter']['max_char'];
  182.             $filter->filter_options['textBoxSize']=$formData['filter']['textBoxSize'];
  183.             $filter->filter_options['searchProcessing']=$formData['filter']['searchProcessing'];
  184.         }
  185.  
  186.         if($formData['filter']['filter_data']=='characteristic'){
  187.             $filter->filter_options['filter_charac']=$formData['filter']['filter_charac'];
  188.         }
  189.  
  190.         if($formData ['filter']['filter_data']=='information' || $formData ['filter']['filter_type']=='cursor'){
  191.             if(($formData['filter']['product_information']=='weight' && $formData ['filter']['filter_type']!='cursor') || (($formData['filter']['filter_data_cursor']=='weight' && $formData ['filter']['filter_type']=='cursor')) ){
  192.                 $filter->filter_options['information_unit']=$formData['filter']['weight_unit'];
  193.             }else{
  194.                 $filter->filter_options['information_unit']=$formData['filter']['dimension_unit'];
  195.             }
  196.         }
  197.  
  198.         if($formData ['filter']['filter_type']!='cursor'){
  199.             $filter->filter_options['product_information']=$formData['filter']['product_information'];
  200.         }else{
  201.             $filter->filter_options['product_information']=$formData['filter']['filter_data'];
  202.         }
  203.         $filter->filter_options['button_align']=$formData['filter']['button_align'];
  204.  
  205.         if($formData['filter']['filter_data']=='sort'){
  206.             if(isset($formData['filter']['sort_by'])){
  207.                 $filter->filter_options['sort_by']=$formData['filter']['sort_by'];
  208.             }else{
  209.                 $app->enqueueMessage(JText::_('CHOOSE_SORT_OPTIONS'), 'error');
  210.                 $problem = true;
  211.             }
  212.         }
  213.         $filter->filter_options['parent_category_id']=$formData['filter']['parent_category_id'];
  214.  
  215.         unset($filter->column_width);
  216.         unset($filter->title_position);
  217.         unset($filter->filter_size);
  218.         unset($filter->cursor_number);
  219.         unset($filter->cursor_min);
  220.         unset($filter->cursor_max);
  221.         unset($filter->filter_currencies);
  222.         unset($filter->max_char);
  223.         unset($filter->defined_limits);
  224.         unset($filter->filter_charac);
  225.         unset($filter->sort_by);
  226.         unset($filter->product_information);
  227.         unset($filter->custom_field);
  228.         unset($filter->filter_data_text);
  229.         unset($filter->filter_data_cursor);
  230.         unset($filter->button_align);
  231.         unset($filter->dimension_unit);
  232.         unset($filter->weight_unit);
  233.         unset($filter->information_unit);
  234.         unset($filter->parent_category_id);
  235.         unset($filter->textBoxSize);
  236.         unset($filter->cursor_step);
  237.         unset($filter->cursor_effect);
  238.         unset($filter->cursor_width);
  239.         unset($filter->title_position_cursor);
  240.         unset($filter->searchProcessing);
  241.  
  242.         if($problem){
  243.             JRequest::setVar( 'fail', $filter  );
  244.         }else{
  245.             $status = $this->save($filter);
  246.  
  247.             //update ordering
  248.             if($new && $status){
  249.                 $orderClass = hikashop_get('helper.order');
  250.                 $orderClass->pkey = 'filter_id';
  251.                 $orderClass->table = 'filter';
  252.                 $orderClass->orderingMap = 'filter_ordering';
  253.                 $orderClass->reOrder();
  254.             }
  255.             JRequest::setVar( 'filter_id', $filter->filter_id);
  256.             return $status;
  257.         }
  258.         return false;
  259.     }
  260.  
  261.     function save(&$filter){
  262.         if(isset($filter->filter_options) && is_array($filter->filter_options)){
  263.             $filter->filter_options=serialize($filter->filter_options);
  264.         }
  265.         $return = parent::save($filter);
  266.         return $return;
  267.     }
  268.  
  269.     function getFilters($category_id){
  270.         $database = JFactory::getDBO();
  271.         $conditions = array('filter_published = 1');
  272.         hikashop_addACLFilters($conditions,'filter_access');
  273.         $query='SELECT * FROM '.hikashop_table('filter').' WHERE '.implode(' AND ',$conditions).' ORDER BY filter_ordering';
  274.         //$query='SELECT * FROM '.hikashop_table('filter').' WHERE filter_published = 1 ORDER BY filter_ordering';
  275.         $database->setQuery($query);
  276.         $filters=$database->loadObjectList();
  277.  
  278.         $filterList=array();
  279.         foreach($filters as $filter){
  280.             $filter->filter_options=unserialize($filter->filter_options);
  281.             $filter->filter_data=unserialize($filter->filter_data);
  282.             if(!empty($filter->filter_value)){
  283.                 $filter->filter_value=explode("\n", $filter->filter_value);
  284.                 foreach($filter->filter_value as $key => $val){
  285.                     $temp=explode("::", $val);
  286.                     $filter->filter_value[$key]=$temp[1];
  287.                 }
  288.                 sort($filter->filter_value);
  289.             }
  290.         }
  291.  
  292.         if(!empty($category_id)){
  293.             $categoryClass = hikashop_get('class.category');
  294.             $parents = $categoryClass->getParents($category_id);
  295.  
  296.             foreach($filters as $filter){
  297.                 if(empty($filter->filter_category_id) || $filter->filter_category_id==$category_id){
  298.                     $filterList[]=$filter;
  299.                 }else{
  300.                     if($filter->filter_category_childs==1){
  301.                         foreach($parents as $parent){
  302.                                 if($parent->category_id == $filter->filter_category_id){
  303.                                     $filterList[]=$filter;
  304.                                     break;
  305.                                 }
  306.                         }
  307.                     }
  308.                 }
  309.             }
  310.         }else{
  311.             return $filters;
  312.         }
  313.  
  314.         return $filterList;
  315.     }
  316.  
  317.     function displayFilter($filter, $divName, &$parent, $datas=''){
  318.         $html ='';
  319.         if($filter->filter_type=='text' || $filter->filter_type=='singledropdown' || $filter->filter_type=='multipledropdown' || $filter->filter_type=='radio' || $filter->filter_type=='list' || $filter->filter_type=='checkbox' || $filter->filter_type=='cursor' || $filter->filter_type=='instockcheckbox'){
  320.             $classType = 'hikashop'.ucfirst($filter->filter_type).'Class';
  321.             $class = new $classType();
  322.             $html = $class->display($filter, $divName, $parent, $datas);
  323.         }else{
  324.             JPluginHelper::importPlugin( 'hikashop' );
  325.             $dispatcher = JDispatcher::getInstance();
  326.             $dispatcher->trigger( 'onFilterDisplay', array( & $filter ,&$html, &$divName, &$parent, &$datas) );
  327.         }
  328.         return $html;
  329.     }
  330.  
  331.     function addFilter(&$filter,&$filters,&$select,&$select2,&$a,&$b,&$on,&$order,&$parent, $divName){
  332.         if($filter->filter_type=='text' || $filter->filter_type=='singledropdown' || $filter->filter_type=='multipledropdown' || $filter->filter_type=='radio' || $filter->filter_type=='list' || $filter->filter_type=='checkbox' || $filter->filter_type=='cursor' || $filter->filter_type=='instockcheckbox'){
  333.             $classType = 'hikashop'.ucfirst($filter->filter_type).'Class';
  334.             $class = new $classType();
  335.             $html = $class->addFilter($filter,$filters,$select,$select2,$a,$b,$on,$order,$parent, $divName);
  336.         }else{
  337.             JPluginHelper::importPlugin( 'hikashop' );
  338.             $dispatcher = JDispatcher::getInstance();
  339.             $dispatcher->trigger( 'onFilterAdd', array( & $filter ,&$filters, &$select, &$select2, &$a, &$b, &$on, &$order, &$divName, &$parent) );
  340.         }
  341.     }
  342.     function getFieldToLoad($filter, $divName, &$parent){
  343.         $html ='';
  344.         if($filter->filter_type=='text' || $filter->filter_type=='singledropdown' || $filter->filter_type=='multipledropdown' || $filter->filter_type=='radio' || $filter->filter_type=='list' || $filter->filter_type=='checkbox' || $filter->filter_type=='cursor' || $filter->filter_type=='instockcheckbox'){
  345.             $classType = 'hikashop'.ucfirst($filter->filter_type).'Class';
  346.             $class = new $classType();
  347.             $html = $class->getFieldToLoad($filter, $divName, $parent);
  348.         }else{
  349.             JPluginHelper::importPlugin( 'hikashop' );
  350.             $dispatcher = JDispatcher::getInstance();
  351.             $dispatcher->trigger( 'onFilterToLoad', array( & $filter ,&$html, &$divName, &$parent) );
  352.         }
  353.         return $html;
  354.     }
  355.  
  356.     function getProductList(&$parent, $filters){
  357.         $fields='';
  358.         $datas = array();
  359.         $copy_query = $parent->listingQuery;
  360.         if(!empty($filters)){
  361.             foreach($filters as $filter){
  362.                 $fields[$filter->filter_namekey]=$this->getFieldToLoad($filter, $parent->params->get('main_div_name'), $parent);
  363.                 if($filter->filter_data=='category' && strpos($copy_query,' '.hikashop_table('product_category').' AS a')===false){
  364.                     $copy_query=str_replace('WHERE','LEFT JOIN '.hikashop_table('product_category').' AS a ON b.product_id=a.product_id WHERE',$copy_query);
  365.                 }
  366.  
  367.                 if($filter->filter_type=='cursor' && $filter->filter_data=='price'){
  368.                     if(preg_match('#hikashop_price AS ([a-z0-9_]+)#i',$copy_query,$matches)){
  369.                         if(preg_match('#price[0-9]+#',$matches[1],$results)){
  370.                             $matches[1] = 'b';
  371.                         }
  372.                         $fields[$filter->filter_namekey]=$matches[1].'.price_value';
  373.                     }elseif(strpos($copy_query,' '.hikashop_table('price').' AS pprice')===false){
  374.                         $table = 'b';
  375.                         if(preg_match('#hikashop_product AS ([a-z0-9_]+)#i',$copy_query,$matches)){
  376.                             $table = $matches[1];
  377.                         }
  378.                         $copy_query=str_replace('WHERE','LEFT JOIN '.hikashop_table('price').' AS pprice ON '.$table.'.product_id=pprice.price_product_id WHERE',$copy_query);
  379.                     }
  380.                 }
  381.             }
  382.         }
  383.         $fieldsLimits = array();
  384.         if(!empty($fields)){
  385.             foreach($fields as $key => $field){
  386.                 if(empty($field)){
  387.                     unset($fields[$key]);
  388.                 }else{
  389.                     $fields[$key]=$field;
  390.                     $fieldsLimits[]='max('.$field.') as max_'.$key.'';
  391.                     $fieldsLimits[]='min('.$field.') as min_'.$key.'';
  392.                 }
  393.             }
  394.             $fields=implode(', ', $fields);
  395.             if(!empty($fields)){ $fields=','.$fields; }
  396.         }
  397.         if(!empty($fieldsLimits)){
  398.             $fieldsLimits=implode(', ', $fieldsLimits);
  399.             $fieldsLimits=','.$fieldsLimits;
  400.         }else{
  401.             $fieldsLimits='';
  402.         }
  403.  
  404.         $database = JFactory::getDBO();
  405.         $query='SELECT DISTINCT b.product_id'.$fields.' '.$copy_query;
  406.         $database->setQuery($query);
  407.         $datas['products']=$database->loadObjectList();
  408.         $query='SELECT DISTINCT b.product_id'.$fieldsLimits.' '.$copy_query;
  409.         $database->setQuery($query);
  410.         $datas['limits']=$database->loadObject();
  411.         return $datas;
  412.     }
  413.  
  414.     function cleanFilter($filter){
  415.         if($filter->filter_type!='cursor' && $filter->filter_type!='instockcheckbox' && $filter->filter_data=='price' ){
  416.             $currency = hikashop_getCurrency();
  417.             if(!empty($filter->filter_options['currencies']) && !in_array($currency, $filter->filter_options['currencies'])){
  418.                 return false;
  419.             }
  420.             if(empty($filter->filter_value)){
  421.                 return false;
  422.             }
  423.         }
  424.         return true;
  425.     }
  426.  
  427. }
  428.  
  429. class hikashopFilterTypeClass extends hikashopClass{
  430.  
  431.     var $receivedFilter = '';
  432.  
  433.     function display($filter, $divName, &$parent, $completion=''){
  434.         $app = JFactory::getApplication();
  435.         $cid = JRequest::getInt("cid",'itemid_'.JRequest::getInt("Itemid",0));
  436.         if(JRequest::getVar('reseted')==1){
  437.             return array();
  438.             $app->setUserState('com_hikashop.'.$cid.'_filter_'.$filter->filter_namekey.$completion, '');
  439.         }
  440.         if(JRequest::getVar('filtered')==1){
  441.             $infoGet = JRequest::getVar('filter_'.$filter->filter_namekey.$completion);
  442.             $app->setUserState('com_hikashop.'.$cid.'_filter_'.$filter->filter_namekey.$completion, $infoGet);
  443.         }else{
  444.             $infoGet = $app->getUserStateFromRequest( 'com_hikashop.'.$cid.'_filter_'.$filter->filter_namekey.$completion, 'filter_'.$filter->filter_namekey.$completion);
  445.         }
  446.         if(!empty($infoGet)){
  447.             $copyGet=$infoGet[0];
  448.             $result=explode(',',$copyGet);
  449.             if(!($result[0]==$infoGet[0])){
  450.                 foreach($result as $key => $res){
  451.                     $infoGet[$key]=$res;
  452.                 }
  453.             }
  454.         }
  455.         return $infoGet;
  456.     }
  457.  
  458.     function addFilter(&$filter,&$filters,&$select,&$select2, &$a,&$b,&$on,&$order,&$parent, $divName){
  459.         static $i = 0;
  460.         $i++;
  461.         $app = JFactory::getApplication();
  462.         $database = JFactory::getDBO();
  463.         $infoGet= array();
  464.  
  465.         static $pagination_reset = false;
  466.  
  467.         if(!$pagination_reset){
  468.             $new_filter = JRequest::getVar('filter_'.$filter->filter_namekey,null);
  469.  
  470.             $cid = JRequest::getInt("cid",'itemid_'.JRequest::getInt("Itemid",0));
  471.             $oldValue = $app->getUserState('com_hikashop.'.$cid.'_filter_'.$filter->filter_namekey, '');
  472.  
  473.             if(!is_null($new_filter) && $new_filter!=$oldValue){
  474.                 $module = hikashop_get('helper.module');
  475.                 $module->initialize($this);
  476.                 $cid = JRequest::getInt("cid",$this->params->get('selectparentlisting'));
  477.                 if($this->params->get('content_type')!='product'){
  478.                     foreach($this->modules as $module){
  479.                         $main_div_name ='hikashop_category_information_module_'.$module->id;
  480.                         JRequest::setVar('limitstart_'.$main_div_name.'_'.$cid,0);
  481.                         JRequest::setVar('limitstart_'.$main_div_name,0);
  482.                     }
  483.                 }else{
  484.                     JRequest::setVar('limitstart_'.$this->params->get('main_div_name').'_'.$cid,0);
  485.                     JRequest::setVar('limitstart_'.$this->params->get('main_div_name'),0);
  486.                 }
  487.                 $pagination_reset=true;
  488.             }
  489.         }
  490.  
  491.         $cid = JRequest::getInt("cid",'itemid_'.JRequest::getInt("Itemid",0));
  492.         if(JRequest::getVar('filtered')==1){
  493.             $infoGet = JRequest::getVar('filter_'.$filter->filter_namekey);
  494.             $app->setUserState('com_hikashop.'.$cid.'_filter_'.$filter->filter_namekey, $infoGet);
  495.         }else{
  496.             $infoGet = $app->getUserStateFromRequest( 'com_hikashop.'.$cid .'_filter_'.$filter->filter_namekey, 'filter_'.$filter->filter_namekey, $infoGet, 'array' );
  497.         }
  498.  
  499.         if(JRequest::getVar('reseted')==1 || (is_string($infoGet) && $infoGet=='filter_'.$filter->filter_namekey) || (isset($infoGet[0]) && $infoGet[0]=='filter_'.$filter->filter_namekey)){
  500.             $app->setUserState('com_hikashop.'.$cid.'_filter_'.$filter->filter_namekey, '');
  501.             return array();
  502.         }
  503.  
  504.         if(!empty($infoGet)&& !is_array($infoGet)){
  505.             $infoGet = array($infoGet);
  506.         }
  507.  
  508.         //avoid case where we have an empty string
  509.         if(isset($infoGet[0])){
  510.             $infoGet[0] = trim($infoGet[0]);
  511.         }
  512.  
  513.         if(isset($infoGet) && !empty($infoGet[0])){
  514.             //IN STOCK
  515.             if($filter->filter_type=='instockcheckbox' && $infoGet[0]=='in_stock'){
  516.                 $filters[]=' b.product_quantity!=0 ';
  517.             }
  518.  
  519.             //TEXT
  520.             if($filter->filter_type=='text'){
  521.                 if($filter->filter_name == $infoGet[0]){
  522.                     return false;
  523.                 }
  524.                 if(!empty($filter->filter_options['max_char']) && strlen($infoGet[0])>$filter->filter_options['max_char']){
  525.                     $app->enqueueMessage(JTEXT::_( 'TEXT_ENTERED_TOO_LONG' ));
  526.                     return false;
  527.                 }
  528.                 if(empty($filter->filter_data) || $filter->filter_data[0]=='all'){
  529.                     $query = 'SELECT * FROM '.hikashop_table('product').' LIMIT 1';
  530.                     $database->setQuery($query);
  531.                     $object = $database->loadObject();
  532.                     foreach($object as $key => $obj){
  533.                         $searchField[]=$key;
  534.                     }
  535.                 }else{
  536.                     $searchField=$filter->filter_data;
  537.                 }
  538.                 $list=array();
  539.                 $translationFilters=array();
  540.                 $translationList=array();
  541.                 $fields=array();
  542.                 $searchProcessing='any';
  543.  
  544.                 if(isset($filter->filter_options['searchProcessing']))
  545.                     $searchProcessing=$filter->filter_options['searchProcessing'];
  546.  
  547.  
  548.                 $terms=$infoGet[0];
  549.                 if(!isset($filter->filter_options['searchProcessing'])) $filter->filter_options['searchProcessing']='any';
  550.                 if($filter->filter_options['searchProcessing']=='operators'){
  551.                     $searchProcessing='any';
  552.                     if(preg_match('*. .*',$infoGet[0])){
  553.                         $searchProcessing='any';
  554.                     }
  555.                     if(preg_match('*.\+.*',$infoGet[0])){
  556.                         echo 'ok';
  557.                         $terms=str_replace('+',' ',$terms);
  558.                         $searchProcessing='every';
  559.                     }
  560.                     if(preg_match('#^(["\']).*\1$#',$infoGet[0])){
  561.                         $searchProcessing='complete';
  562.                         $terms=trim($terms, '"');
  563.                     }
  564.                 }
  565.  
  566.                 if($searchProcessing=='complete'){
  567.                     $terms = array($terms);
  568.                 }else{
  569.                     $terms = explode(' ',$terms);
  570.                 }
  571.  
  572.                 if(@$searchProcessing!='any'){
  573.                     foreach($terms as $term){
  574.                         $array =array();
  575.                         foreach($searchField as $column){
  576.                             $array[]=' b.'.$column.' LIKE \'%'.hikashop_getEscaped($term, true).'%\' ';
  577.                             $fields[] = ' reference_field = \''.$column.'\' ';
  578.                         }
  579.                         $list[]='('.implode(' OR ', $array).')';
  580.                         $translationList[] = 'value LIKE \'%'.hikashop_getEscaped($term, true).'%\'';
  581.                     }
  582.                     $filters[]='('.implode(' AND ', $list).')';
  583.                     $translationFilters =  '('.implode(' AND ', $translationList).')';
  584.                 }else{
  585.                     foreach($terms as $term){
  586.                         foreach($searchField as $column){
  587.                             $list[]=' b.'.$column.' LIKE \'%'.hikashop_getEscaped($term, true).'%\' ';
  588.                             $fields[] = ' reference_field = \''.$column.'\' ';
  589.                         }
  590.                         $translationList[] = 'value LIKE \'%'.hikashop_getEscaped($term, true).'%\'';
  591.                     }
  592.                     $filters[]='('.implode(' OR ', $list).')';
  593.                     $translationFilters =  '('.implode(' OR ', $translationList).')';
  594.                 }
  595.  
  596.                 //Handle Translation
  597.  
  598.                 $translationHelper = hikashop_get('helper.translation');
  599.                 if($translationHelper->isMulti(true)){
  600.                     $trans_table = 'jf_content';
  601.                     if($translationHelper->falang) {
  602.                         $trans_table = 'falang_content';
  603.                     }
  604.                     $query = 'SELECT DISTINCT reference_id FROM '.hikashop_table($trans_table,false).' WHERE reference_table=\'hikashop_product\' AND '.$translationFilters.' AND ('.implode(' OR ', $fields).') AND published=1 ORDER BY reference_id ASC';
  605.                     $this->database->setQuery($query);
  606.                     if(!HIKASHOP_J25){
  607.                         $translatedProducts= $database->loadResultArray();
  608.                     } else {
  609.                         $translatedProducts = $database->loadColumn();
  610.                     }
  611.                     if(!empty($translatedProducts)){
  612.                         $filters[] = '('.array_pop($filters).' OR b.product_id IN ('.implode(',', $translatedProducts).'))';
  613.                     }
  614.                 }
  615.  
  616.             }
  617.  
  618.             //CATEGORIES
  619.             if($filter->filter_data=='category'){
  620.                 if(!($infoGet[0]==$filter->filter_namekey && count($infoGet)==1)){
  621.                     $categoriesList='';
  622.                     foreach($infoGet as $cat){
  623.                         if($cat!=$filter->filter_namekey){
  624.                             $categoriesList.=(int)$cat.',';
  625.                         }
  626.                     }
  627.                     $categoriesList=substr($categoriesList,0,-1);
  628.  
  629.                     $table = 'a';
  630.                     if($a=='#__hikashop_product AS b'){
  631.                         $table = 'b';
  632.                     }elseif($a[0]!='(' && strpos($a,') AS b') && preg_match('#hikashop_product AS ([a-z0-9_]+)#i',$a,$matches)){
  633.                         $table = $matches[1];
  634.                     }
  635.                     $on.=' INNER JOIN '.hikashop_table('product_category').' AS '.$filter->filter_namekey.$i.' ON '.$filter->filter_namekey.$i.'.product_id='.$table.'.product_id AND '.$filter->filter_namekey.$i.'.category_id IN ('.$categoriesList.')';
  636.                 }
  637.             }
  638.  
  639.             //INFORMATIONS/PRICE
  640.             if($filter->filter_data=='information'||$filter->filter_data=='price'){
  641.                 $limit=array();
  642.                 $type=$filter->filter_options['product_information'];
  643.                 if($filter->filter_data=='price') $type='price';
  644.                 $case='( '.$this->getUnitSelect($filter, $type,$i).' )';
  645.                 $copyGet=$infoGet[0];
  646.                 $result=explode(',',$copyGet);
  647.                 if(!($result[0]==$infoGet[0])){
  648.                     foreach($result as $key => $res){
  649.                         $infoGet[(int)$key]=(int)$res;
  650.                     }
  651.                 }
  652.                 foreach($infoGet as $slice){
  653.                     $values=explode('::', $slice);
  654.                     if(empty($values[0])){ $limit[]=' '.$case.' <= '.(int)$values[1].' '; }
  655.                     else if(empty($values[1])){ $limit[]=' '.$case.' >= '.(int)$values[0].' '; }
  656.                     else{ $limit[]=' '.$case.' BETWEEN '.(int)$values[0].' AND '.(int)$values[1].' '; }
  657.                 }
  658.                 $filters[]=' ('.implode('OR', $limit).') ';
  659.             }
  660.  
  661.             //CHARACTERISTICS
  662.             if($filter->filter_data=='characteristic'){
  663.                 if(!($infoGet[0]==$filter->filter_namekey && count($infoGet)==1)){
  664.                     $charList='';
  665.                     foreach($infoGet as $charac){
  666.                         $charList.=(int)$charac.',';
  667.                     }
  668.                     $charList=substr($charList,0,-1);
  669.  
  670.                     if(strpos($on,' LEFT JOIN '.hikashop_table('product').' AS c ON b.product_id=c.product_parent_id')===false){
  671.                         $on.=' LEFT JOIN '.hikashop_table('product').' AS c ON b.product_id=c.product_parent_id';
  672.                     }
  673.                     $on.=' LEFT JOIN '.hikashop_table('variant').' AS '.$filter->filter_namekey.$i.' ON '.$filter->filter_namekey.$i.'.variant_product_id=c.product_id';
  674.                     $filters[]=' '.$filter->filter_namekey.$i.'.variant_characteristic_id IN ('.$charList.') ';
  675.                     $filters[]=' c.product_quantity!=0 ';
  676.                 }
  677.             }
  678.  
  679.             //CHARACTERISTICS
  680.             if($filter->filter_data=='quantity'){
  681.                 if(!($infoGet[0]==$filter->filter_namekey && count($infoGet)==1)){
  682.                     $filters[]=' b.product_quantity!=0 ';
  683.                 }
  684.             }
  685.  
  686.             //CUSTOM FIELDS
  687.             if($filter->filter_data=='custom_field'){
  688.                 if(empty($filter->filter_value)){
  689.                     if(!($infoGet[0]==$filter->filter_namekey && count($infoGet)==1)){
  690.                         $fieldsList=array();
  691.                         foreach($infoGet as $field){
  692.                             if($field!=$filter->filter_namekey && $field!=' '){
  693.                                     //$fieldsList.=' b.'.$filter->filter_options['custom_field'].' =  '.$database->Quote($field).' OR';
  694.                                     $fieldsList[]='b.'.$filter->filter_options['custom_field'].' LIKE \'%'.hikashop_getEscaped($field,true).'%\'';
  695.                                 }
  696.                         }
  697.                         if(!empty($fieldsList)){
  698.                             $fieldsList='('.implode(' OR ',$fieldsList).')';
  699.                             $filters[]=$fieldsList;
  700.                         }
  701.                     }
  702.                 }else{
  703.                     foreach($infoGet as $slice){
  704.                         $values=explode('::', $slice);
  705.                         if(empty($values[0])){ $limit[]=' b.'.$filter->filter_options['custom_field'].' <= '.(int)$values[1].' '; }
  706.                         else if(empty($values[1])){ $limit[]=' b.'.$filter->filter_options['custom_field'].' >= '.(int)$values[0].' '; }
  707.                         else{ $limit[]=' b.'.$filter->filter_options['custom_field'].' BETWEEN '.(int)$values[0].' AND '.(int)$values[1].' '; }
  708.                     }
  709.                     $filters[]=' ('.implode('OR', $limit).') ';
  710.  
  711.                 }
  712.             }
  713.  
  714.             $infos=explode('--',$infoGet[0]);
  715.             //adding table for a sort by price
  716.             $sort_by_price=false;
  717.             if(isset($filter->filter_options['sort_by'])){
  718.                 if(!is_array($filter->filter_options['sort_by'])){
  719.                     $temp = $filter->filter_options['sort_by'];
  720.                     $filter->filter_options['sort_by'] = array();
  721.                     $filter->filter_options['sort_by'][] = $temp;
  722.                 }
  723.                 foreach($filter->filter_options['sort_by'] as $sort_by){
  724.                     if($sort_by=="price"){ $sort_by_price=true; }
  725.                 }
  726.             }
  727.             if(isset($infos[1]) && ($filter->filter_data=='sort' && $sort_by_price && (($infos[1]=='lth') || ($infos[1]=='htl')))|| $filter->filter_data=='price'){
  728.                 $subfilters = array();
  729.                 $where = '';
  730.                 hikashop_addACLFilters($subfilters,'price_access','price'.$i,2,true);
  731.                 $subfilters[]='product'.$i.'.product_type=\'main\'';
  732.                 $where = ' WHERE '.implode(' AND ',$subfilters);
  733.                 $subquery ='SELECT * FROM '.hikashop_table('product').' AS product'.$i.' LEFT JOIN  '.hikashop_table('price').' AS price'.$i.' ON product'.$i.'.product_id=price'.$i.'.price_product_id '.$where.' GROUP BY product'.$i.'.product_id ORDER BY price'.$i.'.price_min_quantity ASC';
  734.                 $a = '('.$subquery.') AS b';
  735.             }
  736.  
  737.             //SORT
  738.             //if($filter->filter_data=='sort' && (($infoGet[0]=='lth') || ($infoGet[0]=='htl'))){            old stuff, not sure if the lth check was useful...
  739.             if($filter->filter_data=='sort' && isset($infoGet[0]) && $infoGet[0]!='none'){
  740.                 $type=$infos[0];
  741.                 $case=$this->getUnitSelect($filter, $type, $i);
  742.                 if(!empty($case)){
  743.                     $select2.=' ,'.$case.' as product_'.$type.'_normalized';
  744.                     if($infos[1]=='lth'){
  745.                         $order= ' ORDER BY product_'.$type.'_normalized*1 ASC';
  746.                     }else{
  747.                         $order= ' ORDER BY product_'.$type.'_normalized*1 DESC';
  748.                     }
  749.                 }else{
  750.                     if($infos[1]=='lth'){
  751.                         $order= ' ORDER BY '.$type.' ASC';
  752.                     }else{
  753.                         $order= ' ORDER BY '.$type.' DESC';
  754.                     }
  755.                 }
  756.  
  757.             }
  758.  
  759.             //MANUFACTURERS
  760.             if($filter->filter_data=='manufacturers'){
  761.                 if(!($infoGet[0]==$filter->filter_namekey && count($infoGet)==1)){
  762.                     $manufacturerList='';
  763.                     foreach($infoGet as $manufacturer_id){
  764.                         $manufacturerList.=(int)$manufacturer_id.',';
  765.                     }
  766.                     $manufacturerList=substr($manufacturerList,0,-1);
  767.                     $on.=' INNER JOIN  '.hikashop_table('category').' AS '.$filter->filter_namekey.$i.' ON '.$filter->filter_namekey.$i.'.category_id=b.product_manufacturer_id AND b.product_manufacturer_id IN ('.$manufacturerList.') ';
  768.                 }
  769.             }
  770.  
  771.             //CURSOR
  772.             if($filter->filter_type=='cursor'){
  773.                 //NOTE: cursors and filters cannot search for variant's price, it's too complicated and the query would be to long
  774.                 if(empty($infoGet[0])){
  775.                     return false;
  776.                 }
  777.                 $infoGet = $app->getUserStateFromRequest( $parent->paramBase.'filter_'.$filter->filter_namekey.'_values', 'filter_'.$filter->filter_namekey.'_values', $infoGet, 'array' );
  778.  
  779.                 if(is_array($infoGet)){
  780.                     $data =& $infoGet[0];
  781.                 }else{
  782.                     $data =& $infoGet;
  783.                 }
  784.  
  785.                 $values=explode(' - ', $data);
  786.  
  787.                 if(count($values)!=2 || ($values[0]==$filter->filter_options['cursor_min'] && $values[1]==$filter->filter_options['cursor_max'])){
  788.                     return false;
  789.                 }
  790.  
  791.                 if(in_array($filter->filter_data,array('weight','length','width','height','surface','volume','price'))){
  792.                     $type=$filter->filter_data;
  793.                             $case='( '.$this->getUnitSelect($filter, $type, $i).' )';
  794.                     $limit=' '.$case.' BETWEEN '.(int)$values[0].' AND '.(int)$values[1].' ';
  795.                 }else{
  796.                     $limit=' b.'.$filter->filter_data.' BETWEEN '.(int)$values[0].' AND '.(int)$values[1].' ';
  797.                 }
  798.                 $filters[]=$limit;
  799.             }
  800.  
  801.         }else{
  802.             return false;
  803.         }
  804.     }
  805.  
  806.     function getFieldToLoad($filter, $divName, &$parent){
  807.         //TEXT
  808.         if($filter->filter_type=='text'){ return ''; }
  809.  
  810.         //CATEGORIES
  811.         if($filter->filter_data=='category'){ return 'a.category_id'; }
  812.  
  813.         //INFORMATIONS/PRICE
  814.         if($filter->filter_data=='information'){ return 'b.product_'.$filter->filter_options['product_information']; }
  815.  
  816.         //CHARACTERISTICS
  817.         if($filter->filter_data=='characteristic'){ return ''; }
  818.  
  819.             //CUSTOM FIELDS
  820.         if($filter->filter_data=='custom_field' && !empty($filter->filter_options['custom_field'])){ return 'b.'.$filter->filter_options['custom_field']; }
  821.  
  822.         //SORT
  823.         if($filter->filter_data=='sort' ){ return ''; }
  824.  
  825.         //MANUFACTURERS
  826.         if($filter->filter_data=='manufacturers'){ return ''; }
  827.  
  828.         //CURSOR
  829.         if($filter->filter_type=='cursor'){
  830.             if($filter->filter_data=='weight' || $filter->filter_data=='length' || $filter->filter_data=='width' || $filter->filter_data=='height' || $filter->filter_data=='surface' || $filter->filter_data=='volume'){
  831.                 if($filter->filter_data=='surface'){
  832.                 return 'b.product_width*b.product_length';
  833.                 }
  834.                 if($filter->filter_data=='volume'){
  835.                     return 'b.product_width*b.product_length*b.product_height';
  836.                 }
  837.                 return 'b.product_'.$filter->filter_data;
  838.             }
  839.             if($filter->filter_data=='price'){
  840.                 return 'pprice.price_value';
  841.             }
  842.             if(substr($filter->filter_data,0,2)!='b.') return 'b.'.$filter->filter_data;
  843.             return $filter->filter_data;
  844.         }
  845.         return '';
  846.     }
  847.  
  848.     function displayInList($filter, $divName, $selected, $tab=""){
  849.         $html='';
  850.         $br='<br/>';
  851.  
  852.         //TEXT
  853.         if($filter->filter_type=='text'){
  854.             $html.='<a class="hikashop_filter_list_selected" style="font-weight:bold">'.$selected[0].'</a>, ';
  855.             $html=$this->getDeleteButton($filter, $divName, $selected[0].' ', $html, $br);
  856.         }
  857.  
  858.         //DISPLAY CATEGORIES
  859.         if($filter->filter_data=='category'){
  860.             $categories_name=$this->getCategories($filter);
  861.             $val='';
  862.             foreach($categories_name as $cat){
  863.                 if(is_array($selected) && in_array($cat->category_id, $selected)){
  864.                     $html.='<a class="hikashop_filter_list_selected" style="font-weight:bold">'.$cat->category_name.'</a>, ';
  865.                     $val.=$cat->category_id.',';
  866.                 }
  867.             }
  868.             $html=$this->getDeleteButton($filter, $divName, $val, $html, $br);
  869.         }
  870.  
  871.         //DISPLAY PRICES OR INFORMATION
  872.         if(($filter->filter_data=='price' || $filter->filter_data=='information') && !empty($filter->filter_value)){
  873.             if($this->checkCurrency($filter)==false){ return false;}
  874.             $size=count($filter->filter_value);
  875.             $val='';
  876.             foreach($filter->filter_value as $key => $value){
  877.                 list($formatVal, $oldVal)=$this->formatUnits($filter, $key, $value);
  878.                 if($key==0 && is_array($selected) && in_array('::'.$value, $selected)){
  879.                     $val.='::'.$value.',';
  880.                     $html.='<a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::sprintf('X_AND_INFERIOR',$formatVal).'</a>, ';
  881.                 }else if($key!=0 && is_array($selected) && in_array($filter->filter_value[$key-1].'::'.$value, $selected)) {
  882.                     $val.=$filter->filter_value[$key-1].'::'.$value.',';
  883.                     $html.='<a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::sprintf('FROM_X_TO_Y', $oldVal, $formatVal ).'</a>, ';
  884.                 }
  885.                 if($key==$size-1 && is_array($selected) && in_array($value.'::', $selected)){
  886.                     $val.=$value.'::,';
  887.                     $html.='<a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::sprintf('X_AND_SUPERIOR', $formatVal ).'</a>, ';
  888.                 }
  889.             }
  890.             $html=$this->getDeleteButton($filter, $divName, $val, $html, $br);
  891.         }
  892.  
  893.         //DISPLAY CHARACTERISTICS
  894.         if($filter->filter_data=='characteristic'){
  895.             $characteristic_values=$this->getCharacteristics($filter);
  896.             $values='';
  897.             foreach($characteristic_values as $val){
  898.                 if(!empty($selected) && is_array($selected) && in_array($val->characteristic_id, $selected)){
  899.                     $html.='> <a class="hikashop_filter_list_selected" style="font-weight:bold">'.$val->characteristic_value.'</a>, ';
  900.                     $values.=$val->characteristic_id.',';
  901.                 }
  902.             }
  903.             $html=$this->getDeleteButton($filter, $divName, $values, $html, $br);
  904.         }
  905.  
  906.         //DISPLAY MANUFACTURERS
  907.         if($filter->filter_data=='manufacturers'){
  908.             $manufacturers=$this->getManufacturers($filter);
  909.             $val='';
  910.             foreach($manufacturers as $manufacturer){
  911.                 if(!empty($selected) && is_array($selected) && in_array($manufacturer->category_id, $selected)){
  912.                     $html.='> <a class="hikashop_filter_list_selected" style="font-weight:bold">'.$manufacturer->category_name.'</a>, ';
  913.                     $val.=$manufacturer->category_id.',';
  914.                 }
  915.             }
  916.             $html=$this->getDeleteButton($filter, $divName, $val, $html,$br);
  917.         }
  918.  
  919.         //DISPLAY FIELDS
  920.         if($filter->filter_data=='custom_field'){
  921.             $field=$this->getFields($filter);
  922.             if(is_array($field)) $field=reset($field);
  923.             $values='';
  924.             if(isset($field->field_value) && is_array($field->field_value)){
  925.                 foreach($field->field_value as $val){
  926.                     if(!empty($selected) && is_array($selected) && in_array($val[0], $selected)){
  927.                         $html.='> <a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::_($val[1]).'</a>, ';
  928.                         $values.=$val[0].',';
  929.                     }
  930.                 }
  931.  
  932.             }else{
  933.                 if(is_array($selected)){
  934.                     $value = implode(' - ',$selected);
  935.                 }
  936.                 $value = str_replace('::',' - ',$value);
  937.                 $html.='> <a class="hikashop_filter_list_selected" style="font-weight:bold">'.$value.'</a>, ';
  938.             }
  939.             $html=$this->getDeleteButton($filter, $divName, $selected, $html, $br);
  940.         }
  941.  
  942.         //DISPLAY SORT
  943.         if($filter->filter_data=='sort'){
  944.             if($selected[0]=='lth'){
  945.                 $html.='> <a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::_('ASCENDING' ).'</a>, ';
  946.             }
  947.             if($selected[0]=='htl'){
  948.                 $html.='> <a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::_('DESCENDING' ).'</a>, ';
  949.             }
  950.             $html=$this->getDeleteButton($filter, $divName, $selected[0].',', $html, $br);
  951.         }
  952.  
  953.         //CURSOR
  954.         if($filter->filter_type=='cursor'){
  955.             if(!is_array($selected)){
  956.                 $selected=explode(' - ', $selected[0]);
  957.             }
  958.             $html='<a class="hikashop_filter_list_selected" style="font-weight:bold">'.$selected[0].' - '.$selected[1].'</a>, ';
  959.             $html=$this->getDeleteButton($filter, $divName, 11, $html, $br);
  960.         }
  961.  
  962.         $html=$this->titlePosition($filter, $html, true);
  963.         return $html;
  964.     }
  965.  
  966.     function getDeleteButton($filter, $divName, $val, $html, $br, $onlyButton=false, $id=''){
  967.         if($onlyButton){
  968.             if(empty($id)){ $id='filter_'.$filter->filter_namekey.'_'.$divName; }
  969.             return '<a href="#" style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\''.$id.'\').value=\' \'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();return false;"><img src="'.HIKASHOP_IMAGES.'delete2.png" /></a>';
  970.         }
  971.         $html=substr($html,0,-2);
  972.         if(is_array($val)){
  973.             foreach($val as $v){
  974.                 $html.='<input type="hidden" name="filter_'.$filter->filter_namekey.'[]" id="filter_'.$filter->filter_namekey.'_'.$divName.'" value="'.$v.'" />';
  975.             }
  976.         }else{
  977.             if($filter->filter_data=='sort'){
  978.                 if(isset($val) && !empty($val)){
  979.                     $selected=explode('--',$val);
  980.                     $selected[1]=substr($selected[1], 0, 3);
  981.                 }
  982.  
  983.                 if(isset($fields[$selected[0]])){ $typeName=$fields[$selected[0]]->field_realname; }
  984.                 else if($selected[0]=='b.product_name'){ $typeName= JText::_('PRODUCT_NAME'); }
  985.                 else if($selected[0]=='price'){ $typeName= JText::_('PRICE'); }
  986.                 else if($selected[0]=='b.product_average_score'){ $typeName= JText::_('RATING'); }
  987.                 else if($selected[0]=='b.product_created' || $selected[0]=='b.product_modified'){ $typeName= JText::_('RECENT'); }
  988.                 else if($selected[0]=='b.product_sales'){ $typeName= JText::_('SALES'); }
  989.                 else if($selected[0]=='b.product_hit'){ $typeName= JText::_('CLICKS'); }
  990.                 else{ $typeName=JText::_('PRODUCT_'.$selected[0]);  }
  991.  
  992.                 if(JText::_('SORT_ASCENDING_'.$typeName)!='SORT_ASCENDING_'.$typeName){ $asc_name=JText::_('SORT_ASCENDING_'.$typeName); }
  993.                 else{ $asc_name=JText::sprintf('SORT_ASCENDING', $typeName); }
  994.  
  995.                 if(JText::_('SORT_DESCENDING_'.$typeName)!='SORT_DESCENDING_'.$typeName){ $desc_name=JText::_('SORT_DESCENDING_'.$typeName); }
  996.                 else{ $desc_name=JText::sprintf('SORT_DESCENDING', $typeName); }
  997.  
  998.                 if($selected[1]=='lth'){ $html.='<span>'.$asc_name.'</span>'; }
  999.                 else{  $html.='<span>'.$desc_name.'</span>'; }
  1000.             }
  1001.             $val=substr($val,0,-1);
  1002.             $html.='<input type="hidden" name="filter_'.$filter->filter_namekey.'" id="filter_'.$filter->filter_namekey.'_'.$divName.'" value="'.$val.'" />';
  1003.         }
  1004.         $html.='  <a href="#" style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\' \'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();return false;"><img src="'.HIKASHOP_IMAGES.'delete2.png" /></a><br/>';
  1005.         return $html;
  1006.     }
  1007.  
  1008.     function getUnitSelect($filter, $type, $i=0){
  1009.         $case=' case';
  1010.         $weightHelper=hikashop_get('helper.weight');
  1011.         $volumeHelper=hikashop_get('helper.volume');
  1012.         $config =& hikashop_config();
  1013.         $defaulUnit='cm';
  1014.         if($type=='weight'){
  1015.             $infoType='b.product_weight';
  1016.             $unitType='b.product_weight_unit';
  1017.             $units=$weightHelper->conversion;
  1018.             $defaulUnit='kg';
  1019.         }else if($type=='volume'){
  1020.             $infoType='(b.product_width*b.product_length*b.product_height)';
  1021.             $unitType='b.product_dimension_unit';
  1022.             $units=$volumeHelper->conversion;
  1023.         }else if($type=='surface'){
  1024.             $infoType[]='b.product_width';
  1025.             $infoType[]='b.product_length';
  1026.             $unitType='b.product_dimension_unit';
  1027.             $units=$volumeHelper->conversionDimension;
  1028.         }else if($type=='height' || $type=='length' || $type=='width'){
  1029.             $unitType='b.product_dimension_unit';
  1030.             $units=$volumeHelper->conversionDimension;
  1031.             if($type=='height'){ $infoType='b.product_height';  }
  1032.             if($type=='length'){ $infoType='b.product_length';  }
  1033.             if($type=='width'){ $infoType='b.product_width';    }
  1034.         }elseif($type=='price'){
  1035.             $currentCurrency = hikashop_getCurrency();
  1036.             $unitType='b.price_value';
  1037.             $currencyType = hikashop_get('type.currency');
  1038.             $currencyClass = hikashop_get('class.currency');
  1039.             $dstCurrency = $currencyClass->get($currentCurrency);
  1040.             $currencyType->load(0);
  1041.             $currencies = $currencyType->currencies;
  1042.             $config =& hikashop_config();
  1043.             $main_currency = $config->get('main_currency',1);
  1044.             if($config->get('price_with_tax')){
  1045.                 $categoryClass=hikashop_get('class.category');
  1046.                 $main = 'tax';
  1047.                 $categoryClass->getMainElement($main);
  1048.                 $tax_categories = $categoryClass->getChilds($main);
  1049.                 $taxes = array();
  1050.                 foreach($tax_categories as $tax_category){
  1051.                     $taxes[$tax_category->category_id] = (float)$currencyClass->getTax(hikashop_getZone(),$tax_category->category_id);
  1052.                 }
  1053.                 $taxes[0] = 0;
  1054.             }
  1055.             foreach($currencies as $currency){
  1056.  
  1057.                 $calculatedVal=$unitType;
  1058.                 if($main_currency!=$currency->currency_id){
  1059.                     if(bccomp($currency->currency_percent_fee,0,2)){
  1060.                         $calculatedVal='('.$calculatedVal.'*'.(floatval($currency->currency_percent_fee+100)/100.0).')';
  1061.                     }
  1062.                     $calculatedVal='('.$calculatedVal.'/'.floatval($currency->currency_rate).')';
  1063.                 }
  1064.                 if($main_currency!=$currentCurrency){
  1065.                     $calculatedVal='('.$calculatedVal.'*'.floatval($dstCurrency->currency_rate).')';
  1066.                     if(bccomp($dstCurrency->currency_percent_fee,0,2)){
  1067.                         $calculatedVal='('.$calculatedVal.'*'.(floatval($dstCurrency->currency_percent_fee+100)/100.0).')';
  1068.                     }
  1069.                 }else{
  1070.                     $case .= ' when b.price_currency_id IS NULL then 0';
  1071.                 }
  1072.                 if(!empty($taxes)){
  1073.                     $ids=array();
  1074.                     foreach($taxes as $id => $tax){
  1075.                         if($id!=0){
  1076.                             $ids[]=$id;
  1077.                             $case .= ' when b.price_currency_id = \''.$currency->currency_id.'\' and b.product_tax_id = \''.$id.'\' then '.$calculatedVal.'+'.$calculatedVal.'*'.$tax;
  1078.                         }
  1079.                     }
  1080.                     $case .= ' when b.price_currency_id = \''.$currency->currency_id.'\' and b.product_tax_id NOT IN (\''.implode('\',\'',$ids).'\') then '.$calculatedVal;
  1081.                 }else{
  1082.                     $case .= ' when b.price_currency_id = \''.$currency->currency_id.'\' then '.$calculatedVal;
  1083.                 }
  1084.  
  1085.             }
  1086.             $case.= ' end ';
  1087.             return $case;
  1088.         }else{
  1089.             return '';
  1090.         }
  1091.  
  1092.         if(isset($filter->filter_options['information_unit'])){
  1093.             $selectedUnit=$filter->filter_options['information_unit'];
  1094.         }else{
  1095.             $selectedUnit=$defaulUnit;
  1096.         }
  1097.         foreach( $units as $key => $unit){
  1098.             $calculatedVal='';
  1099.             if($key==$selectedUnit){ $val=1; }
  1100.             else{ $val=$unit[$selectedUnit]; }
  1101.             if(is_array($infoType)){
  1102.                 foreach($infoType as $type){
  1103.                     $calculatedVal.='('.$type.'*'.$val.')*';
  1104.                 }
  1105.                 $calculatedVal=substr($calculatedVal,0,-1);
  1106.             }else{
  1107.                 $calculatedVal=$infoType.'*'.$val;
  1108.             }
  1109.             $case .= ' when '.$unitType.' = \''.$key.'\' then '.$calculatedVal;
  1110.         }
  1111.         $case.= ' else '.$unitType.' end ';
  1112.         return $case;
  1113.     }
  1114.  
  1115.     function titlePosition($filter, $html='', $list=false, $opt=''){
  1116.         $name=$this->trans($filter->filter_name);
  1117.         if($list && $filter->filter_options['title_position']='inside'){
  1118.             $position='top';
  1119.         }
  1120.         else{
  1121.             $position=$filter->filter_options['title_position'];
  1122.         }
  1123.         switch ($position){
  1124.             case 'bottom':
  1125.                 $html=$html.'<br/>'.$name.' '.$opt;
  1126.                 break;
  1127.             case 'top':
  1128.                 $html=$name.' '.$opt.'<br/>'.$html;
  1129.                 break;
  1130.             case 'left':
  1131.                 $html=$name.' '.$opt.' '.$html;
  1132.                 break;
  1133.             case 'right':
  1134.                 $html=$html.' '.$name.' '.$opt;
  1135.                 break;
  1136.         }
  1137.         return $html;
  1138.     }
  1139.  
  1140.     function trans($name){
  1141.         $val = preg_replace('#[^a-z0-9]#i','_',strtoupper($name));
  1142.         $trans = JText::_($val);
  1143.         if($val==$trans){
  1144.             $trans = $name;
  1145.         }
  1146.         return '<span class="hikashop_filter_title">'.$trans.'</span>';
  1147.     }
  1148.  
  1149.     function getCategories($filter, $datas=''){
  1150.         $optionElement=''; $left='';
  1151.         if(!empty($datas['products'])){
  1152.             $left=' LEFT JOIN '.hikashop_table('product_category').' AS b ON a.category_id=b.category_id ';
  1153.         foreach($datas['products'] as $data){
  1154.             $optionElement[$data->product_id]=$data->product_id;
  1155.         }
  1156.         $optionElement='AND b.product_id IN ('.implode(',', $optionElement).')';
  1157.         }
  1158.         if(!empty($filter->filter_options['parent_category_id'])){
  1159.             $parentCat=$filter->filter_options['parent_category_id'];
  1160.         }else{
  1161.             $parentCat=0;
  1162.         }
  1163.         $database = JFactory::getDBO();
  1164.         $query='SELECT * FROM '.hikashop_table('category').' AS a '.$left.' WHERE category_parent_id='.(int)$parentCat.' '.$optionElement.' ORDER BY a.category_ordering ASC';
  1165.         $database->setQuery($query);
  1166.         $categories_name=$database->loadObjectList('category_id');
  1167.         return $categories_name;
  1168.     }
  1169.  
  1170. //  function getCharacteristics($filter, $datas=''){
  1171. //      $optionElement=''; $left='';
  1172. //      if(!empty($datas['products'])){
  1173. //          $left=' LEFT JOIN '.hikashop_table('variant').' AS b ON a.characteristic_id=b.variant_characteristic_id ';
  1174. //      foreach($datas['products'] as $data){
  1175. //          $optionElement[$data->product_id]=$data->product_id;
  1176. //      }
  1177. //      $optionElement='AND b.variant_product_id IN ('.implode(',', $optionElement).')';
  1178. //      }
  1179. //    $database = JFactory::getDBO();
  1180. //    $query='SELECT * FROM '.hikashop_table('characteristic').' AS a '.$left.' WHERE characteristic_parent_id='.$filter->filter_options['filter_charac'].' '.$optionElement.'';
  1181. //    $database->setQuery($query);
  1182. //    $characteristic_values=$database->loadObjectList();
  1183. //    return $characteristic_values;
  1184. //  }
  1185.     function getCharacteristics($filter, $datas=''){
  1186.         $optionElement=''; $left='';
  1187.         $database = JFactory::getDBO();
  1188.         if(!empty($datas['products'])){
  1189.             $left=' LEFT JOIN '.hikashop_table('variant').' AS b ON a.characteristic_id=b.variant_characteristic_id ';
  1190.             $option_pid = array();
  1191.             foreach($datas['products'] as $data){
  1192.                 $option_pid[$data->product_id]=$data->product_id;
  1193.             }
  1194.             $query='SELECT product_id FROM '.hikashop_table('product').' WHERE product_parent_id IN ('.implode(',',$option_pid).')';
  1195.             $database->setQuery($query);
  1196.             $results = $database->loadObjectList();
  1197.             $result_pid = array();
  1198.             foreach($results as $result){
  1199.                 $result_pid[] = $result->product_id;
  1200.             }
  1201.             if(!empty($result_pid))
  1202.                 $optionElement='AND b.variant_product_id IN ('.implode(',', $result_pid).')';
  1203.         }
  1204.         $config =& hikashop_config();
  1205.         $sort = $config->get('characteristics_values_sorting');
  1206.         if($sort=='old'){
  1207.             $order = 'characteristic_id ASC';
  1208.         }elseif($sort=='alias'){
  1209.             $order = 'characteristic_alias ASC';
  1210.         }elseif($sort=='ordering'){
  1211.             $order = 'characteristic_ordering ASC';
  1212.         }else{
  1213.             $order = 'characteristic_value ASC';
  1214.         }
  1215.         $query='SELECT DISTINCT a.* FROM '.hikashop_table('characteristic').' AS a '.$left.' WHERE characteristic_parent_id='.$filter->filter_options['filter_charac'].' '.$optionElement.' ORDER BY a.'.$order;
  1216.         $database->setQuery($query);
  1217.         $characteristic_values=$database->loadObjectList();
  1218.         return $characteristic_values;
  1219.     }
  1220.  
  1221.     function getManufacturers($filter, $datas=''){
  1222.         $optionElement=''; $left='';
  1223.         if(!empty($datas['products'])){
  1224.             $left=' LEFT JOIN '.hikashop_table('product').' AS b ON a.category_id=b.product_manufacturer_id ';
  1225.             foreach($datas['products'] as $data){
  1226.                 $optionElement[$data->product_id]=$data->product_id;
  1227.             }
  1228.             $optionElement='AND b.product_id IN ('.implode(',', $optionElement).')';
  1229.         }
  1230.         $database = JFactory::getDBO();
  1231.         $query='SELECT a.* FROM '.hikashop_table('category').' AS a '.$left.' WHERE a.category_type="manufacturer" AND a.category_parent_id!=\'1\' '.$optionElement.' AND a.category_published=1 ORDER BY a.category_ordering ASC';
  1232.         $database->setQuery($query);
  1233.         $manufacturers=$database->loadObjectList('category_id');
  1234.         return $manufacturers;
  1235.     }
  1236.  
  1237.     function getFields($filter, $datas=''){
  1238.         $database = JFactory::getDBO();
  1239.         $query='SELECT * FROM '.hikashop_table('field').' WHERE field_namekey = \''.$filter->filter_options['custom_field'].'\'';
  1240.         $database->setQuery($query);
  1241.         $field=$database->loadObject();
  1242.  
  1243.         if(!empty($datas['products'])){
  1244.             foreach($datas['products'] as $data){
  1245.                 $optionElement[$data->product_id]=(int)$data->product_id;
  1246.             }
  1247.             $optionElement='product_id IN ('.implode(',', $optionElement).')';
  1248.  
  1249.             $query='SELECT DISTINCT '.$filter->filter_options['custom_field'].' FROM '.hikashop_table('product').' WHERE '.$optionElement.'';
  1250.             $database->setQuery($query);
  1251.             if(!HIKASHOP_J25){
  1252.                 $values=$database->loadResultArray();
  1253.             } else {
  1254.                 $values=$database->loadColumn();
  1255.             }
  1256.             //handle multi select fields when several values have been selected
  1257.             foreach($values as $val){
  1258.                 $els = explode(',',$val);
  1259.                 if(count($els)>1){
  1260.                     foreach($els as $el){
  1261.                         $values[]=$el;
  1262.                     }
  1263.                 }
  1264.             }
  1265.         }
  1266.  
  1267.         if(!empty($field->field_value)){
  1268.             $field->field_value=explode("\n", $field->field_value);
  1269.             $unset=array();
  1270.             foreach($field->field_value as $key => $val){
  1271.                 $temp=explode("::", $val);
  1272.                 if(!empty($datas['products']) && !in_array($temp[0],$values)){
  1273.                     $unset[]=$key;
  1274.                 }else{
  1275.                     $field->field_value[$key]=array($temp[0],$temp[1]);
  1276.                 }
  1277.             }
  1278.             if(!empty($unset)){
  1279.                 foreach($unset as $u){
  1280.                     unset($field->field_value[$u]);
  1281.                 }
  1282.             }
  1283.         }
  1284.  
  1285.         return $field;
  1286.     }
  1287.  
  1288.     function formatUnits($filter, $key, $value){
  1289.         $currencyClass = hikashop_get('class.currency');
  1290.         $currency = hikashop_getCurrency();
  1291.         $formatVal= $value;
  1292.         $oldVal=0;
  1293.         if($key!=0){ $oldVal=$filter->filter_value[$key-1]; }
  1294.         if($filter->filter_data=='price'){
  1295.             $formatVal=$currencyClass->format($formatVal,$currency);
  1296.             if($key!=0){  $oldVal=$currencyClass->format($oldVal,$currency); }
  1297.         }else if(isset($filter->filter_options['information_unit'])){
  1298.             $formatVal=$formatVal.$filter->filter_options['information_unit'];
  1299.             if($key!=0){  $oldVal=$oldVal.$filter->filter_options['information_unit']; }
  1300.         }
  1301.         $array=array();
  1302.         $array[]=$formatVal;
  1303.         $array[]=$oldVal;
  1304.         return $array;
  1305.     }
  1306.  
  1307.     function checkCurrency($filter){
  1308.         $currency = hikashop_getCurrency();
  1309.         if($filter->filter_data=='price' && !in_array($currency, $filter->filter_options['currencies'])){
  1310.             return false;
  1311.         }
  1312.         return true;
  1313.     }
  1314. }
  1315.  
  1316. class hikashopTextClass extends hikashopFilterTypeClass{
  1317.  
  1318.     function display($filter, $divName, &$parent, $datas=''){
  1319.         $html='';
  1320.         $name='';
  1321.         $selected=parent::display($filter, $divName, $parent);
  1322.  
  1323.         if(!is_array($selected)){
  1324.             $selected = array($selected);
  1325.         }
  1326.  
  1327.         if(!empty($selected)){
  1328.             $name=htmlentities($selected[0], ENT_COMPAT, 'UTF-8');
  1329.         }
  1330.  
  1331.         if($filter->filter_deletable && ( isset($selected[0]) && $selected[0]!='none' && !in_array($selected[0],array(" ",'')))){
  1332.             $html=parent::displayInList($filter, $divName, $selected);
  1333.             return $html;
  1334.         }
  1335.  
  1336.         $style='';
  1337.         if($filter->filter_options['textBoxSize']){
  1338.             $style='style="width: 90%;"';
  1339.         }
  1340.  
  1341.         $onBlur='';
  1342.         if($filter->filter_direct_application){
  1343.             $onBlur='onblur="document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"';
  1344.         }
  1345.  
  1346.  
  1347.         if($filter->filter_options['title_position']=='inside'){
  1348.             $onClick='';
  1349.             if(empty($name)){
  1350.                 $name=$filter->filter_name;
  1351.                 $onClick=' onclick="this.value=\'\';"';
  1352.             }
  1353.             $html='<input '.$style.' name="filter_'.$filter->filter_namekey.'" '.$onBlur.' style="width:90%;" type="text" '.$onClick.' id="filter_text_'.$filter->filter_namekey.'" value="'.$name.'"/>';
  1354.         }else{
  1355.             $html = '<input '.$style.' name="filter_'.$filter->filter_namekey.'" '.$onBlur.' type="text" id="filter_text_'.$filter->filter_namekey.'" value="'.$name.'">';
  1356.         }
  1357.  
  1358.  
  1359.  
  1360. //      if($filter->filter_direct_application){
  1361. //          $cart = hikashop_get('helper.cart');
  1362. //          $html.= $cart->displayButton(JText::_('GO'),'filter',$this->params,'#','return false;','id="hikashop_filter_direct_button_'.$filter->filter_namekey);
  1363. //      }
  1364.         $html=parent::titlePosition($filter, $html);
  1365.         return $html;
  1366.     }
  1367. }
  1368.  
  1369. class hikashopSingledropdownClass extends hikashopFilterTypeClass{
  1370.  
  1371.     function display($filter, $divName, &$parent, $datas='', $multiple='', $tab=''){
  1372.         $selected=parent::display($filter, $divName, $parent);
  1373.         if(!is_array($selected)){
  1374.             $selected=array($selected);
  1375.         }
  1376.         if(!($filter->filter_dynamic)){
  1377.             $datas='';
  1378.         }
  1379.  
  1380.         if(!empty($selected)){
  1381.             if($filter->filter_deletable && $selected[0]!=$filter->filter_namekey && $selected[0]!='none' && ( isset($selected[0]) && !in_array($selected[0],array(" ",'')))){
  1382.                 $html=parent::displayInList($filter, $divName, $selected, $tab);
  1383.                 return $html;
  1384.             }
  1385.         }
  1386.  
  1387.         $onClick='';
  1388.         if($filter->filter_direct_application){
  1389.             $onClick='onchange="document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"';
  1390.         }
  1391.         $html='';
  1392.         if(!empty($tab)){
  1393.             $html.= '<input type="hidden" name="filter_'.$filter->filter_namekey.'_'.$divName.'" value=" "/>';
  1394.         }
  1395.         $html.='<SELECT '.$multiple.$onClick.' size='.$filter->filter_options['filter_size'].' name="filter_'.$filter->filter_namekey.$tab.'" id="filter_'.$filter->filter_namekey.'_'.$divName.$tab.'">';
  1396.  
  1397.         if($filter->filter_options['title_position']=='inside'){
  1398.             $html.='<OPTION VALUE="none">'.$filter->filter_name.'</OPTION>';
  1399.         }else if($filter->filter_data!='sort'){
  1400.             $html.='<OPTION VALUE="filter_'.$filter->filter_namekey.'">'.JText::_( 'HIKA_ALL' ).'</OPTION>';
  1401.         }
  1402.  
  1403.         //DISPLAY CATEGORIES
  1404.         if($filter->filter_data=='category'){
  1405.             $categories_name=parent::getCategories($filter, $datas);
  1406.             if(!empty($categories_name)){
  1407.                 foreach($categories_name as $cat){
  1408.                     $selectedItem='';
  1409.                     if(!empty($selected) && in_array($cat->category_id, $selected)){
  1410.                         $selectedItem='selected="selected"';
  1411.                     }
  1412.                     $html.='<OPTION '.$onClick.' '.$selectedItem.' value="'.$cat->category_id.'">'.$cat->category_name.'</OPTION>';
  1413.                 }
  1414.             }
  1415.         }
  1416.  
  1417.         //DISPLAY PRICES OR INFORMATION
  1418.         if(($filter->filter_data=='price' || $filter->filter_data=='information' || $filter->filter_data=='custom_field') && !empty($filter->filter_value)){
  1419.             if(parent::checkCurrency($filter)==false){ return false;}
  1420.             $size=count($filter->filter_value);
  1421.             if($size){
  1422.                 foreach($filter->filter_value as $key => $value){
  1423.                     $selectedItem='';
  1424.                     list($formatVal, $oldVal)=parent::formatUnits($filter, $key, $value);
  1425.                     if($key==0){
  1426.                         if(!empty($selected) && in_array('::'.$value, $selected)){
  1427.                             $selectedItem='selected="selected"';
  1428.                         }
  1429.                         if(empty($filter->filter_options['defined_limits'])){
  1430.                             $html.='<OPTION '.$selectedItem.' value="::'.$value.'">'.JText::sprintf('X_AND_INFERIOR',$formatVal).'</OPTION>';
  1431.                         }
  1432.                     }else {
  1433.                         if(!empty($selected) && in_array($filter->filter_value[$key-1].'::'.$value, $selected)){
  1434.                             $selectedItem='selected="selected"';
  1435.                         }
  1436.                         $html.='<OPTION '.$selectedItem.' value="'.$filter->filter_value[$key-1].'::'.$value.'">'.JText::sprintf('FROM_X_TO_Y', $oldVal, $formatVal ).'</OPTION>';
  1437.                     }
  1438.                     if($key==$size-1){
  1439.                         $selectedItem='';
  1440.                         if(!empty($selected) && in_array($value.'::', $selected)){
  1441.                             $selectedItem='selected="selected"';
  1442.                         }
  1443.                         if(empty($filter->filter_options['defined_limits'])){
  1444.                             $html.='<OPTION '.$selectedItem.' value="'.$value.'::">'.JText::sprintf('X_AND_SUPERIOR', $formatVal ).'</OPTION>';
  1445.                         }
  1446.                     }
  1447.                 }
  1448.             }
  1449.         }
  1450.  
  1451.         //DISPLAY CHARACTERISTICS
  1452.         if($filter->filter_data=='characteristic'){
  1453.             $characteristic_values=parent::getCharacteristics($filter, $datas);
  1454.             if(!empty($characteristic_values)){
  1455.                 foreach($characteristic_values as $val){
  1456.                     $selectedItem='';
  1457.                     if(!empty($selected) && in_array($val->characteristic_id, $selected)){
  1458.                         $selectedItem='selected="selected"';
  1459.                     }
  1460.                     $html.='<OPTION '.$selectedItem.' value="'.$val->characteristic_id.'">'.$val->characteristic_value.'</OPTION>';
  1461.                 }
  1462.             }
  1463.         }
  1464.  
  1465.         //DISPLAY MANUFACTURERS
  1466.         if($filter->filter_data=='manufacturers'){
  1467.             $manufacturers=parent::getManufacturers($filter, $datas);
  1468.             if(!empty($manufacturers)){
  1469.                 foreach($manufacturers as $manufacturer){
  1470.                     $selectedItem='';
  1471.                     if(!empty($selected) && in_array($manufacturer->category_id, $selected)){
  1472.                         $selectedItem='selected="selected"';
  1473.                     }
  1474.                     $html.='<OPTION '.$selectedItem.' name="'.$filter->filter_data.'" value="'.$manufacturer->category_id.'">'.$manufacturer->category_name.'</OPTION>';
  1475.                 }
  1476.             }
  1477.         }
  1478.  
  1479.         //DISPLAY FIELDS
  1480.         if($filter->filter_data=='custom_field'){
  1481.             $field=parent::getFields($filter, $datas);
  1482.             if(isset($field->field_value) && is_array($field->field_value)){
  1483.                 foreach($field->field_value as $val){
  1484.                     $selectedItem='';
  1485.                     /*With this the default field is selected by default (not sure if it's interesting)
  1486.                      * if($val[0]==$field->field_default){
  1487.                         $selectedItem='selected="selected"';
  1488.                     }*/
  1489.                     if(!empty($selected) && in_array($val[0], $selected)){
  1490.                         $selectedItem='selected="selected"';
  1491.                     }
  1492.                     if(empty($val[0]) && $field->field_required) continue;
  1493.                     $html.='<OPTION '.$selectedItem.' name="'.$filter->filter_data.'" value="'.$val[0].'">'.JText::_($val[1]).'</OPTION>';
  1494.                 }
  1495.             }
  1496.         }
  1497.  
  1498.         //DISPLAY SORT
  1499.         if($filter->filter_data=='sort'){
  1500.             if($filter->filter_options['title_position']!='inside'){
  1501.                 $html.='<OPTION value="none">'.JText::_('HIKA_NONE' ).'</OPTION>';
  1502.             }
  1503.  
  1504.             $null=null;
  1505.             $fieldsClass = hikashop_get('class.field');
  1506.             $fields=$fieldsClass->getFields('frontcomp',$null,'product');
  1507.  
  1508.             if(!is_array($filter->filter_options['sort_by'])){
  1509.                 $temp = $filter->filter_options['sort_by'];
  1510.                 $filter->filter_options['sort_by'] = array();
  1511.                 $filter->filter_options['sort_by'][] = $temp;
  1512.             }
  1513.  
  1514.             foreach($filter->filter_options['sort_by'] as $theType){
  1515.                 $selectedItem1=''; $selectedItem2='';
  1516.                 if(!empty($selected)){
  1517.                     if($selected[0]==$theType.'--lth'){
  1518.                         $selectedItem1='selected="selected"';
  1519.                     }
  1520.                     if($selected[0]==$theType.'--htl'){
  1521.                         $selectedItem2='selected="selected"';
  1522.                     }
  1523.                 }
  1524.  
  1525.                 if(isset($fields[$theType])){ $typeName=$fields[$theType]->field_realname; }
  1526.                 else if($theType=='b.product_name'){ $typeName= JText::_('PRODUCT_NAME'); }
  1527.                 else if($theType=='price'){ $typeName= JText::_('PRICE'); }
  1528.                 else if($theType=='b.product_average_score'){ $typeName= JText::_('RATING'); }
  1529.                 else if($theType=='b.product_created' || $theType=='b.product_modified'){ $typeName= JText::_('RECENT'); }
  1530.                 else if($theType=='b.product_sales'){ $typeName= JText::_('SALES'); }
  1531.                 else if($theType=='b.product_hit'){ $typeName= JText::_('CLICKS'); }
  1532.                 else{ $typeName=JText::_('PRODUCT_'.$theType);  }
  1533.  
  1534.                 if(JText::_('SORT_ASCENDING_'.$typeName)!='SORT_ASCENDING_'.$typeName){ $asc_name=JText::_('SORT_ASCENDING_'.$typeName); }
  1535.                 else{ $asc_name=JText::sprintf('SORT_ASCENDING', $typeName); }
  1536.  
  1537.                 if(JText::_('SORT_DESCENDING_'.$typeName)!='SORT_DESCENDING_'.$typeName){ $desc_name=JText::_('SORT_DESCENDING_'.$typeName); }
  1538.                 else{ $desc_name=JText::sprintf('SORT_DESCENDING', $typeName); }
  1539.  
  1540.                 $html.='<OPTION '.$selectedItem1.' value="'.$theType.'--lth">'.$asc_name.'</OPTION>';
  1541.                 $html.='<OPTION '.$selectedItem2.' value="'.$theType.'--htl">'.$desc_name.'</OPTION>';
  1542.             }
  1543.         }
  1544.  
  1545.         $html.='</SELECT>';
  1546.         if($filter->filter_options['title_position']!='inside'){
  1547.             $html=parent::titlePosition($filter, $html);
  1548.         }
  1549.  
  1550.         return $html;
  1551.     }
  1552.  
  1553. }
  1554.  
  1555. class hikashopRadioClass extends hikashopFilterTypeClass{
  1556.  
  1557.     function display($filter, $divName, &$parent, $datas='', $type='radio', $tab=''){
  1558.         $selected=parent::display($filter, $divName, $parent);
  1559.  
  1560.         if(!($filter->filter_dynamic)){
  1561.             $datas='';
  1562.         }
  1563.         if(!is_array($selected)){
  1564.             $selected = array($selected);
  1565.         }
  1566.  
  1567.         if($filter->filter_deletable && isset($selected[0]) && $selected[0]!='none' && !in_array($selected[0],array(" ",''))){
  1568.             $html=parent::displayInList($filter, $divName, $selected, $tab);
  1569.             return $html;
  1570.         }
  1571.  
  1572.         $onClick='';
  1573.         if($filter->filter_direct_application){
  1574.             $onClick='onchange="document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"';
  1575.         }
  1576.  
  1577.         $html='';
  1578.         $br='';
  1579.         if(isset($filter->filter_options['button_align']) && $filter->filter_options['button_align']==0){ $br='<br/>'; }
  1580.         if(!empty($tab)){
  1581.             $html.= '<input type="hidden" name="filter_'.$filter->filter_namekey.'"  id="filter_'.$filter->filter_namekey.'_'.$divName.'" value=" "/>';
  1582.         }
  1583.         //DISPLAY CATEGORIES
  1584.         if($filter->filter_data=='category'){
  1585.             $categories_name=parent::getCategories($filter, $datas);
  1586.             if(!empty($categories_name)){
  1587.                 foreach($categories_name as $cat){
  1588.                     $checked='';$deleteButton='';
  1589.                     if(!empty($selected) && is_array($selected) && in_array($cat->category_id, $selected)){
  1590.                         $checked='checked="checked"';
  1591.                         if($type=='radio'){ $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true, 'filter_'.$filter->filter_id.'_'.$cat->category_id.'_'.$divName); }
  1592.                     }
  1593.                     $html.='<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked.' name="filter_'.$filter->filter_namekey.$tab.'"  type="'.$type.'" value="'.$cat->category_id.'" id="filter_'.$filter->filter_id.'_'.$cat->category_id.'_'.$divName.'"/><label for="filter_'.$filter->filter_id.'_'.$cat->category_id.'_'.$divName.'">'.$cat->category_name.'</label>'.$deleteButton.'</span>'.$br;
  1594.                 }
  1595.             }
  1596.         }
  1597.  
  1598.         //DISPLAY PRICES OR INFORMATION
  1599.         if(($filter->filter_data=='price' || $filter->filter_data=='information' || $filter->filter_data=='custom_field') && !empty($filter->filter_value)){
  1600.             if(parent::checkCurrency($filter)==false){ return false;}
  1601.             $size=count($filter->filter_value);
  1602.             if($size){
  1603.                 foreach($filter->filter_value as $key => $value){
  1604.                     $checked=''; $deleteButton='';
  1605.                     if($key>0){ $previousVal=$filter->filter_value[$key-1];}
  1606.                     list($formatVal, $oldVal)=parent::formatUnits($filter, $key, $value);
  1607.                     if($key==0){
  1608.                         if(!empty($selected) && is_array($selected) && in_array('::'.$value, $selected)){
  1609.                             $checked='checked="checked"';
  1610.                             if($type=='radio'){ $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true, 'filter_'.$filter->filter_id.'_'.$value.'' ); }
  1611.                         }
  1612.                         $html.='<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked.' type="'.$type.'" name="filter_'.$filter->filter_namekey.''.$tab.'" value="::'.$value.'" id="filter_'.$filter->filter_id.'_'.$value.'"/><label for="filter_'.$filter->filter_id.'_'.$value.'">'.JText::sprintf('X_AND_INFERIOR',$formatVal).'</label>'.$deleteButton.'</span>'.$br;
  1613.                         parent::getDeleteButton($filter, $divName, '', $html, true);
  1614.                     }else{
  1615.                         if(!empty($selected) && is_array($selected) && in_array($filter->filter_value[$key-1].'::'.$value, $selected)){
  1616.                             $checked='checked="checked"';
  1617.                             if($type=='radio'){ $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true, 'filter_'.$filter->filter_id.'_'.$value.'' ); }
  1618.                         }
  1619.                         $html.='<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked.' type="'.$type.'" name="filter_'.$filter->filter_namekey.''.$tab.'" value="'.$filter->filter_value[$key-1].'::'.$value.'" id="filter_'.$filter->filter_id.'_'.$value.'"/><label for="filter_'.$filter->filter_id.'_'.$value.'">'.JText::sprintf('FROM_X_TO_Y', $oldVal, $formatVal ).'</label>'.$deleteButton.'</span>'.$br;
  1620.                     }
  1621.                     if($key==$size-1){
  1622.                         $checked=''; $deleteButton='';
  1623.                         if(!empty($selected) && is_array($selected) && in_array($value.'::', $selected)){
  1624.                             $checked='checked="checked"';
  1625.                             if($type=='radio'){ $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true, 'filter_'.$filter->filter_id.'_'.$value.''); }
  1626.                         }
  1627.                         $html.='<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked.' type="'.$type.'" name="filter_'.$filter->filter_namekey.''.$tab.'" value="'.$value.'::" id="filter_'.$filter->filter_id.'_'.$value.'"/><label for="filter_'.$filter->filter_id.'_'.$value.'">'.JText::sprintf('X_AND_SUPERIOR', $formatVal ).'</label>'.$deleteButton.'</span>'.$br;
  1628.                         parent::getDeleteButton($filter, $divName, '', $html, true);
  1629.                     }
  1630.                 }
  1631.             }
  1632.         }
  1633.  
  1634.         //DISPLAY CHARACTERISTICS
  1635.         if($filter->filter_data=='characteristic'){
  1636.             $characteristic_values=parent::getCharacteristics($filter, $datas);
  1637.             if(!empty($characteristic_values)){
  1638.                 foreach($characteristic_values as $val){
  1639.                     $checked=''; $deleteButton='';
  1640.                     if(!empty($selected) && is_array($selected) && in_array($val->characteristic_id, $selected)){
  1641.                         $checked='checked="checked"';
  1642.                         if($type=='radio'){ $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true, 'filter_'.$filter->filter_id.'_'.$val->characteristic_id.'_'.$divName); }
  1643.                     }
  1644.                     $html.='<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked.' type="'.$type.'" name="filter_'.$filter->filter_namekey.$tab.'" value="'.$val->characteristic_id.'" id="filter_'.$filter->filter_id.'_'.$val->characteristic_id.'_'.$divName.'"/><label for="filter_'.$filter->filter_id.'_'.$val->characteristic_id.'_'.$divName.'">'.$val->characteristic_value.'</label>'.$deleteButton.'</span>'.$br;
  1645.                 }
  1646.             }
  1647.         }
  1648.  
  1649.         //DISPLAY MANUFACTURERS
  1650.         if($filter->filter_data=='manufacturers'){
  1651.             $manufacturers=parent::getManufacturers($filter, $datas);
  1652.             if(!empty($manufacturers)){
  1653.                 foreach($manufacturers as $manufacturer){
  1654.                     $checked=''; $deleteButton='';
  1655.                     if(!empty($selected) && is_array($selected) && in_array($manufacturer->category_id, $selected)){
  1656.                         $checked='checked="checked"';
  1657.                         if($type=='radio'){ $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true, 'filter_'.$filter->filter_id.'_'.$manufacturer->category_id.'_'.$divName); }
  1658.                     }
  1659.                     $html.='<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked.' type="'.$type.'" name="filter_'.$filter->filter_namekey.$tab.'" value="'.$manufacturer->category_id.'" id="filter_'.$filter->filter_id.'_'.$manufacturer->category_id.'_'.$divName.'"/><label for="filter_'.$filter->filter_id.'_'.$manufacturer->category_id.'_'.$divName.'">'.$manufacturer->category_name.'</label>'.$deleteButton.'</span>'.$br;
  1660.                 }
  1661.             }
  1662.         }
  1663.  
  1664.         //DISPLAY FIELDS
  1665.         if($filter->filter_data=='custom_field' && empty($filter->filter_value)){
  1666.             $field=parent::getFields($filter, $datas);
  1667.             if(!empty($field)){
  1668.                 if(is_array($field->field_value)){
  1669.                     foreach($field->field_value as $key => $val){
  1670.                         $checked='';
  1671.                         $deleteButton='';
  1672.                         $input='';
  1673.                         if(!empty($selected) && is_array($selected) && in_array($val[0], $selected)){
  1674.                             $checked='checked="checked"';
  1675.                             if($type=='radio'){
  1676.                                 $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true, 'field_'.$filter->filter_id.'_'.$key.'_'.$divName);
  1677.                             }
  1678.                         }
  1679.                         if($type!='hidden') $input = '<INPUT '.$onClick.' '.$checked.' type="'.$type.'" name="filter_'.$filter->filter_namekey.$tab.'" value='.$val[0].' id="field_'.$filter->filter_id.'_'.$key.'_'.$divName.'">';
  1680.                         $html.='<span class="hikashop_filter_checkbox">'.$input.'<label for="field_'.$filter->filter_id.'_'.$key.'_'.$divName.'">'.JText::_(JText::_($val[1])).'</label>'.$deleteButton.'</span>'.$br;
  1681.                     }
  1682.                 }
  1683.             }
  1684.         }
  1685.  
  1686.         //DISPLAY SORT
  1687.         if($filter->filter_data=='sort'){
  1688.  
  1689.  
  1690.             $null=null;
  1691.             $fieldsClass = hikashop_get('class.field');
  1692.             $fields=$fieldsClass->getFields('frontcomp',$null,'product');
  1693.  
  1694.             if(!is_array($filter->filter_options['sort_by'])){
  1695.                     $temp = $filter->filter_options['sort_by'];
  1696.                     $filter->filter_options['sort_by'] = array();
  1697.                     $filter->filter_options['sort_by'][] = $temp;
  1698.             }
  1699.             foreach($filter->filter_options['sort_by'] as $theType){
  1700.                 $checked1=''; $checked2='';$deleteButton=''; $deleteButton2='';
  1701.                 if(!empty($selected)){
  1702.                     if($selected[0]==$theType.'--lth'){
  1703.                         $checked1='checked="checked" id="filter_'.$filter->filter_namekey.'_'.$divName.'"';
  1704.                         if($type=='radio'){ $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true); }
  1705.                     }
  1706.                     if($selected[0]==$theType.'--htl'){
  1707.                         $checked2='checked="checked" id="filter_'.$filter->filter_namekey.'_'.$divName.'"';
  1708.                         if($type=='radio'){ $deleteButton2='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true); }
  1709.                     }
  1710.                 }
  1711.  
  1712.                 if(isset($fields[$theType])){ $typeName=$fields[$theType]->field_realname; }
  1713.                 else if($theType=='b.product_name'){ $typeName= JText::_('PRODUCT_NAME'); }
  1714.                 else if($theType=='price'){ $typeName= JText::_('PRICE'); }
  1715.                 else if($theType=='b.product_average_score'){ $typeName= JText::_('RATING'); }
  1716.                 else if($theType=='b.product_created' || $theType=='b.product_modified'){ $typeName= JText::_('RECENT'); }
  1717.                 else if($theType=='b.product_sales'){ $typeName= JText::_('SALES'); }
  1718.                 else if($theType=='b.product_hit'){ $typeName= JText::_('CLICKS'); }
  1719.                 else{ $typeName=JText::_('PRODUCT_'.$theType);  }
  1720.  
  1721.                 if(JText::_('SORT_ASCENDING_'.$typeName)!='SORT_ASCENDING_'.$typeName){ $asc_name=JText::_('SORT_ASCENDING_'.$typeName); }
  1722.                 else{ $asc_name=JText::sprintf('SORT_ASCENDING', $typeName); }
  1723.  
  1724.                 if(JText::_('SORT_DESCENDING_'.$typeName)!='SORT_DESCENDING_'.$typeName){ $desc_name=JText::_('SORT_DESCENDING_'.$typeName); }
  1725.                 else{ $desc_name=JText::sprintf('SORT_DESCENDING', $typeName); }
  1726.  
  1727.                 $html.='<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked1.' type="'.$type.'" name="filter_'.$filter->filter_namekey.$tab.'" value="'.$theType.'--lth">'.$asc_name.'</label>'.$deleteButton.'</span>'.$br;
  1728.                 $html.='<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked2.' type="'.$type.'" name="filter_'.$filter->filter_namekey.$tab.'" value="'.$theType.'--htl">'.$desc_name.'</label>'.$deleteButton2.'</span>'.$br;
  1729.             }
  1730.         }
  1731.  
  1732.         $html.='';
  1733.         $html=parent::titlePosition($filter, $html);
  1734.         return $html;
  1735.     }
  1736.  
  1737. }
  1738.  
  1739. class hikashopListClass extends hikashopFilterTypeClass{
  1740.  
  1741.     function display($filter, $divName, &$parent, $datas=''){
  1742.         $selected=parent::display($filter, $divName, $parent);
  1743.  
  1744.         if(!($filter->filter_dynamic)){
  1745.             $datas='';
  1746.         }
  1747.  
  1748.         if($filter->filter_deletable &&(is_array($selected) && !empty($selected) && $selected[0]!='none' && ( isset($selected[0]) && !in_array($selected[0],array(" ",''))))){
  1749.             $html=parent::displayInList($filter, $divName, $selected);
  1750.             return $html;
  1751.         }
  1752.  
  1753.         $html='<input type="hidden" id="filter_'.$filter->filter_namekey.'_'.$divName.'"  name="filter_'.$filter->filter_namekey.'" value=""/><ul class="hikashop_filter_list_style">';
  1754.  
  1755.         //DISPLAY CATEGORIES
  1756.         if($filter->filter_data=='category'){
  1757.             $categories_name=parent::getCategories($filter, $datas);
  1758.             if(!empty($categories_name)){
  1759.                 foreach($categories_name as $cat){
  1760.                     if(!empty($selected) &&  (is_numeric($selected)&&$cat->category_id==$selected) ||(is_array($selected) && in_array($cat->category_id, $selected))){
  1761.                         $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.$cat->category_name.'</a>';
  1762.                         $html.='<a style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"> <img src="'.HIKASHOP_IMAGES.'delete2.png" /></a></li>';
  1763.                      }else{
  1764.                         $html.'<li><a class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\''.$cat->category_id.'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'.$cat->category_name.'</a></li>';
  1765.                     }
  1766.                 }
  1767.             }
  1768.         }
  1769.  
  1770.         //DISPLAY PRICES OR INFORMATION
  1771.         if(($filter->filter_data=='price' || $filter->filter_data=='information' || $filter->filter_data=='custom_field') && !empty($filter->filter_value)){
  1772.             if(parent::checkCurrency($filter)==false){ return false;}
  1773.             $size=count($filter->filter_value);
  1774.             if(!empty($size)){
  1775.                 foreach($filter->filter_value as $key => $value){
  1776.                     list($formatVal, $oldVal)=parent::formatUnits($filter, $key, $value);
  1777.                     if($key==0){
  1778.                         if(!empty($selected) &&  is_array($selected) && in_array('::'.$value, $selected)){
  1779.                     $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::sprintf('X_AND_INFERIOR',$formatVal).'</a>';
  1780.                             $html.='<a style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"> <img src="'.HIKASHOP_IMAGES.'delete2.png" /></a></li>';
  1781.                         }else{
  1782.                     $html.='<li><a class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\'::'.$value.'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'.JText::sprintf('X_AND_INFERIOR',$formatVal).'</a></li>';
  1783.                         }
  1784.                     }else{
  1785.                         if(!empty($selected) &&  is_array($selected) && in_array($filter->filter_value[$key-1].'::'.$value, $selected)){
  1786.                             $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::sprintf('FROM_X_TO_Y', $oldVal, $formatVal ).'</a>';
  1787.                             $html.='<a style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"> <img src="'.HIKASHOP_IMAGES.'delete2.png" /></a></li>';
  1788.                         }else{
  1789.                     $html.='<li><a class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\''.$filter->filter_value[$key-1].'::'.$value.'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'   .JText::sprintf('FROM_X_TO_Y', $oldVal, $formatVal ).'</a></li>';
  1790.                         }
  1791.                     }
  1792.                     if($key==$size-1){
  1793.                         if(!empty($selected) &&  is_array($selected) && in_array($value.'::', $selected)){
  1794.                             $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::sprintf('X_AND_SUPERIOR', $formatVal ).'</a>';
  1795.                             $html.='<a style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"> <img src="'.HIKASHOP_IMAGES.'delete2.png" /></a></li>';
  1796.                         }else{
  1797.                             $html.='<li><a class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\''.$value.'::\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'.JText::sprintf('X_AND_SUPERIOR', $formatVal ).'</a></li>';
  1798.                         }
  1799.                     }
  1800.                 }
  1801.             }
  1802.         }
  1803.  
  1804.         //DISPLAY CHARACTERISTICS
  1805.         if($filter->filter_data=='characteristic'){
  1806.             $characteristic_values=parent::getCharacteristics($filter, $datas);
  1807.             if(!empty($characteristic_values)){
  1808.                 foreach($characteristic_values as $val){
  1809.                     if(!empty($selected) &&  is_array($selected) && in_array($val->characteristic_id, $selected)){
  1810.                         $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.$val->characteristic_value.'</a>';
  1811.                         $html.='<a style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"> <img src="'.HIKASHOP_IMAGES.'delete2.png" /></a></li>';
  1812.                      }else{
  1813.                         $html.='<li><a class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\''.$val->characteristic_id.'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'.$val->characteristic_value.'</a></li>';
  1814.                     }
  1815.                 }
  1816.             }
  1817.         }
  1818.  
  1819.         //DISPLAY MANUFACTURERS
  1820.         if($filter->filter_data=='manufacturers'){
  1821.             $manufacturers=parent::getManufacturers($filter, $datas);
  1822.             if(!empty($manufacturers)){
  1823.                 foreach($manufacturers as $manufacturer){
  1824.                     if(!empty($selected) && is_array($selected) && in_array($manufacturer->category_id, $selected)){
  1825.                         $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.$manufacturer->category_name.'</a>';
  1826.                         $html.='<a style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"> <img src="'.HIKASHOP_IMAGES.'delete2.png" /></a></li>';
  1827.                      }else{
  1828.                         $html.='<li><a class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\''.$manufacturer->category_id.'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'.$manufacturer->category_name.'</a></li>';
  1829.                      }
  1830.                 }
  1831.             }
  1832.         }
  1833.  
  1834.         //DISPLAY FIELDS
  1835.         if($filter->filter_data=='custom_field'){
  1836.             $field=parent::getFields($filter, $datas);
  1837.             if(is_array($field->field_value)){
  1838.                 foreach($field->field_value as $key => $val){
  1839.                     if(!empty($selected) && is_array($selected) && in_array($val[0], $selected)){
  1840.                         $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.JText::_($val[1]).'</a>';
  1841.                         $html.='<a style="cursor:pointer; text-decoration:none" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"> <img src="'.HIKASHOP_IMAGES.'delete2.png" /></a></li>';
  1842.                      }else{
  1843.                             $html.='<li><a class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\''.$val[0].'\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'.JText::_($val[1]).'</a><li>';
  1844.                     }
  1845.                 }
  1846.             }
  1847.         }
  1848.  
  1849.         //DISPLAY SORT
  1850.         if($filter->filter_data=='sort'){
  1851.  
  1852.             $null=null;
  1853.             $fieldsClass = hikashop_get('class.field');
  1854.             $fields=$fieldsClass->getFields('frontcomp',$null,'product');
  1855.  
  1856.             if(!is_array($filter->filter_options['sort_by'])){
  1857.                     $temp = $filter->filter_options['sort_by'];
  1858.                     $filter->filter_options['sort_by'] = array();
  1859.                     $filter->filter_options['sort_by'][] = $temp;
  1860.             }
  1861.             foreach($filter->filter_options['sort_by'] as $theType){
  1862.                 $checked1=''; $checked2='';$deleteButton=''; $deleteButton2='';
  1863.                 if(!empty($selected)){
  1864.                     if($selected[0]==$theType.'--lth'){
  1865.                         $checked1='checked="checked" id="filter_'.$filter->filter_namekey.'_'.$divName.'"';
  1866.                         $deleteButton='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true);
  1867.                     }
  1868.                     if($selected[0]==$theType.'--htl'){
  1869.                         $checked2='checked="checked" id="filter_'.$filter->filter_namekey.'_'.$divName.'"';
  1870.                         $deleteButton2='  '.parent::getDeleteButton($filter, $divName, '', $html, '', true);
  1871.                     }
  1872.                 }
  1873.  
  1874.                 if(isset($fields[$theType])){ $typeName=$fields[$theType]->field_realname; }
  1875.                 else if($theType=='b.product_name'){ $typeName= JText::_('PRODUCT_NAME'); }
  1876.                 else if($theType=='price'){ $typeName= JText::_('PRICE'); }
  1877.                 else if($theType=='b.product_average_score'){ $typeName= JText::_('RATING'); }
  1878.                 else if($theType=='b.product_created' || $theType=='b.product_modified'){ $typeName= JText::_('RECENT'); }
  1879.                 else if($theType=='b.product_sales'){ $typeName= JText::_('SALES'); }
  1880.                 else if($theType=='b.product_hit'){ $typeName= JText::_('CLICKS'); }
  1881.                 else{ $typeName=JText::_('PRODUCT_'.$theType);  }
  1882.  
  1883.                 if(JText::_('SORT_ASCENDING_'.$typeName)!='SORT_ASCENDING_'.$typeName){ $asc_name=JText::_('SORT_ASCENDING_'.$typeName); }
  1884.                 else{ $asc_name=JText::sprintf('SORT_ASCENDING', $typeName); }
  1885.  
  1886.                 if(JText::_('SORT_DESCENDING_'.$typeName)!='SORT_DESCENDING_'.$typeName){ $desc_name=JText::_('SORT_DESCENDING_'.$typeName); }
  1887.                 else{ $desc_name=JText::sprintf('SORT_DESCENDING', $typeName); }
  1888.  
  1889.                 if(!empty($checked1)){
  1890.                     $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.$asc_name.'</a>'.$deleteButton.'</li>';
  1891.                 }else{
  1892.                     $html.='<li><a  class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\''.$theType.'--lth\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'.$asc_name.'</a></li>';
  1893.                 }
  1894.                 if(!empty($checked2)){
  1895.                     $html.='<li><a class="hikashop_filter_list_selected" style="font-weight:bold">'.$desc_name.'</a>'.$deleteButton2.'<li>';
  1896.                 }else{
  1897.                     $html.='<li><a  class="hikashop_filter_list" onclick="document.getElementById(\'filter_'.$filter->filter_namekey.'_'.$divName.'\').value=\''.$theType.'--lth\'; document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();">'.$desc_name.'</a></li>';
  1898.                 }
  1899.             }
  1900.  
  1901.  
  1902.         }
  1903.  
  1904.         $html.='</ul>';
  1905.         $html=parent::titlePosition($filter, $html);
  1906.         return $html;
  1907.     }
  1908.  
  1909. }
  1910.  
  1911. class hikashopCursorClass extends hikashopFilterTypeClass{
  1912.  
  1913.     function display($filter, $divName, &$parent, $datas=''){
  1914.         $selected=parent::display($filter, $divName, $parent);
  1915.  
  1916.         if(!empty($selected) && !empty($selected[0])){
  1917.             $values=parent::display($filter, $divName, $parent, '_values');
  1918.             if(!is_array($values)){
  1919.                 $values = explode(' - ',$values);
  1920.             }
  1921.             if($filter->filter_deletable && $values[0]!='none' && ( isset($values[0]) && !in_array($selected[0],array(" ",'')))){
  1922.                 $html=parent::displayInList($filter, $divName, $values);
  1923.                 return $html;
  1924.             }
  1925.         }
  1926.  
  1927.         $cursorStep='';
  1928.         $html='';
  1929.         $cursorMin=0;
  1930.         $cursorMax=1000;
  1931.         $cursorEffect='';
  1932.         $cursorWidth='width:250px;';
  1933.         $float='';
  1934.         $deleteButton='';
  1935.  
  1936.         //try to get the min and max dynamically based on the other filters (does that really work Oo ?)
  1937.         if(!empty($datas) && $filter->filter_dynamic){
  1938.             $nameMax='max_'.$filter->filter_namekey;
  1939.             $nameMin='min_'.$filter->filter_namekey;
  1940.             $array = $datas['limits'];
  1941.  
  1942.             if(!empty($array->$nameMax)){
  1943.                 $cursorMax=(int)$array->$nameMax;
  1944.             }else{
  1945.                 $cursorMax=1000;
  1946.             }
  1947.             if(!empty($array->$nameMin)){
  1948.                 $cursorMin=(int)$array->$nameMin;
  1949.             }else{
  1950.                 $cursorMin=0;
  1951.             }
  1952.         }
  1953.  
  1954.         //force the min and max based on the settings of the filter
  1955.         if($cursorMin==0 && $filter->filter_options['cursor_min']!='none' && isset($filter->filter_options['cursor_min']) && !in_array($filter->filter_options['cursor_min'],array(" ",''))){
  1956.             $cursorMin=$filter->filter_options['cursor_min'];
  1957.         }
  1958.         if($cursorMax==1000 && !empty($filter->filter_options['cursor_max'])){
  1959.             $cursorMax=$filter->filter_options['cursor_max'];
  1960.         }
  1961.         $minVal=$cursorMin;
  1962.         $maxVal=$cursorMax;
  1963.         if(!empty($filter->filter_options['cursor_effect'])){
  1964.             $cursorEffect='animate: true,';
  1965.         }
  1966.         if(!empty($filter->filter_options['cursor_width'])){
  1967.             $cursorWidth='width:'.$filter->filter_options['cursor_width'].'px;';
  1968.         }
  1969.         if(!empty($filter->filter_options['cursor_step'])){
  1970.             $cursorStep='step:'.$filter->filter_options['cursor_step'].',';
  1971.         }
  1972.         if(isset($values)){
  1973.             if(is_array($values) && count($values)!=2){
  1974.                 $data =& $values[0];
  1975.             }else{
  1976.                 $data =& $values;
  1977.             }
  1978.             if( isset($data) && (is_array($data) || !in_array($data,array(" ",'')))){
  1979.                 if(!is_array($data)){
  1980.                     $data=explode(' - ',$data);
  1981.                 }
  1982.  
  1983.                 $minVal=(int)@$data[0];
  1984.                 $maxVal=(int)@$data[1];
  1985.             }
  1986.         }
  1987.  
  1988.         if($minVal>$maxVal){
  1989.             $tmp = $maxVal;
  1990.             $maxVal = $minVal;
  1991.             $minVal = $tmp;
  1992.         }
  1993.         if($cursorMin>$cursorMax){
  1994.             $tmp = $cursorMax;
  1995.             $cursorMax = $cursorMin;
  1996.             $cursorMin = $tmp;
  1997.         }
  1998.         $onClick='';
  1999.         if($filter->filter_direct_application){
  2000.             $onClick='document.getElementById(\'slider_'.$filter->filter_namekey.'_'.$divName.'\').value="";document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();';
  2001.         }
  2002.         $js='if(!hkjQuery) window.hkjQuery = window.jQuery;
  2003. hkjQuery(document).ready(function(){
  2004.             hkjQuery("#slider_'.$filter->filter_namekey.'_'.$divName.'").prop(\'slide\',null).slider({
  2005.                 '.$cursorEffect.'
  2006.                 range: true,
  2007.                 min: '.$cursorMin.',
  2008.                 max: '.$cursorMax.',
  2009.                 '.$cursorStep.'
  2010.                 values: ['.$minVal.', '.$maxVal.'],
  2011.                 slide: function( event, ui ) {
  2012.                     hkjQuery( "#filter_'.$filter->filter_namekey.'_'.$divName.'_values" ).val(  ui.values[ 0 ] + " - " + ui.values[ 1 ] );
  2013.                     hkjQuery( "#filter_'.$filter->filter_namekey.'_'.$divName.'" ).val(1);
  2014.                     hkjQuery( "#filter_span_'.$filter->filter_namekey.'_'.$divName.'" ).html(  ui.values[ 0 ] + " - " + ui.values[ 1 ] );
  2015.                 },
  2016.                 change: function( event, ui ) {' .
  2017.                     $onClick .'
  2018.                 }
  2019.             });
  2020.             hkjQuery( "#filter_'.$filter->filter_namekey.'_'.$divName.'_values" ).val(  hkjQuery( "#slider_'.$filter->filter_namekey.'_'.$divName.'" ).slider( "values", 0 ) + " - " + hkjQuery( "#slider_'.$filter->filter_namekey.'_'.$divName.'" ).slider( "values", 1 ) );
  2021.             hkjQuery( "#filter_span_'.$filter->filter_namekey.'_'.$divName.'" ).html(  hkjQuery( "#slider_'.$filter->filter_namekey.'_'.$divName.'" ).slider( "values", 0 ) + " - " + hkjQuery( "#slider_'.$filter->filter_namekey.'_'.$divName.'" ).slider( "values", 1 ) );
  2022.  
  2023.             hkjQuery(\'#dialog_link, ul#icons li\').hover(
  2024.                 function() { hkjQuery(this).addClass(\'ui-state-hover\'); },
  2025.                 function() { hkjQuery(this).removeClass(\'ui-state-hover\'); }
  2026.             );
  2027.  
  2028.         });';
  2029.         if(HIKASHOP_PHP5){
  2030.             $doc = JFactory::getDocument();
  2031.         }else{
  2032.             $doc =& JFactory::getDocument();
  2033.         }
  2034.  
  2035.         $doc->addScriptDeclaration("\n<!--\n".$js."\n//-->\n");
  2036.  
  2037.         static $done=true;
  2038.         if($done){
  2039.             $done=false;
  2040.             hikashop_loadJslib('jquery');
  2041.             hikashop_loadJslib('jquery-ui');
  2042.         }
  2043.         $hasValue='';
  2044.         if(!empty($selected) && $selected[0]==1){
  2045.             if($values[0]!='none' && ( isset($data) && !in_array($data,array(" ",'')))){
  2046.                 $deleteButton='  '.parent::getDeleteButton($filter, $divName, '11', $html, '', true);
  2047.                 $hasValue='1';
  2048.             }
  2049.  
  2050.         }
  2051.  
  2052.         if($filter->filter_options['title_position']=='left'){
  2053.             $float='float:left;';
  2054.         }
  2055.         $html='<div style="'.$cursorWidth.' '.$float.' margin-top:10px; margin-bottom:10px;" id="slider_'.$filter->filter_namekey.'_'.$divName.'"></div>';
  2056.         $html=$this->cursorTitlePosition($filter, $html, $cursorWidth, $divName,$deleteButton,$hasValue);
  2057.  
  2058.         return $html;
  2059.  
  2060.     }
  2061.  
  2062.     function cursorTitlePosition($filter, $html, $width, $divName,$deleteButton,$hasValue){
  2063.         $unit='';
  2064.         if(empty($filter->filter_options['range_size'])){
  2065.             $size=10;
  2066.         }else{
  2067.             $size=$filter->filter_options['range_size'];
  2068.         }
  2069.         $input='<input size="'.$size.'" type="hidden" name="filter_'.$filter->filter_namekey.'" id="filter_'.$filter->filter_namekey.'_'.$divName.'" value="'.$hasValue.'"/>';
  2070.         $input.='<input size="'.$size.'" type="hidden" name="filter_'.$filter->filter_namekey.'_values" id="filter_'.$filter->filter_namekey.'_'.$divName.'_values"/>';
  2071.         $input.='<span id="filter_span_'.$filter->filter_namekey.'_'.$divName.'" style="display:inline-block; border:0; color:#f6931f; font-weight:bold;"></span>'.$deleteButton;
  2072.         if($filter->filter_data=='weight' || $filter->filter_data=='length' || $filter->filter_data=='width' || $filter->filter_data=='height' || $filter->filter_data=='surface' || $filter->filter_data=='volume'){
  2073.             $unit=' ('.$filter->filter_options['information_unit'].')';
  2074.         }
  2075.         $name=parent::trans($filter->filter_name).$unit;
  2076.         $position=$filter->filter_options['title_position'];
  2077.  
  2078.         switch($position){
  2079.             case 'top_left':
  2080.                 $html=$name.': '.$input.$html;
  2081.                 break;
  2082.             case 'top_right':
  2083.                 $html='<div style="'.$width.' text-align:right">'.$name.': '.$input.''.$html.'</div>';
  2084.                 break;
  2085.             case 'top_center':
  2086.                 $html='<div style="'.$width.' text-align:center";">'.$name.': '.$input.' '.$html.'</div>';
  2087.                 break;
  2088.             case 'bottom_left':
  2089.                 $html=$html.$name.': '.$input;
  2090.                 break;
  2091.             case 'bottom_right':
  2092.                 $html='<div style="'.$width.' text-align:right">'.$html.$name.': '.$input.'</div>';
  2093.                 break;
  2094.             case 'bottom_center':
  2095.                 $html='<div style="'.$width.' text-align:center";">'.$html.$name.': '.$input.'</div>';
  2096.                 break;
  2097.         }
  2098.         return $html;
  2099.     }
  2100.  
  2101. }
  2102.  
  2103. class hikashopMultipledropdownClass extends hikashopSingledropdownClass{
  2104.     function display($filter, $divName, &$parent, $datas='', $multiple='', $tab=''){
  2105.         $multiple='multiple="multiple" size="5"';
  2106.         $tab='[]';
  2107.         return parent::display($filter, $divName, $parent, $datas, $multiple, $tab);
  2108.     }
  2109. }
  2110.  
  2111. class hikashopCheckboxClass extends hikashopRadioClass{
  2112.     function display($filter, $divName, &$parent, $datas='', $type='',$tab=''){
  2113.         $type='checkbox';
  2114.         $tab='[]';
  2115.         return parent::display($filter, $divName, $parent, $datas, $type,$tab);
  2116.     }
  2117. }
  2118.  
  2119. class hikashopInStockCheckboxClass extends hikashopFilterTypeClass{
  2120.     function display($filter, $divName, &$parent, $datas='', $type='',$tab=''){
  2121.         $html='';
  2122.         $selected=parent::display($filter, $divName, $parent);
  2123.         $checked='';
  2124.  
  2125.         if($selected=='in_stock'){
  2126.             $checked='checked="checked"';
  2127.         }
  2128.  
  2129.         $onClick='';
  2130.         if($filter->filter_direct_application){
  2131.             $onClick='onchange="document.forms[\'hikashop_filter_form_'.$divName.'\'].submit();"';
  2132.         }
  2133.  
  2134.  
  2135.         $html.= '<span class="hikashop_filter_checkbox"><INPUT '.$onClick.' '.$checked.' type="checkbox" name="filter_'.$filter->filter_namekey.$tab.'" value="in_stock"></label></span>';
  2136.         $html.='<span style="margin-left: 5px;">'.$filter->filter_name.'</span>';
  2137.         return $html;
  2138.     }
  2139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement