Enable API when the user login, starting new default theme for Bludit v4 Popeye

This commit is contained in:
dignajar 2021-04-13 20:28:51 +02:00
parent 1c5992477f
commit 930dd9a01b
17 changed files with 372 additions and 85 deletions

View file

@ -25,7 +25,7 @@ checkRole(array('admin'));
activatePlugin('pluginAPI');
$apiURL = DOMAIN_BASE.'api/';
$pluginAPI = getPlugin('pluginAPI');
$apiToken = $pluginAPI->getToken();
$apiToken = $pluginAPI->token();
$username = $login->username();
$admin = new User($username);
$authToken = $admin->tokenAuth();

View file

@ -0,0 +1,7 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
// Init scripts for the theme
// This theme use the API to work
activatePlugin('pluginAPI');
$plugins['all']['pluginAPI']->newToken();

View file

@ -82,6 +82,88 @@ class HTML {
return '<script '.$attributes.' src="'.DOMAIN_CORE_VENDORS.'bootstrap-html5sortable/jquery.sortable.min.js?version='.BLUDIT_VERSION.'"></script>'.PHP_EOL;
}
/* Generates a dynamiclly the meta tag title for the themes === Bludit v4
@return string Returns the meta tag title <title>...</title>
*/
public static function metaTagTitle()
{
global $url;
global $site;
global $page;
global $WHERE_AM_I;
if ($WHERE_AM_I=='page') {
$format = $site->titleFormatPages();
$format = Text::replace('{{page-title}}', $page->title(), $format);
$format = Text::replace('{{page-description}}', $page->description(), $format);
} elseif ($WHERE_AM_I=='tag') {
try {
$tagKey = $url->slug();
$tag = new Tag($tagKey);
$format = $site->titleFormatTag();
$format = Text::replace('{{tag-name}}', $tag->name(), $format);
} catch (Exception $e) {
// Tag doesn't exist
}
} elseif ($WHERE_AM_I=='category') {
try {
$categoryKey = $url->slug();
$category = new Category($categoryKey);
$format = $site->titleFormatCategory();
$format = Text::replace('{{category-name}}', $category->name(), $format);
} catch (Exception $e) {
// Category doesn't exist
}
} else {
$format = $site->titleFormatHomepage();
}
$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;
}
/* Generates a dynamiclly the meta tag description for the themes === Bludit v4
@return string Returns the meta tag title <meta name="description" content="">
*/
public static function metaTagDescription()
{
global $site;
global $page;
global $url;
global $WHERE_AM_I;
$description = $site->description();
if ($WHERE_AM_I=='page') {
$description = $page->description();
} elseif ($WHERE_AM_I=='category') {
try {
$categoryKey = $url->slug();
$category = new Category($categoryKey);
$description = $category->description();
} catch (Exception $e) {
// description from the site
}
}
return '<meta name="description" content="'.$description.'">'.PHP_EOL;
}
/* Returns the short version of the current languages of the site === Bludit v4
@return string Returns the language sort version, for example: "en" or "de"
*/
public static function lang()
{
global $language;
return $language->currentLanguageShortVersion();
}
// --- CHECK OLD
public static function charset($charset)
@ -147,12 +229,6 @@ class HTML {
return $site->footer();
}
public static function lang()
{
global $language;
return $language->currentLanguageShortVersion();
}
public static function rssUrl()
{
if (pluginActivated('pluginRSS')) {
@ -194,72 +270,9 @@ class HTML {
}
}
public static function metaTagTitle()
{
global $url;
global $site;
global $tags;
global $categories;
global $WHERE_AM_I;
global $page;
if ($WHERE_AM_I=='page') {
$format = $site->titleFormatPages();
$format = Text::replace('{{page-title}}', $page->title(), $format);
$format = Text::replace('{{page-description}}', $page->description(), $format);
} elseif ($WHERE_AM_I=='tag') {
try {
$tagKey = $url->slug();
$tag = new Tag($tagKey);
$format = $site->titleFormatTag();
$format = Text::replace('{{tag-name}}', $tag->name(), $format);
} catch (Exception $e) {
// Tag doesn't exist
}
} elseif ($WHERE_AM_I=='category') {
try {
$categoryKey = $url->slug();
$category = new Category($categoryKey);
$format = $site->titleFormatCategory();
$format = Text::replace('{{category-name}}', $category->name(), $format);
} catch (Exception $e) {
// Category doesn't exist
}
} else {
$format = $site->titleFormatHomepage();
}
$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;
}
public static function metaTagDescription()
{
global $site;
global $WHERE_AM_I;
global $page;
global $url;
$description = $site->description();
if ($WHERE_AM_I=='page') {
$description = $page->description();
} elseif ($WHERE_AM_I=='category') {
try {
$categoryKey = $url->slug();
$category = new Category($categoryKey);
$description = $category->description();
} catch (Exception $e) {
// description from the site
}
}
return '<meta name="description" content="'.$description.'">'.PHP_EOL;
}
}

View file

@ -5,10 +5,10 @@
class API {
constructor(apiURL, apiToken, apiAuth) {
this.apiURL = "http://localhost:8000/api/";
this.apiURL = apiURL;
this.body = {
token: '45643a4071fad6a12261bb0763550feb',
authentication: '02707c99183896203b41d4a9b5c42692'
token: apiToken,
authentication: apiAuth
}
}

View file

@ -26,7 +26,7 @@ echo 'var tokenCSRF = "'.$security->getTokenCSRF().'";'.PHP_EOL;
echo 'var UPLOAD_MAX_FILESIZE = '.Text::toBytes( ini_get('upload_max_filesize') ).';'.PHP_EOL;
echo 'var DEBUG_MODE = '.(DEBUG_MODE?'true':'false').';'.PHP_EOL;
echo 'var PASSWORD_LENGTH = '.PASSWORD_LENGTH.';'.PHP_EOL;
echo 'var api = new API("", "", "", tokenCSRF);'.PHP_EOL;
echo 'var api = new API("'.DOMAIN.'/api/", "'.$plugins['all']['pluginAPI']->token().'", "'.$login->tokenAuth().'", tokenCSRF);'.PHP_EOL;
echo '</script>'.PHP_EOL;
?>

View file

@ -18,18 +18,24 @@ class Login {
}
}
// Returns the username of the user logged
// Returns the username
public function username()
{
return Session::get('username');
}
// Returns the role of the user logged
// Returns the role
public function role()
{
return Session::get('role');
}
// Returns the authentication token
public function tokenAuth()
{
return Session::get('tokenAuth');
}
// Returns TRUE if the user is logged, FALSE otherwise
public function isLogged()
{
@ -49,10 +55,11 @@ class Login {
}
// Set the session for the user logged
public function setLogin($username, $role)
public function setLogin($username, $role, $tokenAuth)
{
Session::set('username', $username);
Session::set('role', $role);
Session::set('tokenAuth', $tokenAuth);
Session::set('fingerPrint', $this->fingerPrint());
Session::set('sessionTime', time());
@ -112,7 +119,7 @@ class Login {
$passwordHash = $this->users->generatePasswordHash($password, $user->salt());
if ($passwordHash===$user->password()) {
$this->setLogin($username, $user->role());
$this->setLogin($username, $user->role(), $user->tokenAuth());
Log::set(__METHOD__.LOG_SEP.'Successful user login by username and password - Username ['.$username.']');
return true;
}
@ -151,7 +158,7 @@ class Login {
// Get user from database and login
$user = $this->users->getUserDB($username);
$this->setLogin($username, $user['role']);
$this->setLogin($username, $user['role'], $user->tokenAuth());
Log::set(__METHOD__.LOG_SEP.'User authenticated via Remember Me.');
return true;
}

View file

@ -600,9 +600,13 @@ class Page {
return false;
}
// Returns an array with all pages key related to the page
// The relation is based on the tags
public function related() {
/* Returns an array with all pages key related to the page === Bludit v4
The relation is based on the tags.
@sortByDate boolean TRUE if you want to get sort by date the pages, FALSE random order
@return array Returns an array with the page keys related to page
*/
public function related($sortByDate=false) {
global $tags;
$pageTags = $this->tags(true);
$list = array();
@ -620,6 +624,19 @@ class Page {
unset($list[$key]);
}
// Sort by date if requested
if ($sortByDate) {
$listSortByDate = array();
foreach ($list as $pageKey) {
$tmpPage = new Page($pageKey);
$listSortByDate[$tmpPage->date('U')] = new Page($pageKey);
}
krsort($listSortByDate);
return $listSortByDate;
}
return $list;
}
}

View file

@ -7,7 +7,7 @@ class pluginAPI extends Plugin {
public function init()
{
// Generate the API Token
$token = md5( uniqid().time().DOMAIN );
$token = $this->generateToken();
$this->dbFields = array(
'token'=>$token, // API Token
@ -15,11 +15,22 @@ class pluginAPI extends Plugin {
);
}
public function getToken()
public function generateToken()
{
return md5( uniqid().time().DOMAIN );
}
public function token()
{
return $this->getValue('token');
}
public function newToken()
{
$this->db['token'] = $this->generateToken();
$this->save();
}
public function form()
{
global $L;
@ -116,7 +127,7 @@ class pluginAPI extends Plugin {
if (($user->role()=='admin') && ($user->enabled())) {
// Loggin the user to create the session
$login = new Login();
$login->setLogin($username, 'admin');
$login->setLogin($username, 'admin', $user->tokenAuth());
// Enable write permissions
$writePermissions = true;
}

14
bl-themes/popeye/css/style.css Executable file
View file

@ -0,0 +1,14 @@
/* VIDEO EMBED RESPONSIVE */
.video-embed {
overflow:hidden;
padding-bottom: 56.25%; /* 16:9 */
position:relative;
height:0;
}
.video-embed iframe{
left:0;
top:0;
height:100%;
width:100%;
position:absolute;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

66
bl-themes/popeye/index.php Executable file
View file

@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="<?php echo HTML::lang() ?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="Bludit">
<!-- Generate <title>...</title> -->
<?php echo HTML::metaTagTitle(); ?>
<!-- Generate <meta name="description" content="..."> -->
<?php echo HTML::metaTagDescription(); ?>
<!-- Generate <link rel="icon" href="..."> -->
<?php echo HTML::favicon('img/favicon.png'); ?>
<!-- Include CSS Bootstrap file from Bludit Core -->
<?php echo HTML::cssBootstrap(); ?>
<!-- Include CSS Styles from this theme -->
<?php echo HTML::css('css/style.css'); ?>
<!-- Execute Bludit plugins for the hook "Site head" -->
<?php execPluginsByHook('siteHead'); ?>
</head>
<body>
<!-- Execute Bludit plugins for the hook "Site body begin" -->
<?php execPluginsByHook('siteBodyBegin'); ?>
<!-- Navbar -->
<?php include(THEME_DIR_PHP.'navbar.php'); ?>
<!-- Content -->
<?php
// $WHERE_AM_I variable provides where the user is browsing
// If the user is watching a particular page the variable takes the value "page"
// If the user is watching the frontpage the variable takes the value "home"
// If the user is watching a particular category the variable takes the value "category"
if ($WHERE_AM_I == 'page') {
// Check if the page has a template
$template = $page->template();
if (($template) && file_exists(THEME_DIR_TEMPLATES.$template)) {
include(THEME_DIR_TEMPLATES.$template);
} else {
include(THEME_DIR_PHP.'page.php');
}
} else {
include(THEME_DIR_PHP.'home.php');
}
?>
<!-- Footer -->
<?php include(THEME_DIR_PHP.'footer.php'); ?>
<!-- Include Jquery file from Bludit Core -->
<?php echo HTML::jquery(); ?>
<!-- Include javascript Bootstrap file from Bludit Core -->
<?php echo HTML::jsBootstrap(); ?>
<!-- Execute Bludit plugins for the hook "Site body end" -->
<?php execPluginsByHook('siteBodyEnd'); ?>
</body>
</html>

View file

@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Popeye",
"description": ""
}
}

View file

@ -0,0 +1,10 @@
{
"author": "Bludit",
"email": "",
"website": "https://themes.bludit.com",
"version": "4.0",
"releaseDate": "2020-07-28",
"license": "MIT",
"compatible": "4.0",
"notes": ""
}

View file

@ -0,0 +1,5 @@
<footer class="footer bg-dark">
<div class="container">
<p class="m-0 text-center text-white text-uppercase"><?php echo $site->footer(); ?><span class="ms-5 text-warning">Powered by<img class="mini-logo" src="<?php echo DOMAIN_THEME_IMG.'favicon.png'; ?>"/><a target="_blank" class="text-white" href="https://www.bludit.com">Bludit</a></span></p>
</div>
</footer>

View file

@ -0,0 +1,92 @@
<!-- Site logo and description -->
<header class="bg-light p-3">
<div class="container text-center">
<div class="site-logo">
<img class="img-thumbnail rounded mx-auto d-block" height="150px" width="150px" src="<?php echo $site->logo() ?>" alt="">
</div>
<?php if ($site->description()) : ?>
<div class="site-description mt-2">
<p><?php echo $site->description(); ?></p>
</div>
<?php endif ?>
</div>
</header>
<?php if (empty($content)) : ?>
<div class="text-center p-4">
<?php $language->p('No pages found') ?>
</div>
<?php endif ?>
<!-- Print all the content -->
<section class="mt-4 mb-4">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<!-- Search input -->
<form class="d-flex mb-4">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
<!-- Pages -->
<div class="list-group list-group-flush">
<?php foreach ($content as $page) : ?>
<div href="#" class="list-group-item list-group-item-action pt-3 pb-3" aria-current="true">
<div class="d-flex w-100 justify-content-between">
<!-- Print page's title -->
<h5 class="mb-1"><?php echo $page->title() ?></h5>
<!-- Print page's date -->
<small>3 days ago</small>
</div>
<!-- Print page's description -->
<p class="mb-1">Some placeholder content in a paragraph.</p>
<!-- Print page's tags -->
<?php
$tmp = $page->tags(true);
if (!empty($tmp)) {
echo '<small>';
foreach ($tmp as $tagKey => $tagName) {
echo '<a class="badge bg-light text-dark text-decoration-none" href="' . DOMAIN_TAGS . $tagKey . '">' . $tagName . '</a>';
}
echo '</small>';
}
?>
</div>
<?php endforeach ?>
</div>
</div>
</div>
</div>
</section>
<!-- Pagination -->
<?php if (Paginator::numberOfPages() > 1) : ?>
<nav class="paginator">
<ul class="pagination flex-wrap justify-content-center">
<!-- Previous button -->
<?php if (Paginator::showPrev()) : ?>
<li class="page-item me-2">
<a class="page-link" href="<?php echo Paginator::previousPageUrl() ?>" tabindex="-1">&#9664; <?php echo $L->get('Previous'); ?></a>
</li>
<?php endif; ?>
<!-- Home button -->
<li class="page-item <?php if (Paginator::currentPage() == 1) echo 'disabled' ?>">
<a class="page-link" href="<?php echo HTML::siteUrl() ?>"><?php echo $L->get('Home'); ?></a>
</li>
<!-- Next button -->
<?php if (Paginator::showNext()) : ?>
<li class="page-item ms-2">
<a class="page-link" href="<?php echo Paginator::nextPageUrl() ?>"><?php echo $L->get('Next'); ?> &#9658;</a>
</li>
<?php endif; ?>
</ul>
</nav>
<?php endif ?>

View file

@ -0,0 +1,5 @@
<nav class="navbar sticky-top navbar-light bg-light">
<div class="container">
<a class="navbar-brand" href="#">Sticky top</a>
</div>
</nav>

View file

@ -0,0 +1,33 @@
<section class="page">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<!-- Load Bludit Plugins: Page Begin -->
<?php execPluginsByHook('pageBegin'); ?>
<!-- Page title -->
<h1 class="title"><?php echo $page->title(); ?></h1>
<!-- Page description -->
<?php if ($page->description()): ?>
<p class="page-description"><?php echo $page->description(); ?></p>
<?php endif ?>
<!-- Page cover image -->
<?php if ($page->coverImage()): ?>
<div class="page-cover-image py-6 mb-4" style="background-image: url('<?php echo $page->coverImage(); ?>');">
<div style="height: 300px;"></div>
</div>
<?php endif ?>
<!-- Page content -->
<div class="page-content">
<?php echo $page->content(); ?>
</div>
<!-- Load Bludit Plugins: Page End -->
<?php execPluginsByHook('pageEnd'); ?>
</div>
</div>
</div>
</section>