prepare('SELECT * FROM `fmf_categories` WHERE `cat_id` = :id'); $getCat->bindValue('id', $category); $categoryInfo = $getCat->execute() ? $getCat->fetch(PDO::FETCH_ASSOC) : false; return $cats[$category] = ($categoryInfo ? $categoryInfo : []); } function category_children(int $parent = 0, int $recurse = 3): array { global $pdo; if($parent < 0) return []; $getCats = $pdo->prepare('SELECT * FROM `fmf_categories` WHERE `cat_parent` = :parent ORDER BY `cat_order`'); $getCats->bindValue('parent', $parent); $categories = $getCats->execute() ? $getCats->fetchAll(PDO::FETCH_ASSOC) : false; $categories = $categories ? $categories : []; if($recurse > 0) { $recurse--; for($i = 0; $i < count($categories); $i++) $categories[$i]['children'] = category_children($categories[$i]['cat_id'], $recurse); } return $categories; } function root_category(): array { $categories = category_children(); $forums = []; for($i = 0; $i < count($categories); $i++) { if($categories[$i]['cat_type'] != 1) { $forums[] = $categories[$i]; unset($categories[$i]); } } if(count($forums) > 0) $categories[] = [ 'cat_id' => 0, 'cat_type' => 1, 'cat_name' => 'Categories', 'children' => $forums, ]; return $categories; } function category_bump(int $category, ?int $post = null, bool $topics = true, bool $posts = true): void { global $pdo; if($category < 1) return; $getParentId = $pdo->prepare('SELECT `cat_parent` FROM `fmf_categories` WHERE `cat_id` = :id'); $getParentId->bindValue('id', $category); $parentId = $getParentId->execute() ? (int)$getParentId->fetchColumn() : 0; if($parentId > 0) category_bump($parentId, $post, $topics, $posts); $bump = $pdo->prepare('UPDATE `fmf_categories` SET `cat_count_topics` = IF(:topics, `cat_count_topics` + 1, `cat_count_topics`), `cat_count_posts` = IF(:posts, `cat_count_posts` + 1, `cat_count_posts`), `cat_last_post_id` = COALESCE(:post, `cat_last_post_id`) WHERE `cat_id` = :id'); $bump->bindValue('topics', $topics ? 1 : 0); $bump->bindValue('posts', $posts ? 1 : 0); $bump->bindValue('post', $post); $bump->bindValue('id', $category); $bump->execute(); } function category_breadcrumbs(int $category, bool $excludeSelf): array { global $pdo; $breadcrumbs = []; $getBreadcrumb = $pdo->prepare(' SELECT `cat_id`, `cat_name`, `cat_parent` FROM `fmf_categories` WHERE `cat_id` = :category '); while($category > 0) { $getBreadcrumb->bindValue('category', $category); $breadcrumb = $getBreadcrumb->execute() ? $getBreadcrumb->fetch(PDO::FETCH_ASSOC) : []; if(empty($breadcrumb)) { break; } $breadcrumbs[] = $breadcrumb; $category = $breadcrumb['cat_parent']; } if($excludeSelf) $breadcrumbs = array_slice($breadcrumbs, 1); return array_reverse($breadcrumbs); } function category_child_ids(int $category): array { global $pdo; if($category < 1) return []; static $cached = []; if(isset($cached[$category])) return $cached[$category]; $getChildren = $pdo->prepare(' SELECT `cat_id` FROM `fmf_categories` WHERE `cat_parent` = :category '); $getChildren->bindValue('category', $category); $children = $getChildren->fetchAll(PDO::FETCH_ASSOC); return $cached[$category] = array_column($children, 'cat_id'); }