add comments, and styling

This commit is contained in:
Diego Najar 2021-09-12 22:06:29 +02:00
parent f9ec67ad27
commit 8439abbe97
6 changed files with 759 additions and 666 deletions

View file

@ -229,16 +229,14 @@ define('DOMAIN_THEME_CSS', DOMAIN.HTML_PATH_THEME_CSS);
define('DOMAIN_THEME_JS', DOMAIN.HTML_PATH_THEME_JS);
define('DOMAIN_THEME_IMG', DOMAIN.HTML_PATH_THEME_IMG);
define('DOMAIN_ADMIN_THEME', DOMAIN.HTML_PATH_ADMIN_THEME);
define('DOMAIN_ADMIN_THEME_CSS', DOMAIN.HTML_PATH_ADMIN_THEME_CSS);
define('DOMAIN_ADMIN_THEME_CSS',DOMAIN.HTML_PATH_ADMIN_THEME_CSS);
define('DOMAIN_ADMIN_THEME_JS', DOMAIN.HTML_PATH_ADMIN_THEME_JS);
define('DOMAIN_UPLOADS', DOMAIN.HTML_PATH_UPLOADS);
define('DOMAIN_UPLOADS_PAGES', DOMAIN.HTML_PATH_UPLOADS_PAGES);
define('DOMAIN_UPLOADS_PROFILES', DOMAIN.HTML_PATH_UPLOADS_PROFILES);
define('DOMAIN_UPLOADS_PROFILES',DOMAIN.HTML_PATH_UPLOADS_PROFILES);
define('DOMAIN_PLUGINS', DOMAIN.HTML_PATH_PLUGINS);
define('DOMAIN_CONTENT', DOMAIN.HTML_PATH_CONTENT);
define('DOMAIN_ADMIN', DOMAIN_BASE.ADMIN_URI_FILTER.'/');
define('DOMAIN_TAGS', Text::addSlashes(DOMAIN_BASE.TAG_URI_FILTER, false, true));
define('DOMAIN_CATEGORIES', Text::addSlashes(DOMAIN_BASE.CATEGORY_URI_FILTER, false, true));
define('DOMAIN_PAGES', Text::addSlashes(DOMAIN_BASE.PAGE_URI_FILTER, false, true));

View file

@ -6,8 +6,15 @@ class Sanitize {
return strip_tags($text);
}
// Convert special characters to HTML entities
public static function html($text)
/**
* Convert special characters to HTML entities.
* For example, & => &
* For example, " => "
*
* @param string $text
* @return string
*/
public static function html(string $text): string
{
$flags = ENT_COMPAT;

View file

@ -18,6 +18,7 @@ echo 'var DOMAIN_PAGES = "'.DOMAIN_PAGES.'";'.PHP_EOL;
echo 'var DOMAIN_ADMIN = "'.DOMAIN_ADMIN.'";'.PHP_EOL;
echo 'var DOMAIN_CONTENT = "'.DOMAIN_CONTENT.'";'.PHP_EOL;
echo 'var DOMAIN_UPLOADS = "'.DOMAIN_UPLOADS.'";'.PHP_EOL;
echo 'var DOMAIN_UPLOADS_PAGES = "'.DOMAIN_UPLOADS_PAGES.'";'.PHP_EOL;
echo 'var DB_DATE_FORMAT = "'.DB_DATE_FORMAT.'";'.PHP_EOL;
echo 'var AUTOSAVE_INTERVAL = "'.AUTOSAVE_INTERVAL.'";'.PHP_EOL;
echo 'var PAGE_BREAK = "'.PAGE_BREAK.'";'.PHP_EOL;

View file

@ -19,19 +19,26 @@ class Page {
Log::set(__METHOD__.LOG_SEP.$errorMessage);
throw new Exception($errorMessage);
}
// The database doesn't have the page's content.
$row = $pages->getPageDB($key);
}
foreach ($row as $field=>$value) {
if ($field=='date') {
$this->setField('dateRaw', $value);
$this->vars['dateRaw'] = $value;
} else {
$this->setField($field, $value);
$this->vars[$field] = $value;
}
}
}
public function getValue($field)
/**
* Returns the value associated to a field, if the field doesn't exists returns FALSE.
*
* @param string $field
* @return bool|string|int|array
*/
public function getValue(string $field): bool|string|int|array
{
if (isset($this->vars[$field])) {
return $this->vars[$field];
@ -39,16 +46,26 @@ class Page {
return false;
}
public function setField($field, $value)
/**
* Set the value associated to a field.
*
* @param string $field
* @param string $value
* @return boolean
*/
public function setField(string $field, string $value): bool
{
$this->vars[$field] = $value;
return true;
}
// Returns the raw content
// This content is not markdown parser
// (boolean) $sanitize, TRUE returns the content sanitized
public function contentRaw($sanitize=false)
/**
* Returns the full raw page's content. This content is not markdown parser.
*
* @param boolean $sanitize TRUE returns the content sanitized
* @return string
*/
public function contentRaw(bool $sanitize=false): string
{
$key = $this->key();
$filePath = PATH_PAGES.$key.DS.FILENAME;
@ -60,10 +77,13 @@ class Page {
return $contentRaw;
}
// Returns the full content
// This content is markdown parser
// (boolean) $sanitize, TRUE returns the content sanitized
public function content($sanitize=false)
/**
* Returns the full page's content.
*
* @param boolean $sanitize TRUE returns the content sanitized
* @return string
*/
public function content(bool $sanitize=false): string
{
// If already set the content, return it
$content = $this->getValue('content');
@ -72,7 +92,7 @@ class Page {
}
// Get the raw content
$content = $this->contentRaw();
$content = $this->contentRaw(false);
// Parse Markdown
if (MARKDOWN_PARSER) {
@ -82,7 +102,7 @@ class Page {
// Parse img src relative to absolute (with domain)
if (IMAGE_RELATIVE_TO_ABSOLUTE) {
$domain = IMAGE_RESTRICT?DOMAIN_UPLOADS_PAGES.$this->uuid().'/':DOMAIN_UPLOADS;
$domain = IMAGE_RESTRICT?DOMAIN_UPLOADS_PAGES.$this->key().'/':DOMAIN_UPLOADS;
$content = Text::imgRel2Abs($content, $domain);
}
@ -92,10 +112,13 @@ class Page {
return $content;
}
// Returns the first part of the content if the content is splited, otherwise is returned the full content
// This content is markdown parser
// (boolean) $sanitize, TRUE returns the content sanitized
public function contentBreak($sanitize=false)
/**
* Returns the first part of the content if the content is splited, otherwise is returned the full content.
*
* @param boolean $sanitize TRUE returns the content sanitized
* @return string
*/
public function contentBreak(bool $sanitize=false): string
{
$content = $this->content($sanitize);
$explode = explode(PAGE_BREAK, $content);
@ -238,11 +261,12 @@ class Page {
}
}
/* Returns the template for the page === Bludit v4
@return string/boolean Returns the template for the page or FALSE if the page haven't a template assigned
/**
* Returns the template for the page or FALSE if the page haven't a template assigned.
*
* @return boolean|string
*/
public function template()
public function template(): bool|string
{
$template = $this->getValue('template');
if (empty($template)) {
@ -306,24 +330,27 @@ class Page {
return json_encode($tmp);
}
// Returns the endpoint of the coverimage, FALSE if the page doesn't have a cover image
// (boolean) $absolute, TRUE returns the complete URL, FALSE returns the filename
// If the user defined an external cover image the function returns it
public function coverImage($absolute=true)
/**
* Returns the cover image endpoint, FALSE if the page doesn't have a cover image
*
* @param boolean $absolute TRUE returns the complete URL, FALSE returns the filename
* @return string
*/
public function coverImage(bool $absolute=true): string
{
$filename = $this->getValue('coverImage');
if (empty($filename)) {
return false;
}
// Check is external cover image
// Check if it is an external cover image
if (filter_var($filename, FILTER_VALIDATE_URL)) {
return $filename;
}
if ($absolute) {
if (IMAGE_RESTRICT) {
return DOMAIN_UPLOADS_PAGES.$this->uuid().'/'.$filename;
return DOMAIN_UPLOADS_PAGES.$this->key().'/'.$filename;
}
return DOMAIN_UPLOADS.$filename;
}
@ -349,48 +376,72 @@ class Page {
return $this->getValue('key');
}
// (boolean) Returns TRUE if the page is published, FALSE otherwise
public function published()
/**
* Returns TRUE if the page is type "published", FALSE otherwise
*
* @return boolean
*/
public function published(): bool
{
return ($this->getValue('type')==='published');
}
// (boolean) Returns TRUE if the page is scheduled, FALSE otherwise
public function scheduled()
/**
* Returns TRUE if the page is type "scheduled", FALSE otherwise
*
* @return boolean
*/
public function scheduled(): bool
{
return ($this->getValue('type')==='scheduled');
}
// (boolean) Returns TRUE if the page is draft, FALSE otherwise
public function draft()
/**
* Returns TRUE if the page is type "draft", FALSE otherwise
*
* @return boolean
*/
public function draft(): bool
{
return ($this->getValue('type')=='draft');
}
/**
* Returns TRUE if the page is type "sticky", FALSE otherwise
*
* @return boolean
*/
public function sticky(): bool
{
return ($this->getValue('type')=='sticky');
}
/**
* Returns TRUE if the page is type "static", FALSE otherwise
*
* @return boolean
*/
public function isStatic(): bool
{
return ($this->getValue('type')=='static');
}
/**
* Returns TRUE if the page is type "unlisted", FALSE otherwise
*
* @return boolean
*/
public function unlisted(): bool
{
return ($this->getValue('type')=='unlisted');
}
// (boolean) Returns TRUE if the page is autosave, FALSE otherwise
public function autosave()
{
return ($this->getValue('type')=='autosave');
}
// (boolean) Returns TRUE if the page is sticky, FALSE otherwise
public function sticky()
{
return ($this->getValue('type')=='sticky');
}
// (boolean) Returns TRUE if the page is static, FALSE otherwise
public function isStatic()
{
return ($this->getValue('type')=='static');
}
// (boolean) Returns TRUE if the page is unlisted, FALSE otherwise
public function unlisted()
{
return ($this->getValue('type')=='unlisted');
}
// (string) Returns type of the page
public function type()
{
@ -517,11 +568,13 @@ class Page {
return $list;
}
/* Returns the amount of minutes takes to read the page === Bludit v4
@return string Returns the minutes as string
/**
* Returns the amount of minutes takes to read the page
*
* @return string
*/
public function readingTime() {
public function readingTime(): string
{
$words = $this->content(true);
$words = strip_tags($words);
$words = str_word_count($words);
@ -547,14 +600,15 @@ class Page {
return false;
}
/* 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
@getFirst int Amount of related pages, -1 indicates all related pages
@return array Returns an array with the page keys related to page
/**
* Returns an array with all pages' keys related to the page. The relation is based on the tags.
*
* @param boolean $sortByDate TRUE if you want to get sort by date the pages, FALSE random order
* @param integer $getFirst Amount of related pages, -1 indicates all related pages
* @return array
*/
public function related($sortByDate=false, $getFirst=-1) {
public function related(bool $sortByDate=false, int $getFirst=-1): array
{
global $tags;
$pageTags = $this->tags(true);
$list = array();
@ -590,13 +644,14 @@ class Page {
}
}
/* Returns relative time (e.g. "1 minute ago") === Bludit v4
Based on http://stackoverflow.com/a/18602474
@complete boolean TRUE full version, FALSE short version
@return string Relative time, for example: 1 minute ago
/**
* Returns the date as relative time.
*
* @param boolean $complete TRUE full version, FALSE short version
* @return string Relative time, for example: 1 minute ago
*/
public function relativeTime($complete=false) {
public function relativeTime(bool $complete=false): string
{
$current = new DateTime;
$past = new DateTime($this->getValue('dateRaw'));
$elapsed = $current->diff($past);

View file

@ -34,17 +34,18 @@ class Pages extends dbJSON {
return $this->dbFields;
}
/* Get the database row associated to a page
@key string The key of the page to be fetch
@return array/boolean Return an array with the database for a page, FALSE otherwise
/**
* Returns the table row associated to a particular page. The page's content is not included.
* For example in SQL, SELECT * FROM pages WHERE key = $key
*
* @param string $key The key of the page to be fetch
* @return array Return an array with the database for a page, FALSE otherwise
*/
public function getPageDB($key)
public function getPageDB(string $key): array
{
if ($this->exists($key)) {
return $this->db[$key];
}
return false;
}
@ -57,12 +58,13 @@ class Pages extends dbJSON {
return isset ($this->db[$key]);
}
/* Create a new page === Bludit v4
@args array The array $args supports all the keys from the variable $dbFields. If you don't pass all the keys, the default values are used.
@return string/boolean Returns the page key if the page is successfully created, FALSE otherwise
/**
* Creates a new page.
*
* @param array $args The array $args supports all the keys from the variable $dbFields. If you don't pass all the keys, the default values are used.
* @return boolean|string Returns the page key if the page is successfully created, FALSE otherwise
*/
public function add($args)
public function add(array $args): bool|string
{
$row = array();
@ -175,12 +177,13 @@ class Pages extends dbJSON {
return $key;
}
/* Edit a page === Bludit v4
@args array The array $args supports all the keys from the variable $dbFields. If you don't pass all the keys, the default values are used.
@return string/boolean Returns the page key if the page is successfully edited, FALSE otherwise
/**
* Edit a page.
*
* @param array $args The array $args supports all the keys from the variable $dbFields. If you don't pass all the keys, the default values are used.
* @return boolean|string Returns the page key if the page is successfully edited, FALSE otherwise
*/
public function edit($args)
public function edit(array $args): bool|string
{
// This is the new row for the table and is going to replace the old row
$row = array();
@ -300,12 +303,13 @@ class Pages extends dbJSON {
return $newKey;
}
/* Delete a page === Bludit v4
@key string The key of the page to be deleted
@return boolean Returns TRUE if the page was deleted successfully, FALSE otherwise
/**
* Delete a page.
*
* @param string $key The key of the page to be deleted
* @return boolean Returns TRUE if the page was deleted successfully, FALSE otherwise
*/
public function delete($key)
public function delete(string $key): bool
{
// This is need it, because if the key is empty the Filesystem::deleteRecursive is going to delete PATH_PAGES
if (empty($key)) {
@ -485,6 +489,26 @@ class Pages extends dbJSON {
return $tmp;
}
/**
* Returns an array with all unlisted pages
*
* @param boolean $onlyKeys If TRUE returns only the pages' keys
* @return array
*/
public function getUnlistedDB(bool $onlyKeys=true): array
{
$tmp = $this->db;
foreach ($tmp as $key=>$fields) {
if($fields['type']!='unlisted') {
unset($tmp[$key]);
}
}
if ($onlyKeys) {
return array_keys($tmp);
}
return $tmp;
}
// Returns the next number of the bigger position
public function nextPositionNumber()
{
@ -530,12 +554,18 @@ class Pages extends dbJSON {
}
/**
* Get a list of pages' keys. === Bludit v4
* @param int $pageNumber Page number for the paginator
* @param int $numberOfItems Amount of items to return, if -1 returns all the items
* @return array|bool Returns an array with the pages' keys or FALSE if it out of range
* Get a list of pages' keys.
*
* @param integer $pageNumber Page number for the paginator
* @param integer $numberOfItems Amount of items to return, if -1 returns all the items
* @param boolean $published
* @param boolean $static
* @param boolean $sticky
* @param boolean $draft
* @param boolean $scheduled
* @return boolean|array Returns an array with the pages' keys or FALSE if it out of range
*/
public function getList(int $pageNumber, int $numberOfItems, bool $published=true, bool $static=false, bool $sticky=false, bool $draft=false, bool $scheduled=false)
public function getList(int $pageNumber, int $numberOfItems, bool $published=true, bool $static=false, bool $sticky=false, bool $draft=false, bool $scheduled=false): bool|array
{
$list = array();
foreach ($this->db as $key=>$fields) {

View file

@ -58,10 +58,12 @@
"thanks-for-supporting-bludit": "Thanks for supporting Bludit",
"upgrade-to-bludit-pro": "Upgrade to Bludit PRO",
"language": "Language",
"unlisted": "Unlisted",
"plugin": "Plugin",
"plugins": "Plugins",
"developers": "Developers",
"themes": "Themes",
"theme": "Theme",
"about": "About",
"url": "URL",
"welcome": "Welcome",