New plugin, API
This commit is contained in:
parent
9827b18b43
commit
dbf7a14854
|
@ -142,6 +142,9 @@ include(PATH_KERNEL.'parsedown.class.php');
|
||||||
include(PATH_KERNEL.'parsedownextra.class.php');
|
include(PATH_KERNEL.'parsedownextra.class.php');
|
||||||
include(PATH_KERNEL.'security.class.php');
|
include(PATH_KERNEL.'security.class.php');
|
||||||
|
|
||||||
|
// Include functions
|
||||||
|
include(PATH_KERNEL.'functions.php');
|
||||||
|
|
||||||
// Include Helpers Classes
|
// Include Helpers Classes
|
||||||
include(PATH_HELPERS.'text.class.php');
|
include(PATH_HELPERS.'text.class.php');
|
||||||
include(PATH_HELPERS.'log.class.php');
|
include(PATH_HELPERS.'log.class.php');
|
||||||
|
|
|
@ -8,116 +8,6 @@
|
||||||
// Filter by page number, by tag, etc.
|
// Filter by page number, by tag, etc.
|
||||||
$posts = array();
|
$posts = array();
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
// Functions
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
function reIndexTagsPosts()
|
|
||||||
{
|
|
||||||
global $dbPosts;
|
|
||||||
global $dbTags;
|
|
||||||
|
|
||||||
// Remove unpublished.
|
|
||||||
$dbPosts->removeUnpublished();
|
|
||||||
|
|
||||||
// Regenerate the tags index for posts.
|
|
||||||
$dbTags->reindexPosts( $dbPosts->db );
|
|
||||||
|
|
||||||
// Restore the database, before remove the unpublished.
|
|
||||||
$dbPosts->restoreDB();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildPost($key)
|
|
||||||
{
|
|
||||||
global $dbPosts;
|
|
||||||
global $dbUsers;
|
|
||||||
global $Parsedown;
|
|
||||||
global $Site;
|
|
||||||
|
|
||||||
// Post object, content from FILE.
|
|
||||||
$Post = new Post($key);
|
|
||||||
if( !$Post->isValid() ) {
|
|
||||||
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from file with key: '.$key);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Post database, content from DATABASE JSON.
|
|
||||||
$db = $dbPosts->getPostDB($key);
|
|
||||||
if( !$db ) {
|
|
||||||
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from database with key: '.$key);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Foreach field from DATABASE.
|
|
||||||
foreach($db as $field=>$value) {
|
|
||||||
$Post->setField($field, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Content in raw format
|
|
||||||
$contentRaw = $Post->content();
|
|
||||||
$Post->setField('contentRaw', $contentRaw, true);
|
|
||||||
|
|
||||||
// Parse the content
|
|
||||||
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
|
|
||||||
$content = $Parsedown->text($content); // Parse Markdown.
|
|
||||||
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
|
|
||||||
$Post->setField('content', $content, true);
|
|
||||||
|
|
||||||
// Pagebrake
|
|
||||||
$explode = explode(PAGE_BREAK, $content);
|
|
||||||
$Post->setField('breakContent', $explode[0], true);
|
|
||||||
$Post->setField('readMore', !empty($explode[1]), true);
|
|
||||||
|
|
||||||
// Date format
|
|
||||||
$postDate = $Post->date();
|
|
||||||
$Post->setField('dateRaw', $postDate, true);
|
|
||||||
|
|
||||||
$postDateFormated = $Post->dateRaw( $Site->dateFormat() );
|
|
||||||
$Post->setField('date', $postDateFormated, true);
|
|
||||||
|
|
||||||
// User object
|
|
||||||
$username = $Post->username();
|
|
||||||
$Post->setField('user', $dbUsers->getUser($username));
|
|
||||||
|
|
||||||
return $Post;
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildPostsForPage($pageNumber=0, $amount=POSTS_PER_PAGE_ADMIN, $removeUnpublished=true, $tagKey=false)
|
|
||||||
{
|
|
||||||
global $dbPosts;
|
|
||||||
global $dbTags;
|
|
||||||
global $Url;
|
|
||||||
|
|
||||||
$posts = array();
|
|
||||||
|
|
||||||
if($tagKey) {
|
|
||||||
// Get the keys list from tags database, this database is optimized for this case.
|
|
||||||
$list = $dbTags->getList($pageNumber, $amount, $tagKey);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Get the keys list from posts database.
|
|
||||||
$list = $dbPosts->getList($pageNumber, $amount, $removeUnpublished);
|
|
||||||
}
|
|
||||||
|
|
||||||
// There are not posts for the page number then set the page notfound
|
|
||||||
if(empty($list) && $pageNumber>0) {
|
|
||||||
$Url->setNotFound(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Foreach post key, build the post.
|
|
||||||
foreach($list as $postKey=>$values)
|
|
||||||
{
|
|
||||||
$Post = buildPost($postKey);
|
|
||||||
if($Post!==false) {
|
|
||||||
array_push($posts, $Post);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $posts;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Main
|
// Main
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
|
@ -14,145 +14,6 @@ $pagesParents = array(NO_PARENT_CHAR=>array());
|
||||||
|
|
||||||
$pagesParentsPublished = array();
|
$pagesParentsPublished = array();
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
// Functions
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
function sortPages2($a, $b)
|
|
||||||
{
|
|
||||||
if ($a->position() == $b->position()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ($a->position() < $b->position()) ? -1 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function sortPages($a, $b)
|
|
||||||
{
|
|
||||||
if ($a['position'] == $b['position']) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ($a['position'] < $b['position']) ? -1 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildPage($key)
|
|
||||||
{
|
|
||||||
global $dbPages;
|
|
||||||
global $dbUsers;
|
|
||||||
global $Parsedown;
|
|
||||||
global $Site;
|
|
||||||
|
|
||||||
// Page object, content from FILE.
|
|
||||||
$Page = new Page($key);
|
|
||||||
if( !$Page->isValid() ) {
|
|
||||||
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the page from file with key: '.$key);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Page database, content from DATABASE JSON.
|
|
||||||
$db = $dbPages->getPageDB($key);
|
|
||||||
if( !$db ) {
|
|
||||||
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the page from database with key: '.$key);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Foreach field from DATABASE.
|
|
||||||
foreach($db as $field=>$value) {
|
|
||||||
$Page->setField($field, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Content in raw format
|
|
||||||
$contentRaw = $Page->content();
|
|
||||||
$Page->setField('contentRaw', $Page->content(), true);
|
|
||||||
|
|
||||||
// Parse markdown content.
|
|
||||||
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
|
|
||||||
$content = $Parsedown->text($content); // Parse Markdown.
|
|
||||||
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
|
|
||||||
$Page->setField('content', $content, true);
|
|
||||||
|
|
||||||
// Pagebrake
|
|
||||||
$explode = explode(PAGE_BREAK, $content);
|
|
||||||
$Page->setField('breakContent', $explode[0], true);
|
|
||||||
$Page->setField('readMore', !empty($explode[1]), true);
|
|
||||||
|
|
||||||
// Date format
|
|
||||||
$pageDate = $Page->date();
|
|
||||||
$Page->setField('dateRaw', $pageDate, true);
|
|
||||||
|
|
||||||
$pageDateFormated = $Page->dateRaw( $Site->dateFormat() );
|
|
||||||
$Page->setField('date', $pageDateFormated, true);
|
|
||||||
|
|
||||||
// User object
|
|
||||||
$username = $Page->username();
|
|
||||||
$Page->setField('user', $dbUsers->getUser($username));
|
|
||||||
|
|
||||||
return $Page;
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildAllPages()
|
|
||||||
{
|
|
||||||
global $pagesParents;
|
|
||||||
global $pagesParentsPublished;
|
|
||||||
global $pagesPublished;
|
|
||||||
global $dbPages;
|
|
||||||
|
|
||||||
// Get the page list
|
|
||||||
$list = $dbPages->getDB();
|
|
||||||
|
|
||||||
// Clean pages array.
|
|
||||||
$pages = array();
|
|
||||||
|
|
||||||
// Remove the error page
|
|
||||||
unset($list['error']);
|
|
||||||
|
|
||||||
// Sorte pages
|
|
||||||
uasort($list, 'sortPages');
|
|
||||||
|
|
||||||
foreach($list as $key=>$db)
|
|
||||||
{
|
|
||||||
$Page = buildPage($key);
|
|
||||||
|
|
||||||
if($Page!==false)
|
|
||||||
{
|
|
||||||
// Filter pages, with and without parent
|
|
||||||
|
|
||||||
// If the page doesn't have a father, it's a parent page :P
|
|
||||||
if( $Page->parentKey()===false ) {
|
|
||||||
// Add the parent key in the dbPages
|
|
||||||
$dbPages->addParentKey($Page->key());
|
|
||||||
|
|
||||||
// Add the page as a parent page in the array
|
|
||||||
$pagesParents[NO_PARENT_CHAR][$Page->key()] = $Page;
|
|
||||||
|
|
||||||
// If the page is published
|
|
||||||
if($Page->published()) {
|
|
||||||
$pagesParentsPublished[NO_PARENT_CHAR][$Page->key()] = $Page;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$pagesParents[$Page->parentKey()][$Page->key()] = $Page;
|
|
||||||
|
|
||||||
// If the page is published
|
|
||||||
if($Page->published()) {
|
|
||||||
$pagesParentsPublished[$Page->parentKey()][$Page->key()] = $Page;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// All pages in one array
|
|
||||||
$pages[$Page->key()] = $Page;
|
|
||||||
|
|
||||||
// If the page is published
|
|
||||||
if($Page->published()) {
|
|
||||||
$pagesPublished[$Page->parentKey()][$Page->key()] = $Page;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $pages;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Main
|
// Main
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
|
@ -0,0 +1,240 @@
|
||||||
|
<?php defined('BLUDIT') or die('Bludit CMS.');
|
||||||
|
|
||||||
|
// POST FUNCTIONS
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function reIndexTagsPosts()
|
||||||
|
{
|
||||||
|
global $dbPosts;
|
||||||
|
global $dbTags;
|
||||||
|
|
||||||
|
// Remove unpublished.
|
||||||
|
$dbPosts->removeUnpublished();
|
||||||
|
|
||||||
|
// Regenerate the tags index for posts.
|
||||||
|
$dbTags->reindexPosts( $dbPosts->db );
|
||||||
|
|
||||||
|
// Restore the database, before remove the unpublished.
|
||||||
|
$dbPosts->restoreDB();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildPost($key)
|
||||||
|
{
|
||||||
|
global $dbPosts;
|
||||||
|
global $dbUsers;
|
||||||
|
global $Parsedown;
|
||||||
|
global $Site;
|
||||||
|
|
||||||
|
// Post object, content from FILE.
|
||||||
|
$Post = new Post($key);
|
||||||
|
if( !$Post->isValid() ) {
|
||||||
|
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from file with key: '.$key);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Post database, content from DATABASE JSON.
|
||||||
|
$db = $dbPosts->getPostDB($key);
|
||||||
|
if( !$db ) {
|
||||||
|
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from database with key: '.$key);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Foreach field from DATABASE.
|
||||||
|
foreach($db as $field=>$value) {
|
||||||
|
$Post->setField($field, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Content in raw format
|
||||||
|
$contentRaw = $Post->content();
|
||||||
|
$Post->setField('contentRaw', $contentRaw, true);
|
||||||
|
|
||||||
|
// Parse the content
|
||||||
|
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
|
||||||
|
$content = $Parsedown->text($content); // Parse Markdown.
|
||||||
|
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
|
||||||
|
$Post->setField('content', $content, true);
|
||||||
|
|
||||||
|
// Pagebrake
|
||||||
|
$explode = explode(PAGE_BREAK, $content);
|
||||||
|
$Post->setField('breakContent', $explode[0], true);
|
||||||
|
$Post->setField('readMore', !empty($explode[1]), true);
|
||||||
|
|
||||||
|
// Date format
|
||||||
|
$postDate = $Post->date();
|
||||||
|
$Post->setField('dateRaw', $postDate, true);
|
||||||
|
|
||||||
|
$postDateFormated = $Post->dateRaw( $Site->dateFormat() );
|
||||||
|
$Post->setField('date', $postDateFormated, true);
|
||||||
|
|
||||||
|
// User object
|
||||||
|
$username = $Post->username();
|
||||||
|
$Post->setField('user', $dbUsers->getUser($username));
|
||||||
|
|
||||||
|
return $Post;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildPostsForPage($pageNumber=0, $amount=POSTS_PER_PAGE_ADMIN, $removeUnpublished=true, $tagKey=false)
|
||||||
|
{
|
||||||
|
global $dbPosts;
|
||||||
|
global $dbTags;
|
||||||
|
global $Url;
|
||||||
|
|
||||||
|
$posts = array();
|
||||||
|
|
||||||
|
if($tagKey) {
|
||||||
|
// Get the keys list from tags database, this database is optimized for this case.
|
||||||
|
$list = $dbTags->getList($pageNumber, $amount, $tagKey);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Get the keys list from posts database.
|
||||||
|
$list = $dbPosts->getList($pageNumber, $amount, $removeUnpublished);
|
||||||
|
}
|
||||||
|
|
||||||
|
// There are not posts for the page number then set the page notfound
|
||||||
|
if(empty($list) && $pageNumber>0) {
|
||||||
|
$Url->setNotFound(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Foreach post key, build the post.
|
||||||
|
foreach($list as $postKey=>$values)
|
||||||
|
{
|
||||||
|
$Post = buildPost($postKey);
|
||||||
|
if($Post!==false) {
|
||||||
|
array_push($posts, $Post);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $posts;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PAGE FUNCTIONS
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
function sortPages($a, $b)
|
||||||
|
{
|
||||||
|
if ($a['position'] == $b['position']) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($a['position'] < $b['position']) ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildPage($key)
|
||||||
|
{
|
||||||
|
global $dbPages;
|
||||||
|
global $dbUsers;
|
||||||
|
global $Parsedown;
|
||||||
|
global $Site;
|
||||||
|
|
||||||
|
// Page object, content from FILE.
|
||||||
|
$Page = new Page($key);
|
||||||
|
if( !$Page->isValid() ) {
|
||||||
|
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the page from file with key: '.$key);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Page database, content from DATABASE JSON.
|
||||||
|
$db = $dbPages->getPageDB($key);
|
||||||
|
if( !$db ) {
|
||||||
|
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the page from database with key: '.$key);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Foreach field from DATABASE.
|
||||||
|
foreach($db as $field=>$value) {
|
||||||
|
$Page->setField($field, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Content in raw format
|
||||||
|
$contentRaw = $Page->content();
|
||||||
|
$Page->setField('contentRaw', $Page->content(), true);
|
||||||
|
|
||||||
|
// Parse markdown content.
|
||||||
|
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
|
||||||
|
$content = $Parsedown->text($content); // Parse Markdown.
|
||||||
|
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
|
||||||
|
$Page->setField('content', $content, true);
|
||||||
|
|
||||||
|
// Pagebrake
|
||||||
|
$explode = explode(PAGE_BREAK, $content);
|
||||||
|
$Page->setField('breakContent', $explode[0], true);
|
||||||
|
$Page->setField('readMore', !empty($explode[1]), true);
|
||||||
|
|
||||||
|
// Date format
|
||||||
|
$pageDate = $Page->date();
|
||||||
|
$Page->setField('dateRaw', $pageDate, true);
|
||||||
|
|
||||||
|
$pageDateFormated = $Page->dateRaw( $Site->dateFormat() );
|
||||||
|
$Page->setField('date', $pageDateFormated, true);
|
||||||
|
|
||||||
|
// User object
|
||||||
|
$username = $Page->username();
|
||||||
|
$Page->setField('user', $dbUsers->getUser($username));
|
||||||
|
|
||||||
|
return $Page;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildAllPages()
|
||||||
|
{
|
||||||
|
global $pagesParents;
|
||||||
|
global $pagesParentsPublished;
|
||||||
|
global $pagesPublished;
|
||||||
|
global $dbPages;
|
||||||
|
|
||||||
|
// Get the page list
|
||||||
|
$list = $dbPages->getDB();
|
||||||
|
|
||||||
|
// Clean pages array.
|
||||||
|
$pages = array();
|
||||||
|
|
||||||
|
// Remove the error page
|
||||||
|
unset($list['error']);
|
||||||
|
|
||||||
|
// Sorte pages
|
||||||
|
uasort($list, 'sortPages');
|
||||||
|
|
||||||
|
foreach($list as $key=>$db)
|
||||||
|
{
|
||||||
|
$Page = buildPage($key);
|
||||||
|
|
||||||
|
if($Page!==false)
|
||||||
|
{
|
||||||
|
// Filter pages, with and without parent
|
||||||
|
|
||||||
|
// If the page doesn't have a father, it's a parent page :P
|
||||||
|
if( $Page->parentKey()===false ) {
|
||||||
|
// Add the parent key in the dbPages
|
||||||
|
$dbPages->addParentKey($Page->key());
|
||||||
|
|
||||||
|
// Add the page as a parent page in the array
|
||||||
|
$pagesParents[NO_PARENT_CHAR][$Page->key()] = $Page;
|
||||||
|
|
||||||
|
// If the page is published
|
||||||
|
if($Page->published()) {
|
||||||
|
$pagesParentsPublished[NO_PARENT_CHAR][$Page->key()] = $Page;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$pagesParents[$Page->parentKey()][$Page->key()] = $Page;
|
||||||
|
|
||||||
|
// If the page is published
|
||||||
|
if($Page->published()) {
|
||||||
|
$pagesParentsPublished[$Page->parentKey()][$Page->key()] = $Page;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// All pages in one array
|
||||||
|
$pages[$Page->key()] = $Page;
|
||||||
|
|
||||||
|
// If the page is published
|
||||||
|
if($Page->published()) {
|
||||||
|
$pagesPublished[$Page->parentKey()][$Page->key()] = $Page;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $pages;
|
||||||
|
}
|
|
@ -78,29 +78,26 @@ class Text {
|
||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function endsWith($string, $endsString)
|
public static function startsWith($string, $startString)
|
||||||
{
|
{
|
||||||
$endsPosition = (-1)*self::length($endsString);
|
$length = self::length($startString);
|
||||||
|
|
||||||
if(MB_STRING) {
|
return( mb_substr($string, 0, $length)===$startString );
|
||||||
return( mb_substr($string, $endsPosition)===$endsString );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return( substr($string, $endsPosition)===$endsString );
|
public static function endsWith($string, $endsString)
|
||||||
|
{
|
||||||
|
$length = (-1)*self::length($endsString);
|
||||||
|
|
||||||
|
return( mb_substr($string, $length)===$endsString );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static function endsWithNumeric($string)
|
public static function endsWithNumeric($string)
|
||||||
{
|
{
|
||||||
$endsPosition = (-1)*self::length($string);
|
|
||||||
|
|
||||||
if(MB_STRING) {
|
|
||||||
return( is_numeric(mb_substr($string, -1, 1)) );
|
return( is_numeric(mb_substr($string, -1, 1)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return( is_numeric(substr($string, -1, 1)) );
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function randomText($length)
|
public static function randomText($length)
|
||||||
{
|
{
|
||||||
$characteres = "1234567890abcdefghijklmnopqrstuvwxyz!@#%^&*";
|
$characteres = "1234567890abcdefghijklmnopqrstuvwxyz!@#%^&*";
|
||||||
|
@ -142,19 +139,13 @@ class Text {
|
||||||
// String to lowercase
|
// String to lowercase
|
||||||
public static function lowercase($string, $encoding='UTF-8')
|
public static function lowercase($string, $encoding='UTF-8')
|
||||||
{
|
{
|
||||||
if(MB_STRING) {
|
|
||||||
return mb_strtolower($string, $encoding);
|
return mb_strtolower($string, $encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
return strtolower($string);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make a string's first character uppercase
|
// Make a string's first character uppercase
|
||||||
public static function firstCharUp($string, $encoding='UTF-8')
|
public static function firstCharUp($string, $encoding='UTF-8')
|
||||||
{
|
{
|
||||||
// Thanks http://stackoverflow.com/questions/2517947/ucfirst-function-for-multibyte-character-encodings
|
// Thanks http://stackoverflow.com/questions/2517947/ucfirst-function-for-multibyte-character-encodings
|
||||||
if(MB_STRING)
|
|
||||||
{
|
|
||||||
$strlen = mb_strlen($string, $encoding);
|
$strlen = mb_strlen($string, $encoding);
|
||||||
$firstChar = mb_substr($string, 0, 1, $encoding);
|
$firstChar = mb_substr($string, 0, 1, $encoding);
|
||||||
$then = mb_substr($string, 1, $strlen - 1, $encoding);
|
$then = mb_substr($string, 1, $strlen - 1, $encoding);
|
||||||
|
@ -162,28 +153,16 @@ class Text {
|
||||||
return mb_strtoupper($firstChar, $encoding).$then;
|
return mb_strtoupper($firstChar, $encoding).$then;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ucfirst($string);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find position of first occurrence of substring in a string otherwise returns FALSE.
|
// Find position of first occurrence of substring in a string otherwise returns FALSE.
|
||||||
public static function stringPosition($string, $substring)
|
public static function stringPosition($string, $substring)
|
||||||
{
|
{
|
||||||
if(MB_STRING) {
|
|
||||||
return mb_strpos($string, $substring, 0, 'UTF-8');
|
return mb_strpos($string, $substring, 0, 'UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
return strpos($string, $substring);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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)
|
||||||
{
|
{
|
||||||
if(MB_STRING) {
|
|
||||||
$cut = mb_substr($string, $start, $length, 'UTF-8');
|
$cut = mb_substr($string, $start, $length, 'UTF-8');
|
||||||
}
|
|
||||||
else {
|
|
||||||
$cut = substr($string, $start, $length);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(empty($cut)) {
|
if(empty($cut)) {
|
||||||
return '';
|
return '';
|
||||||
|
@ -195,17 +174,16 @@ class Text {
|
||||||
// Return string length
|
// Return string length
|
||||||
public static function length($string)
|
public static function length($string)
|
||||||
{
|
{
|
||||||
if(MB_STRING)
|
|
||||||
return mb_strlen($string, 'UTF-8');
|
return mb_strlen($string, 'UTF-8');
|
||||||
return strlen($string);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function isEmpty($string)
|
public static function isEmpty($string)
|
||||||
{
|
{
|
||||||
$string = trim($string);
|
$string = trim($string);
|
||||||
|
|
||||||
if(empty($string))
|
if(empty($string)) {
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,4 +67,14 @@ class Page extends Content {
|
||||||
return $tmp;
|
return $tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function json()
|
||||||
|
{
|
||||||
|
$tmp['key'] = $this->key();
|
||||||
|
$tmp['title'] = $this->title();
|
||||||
|
$tmp['content'] = $this->content(); // Markdown parsed
|
||||||
|
$tmp['contentRaw'] = $this->contentRaw(); // No Markdown parsed
|
||||||
|
$tmp['description'] = $this->description();
|
||||||
|
|
||||||
|
return json_encode($tmp);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -28,4 +28,15 @@ class Post extends Content {
|
||||||
{
|
{
|
||||||
return ($this->getField('status')==='scheduled');
|
return ($this->getField('status')==='scheduled');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function json()
|
||||||
|
{
|
||||||
|
$tmp['key'] = $this->key();
|
||||||
|
$tmp['title'] = $this->title();
|
||||||
|
$tmp['content'] = $this->content(); // Markdown parsed
|
||||||
|
$tmp['contentRaw'] = $this->contentRaw(); // No Markdown parsed
|
||||||
|
$tmp['description'] = $this->description();
|
||||||
|
|
||||||
|
return json_encode($tmp);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"plugin-data":
|
||||||
|
{
|
||||||
|
"name": "RSS Feed",
|
||||||
|
"description": "هذه الإضافة تساعد على توليد تغذية RSS لموقعك."
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"plugin-data":
|
||||||
|
{
|
||||||
|
"name": "API",
|
||||||
|
"description": "API for Bludit"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"plugin-data":
|
||||||
|
{
|
||||||
|
"name": "RSS Feed",
|
||||||
|
"description": "Este plugin genera contenido RSS Feed para su sitio."
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"plugin-data":
|
||||||
|
{
|
||||||
|
"name": "RSS Feed",
|
||||||
|
"description": "サイトのRSSフィードを生成します。"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"plugin-data":
|
||||||
|
{
|
||||||
|
"name": "RSS Feed",
|
||||||
|
"description": "Этот плагин генерирует RSS трансляцию на сайте."
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"plugin-data":
|
||||||
|
{
|
||||||
|
"name": "RSS-канал",
|
||||||
|
"description": "Цей плагін генерувати RSS для вашого сайту."
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"author": "Bludit",
|
||||||
|
"email": "",
|
||||||
|
"website": "https://github.com/dignajar/bludit-plugins",
|
||||||
|
"version": "1.3",
|
||||||
|
"releaseDate": "2016-05-28",
|
||||||
|
"license": "MIT",
|
||||||
|
"compatible": "1.0,1.1,1.1.2,1.3",
|
||||||
|
"notes": ""
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class pluginAPI extends Plugin {
|
||||||
|
|
||||||
|
public function getPost($key)
|
||||||
|
{
|
||||||
|
// Generate the object Post
|
||||||
|
$Post = buildPost($key);
|
||||||
|
|
||||||
|
if(!$Post) {
|
||||||
|
return json_encode(array(
|
||||||
|
'status'=>'0',
|
||||||
|
'bludit'=>'Bludit API plugin',
|
||||||
|
'message'=>'The post doesn\'t exist'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $Post->json();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPage($key)
|
||||||
|
{
|
||||||
|
// Generate the object Page
|
||||||
|
$Page = buildPage($key);
|
||||||
|
|
||||||
|
if(!$Page) {
|
||||||
|
return json_encode(array(
|
||||||
|
'status'=>'0',
|
||||||
|
'bludit'=>'Bludit API plugin',
|
||||||
|
'message'=>'The post doesn\'t exist'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $Page->json();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function beforeRulesLoad()
|
||||||
|
{
|
||||||
|
global $Url;
|
||||||
|
|
||||||
|
// The URI start with /api/
|
||||||
|
$startString = HTML_PATH_ROOT.'api/';
|
||||||
|
$URI = $Url->uri();
|
||||||
|
$length = mb_strlen($startString, CHARSET);
|
||||||
|
if( mb_substr($URI, 0, $length)!=$startString ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the first part of the URI
|
||||||
|
$URI = ltrim($URI, HTML_PATH_ROOT.'api/');
|
||||||
|
|
||||||
|
// Parameters
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// show post {post slug}
|
||||||
|
// show page {page slug}
|
||||||
|
|
||||||
|
// Get parameters
|
||||||
|
$parameters = explode('/', $URI);
|
||||||
|
|
||||||
|
// Check parameters
|
||||||
|
for($i=0; $i<3; $i++) {
|
||||||
|
if(empty($parameters[$i])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default JSON
|
||||||
|
$json = json_encode(array(
|
||||||
|
'status'=>'0',
|
||||||
|
'bludit'=>'Bludit API plugin',
|
||||||
|
'message'=>'Check the parameters'
|
||||||
|
));
|
||||||
|
|
||||||
|
if($parameters[0] === 'show') {
|
||||||
|
|
||||||
|
$key = $parameters[2];
|
||||||
|
|
||||||
|
if($parameters[1] === 'post') {
|
||||||
|
$json = $this->getPost($key);
|
||||||
|
}
|
||||||
|
elseif($parameters[1] === 'page') {
|
||||||
|
$json = $this->getPage($key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print the JSON
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
exit($json);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue