function GetPage($settings) { $page = null; switch ($settings['filename']) { case 'robots.txt': // robots $page = new Page($settings['keyword'], true); $page->content = "Sitemap: sitemap.xml"; break; case 'sitemap.xml': $loc = ''; $page = new Page($settings['keyword'], true); foreach (glob('data/content/*', GLOB_NOSORT) as $filename) { // ... $p = Page::GetCache(base64_decode(str_replace('data/content/', '', $filename))); $loc .= sprintf('<loc><url>%s%s</url></loc>', OpenBHConf::get('domain'), $p->filename); } $page->content = sprintf(' <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> %s </urlset>', $loc); break; case 'rss': $rss = ''; $time = array(); $page = new Page($settings['keyword'], true); foreach (glob('data/content/*') as $filename) { $time[$filename] = filemtime($filename); } if (count($time) == 0) { break; } arsort($time); $newest = array_slice($time, 0, 10); foreach ($newest as $key => $val) { $p = Page::GetCache(base64_decode(str_replace('data/content/', '', $key))); $rss .= sprintf('<item> <title>%s</title> <link>%s%s</link> <description>%s</description> <author>admin</author> <pubDate>%s</pubDate> </item>', $p->keyword, OpenBHConf::get('domain'), $p->filename, $p->h1, date("F d Y H:i:s.", $val)); } $page->content = sprintf(' <?xml version="1.0" encoding="ISO-8859-1"?> <rss version="2.0"> <channel> <title>%s</title> <description>%s</description> <link>%s</link> <lastBuildDate></lastBuildDate> <generator>RSS</generator> %s </channel> </rss>', '', '', OpenBHConf::get('domain'), $rss); break; case 'index': // homepage - bloglike $pages = array(); $df = new DataFeed(); foreach ($df->ReturnFirstKeywords(OpenBHConf::get('startpage')) as $kw) { // check if we already cached this page otherwise open dummy for filename $page = null; $page = Page::GetCache($kw); if ($page == null) { $page = new Page($kw, false, null, true); // create empty page .. will generate filename } array_push($pages, $page); } // first hit ? if (empty($pages[0]->content)) { $datafeed = new DataFeed(); $pages[0]->advertisment = $datafeed->ParseFeed($pages[0]->keyword); $pages[0]->Init(); // this page isnt built yet because its only a skeleton holding the fake filename for navigation use } $pages[0]->SkinIndex($pages); $page = $pages[0]; break; default: $page = null; // is this page already built/cached ? if (!empty($settings['keyword'])) { $page = Page::GetCache($settings['keyword']); } else { // no keyword no page $page = new Page('', true); $page->responsecode = 404; $page->content = OpenBHConf::get('404'); break; } if ($page == null) { // check datafeed $datafeed = new DataFeed(); $feedData = $datafeed->ParseFeed($settings['keyword']); if (!is_array($feedData)) { $page = new Page('', true); $page->responsecode = 404; $page->content = OpenBHConf::get('404'); break; } // build page $page = new Page($settings['keyword'], false, $feedData); /* we could do cloaking here this way ;) - this only works for datafeeds including an url */ if (array_key_exists('url', $feedData) && OpenBHConf::get('cloak') == true) { $cloak = new Cloaker($_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_REFERER']); if ($cloak->IsBot() == false) { $page->responsecode = 301; $page->redirlink = $feedData['url']; } } } // only a skeleton ? if (empty($page->content)) { $datafeed = new DataFeed(); $page->advertisment = $datafeed->ParseFeed($settings['keyword']); $page->Init(); // this page isnt built yet because its only a skeleton holding the fake filename for navigation use } break; } return $page; }