bludit/kernel/boot/rules/70.build_posts.php

134 lines
3.2 KiB
PHP
Raw Normal View History

2015-03-08 18:02:59 +01:00
<?php defined('BLUDIT') or die('Bludit CMS.');
2015-06-27 00:12:26 +02:00
// ============================================================================
// Variables
// ============================================================================
2015-03-08 18:02:59 +01:00
$posts = array();
2015-06-27 00:12:26 +02:00
// ============================================================================
// Functions
// ============================================================================
2015-05-05 03:00:01 +02:00
function buildPost($key)
2015-03-08 18:02:59 +01:00
{
global $dbPosts;
global $dbUsers;
global $Parsedown;
2015-07-24 05:28:25 +02:00
global $Site;
2015-03-08 18:02:59 +01:00
2015-05-05 03:00:01 +02:00
// Post object.
$Post = new Post($key);
if( !$Post->isValid() ) {
2015-07-05 20:00:34 +02:00
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from file with key: '.$key);
2015-03-08 18:02:59 +01:00
return false;
2015-05-05 03:00:01 +02:00
}
2015-03-08 18:02:59 +01:00
2015-05-05 03:00:01 +02:00
// Page database.
$db = $dbPosts->getDb($key);
if( !$db ) {
2015-07-05 20:00:34 +02:00
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from database with key: '.$key);
2015-03-08 18:02:59 +01:00
return false;
2015-05-05 03:00:01 +02:00
}
2015-03-08 18:02:59 +01:00
2015-05-05 03:00:01 +02:00
// Foreach field from database.
foreach($db as $field=>$value)
2015-03-08 18:02:59 +01:00
{
2015-05-05 03:00:01 +02:00
if($field=='unixTimeCreated')
2015-03-08 18:02:59 +01:00
{
2015-05-05 03:00:01 +02:00
// Format dates, not overwrite from file fields.
$Post->setField('unixTimeCreated', $value, false);
$Post->setField('date', Date::format($value, '%d %B'), false);
$Post->setField('timeago', Date::timeago($value), false);
2015-03-08 18:02:59 +01:00
}
else
{
2015-05-05 03:00:01 +02:00
// Other fields, not overwrite from file fields.
$Post->setField($field, $value, false);
2015-03-08 18:02:59 +01:00
}
}
2015-05-05 03:00:01 +02:00
// Content in raw format
2015-07-24 05:28:25 +02:00
$contentRaw = $Post->content();
$Post->setField('contentRaw', $contentRaw, true);
2015-05-05 03:00:01 +02:00
2015-03-08 18:02:59 +01:00
// Parse the content
2015-07-24 05:28:25 +02:00
$content = Text::imgRel2Abs($contentRaw, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
$content = $Parsedown->text($content); // Parse Markdown.
2015-03-08 18:02:59 +01:00
$Post->setField('content', $content, true);
2015-07-07 03:05:17 +02:00
// Parse username for the post.
2015-05-05 03:00:01 +02:00
if( $dbUsers->userExists( $Post->username() ) )
2015-03-08 18:02:59 +01:00
{
2015-07-15 01:57:18 +02:00
$user = $dbUsers->getDb( $Post->username() );
2015-03-08 18:02:59 +01:00
2015-07-07 03:05:17 +02:00
$Post->setField('authorFirstName', $user['firstName'], false);
$Post->setField('authorLastName', $user['lastName'], false);
2015-03-08 18:02:59 +01:00
}
return $Post;
}
2015-05-15 00:07:45 +02:00
function build_posts_per_page($pageNumber=0, $amount=5, $draftPosts=false)
2015-03-08 18:02:59 +01:00
{
global $dbPosts;
global $posts;
2015-05-15 00:07:45 +02:00
global $Url;
2015-03-08 18:02:59 +01:00
2015-05-15 00:07:45 +02:00
$list = $dbPosts->getPage($pageNumber, $amount, $draftPosts);
// There are not post for the pageNumber then NotFound page
2015-05-19 01:22:05 +02:00
if(empty($list) && $pageNumber>0) {
2015-05-15 00:07:45 +02:00
$Url->setNotFound(true);
}
2015-03-08 18:02:59 +01:00
foreach($list as $slug=>$db)
{
2015-05-05 03:00:01 +02:00
$Post = buildPost($slug);
2015-03-08 18:02:59 +01:00
2015-05-05 03:00:01 +02:00
if($Post!==false) {
2015-03-08 18:02:59 +01:00
array_push($posts, $Post);
}
}
}
2015-06-27 00:12:26 +02:00
// ============================================================================
// Main
// ============================================================================
2015-03-08 18:02:59 +01:00
// Filter by post, then build it
if( ($Url->whereAmI()==='post') && ($Url->notFound()===false) )
{
2015-05-05 03:00:01 +02:00
$Post = buildPost( $Url->slug() );
2015-03-08 18:02:59 +01:00
if($Post===false)
{
$Url->setNotFound(true);
unset($Post);
}
elseif( !$Post->published() )
{
$Url->setNotFound(true);
unset($Post);
}
else
{
$posts[0] = $Post;
}
}
// Build post per page
else
{
2015-05-05 03:00:01 +02:00
if($Url->whereAmI()==='admin') {
// Build post for admin area with drafts
2015-07-24 05:28:25 +02:00
build_posts_per_page($Url->pageNumber(), POSTS_PER_PAGE_ADMIN, true);
2015-05-05 03:00:01 +02:00
}
else
{
2015-06-12 06:00:04 +02:00
// Build post for the site, without the drafts posts
2015-05-15 00:07:45 +02:00
build_posts_per_page($Url->pageNumber(), $Site->postsPerPage(), false);
2015-05-05 03:00:01 +02:00
}
2015-03-08 18:02:59 +01:00
}