settings = $settingsService; $this->contents = $contentService; $this->strings = $stringService; } public function tags() { $pages = $this->contents->loadAllPages(); foreach ($pages as $page) { $temp = []; if (isset($page['tags'])) { $temp = explode(',', $page['tags']); foreach ($temp as $tag) { $label = trim($tag); if (!find($this->p_tags, ['tag_name' => $label])) { array_push($this->p_tags, [ 'tag_name' => $label, 'slug' => $this->strings::safeString($label), 'pages' => $this->tagPages($label, $pages), ]); } } } } return $this->p_tags; } private function tagPages($tag, $pages) { $tagged = []; foreach ($pages as $page) { if (isset($page['tags'])) { if (strpos($page['tags'], $tag) !== false) { array_push($tagged, [ 'title' => $page['title'], 'slug' => $page['slug'], 'path' => $page['path'], 'feature' => $page['feature'], ]); } } } return $tagged; } public function archive() { $pages = $this->contents->loadAllPages(); $years = []; $archive = []; foreach ($pages as $page) { // $year = date("Y", date($page["rawCreated"])); $date = explode('/', $page['path']); // echo $page["title"] . " : " . $year . "\n"; if (!find($years, ['year' => trim($date[0])])) { $findPages = filter($pages, ['createdYear' => trim($date[0])]); // var_dump($findPages); array_push( $years, [ 'year' => trim($date[0]), 'count' => count($findPages), ] ); } } foreach ($years as $year) { $sorted = []; $filtered = filter($pages, ['createdYear' => $year['year']]); foreach ($filtered as $obj) { $month = date('m', date($obj['rawCreated'])); if (!find($sorted, ['month' => $month])) { $perMonth = filter( $pages, [ 'path' => $year['year'] . '/' . $month, 'deleted' => false, 'published' => true, 'layout' => 'page', ] ); array_push($sorted, [ 'month' => $month, 'full_month' => date('F', date($obj['rawCreated'])), 'count' => count($perMonth), 'pages' => $perMonth, ]); } } array_push($this->p_archive, [ 'year' => $year['year'], 'year_data' => $sorted, ]); } return $this->p_archive; } public function page($page) { $global = $this->settings->getGlobal(); $pageOptions = []; $pageInfo = [ 'keywords' => isset($global['keywords']) ? $global['keywords'] : 'fipamo, blog, jamstack, php, markdown, js', 'description' => $global['descriptions'], 'image' => $global['base_url'] . $global['background'], 'baseURL' => $global['base_url'], ]; $tags = []; if (isset($page['tags'])) { $taglist = explode(',', $page['tags']); foreach ($taglist as $tag) { $label = trim($tag); array_push($tags, [ 'label' => $label . ' ', 'slug' => $this->strings->safeString($label), ]); } } $meta = [ 'who' => $page['author'], 'when' => $page['created'], 'tags' => $tags, ]; // if page feature isn't empty, find image from list and set it as background image // if it is empty, just use global background if ($page['feature'] != '' || $page['feature'] != null) { $media = explode(',', $page['feature']); $set = false; foreach ($media as $file) { $item = trim($file); $ext = pathinfo($item, PATHINFO_EXTENSION); if ($ext != 'mp4' && !$set) { $pageInfo['image'] = $pageInfo['baseURL'] . $item; $set = true; } } } //TODO: get rid of if statement and always return recent and featured if ($page['layout'] == 'index') { $recent = []; $featured = []; $limit = 4; $pages = $this->contents->loadAllPages(); foreach ($pages as $item) { if ( !$item['deleted'] && $item['published'] && $item['menu'] != 'true' ) { if (count($recent) < $limit) { array_push($recent, [ 'path' => $item['path'], 'slug' => $item['slug'], 'title' => $item['title'], 'feature' => $item['feature'], ]); } if ($item['featured'] == true) { if (count($featured) < $limit) { array_push($featured, [ 'path' => $item['path'], 'slug' => $item['slug'], 'title' => $item['title'], 'feature' => $item['feature'], ]); } } } } $pageOptions = [ 'title' => $page['title'], 'background' => $page['feature'], 'content' => $page['html'], // $cleaned, 'meta' => $meta, 'recent' => $recent, 'featured' => $featured, 'info' => $pageInfo, 'menu' => $this->settings->getMenu(), 'dynamicRender' => $global['dynamicRender'], 'media' => $page['media'], 'files' => $page['docs'], ]; } else { $pageOptions = [ 'title' => $page['title'], 'background' => $page['feature'], 'content' => $page['html'], // $cleaned, 'meta' => $meta, 'info' => $pageInfo, 'menu' => $this->settings->getMenu(), 'dynamicRender' => $global['dynamicRender'], 'media' => $page['media'], 'files' => $page['docs'], ]; } return $pageOptions; } }