Robots plugin, dynamic titles, fix permissions when upload images

This commit is contained in:
Diego Najar 2018-07-13 18:30:42 +02:00
parent be8cf51393
commit f9b65c5a13
20 changed files with 273 additions and 56 deletions

View File

@ -35,6 +35,11 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
Alert::set( $Language->g('The changes have been saved') ); Alert::set( $Language->g('The changes have been saved') );
} }
} else { } else {
// If the checkbox is not selected the form doesn't send the field
$_POST['noindex'] = isset($_POST['noindex'])?true:false;
$_POST['nofollow'] = isset($_POST['nofollow'])?true:false;
$_POST['noarchive'] = isset($_POST['noarchive'])?true:false;
$key = editPage($_POST); $key = editPage($_POST);
if ($key!==false) { if ($key!==false) {
Alert::set( $Language->g('The changes have been saved') ); Alert::set( $Language->g('The changes have been saved') );

View File

@ -17,6 +17,11 @@
// ============================================================================ // ============================================================================
if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// If the checkbox is not selected the form doesn't send the field
$_POST['noindex'] = isset($_POST['noindex'])?true:false;
$_POST['nofollow'] = isset($_POST['nofollow'])?true:false;
$_POST['noarchive'] = isset($_POST['noarchive'])?true:false;
createPage($_POST); createPage($_POST);
Redirect::page('content'); Redirect::page('content');
} }

View File

@ -11,7 +11,7 @@
<!-- CSS --> <!-- CSS -->
<?php <?php
echo Theme::bootstrapCSS(); echo Theme::cssBootstrap();
echo Theme::css(array( echo Theme::css(array(
'jquery-auto-complete.css', 'jquery-auto-complete.css',
'open-iconic-bootstrap.min.css', 'open-iconic-bootstrap.min.css',
@ -23,7 +23,7 @@
<!-- Javascript --> <!-- Javascript -->
<?php <?php
echo Theme::jquery(); echo Theme::jquery();
echo Theme::bootstrapJS(); echo Theme::jsBootstrap();
echo Theme::js(array( echo Theme::js(array(
'jquery-auto-complete.min.js', 'jquery-auto-complete.min.js',
'jquery.datetimepicker.full.min.js' 'jquery.datetimepicker.full.min.js'

View File

@ -11,7 +11,7 @@
<!-- CSS --> <!-- CSS -->
<?php <?php
echo Theme::bootstrapCSS(); echo Theme::cssBootstrap();
echo Theme::css(array( echo Theme::css(array(
'bludit.css' 'bludit.css'
), DOMAIN_ADMIN_THEME_CSS); ), DOMAIN_ADMIN_THEME_CSS);
@ -20,7 +20,7 @@
<!-- Javascript --> <!-- Javascript -->
<?php <?php
echo Theme::jquery(); echo Theme::jquery();
echo Theme::bootstrapJS(); echo Theme::jsBootstrap();
?> ?>
<!-- Plugins --> <!-- Plugins -->

View File

@ -78,16 +78,9 @@
<textarea id="jseditor" style="display:none;"><?php echo $page->contentRaw(false) ?></textarea> <textarea id="jseditor" style="display:none;"><?php echo $page->contentRaw(false) ?></textarea>
</div> </div>
<div class="form-group mt-2"> <?php if($page->draft()): ?>
<button id="jsbuttonSave" type="button" class="btn btn-primary"><?php echo $L->g('Save') ?></button> <div class="alert alert-primary mt-2 mb-2">The content is saved as a draft. To publish it click on the button <b>Publish</b> or if you still working on it click on <b>Save as draft</b>.</div>
<button id="jsbuttonDraft" type="button" class="btn btn-secondary"><?php echo $L->g('Save as draft') ?></button> <?php endif; ?>
<a href="<?php echo HTML_PATH_ADMIN_ROOT ?>dashboard" class="btn btn-secondary"><?php echo $L->g('Cancel') ?></a>
<?php
if (count($page->children())===0) {
echo '<button id="jsbuttonDelete" type="button" class="btn btn-secondary">'.$L->g('Delete').'</button>';
}
?>
</div>
</div> </div>
@ -226,6 +219,18 @@
?> ?>
</div> </div>
<hr>
<div class="form-group mt-2">
<button id="jsbuttonSave" type="button" class="btn btn-primary"><?php echo ($page->draft()?$L->g('Publish'):$L->g('Update')) ?></button>
<button id="jsbuttonDraft" type="button" class="btn btn-secondary"><?php echo $L->g('Save as draft') ?></button>
<a href="<?php echo HTML_PATH_ADMIN_ROOT ?>dashboard" class="btn btn-secondary"><?php echo $L->g('Cancel') ?></a>
<?php
if (count($page->children())===0) {
echo '<button id="jsbuttonDelete" type="button" class="btn btn-secondary">'.$L->g('Delete').'</button>';
}
?>
</div>
<!-- Modal for Categories --> <!-- Modal for Categories -->
<div id="jscategoryModal" class="modal fade" tabindex="-1" role="dialog"> <div id="jscategoryModal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog"> <div class="modal-dialog">

View File

@ -72,12 +72,6 @@
<textarea id="jseditor" style="display:none;"></textarea> <textarea id="jseditor" style="display:none;"></textarea>
</div> </div>
<div class="form-group mt-2">
<button id="jsbuttonSave" type="button" class="btn btn-primary"><?php echo $L->g('Publish') ?></button>
<button id="jsbuttonDraft" type="button" class="btn btn-secondary"><?php echo $L->g('Save as draft') ?></button>
<a href="<?php echo HTML_PATH_ADMIN_ROOT ?>dashboard" class="btn btn-secondary"><?php echo $L->g('Cancel') ?></a>
</div>
</div> </div>
<!-- TABS IMAGES --> <!-- TABS IMAGES -->
@ -205,6 +199,13 @@
?> ?>
</div> </div>
<hr>
<div class="form-group mt-2">
<button id="jsbuttonSave" type="button" class="btn btn-primary"><?php echo $L->g('Publish') ?></button>
<button id="jsbuttonDraft" type="button" class="btn btn-secondary"><?php echo $L->g('Save as draft') ?></button>
<a href="<?php echo HTML_PATH_ADMIN_ROOT ?>dashboard" class="btn btn-secondary"><?php echo $L->g('Cancel') ?></a>
</div>
<!-- Modal for Categories --> <!-- Modal for Categories -->
<div id="jscategoryModal" class="modal fade" tabindex="-1" role="dialog"> <div id="jscategoryModal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog"> <div class="modal-dialog">

View File

@ -169,6 +169,48 @@ echo Bootstrap::pageTitle(array('title'=>$L->g('Settings'), 'icon'=>'cog'));
'tip'=>'Allow unicode characters in the URL and some part of the system.' 'tip'=>'Allow unicode characters in the URL and some part of the system.'
)); ));
echo Bootstrap::formTitle(array('title'=>$L->g('Title formats')));
echo Bootstrap::formInputText(array(
'name'=>'titleFormatHomepage',
'label'=>'Homepage',
'value'=>$Site->titleFormatHomepage(),
'class'=>'',
'placeholder'=>'',
'tip'=>'Variables allowed: <code>{{site-title}}</code> <code>{{site-slogan}}</code> <code>{{site-description}}</code>',
'placeholder'=>''
));
echo Bootstrap::formInputText(array(
'name'=>'titleFormatPages',
'label'=>'Pages',
'value'=>$Site->titleFormatPages(),
'class'=>'',
'placeholder'=>'',
'tip'=>'Variables allowed: <code>{{page-title}}</code> <code>{{page-description}}</code> <code>{{site-title}}</code> <code>{{site-slogan}}</code> <code>{{site-description}}</code>',
'placeholder'=>''
));
echo Bootstrap::formInputText(array(
'name'=>'titleFormatCategory',
'label'=>'Category',
'value'=>$Site->titleFormatCategory(),
'class'=>'',
'placeholder'=>'',
'tip'=>'Variables allowed: <code>{{category-name}}</code> <code>{{site-title}}</code> <code>{{site-slogan}}</code> <code>{{site-description}}</code>',
'placeholder'=>''
));
echo Bootstrap::formInputText(array(
'name'=>'titleFormatTag',
'label'=>'Tag',
'value'=>$Site->titleFormatTag(),
'class'=>'',
'placeholder'=>'',
'tip'=>'Variables allowed: <code>{{tag-name}}</code> <code>{{site-title}}</code> <code>{{site-slogan}}</code> <code>{{site-description}}</code>',
'placeholder'=>''
));
echo Bootstrap::formTitle(array('title'=>$L->g('URL Filters'))); echo Bootstrap::formTitle(array('title'=>$L->g('URL Filters')));
echo Bootstrap::formInputText(array( echo Bootstrap::formInputText(array(

View File

@ -10,6 +10,7 @@ foreach ($_FILES['bluditInputFiles']['name'] as $key=>$filename) {
// Move from temporary directory to uploads folder // Move from temporary directory to uploads folder
rename($_FILES['bluditInputFiles']['tmp_name'][$key], PATH_UPLOADS.$nextFilename); rename($_FILES['bluditInputFiles']['tmp_name'][$key], PATH_UPLOADS.$nextFilename);
chmod(PATH_UPLOADS.$nextFilename, 0644);
// Generate Thumbnail // Generate Thumbnail

View File

@ -443,6 +443,38 @@ class dbPages extends dbJSON
return ++$tmp; return ++$tmp;
} }
// Returns the next page key of the current page key
public function nextPageKey($currentKey)
{
if ($this->db[$currentKey]['status']=='published') {
$keys = array_keys($this->db);
$position = array_search($currentKey, $keys) - 1;
if (isset($keys[$position])) {
$nextKey = $keys[$position];
if ($this->db[$nextKey]['status']=='published') {
return $nextKey;
}
}
}
return false;
}
// Returns the previous page key of the current page key
public function previousPageKey($currentKey)
{
if ($this->db[$currentKey]['status']=='published') {
$keys = array_keys($this->db);
$position = array_search($currentKey, $keys) + 1;
if (isset($keys[$position])) {
$prevKey = $keys[$position];
if ($this->db[$prevKey]['status']=='published') {
return $prevKey;
}
}
}
return false;
}
// Returns an array with a list of key of pages, FALSE if out of range // Returns an array with a list of key of pages, FALSE if out of range
// The database is sorted by date or by position // The database is sorted by date or by position
// (int) $pageNumber, the page number // (int) $pageNumber, the page number

View File

@ -34,7 +34,11 @@ class dbSite extends dbJSON
'linkedin'=> array('inFile'=>false, 'value'=>''), 'linkedin'=> array('inFile'=>false, 'value'=>''),
'orderBy'=> array('inFile'=>false, 'value'=>'date'), // date or position 'orderBy'=> array('inFile'=>false, 'value'=>'date'), // date or position
'extremeFriendly'=> array('inFile'=>false, 'value'=>true), 'extremeFriendly'=> array('inFile'=>false, 'value'=>true),
'autosaveInterval'=> array('inFile'=>false, 'value'=>2) 'autosaveInterval'=> array('inFile'=>false, 'value'=>2),
'titleFormatHomepage'=> array('inFile'=>false, 'value'=>'{{site-slogan}} | {{site-title}}'),
'titleFormatPages'=> array('inFile'=>false, 'value'=>'{{page-title}} | {{site-title}}'),
'titleFormatCategory'=> array('inFile'=>false, 'value'=>'{{category-name}} | {{site-title}}'),
'titleFormatTag'=> array('inFile'=>false, 'value'=>'{{tag-name}} | {{site-title}}')
); );
function __construct() function __construct()
@ -209,6 +213,26 @@ class dbSite extends dbJSON
return $this->getField('footer'); return $this->getField('footer');
} }
public function titleFormatPages()
{
return $this->getField('titleFormatPages');
}
public function titleFormatHomepage()
{
return $this->getField('titleFormatHomepage');
}
public function titleFormatCategory()
{
return $this->getField('titleFormatCategory');
}
public function titleFormatTag()
{
return $this->getField('titleFormatTag');
}
// Returns the full domain and base url // Returns the full domain and base url
// For example, https://www.domain.com/bludit // For example, https://www.domain.com/bludit
public function url() public function url()
@ -216,6 +240,8 @@ class dbSite extends dbJSON
return $this->getField('url'); return $this->getField('url');
} }
// Returns the protocol and the domain, without the base url // Returns the protocol and the domain, without the base url
// For example, http://www.domain.com // For example, http://www.domain.com
public function domain() public function domain()

View File

@ -61,6 +61,10 @@ function buildPage($key) {
// Get the keys of the child // Get the keys of the child
$page->setField('childrenKeys', $dbPages->getChildren($key)); $page->setField('childrenKeys', $dbPages->getChildren($key));
// Set previous and next page key
$page->setField('previousKey', $dbPages->previousPageKey($key));
$page->setField('nextKey', $dbPages->nextPageKey($key));
return $page; return $page;
} }

View File

@ -53,41 +53,52 @@ class Theme {
return DOMAIN_ADMIN; return DOMAIN_ADMIN;
} }
// Return the metatag <title> with a predefine structure public static function metaTags($tag)
public static function headTitle()
{ {
global $Url; if ($tag=='title') {
global $Site; return self::metaTagTitle();
} elseif ($tag=='description') {
return self::metaTagDescription();
}
}
public static function metaTagTitle()
{
global $url;
global $site;
global $dbTags; global $dbTags;
global $dbCategories; global $dbCategories;
global $WHERE_AM_I; global $WHERE_AM_I;
global $page; global $page;
$title = $Site->title();
if (Text::isNotEmpty($Site->slogan())) {
$title = $Site->slogan().' | '.$Site->title();
}
if ($WHERE_AM_I=='page') { if ($WHERE_AM_I=='page') {
$title = $page->title().' | '.$Site->title(); $format = $site->titleFormatPages();
$format = Text::replace('{{page-title}}', $page->title(), $format);
$format = Text::replace('{{page-description}}', $page->description(), $format);
} }
elseif ($WHERE_AM_I=='tag') { elseif ($WHERE_AM_I=='tag') {
$tagKey = $Url->slug(); $tagKey = $url->slug();
$tagName = $dbTags->getName($tagKey); $tagName = $dbTags->getName($tagKey);
$title = $tagName.' | '.$Site->title(); $format = $site->titleFormatTag();
$format = Text::replace('{{tag-name}}', $tagName, $format);
} }
elseif ($WHERE_AM_I=='category') { elseif ($WHERE_AM_I=='category') {
$categoryKey = $Url->slug(); $categoryKey = $url->slug();
$categoryName = $dbCategories->getName($categoryKey); $categoryName = $dbCategories->getName($categoryKey);
$title = $categoryName.' | '.$Site->title(); $format = $site->titleFormatCategory();
$format = Text::replace('{{category-name}}', $categoryName, $format);
} else {
$format = $site->titleFormatHomepage();
} }
return '<title>'.$title.'</title>'.PHP_EOL; $format = Text::replace('{{site-title}}', $site->title(), $format);
$format = Text::replace('{{site-slogan}}', $site->slogan(), $format);
$format = Text::replace('{{site-description}}', $site->description(), $format);
return '<title>'.$format.'</title>'.PHP_EOL;
} }
// Return the metatag <decription> with a predefine structure public static function metaTagDescription()
public static function headDescription()
{ {
global $Site; global $Site;
global $WHERE_AM_I; global $WHERE_AM_I;
@ -102,6 +113,20 @@ class Theme {
return '<meta name="description" content="'.$description.'">'.PHP_EOL; return '<meta name="description" content="'.$description.'">'.PHP_EOL;
} }
// DEPRECATED v3.0.0
// Return the metatag <title> with a predefine structure
public static function headTitle()
{
return self::metaTagTitle();
}
// DEPRECATED v3.0.0
// Return the metatag <decription> with a predefine structure
public static function headDescription()
{
return self::metaTagDescription();
}
public static function charset($charset) public static function charset($charset)
{ {
return '<meta charset="'.$charset.'">'.PHP_EOL; return '<meta charset="'.$charset.'">'.PHP_EOL;
@ -171,12 +196,12 @@ class Theme {
return '<script charset="utf-8" src="'.DOMAIN_CORE_JS.'jquery.min.js?version='.BLUDIT_VERSION.'"></script>'.PHP_EOL; return '<script charset="utf-8" src="'.DOMAIN_CORE_JS.'jquery.min.js?version='.BLUDIT_VERSION.'"></script>'.PHP_EOL;
} }
public static function bootstrapJS() public static function jsBootstrap()
{ {
return '<script charset="utf-8" src="'.DOMAIN_CORE_JS.'bootstrap-bundle.min.js?version='.BLUDIT_VERSION.'"></script>'.PHP_EOL; return '<script charset="utf-8" src="'.DOMAIN_CORE_JS.'bootstrap-bundle.min.js?version='.BLUDIT_VERSION.'"></script>'.PHP_EOL;
} }
public static function bootstrapCSS() public static function cssBootstrap()
{ {
return '<link rel="stylesheet" type="text/css" href="'.DOMAIN_CORE_CSS.'bootstrap.min.css?version='.BLUDIT_VERSION.'">'.PHP_EOL; return '<link rel="stylesheet" type="text/css" href="'.DOMAIN_CORE_CSS.'bootstrap.min.css?version='.BLUDIT_VERSION.'">'.PHP_EOL;
} }

View File

@ -208,6 +208,18 @@ class Page {
return HTML_PATH_ROOT.PAGE_URI_FILTER.$key; return HTML_PATH_ROOT.PAGE_URI_FILTER.$key;
} }
// Returns the previous page key
public function previousKey()
{
return $this->getValue('previousKey');
}
// Returns the next page key
public function nextKey()
{
return $this->getValue('nextKey');
}
// Returns the category name // Returns the category name
public function category() public function category()
{ {

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "Robots",
"description": "You can use a special HTML meta tag to tell robots not to index the content of a page, and/or not scan it for links to follow."
}
}

View File

@ -0,0 +1,10 @@
{
"author": "Bludit",
"email": "",
"website": "https://plugins.bludit.com",
"version": "3.0",
"releaseDate": "2018-01-23",
"license": "MIT",
"compatible": "3.0",
"notes": ""
}

View File

@ -0,0 +1,36 @@
<?php
class pluginRobots extends Plugin {
public function siteHead()
{
global $WHERE_AM_I;
global $page;
$html = PHP_EOL.'<!-- Robots plugin -->'.PHP_EOL;
if ($WHERE_AM_I=='page') {
$robots = array();
if ($page->noindex()) {
$robots['noindex'] = 'noindex';
}
if ($page->nofollow()) {
$robots['nofollow'] = 'nofollow';
}
if ($page->noarchive()) {
$robots['noarchive'] = 'noarchive';
}
if (!empty($robots)) {
$robots = implode(' ', $robots);
$html .= '<meta name="robots" content="'.$robots.'">'.PHP_EOL;
}
}
return $html;
}
}

View File

@ -28,8 +28,11 @@
<!-- Javascript --> <!-- Javascript -->
<?php <?php
// Include Jquery file from Bludit Core
echo Theme::jquery(); echo Theme::jquery();
echo Theme::bootstrapJS();
// Include javascript Bootstrap file from Bludit Core
echo Theme::jsBootstrap();
?> ?>
<!-- Load Bludit Plugins: Site Body End --> <!-- Load Bludit Plugins: Site Body End -->

View File

@ -3,18 +3,18 @@
<meta name="author" content="Bludit CMS"> <meta name="author" content="Bludit CMS">
<!-- Dynamic title tag --> <!-- Dynamic title tag -->
<?php echo Theme::headTitle(); ?> <?php echo Theme::metaTags('title'); ?>
<!-- Dynamic description tag --> <!-- Dynamic description tag -->
<?php echo Theme::headDescription(); ?> <?php echo Theme::metaTags('description'); ?>
<!-- Favicon --> <!-- Include Favicon -->
<?php echo Theme::favicon('img/favicon.png'); ?> <?php echo Theme::favicon('img/favicon.png'); ?>
<!-- CSS: Bootstrap --> <!-- Include Bootstrap CSS file bootstrap.css -->
<?php echo Theme::bootstrapCSS(); ?> <?php echo Theme::cssBootstrap(); ?>
<!-- CSS: Styles for this theme --> <!-- Include CSS Styles from this theme -->
<?php echo Theme::css('css/style.css'); ?> <?php echo Theme::css('css/style.css'); ?>
<!-- Load Bludit Plugins: Site head --> <!-- Load Bludit Plugins: Site head -->

View File

@ -46,8 +46,11 @@
<!-- Javascript --> <!-- Javascript -->
<?php <?php
// Include Jquery file from Bludit Core
echo Theme::jquery(); echo Theme::jquery();
echo Theme::bootstrapJS();
// Include javascript Bootstrap file from Bludit Core
echo Theme::jsBootstrap();
?> ?>
<!-- Load Bludit Plugins: Site Body End --> <!-- Load Bludit Plugins: Site Body End -->

View File

@ -3,19 +3,19 @@
<meta name="author" content="Bludit CMS"> <meta name="author" content="Bludit CMS">
<!-- Dynamic title tag --> <!-- Dynamic title tag -->
<?php echo Theme::headTitle(); ?> <?php echo Theme::metaTags('title'); ?>
<!-- Dynamic description tag --> <!-- Dynamic description tag -->
<?php echo Theme::headDescription(); ?> <?php echo Theme::metaTags('description'); ?>
<!-- Favicon --> <!-- Include Favicon -->
<?php echo Theme::favicon('img/favicon.png'); ?> <?php echo Theme::favicon('img/favicon.png'); ?>
<!-- CSS: Bootstrap --> <!-- Include Bootstrap CSS file bootstrap.css -->
<?php echo Theme::bootstrapCSS(); ?> <?php echo Theme::cssBootstrap(); ?>
<!-- CSS: Styles for this theme --> <!-- Include CSS Styles from this theme -->
<?php echo Theme::css('css/style.css'); ?> <?php echo Theme::css('css/style.css'); ?>
<!-- Load Bludit Plugins: Site head --> <!-- Load Bludit Plugins: Site head -->
<?php Theme::plugins('siteHead'); ?> <?php Theme::plugins('siteHead'); ?>