* @copyright 2009 Deon George * @link http://osb.leenooks.net * * @link http://www.agileco.com/ * @copyright 2004-2008 Agileco, LLC. * @license http://www.agileco.com/agilebill/license1-4.txt * @author Tony Landis * @package AgileBill * @subpackage Module:Product */ /** * The main AgileBill Product Category Class * * @package AgileBill * @subpackage Module:Product */ class product_cat extends OSB_module { /** * User Menu * List the available categories */ public function user_menu($VAR) { global $smarty,$C_auth; $db = &DB(); $result = $db->Execute(sqlSelect($db,'product_cat','*','status=1 AND (parent_id=0 OR parent_id IS NULL OR parent_id=id)','position')); $smart = array(); if ($result->RecordCount() == 0) { return false; } else { while (! $result->EOF) { # Check for group settings: $groups = unserialize($result->fields['group_avail']); $auth = false; for ($ii=0; $iiauth_group_by_id($groups[$ii])) $auth = true; } if ($auth) { # Create the array for smarty array_push($smart,$result->fields); $i++; } $result->MoveNext(); } $smarty->assign('product_cat',$smart); } } /** * User view a category */ public function user_view($VAR) { global $smarty,$C_auth; $db = &DB(); # Get the category information: $result = $db->Execute(sqlSelect($db,'product_cat','id,position,template,name,thumbnail,group_avail,parent_id,max',array('status'=>1,'id'=>$VAR['id']))); if (! $result || $result->RecordCount() == 0) { return false; } else { # Check for group settings $groups = unserialize($result->fields['group_avail']); # Max results per page: $max = $result->fields['max']; if (empty($max)) $max = 25; if (empty($VAR['page']) || ! is_numeric($VAR['page']) || $VAR['page'] <= 1) { $page = 1; $start = 0; } else { $page = $VAR['page']; $start = ($page-1)*$max; } $auth = false; for ($ii=0; $iiauth_group_by_id($groups[$ii])) $auth = true; } if ($auth) $smarty->assign('product_cat_arr',array($result->fields)); else return false; $parent_id = $result->fields['parent_id']; if (! $parent_id) $parent_id = '0'; } # Get the items in this category: $result = $db->Execute(sqlSelect($db,'product','id,sku,thumbnail,avail_category_id,price_base,price_setup,group_avail',array('active'=>1),'position,sku')); if (! $result || $result->RecordCount() == 0) { return false; } else { $count = 0; $smart_prod = array(); while (! $result->EOF) { # check that this item can be displayed in the current category: $cat = false; $cats = unserialize($result->fields['avail_category_id']); for ($i=0; $ifields['group_avail']); $auth = false; for ($ii=0; $iiauth_group_by_id($groups[$ii])) { $auth = true; break; } } # Paging if ($auth) { if ($count >= $start && $count < $max*$page) array_push($smart_prod,$result->fields); $count++; } } $result->MoveNext(); } $results = $count; $pages = intval($results / $max); if ($results % $max) $pages++; for ($i=1;$i<=$pages;$i++) $pagearr[$i] = $i; $smarty->assign('product_arr',$smart_prod); $smarty->assign('page_page',$page); $smarty->assign('page_results',$results); $smarty->assign('page_pages',$pages); $smarty->assign('page_arr',$pagearr); } # Get any sub-categories: $result = $db->Execute($q=sqlSelect($db,'product_cat','*',array('status'=>1,'parent_id'=>$VAR['id']),'position,name')); $smart_sub_cat = array(); if ($result && $result->RecordCount()) { while (! $result->EOF) { array_push($smart_sub_cat,$result->fields); $result->MoveNext(); } $smarty->assign('product_sub_cat',$smart_sub_cat); } # Get any parent categores: $smart_parent_cat = array(); for ($i=0; $i<=5; $i++) { if ($parent_id > 0 ) { # Get parent id & add to array $result = $db->Execute(sqlSelect($db,array('product_cat','product_cat_translate'),'A.id,A.parent_id,A.template,B.name',array('A.id'=>$parent_id,'B.product_cat_id'=>$parent_id,'B.language_id'=>SESS_LANGUAGE))); if ($result && $result->RecordCount()) { $parent_id = $result->fields['parent_id']; array_push($smart_parent_cat,$result->fields); } } } $smart_parent_cat = array_reverse($smart_parent_cat); # Get the current category: $result = $db->Execute(sqlSelect($db,array('product_cat','product_cat_translate'),'A.id,A.parent_id,A.template,B.name',array('A.id'=>$VAR['id'],'B.product_cat_id'=>$VAR['id'],'B.language_id'=>SESS_LANGUAGE))); if ($result && $result->RecordCount()) $smart_parent_cat[] = $result->fields; $smarty->assign('parent_cat',$smart_parent_cat); } /** * This function will build a nested option list * showing the heirachy of the product categories * * @see tpl_admin_menu_parent */ private function build_nested_option_list($arr,$start,$level,$current) { $option = ''; for ($i=0; $i%s',$id,$sel,$arr[$start][$i]['name']); else $option .= sprintf('',$id,$sel,str_repeat(' ',$level-1),$arr[$start][$i]['name']); if (isset($arr[$id])) $option .= $this->build_nested_option_list($arr,$id,$level+1,$current); } return $option; } /** * Select a parent for a category */ public function tpl_admin_menu_parent($VAR) { global $smarty,$C_auth; $db = &DB(); # Get current id if (! empty($VAR['id'])) $cid = str_replace(',','',$VAR['id']); else $current = ''; # Loop and put in array $result = $db->Execute(sqlSelect($db,'product_cat','*','','parent_id,position,name')); while (! $result->EOF) { if ($result->fields['parent_id'] == '' || $result->fields['parent_id'] == 0 || $result->fields['parent_id'] == $result->fields['id']) $arr[0][] = $result->fields; else $arr[$result->fields['parent_id']][] = $result->fields; # get current parent_id if ($cid > 0 && $result->fields['id'] == $cid) $current = $result->fields['parent_id']; $result->MoveNext(); } # Create menu echo ''; } /** * Select a product category for a product */ public function tpl_admin_menu_product($VAR) { global $smarty,$C_auth; $db = &DB(); $dbc = new CORE_database; # Get current category id if (! empty($VAR['id'])) { $product_id = str_replace(',','',$VAR['id']); $product = $db->Execute(sqlSelect($db,'product','avail_category_id',array('id'=>$product_id))); $current = unserialize($product->fields['avail_category_id']); } else { $current = ''; } # Loop and put in array $result = $db->Execute(sqlSelect($db,'product_cat','*','','parent_id,position,name')); while (! $result->EOF) { # Determine if selected $select = false; for ($ix=0; $ixfields['id']) { $result->fields['sel'] = 'selected'; break; } } # set array if ($result->fields['parent_id'] == '' || $result->fields['parent_id'] == 0 || $result->fields['parent_id'] == $result->fields['id']) $arr[0][] = $result->fields; else $arr[$result->fields['parent_id']][] = $result->fields; $result->MoveNext(); } # Create menu echo ''; } /** * Update an entry */ public function update($VAR) { global $_FILES; # Validate the thumbnail upload if (isset($_FILES['upload_file1']) && $_FILES['upload_file1']['size'] > 0) $VAR['product_cat_thumbnail'] = sprintf('cat_thmb_%s',$_FILES['upload_file1']['name']); elseif ($VAR['delthumb'] == 1) $VAR['product_cat_thumbnail'] = ''; # Validate the image upload if (isset($_FILES['upload_file2']) && $_FILES['upload_file2']['size'] > 0) $VAR['product_cat_image'] = sprintf('cat_img_%s',$_FILES['upload_file2']['name']); elseif ( $VAR['delimg'] == 1 ) $VAR['product_cat_image'] = ''; $result = parent::update($VAR); # Copy the image(s) if ($result) { # Copy 1ST file upload if (isset($_FILES['upload_file1']) && $_FILES['upload_file1']['size'] > 0) copy($_FILES['upload_file1']['tmp_name'],sprintf('%scat_thmb_%s',PATH_IMAGES,$_FILES['upload_file1']['name'])); # Copy the 2ND file upload if (isset($_FILES['upload_file2']) && $_FILES['upload_file2']['size'] > 0) copy($_FILES['upload_file2']['tmp_name'],sprintf('%scat_img_',PATH_IMAGES,$_FILES['upload_file2']['name'])); } } /** * Delete an Entry */ public function delete($VAR) { $this->associated_DELETE = array(); array_push($this->associated_DELETE,array('table' =>'product_cat_translate','field'=>'product_cat_id')); parent::delete($VAR); } } ?>