rendered paste bodyfunction fn_get_categories($category_id = 0, $visible = false, $current_category_id = 0, $simple = true, $plain = false, $lang_code='')
{
global $db_tables, $cart_language, $auth;
$lang_code = !empty($lang_code) ? $lang_code : $cart_language;
$conditions = array();
if (AREA == 'C') {
$conditions[] = "$db_tables[categories].membership_id IN ('0', '$auth[membership_id]')";
$conditions[] = "$db_tables[categories].avail='Y'";
}
if ($visible == true) {
$categories_ids = $category_id;
if (!empty($current_category_id)) {
$cur_id_path = db_get_field("SELECT id_path FROM $db_tables[categories] WHERE category_id='$current_category_id'");
if (!empty($cur_id_path)) {
$categories_ids .= ','.str_replace('/', ',', $cur_id_path);
}
}
$conditions[] = "$db_tables[categories].parent_id IN ($categories_ids)";
} elseif (!empty($category_id)) {
$from_id_path = db_get_field("SELECT id_path FROM $db_tables[categories] WHERE category_id='$category_id'");
$conditions[] = "$db_tables[categories].id_path LIKE '$from_id_path/%'";
}
if (!empty($conditions)) {
$conditions = 'WHERE '. implode(' AND ', $conditions);
} else {
$conditions = '';
}
if ($simple == true) {
$select_fields = "$db_tables[categories].category_id, $db_tables[categories].parent_id, $db_tables[categories].id_path, $db_tables[category_descriptions].category, $db_tables[categories].position";
} else {
$select_fields = "$db_tables[categories].category_id, $db_tables[categories].parent_id, $db_tables[categories].id_path, $db_tables[category_descriptions].category, $db_tables[categories].position, $db_tables[categories].avail, $db_tables[categories].product_count";
}
$categories = db_get_hash_array("SELECT $select_fields FROM $db_tables[categories] LEFT JOIN $db_tables[category_descriptions] ON $db_tables[categories].category_id = $db_tables[category_descriptions].category_id AND $db_tables[category_descriptions].lang_code='$lang_code' $conditions", 'category_id');
if (empty($categories)) {
return array();
}
$tmp = array();
// Group categories by the level (simple)
if ($simple == true) {
foreach ($categories as $k => $v) {
$v['level'] = substr_count($v['id_path'], "/");
if (AREA == 'A' && (!empty($current_category_id) || $v['level'] == 0)) {
$v['has_children'] = db_get_field("SELECT category_id FROM $db_tables[categories] WHERE parent_id='$v[category_id]' LIMIT 1");
}
$tmp[$v['level']][$v['category_id']] = $v;
}
} else {
// Group categories by the level (simple) and literalize path
foreach ($categories as $k => $v) {
$path = explode('/', $v['id_path']);
$category_path = array();
foreach ($path as $__k => $__v) {
$category_path[$__v] = @$categories[$__v]['category'];
}
$v['category_path'] = implode('/', $category_path);
$v['level'] = substr_count($v['id_path'], "/");
if (AREA == 'A' && (!empty($current_category_id) || $v['level'] == 0)) {
$v['has_children'] = db_get_field("SELECT category_id FROM $db_tables[categories] WHERE parent_id='$v[category_id]' LIMIT 1");
}
$tmp[$v['level']][$v['category_id']] = $v;
}
}
ksort($tmp, SORT_NUMERIC);
$tmp = array_reverse($tmp);
foreach ($tmp as $level => $v) {
foreach ($v as $k => $data) {
if (isset($tmp[$level+1][$data['parent_id']])) {
$tmp[$level+1][$data['parent_id']]['subcategories'][] = $tmp[$level][$k];
unset($tmp[$level][$k]);
}
}
}
$tmp = array_pop($tmp);
fn_sort($tmp, 'subcategories', 'fn_cat_sort');
if ($plain == true) {
return fn_plain_categories($tmp);
} else {
return $tmp;
}
}