diff --git a/bl-kernel/dbcategories.class.php b/bl-kernel/dbcategories.class.php new file mode 100644 index 00000000..bd35628c --- /dev/null +++ b/bl-kernel/dbcategories.class.php @@ -0,0 +1,130 @@ +array('inFile'=>false, 'value'=>array()), + 'pagesIndex'=>array('inFile'=>false, 'value'=>array()) + ); + + function __construct() + { + parent::__construct(PATH_DATABASES.'categories.php'); + } + + private function getByCategory($type='postsIndex', $categorySlug, $amountPerPage, $pageNumber) + { + // Check if the category exists + if( !isset($this->db[$type][$categorySlug]) ) { + Log::set(__METHOD__.LOG_SEP.'Error getting '.$type.' by the category: '.$categorySlug); + return array(); + } + + $list = $this->db[$type][$categorySlug]['list']; + + $init = (int) $amountPerPage * $pageNumber; + $end = (int) min( ($init + $amountPerPage - 1), count($list) - 1 ); + $outrange = $init<0 ? true : $init > $end; + + if($outrange) { + Log::set(__METHOD__.LOG_SEP.'Error getting '.$type.' by the category, out of range, pageNumber: '.$pageNumber); + return array(); + } + + $tmp = array_flip($list); + return array_slice($tmp, $init, $amountPerPage, true); + } + + public function getPagesByCategory($categorySlug, $amountPerPage, $pageNumber) + { + return $this->getByCategory('pagesIndex', $categorySlug, $amountPerPage, $pageNumber); + } + + public function getPostsByCategory($categorySlug, $amountPerPage, $pageNumber) + { + return $this->getByCategory('postsIndex', $categorySlug, $amountPerPage, $pageNumber); + } + + private function countByCategory($type='postsIndex', $categorySlug) + { + if( isset($this->db[$type][$categorySlug]) ) { + return count($this->db[$type][$categorySlug]['list']); + } + + return 0; + } + + public function countPostsByCategory($categorySlug) + { + return $this->countByCategory('postsIndex', $categorySlug); + } + + public function countPagesByCategory($categorySlug) + { + return $this->countByCategory('pagesIndex', $categorySlug); + } + + // Regenerate the posts index for each tag. + // (array) $db, the $db must be sorted by date and the posts published only. + public function reindexPosts($db) + { + $tagsIndex = array(); + + // Foreach post + foreach($db as $postKey=>$values) + { + $tags = $values['tags']; + + // Foreach tag from post + foreach($tags as $tagKey=>$tagName) + { + if( isset($tagsIndex[$tagKey]) ) { + array_push($tagsIndex[$tagKey]['posts'], $postKey); + } + else { + $tagsIndex[$tagKey]['name'] = $tagName; + $tagsIndex[$tagKey]['posts'] = array($postKey); + } + } + } + + $this->db['postsIndex'] = $tagsIndex; + + if( $this->save() === false ) { + Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.'); + return false; + } + + return true; + } + +} \ No newline at end of file