Remove posts

This commit is contained in:
Diego Najar 2017-05-16 00:46:20 +02:00
parent 20224b03f4
commit 95e6500993
34 changed files with 359 additions and 1098 deletions

View File

@ -81,19 +81,16 @@ class dbList extends dbJSON
public function edit($oldKey, $newName) public function edit($oldKey, $newName)
{ {
$newKey = $this->generateKey($newName); $newKey = $this->generateKey($newName);
if( isset($this->db[$newKey]) ) {
Log::set(__METHOD__.LOG_SEP.'Error the key already exist');
return false;
}
$this->db[$newKey]['name'] = $newName; $this->db[$newKey]['name'] = $newName;
$this->db[$newKey]['list'] = $this->db[$oldKey]['list']; $this->db[$newKey]['list'] = $this->db[$oldKey]['list'];
// Remove the old category // Remove the old category
if( $oldKey != $newKey ) {
unset( $this->db[$oldKey] ); unset( $this->db[$oldKey] );
}
$this->save(); $this->save();
return $newKey; return $newKey;
} }
@ -133,4 +130,9 @@ class dbList extends dbJSON
return 0; return 0;
} }
public function exists($key)
{
return isset( $this->db[$key] );
}
} }

View File

@ -3,88 +3,88 @@
// ============================================================================ // ============================================================================
// Functions // Functions
// ============================================================================ // ============================================================================
function updateBludit() // function updateBludit()
{ // {
global $Site; // global $Site;
global $dbPosts; // global $dbPosts;
global $dbPages; // global $dbPages;
// Check if Bludit need to be update. // // Check if Bludit need to be update.
if( ($Site->currentBuild() < BLUDIT_BUILD) || isset($_GET['update']) ) // if( ($Site->currentBuild() < BLUDIT_BUILD) || isset($_GET['update']) )
{ // {
// LOG // // LOG
Log::set('UPDATE SYSTEM - Starting...'); // Log::set('UPDATE SYSTEM - Starting...');
// LOG // // LOG
Log::set('UPDATE SYSTEM - Checking posts.'); // Log::set('UPDATE SYSTEM - Checking posts.');
// Update posts // // Update posts
foreach($dbPosts->db as $key=>$post) { // foreach($dbPosts->db as $key=>$post) {
// Dates // // Dates
$date = Date::format($post['date'], 'Y-m-d H:i', DB_DATE_FORMAT); // $date = Date::format($post['date'], 'Y-m-d H:i', DB_DATE_FORMAT);
if($date !== false) { // if($date !== false) {
$dbPosts->setPostDb($key, 'date', $date); // $dbPosts->setPostDb($key, 'date', $date);
} // }
// Checksum // // Checksum
if( empty($post['md5file']) ) { // if( empty($post['md5file']) ) {
$checksum = md5_file(PATH_POSTS.$key.DS.FILENAME); // $checksum = md5_file(PATH_POSTS.$key.DS.FILENAME);
$dbPosts->setPostDb($key, 'md5file', $checksum); // $dbPosts->setPostDb($key, 'md5file', $checksum);
} // }
} // }
$dbPosts->save(); // $dbPosts->save();
// LOG // // LOG
Log::set('UPDATE SYSTEM - Checking pages.'); // Log::set('UPDATE SYSTEM - Checking pages.');
// Update pages // // Update pages
foreach($dbPages->db as $key=>$page) { // foreach($dbPages->db as $key=>$page) {
$date = Date::format($page['date'], 'Y-m-d H:i', DB_DATE_FORMAT); // $date = Date::format($page['date'], 'Y-m-d H:i', DB_DATE_FORMAT);
if($date !== false) { // if($date !== false) {
$dbPages->setField($key, 'date', $date); // $dbPages->setField($key, 'date', $date);
} // }
// Checksum // // Checksum
if( empty($post['md5file']) ) { // if( empty($post['md5file']) ) {
$checksum = md5_file(PATH_PAGES.$key.DS.FILENAME); // $checksum = md5_file(PATH_PAGES.$key.DS.FILENAME);
$dbPages->setField($key, 'md5file', $checksum); // $dbPages->setField($key, 'md5file', $checksum);
} // }
} // }
$dbPages->save(); // $dbPages->save();
// LOG // // LOG
Log::set('UPDATE SYSTEM - Checking directories.'); // Log::set('UPDATE SYSTEM - Checking directories.');
// --- Update directories --- // // --- Update directories ---
$directories = array( // $directories = array(
PATH_POSTS, // PATH_POSTS,
PATH_PAGES, // PATH_PAGES,
PATH_PLUGINS_DATABASES, // PATH_PLUGINS_DATABASES,
PATH_UPLOADS_PROFILES, // PATH_UPLOADS_PROFILES,
PATH_UPLOADS_THUMBNAILS, // PATH_UPLOADS_THUMBNAILS,
PATH_TMP // PATH_TMP
); // );
foreach($directories as $dir) { // foreach($directories as $dir) {
// Check if the directory is already created. // // Check if the directory is already created.
if(!file_exists($dir)) { // if(!file_exists($dir)) {
// Create the directory recursive. // // Create the directory recursive.
mkdir($dir, DIR_PERMISSIONS, true); // mkdir($dir, DIR_PERMISSIONS, true);
} // }
} // }
// Set and save the database. // // Set and save the database.
$Site->set(array('currentBuild'=>BLUDIT_BUILD)); // $Site->set(array('currentBuild'=>BLUDIT_BUILD));
// LOG // // LOG
Log::set('UPDATE SYSTEM - Updated...'); // Log::set('UPDATE SYSTEM - Updated...');
} // }
} // }
// ============================================================================ // ============================================================================
// Main before POST // Main before POST
@ -99,20 +99,7 @@ function updateBludit()
// ============================================================================ // ============================================================================
// Try update Bludit // Try update Bludit
updateBludit(); //updateBludit();
// Get draft posts and schedules
$_draftPosts = array();
$_scheduledPosts = array();
foreach($posts as $Post)
{
if($Post->draft()) {
array_push($_draftPosts, $Post);
}
elseif($Post->scheduled()) {
array_push($_scheduledPosts, $Post);
}
}
// Get draft pages // Get draft pages
$_draftPages = array(); $_draftPages = array();

View File

@ -16,13 +16,12 @@ if($Login->role()!=='admin') {
function edit($oldCategoryKey, $newCategory) function edit($oldCategoryKey, $newCategory)
{ {
global $Language; global $Language;
global $dbPosts;
global $dbPages; global $dbPages;
global $dbCategories; global $dbCategories;
if( Text::isEmpty($oldCategoryKey) || Text::isEmpty($newCategory) ) { if( Text::isEmpty($oldCategoryKey) || Text::isEmpty($newCategory) ) {
Alert::set($Language->g('Empty field')); Alert::set($Language->g('Empty fields'));
Redirect::page('admin', 'categories'); Redirect::page('categories');
} }
if( $dbCategories->edit($oldCategoryKey, $newCategory) == false ) { if( $dbCategories->edit($oldCategoryKey, $newCategory) == false ) {
@ -30,11 +29,10 @@ function edit($oldCategoryKey, $newCategory)
} }
else { else {
$dbPages->changeCategory($oldCategoryKey, $newCategory); $dbPages->changeCategory($oldCategoryKey, $newCategory);
$dbPosts->changeCategory($oldCategoryKey, $newCategory);
Alert::set($Language->g('The changes have been saved')); Alert::set($Language->g('The changes have been saved'));
} }
Redirect::page('admin', 'categories'); Redirect::page('categories');
} }
function delete($categoryKey) function delete($categoryKey)
@ -45,8 +43,7 @@ function delete($categoryKey)
$dbCategories->remove($categoryKey); $dbCategories->remove($categoryKey);
Alert::set($Language->g('The changes have been saved')); Alert::set($Language->g('The changes have been saved'));
Redirect::page('categories');
Redirect::page('admin', 'categories');
} }
// ============================================================================ // ============================================================================
@ -75,9 +72,9 @@ $categoryKey = $layout['parameters'];
if( !$dbCategories->exists($categoryKey) ) { if( !$dbCategories->exists($categoryKey) ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to get the category: '.$categoryKey); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to get the category: '.$categoryKey);
Redirect::page('admin', 'categories'); Redirect::page('categories');
} }
$category = $dbCategories->getName($layout['parameters']); $category = $dbCategories->getName($layout['parameters']);
$layout['title'] .= ' - '.$Language->g('Edit category').' - '.$category; $layout['title'] .= ' - '.$Language->g('Edit Category').' - '.$category;

View File

@ -1,21 +0,0 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
// ============================================================================
// Check role
// ============================================================================
// ============================================================================
// Functions
// ============================================================================
// ============================================================================
// Main before POST
// ============================================================================
// ============================================================================
// POST Method
// ============================================================================
// ============================================================================
// Main after POST
// ============================================================================

View File

@ -44,7 +44,7 @@ function add($category)
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{ {
if( add($_POST['category']) ) { if( add($_POST['category']) ) {
Redirect::page('admin', 'categories'); Redirect::page('categories');
} }
} }

View File

@ -16,22 +16,31 @@ function addPage($args)
// Add the page, if the $key is FALSE the creation of the post failure. // Add the page, if the $key is FALSE the creation of the post failure.
$key = $dbPages->add($args); $key = $dbPages->add($args);
if($key) if($key) {
{ // Re-index categories
// Re index categories reindexCategories();
//reIndexCategoriesPages();
// Call the plugins after page created. // Re-index tags
reindextags();
// Call the plugins after page created
Theme::plugins('afterPageCreate'); Theme::plugins('afterPageCreate');
// Alert the user // Create an alert
Alert::set( $Language->g('Page added successfully') ); Alert::set( $Language->g('Page added successfully') );
Redirect::page('admin', 'manage-pages');
// Redirect
Redirect::page('pages');
return true;
} }
else else {
{ Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the page');
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the page.'); Log::set(__METHOD__.LOG_SEP.'Cleaning database...');
$dbPages->delete($key);
} }
return false;
} }
// ============================================================================ // ============================================================================

View File

@ -21,9 +21,9 @@ function setSettings($args)
// Add slash at the begin and end. // Add slash at the begin and end.
// This fields are in the settings->advanced mode // This fields are in the settings->advanced mode
$args['url'] = Text::addSlashes($args['url'],false,true); $args['url'] = Text::addSlashes($args['url'],false,true);
$args['uriPost'] = Text::addSlashes($args['uriPost']);
$args['uriPage'] = Text::addSlashes($args['uriPage']); $args['uriPage'] = Text::addSlashes($args['uriPage']);
$args['uriTag'] = Text::addSlashes($args['uriTag']); $args['uriTag'] = Text::addSlashes($args['uriTag']);
$args['uriCategory'] = Text::addSlashes($args['uriCategory']);
if(($args['uriPost']==$args['uriPage']) || ($args['uriPost']==$args['uriTag']) || ($args['uriPage']==$args['uriTag']) ) if(($args['uriPost']==$args['uriPage']) || ($args['uriPost']==$args['uriTag']) || ($args['uriPage']==$args['uriTag']) )
{ {

View File

@ -53,28 +53,10 @@ function setSettings($args)
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{ {
setSettings($_POST); setSettings($_POST);
Redirect::page('admin', $layout['controller']); Redirect::page($layout['controller']);
} }
// ============================================================================ // ============================================================================
// Main after POST // Main after POST
// ============================================================================ // ============================================================================
// Default home page
$_homePageList = array(''=>$Language->g('Show blog'));
foreach($pagesParents as $parentKey=>$pageList)
{
foreach($pageList as $Page)
{
if($parentKey!==NO_PARENT_CHAR) {
$parentTitle = $pages[$Page->parentKey()]->title().'->';
}
else {
$parentTitle = '';
}
if($Page->published()) {
$_homePageList[$Page->key()] = $Language->g('Page').': '.$parentTitle.$Page->title();
}
}
}

View File

@ -59,22 +59,3 @@ if( $_SERVER['REQUEST_METHOD'] == 'POST' )
// ============================================================================ // ============================================================================
// Main after POST // Main after POST
// ============================================================================ // ============================================================================
// Default home page
$_homePageList = array(''=>$Language->g('Show blog'));
foreach($pagesParents as $parentKey=>$pageList)
{
foreach($pageList as $Page)
{
if($parentKey!==NO_PARENT_CHAR) {
$parentTitle = $pages[$Page->parentKey()]->title().'->';
}
else {
$parentTitle = '';
}
if($Page->published()) {
$_homePageList[$Page->key()] = $Language->g('Page').': '.$parentTitle.$Page->title();
}
}
}

View File

@ -102,23 +102,17 @@ $(document).ready(function() {
</li> </li>
<li class="uk-nav-header"><?php $L->p('Publish') ?></li> <li class="uk-nav-header"><?php $L->p('Publish') ?></li>
<li <?php echo ($layout['view']=='new-post')?'class="uk-active"':'' ?>>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'new-post' ?>"><?php $L->p('New post') ?></a>
</li>
<li <?php echo ($layout['view']=='new-page')?'class="uk-active"':'' ?>> <li <?php echo ($layout['view']=='new-page')?'class="uk-active"':'' ?>>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'new-page' ?>"><?php $L->p('New page') ?></a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'new-page' ?>"><?php $L->p('New page') ?></a>
</li> </li>
<li class="uk-nav-header"><?php $L->p('Manage') ?></li> <li class="uk-nav-header"><?php $L->p('Manage') ?></li>
<li <?php echo ($layout['view']=='manage-posts')?'class="uk-active"':'' ?>>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'manage-posts' ?>"><?php $L->p('Posts') ?></a>
</li>
<li <?php echo ($layout['view']=='manage-pages')?'class="uk-active"':'' ?>> <li <?php echo ($layout['view']=='manage-pages')?'class="uk-active"':'' ?>>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'manage-pages' ?>"><?php $L->p('Pages') ?></a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'pages' ?>"><?php $L->p('Pages') ?></a>
</li> </li>
<!--<li <?php echo ($layout['view']=='categories')?'class="uk-active"':'' ?>> <li <?php echo ($layout['view']=='categories')?'class="uk-active"':'' ?>>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'categories' ?>"><?php $L->p('Categories') ?></a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'categories' ?>"><?php $L->p('Categories') ?></a>
</li>--> </li>
<li <?php echo ($layout['view']=='users')?'class="uk-active"':'' ?>> <li <?php echo ($layout['view']=='users')?'class="uk-active"':'' ?>>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'users' ?>"><?php $L->p('Users') ?></a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'users' ?>"><?php $L->p('Users') ?></a>
</li> </li>
@ -131,7 +125,7 @@ $(document).ready(function() {
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-advanced' ?>"><?php $L->p('Advanced') ?></a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-advanced' ?>"><?php $L->p('Advanced') ?></a>
</li> </li>
<li <?php echo ($layout['view']=='settings-regional')?'class="uk-active"':'' ?>> <li <?php echo ($layout['view']=='settings-regional')?'class="uk-active"':'' ?>>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-regional' ?>"><?php $L->p('Language and timezone') ?></a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-regional' ?>"><?php $L->p('Language') ?></a>
</li> </li>
<li <?php echo ($layout['view']=='plugins')?'class="uk-active"':'' ?>> <li <?php echo ($layout['view']=='plugins')?'class="uk-active"':'' ?>>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'plugins' ?>"><?php $L->p('Plugins') ?></a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'plugins' ?>"><?php $L->p('Plugins') ?></a>

View File

@ -9,18 +9,18 @@ echo '
<thead> <thead>
<tr> <tr>
<th>'.$L->g('Name').'</th> <th>'.$L->g('Name').'</th>
<th>'.$L->g('Key').'</th> <th>'.$L->g('URL').'</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
'; ';
$categories = $dbCategories->getAll(); $categories = $dbCategories->getKeyNameArray();
foreach($categories as $categoryKey=>$category) foreach($categories as $categoryKey=>$category)
{ {
echo '<tr>'; echo '<tr>';
echo '<td><a href="'.HTML_PATH_ADMIN_ROOT.'edit-category/'.$categoryKey.'">'.$category.'</a></td>'; echo '<td><a href="'.HTML_PATH_ADMIN_ROOT.'edit-category/'.$categoryKey.'">'.$category.'</a></td>';
echo '<td>'.$categoryKey.'</td>'; echo '<td><a href="'.DOMAIN.$Url->filters('category', false).$categoryKey.'">'.DOMAIN.$Url->filters('category', false).$categoryKey.'</a></td>';
echo '</tr>'; echo '</tr>';
} }

View File

@ -66,10 +66,6 @@
<table class="uk-table statistics"> <table class="uk-table statistics">
<tbody> <tbody>
<tr> <tr>
<td><?php $Language->p('Posts') ?></td>
<td><?php echo $dbPosts->count() ?></td>
</tr>
<tr>
<td><?php $Language->p('Pages') ?></td> <td><?php $Language->p('Pages') ?></td>
<td><?php echo $dbPages->count() ?></td> <td><?php echo $dbPages->count() ?></td>
</tr> </tr>
@ -89,13 +85,10 @@
<h4 class="panel-title"><?php $L->p('Drafts') ?></h4> <h4 class="panel-title"><?php $L->p('Drafts') ?></h4>
<ul class="uk-list"> <ul class="uk-list">
<?php <?php
if( empty($_draftPosts) && empty($_draftPages) ) { if( empty($_draftPages) ) {
echo '<li>'.$Language->g('There are no drafts').'</li>'; echo '<li>'.$Language->g('There are no drafts').'</li>';
} }
else { else {
foreach($_draftPosts as $Post) {
echo '<li><span class="label-draft">'.$Language->g('Post').'</span><a href="'.HTML_PATH_ADMIN_ROOT.'edit-post/'.$Post->key().'">'.($Post->title()?$Post->title():'['.$Language->g('Empty title').'] ').'</a></li>';
}
foreach($_draftPages as $Page) { foreach($_draftPages as $Page) {
echo '<li><span class="label-draft">'.$Language->g('Page').'</span><a href="'.HTML_PATH_ADMIN_ROOT.'edit-page/'.$Page->key().'">'.($Page->title()?$Page->title():'['.$Language->g('Empty title').'] ').'</a></li>'; echo '<li><span class="label-draft">'.$Language->g('Page').'</span><a href="'.HTML_PATH_ADMIN_ROOT.'edit-page/'.$Page->key().'">'.($Page->title()?$Page->title():'['.$Language->g('Empty title').'] ').'</a></li>';
} }

View File

@ -1,207 +0,0 @@
<?php
HTML::title(array('title'=>$L->g('Edit post'), 'icon'=>'pencil'));
HTML::formOpen(array('class'=>'uk-form-stacked'));
// Security token
HTML::formInputHidden(array(
'name'=>'tokenCSRF',
'value'=>$Security->getTokenCSRF()
));
// Key input
HTML::formInputHidden(array(
'name'=>'key',
'value'=>$_Post->key()
));
// LEFT SIDE
// --------------------------------------------------------------------
echo '<div class="uk-grid uk-grid-medium">';
echo '<div class="bl-publish-view uk-width-8-10">';
// Title input
HTML::formInputText(array(
'name'=>'title',
'value'=>$_Post->title(),
'class'=>'uk-width-1-1 uk-form-large',
'placeholder'=>$L->g('Title')
));
// Content input
HTML::formTextarea(array(
'name'=>'content',
'value'=>$_Post->contentRaw(false),
'class'=>'uk-width-1-1 uk-form-large',
'placeholder'=>''
));
// Form buttons
echo '<div class="uk-form-row uk-margin-bottom">
<button class="uk-button uk-button-primary" type="submit">'.$L->g('Save').'</button>
<button class="uk-button uk-button-primary" type="button" id="jsSaveDraft">'.$L->g('Save as draft').'</button>
<button id="jsdelete-post" name="delete-post" class="uk-button" type="submit">'.$L->g('Delete').'</button>
<a class="uk-button" href="'.HTML_PATH_ADMIN_ROOT.'manage-posts">'.$L->g('Cancel').'</a>
</div>';
echo '</div>';
// RIGHT SIDE
// --------------------------------------------------------------------
echo '<div class="bl-publish-sidebar uk-width-2-10">';
echo '<ul>';
// GENERAL TAB
// --------------------------------------------------------------------
echo '<li><h2 class="sidebar-button" data-view="sidebar-general-view"><i class="uk-icon-angle-down"></i> '.$L->g('General').'</h2></li>';
echo '<li id="sidebar-general-view" class="sidebar-view">';
// Category
/*
HTML::formSelect(array(
'name'=>'category',
'label'=>$L->g('Category'),
'class'=>'uk-width-1-1 uk-form-medium',
'options'=>$dbCategories->getAll(),
'selected'=>$_Post->category(),
'tip'=>'',
'addEmptySpace'=>true
));*/
// Description input
HTML::formTextarea(array(
'name'=>'description',
'label'=>$L->g('description'),
'value'=>$_Post->description(),
'rows'=>'4',
'class'=>'uk-width-1-1 uk-form-medium',
'tip'=>$L->g('this-field-can-help-describe-the-content')
));
echo '</li>';
// IMAGES TAB
// --------------------------------------------------------------------
echo '<li><h2 class="sidebar-button" data-view="sidebar-images-view"><i class="uk-icon-angle-down"></i> '.$L->g('Images').'</h2></li>';
echo '<li id="sidebar-images-view" class="sidebar-view">';
// --- BLUDIT COVER IMAGE ---
HTML::bluditCoverImage($_Post->coverImage(false));
// --- BLUDIT QUICK IMAGES ---
HTML::bluditQuickImages();
// --- BLUDIT IMAGES V8 ---
HTML::bluditImagesV8();
// --- BLUDIT MENU V8 ---
HTML::bluditMenuV8();
echo '</li>';
// TAGS
// --------------------------------------------------------------------
echo '<li><h2 class="sidebar-button" data-view="sidebar-tags-view"><i class="uk-icon-angle-down"></i> '.$L->g('Tags').'</h2></li>';
echo '<li id="sidebar-tags-view" class="sidebar-view">';
// Tags input
HTML::tags(array(
'name'=>'tags',
'label'=>$L->g('Tags'),
'allTags'=>$dbTags->getAll(),
'selectedTags'=>$_Post->tags(true)
));
echo '</li>';
// ADVANCED TAB
// --------------------------------------------------------------------
echo '<li><h2 class="sidebar-button" data-view="sidebar-advanced-view"><i class="uk-icon-angle-down"></i> '.$L->g('Advanced').'</h2></li>';
echo '<li id="sidebar-advanced-view" class="sidebar-view">';
// Status input
HTML::formSelect(array(
'name'=>'status',
'label'=>$L->g('Status'),
'class'=>'uk-width-1-1 uk-form-medium',
'options'=>array('published'=>$L->g('Published'), 'draft'=>$L->g('Draft')),
'selected'=>($_Post->draft()?'draft':'published'),
'tip'=>''
));
// Date input
HTML::formInputText(array(
'name'=>'date',
'value'=>$_Post->dateRaw(),
'class'=>'uk-width-1-1 uk-form-large',
'tip'=>$L->g('To schedule the post just select the date and time'),
'label'=>$L->g('Date')
));
// Slug input
HTML::formInputText(array(
'name'=>'slug',
'value'=>$_Post->slug(),
'class'=>'uk-width-1-1 uk-form-large',
'tip'=>$L->g('you-can-modify-the-url-which-identifies'),
'label'=>$L->g('Friendly URL')
));
echo '</li>';
echo '</ul>';
echo '</div>';
echo '</div>';
HTML::formClose();
?>
<script>
$(document).ready(function() {
var key = $("#jskey").val();
$("#jsdate").datetimepicker({format:"<?php echo DB_DATE_FORMAT ?>"});
$("#jstitle").keyup(function() {
var slug = $(this).val();
checkSlugPost(slug, key, $("#jsslug"));
});
$("#jsslug").keyup(function() {
var slug = $("#jsslug").val();
checkSlugPost(slug, key, $("#jsslug"));
});
$("#jsdelete-post").click(function() {
if(confirm("<?php $Language->p('confirm-delete-this-action-cannot-be-undone') ?>")==false) {
return false;
}
});
// Button Save as draft
$("#jsSaveDraft").on("click", function() {
$("#jsstatus").val("draft");
$(".uk-form").submit();
});
// Right sidebar
$(".sidebar-button").click(function() {
var view = "#" + $(this).data("view");
if( $(view).is(":visible") ) {
$(view).hide();
}
else {
$(".sidebar-view").hide();
$(view).show();
}
});
});
</script>

View File

@ -1,61 +0,0 @@
<?php
HTML::title(array('title'=>$L->g('Manage pages'), 'icon'=>'folder'));
echo '<a href="'.HTML_PATH_ADMIN_ROOT.'new-page"><i class="uk-icon-plus"></i> '.$L->g('Add a new page').'</a>';
echo '
<table class="uk-table uk-table-striped">
<thead>
<tr>
<th>'.$L->g('Title').'</th>
<th class="uk-text-center">'.$L->g('Position').'</th>
<th>'.$L->g('Friendly URL').'</th>
</tr>
</thead>
<tbody>
';
foreach($pagesParents[NO_PARENT_CHAR] as $key=>$db)
{
// Parent page
$Page = $pages[$key];
$friendlyURL = Text::isEmpty($Url->filters('page')) ? '/'.$Page->key() : '/'.$Url->filters('page').'/'.$Page->key();
echo '<tr>';
echo '<td>';
echo '<a href="'.HTML_PATH_ADMIN_ROOT.'edit-page/'.$Page->key().'">'.($Page->published()?'':'<span class="label-draft">'.$Language->g('Draft').'</span> ').($Page->title()?$Page->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a>';
echo '</td>';
echo '<td class="uk-text-center">'.$Page->position().'</td>';
echo '<td><a target="_blank" href="'.$Page->permalink().'">'.$friendlyURL.'</a></td>';
echo '</tr>';
// If the page has children
if(isset($pagesParents[$Page->key()]))
{
// Get the children
$children = $pagesParents[$Page->key()];
foreach($children as $keyChildren=>$dbChildren)
{
// Parent page
$Page = $pages[$keyChildren];
$friendlyURL = Text::isEmpty($Url->filters('page')) ? '/'.$Page->key() : '/'.$Url->filters('page').'/'.$Page->key();
echo '<tr class="children">';
echo '<td class="children">';
echo '<a href="'.HTML_PATH_ADMIN_ROOT.'edit-page/'.$Page->key().'">'.($Page->published()?'':'<span class="label-draft">'.$Language->g('Draft').'</span> ').($Page->title()?$Page->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a>';
echo '</td>';
echo '<td class="uk-text-center">'.$Page->position().'</td>';
echo '<td><a target="_blank" href="'.$Page->permalink().'">'.$friendlyURL.'</a></td>';
echo '</tr>';
}
}
}
echo '
</tbody>
</table>
';

View File

@ -1,62 +0,0 @@
<?php
HTML::title(array('title'=>$L->g('Manage posts'), 'icon'=>'folder'));
echo '<a href="'.HTML_PATH_ADMIN_ROOT.'new-post"><i class="uk-icon-plus"></i> '.$L->g('Add a new post').'</a>';
echo '
<table class="uk-table uk-table-striped">
<thead>
<tr>
<th>'.$L->g('Title').'</th>
<th class="uk-text-center">'.$L->g('Published date').'</th>
<th>'.$L->g('Friendly URL').'</th>
</tr>
</thead>
<tbody>
';
foreach($posts as $Post)
{
$status = false;
if($Post->scheduled()) {
$status = $Language->g('Scheduled');
}
elseif(!$Post->published()) {
$status = $Language->g('Draft');
}
echo '<tr>';
echo '<td><a href="'.HTML_PATH_ADMIN_ROOT.'edit-post/'.$Post->key().'">'.($status?'<span class="label-draft">'.$status.'</span>':'').($Post->title()?$Post->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a></td>';
echo '<td class="uk-text-center">'.$Post->dateRaw().'</td>';
$friendlyURL = Text::isEmpty($Url->filters('post')) ? '/'.$Post->key() : '/'.$Url->filters('post').'/'.$Post->key();
echo '<td><a target="_blank" href="'.$Post->permalink().'">'.$friendlyURL.'</a></td>';
echo '</tr>';
}
echo '
</tbody>
</table>
';
?>
<div id="paginator">
<ul>
<?php
if(Paginator::get('showNewer')) {
echo '<li class="first"><a href="'.HTML_PATH_ADMIN_ROOT.'manage-posts?page=0">« '.$Language->g('First page').'</a></li>';
echo '<li class="previous"><a href="'.HTML_PATH_ADMIN_ROOT.'manage-posts?page='.Paginator::get('prevPage').'">« '.$Language->g('Prev page').'</a></li>';
}
echo '<li class="list">'.(Paginator::get('currentPage')+1).' / '.(Paginator::get('numberOfPages')+1).'</li>';
if(Paginator::get('showOlder')) {
echo '<li class="next"><a href="'.HTML_PATH_ADMIN_ROOT.'manage-posts?page='.Paginator::get('nextPage').'">'.$Language->g('Next page').' »</a></li>';
echo '<li class="last"><a href="'.HTML_PATH_ADMIN_ROOT.'manage-posts?page='.Paginator::get('numberOfPages').'">'.$Language->g('Last page').' »</a></li>';
}
?>
</ul>
</div>

View File

@ -52,16 +52,15 @@ echo '<div class="bl-publish-sidebar uk-width-2-10">';
echo '<li id="sidebar-general-view" class="sidebar-view">'; echo '<li id="sidebar-general-view" class="sidebar-view">';
// Category // Category
/*
HTML::formSelect(array( HTML::formSelect(array(
'name'=>'category', 'name'=>'category',
'label'=>$L->g('Category'), 'label'=>$L->g('Category'),
'class'=>'uk-width-1-1 uk-form-medium', 'class'=>'uk-width-1-1 uk-form-medium',
'options'=>$dbCategories->getAll(), 'options'=>$dbCategories->getKeyNameArray(),
'selected'=>'', 'selected'=>'',
'tip'=>'', 'tip'=>'',
'addEmptySpace'=>true 'addEmptySpace'=>true
));*/ ));
// Description input // Description input
HTML::formTextarea(array( HTML::formTextarea(array(
@ -124,18 +123,30 @@ echo '<div class="bl-publish-sidebar uk-width-2-10">';
'tip'=>'' 'tip'=>''
)); ));
// Date input
HTML::formInputText(array(
'name'=>'date',
'value'=>Date::current(DB_DATE_FORMAT),
'class'=>'uk-width-1-1 uk-form-large',
'tip'=>$L->g('To schedule the post just select the date and time'),
'label'=>$L->g('Date')
));
// Parent input // Parent input
$options = array(); $options = array();
$options[NO_PARENT_CHAR] = '('.$Language->g('No parent').')'; $parents = $dbPages->getParents(true);
$options += $dbPages->parentKeyList(); foreach( $parents as $key=>$fields ) {
$options[$key] = $pagesKey[$key]->title();
}
HTML::formSelect(array( HTML::formSelect(array(
'name'=>'parent', 'name'=>'parent',
'label'=>$L->g('Parent'), 'label'=>$L->g('Parent'),
'class'=>'uk-width-1-1 uk-form-medium', 'class'=>'uk-width-1-1 uk-form-medium',
'options'=>$options, 'options'=>$options,
'selected'=>NO_PARENT_CHAR, 'selected'=>'',
'tip'=>'' 'tip'=>'',
'addEmptySpace'=>true
)); ));
// Position input // Position input
@ -169,6 +180,7 @@ HTML::formClose();
$(document).ready(function() $(document).ready(function()
{ {
$("#jsdate").datetimepicker({format:"<?php echo DB_DATE_FORMAT ?>"});
$("#jsslug").keyup(function() { $("#jsslug").keyup(function() {
var text = $(this).val(); var text = $(this).val();

View File

@ -1,191 +0,0 @@
<?php
HTML::title(array('title'=>$L->g('New post'), 'icon'=>'pencil'));
HTML::formOpen(array('class'=>'uk-form-stacked'));
// Security token
HTML::formInputHidden(array(
'name'=>'tokenCSRF',
'value'=>$Security->getTokenCSRF()
));
// LEFT SIDE
// --------------------------------------------------------------------
echo '<div class="uk-grid uk-grid-medium">';
echo '<div class="bl-publish-view uk-width-8-10">';
// Title input
HTML::formInputText(array(
'name'=>'title',
'value'=>'',
'class'=>'uk-width-1-1 uk-form-large',
'placeholder'=>$L->g('Title')
));
// Content input
HTML::formTextarea(array(
'name'=>'content',
'value'=>'',
'class'=>'uk-width-1-1 uk-form-large',
'placeholder'=>''
));
// Form buttons
echo '<div class="uk-form-row uk-margin-bottom">
<button class="uk-button uk-button-primary" type="submit">'.$L->g('Save').'</button>
<button class="uk-button uk-button-primary" type="button" id="jsSaveDraft">'.$L->g('Save as draft').'</button>
<a class="uk-button" href="'.HTML_PATH_ADMIN_ROOT.'manage-posts">'.$L->g('Cancel').'</a>
</div>';
echo '</div>';
// RIGHT SIDE
// --------------------------------------------------------------------
echo '<div class="bl-publish-sidebar uk-width-2-10">';
echo '<ul>';
// GENERAL TAB
// --------------------------------------------------------------------
echo '<li><h2 class="sidebar-button" data-view="sidebar-general-view"><i class="uk-icon-angle-down"></i> '.$L->g('General').'</h2></li>';
echo '<li id="sidebar-general-view" class="sidebar-view">';
/*
HTML::formSelect(array(
'name'=>'category',
'label'=>$L->g('Category'),
'class'=>'uk-width-1-1 uk-form-medium',
'options'=>$dbCategories->getAll(),
'selected'=>'',
'tip'=>'',
'addEmptySpace'=>true
));*/
// Description input
HTML::formTextarea(array(
'name'=>'description',
'label'=>$L->g('description'),
'value'=>'',
'rows'=>'4',
'class'=>'uk-width-1-1 uk-form-medium',
'tip'=>$L->g('this-field-can-help-describe-the-content')
));
echo '</li>';
// IMAGES TAB
// --------------------------------------------------------------------
echo '<li><h2 class="sidebar-button" data-view="sidebar-images-view"><i class="uk-icon-angle-down"></i> '.$L->g('Images').'</h2></li>';
echo '<li id="sidebar-images-view" class="sidebar-view">';
// --- BLUDIT COVER IMAGE ---
HTML::bluditCoverImage();
// --- BLUDIT QUICK IMAGES ---
HTML::bluditQuickImages();
// --- BLUDIT IMAGES V8 ---
HTML::bluditImagesV8();
// --- BLUDIT MENU V8 ---
HTML::bluditMenuV8();
echo '</li>';
// TAGS
// --------------------------------------------------------------------
echo '<li><h2 class="sidebar-button" data-view="sidebar-tags-view"><i class="uk-icon-angle-down"></i> '.$L->g('Tags').'</h2></li>';
echo '<li id="sidebar-tags-view" class="sidebar-view">';
// Tags input
HTML::tags(array(
'name'=>'tags',
'label'=>'',
'allTags'=>$dbTags->getAll(),
'selectedTags'=>array()
));
echo '</li>';
// ADVANCED TAB
// --------------------------------------------------------------------
echo '<li><h2 class="sidebar-button" data-view="sidebar-advanced-view"><i class="uk-icon-angle-down"></i> '.$L->g('Advanced').'</h2></li>';
echo '<li id="sidebar-advanced-view" class="sidebar-view">';
// Status input
HTML::formSelect(array(
'name'=>'status',
'label'=>$L->g('Status'),
'class'=>'uk-width-1-1 uk-form-medium',
'options'=>array('published'=>$L->g('Published'), 'draft'=>$L->g('Draft')),
'selected'=>'published',
'tip'=>''
));
// Date input
HTML::formInputText(array(
'name'=>'date',
'value'=>Date::current(DB_DATE_FORMAT),
'class'=>'uk-width-1-1 uk-form-large',
'tip'=>$L->g('To schedule the post just select the date and time'),
'label'=>$L->g('Date')
));
// Slug input
HTML::formInputText(array(
'name'=>'slug',
'value'=>'',
'class'=>'uk-width-1-1 uk-form-large',
'tip'=>$L->g('you-can-modify-the-url-which-identifies'),
'label'=>$L->g('Friendly URL')
));
echo '</li>';
echo '</ul>';
echo '</div>';
echo '</div>';
HTML::formClose();
?>
<script>
$(document).ready(function() {
$("#jsdate").datetimepicker({format:"<?php echo DB_DATE_FORMAT ?>"});
$("#jstitle").keyup(function() {
var slug = $(this).val();
checkSlugPost(slug, "", $("#jsslug"));
});
$("#jsslug").keyup(function() {
var slug = $("#jsslug").val();
checkSlugPost(slug, "", $("#jsslug"));
});
// Button Save as draft
$("#jsSaveDraft").on("click", function() {
$("#jsstatus").val("draft");
$(".uk-form").submit();
});
// Right sidebar
$(".sidebar-button").click(function() {
var view = "#" + $(this).data("view");
if( $(view).is(":visible") ) {
$(view).hide();
}
else {
$(".sidebar-view").hide();
$(view).show();
}
});
});
</script>

View File

@ -0,0 +1,39 @@
<?php
HTML::title(array('title'=>$L->g('Manage pages'), 'icon'=>'folder'));
echo '<a href="'.HTML_PATH_ADMIN_ROOT.'new-page"><i class="uk-icon-plus"></i> '.$L->g('Add a new page').'</a>';
echo '
<table class="uk-table uk-table-striped">
<thead>
<tr>
<th>'.$L->g('Title').'</th>
<th class="uk-text-center">'.$L->g('Position').'</th>
<th>'.$L->g('URL').'</th>
</tr>
</thead>
<tbody>
';
foreach($pages as $page)
{
$status = false;
if($page->scheduled()) {
$status = $Language->g('Scheduled');
}
elseif(!$page->published()) {
$status = $Language->g('Draft');
}
echo '<tr>';
echo '<td><a href="'.HTML_PATH_ADMIN_ROOT.'edit-page/'.$page->key().'">'.($status?'<span class="label-draft">'.$status.'</span>':'').($page->title()?$page->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a></td>';
echo '<td class="uk-text-center">'.$page->dateRaw().'</td>';
$friendlyURL = Text::isEmpty($Url->filters('page')) ? '/'.$page->key() : '/'.$Url->filters('page').'/'.$page->key();
echo '<td><a target="_blank" href="'.$page->permalink().'">'.$friendlyURL.'</a></td>';
echo '</tr>';
}
echo '
</tbody>
</table>
';

View File

@ -44,8 +44,7 @@ else
{ {
// Boot rules // Boot rules
include(PATH_RULES.'60.plugins.php'); include(PATH_RULES.'60.plugins.php');
include(PATH_RULES.'70.posts.php'); include(PATH_RULES.'69.pages.php');
include(PATH_RULES.'71.pages.php');
include(PATH_RULES.'99.header.php'); include(PATH_RULES.'99.header.php');
include(PATH_RULES.'99.paginator.php'); include(PATH_RULES.'99.paginator.php');
include(PATH_RULES.'99.themes.php'); include(PATH_RULES.'99.themes.php');

View File

@ -1,13 +1,13 @@
<?php defined('BLUDIT') or die('Bludit CMS.'); <?php defined('BLUDIT') or die('Bludit CMS.');
// Bludit version // Bludit version
define('BLUDIT_VERSION', '1.6-beta'); define('BLUDIT_VERSION', '2.0');
define('BLUDIT_CODENAME', ''); define('BLUDIT_CODENAME', 'Next');
define('BLUDIT_RELEASE_DATE', ''); define('BLUDIT_RELEASE_DATE', '2017-10-10');
define('BLUDIT_BUILD', ''); define('BLUDIT_BUILD', '20171010');
// Debug mode // Debug mode
// Change to FALSE, for prevent warning or error on browser // Change to FALSE, for prevent warning or errors on browser
define('DEBUG_MODE', TRUE); define('DEBUG_MODE', TRUE);
error_reporting(0); // Turn off all error reporting error_reporting(0); // Turn off all error reporting
if(DEBUG_MODE) { if(DEBUG_MODE) {
@ -33,7 +33,6 @@ define('PATH_HELPERS', PATH_KERNEL.'helpers'.DS);
define('PATH_AJAX', PATH_KERNEL.'ajax'.DS); define('PATH_AJAX', PATH_KERNEL.'ajax'.DS);
define('PATH_JS', PATH_KERNEL.'js'.DS); define('PATH_JS', PATH_KERNEL.'js'.DS);
define('PATH_POSTS', PATH_CONTENT.'posts'.DS);
define('PATH_PAGES', PATH_CONTENT.'pages'.DS); define('PATH_PAGES', PATH_CONTENT.'pages'.DS);
define('PATH_DATABASES', PATH_CONTENT.'databases'.DS); define('PATH_DATABASES', PATH_CONTENT.'databases'.DS);
define('PATH_PLUGINS_DATABASES', PATH_CONTENT.'databases'.DS.'plugins'.DS); define('PATH_PLUGINS_DATABASES', PATH_CONTENT.'databases'.DS.'plugins'.DS);
@ -54,6 +53,7 @@ define('DEBUG_FILE', PATH_CONTENT.'debug.txt');
define('DB_PAGES', PATH_DATABASES.'pages.php'); define('DB_PAGES', PATH_DATABASES.'pages.php');
define('DB_SITE', PATH_DATABASES.'site.php'); define('DB_SITE', PATH_DATABASES.'site.php');
define('DB_CATEGORIES', PATH_DATABASES.'categories.php'); define('DB_CATEGORIES', PATH_DATABASES.'categories.php');
define('DB_TAGS', PATH_DATABASES.'tags.php');
// ADMIN URI FILTER // ADMIN URI FILTER
define('ADMIN_URI_FILTER', '/admin/'); define('ADMIN_URI_FILTER', '/admin/');
@ -66,7 +66,7 @@ if(!defined('JSON_PRETTY_PRINT')) {
define('JSON_PRETTY_PRINT', 128); define('JSON_PRETTY_PRINT', 128);
} }
// Protecting against Symlink attacks. // Protecting against Symlink attacks
define('CHECK_SYMBOLIC_LINKS', TRUE); define('CHECK_SYMBOLIC_LINKS', TRUE);
// Auto scroll // Auto scroll
@ -103,16 +103,16 @@ define('NO_PARENT_CHAR', '3849abb4cb7abd24c2d8dac17b216f17');
// Items per page for admin area // Items per page for admin area
define('ITEMS_PER_PAGE_ADMIN', 10); define('ITEMS_PER_PAGE_ADMIN', 10);
// Enable or disable Cli mode // Cli mode, enable or disable
define('CLI_MODE', FALSE); define('CLI_MODE', FALSE);
// Cli mode status for new posts/pages // Cli mode, status for new pages
define('CLI_STATUS', 'published'); define('CLI_STATUS', 'published');
// Cli mode username for new posts/pages // Cli mode, username for new pages
define('CLI_USERNAME', 'admin'); define('CLI_USERNAME', 'admin');
// Filename for posts and pages, you can change it, for example, for index.md // Filename
define('FILENAME', 'index.txt'); define('FILENAME', 'index.txt');
// Database date format // Database date format
@ -133,29 +133,27 @@ define('CHARSET', 'UTF-8');
// EXTREME FRIENDLY URL, TRUE for dissmiss internet standard. Experimental! // EXTREME FRIENDLY URL, TRUE for dissmiss internet standard. Experimental!
define('EXTREME_FRIENDLY_URL', FALSE); define('EXTREME_FRIENDLY_URL', FALSE);
// Directory permissions // Permissions for new directories
define('DIR_PERMISSIONS', 0755); define('DIR_PERMISSIONS', 0755);
// Set internal character encoding. // Set internal character encoding
mb_internal_encoding(CHARSET); mb_internal_encoding(CHARSET);
// Set HTTP output character encoding. // Set HTTP output character encoding
mb_http_output(CHARSET); mb_http_output(CHARSET);
// Inclde Abstract Classes // Inclde Abstract Classes
include(PATH_ABSTRACT.'dbjson.class.php'); include(PATH_ABSTRACT.'dbjson.class.php');
include(PATH_ABSTRACT.'content.class.php'); include(PATH_ABSTRACT.'dblist.class.php');
include(PATH_ABSTRACT.'plugin.class.php'); include(PATH_ABSTRACT.'plugin.class.php');
// Inclde Classes // Inclde Classes
include(PATH_KERNEL.'dbposts.class.php');
include(PATH_KERNEL.'dbpages.class.php'); include(PATH_KERNEL.'dbpages.class.php');
include(PATH_KERNEL.'dbusers.class.php'); include(PATH_KERNEL.'dbusers.class.php');
include(PATH_KERNEL.'dbtags.class.php'); include(PATH_KERNEL.'dbtags.class.php');
include(PATH_KERNEL.'dblanguage.class.php'); include(PATH_KERNEL.'dblanguage.class.php');
include(PATH_KERNEL.'dbsite.class.php'); include(PATH_KERNEL.'dbsite.class.php');
include(PATH_KERNEL.'dbcategories.class.php'); include(PATH_KERNEL.'dbcategories.class.php');
include(PATH_KERNEL.'post.class.php');
include(PATH_KERNEL.'page.class.php'); include(PATH_KERNEL.'page.class.php');
include(PATH_KERNEL.'user.class.php'); include(PATH_KERNEL.'user.class.php');
include(PATH_KERNEL.'url.class.php'); include(PATH_KERNEL.'url.class.php');
@ -185,12 +183,10 @@ include(PATH_HELPERS.'image.class.php');
// Session // Session
Session::start(); Session::start();
if(Session::started()===false) { if(Session::started()===false) {
Log::set('init.php'.LOG_SEP.'Error occurred when trying to start the session.'); exit('Bludit CMS. Session initialization failure.');
exit('Bludit. Failed to start session.');
} }
// Objects // Objects
$dbPosts = new dbPosts();
$dbPages = new dbPages(); $dbPages = new dbPages();
$dbUsers = new dbUsers(); $dbUsers = new dbUsers();
$dbTags = new dbTags(); $dbTags = new dbTags();
@ -244,26 +240,17 @@ define('HTML_PATH_UPLOADS_PROFILES', HTML_PATH_UPLOADS.'profiles/');
define('HTML_PATH_UPLOADS_THUMBNAILS', HTML_PATH_UPLOADS.'thumbnails/'); define('HTML_PATH_UPLOADS_THUMBNAILS', HTML_PATH_UPLOADS.'thumbnails/');
define('HTML_PATH_PLUGINS', HTML_PATH_ROOT.'bl-plugins/'); define('HTML_PATH_PLUGINS', HTML_PATH_ROOT.'bl-plugins/');
define('JQUERY', HTML_PATH_ADMIN_THEME_JS.'jquery.min.js'); define('JQUERY', HTML_PATH_ROOT.'bl-kernel/js/jquery.min.js');
// --- PHP paths with dependency --- // --- PHP paths with dependency ---
// This paths are absolutes for the OS. // This paths are absolutes for the OS
// Depreacted, use THEME_DIR and THEME_DIR_XXX // Depreacted, use THEME_DIR and THEME_DIR_XXX
define('PATH_THEME', PATH_ROOT.'bl-themes'.DS.$Site->theme().DS);
define('PATH_THEME_PHP', PATH_THEME.'php'.DS);
define('PATH_THEME_CSS', PATH_THEME.'css'.DS);
define('PATH_THEME_JS', PATH_THEME.'js'.DS);
define('PATH_THEME_IMG', PATH_THEME.'img'.DS);
define('PATH_THEME_LANG', PATH_THEME.'languages'.DS);
define('THEME_DIR', PATH_ROOT.'bl-themes'.DS.$Site->theme().DS); define('THEME_DIR', PATH_ROOT.'bl-themes'.DS.$Site->theme().DS);
define('THEME_DIR_PHP', PATH_THEME.'php'.DS); define('THEME_DIR_PHP', THEME_DIR.'php'.DS);
define('THEME_DIR_CSS', PATH_THEME.'css'.DS); define('THEME_DIR_CSS', THEME_DIR.'css'.DS);
define('THEME_DIR_JS', PATH_THEME.'js'.DS); define('THEME_DIR_JS', THEME_DIR.'js'.DS);
define('THEME_DIR_IMG', PATH_THEME.'img'.DS); define('THEME_DIR_IMG', THEME_DIR.'img'.DS);
define('THEME_DIR_LANG', PATH_THEME.'languages'.DS); define('THEME_DIR_LANG', THEME_DIR.'languages'.DS);
// --- Absolute paths with domain --- // --- Absolute paths with domain ---
// This paths are absolutes for the user / web browsing. // This paths are absolutes for the user / web browsing.
@ -283,3 +270,8 @@ $Url->checkFilters( $Site->uriFilters() );
// --- Objects shortcuts --- // --- Objects shortcuts ---
$L = $Language; $L = $Language;
// DEBUG: Print constants
// $arr = array_filter(get_defined_constants(), 'is_string');
// echo json_encode($arr);
// exit;

View File

@ -13,6 +13,12 @@ $allPages = array();
// Object Page for the page filtered bye the user // Object Page for the page filtered bye the user
$page = false; $page = false;
// Array with all page parents published
//$pageParents = array();
// Array with all published pages, the array is a key=>Page-object
$pagesKey = array();
// ============================================================================ // ============================================================================
// Main // Main
// ============================================================================ // ============================================================================
@ -45,16 +51,16 @@ if( $Url->whereAmI()==='page' ) {
} }
} }
elseif( $Url->whereAmI()==='tag' ) { elseif( $Url->whereAmI()==='tag' ) {
$pages = buildPagesByTag(); buildPagesByTag();
} }
elseif( $Url->whereAmI()==='category' ) { elseif( $Url->whereAmI()==='category' ) {
$pages = buildPagesByCategory(); buildPagesByCategory();
} }
elseif( $Url->whereAmI()==='home' ) { elseif( $Url->whereAmI()==='home' ) {
$pages = buildPagesForHome(); buildPagesForHome();
} }
elseif( $Url->whereAmI()==='admin' ) { elseif( $Url->whereAmI()==='admin' ) {
$pages = buildPagesForAdmin(); buildPagesForAdmin();
} }
if( $Url->notFound() ) { if( $Url->notFound() ) {

View File

@ -1,34 +1,39 @@
<?php defined('BLUDIT') or die('Bludit CMS.'); <?php defined('BLUDIT') or die('Bludit CMS.');
// Current page number. // Current page number
$currentPage = $Url->pageNumber(); $currentPage = $Url->pageNumber();
Paginator::set('currentPage', $currentPage); Paginator::set('currentPage', $currentPage);
// Number of pages.
if($Url->whereAmI()=='admin') { if($Url->whereAmI()=='admin') {
$postPerPage = POSTS_PER_PAGE_ADMIN; $itemsPerPage = ITEMS_PER_PAGE_ADMIN;
$numberOfPosts = $dbPosts->numberPost(true); // published and drafts $amountOfItems = $dbPages->count(false);
} }
elseif($Url->whereAmI()=='tag') { elseif($Url->whereAmI()=='tag') {
$postPerPage = $Site->postsPerPage(); $itemsPerPage = $Site->itemsPerPage();
$tagKey = $Url->slug(); $tagKey = $Url->slug();
$numberOfPosts = $dbTags->countPostsByTag($tagKey); $amountOfItems = $dbTags->countPagesByTag($tagKey);
}
elseif($Url->whereAmI()=='category') {
$itemsPerPage = $Site->itemsPerPage();
$categoryKey = $Url->slug();
$amountOfItems = $dbCategories->countPagesByCategory($categoryKey);
} }
else { else {
$postPerPage = $Site->postsPerPage(); $itemsPerPage = $Site->itemsPerPage();
$numberOfPosts = $dbPosts->numberPost(false); // published $amountOfItems = $dbPages->count(true);
} }
// Post per page. // Items per page
Paginator::set('postPerPage', $postPerPage); Paginator::set('itemsPerPage', $itemsPerPage);
// Number of posts // Amount of items
Paginator::set('numberOfPosts', $numberOfPosts); Paginator::set('amountOfItems', $amountOfItems);
$numberOfPages = (int) max(ceil($numberOfPosts / $postPerPage) -1, 0); // Amount of pages
Paginator::set('numberOfPages', $numberOfPages); $amountOfPages = (int) max(ceil($amountOfItems / $itemsPerPage) -1, 0);
Paginator::set('amountOfPages', $amountOfPages);
$showOlder = $numberOfPages > $currentPage; $showOlder = $amountOfPages > $currentPage;
Paginator::set('showOlder', $showOlder); Paginator::set('showOlder', $showOlder);
$showNewer = $currentPage > 0; $showNewer = $currentPage > 0;
@ -40,5 +45,5 @@ Paginator::set('show', true);
$nextPage = max(0, $currentPage+1); $nextPage = max(0, $currentPage+1);
Paginator::set('nextPage', $nextPage); Paginator::set('nextPage', $nextPage);
$prevPage = min($numberOfPages, $currentPage-1); $prevPage = min($amountOfPages, $currentPage-1);
Paginator::set('prevPage', $prevPage); Paginator::set('prevPage', $prevPage);

View File

@ -67,9 +67,9 @@ function buildThemes()
// ============================================================================ // ============================================================================
// Load the language file // Load the language file
$languageFilename = PATH_THEME.'languages'.DS.$Site->locale().'.json'; $languageFilename = THEME_DIR.'languages'.DS.$Site->locale().'.json';
if( !Sanitize::pathFile($languageFilename) ) { if( !Sanitize::pathFile($languageFilename) ) {
$languageFilename = PATH_THEME.'languages'.DS.'en_US.json'; $languageFilename = THEME_DIR.'languages'.DS.'en_US.json';
} }
if( Sanitize::pathFile($languageFilename) ) if( Sanitize::pathFile($languageFilename) )

View File

@ -7,8 +7,7 @@ include(PATH_RULES.'60.plugins.php');
Theme::plugins('beforeRulesLoad'); Theme::plugins('beforeRulesLoad');
// Load rules // Load rules
include(PATH_RULES.'70.posts.php'); include(PATH_RULES.'69.pages.php');
include(PATH_RULES.'71.pages.php');
include(PATH_RULES.'99.header.php'); include(PATH_RULES.'99.header.php');
include(PATH_RULES.'99.paginator.php'); include(PATH_RULES.'99.paginator.php');
include(PATH_RULES.'99.themes.php'); include(PATH_RULES.'99.themes.php');

View File

@ -44,8 +44,18 @@ class dbPages extends dbJSON
// Generate UUID // Generate UUID
$args['uuid'] = md5( uniqid() ); $args['uuid'] = md5( uniqid() );
// Get current date // Date
$args['date'] = Date::current(DB_DATE_FORMAT); $currentDate = Date::current(DB_DATE_FORMAT);
// Validate date
if(!Valid::date($args['date'], DB_DATE_FORMAT)) {
$args['date'] = $currentDate;
}
// Schedule page
if( ($args['date']>$currentDate) && ($args['status']=='published') ) {
$args['status'] = 'scheduled';
}
foreach($this->dbFields as $field=>$options) { foreach($this->dbFields as $field=>$options) {
if( isset($args[$field]) ) { if( isset($args[$field]) ) {
@ -93,8 +103,13 @@ class dbPages extends dbJSON
return false; return false;
} }
// Save the database // Insert in database
$this->db[$key] = $dataForDb; $this->db[$key] = $dataForDb;
// Sort database
$this->sortByDate();
// Save database
if( $this->save() === false ) { if( $this->save() === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.');
return false; return false;
@ -181,8 +196,13 @@ class dbPages extends dbJSON
// Remove the old key // Remove the old key
unset( $this->db[$args['key']] ); unset( $this->db[$args['key']] );
// Save the database // Insert in database
$this->db[$newKey] = $dataForDb; $this->db[$newKey] = $dataForDb;
// Sort database
$this->sortByDate();
// Save database
if( $this->save() === false ) { if( $this->save() === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.');
return false; return false;
@ -268,7 +288,7 @@ class dbPages extends dbJSON
// Returns the amount of pages // Returns the amount of pages
// (boolean) $total, TRUE returns the total of pages // (boolean) $total, TRUE returns the total of pages
// (boolean) $total, FALSE returns the total of published pages (without draft and scheduled) // (boolean) $total, FALSE returns the total of published pages (without draft and scheduled)
public function numberPages($onlyPublished=true) public function count($onlyPublished=true)
{ {
if( $onlyPublished ) { if( $onlyPublished ) {
$db = $this->getPublishedDB(); $db = $this->getPublishedDB();
@ -278,6 +298,43 @@ class dbPages extends dbJSON
return count($this->db); return count($this->db);
} }
public function getParents($onlyPublished=true)
{
if( $onlyPublished ) {
$db = $this->getPublishedDB();
}
else {
$db = $this->db;
}
foreach( $db as $key=>$fields ) {
if( Text::stringContains($key, '/') ) {
unset($db[$key]);
}
}
return $db;
}
// Sort pages by date
public function sortByDate($HighToLow=true)
{
if($HighToLow) {
uasort($this->db, array($this, 'sortHighToLow'));
}
else {
uasort($this->db, array($this, 'sortLowToHigh'));
}
return true;
}
private function sortLowToHigh($a, $b) {
return $a['date']>$b['date'];
}
private function sortHighToLow($a, $b) {
return $a['date']<$b['date'];
}
// ----- OLD // ----- OLD
// Set a field of the database // Set a field of the database
@ -396,14 +453,6 @@ class dbPages extends dbJSON
return $this->save(); return $this->save();
} }
public function count()
{
$count = parent::count();
// DEBUG: Less than - 1 because the error page.
return $count - 1;
}
// Return TRUE if there are new pages published, FALSE otherwise. // Return TRUE if there are new pages published, FALSE otherwise.
public function scheduler() public function scheduler()
{ {
@ -437,258 +486,4 @@ class dbPages extends dbJSON
return false; return false;
} }
// --- OLD
public function cliMode()
{
// LOG
Log::set('CLI MODE - PAGES - Starting...');
$pageList = array();
$pagesDirectories = Filesystem::listDirectories(PATH_PAGES);
foreach( $pagesDirectories as $directory ) {
if( Sanitize::pathFile($directory.DS.FILENAME) ) {
// The key is the directory name
$key = basename($directory);
// Add the page key to the list
$pageList[$key] = true;
// LOG
Log::set('CLI MODE - Page found, key: '.$key);
// Search sub-pages
$subPaths = Filesystem::listDirectories($directory.DS);
foreach( $subPaths as $subDirectory )
{
// The key of the sub-page
$subKey = basename($subDirectory);
if( Sanitize::pathFile($subDirectory.DS.FILENAME) ) {
// Add the key of the sub-page, the key is composed by the directory/subdirectory
$pageList[$key.'/'.$subKey] = true;
// LOG
Log::set('CLI MODE - Page found, key: '.$key);
}
}
}
}
foreach( $pageList as $key=>$value ) {
if( !isset($this->db[$key]) ) {
// LOG
Log::set('CLI MODE - The page is not in the database, key: '.$key);
// Insert new post
$this->cliModeInsert($key);
}
else {
$checksum = md5_file(PATH_PAGES.$key.DS.FILENAME);
// If checksum is different, update the post
if( !isset($this->db[$key]['md5file']) ||
$this->db[$key]['md5file']!==$checksum ) {
// LOG
Log::set('CLI MODE - Different md5 checksum, key: '.$key);
// Update the post
$this->cliModeInsert($key, $update=true);
}
}
}
// LOG
Log::set('CLI MODE - Cleaning database...');
foreach( array_diff_key($this->db, $pageList) as $key=>$data ) {
// LOG
Log::set('CLI MODE - Removing page from database, key: '.$key);
// Remove the page from database
unset( $this->db[$key] );
}
// Save the database
$this->save();
// LOG
Log::set('CLI MODE - PAGES - Finishing...');
return true;
}
private function cliModeInsert($key, $update=false)
{
if($update) {
// LOG
Log::set('CLI MODE - cliModeInsert() - Updating the page, key: '.$key);
// Database from the current database
$dataForDb = $this->db[$key];
$dataForDb['dateModified'] = Date::current(DB_DATE_FORMAT);
}
else {
// LOG
Log::set('CLI MODE - cliModeInsert() - Inserting the new post, key: '.$key);
// Database for the new page, fields with the default values
$dataForDb = array();
foreach( $this->dbFields as $field=>$options ) {
if( !$options['inFile'] ) {
$dataForDb[$field] = $options['value'];
}
}
// Fields and value predefined in init.php
$dataForDb['username'] = CLI_USERNAME;
$dataForDb['status'] = CLI_STATUS;
$dataForDb['date'] = Date::current(DB_DATE_FORMAT);
}
// MD5 checksum
$dataForDb['md5file'] = md5_file(PATH_PAGES.$key.DS.FILENAME);
// Generate the Object from the file
$Page = new Page($key);
foreach( $this->dbFields as $field=>$options ) {
if( !$options['inFile'] ) {
// Get the field from the file
// If the field doesn't exist, the function returns FALSE
$data = $Page->getField($field);
if( $data!==false ) {
$tmpValue = '';
if( $field=='tags' ) {
$tmpValue = $this->generateTags($data);
}
elseif( $field=='date' ) {
// Validate format date from file
if( Valid::date($data, DB_DATE_FORMAT) ) {
$tmpValue = $data;
}
}
else {
$tmpValue = Sanitize::html($data);
}
settype($tmpValue, gettype($options['value']));
$dataForDb[$field] = $tmpValue;
}
}
}
// Insert row in the database
$this->db[$key] = $dataForDb;
return true;
}
public function regenerateCli()
{
$db = $this->db;
$newPaths = array();
$fields = array();
// Default fields and value
foreach($this->dbFields as $field=>$options) {
if(!$options['inFile']) {
$fields[$field] = $options['value'];
}
}
//$tmpPaths = glob(PATH_PAGES.'*', GLOB_ONLYDIR);
$tmpPaths = Filesystem::listDirectories(PATH_PAGES);
foreach($tmpPaths as $directory)
{
$key = basename($directory);
if(file_exists($directory.DS.FILENAME)) {
// The key is the directory name
$newPaths[$key] = true;
}
// Recovery pages from subdirectories
//$subPaths = glob($directory.DS.'*', GLOB_ONLYDIR);
$subPaths = Filesystem::listDirectories($directory.DS);
foreach($subPaths as $subDirectory)
{
$subKey = basename($subDirectory);
if(file_exists($subDirectory.DS.FILENAME)) {
// The key is composed by the directory/subdirectory
$newPaths[$key.'/'.$subKey] = true;
}
}
}
foreach($newPaths as $key=>$value)
{
if(!isset($this->db[$key]))
{
// Default values for the new pages.
$fields['status'] = CLI_STATUS;
$fields['date'] = Date::current(DB_DATE_FORMAT);
$fields['username'] = 'admin';
// Create the entry for the new page.
$this->db[$key] = $fields;
}
$Page = new Page($key);
// Update all fields from FILE to DATABASE.
foreach($fields as $f=>$v)
{
// If the field exists on the FILE, update it.
if($Page->getField($f))
{
$valueFromFile = $Page->getField($f);
if($f=='tags') {
// Generate tags array.
$this->db[$key]['tags'] = $this->generateTags($valueFromFile);
}
elseif($f=='date') {
// Validate Date from file
if(Valid::date($valueFromFile, DB_DATE_FORMAT)) {
$this->db[$key]['date'] = $valueFromFile;
}
}
else {
// Sanitize the values from file.
$this->db[$key][$f] = Sanitize::html($valueFromFile);
}
}
}
}
// Remove old pages from db
foreach( array_diff_key($db, $newPaths) as $key=>$data ) {
unset($this->db[$key]);
}
// Save the database.
if( $this->save() === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.');
return false;
}
return $this->db!=$db;
}
} }

View File

@ -111,6 +111,9 @@ function buildPagesFor($for, $categoryKey=false, $tagKey=false)
global $dbPages; global $dbPages;
global $dbCategories; global $dbCategories;
global $Site; global $Site;
global $Url;
global $pagesKey;
global $pages;
// Get the page number from URL // Get the page number from URL
$pageNumber = $Url->pageNumber(); $pageNumber = $Url->pageNumber();
@ -122,15 +125,15 @@ function buildPagesFor($for, $categoryKey=false, $tagKey=false)
} }
elseif($for=='home') { elseif($for=='home') {
$onlyPublished = true; $onlyPublished = true;
$amountOfItems = $Site->postsPerPage(); $amountOfItems = $Site->itemsPerPage();
$list = $dbPages->getList($pageNumber, $amountOfItems, $onlyPublished); $list = $dbPages->getList($pageNumber, $amountOfItems, $onlyPublished);
} }
elseif($for=='category') { elseif($for=='category') {
$amountOfItems = $Site->postsPerPage(); $amountOfItems = $Site->itemsPerPage();
$list = $dbCategories->getList($categoryKey, $pageNumber, $amountOfItems); $list = $dbCategories->getList($categoryKey, $pageNumber, $amountOfItems);
} }
elseif($for=='tag') { elseif($for=='tag') {
$amountOfItems = $Site->postsPerPage(); $amountOfItems = $Site->itemsPerPage();
$list = $dbTags->getList($tagKey, $pageNumber, $amountOfItems); $list = $dbTags->getList($tagKey, $pageNumber, $amountOfItems);
} }
@ -139,10 +142,14 @@ function buildPagesFor($for, $categoryKey=false, $tagKey=false)
$Url->setNotFound(true); $Url->setNotFound(true);
} }
$pages = array(); $pages = array(); // global variable
$pagesKey = array(); // global variable
foreach($list as $pageKey=>$fields) { foreach($list as $pageKey=>$fields) {
$page = buildPage($pageKey); $page = buildPage($pageKey);
if($page!==false) { if($page!==false) {
// $pagesKey
$pagesKey[$pageKey] = $page;
// $pages
array_push($pages, $page); array_push($pages, $page);
} }
} }

View File

@ -3,9 +3,8 @@
class Paginator { class Paginator {
public static $pager = array( public static $pager = array(
'numberOfPostsAndDraft'=>0, 'itemsPerPage'=>0,
'numberOfPosts'=>0, 'amountOfPages'=>0,
'numberOfPages'=>0,
'nextPage'=>0, 'nextPage'=>0,
'prevPage'=>0, 'prevPage'=>0,
'currentPage'=>0, 'currentPage'=>0,

View File

@ -4,8 +4,7 @@ class Redirect {
public static function url($url) public static function url($url)
{ {
if(!headers_sent()) if(!headers_sent()) {
{
header("Location:".$url, TRUE, 302); header("Location:".$url, TRUE, 302);
exit; exit;
} }
@ -13,9 +12,10 @@ class Redirect {
exit('<meta http-equiv="refresh" content="0; url='.$url.'"/>'); exit('<meta http-equiv="refresh" content="0; url='.$url.'"/>');
} }
public static function page($base, $page) public static function page($page)
{ {
self::url(HTML_PATH_ROOT.$base.'/'.$page); $base = ltrim(ADMIN_URI_FILTER, '/');
self::url(HTML_PATH_ROOT.$base.$page);
} }
public static function home() public static function home()

View File

@ -174,6 +174,11 @@ class Text {
return mb_strpos($string, $substring, 0, 'UTF-8'); return mb_strpos($string, $substring, 0, 'UTF-8');
} }
public static function stringContains($string, $substring)
{
return (self::stringPosition($string, $substring) !== false);
}
// Returns the portion of string specified by the start and length parameters. // Returns the portion of string specified by the start and length parameters.
public static function cut($string, $start, $length) public static function cut($string, $start, $length)
{ {

4
bl-kernel/js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -58,6 +58,8 @@ class Page {
$implode = implode($output); $implode = implode($output);
$this->vars['contentRaw'] = $implode; $this->vars['contentRaw'] = $implode;
} }
return true;
} }
// Returns TRUE if the content is loaded correctly, FALSE otherwise // Returns TRUE if the content is loaded correctly, FALSE otherwise
@ -145,6 +147,36 @@ class Page {
return $date; return $date;
} }
// Returns the permalink
// (boolean) $absolute, TRUE returns the page link with the DOMAIN, FALSE without the DOMAIN
public function permalink($absolute=false)
{
global $Url;
global $Site;
$url = trim(DOMAIN_BASE,'/');
$key = $this->key();
$filter = trim($Url->filters('page'), '/');
$htmlPath = trim(HTML_PATH_ROOT,'/');
if(empty($filter)) {
$tmp = $key;
}
else {
$tmp = $filter.'/'.$key;
}
if($absolute) {
return $url.'/'.$tmp;
}
if(empty($htmlPath)) {
return '/'.$tmp;
}
return '/'.$htmlPath.'/'.$tmp;
}
// ---- OLD // ---- OLD
// Returns the user object // Returns the user object
@ -161,12 +193,6 @@ class Page {
return $User; return $User;
} }
// Returns TRUE if the post is scheduled, FALSE otherwise.
public function scheduled()
{
return ($this->getField('status')==='scheduled');
}
// Returns the username who created the post/page // Returns the username who created the post/page
public function username() public function username()
{ {
@ -246,37 +272,7 @@ class Page {
} }
} }
// Returns the permalink
// (boolean) $absolute, TRUE returns the post/page link with the DOMAIN, FALSE without the DOMAIN
public function permalink($absolute=false)
{
global $Url;
global $Site;
$filterType = $this->getField('filterType');
$url = trim(DOMAIN_BASE,'/');
$key = $this->key();
$filter = trim($Url->filters($filterType), '/');
$htmlPath = trim(HTML_PATH_ROOT,'/');
if(empty($filter)) {
$tmp = $key;
}
else {
$tmp = $filter.'/'.$key;
}
if($absolute) {
return $url.'/'.$tmp;
}
if(empty($htmlPath)) {
return '/'.$tmp;
}
return '/'.$htmlPath.'/'.$tmp;
}
public function json($returnsArray=false) public function json($returnsArray=false)
{ {