New plugins and plugins updated for v2.0

This commit is contained in:
Diego Najar 2017-05-27 19:46:46 +02:00
parent 3df2370b12
commit 7d51652efc
24 changed files with 330 additions and 206 deletions

View File

@ -65,6 +65,8 @@ class dbList extends dbJSON
$this->db[$key]['name'] = $name;
$this->db[$key]['list'] = array();
$this->sortAlphanumeric();
$this->save();
return $key;
@ -93,10 +95,18 @@ class dbList extends dbJSON
unset( $this->db[$oldKey] );
}
$this->sortAlphanumeric();
$this->save();
return $newKey;
}
// Sort the categories by "Natural order"
private function sortAlphanumeric()
{
// Sort key alphanumeric strings, a01, a10, b10, c02
return ksort($this->db);
}
// Returns the name associated to the key, FALSE if the key doesn't exist
public function getName($key)
{
@ -108,18 +118,13 @@ class dbList extends dbJSON
}
// Returns an array with key=>name of the list
public function getKeyNameArray($sortAlphanumeric=true)
public function getKeyNameArray()
{
$tmp = array();
foreach($this->db as $key=>$fields) {
$tmp[$key] = $fields['name'];
}
// Sort alphanumeric strings, a01, a10, a11, a20
if($sortAlphanumeric) {
natcasesort($tmp);
}
return $tmp;
}

View File

@ -55,6 +55,26 @@ class Plugin {
}
}
public function setDb($args)
{
foreach($this->dbFields as $key=>$value) {
if( isset($args[$key]) ) {
$value = Sanitize::html( $args[$key] );
settype($value, gettype($this->dbFields[$key]));
$this->db[$key] = $value;
}
}
$this->save();
}
public function save()
{
$tmp = new dbJSON($this->filenameDb);
$tmp->db = $this->db;
$tmp->save();
}
public function htmlPath()
{
return HTML_PATH_PLUGINS.$this->directoryName.'/';
@ -86,6 +106,22 @@ class Plugin {
return true;
}
// Returns the value of the field from the database
// (string) $field
// (boolean) $html, TRUE returns the value sanitized, FALSE unsanitized
public function getValue($field, $html=true)
{
if( isset($this->db[$field]) ) {
if($html) {
return $this->db[$field];
}
else {
return Sanitize::htmlDecode($this->db[$field]);
}
}
return false;
}
public function getDbField($key, $html=true)
{
if(isset($this->db[$key])) {
@ -103,33 +139,6 @@ class Plugin {
return '';
}
public function setDb($args)
{
$tmp = $this->db;
foreach($this->dbFields as $key=>$value)
{
if(isset($args[$key]))
{
// Sanitize value
$tmpValue = Sanitize::html( $args[$key] );
// Set type
settype($tmpValue, gettype($value));
// Set value
$tmp[$key] = $tmpValue;
}
}
$this->db = $tmp;
// Save db on file
$Tmp = new dbJSON($this->filenameDb);
$Tmp->db = $tmp;
$Tmp->save();
}
public function name()
{
return $this->getMetadata('name');

View File

@ -6,7 +6,7 @@
if($Login->role()!=='admin') {
Alert::set($Language->g('you-do-not-have-sufficient-permissions'));
Redirect::page('admin', 'dashboard');
Redirect::page('dashboard');
}
// ============================================================================
@ -16,24 +16,20 @@ if($Login->role()!=='admin') {
// ============================================================================
// Main before POST
// ============================================================================
$_Plugin = false;
$plugin = false;
$pluginClassName = $layout['parameters'];
foreach($plugins['all'] as $P)
{
if($P->className()==$pluginClassName) {
$_Plugin = $P;
// Check if the plugin exists
if( isset($plugins['all'][$pluginClassName]) ) {
$plugin = $plugins['all'][$pluginClassName];
}
}
// Check if the plugin exists.
if($_Plugin===false) {
Redirect::page('admin', 'plugins');
else {
Redirect::page('plugins');
}
// Check if the plugin has the method form()
if(!method_exists($_Plugin, 'form')) {
Redirect::page('admin', 'plugins');
if( !method_exists($plugin, 'form') ) {
Redirect::page('plugins');
}
// ============================================================================
@ -42,11 +38,16 @@ if(!method_exists($_Plugin, 'form')) {
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
$_Plugin->setDb($_POST);
$plugin->setDb($_POST);
Theme::plugins('afterFormSave');
// Add to syslog
$Syslog->add(array(
'dictionaryKey'=>'plugin-configured',
'notes'=>$plugin->name()
));
Alert::set($Language->g('the-changes-have-been-saved'));
// Create an alert
Alert::set( $Language->g('The changes have been saved') );
}
// ============================================================================

View File

@ -112,4 +112,4 @@ if( !$dbPages->exists($layout['parameters']) ) {
Redirect::page('pages');
}
$page = $pagesKey[$layout['parameters']];
$page = $pagesByKey[$layout['parameters']];

View File

@ -6,7 +6,7 @@
if($Login->role()!=='admin') {
Alert::set($Language->g('you-do-not-have-sufficient-permissions'));
Redirect::page('admin', 'dashboard');
Redirect::page('dashboard');
}
// ============================================================================
@ -33,4 +33,4 @@ foreach($plugins['all'] as $P)
}
}
Redirect::page('admin', 'plugins');
Redirect::page('plugins');

View File

@ -6,7 +6,7 @@
if($Login->role()!=='admin') {
Alert::set($Language->g('you-do-not-have-sufficient-permissions'));
Redirect::page('admin', 'dashboard');
Redirect::page('dashboard');
}
// ============================================================================

View File

@ -6,7 +6,7 @@
if($Login->role()!=='admin') {
Alert::set($Language->g('you-do-not-have-sufficient-permissions'));
Redirect::page('admin', 'dashboard');
Redirect::page('dashboard');
}
// ============================================================================
@ -29,4 +29,4 @@ $pluginClassName = $layout['parameters'];
$Plugin = new $pluginClassName;
$Plugin->uninstall();
Redirect::page('admin', 'plugins');
Redirect::page('plugins');

View File

@ -1,6 +1,6 @@
<?php
HTML::title(array('title'=>$_Plugin->name(), 'icon'=>'puzzle-piece'));
HTML::title(array('title'=>$plugin->name(), 'icon'=>'puzzle-piece'));
HTML::formOpen(array('id'=>'jsformplugin'));
@ -11,7 +11,7 @@ HTML::formOpen(array('id'=>'jsformplugin'));
));
// Print the plugin form
echo $_Plugin->form();
echo $plugin->form();
// Form buttons
echo '<div class="uk-form-row uk-margin-bottom">

View File

@ -136,7 +136,7 @@ echo '<div class="bl-publish-sidebar uk-width-2-10">';
$options = array();
$parents = $dbPages->getParents(true);
foreach( $parents as $key=>$fields ) {
$options[$key] = $pagesKey[$key]->title();
$options[$key] = $pagesByKey[$key]->title();
}
HTML::formSelect(array(

View File

@ -23,7 +23,6 @@ $plugins = array(
'adminSidebar'=>array(),
'beforeRulesLoad'=>array(),
'afterFormSave'=>array(),
'afterPageCreate'=>array(),
'afterPageModify'=>array(),

View File

@ -17,7 +17,7 @@ $page = false;
//$pageParents = array();
// Array with all published pages, the array is a key=>Page-object
$pagesKey = array();
$pagesByKey = array();
// ============================================================================
// Main

View File

@ -117,7 +117,7 @@ function buildPagesFor($for, $categoryKey=false, $tagKey=false)
global $dbCategories;
global $Site;
global $Url;
global $pagesKey;
global $pagesByKey;
global $pages;
// Get the page number from URL
@ -150,12 +150,12 @@ function buildPagesFor($for, $categoryKey=false, $tagKey=false)
}
$pages = array(); // global variable
$pagesKey = array(); // global variable
$pagesByKey = array(); // global variable
foreach($list as $pageKey=>$fields) {
$page = buildPage($pageKey);
if($page!==false) {
// $pagesKey
$pagesKey[$pageKey] = $page;
// $pagesByKey
$pagesByKey[$pageKey] = $page;
// $pages
array_push($pages, $page);
}

View File

@ -2,9 +2,9 @@
"author": "Bludit",
"email": "",
"website": "https://plugins.bludit.com",
"version": "1.5.2",
"releaseDate": "2016-05-28",
"version": "2.0",
"releaseDate": "2017-05-26",
"license": "MIT",
"compatible": "1.5.2",
"compatible": "2.0",
"notes": ""
}

View File

@ -15,12 +15,13 @@ class pluginAbout extends Plugin {
global $Language;
$html = '<div>';
$html .= '<label>'.$Language->get('Plugin label').'</label>';
$html .= '<input name="label" id="jslabel" type="text" value="'.$this->getDbField('label').'">';
$html .= '<label>'.$Language->get('Label').'</label>';
$html .= '<input id="jslabel" name="label" type="text" value="'.$this->getValue('label').'">';
$html .= '</div>';
$html .= '<div>';
$html .= '<label>'.$Language->get('About').'</label>';
$html .= '<textarea name="text" id="jstext">'.$this->getDbField('text').'</textarea>';
$html .= '<textarea name="text" id="jstext">'.$this->getValue('text').'</textarea>';
$html .= '</div>';
return $html;
@ -29,9 +30,9 @@ class pluginAbout extends Plugin {
public function siteSidebar()
{
$html = '<div class="plugin plugin-about">';
$html .= '<h2>'.$this->getDbField('label').'</h2>';
$html .= '<h2 class="plugin-label">'.$this->getValue('label').'</h2>';
$html .= '<div class="plugin-content">';
$html .= html_entity_decode(nl2br($this->getDbField('text')));
$html .= html_entity_decode(nl2br($this->getValue('text')));
$html .= '</div>';
$html .= '</div>';

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "Categories",
"description": "Shows all categories."
}
}

View File

@ -0,0 +1,10 @@
{
"author": "Bludit",
"email": "",
"website": "https://plugins.bludit.com",
"version": "2.0",
"releaseDate": "2017-05-26",
"license": "MIT",
"compatible": "2.0",
"notes": ""
}

View File

@ -0,0 +1,58 @@
<?php
class pluginCategories extends Plugin {
public function init()
{
// Fields and default values for the database of this plugin
$this->dbFields = array(
'label'=>'Categories'
);
}
// Method called on the settings of the plugin on the admin area
public function form()
{
global $Language;
$html = '<div>';
$html .= '<label>'.$Language->get('Label').'</label>';
$html .= '<input id="jslabel" name="label" type="text" value="'.$this->getValue('label').'">';
$html .= '</div>';
return $html;
}
// Method called on the sidebar of the website
public function siteSidebar()
{
global $Language;
global $dbCategories;
global $Url;
// URL base filter for categories
$filter = $Url->filters('category');
// HTML for sidebar
$html = '<div class="plugin plugin-categories">';
$html .= '<h2 class="plugin-label">'.$this->getValue('label').'</h2>';
$html .= '<div class="plugin-content">';
$html .= '<ul>';
// By default the database of categories are alphanumeric sorted
foreach( $dbCategories->db as $key=>$fields ) {
$html .= '<li>';
$html .= '<a href="'.DOMAIN_BASE.$filter.'/'.$key.'">';
$html .= $fields['name'];
$html .= ' ('.count($fields['list']).')';
$html .= '</a>';
$html .= '</li>';
}
$html .= '</ul>';
$html .= '</div>';
$html .= '</div>';
return $html;
}
}

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "Menu",
"description": "Show a menu organized by categories and pages."
}
}

View File

@ -0,0 +1,10 @@
{
"author": "Bludit",
"email": "",
"website": "https://plugins.bludit.com",
"version": "2.0",
"releaseDate": "2017-05-26",
"license": "MIT",
"compatible": "2.0",
"notes": ""
}

View File

@ -0,0 +1,67 @@
<?php
class pluginMenu extends Plugin {
public function init()
{
// Fields and default values for the database of this plugin
$this->dbFields = array(
'label'=>'Menu'
);
}
// Method called on the settings of the plugin on the admin area
public function form()
{
global $Language;
$html = '<div>';
$html .= '<label>'.$Language->get('Label').'</label>';
$html .= '<input id="jslabel" name="label" type="text" value="'.$this->getValue('label').'">';
$html .= '</div>';
return $html;
}
// Method called on the sidebar of the website
public function siteSidebar()
{
global $Language;
global $dbCategories;
global $Url;
global $pagesByKey;
// HTML for sidebar
$html = '<div class="plugin plugin-menu">';
$html .= '<h2 class="plugin-label">'.$this->getValue('label').'</h2>';
$html .= '<div class="plugin-content">';
$html .= '<ul class="menu">';
// By default the database of categories are alphanumeric sorted
foreach( $dbCategories->db as $key=>$fields ) {
$pageList = $fields['list'];
if( count($pageList) > 0 ) {
$html .= '<li>';
$html .= '<span class="category-name">'.$fields['name'].'</span>';
$html .= '<ul class="submenu">';
foreach( $pageList as $pageKey ) {
$page = $pagesByKey[$pageKey];
$html .= '<li>';
$html .= '<a href="'.$page->permalink().'" class="page-title">';
$html .= $page->title();
$html .= '</a>';
$html .= '</li>';
}
$html .= '</ul>';
$html .= '</a>';
$html .= '</li>';
}
}
$html .= '</ul>';
$html .= '</div>';
$html .= '</div>';
return $html;
}
}

View File

@ -4,99 +4,64 @@ class pluginPages extends Plugin {
public function init()
{
// Fields and default values for the database of this plugin
$this->dbFields = array(
'homeLink'=>1,
'children'=>1,
'label'=>'Pages'
'label'=>'Pages',
'homeLink'=>true,
'children'=>true
);
}
// Method called on the settings of the plugin on the admin area
public function form()
{
global $Language;
$html = '<div>';
$html .= '<label>'.$Language->get('Plugin label').'</label>';
$html .= '<input name="label" id="jslabel" type="text" value="'.$this->getDbField('label').'">';
$html .= '<label>'.$Language->get('Label').'</label>';
$html .= '<input id="jslabel" name="label" type="text" value="'.$this->getValue('label').'">';
$html .= '</div>';
$html .= '<div>';
$html .= '<input type="hidden" name="homeLink" value="0">';
$html .= '<input name="homeLink" id="jshomeLink" type="checkbox" value="1" '.($this->getDbField('homeLink')?'checked':'').'>';
$html .= '<input id="jshomeLink" name="homeLink" type="checkbox" value="true" '.($this->getValue('homeLink')?'checked':'').'>';
$html .= '<label class="forCheckbox" for="jshomeLink">'.$Language->get('Show home link').'</label>';
$html .= '</div>';
$html .= '<div>';
$html .= '<input type="hidden" name="children" value="0">';
$html .= '<input name="children" id="children" type="checkbox" value="1" '.($this->getDbField('children')?'checked':'').'>';
$html .= '<input id="jschildren" name="children" type="checkbox" value="true" '.($this->getValue('children')?'checked':'').'>';
$html .= '<label class="forCheckbox" for="jschildren">'.$Language->get('Show children').'</label>';
$html .= '</div>';
return $html;
}
// Method called on the sidebar of the website
public function siteSidebar()
{
global $Language;
global $pagesParents;
global $Site, $Url;
global $pages;
global $Url;
// URL base filter for categories
$filter = $Url->filters('page');
// HTML for sidebar
$html = '<div class="plugin plugin-pages">';
// Print the label if not empty.
$label = $this->getDbField('label');
if( !empty($label) ) {
$html .= '<h2>'.$label.'</h2>';
}
$html .= '<h2 class="plugin-label">'.$this->getValue('label').'</h2>';
$html .= '<div class="plugin-content">';
$html .= '<ul class="parents">';
$html .= '<ul>';
// Show home link ?
if($this->getDbField('homeLink')) {
// By default the database of categories are alphanumeric sorted
foreach( $pages as $page ) {
$html .= '<li>';
$html .= '<a class="parent'.( ($Url->whereAmI()=='home')?' active':'').'" href="'.$Site->homeLink().'">'.$Language->get('Home').'</a>';
$html .= '<a href="'.DOMAIN_BASE.$filter.'/'.$page->key().'">';
$html .= $page->title();
$html .= '</a>';
$html .= '</li>';
}
$parents = $pagesParents[NO_PARENT_CHAR];
foreach($parents as $parent)
{
// Check if the parent is published
if( $parent->published() )
{
// Print the parent
$html .= '<li class="parent">';
$html .= '<a class="parent'.( ($parent->key()==$Url->slug())?' active':'').'" href="'.$parent->permalink().'">'.$parent->title().'</a>';
// Show children elements?
if($this->getDbField('children')) {
// Check if the parent has children
if(isset($pagesParents[$parent->key()]))
{
$children = $pagesParents[$parent->key()];
// Print children
$html .= '<ul class="children">';
foreach($children as $child)
{
// Check if the child is published
if( $child->published() )
{
$html .= '<li class="child">';
$html .= '<a class="'.( ($child->key()==$Url->slug())?' active':'').'" href="'.$child->permalink().'">'.$child->title().'</a>';
$html .= '</li>';
}
}
$html .= '</ul>';
}
}
$html .= '</li>';
}
}
$html .= '</ul>';
$html .= '</div>';
$html .= '</div>';

View File

@ -0,0 +1,55 @@
/* Plugins
------------------------------------------------------------------------------ */
div.plugin {
}
div.plugin h2.plugin-label {
border-bottom: solid 3px #f56a6a;
display: inline-block;
margin: 0 0 2em 0;
padding: 0 0.75em 0.5em 0;
}
div.plugin ul {
list-style: none;
}
div.plugin ul li {
border-top: solid 1px rgba(210, 215, 217, 0.75);
margin: 0.5em 0 0 0;
padding: 0.5em 0 0 0;
}
div.plugin a {
border-bottom: 0;
color: inherit;
cursor: pointer;
display: block;
font-size: 1.1em;
padding: 0.625em 0;
}
/* Plugin Menu
------------------------------------------------------------------------------ */
div.plugin-menu ul.menu {
margin: 0;
padding: 0;
}
div.plugin-menu ul.submenu li {
border: none;
}
div.plugin-menu span.category-name {
color: #3d4449 !important;
opacity: 1.0;
text-transform: uppercase;
}
div.plugin-menu a.page-title {
padding: 0;
}

View File

@ -9,6 +9,7 @@
echo Theme::css('assets/css/main.css');
echo '<noscript>'.Theme::css('assets/css/noscript.css').'</noscript>';
echo Theme::css('assets/css/bludit.css');
// Load plugins with the hook siteHead
Theme::plugins('siteHead');

View File

@ -1,75 +1,4 @@
<!-- Menu -->
<nav id="menu">
<header class="major">
<h2>Menu</h2>
</header>
<ul>
<li><a href="index.html">Homepage</a></li>
<li><a href="generic.html">Generic</a></li>
<li><a href="elements.html">Elements</a></li>
<li>
<span class="opener">Submenu</span>
<ul>
<li><a href="#">Lorem Dolor</a></li>
<li><a href="#">Ipsum Adipiscing</a></li>
<li><a href="#">Tempus Magna</a></li>
<li><a href="#">Feugiat Veroeros</a></li>
</ul>
</li>
<li><a href="#">Etiam Dolore</a></li>
<li><a href="#">Adipiscing</a></li>
<li>
<span class="opener">Another Submenu</span>
<ul>
<li><a href="#">Lorem Dolor</a></li>
<li><a href="#">Ipsum Adipiscing</a></li>
<li><a href="#">Tempus Magna</a></li>
<li><a href="#">Feugiat Veroeros</a></li>
</ul>
</li>
<li><a href="#">Maximus Erat</a></li>
<li><a href="#">Sapien Mauris</a></li>
<li><a href="#">Amet Lacinia</a></li>
</ul>
</nav>
<!-- Section -->
<section>
<header class="major">
<h2>Ante interdum</h2>
</header>
<div class="mini-posts">
<article>
<a href="#" class="image"><img src="images/pic07.jpg" alt="" /></a>
<p>Aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore aliquam.</p>
</article>
<article>
<a href="#" class="image"><img src="images/pic08.jpg" alt="" /></a>
<p>Aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore aliquam.</p>
</article>
<article>
<a href="#" class="image"><img src="images/pic09.jpg" alt="" /></a>
<p>Aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore aliquam.</p>
</article>
</div>
<ul class="actions">
<li><a href="#" class="button">More</a></li>
</ul>
</section>
<!-- Section -->
<section>
<header class="major">
<h2>Get in touch</h2>
</header>
<p>Sed varius enim lorem ullamcorper dolore aliquam aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore. Proin sed aliquam facilisis ante interdum. Sed nulla amet lorem feugiat tempus aliquam.</p>
<ul class="contact">
<li class="fa-envelope-o"><a href="#">information@untitled.tld</a></li>
<li class="fa-phone">(000) 000-0000</li>
<li class="fa-home">1234 Somewhere Road #8254<br />
Nashville, TN 00000-0000</li>
</ul>
</section>
<?php Theme::plugins('siteSidebar') ?>
<!-- Footer -->
<footer id="footer">