bludit/bl-kernel/boot/rules/70.posts.php

178 lines
4.4 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
// ============================================================================
2016-01-08 21:12:17 +01:00
// Array with all posts specified by a filter.
// Filter by page number, by tag, etc.
2015-03-08 18:02:59 +01:00
$posts = array();
2015-06-27 00:12:26 +02:00
// ============================================================================
// Functions
// ============================================================================
2015-08-31 03:18:06 +02:00
function reIndexTagsPosts()
{
global $dbPosts;
global $dbTags;
2015-09-02 02:42:21 +02:00
// Remove unpublished.
$dbPosts->removeUnpublished();
2015-08-31 03:18:06 +02:00
2016-02-07 00:44:43 +01:00
// Regenerate the tags index for posts.
2015-08-31 03:18:06 +02:00
$dbTags->reindexPosts( $dbPosts->db );
2016-02-07 00:44:43 +01:00
// Restore the database, before remove the unpublished.
$dbPosts->restoreDB();
2015-08-31 03:18:06 +02:00
return true;
}
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-09-20 23:46:50 +02:00
// Post object, content from FILE.
2015-05-05 03:00:01 +02:00
$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-09-20 23:46:50 +02:00
// Post database, content from DATABASE JSON.
2016-01-08 00:43:09 +01:00
$db = $dbPosts->getPostDB($key);
2015-05-05 03:00:01 +02:00
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-09-20 23:46:50 +02:00
// Foreach field from DATABASE.
foreach($db as $field=>$value) {
$Post->setField($field, $value);
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-08-22 18:33:33 +02:00
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
$content = $Parsedown->text($content); // Parse Markdown.
2015-07-26 02:25:13 +02:00
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
2015-03-08 18:02:59 +01:00
$Post->setField('content', $content, true);
2015-07-26 02:25:13 +02:00
// Pagebrake
$explode = explode(PAGE_BREAK, $content);
$Post->setField('breakContent', $explode[0], true);
$Post->setField('readMore', !empty($explode[1]), true);
// Date format
$postDate = $Post->date();
$Post->setField('dateRaw', $postDate, true);
$postDateFormated = $Post->dateRaw( $Site->dateFormat() );
$Post->setField('date', $postDateFormated, true);
2016-01-01 00:31:51 +01:00
// User object
$username = $Post->username();
$Post->setField('user', $dbUsers->getUser($username));
2015-03-08 18:02:59 +01:00
return $Post;
}
2015-08-31 03:18:06 +02:00
function buildPostsForPage($pageNumber=0, $amount=POSTS_PER_PAGE_ADMIN, $removeUnpublished=true, $tagKey=false)
2015-03-08 18:02:59 +01:00
{
global $dbPosts;
2015-08-30 01:26:46 +02:00
global $dbTags;
2015-05-15 00:07:45 +02:00
global $Url;
2015-03-08 18:02:59 +01:00
2016-01-08 01:00:40 +01:00
$posts = array();
2015-08-30 01:26:46 +02:00
if($tagKey) {
2015-08-31 03:18:06 +02:00
// Get the keys list from tags database, this database is optimized for this case.
2015-08-30 01:26:46 +02:00
$list = $dbTags->getList($pageNumber, $amount, $tagKey);
}
else {
2015-08-31 03:18:06 +02:00
// Get the keys list from posts database.
2015-08-30 01:26:46 +02:00
$list = $dbPosts->getList($pageNumber, $amount, $removeUnpublished);
}
2015-05-15 00:07:45 +02:00
2015-08-31 03:18:06 +02:00
// There are not posts for the page number then set the page notfound
2015-09-08 02:51:48 +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
2015-08-31 03:18:06 +02:00
// Foreach post key, build the post.
2015-08-30 01:26:46 +02:00
foreach($list as $postKey=>$values)
2015-03-08 18:02:59 +01:00
{
2015-08-30 01:26:46 +02:00
$Post = buildPost($postKey);
2015-05-05 03:00:01 +02:00
if($Post!==false) {
2015-03-08 18:02:59 +01:00
array_push($posts, $Post);
}
}
2016-01-08 01:00:40 +01:00
return $posts;
2015-03-08 18:02:59 +01:00
}
2015-06-27 00:12:26 +02:00
// ============================================================================
// Main
// ============================================================================
2015-09-10 04:33:31 +02:00
// Search for changes on posts by the user.
if( $Site->cliMode() ) {
2015-09-20 23:46:50 +02:00
if($dbPosts->regenerateCli()) {
reIndexTagsPosts();
}
2015-09-10 04:33:31 +02:00
}
2015-09-02 02:42:21 +02:00
// Execute the scheduler.
if( $dbPosts->scheduler() ) {
// Reindex dbTags.
reIndexTagsPosts();
}
2015-08-31 03:18:06 +02:00
// Build specific post.
2015-03-08 18:02:59 +01:00
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
2016-01-08 21:12:17 +01:00
// The post doesn't exist.
2015-03-08 18:02:59 +01:00
if($Post===false)
{
$Url->setNotFound(true);
unset($Post);
}
2016-01-08 21:12:17 +01:00
// The post is not published yet.
2015-03-08 18:02:59 +01:00
elseif( !$Post->published() )
{
$Url->setNotFound(true);
unset($Post);
}
else
{
$posts[0] = $Post;
}
2015-08-29 20:07:47 +02:00
}
2015-08-31 03:18:06 +02:00
// Build posts by specific tag.
2015-08-29 20:07:47 +02:00
elseif( ($Url->whereAmI()==='tag') && ($Url->notFound()===false) )
{
2016-01-08 01:00:40 +01:00
$posts = buildPostsForPage($Url->pageNumber(), $Site->postsPerPage(), true, $Url->slug());
2015-03-08 18:02:59 +01:00
}
2015-08-31 03:18:06 +02:00
// Build posts for homepage or admin area.
2015-03-08 18:02:59 +01:00
else
{
2015-08-31 03:18:06 +02:00
// Posts for admin area.
2015-05-05 03:00:01 +02:00
if($Url->whereAmI()==='admin') {
2016-01-08 01:00:40 +01:00
$posts = buildPostsForPage($Url->pageNumber(), POSTS_PER_PAGE_ADMIN, false);
2015-05-05 03:00:01 +02:00
}
2016-01-08 21:12:17 +01:00
// Posts for home and blog filter.
elseif( ( ($Url->whereAmI()==='home') || ($Url->whereAmI()==='blog') ) && ($Url->notFound()===false) ) {
2016-01-08 01:00:40 +01:00
$posts = buildPostsForPage($Url->pageNumber(), $Site->postsPerPage(), true);
2015-05-05 03:00:01 +02:00
}
}