paramBase = HIKASHOP_COMPONENT.'.'.$this->getName(); $function = $this->getLayout(); $this->params =& $params; if($function!='cart' && JRequest::getInt('popup') && JRequest::getVar('tmpl')!='component'){ $class = hikashop_get('helper.cart'); $class->getJS($this->init()); $doc =& JFactory::getDocument(); $js = ' window.addEvent(\'domready\', function() { SqueezeBox.fromElement(\'hikashop_notice_box_trigger_link\',{parse: \'rel\'}); }); '; $doc->addScriptDeclaration(""); } if(method_exists($this,$function)) $this->$function(); parent::display($tpl); } function filter(){ } function listing(){ $config =& hikashop_config(); $this->assignRef('config',$config); $module = hikashop_get('helper.module'); $module->initialize($this); $this->paramBase.='_'.$this->params->get('main_div_name'); $database =& JFactory::getDBO(); $app =& JFactory::getApplication(); $pageInfo = null; $filters = array('b.product_published=1'); $category_selected=''; $select=''; $is_synchronized=false; $table='b'; if($this->params->get('product_order')=='ordering'){ $table='a'; } if(!empty($this->module)){ $pageInfo->filter->order->value =$table.'.'.$this->params->get('product_order'); $pageInfo->search = ''; $pageInfo->filter->order->dir = $this->params->get('order_dir'); $synchro = $this->params->get('content_synchronize'); if($synchro){ if(JRequest::getString('option','')==HIKASHOP_COMPONENT){ if(JRequest::getString('ctrl','category')=='product'){ $ok = false; $product_synchronize = (int)$this->params->get('product_synchronize',0); if($product_synchronize){ $product_id = hikashop_getCID('product_id'); if(!empty($product_id)){ if($product_synchronize==2){ $filters[]='a.product_related_type=\'related\''; $filters[]='a.product_id='.$product_id; $select='SELECT DISTINCT b.*'; $b = hikashop_table('product_related').' AS a'; $a = ' LEFT JOIN '.hikashop_table('product').' AS b'; $on = ' ON a.product_related_id=b.product_id'; if($this->params->get('product_order')=='ordering'){ $pageInfo->filter->order->value = 'a.product_related_ordering'; } }else{ $pathway = JRequest::getInt('category_pathway',0); if(empty($pathway)){ $query = "SELECT category_id FROM ".hikashop_table('product_category').' WHERE product_id='.$product_id.' ORDER BY product_category_id'; $database->setQuery($query); $pageInfo->filter->cid = $database->loadResultArray(); }else{ $pageInfo->filter->cid = array($pathway); } } $ok = true; } } if(!$ok){ $pageInfo->filter->cid = $this->params->get('selectparentlisting'); } }elseif(JRequest::getString('ctrl','category')=='category'){ $pageInfo->filter->cid = JRequest::getInt("cid",$this->params->get('selectparentlisting')); $is_synchronized=true; }else{ $pageInfo->filter->cid = $this->params->get('selectparentlisting'); } }else{ $pageInfo->filter->cid = $this->params->get('selectparentlisting'); } }else{ $pageInfo->filter->cid = $this->params->get('selectparentlisting'); } if(!empty($pageInfo->filter->cid) && !is_array($pageInfo->filter->cid)){ $category_selected = '_'.$pageInfo->filter->cid; $this->paramBase.=$category_selected; } $pageInfo->filter->price_display_type = $this->params->get('price_display_type'); if(JRequest::getVar('hikashop_front_end_main',0)){ $oldValue = $app->getUserState($this->paramBase.'.list_limit'); if(empty($oldValue)){ $oldValue = $this->params->get('limit'); } $pageInfo->limit->value = $app->getUserStateFromRequest( $this->paramBase.'.list_limit', 'limit_'.$this->params->get('main_div_name').$category_selected, $this->params->get('limit'), 'int' ); if($oldValue!=$pageInfo->limit->value){ JRequest::setVar('limitstart_'.$this->params->get('main_div_name').$category_selected,0); } $pageInfo->limit->start = $app->getUserStateFromRequest( $this->paramBase.'.limitstart', 'limitstart_'.$this->params->get('main_div_name').$category_selected, 0, 'int' ); }else{ $pageInfo->limit->value = $this->params->get('limit'); $pageInfo->limit->start = 0; } }else{ $doc = JFactory::getDocument(); $pageInfo->filter->cid = JRequest::getInt("cid",$this->params->get('selectparentlisting')); if($config->get('show_feed_link', 1) == 1){ if($config->get('hikarss_format') != 'none'){ $doc_title = $config->get('hikarss_name',''); if(empty($doc_title)){ $category = hikashop_get('class.category'); $catData = $category->get($pageInfo->filter->cid); if($catData) $doc_title = $catData->category_name; } if($config->get('hikarss_format') != 'both'){ $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => $doc_title.' RSS 2.0'); $doc->addHeadLink(JRoute::_($link.'&type='.$config->get('hikarss_format')), 'alternate', 'rel', $attribs); } else{ $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => $doc_title.' RSS 2.0'); $doc->addHeadLink(JRoute::_($link.'&type=rss'), 'alternate', 'rel', $attribs); $attribs = array('type' => 'application/atom+xml', 'title' => $doc_title.' Atom 1.0'); $doc->addHeadLink(JRoute::_($link.'&type=atom'), 'alternate', 'rel', $attribs); } } } $category_selected = '_'.$pageInfo->filter->cid; $this->paramBase.=$category_selected; $pageInfo->filter->order->value = $table.'.'.$this->params->get('product_order'); $pageInfo->filter->order->value = $app->getUserStateFromRequest( $this->paramBase.".filter_order", 'filter_order_'.$this->params->get('main_div_name').$category_selected, $pageInfo->filter->order->value,'cmd' ); $pageInfo->filter->order->dir = $app->getUserStateFromRequest( $this->paramBase.".filter_order_Dir", 'filter_order_Dir_'.$this->params->get('main_div_name').$category_selected, $this->params->get('order_dir'), 'word' ); $oldValue = $app->getUserState($this->paramBase.'.list_limit'); if(empty($oldValue)){ $oldValue = $this->params->get('limit'); } $pageInfo->limit->value = $app->getUserStateFromRequest( $this->paramBase.'.list_limit', 'limit_'.$this->params->get('main_div_name').$category_selected, $this->params->get('limit'), 'int' ); if($oldValue!=$pageInfo->limit->value){ JRequest::setVar('limitstart_'.$this->params->get('main_div_name').$category_selected,0); } $pageInfo->limit->start = $app->getUserStateFromRequest( $this->paramBase.'.limitstart', 'limitstart_'.$this->params->get('main_div_name').$category_selected, 0, 'int' ); $pageInfo->filter->price_display_type = $app->getUserStateFromRequest( $this->paramBase.'.price_display_type', 'price_display_type_'.$this->params->get('main_div_name').$category_selected, $this->params->get('price_display_type'), 'word' ); } $this->assignRef('category_selected',$category_selected); $currencyClass = hikashop_get('class.currency'); $this->assignRef('currencyHelper',$currencyClass); $pageInfo->currency_id = hikashop_getCurrency(); $config =& hikashop_config(); if($config->get('tax_zone_type','shipping')=='billing'){ $pageInfo->zone_id = hikashop_getZone('billing'); }else{ $pageInfo->zone_id = hikashop_getZone('shipping'); } $show_price_weight = (int)$config->get('show_price_weight',0); $this->params->set('show_price_weight',$show_price_weight); if(!empty($pageInfo->filter->cid)){ $acl_filters = array(); hikashop_addACLFilters($acl_filters,'category_access'); if(!empty($acl_filters)){ if(!is_array($pageInfo->filter->cid)){ $pageInfo->filter->cid = array($pageInfo->filter->cid); } $acl_filters[]='category_id IN ('.implode(',',$pageInfo->filter->cid).')'; $query = 'SELECT category_id FROM '.hikashop_table('category').' WHERE '.implode(' AND ',$acl_filters); $database->setQuery($query); $pageInfo->filter->cid = $database->loadResultArray(); } } if(empty($pageInfo->filter->cid)){ $query = 'SELECT category_id FROM '.hikashop_table('category').' WHERE category_type=\'product\' AND category_parent_id=0 LIMIT 1'; $database->setQuery($query); $pageInfo->filter->cid = $database->loadResult(); } $searchMap = array('b.product_name','b.product_description','b.product_id','b.product_code'); $filters[]='b.product_type = '.$database->Quote($this->type); if(!empty($pageInfo->search)){ $searchVal = '\'%'.$database->getEscaped($pageInfo->search,true).'%\''; $filters[] = implode(" LIKE $searchVal OR ",$searchMap)." LIKE $searchVal"; } if(!is_array($pageInfo->filter->cid)){ $pageInfo->filter->cid=array((int)$pageInfo->filter->cid); } $class = hikashop_get('class.category'); $element = $class->get(reset($pageInfo->filter->cid),true); $this->assignRef('element',$element); if(empty($select)){ $parentCategories = implode(',',$pageInfo->filter->cid); $catName = 'a.category_id'; $type = 'product'; if(!empty($element->category_type) && $element->category_type=='manufacturer'){ if($pageInfo->filter->order->value=='a.ordering'){ $pageInfo->filter->order->value='b.product_name'; } $type = 'manufacturer'; $catName = 'b.product_manufacturer_id'; $b = hikashop_table('product').' AS b'; $a = ''; $on = ''; $select='SELECT DISTINCT b.*'; }else{ $b = hikashop_table('product_category').' AS a'; $a = ' LEFT JOIN '.hikashop_table('product').' AS b'; $on = ' ON a.product_id=b.product_id'; $select='SELECT DISTINCT b.*'; } if(!$this->params->get('filter_type')){ $filters[]=$catName.' IN ('.$parentCategories.')'; }else{ $categoryClass = hikashop_get('class.category'); $categoryClass->parentObject =& $this; $categoryClass->type = $type; $childs = $categoryClass->getChilds($pageInfo->filter->cid,true,array(),'',0,0); $filter = $catName.' IN ('; foreach($childs as $child){ $filter .= $child->category_id.','; } $filters[]=$filter.$parentCategories.')'; } } $order = ''; if(!empty($pageInfo->filter->order->value)){ $order = ' ORDER BY '.$pageInfo->filter->order->value.' '.$pageInfo->filter->order->dir; } if($this->params->get('add_to_cart')){ $cart =& hikashop_get('helper.cart'); $this->assignRef('cart',$cart); $catalogue = (int)$config->get('catalogue',0); $this->params->set('catalogue',$catalogue); $cart->cartCount(1); $cart->cartCount(1); $cart->getJS($this->init()); } if(!$config->get('show_out_of_stock',1)){ $filters[]='b.product_quantity!=0'; } hikashop_addACLFilters($filters,'product_access','b'); if($this->params->get('random')){ $order = ' ORDER BY RAND()'; } JPluginHelper::importPlugin( 'hikashop' ); $dispatcher =& JDispatcher::getInstance(); $dispatcher->trigger( 'onBeforeProductListingLoad', array( & $filters, & $order, &$this) ); $query = ' FROM '.$b.$a.$on.' WHERE '.implode(' AND ',$filters).$order; $database->setQuery($select.$query,(int)$pageInfo->limit->start,(int)$pageInfo->limit->value); $rows = $database->loadObjectList(); if(!empty($rows)){ $ids = array(); foreach($rows as $key => $row){ $ids[]=$row->product_id; if(method_exists($app,'stringURLSafe')){ $rows[$key]->alias = $app->stringURLSafe(strip_tags($row->product_name)); }else{ $rows[$key]->alias = JFilterOutput::stringURLSafe(strip_tags($row->product_name)); } } $queryImage = 'SELECT * FROM '.hikashop_table('file').' WHERE file_ref_id IN ('.implode(',',$ids).') AND file_type=\'product\' ORDER BY file_id ASC'; $database->setQuery($queryImage); $images = $database->loadObjectList(); foreach($rows as $k=>$row){ if(!empty($images)){ foreach($images as $image){ if($row->product_id==$image->file_ref_id){ if(!isset($row->file_ref_id)){ foreach(get_object_vars($image) as $key => $name){ $rows[$k]->$key = $name; } } break; } } } if(!isset($rows[$k]->file_name)){ $rows[$k]->file_name = $row->product_name; } } $database->setQuery('SELECT * FROM '.hikashop_table('variant').' WHERE variant_product_id IN ('.implode(',',$ids).')'); $variants = $database->loadObjectList(); if(!empty($variants)){ foreach($rows as $k => $product){ foreach($variants as $variant){ if($product->product_id==$variant->variant_product_id){ $rows[$k]->has_options = true; break; } } } } $currencyClass->getListingPrices($rows,$pageInfo->zone_id,$pageInfo->currency_id,$pageInfo->filter->price_display_type); } $database->setQuery('SELECT count( DISTINCT b.product_id)'.$query); $pageInfo->elements->total = $database->loadResult(); $pageInfo->elements->page = count($rows); $toggleClass = hikashop_get('helper.toggle'); $this->assignRef('toggleClass',$toggleClass); $this->assignRef('rows',$rows); $this->assignRef('pageInfo',$pageInfo); $this->assignRef('modules',$this->modules); $image=hikashop_get('helper.image'); $this->assignRef('image',$image); global $Itemid; $menus = &JSite::getMenu(); $menu = $menus->getActive(); if(empty($menu)){ if(!empty($Itemid)){ $menus->setActive($Itemid); $menu = $menus->getItem($Itemid); } } $url_itemid = ''; if(!empty($Itemid)){ $url_itemid = '&Itemid='.(int)$Itemid; } $pagination = hikashop_get('helper.pagination', $pageInfo->elements->total, $pageInfo->limit->start, $pageInfo->limit->value); $pagination->hikaSuffix = '_'.$this->params->get('main_div_name').$category_selected; $this->assignRef('pagination',$pagination); if(empty($this->module)){ $fieldsClass = hikashop_get('class.field'); $fields = $fieldsClass->getFields('frontcomp',$element,'category','checkout&task=state'); $this->assignRef('fieldsClass',$fieldsClass); $this->assignRef('fields',$fields); $page_title = $this->params->get('page_title'); $document =& JFactory::getDocument(); if((empty($page_title) && !empty($element->category_name)) || !$this->params->get('use_module_name')){ @$this->params->set('page_title',$element->category_name); $document->setTitle( strip_tags($element->category_name) ); }else{ $document->setTitle( $page_title ); } if(!empty($element->category_keywords)){ $document->setMetadata('keywords', $element->category_keywords); } if(!empty($element->category_meta_description)){ $document->setMetadata('description', $element->category_meta_description); } if(!$this->params->get('random')){ $this->params->set('show_limit',1); } if(empty($menu)){ $pathway =& $app->getPathway(); $category_pathway = '&category_pathway='.JRequest::getVar('menu_main_category'); $categories = $class->getParents(reset($pageInfo->filter->cid)); $one = true; foreach($categories as $category){ if($one) $one = false; else $pathway->addItem($category->category_name,hikashop_completeLink('category&task=listing&cid='.(int)$category->category_id.'&name='.strtolower(preg_replace('#[^a-z0-9-_]#i','',$category->category_name)))); } } }else{ $main = JRequest::getVar('hikashop_front_end_main',0); if($main){ if(!empty($product_id)){ $category_pathway = '&category_pathway='.JRequest::getInt('category_pathway',0).'&related_product='.$product_id; } if( !$this->params->get('random')){ $this->params->set('show_limit',1); } }elseif(!$is_synchronized){ $url_itemid=''; $module_item_id = $this->params->get('itemid'); $url_itemid='&Itemid='.(int)$module_item_id; } if(empty($category_pathway) && !empty($menu) && strpos($menu->link,'option='.HIKASHOP_COMPONENT)!==false && (strpos($menu->link,'view=category')!==false || strpos($menu->link,'view=')===false) && !JRequest::getInt('no_cid',0)){ $category_pathway = '&category_pathway='.reset($pageInfo->filter->cid); } } if(empty($category_pathway)){ $category_pathway = '&category_pathway=0'; } $this->assignRef('itemid',$url_itemid); $this->assignRef('category_pathway',$category_pathway); } function show(){ $app =& JFactory::getApplication(); $product_id = (int)hikashop_getCID('product_id'); $config =& hikashop_config(); $this->assignRef('config',$config); global $Itemid; $menus = &JSite::getMenu(); $menu = $menus->getActive(); if(empty($menu)){ if(!empty($Itemid)){ $menus->setActive($Itemid); $menu = $menus->getItem($Itemid); } } if(empty($product_id)){ if (is_object( $menu )) { jimport('joomla.html.parameter'); $category_params = new JParameter( $menu->params ); $product_id = $category_params->get('product_id'); JRequest::setVar('product_id',$product_id); } } if(empty($product_id)){ return; } $filters=array('a.product_id='.$product_id); hikashop_addACLFilters($filters,'product_access','a'); $query = 'SELECT a.*,b.product_category_id, b.category_id, b.ordering FROM '.hikashop_table('product').' AS a LEFT JOIN '.hikashop_table('product_category').' AS b ON a.product_id = b.product_id WHERE '.implode(' AND ',$filters). ' LIMIT 1'; $database =& JFactory::getDBO(); $database->setQuery($query); $element = $database->loadObject(); if(empty($element)){ return; } $this->modules = $config->get('product_show_modules',''); $module = hikashop_get('helper.module'); $this->modules=$module->setModuleData($this->modules); $currencyClass = hikashop_get('class.currency'); $default_params = $config->get('default_params'); $empty=''; jimport('joomla.html.parameter'); $params = new JParameter($empty); foreach($default_params as $k => $param){ $params->set($k,$param); } $main_currency = (int)$config->get('main_currency',1); $params->set('main_currency',$main_currency); $discount_before_tax = (int)$config->get('discount_before_tax',0); $params->set('discount_before_tax',$discount_before_tax); $catalogue = (int)$config->get('catalogue',0); $params->set('catalogue',$catalogue); $show_price_weight = (int)$config->get('show_price_weight',0); $params->set('show_price_weight',$show_price_weight); $currency_id = hikashop_getCurrency(); if($config->get('tax_zone_type','shipping')=='billing'){ $zone_id = hikashop_getZone('billing'); }else{ $zone_id = hikashop_getZone('shipping'); } $params->set('characteristic_display',$config->get('characteristic_display','table')); $params->set('characteristic_display_text',$config->get('characteristic_display_text',1)); $params->set('show_quantity_field',$config->get('show_quantity_field',1)); $this->assignRef('params',$params); $cart = hikashop_get('helper.cart'); $this->assignRef('cart',$cart); $this->selected_variant_id=0; if(!empty($element)){ if($element->product_type=='variant'){ $this->selected_variant_id = $product_id; $filters=array('a.product_id='.$element->product_parent_id); hikashop_addACLFilters($filters,'product_access','a'); $query = 'SELECT a.*,b.* FROM '.hikashop_table('product').' AS a LEFT JOIN '.hikashop_table('product_category').' AS b ON a.product_id = b.product_id WHERE '.implode(' AND ',$filters). ' LIMIT 1'; $database =& JFactory::getDBO(); $database->setQuery($query); $element = $database->loadObject(); if(empty($element)){ return; } $product_id = $element->product_id; } if(method_exists($app,'stringURLSafe')){ $element->alias = $app->stringURLSafe(strip_tags($element->product_name)); }else{ $element->alias = JFilterOutput::stringURLSafe(strip_tags($element->product_name)); } if(!$element->product_published){ return; } $productClass=hikashop_get('class.product'); $prod = null; $prod->product_id = $product_id; $prod->product_hit = $element->product_hit+1; $prod->product_last_seen_date = time(); $productClass->save($prod,true); $filters=array('a.product_id ='.$product_id,'a.product_related_type=\'options\'','b.product_published=1'); hikashop_addACLFilters($filters,'product_access','b'); $query = 'SELECT b.* FROM '.hikashop_table('product_related').' AS a LEFT JOIN '.hikashop_table('product').' AS b ON a.product_related_id = b.product_id WHERE '.implode(' AND ',$filters).' ORDER BY a.product_related_ordering ASC, a.product_related_id ASC'; $database->setQuery($query); $element->options = $database->loadObjectList('product_id'); $ids = array($product_id); if(!empty($element->options)){ foreach($element->options as $option){ $ids[]=$option->product_id; } } $filters=array('product_parent_id IN ('.implode(',',$ids).')'); hikashop_addACLFilters($filters,'product_access'); $query = 'SELECT * FROM '.hikashop_table('product').' WHERE '.implode(' AND ',$filters); $database->setQuery($query); $variants = $database->loadObjectList(); if(!empty($variants)){ foreach($variants as $variant){ $ids[]=$variant->product_id; if($variant->product_parent_id==$product_id){ $element->variants[$variant->product_id]=$variant; } if(!empty($element->options)){ foreach($element->options as $k => $option){ if($variant->product_parent_id==$option->product_id){ $element->options[$k]->variants[$variant->product_id] = $variant; break; } } } } } $config =& hikashop_config(); if($config->get('characteristics_values_sorting')=='old'){ $order = 'characteristic_id ASC'; }else{ $order = 'characteristic_value ASC'; } $query = 'SELECT a.*,b.* FROM '.hikashop_table('variant').' AS a LEFT JOIN '.hikashop_table('characteristic').' AS b ON a.variant_characteristic_id=b.characteristic_id WHERE a.variant_product_id IN ('.implode(',',$ids).') ORDER BY a.ordering ASC,b.'.$order; $database->setQuery($query); $characteristics = $database->loadObjectList(); if(!empty($characteristics)){ $mainCharacteristics = array(); foreach($characteristics as $characteristic){ if($product_id==$characteristic->variant_product_id){ $mainCharacteristics[$product_id][$characteristic->characteristic_parent_id][$characteristic->characteristic_id]=$characteristic; } if(!empty($element->options)){ foreach($element->options as $k => $option){ if($option->product_id==$characteristic->variant_product_id){ $mainCharacteristics[$option->product_id][$characteristic->characteristic_parent_id][$characteristic->characteristic_id]=$characteristic; } } } } if(!empty($element->variants)){ $this->addCharacteristics($element,$mainCharacteristics,$characteristics); } if(!empty($element->options)){ foreach($element->options as $k => $option){ if(!empty($option->variants)){ $this->addCharacteristics($element->options[$k],$mainCharacteristics,$characteristics); } } } } $query = 'SELECT * FROM '.hikashop_table('file').' WHERE file_ref_id IN ('.implode(',',$ids).') AND file_type IN (\'product\',\'file\') ORDER BY file_id ASC'; $database->setQuery($query); $product_files = $database->loadObjectList(); if(!empty($product_files)){ $productClass = hikashop_get('class.product'); $productClass->addFiles($element,$product_files); } $currencyClass->getPrices($element,$ids,$currency_id,$main_currency,$zone_id,$discount_before_tax); $fieldsClass = hikashop_get('class.field'); $fields = $fieldsClass->getFields('frontcomp',$element,'product','checkout&task=state'); $this->assignRef('fieldsClass',$fieldsClass); $this->assignRef('fields',$fields); if(hikashop_level(2)){ $itemFields = $fieldsClass->getFields('frontcomp',$element,'item','checkout&task=state'); $null=array(); $fieldsClass->addJS($null,$null,$null); $fieldsClass->jsToggle($itemFields,$element,0); $this->assignRef('itemFields',$itemFields); $extraFields = array('item'=>&$itemFields); $requiredFields = array(); $validMessages = array(); $values = array('item'=>$element); $fieldsClass->checkFieldsForJS($extraFields,$requiredFields,$validMessages,$values); $fieldsClass->addJS($requiredFields,$validMessages,array('item')); $this->checkVariants($element); if(!empty($element->options)){ foreach($element->options as $k => $option){ $this->checkVariants($element->options[$k]); } } $this->setDefault($element); if(!empty($element->options)){ foreach($element->options as $k => $option){ $this->setDefault($element->options[$k]); } } } $this->assignRef('element',$element); $doc =& JFactory::getDocument(); $product_name = $this->element->product_name; $product_description = $element->product_meta_description; $product_keywords = $element->product_keywords; if(!empty($this->element->main)){ $product_name = $this->element->main->product_name; $product_description = $this->element->main->product_meta_description; $product_keywords = $this->element->main->product_keywords; } if(!empty($product_keywords)){ $doc->setMetadata('keywords', $product_keywords); } if(!empty($product_description)){ $doc->setMetadata('description', $product_description); } $parent = 0; if(empty($menu) || !(strpos($menu->link,'option='.HIKASHOP_COMPONENT)!==false && strpos($menu->link,'view=product')!==false && strpos($menu->link,'layout=show')!==false)){ $pathway =& $app->getPathway(); $category_pathway = JRequest::getInt('category_pathway',0); $url_itemid=''; if(!empty($Itemid)){ $url_itemid='&Itemid='.$Itemid; } if($category_pathway){ $class = hikashop_get('class.category'); if(!empty($menu->id)){ $menuClass = hikashop_get('class.menus'); $menuData = $menuClass->get($menu->id); if(@$menuData->hikashop_params['content_type']=='manufacturer'){ $new_id = 'manufacturer'; $class->getMainElement($new_id); $menuData->hikashop_params['selectparentlisting']=$new_id; } if(!empty($menuData->hikashop_params['selectparentlisting'])){ $parent = $menuData->hikashop_params['selectparentlisting']; } } $categories = $class->getParents($category_pathway,$parent); $one = true; foreach($categories as $category){ if($one){ $one = false; } else{ $pathway->addItem($category->category_name,hikashop_completeLink('category&task=listing&cid='.(int)$category->category_id.'&name='.strtolower(preg_replace('#[^a-z0-9-_]#i','',$category->category_name)).$url_itemid)); } } } $related = JRequest::getInt('related_product',0); if(!empty($related)){ $class = hikashop_get('class.product'); $prod = $class->get($related); if(!empty($prod)){ if(method_exists($app,'stringURLSafe')){ $prod->alias = $app->stringURLSafe(strip_tags($prod->product_name)); }else{ $prod->alias = JFilterOutput::stringURLSafe(strip_tags($prod->product_name)); } $pathway->addItem($prod->product_name,hikashop_completeLink('product&task=show&cid='.(int)$prod->product_id.'&name='.$prod->alias.'&category_pathway='.$category_pathway.$url_itemid)); } } $pathway->addItem($product_name,hikashop_completeLink('product&task=show&cid='.(int)$element->product_id.'&name='.$element->alias.'&category_pathway='.$category_pathway.$url_itemid)); } $image = hikashop_get('helper.image'); $this->assignRef('image',$image); $this->assignRef('currencyHelper',$currencyClass); $characteristic = hikashop_get('type.characteristic'); $this->assignRef('characteristic',$characteristic); $document =& JFactory::getDocument(); $document->setTitle( strip_tags($product_name) ); } $url = $this->init(); $cart->getJS($url); $this->assignRef('redirect_url',$url); } function addCharacteristics(&$element,&$mainCharacteristics,&$characteristics){ $element->characteristics = $mainCharacteristics[$element->product_id][0]; if(!empty($element->characteristics) && is_array($element->characteristics)){ foreach($element->characteristics as $k => $characteristic){ if(!empty($mainCharacteristics[$element->product_id][$k])){ $element->characteristics[$k]->default=end($mainCharacteristics[$element->product_id][$k]); }else{ $app =& JFactory::getApplication(); $app->enqueueMessage('The default value of one of the characteristics of that product isn\'t available as a variant. Please check the characteristics and variants of that product'); } } } if(!empty($element->variants)){ foreach($characteristics as $characteristic){ foreach($element->variants as $k => $variant){ if($variant->product_id==$characteristic->variant_product_id){ $element->variants[$k]->characteristics[$characteristic->characteristic_parent_id]=$characteristic; $element->characteristics[$characteristic->characteristic_parent_id]->values[$characteristic->characteristic_id]=$characteristic; if($this->selected_variant_id && $variant->product_id==$this->selected_variant_id){ $element->characteristics[$characteristic->characteristic_parent_id]->default=$characteristic; } } } } if(isset($_REQUEST['hikashop_product_characteristic'])){ if(is_array($_REQUEST['hikashop_product_characteristic'])){ JArrayHelper::toInteger($_REQUEST['hikashop_product_characteristic']); $chars = $_REQUEST['hikashop_product_characteristic']; }else{ $chars = JRequest::getCmd('hikashop_product_characteristic',''); $chars = explode('_',$chars); } if(!empty($chars)){ foreach($element->variants as $k => $variant){ $chars = array(); foreach($variant->characteristics as $val){ $i = 0; $ordering = @$element->characteristics[$val->characteristic_parent_id]->ordering; while(isset($chars[$ordering])&& $i < 30){ $i++; $ordering++; } $chars[$ordering] = $val; } ksort($chars); $element->variants[$k]->characteristics=$chars; $variant->characteristics=$chars; $choosed = true; foreach($variant->characteristics as $characteristic){ $ok = false; foreach($chars as $k => $char){ if(!empty($char)){ if($characteristic->characteristic_id==$char){ $ok = true; break; } } } if(!$ok){ $choosed=false; }else{ $element->characteristics[$characteristic->characteristic_parent_id]->default=$characteristic; } } if($choosed){ break; } } } } foreach($element->variants as $k => $variant){ $temp=array(); foreach($element->characteristics as $k2 => $characteristic2){ if(!empty($variant->characteristics)){ foreach($variant->characteristics as $k3 => $characteristic3){ if($k2==$k3){ $temp[$k3]=$characteristic3; break; } } } } $element->variants[$k]->characteristics=$temp; } } } function setDefault(&$element){ if(!empty($element->characteristics)&&!empty($element->variants)){ $match = false; foreach($element->variants as $k => $variant){ $default = true; foreach($element->characteristics as $characteristic){ $found=false; foreach($variant->characteristics as $k => $characteristic2){ if(!empty($characteristic->default->characteristic_id) && $characteristic2->characteristic_id==$characteristic->default->characteristic_id){ $found=true; break; } } if(!$found){ $default = false; break; } } if($default){ foreach(get_object_vars($variant) as $field=>$value){ $element->main->$field=@$element->$field; $element->$field = $value; } $match = true; break; } } if(!$match){ $variant = reset($element->variants); foreach(get_object_vars($variant) as $field=>$value){ $element->main->$field=@$element->$field; $element->$field = $value; } } } } function checkVariants(&$element){ if(!empty($element->characteristics)){ $mapping = array(); foreach($element->characteristics as $characteristic){ $tempmapping = array(); if(!empty($characteristic->values) && !empty($characteristic->characteristic_id)){ foreach($characteristic->values as $k => $value){ if(empty($mapping)){ $tempmapping[]=array($characteristic->characteristic_id=>$k); }else{ foreach($mapping as $val){ $val[$characteristic->characteristic_id]=$k; $tempmapping[]=$val; } } } } $mapping = $tempmapping; } if(empty($element->variants)){ $element->variants = array(); } $productClass = hikashop_get('class.product'); foreach($mapping as $map){ $found=false; foreach($element->variants as $k2 => $variant){ $ok = true; foreach($map as $k => $id){ if(empty($variant->characteristics[$k]->characteristic_id) || $variant->characteristics[$k]->characteristic_id != $id){ $ok = false; break; } } if($ok){ $found = true; $productClass->checkVariant($element->variants[$k2],$element,$map); break; } } if(!$found){ $new = new stdClass; $new->product_published = 0; $new->product_quantity = 0; $productClass->checkVariant($new,$element,$map); $element->variants[$new->map]=$new; } } } } function _getCheckoutURL(){ global $Itemid; $url_itemid=''; if(!empty($Itemid)){ $url_itemid='&Itemid='.$Itemid; } return hikashop_completeLink('checkout'.$url_itemid,false,true); } function init($cart=false){ $config =& hikashop_config(); $url = $config->get('redirect_url_after_add_cart','stay_if_cart'); switch($url){ case 'checkout': $url = $this->_getCheckoutURL(); break; case 'stay_if_cart': $url=''; if(!$cart){ $url = $this->_getCheckoutURL(); break; } case 'ask_user': case 'stay': $url=''; case '': default: if(empty($url)){ $url = hikashop_currentURL('return_url'); } break; } return urlencode($url); } function cart(){ $module = hikashop_get('helper.module'); $module->initialize($this); $app =& JFactory::getApplication(); $database =& JFactory::getDBO(); $config =& hikashop_config(); $currencyClass = hikashop_get('class.currency'); $class = hikashop_get('class.cart'); $productClass = hikashop_get('class.product'); $main_currency = (int)$config->get('main_currency',1); $currency_id = hikashop_getCurrency(); if($config->get('tax_zone_type','shipping')=='billing'){ $zone_id = hikashop_getZone('billing'); }else{ $zone_id = hikashop_getZone('shipping'); } $discount_before_tax = (int)$config->get('discount_before_tax',0); $rows = $class->get(); $total = null; if(!empty($rows)){ $variants = false; $ids = array(); foreach($rows as $k => $row){ $ids[]=$row->product_id; if($row->product_type=='variant'){ $variants = true; foreach($rows as $k2 => $row2){ if($row->product_parent_id==$row2->product_id){ $rows[$k2]->variants[]=&$rows[$k]; } } } } if($variants){ $this->selected_variant_id = 0; $query = 'SELECT a.*,b.* FROM '.hikashop_table('variant').' AS a LEFT JOIN '.hikashop_table('characteristic').' AS b ON a.variant_characteristic_id=b.characteristic_id WHERE a.variant_product_id IN ('.implode(',',$ids).') ORDER BY a.ordering,b.characteristic_value'; $database->setQuery($query); $characteristics = $database->loadObjectList(); if(!empty($characteristics)){ foreach($rows as $k => $row){ $element =& $rows[$k]; $product_id=$row->product_id; if($row->product_type=='variant'){ continue; } $mainCharacteristics = array(); foreach($characteristics as $characteristic){ if($product_id==$characteristic->variant_product_id){ $mainCharacteristics[$product_id][$characteristic->characteristic_parent_id][$characteristic->characteristic_id]=$characteristic; } if(!empty($element->options)){ foreach($element->options as $k => $option){ if($option->product_id==$characteristic->variant_product_id){ $mainCharacteristics[$option->product_id][$characteristic->characteristic_parent_id][$characteristic->characteristic_id]=$characteristic; } } } } if(!empty($element->variants)){ $this->addCharacteristics($element,$mainCharacteristics,$characteristics); } if(!empty($element->options)){ foreach($element->options as $k => $option){ if(!empty($option->variants)){ $this->addCharacteristics($element->options[$k],$mainCharacteristics,$characteristics); } } } } } } $product_quantities = array(); foreach($rows as $row){ if(empty($product_quantities[$row->product_id])){ $product_quantities[$row->product_id] = (int)@$row->cart_product_quantity; }else{ $product_quantities[$row->product_id]+=(int)@$row->cart_product_quantity; } } foreach($rows as $k => $row){ $rows[$k]->cart_product_total_quantity = $product_quantities[$row->product_id]; } $currencyClass->getPrices($rows,$ids,$currency_id,$main_currency,$zone_id,$discount_before_tax); foreach($rows as $k => $row){ if(!empty($row->variants)){ foreach($row->variants as $k2 => $variant){ $productClass->checkVariant($rows[$k]->variants[$k2],$row); } } } foreach($rows as $k => $row){ $currencyClass->calculateProductPriceForQuantity($rows[$k]); } $total=null; $currencyClass->calculateTotal($rows,$total,$currency_id); } $this->assignRef('total',$total); $this->assignRef('rows',$rows); $cart=hikashop_get('helper.cart'); $this->assignRef('cart',$cart); $this->assignRef('currencyHelper',$currencyClass); $cart->cartCount(true); $url = $this->init(true); $this->params->set('url',$url); ob_start(); $cart->getJS($url,false); $notice_html = ob_get_clean(); $this->assignRef('notice_html',$notice_html); if(hikashop_level(2)){ $null=null; $fieldsClass=hikashop_get('class.field'); $itemFields = $fieldsClass->getFields('frontcomp',$null,'item','checkout&task=state'); $this->assignRef('itemFields',$itemFields); $this->assignRef('fieldsClass',$fieldsClass); } } function contact(){ $user = hikashop_loadUser(true); $this->assignRef('element',$user); } function pagination_display($type, $divName, $id, $currentId, $position, $products){ if($position=='top' || $position=='bottom'){ if($type=='numbers'){ echo ''.($id+1).''; } if($type=='rounds'){ echo ''; } if($type=='thumbnails'){ echo ''; } if($type=='names'){ echo ''; } } else{ if($type=='numbers'){ echo ''.($id+1).'
'; } if($type=='rounds'){ echo '
'; } if($type=='thumbnails'){ echo ''; } if($type=='names'){ echo ''; } } } function scaleImage($x, $y, $cx, $cy){ if(empty($cx)){ $cx = ($x*$cy)/$y; } if(empty($cy)){ $cy = ($y*$cx)/$x; } return array($cx,$cy); } }