date == $b->date ? 0 : ( $a->date < $b->date ) ? 1 : -1; } // Rebuilt cache index function rebuilt_cache($type) { $dir = 'cache/index'; $posts_cache_sorted = array(); $posts_cache_unsorted = array(); $page_cache = array(); $author_cache = array(); if (is_dir($dir) === false) { mkdir($dir, 0777, true); } if ($type === 'posts') { $posts_cache_unsorted = glob('content/*/blog/*.md', GLOB_NOSORT); $string = serialize($posts_cache_unsorted); file_put_contents('cache/index/index-unsorted.txt', print_r($string, true)); $tmp = array(); $tmp = glob('content/*/blog/*.md', GLOB_NOSORT); if (is_array($tmp)) { foreach ($tmp as $file) { $posts_cache_sorted[] = pathinfo($file); } } usort($posts_cache_sorted, "sortfile"); $string = serialize($posts_cache_sorted); file_put_contents('cache/index/index-sorted.txt', print_r($string, true)); } elseif ($type === 'page') { $page_cache = glob('content/static/*.md', GLOB_NOSORT); $string = serialize($page_cache); file_put_contents('cache/index/index-page.txt', print_r($string, true)); } elseif ($type === 'subpage') { $page_cache = glob('content/static/*/*.md', GLOB_NOSORT); $string = serialize($page_cache); file_put_contents('cache/index/index-sub-page.txt', print_r($string, true)); } elseif ($type === 'author') { $author_cache = glob('content/*/author.md', GLOB_NOSORT); $string = serialize($author_cache); file_put_contents('cache/index/index-author.txt', print_r($string, true)); } elseif ($type === 'all') { rebuilt_cache('posts'); rebuilt_cache('page'); rebuilt_cache('subpage'); rebuilt_cache('author'); } } // Return blog posts. function get_posts($posts, $page = 1, $perpage = 0) { if (empty($posts)) { $posts = get_post_sorted(); } $tmp = array(); // Extract a specific page with results $posts = array_slice($posts, ($page - 1) * $perpage, $perpage); foreach ($posts as $index => $v) { $post = new stdClass; $filepath = $v['dirname'] . '/' . $v['basename']; // Extract the date $arr = explode('_', $filepath); // Replaced string $replaced = substr($arr[0], 0, strrpos($arr[0], '/')) . '/'; // Author string $str = explode('/', $replaced); $author = $str[count($str) - 3]; // The post author + author url $post->author = $author; $post->authorurl = site_url() . 'author/' . $author; $dt = str_replace($replaced, '', $arr[0]); $t = str_replace('-', '', $dt); $time = new DateTime($t); $timestamp = $time->format("Y-m-d H:i:s"); // The post date $post->date = strtotime($timestamp); // The archive per day $post->archive = site_url() . 'archive/' . date('Y-m', $post->date); // The post URL $post->url = site_url() . date('Y/m', $post->date) . '/' . str_replace('.md', '', $arr[2]); $tag = array(); $url = array(); $bc = array(); $t = explode(',', $arr[1]); foreach ($t as $tt) { $tag[] = array($tt, site_url() . 'tag/' . $tt); } foreach ($tag as $a) { $url[] = '' . $a[0] . ''; $bc[] = '' . $a[0] . ''; } $post->tag = implode(', ', $url); $post->tagb = implode(' ยป ', $bc); $post->file = $filepath; // Get the contents and convert it to HTML $content = MarkdownExtra::defaultTransform(file_get_contents($filepath)); // Extract the title and body $post->title = get_content_tag('t', $content, 'Untitled: ' . date('l jS \of F Y', $post->date)); $post->body = remove_html_comments($content); if (config("views.counter")) { $post->views = get_views($post->file); } $post->description = get_content_tag("d", $content, get_description($post->body)); $tmp[] = $post; } return $tmp; } // Find post by year, month and name, previous, and next. function find_post($year, $month, $name) { $posts = get_post_sorted(); foreach ($posts as $index => $v) { $url = $v['basename']; if (strpos($url, "$year-$month") !== false && strpos($url, $name . '.md') !== false) { // Use the get_posts method to return // a properly parsed object $ar = get_posts($posts, $index + 1, 1); $nx = get_posts($posts, $index, 1); $pr = get_posts($posts, $index + 2, 1); if ($index == 0) { if (isset($pr[0])) { return array( 'current' => $ar[0], 'prev' => $pr[0] ); } else { return array( 'current' => $ar[0], 'prev' => null ); } } elseif (count($posts) == $index + 1) { return array( 'current' => $ar[0], 'next' => $nx[0] ); } else { return array( 'current' => $ar[0], 'next' => $nx[0], 'prev' => $pr[0] ); } } } } // Return tag page. function get_tag($tag, $page, $perpage, $random) { $posts = get_post_sorted(); if ($random === true) { shuffle($posts); } $tmp = array(); foreach ($posts as $index => $v) { $url = $v['filename']; $str = explode('_', $url); $mtag = explode(',', $str[1]); $etag = explode(',', $tag); foreach ($mtag as $t) { foreach ($etag as $e) { $e = trim($e); if ($t === $e) { $tmp[] = $v; } } } } if (empty($tmp)) { not_found(); } $tmp = array_unique($tmp, SORT_REGULAR); return $tmp = get_posts($tmp, $page, $perpage); } // Return archive page. function get_archive($req, $page, $perpage) { $posts = get_post_sorted(); $tmp = array(); foreach ($posts as $index => $v) { $url = $v['filename']; $str = explode('_', $url); if (strpos($str[0], "$req") !== false) { $tmp[] = $v; } } if (empty($tmp)) { not_found(); } return $tmp = get_posts($tmp, $page, $perpage); } // Return posts list on profile. function get_profile($profile, $page, $perpage) { $posts = get_post_sorted(); $tmp = array(); foreach ($posts as $index => $v) { $url = $v['dirname']; $str = explode('/', $url); $author = $str[count($str) - 2]; if ($profile === $author) { $tmp[] = $v; } } if (empty($tmp)) { return; } return $tmp = get_posts($tmp, $page, $perpage); } // Return author bio. function get_bio($author) { $names = get_author_names(); $username = 'config/users/' . $author . '.ini'; $tmp = array(); if (!empty($names)) { foreach ($names as $index => $v) { $post = new stdClass; // Replaced string $replaced = substr($v, 0, strrpos($v, '/')) . '/'; // Author string $str = explode('/', $replaced); $profile = $str[count($str) - 2]; if ($author === $profile) { // Profile URL $url = str_replace($replaced, '', $v); $post->url = site_url() . 'author/' . $profile; // Get the contents and convert it to HTML $content = MarkdownExtra::defaultTransform(file_get_contents($v)); // Extract the title and body $post->title = get_content_tag('t', $content, $author); $post->body = remove_html_comments($content); $post->description = get_content_tag("d", $content, get_description($post->body)); $tmp[] = $post; } } } if (!empty($tmp) || file_exists($username)) { return $tmp; } else { not_found(); } } function default_profile($author) { $tmp = array(); $profile = new stdClass; $profile->title = $author; $profile->body = '

Just another HTMLy user.

'; $profile->descirption = 'Just another HTMLy user'; return $tmp[] = $profile; } // Return static page. function get_static_post($static) { $posts = get_static_pages(); $tmp = array(); if (!empty($posts)) { foreach ($posts as $index => $v) { if (strpos($v, $static . '.md') !== false) { $post = new stdClass; // Replaced string $replaced = substr($v, 0, strrpos($v, '/')) . '/'; // The static page URL $url = str_replace($replaced, '', $v); $post->url = site_url() . str_replace('.md', '', $url); $post->file = $v; // Get the contents and convert it to HTML $content = MarkdownExtra::defaultTransform(file_get_contents($v)); // Extract the title and body $post->title = get_content_tag('t', $content, $static); $post->body = remove_html_comments($content); if (config("views.counter")) { $post->views = get_views($post->file); } $post->description = get_content_tag("d", $content, get_description($post->body)); $tmp[] = $post; } } } return $tmp; } // Return static page. function get_static_sub_post($static, $sub_static) { $posts = get_static_sub_pages($static); $tmp = array(); if (!empty($posts)) { foreach ($posts as $index => $v) { if (strpos($v, $sub_static . '.md') !== false) { $post = new stdClass; // Replaced string $replaced = substr($v, 0, strrpos($v, '/')) . '/'; // The static page URL $url = str_replace($replaced, '', $v); $post->url = site_url() . $static . "/" . str_replace('.md', '', $url); $post->file = $v; // Get the contents and convert it to HTML $content = MarkdownExtra::defaultTransform(file_get_contents($v)); // Extract the title and body $post->title = get_content_tag('t', $content, $sub_static); $post->body = remove_html_comments($content); $post->views = get_views($post->file); $post->description = get_content_tag("d", $content, get_description($post->body)); $tmp[] = $post; } } } return $tmp; } // Return search page. function get_keyword($keyword, $page, $perpage) { $posts = get_post_sorted(); $tmp = array(); $words = explode(' ', $keyword); foreach ($posts as $index => $v) { $arr = explode('_', $v['filename']); $filter = $arr[1] . ' ' . $arr[2]; foreach ($words as $word) { if (stripos($filter, $word) !== false) { $tmp[] = $v; } } } if (empty($tmp)) { // a non-existing page render('404-search', null, false); die; } return $tmp = get_posts($tmp, $page, $perpage); } // Get related posts base on post tag. function get_related($tag) { $perpage = config('related.count'); $posts = get_tag(strip_tags($tag), 1, $perpage + 1, true); $tmp = array(); $req = urldecode($_SERVER['REQUEST_URI']); foreach ($posts as $post) { $url = $post->url; if (strpos($url, $req) === false) { $tmp[] = $post; } } $total = count($tmp); if ($total >= 1) { $i = 1; echo ''; } } // Return post count. Matching $var and $str provided. function get_count($var, $str) { $posts = get_post_sorted(); $tmp = array(); foreach ($posts as $index => $v) { $url = $v[$str]; if (strpos($url, "$var") !== false) { $tmp[] = $v; } } return count($tmp); } // Return seaarch result count function keyword_count($keyword) { $posts = get_post_sorted(); $tmp = array(); $words = explode(' ', $keyword); foreach ($posts as $index => $v) { $arr = explode('_', $v['filename']); $filter = $arr[1] . ' ' . $arr[2]; foreach ($words as $word) { if (strpos($filter, strtolower($word)) !== false) { $tmp[] = $v; } } } $tmp = array_unique($tmp, SORT_REGULAR); return count($tmp); } function recent() { $str = ''; return $str; } // Return an archive list, categorized by year and month. function archive_list() { $posts = get_post_unsorted(); $by_year = array(); $col = array(); if (!empty($posts)) { foreach ($posts as $index => $v) { $arr = explode('_', $v); // Replaced string $str = $arr[0]; $replaced = substr($str, 0, strrpos($str, '/')) . '/'; $date = str_replace($replaced, '', $arr[0]); $data = explode('-', $date); $col[] = $data; } foreach ($col as $row) { $y = $row['0']; $m = $row['1']; $by_year[$y][] = $m; } # Most recent year first krsort($by_year); # Iterate for display $script = << -1){this.parentNode.className = 'collapsed';this.innerHTML = '►';} else {this.parentNode.className = 'expanded';this.innerHTML = '▼';} EOF; echo '

Archive

'; $i = 0; $len = count($by_year); foreach ($by_year as $year => $months) { if ($i == 0) { $class = 'expanded'; $arrow = '▼'; } else { $class = 'collapsed'; $arrow = '►'; } $i++; echo ''; } } } // Return tag cloud. function tag_cloud() { $posts = get_post_unsorted(); $tags = array(); if (!empty($posts)) { foreach ($posts as $index => $v) { $arr = explode('_', $v); $data = $arr[1]; $mtag = explode(',', $data); foreach ($mtag as $etag) { $tags[] = $etag; } } $tag_collection = array_count_values($tags); ksort($tag_collection); echo '

Tags

'; echo ''; } } // Helper function to determine whether // to show the previous buttons function has_prev($prev) { if (!empty($prev)) { return array( 'url' => $prev->url, 'title' => $prev->title ); } } // Helper function to determine whether // to show the next buttons function has_next($next) { if (!empty($next)) { return array( 'url' => $next->url, 'title' => $next->title ); } } // Helper function to determine whether // to show the pagination buttons function has_pagination($total, $perpage, $page = 1) { if (!$total) { $total = count(get_post_unsorted()); } return array( 'prev' => $page > 1, 'next' => $total > $page * $perpage ); } // Get the meta description function get_description($string) { $string = remove_accent($string); $string = preg_replace('/[^A-Za-z0-9 !@#$%^&*(),.-]/u', ' ', strip_tags($string)); $string = ltrim($string); $string = substr($string, 0, config('description.char')); return $string = substr($string, 0, strrpos($string, ' ')); } // Get the teaser function get_teaser($text, $url) { $teaserType = config('teaser.type'); if (strlen(strip_tags($text)) < config('teaser.char') || $teaserType === 'full') { echo $text; } else { $string = preg_replace('/\s\s+/', ' ', strip_tags($text)); $string = substr($string, 0, config('teaser.char')); $string = substr($string, 0, strrpos($string, ' ')); $body = $string . '...' . ' more'; echo '

' . $body . '

'; } } // Get thumbnail from image and Youtube. function get_thumbnail($text) { if (config('img.thumbnail') == 'true') { $teaserType = config('teaser.type'); if (strlen(strip_tags($text)) > config('teaser.char') && $teaserType === 'trimmed') { libxml_use_internal_errors(true); $default = config('default.thumbnail'); $dom = new DOMDocument(); $dom->loadHtml($text); $imgTags = $dom->getElementsByTagName('img'); $vidTags = $dom->getElementsByTagName('iframe'); if ($imgTags->length > 0) { $imgElement = $imgTags->item(0); $imgSource = $imgElement->getAttribute('src'); return '
'; } elseif ($vidTags->length > 0) { $vidElement = $vidTags->item(0); $vidSource = $vidElement->getAttribute('src'); $fetch = explode("embed/", $vidSource); if (isset($fetch[1])) { $vidThumb = '//img.youtube.com/vi/' . $fetch[1] . '/default.jpg'; return '
'; } } else { if (!empty($default)) { return '
'; } } } else { } } } // Return edit tab on post function tab($p) { $user = $_SESSION[config("site.url")]['user']; $role = user('role', $user); if (isset($p->author)) { if ($user === $p->author || $role === 'admin') { echo '
ViewEdit
'; } } else { echo '
ViewEdit
'; } } // Use base64 encode image to speed up page load time. function base64_encode_image($filename = string, $filetype = string) { if ($filename) { $imgbinary = fread(fopen($filename, "r"), filesize($filename)); return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary); } } // Social links function social($imgDir = null) { $twitter = config('social.twitter'); $facebook = config('social.facebook'); $google = config('social.google'); $tumblr = config('social.tumblr'); $rss = site_url() . 'feed/rss'; if ($imgDir === null) { $imgDir = "default/img/"; } if (!empty($twitter)) { echo 'Twitter'; } if (!empty($facebook)) { echo 'Facebook'; } if (!empty($google)) { echo 'Google+'; } if (!empty($tumblr)) { echo 'Tumblr'; } echo 'RSS Feed'; } // Copyright function copyright() { $blogcp = blog_copyright(); $credit = 'Proudly powered by HTMLy.'; if (!empty($blogcp)) { return $copyright = '

' . $blogcp . '

' . $credit . '

'; } else { return $credit = '

' . $credit . '

'; } } // Disqus on post. function disqus($title = null, $url = null) { $comment = config('comment.system'); $disqus = config('disqus.shortname'); $script = << var disqus_shortname = '{$disqus}'; var disqus_title = '{$title}'; var disqus_url = '{$url}'; (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); EOF; if (!empty($disqus) && $comment == 'disqus') { return $script; } } // Disqus comment count on teaser function disqus_count() { $comment = config('comment.system'); $disqus = config('disqus.shortname'); $script = << var disqus_shortname = '{$disqus}'; (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/count.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); EOF; if (!empty($disqus) && $comment == 'disqus') { return $script; } } // Disqus recent comments function recent_comments() { $comment = config('comment.system'); $disqus = config('disqus.shortname'); $script = << var heading ='

Comments

'; document.write(heading); EOF; if (!empty($disqus) && $comment == 'disqus') { return $script; } } function facebook() { $comment = config('comment.system'); $appid = config('fb.appid'); $script = << EOF; if (!empty($appid) && $comment == 'facebook') { return $script; } } // Google Publisher (Google+ page). function publisher() { $publisher = config('google.publisher'); if (!empty($publisher)) { return $publisher; } } // Google Analytics function analytics($analyticsDir = null) { $analytics = config('google.analytics.id'); if($analyticsDir === null) { $analyticsDir = '//www.google-analytics.com/analytics.js'; } else { $analyticsDir = site_url() . 'themes/' . $analyticsDir . 'analytics.js'; } $script = << (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','{$analyticsDir}','ga'); ga('create', '{$analytics}', 'auto'); ga('send', 'pageview'); EOF; if (!empty($analytics)) { return $script; } } // Menu function menu() { $menu = config('blog.menu'); $req = $_SERVER['REQUEST_URI']; if (!empty($menu)) { $links = explode('|', $menu); echo ''; } else { get_menu(); } } function get_title_from_file($v) { // Get the contents and convert it to HTML $content = MarkdownExtra::defaultTransform(file_get_contents($v)); $replaced = substr($v, 0, strrpos($v, '/')) . '/'; $base = str_replace($replaced, '', $v); // Extract the title and body return get_content_tag('t', $content, str_replace('-', ' ', str_replace('.md', '', $base))); } // Auto generate menu from static page function get_menu() {//aktive Link for Sub Pages ::TODO $posts = get_static_pages(); $req = $_SERVER['REQUEST_URI']; if (!empty($posts)) { krsort($posts); echo ''; } else { echo ''; } } // Search form function search() { echo << EOF; if (isset($_GET['search'])) { $url = site_url() . 'search/' . $_GET['search']; header("Location: $url"); } } // The not found error function not_found() { error(404, render('404', null, false)); } // Turn an array of posts into an RSS feed function generate_rss($posts) { $feed = new Feed(); $channel = new Channel(); $rssLength = config('rss.char'); $channel ->title(blog_title()) ->description(blog_description()) ->url(site_url()) ->appendTo($feed); foreach ($posts as $p) { if (!empty($rssLength)) { if (strlen(strip_tags($p->body)) < config('rss.char')) { $string = preg_replace('/\s\s+/', ' ', strip_tags($p->body)); $body = $string . '...' . ' more'; } else { $string = preg_replace('/\s\s+/', ' ', strip_tags($p->body)); $string = substr($string, 0, config('rss.char')); $string = substr($string, 0, strrpos($string, ' ')); $body = $string . '...' . ' more'; } } else { $body = $p->body; } $item = new Item(); $tags = explode(',', str_replace(' ', '', strip_tags($p->tag))); foreach ($tags as $tag) { $item ->category($tag, site_url() . 'tag/' . $tag); } $item ->title($p->title) ->pubDate($p->date) ->description($body) ->url($p->url) ->appendTo($channel); } echo $feed; } // Return post, archive url for sitemap function get_path() { $posts = get_post_sorted(); $tmp = array(); foreach ($posts as $index => $v) { $post = new stdClass; $filepath = $v['dirname'] . '/' . $v['basename']; // Extract the date $arr = explode('_', $filepath); // Replaced string $replaced = substr($arr[0], 0, strrpos($arr[0], '/')) . '/'; // Author string $str = explode('/', $replaced); $author = $str[count($str) - 3]; $post->authorurl = site_url() . 'author/' . $author; $dt = str_replace($replaced, '', $arr[0]); $t = str_replace('-', '', $dt); $time = new DateTime($t); $timestamp = $time->format("Y-m-d H:i:s"); // The post date $post->date = strtotime($timestamp); // The archive per day $post->archiveday = site_url() . 'archive/' . date('Y-m-d', $post->date); // The archive per day $post->archivemonth = site_url() . 'archive/' . date('Y-m', $post->date); // The archive per day $post->archiveyear = site_url() . 'archive/' . date('Y', $post->date); // The post URL $post->url = site_url() . date('Y/m', $post->date) . '/' . str_replace('.md', '', $arr[2]); $tmp[] = $post; } return $tmp; } // Return static page path for sitemap function get_static_path() { $posts = get_static_pages(); $tmp = array(); if (!empty($posts)) { foreach ($posts as $index => $v) { $post = new stdClass; // Replaced string $replaced = substr($v, 0, strrpos($v, '/')) . '/'; // The static page URL $url = str_replace($replaced, '', $v); $post->url = site_url() . str_replace('.md', '', $url); $tmp[] = $post; } } return $tmp; } // Generate sitemap.xml. function generate_sitemap($str) { header('X-Robots-Tag: noindex'); echo ''; if ($str == 'index') { echo ''; echo '' . site_url() . 'sitemap.base.xml'; echo '' . site_url() . 'sitemap.post.xml'; echo '' . site_url() . 'sitemap.static.xml'; echo '' . site_url() . 'sitemap.tag.xml'; echo '' . site_url() . 'sitemap.archive.xml'; echo '' . site_url() . 'sitemap.author.xml'; echo ''; } elseif ($str == 'base') { echo ''; echo '' . site_url() . '1.0'; echo ''; } elseif ($str == 'post') { $posts = get_path(); echo ''; foreach ($posts as $p) { echo '' . $p->url . '0.5'; } echo ''; } elseif ($str == 'static') { $posts = get_static_path(); echo ''; if (!empty($posts)) { foreach ($posts as $p) { echo '' . $p->url . '0.5'; } } echo ''; } elseif ($str == 'tag') { $posts = get_post_unsorted(); $tags = array(); if (!empty($posts)) { foreach ($posts as $index => $v) { $arr = explode('_', $v); $data = $arr[1]; $mtag = explode(',', $data); foreach ($mtag as $etag) { $tags[] = $etag; } } foreach ($tags as $t) { $tag[] = site_url() . 'tag/' . $t; } echo ''; if (isset($tag)) { $tag = array_unique($tag, SORT_REGULAR); foreach ($tag as $t) { echo '' . $t . '0.5'; } } echo ''; } } elseif ($str == 'archive') { $posts = get_path(); $day = array(); $month = array(); $year = array(); foreach ($posts as $p) { $day[] = $p->archiveday; $month[] = $p->archivemonth; $year[] = $p->archiveyear; } $day = array_unique($day, SORT_REGULAR); $month = array_unique($month, SORT_REGULAR); $year = array_unique($year, SORT_REGULAR); echo ''; foreach ($day as $d) { echo '' . $d . '0.5'; } foreach ($month as $m) { echo '' . $m . '0.5'; } foreach ($year as $y) { echo '' . $y . '0.5'; } echo ''; } elseif ($str == 'author') { $posts = get_path(); $author = array(); foreach ($posts as $p) { $author[] = $p->authorurl; } $author = array_unique($author, SORT_REGULAR); echo ''; foreach ($author as $a) { echo '' . $a . '0.5'; } echo ''; } } // Function to generate OPML file function generate_opml() { $opml_data = array( 'head' => array( 'title' => blog_title() . ' OPML File', 'ownerName' => blog_title(), 'ownerId' => site_url() ), 'body' => array( array( 'text' => blog_title(), 'description' => blog_description(), 'htmlUrl' => site_url(), 'language' => 'unknown', 'title' => blog_title(), 'type' => 'rss', 'version' => 'RSS2', 'xmlUrl' => site_url() . 'feed/rss' ) ) ); $opml = new OPML($opml_data); echo $opml->render(); } // Turn an array of posts into a JSON function generate_json($posts) { return json_encode($posts); } // Create Zip files function Zip($source, $destination, $include_dir = false) { if (!extension_loaded('zip') || !file_exists($source)) { return false; } if (file_exists($destination)) { unlink($destination); } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } if (is_dir($source) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = str_replace('\\', '/', $file); // Ignore "." and ".." folders if (in_array(substr($file, strrpos($file, '/') + 1), array('.', '..'))) continue; if (is_dir($file) === true) { $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file) === true) { $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } } else if (is_file($source) === true) { $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); } // TRUE if the current page is the front page. function is_front() { $req = $_SERVER['REQUEST_URI']; if ($req == site_path() . '/' || strpos($req, site_path() . '/?page') !== false) { return true; } else { return false; } } // TRUE if the current page is an index page like frontpage, tag index, archive index and search index. function is_index() { $req = $_SERVER['REQUEST_URI']; if (strpos($req, '/archive/') !== false || strpos($req, '/tag/') !== false || strpos($req, '/search/') !== false || $req == site_path() . '/' || strpos($req, site_path() . '/?page') !== false) { return true; } else { return false; } } // Return blog title function blog_title() { return config('blog.title'); } // Return blog tagline function blog_tagline() { return config('blog.tagline'); } // Return blog description function blog_description() { return config('blog.description'); } // Return blog copyright function blog_copyright() { return config('blog.copyright'); } // Return author info function authorinfo($title = null, $body = null) { if (config('author.info') == 'true') { return '

by ' . $title . '

' . $body . '
'; } } function head_contents($title, $description, $canonical) { $styleImage = config('lightbox'); $jq = config('jquery'); $output = ''; $wmt_id = config('google.wmt.id'); $title = '' . $title . ''; $favicon = ''; $charset = ''; $generator = ''; $xua = ''; $viewport = ''; $description = ''; $sitemap = ''; $canonical = ''; $feed = ''; $lightboxcss = ''; $jquery = ''; $lightbox = ''; $corejs = ''; $webmasterTools = ''; if(!empty($wmt_id)) { $webmasterTools = ''; } if ($styleImage == 'on') { $output .= $charset . "\n" . $xua . "\n" . $title . "\n" . $description . "\n" . $viewport . "\n" . $generator . "\n" . $webmasterTools . "\n" . $favicon . "\n" . $canonical . "\n" . $sitemap . "\n" . $feed . "\n" . $lightboxcss . "\n" . $jquery . "\n" . $lightbox . "\n" . $corejs . "\n"; } else { if ($jq == 'enable') { $output .= $charset . "\n" . $xua . "\n" . $title . "\n" . $description . "\n" . $viewport . "\n" . $generator . "\n" . $webmasterTools . "\n" . $favicon . "\n" . $canonical . "\n" . $sitemap . "\n" . $feed . "\n" . $jquery . "\n"; } else { $output .= $charset . "\n" . $xua . "\n" . $title . "\n" . $description . "\n" . $viewport . "\n" . $generator . "\n" . $webmasterTools . "\n" . $favicon . "\n" . $canonical . "\n" . $sitemap . "\n" . $feed . "\n"; } } return $output; } // Return toolbar function toolbar() { $user = $_SESSION[config("site.url")]['user']; $role = user('role', $user); $base = site_url(); $CSRF = get_csrf(); $updater = new Updater; echo << EOF; echo '
'; } // File cache function file_cache($request) { if(config('cache.off')) return; $c = str_replace('/', '#', str_replace('?', '~', $request)); $cachefile = 'cache/page/' . $c . '.cache'; if (file_exists($cachefile)) { header('Content-type: text/html; charset=utf-8'); readfile($cachefile); die; } } function generate_csrf_token() { $_SESSION[config("site.url")]['csrf_token'] = sha1(microtime(true) . mt_rand(10000, 90000)); } function get_csrf() { if (!isset($_SESSION[config("site.url")]['csrf_token']) || empty($_SESSION[config("site.url")]['csrf_token'])) { generate_csrf_token(); } return $_SESSION[config("site.url")]['csrf_token']; } function is_csrf_proper($csrf_token) { if ($csrf_token == get_csrf()) { return true; } return false; } function add_view($page) { $filename = "cache/count.json"; $views = array(); if (file_exists($filename)) { $views = json_decode(file_get_contents($filename), true); } if (isset($views[$page])) { $views[$page] ++; } else { $views[$page] = 1; } file_put_contents($filename, json_encode($views)); } function get_views($page) { static $_views = array(); if (empty($_views)) { $filename = "cache/count.json"; if (file_exists($filename)) { $_views = json_decode(file_get_contents($filename), true); } } if (isset($_views[$page])) { return $_views[$page]; } return -1; } function get_content_tag($tag, $string, $alt = null) { $reg = '/\(\s|)/', '', $content)); }