2015-03-08 18:02:59 +01:00
|
|
|
<?php defined('BLUDIT') or die('Bludit CMS.');
|
|
|
|
|
|
|
|
$pages = array();
|
2015-05-05 03:00:01 +02:00
|
|
|
$pagesParents = array(NO_PARENT_CHAR=>array());
|
2015-03-08 18:02:59 +01:00
|
|
|
|
2015-05-05 03:00:01 +02:00
|
|
|
function orderChildren($a, $b)
|
|
|
|
{
|
|
|
|
if ($a->position() == $b->position()) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ($a->position() < $b->position()) ? -1 : 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
function orderParent($array, $values, $offset) {
|
|
|
|
return ( array_slice($array, 0, $offset, true) + $values + array_slice($array, $offset, NULL, true) );
|
|
|
|
}
|
|
|
|
|
|
|
|
function build_page($key)
|
2015-03-08 18:02:59 +01:00
|
|
|
{
|
|
|
|
global $dbPages;
|
|
|
|
global $dbUsers;
|
|
|
|
global $Parsedown;
|
|
|
|
|
2015-05-05 03:00:01 +02:00
|
|
|
// Page object.
|
|
|
|
$Page = new Page($key);
|
|
|
|
if( !$Page->isValid() ) {
|
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 = $dbPages->getDb($key);
|
|
|
|
if( !$db ) {
|
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.
|
|
|
|
$Page->setField('unixTimeCreated', $value, false);
|
|
|
|
$Page->setField('date', Date::format($value, '%d %B'), false);
|
|
|
|
$Page->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.
|
|
|
|
$Page->setField($field, $value, false);
|
2015-03-08 18:02:59 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-05 03:00:01 +02:00
|
|
|
// Content in raw format
|
|
|
|
$Page->setField('contentRaw', $Page->content(), true);
|
|
|
|
|
|
|
|
// Parse markdown content.
|
2015-03-08 18:02:59 +01:00
|
|
|
$content = $Parsedown->text( $Page->content() );
|
|
|
|
$Page->setField('content', $content, true);
|
|
|
|
|
2015-05-05 03:00:01 +02:00
|
|
|
// Parse username for the page.
|
|
|
|
if( $dbUsers->userExists( $Page->username() ) )
|
2015-03-08 18:02:59 +01:00
|
|
|
{
|
|
|
|
$user = $dbUsers->get( $Page->username() );
|
2015-05-05 03:00:01 +02:00
|
|
|
$Page->setField('author', $user['firstName'].', '.$user['lastName']);
|
2015-03-08 18:02:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return $Page;
|
|
|
|
}
|
|
|
|
|
|
|
|
function build_all_pages()
|
|
|
|
{
|
|
|
|
global $pages;
|
2015-05-05 03:00:01 +02:00
|
|
|
global $pagesParents;
|
2015-03-08 18:02:59 +01:00
|
|
|
global $dbPages;
|
|
|
|
|
|
|
|
$list = $dbPages->getAll();
|
|
|
|
|
|
|
|
unset($list['error']);
|
|
|
|
|
2015-05-05 03:00:01 +02:00
|
|
|
foreach($list as $key=>$db)
|
2015-03-08 18:02:59 +01:00
|
|
|
{
|
2015-05-05 03:00:01 +02:00
|
|
|
$Page = build_page($key);
|
2015-03-08 18:02:59 +01:00
|
|
|
|
|
|
|
if($Page!==false)
|
|
|
|
{
|
2015-05-05 03:00:01 +02:00
|
|
|
// Generate all posible parents.
|
|
|
|
if( $Page->parentKey()===false )
|
|
|
|
{
|
|
|
|
$dbPages->addParentKey($Page->key());
|
|
|
|
|
|
|
|
$pagesParents[NO_PARENT_CHAR][$Page->key()] = $Page;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$pagesParents[$Page->parentKey()][$Page->key()] = $Page;
|
|
|
|
}
|
|
|
|
|
|
|
|
// $pages array
|
|
|
|
$pages[$Page->key()] = $Page;
|
2015-03-08 18:02:59 +01:00
|
|
|
}
|
|
|
|
}
|
2015-05-05 03:00:01 +02:00
|
|
|
|
|
|
|
// ======== Order pages ========
|
|
|
|
|
|
|
|
// DEBUG: No me gusta esta forma de ordenar
|
|
|
|
|
|
|
|
// Order children
|
|
|
|
$tmp = array();
|
|
|
|
foreach($pagesParents as $parentKey=>$childrenPages)
|
|
|
|
{
|
|
|
|
$tmp[$parentKey] = $childrenPages;
|
|
|
|
uasort($tmp[$parentKey], 'orderChildren');
|
|
|
|
}
|
|
|
|
|
|
|
|
if(isset($tmp[NO_PARENT_CHAR]))
|
|
|
|
{
|
|
|
|
$tmpNoParents = $tmp[NO_PARENT_CHAR];
|
|
|
|
unset($tmp[NO_PARENT_CHAR]);
|
|
|
|
}
|
|
|
|
|
|
|
|
$pagesParents = $tmp;
|
|
|
|
|
|
|
|
// Order parents.
|
|
|
|
foreach($pagesParents as $parentKey=>$childrenPages)
|
|
|
|
{
|
|
|
|
$tmp = orderParent($tmp, array($parentKey=>$childrenPages), $pages[$parentKey]->position());
|
|
|
|
}
|
|
|
|
|
|
|
|
$pagesParents = array(NO_PARENT_CHAR=>$tmpNoParents) + $tmp;
|
2015-03-08 18:02:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Filter by page, then build it
|
|
|
|
if( ($Url->whereAmI()==='page') && ($Url->notFound()===false) )
|
|
|
|
{
|
|
|
|
$Page = build_page( $Url->slug() );
|
|
|
|
|
|
|
|
if($Page===false)
|
|
|
|
{
|
|
|
|
$Url->setNotFound(true);
|
|
|
|
unset($Page);
|
|
|
|
}
|
|
|
|
elseif( !$Page->published() )
|
|
|
|
{
|
|
|
|
$Url->setNotFound(true);
|
|
|
|
unset($Page);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Default homepage
|
|
|
|
if($Url->notFound()===false)
|
|
|
|
{
|
|
|
|
if( ($Site->homepage()!=='home') && ($Url->whereAmI()==='home') )
|
|
|
|
{
|
|
|
|
$Url->setWhereAmI('page');
|
|
|
|
|
|
|
|
$Page = build_page( $Site->homepage() );
|
2015-05-05 03:00:01 +02:00
|
|
|
|
2015-03-08 18:02:59 +01:00
|
|
|
if($Page===false)
|
|
|
|
{
|
|
|
|
$Url->setWhereAmI('home');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-06-03 03:17:09 +02:00
|
|
|
if($Url->notFound())
|
|
|
|
{
|
|
|
|
$Url->setWhereAmI('page');
|
|
|
|
$Page = new Page('error');
|
|
|
|
}
|
|
|
|
|
2015-03-08 18:02:59 +01:00
|
|
|
// Build all pages
|
2015-06-03 03:17:09 +02:00
|
|
|
build_all_pages();
|