Static objects names

This commit is contained in:
Diego Najar 2015-05-30 22:06:55 -03:00
parent 22ead489e2
commit 0f6a8a43f8
66 changed files with 120 additions and 1422 deletions

View File

@ -18,14 +18,14 @@ function addUser($args)
global $dbUsers; global $dbUsers;
// Check if the username already exist in db. // Check if the username already exist in db.
if( $dbUsers->userExists($args['username']) || helperText::isEmpty($args['username']) ) if( $dbUsers->userExists($args['username']) || Text::isEmpty($args['username']) )
{ {
Alert::set('Username already exists or is empty'); Alert::set('Username already exists or is empty');
return false; return false;
} }
// Validate password. // Validate password.
if( ($args['password'] != $args['confirm-password'] ) || helperText::isEmpty($args['password']) ) if( ($args['password'] != $args['confirm-password'] ) || Text::isEmpty($args['password']) )
{ {
Alert::set('The password and confirmation password do not match'); Alert::set('The password and confirmation password do not match');
return false; return false;

View File

@ -10,7 +10,7 @@ function editUser($args)
if(isset($args['password'])) if(isset($args['password']))
{ {
if( ($args['password']===$args['confirm-password']) && !helperText::isEmpty($args['password']) ) { if( ($args['password']===$args['confirm-password']) && !Text::isEmpty($args['password']) ) {
return $dbUsers->set($args); return $dbUsers->set($args);
} }
else { else {

View File

@ -23,3 +23,6 @@ h1.title {
font-size: 4em; font-size: 4em;
} }
td {
text-align: center;
}

View File

@ -5,6 +5,7 @@ Diego Najar
Implementar Implementar
- Links a Google+, Facebook y Twitter - Links a Google+, Facebook y Twitter
- Plugins - Plugins
- Plugins SEO, description, opengaph, etc..
- Comentarios - Comentarios
- Notificaciones - Notificaciones
- Dashboard, parecido a Nibbleblog, me gusta. - Dashboard, parecido a Nibbleblog, me gusta.
@ -37,6 +38,7 @@ helperUrl::
find . -type f -name "*.php" -print0 | xargs -0 sed -i 's/Text/helperText/g' find . -type f -name "*.php" -print0 | xargs -0 sed -i 's/Text/helperText/g'
find . -type f -name "*.php" -print0 | xargs -0 sed -i 's/Url/helperUrl/g' find . -type f -name "*.php" -print0 | xargs -0 sed -i 's/Url/helperUrl/g'
find . -type f -name '*.php' -exec sed -i '' s/helperText/Text/ {} +
———— ————
Editar una pagina Editar una pagina

View File

@ -47,35 +47,35 @@ function checkSystem()
if(!file_exists(PATH_ROOT.'.htaccess')) if(!file_exists(PATH_ROOT.'.htaccess'))
{ {
$errorText = 'Missing file, upload the file .htaccess'; $errorText = 'Missing file, upload the file .htaccess (ERR_201)';
error_log($errorText, 0); error_log($errorText, 0);
array_push($stdOut, $errorText); array_push($stdOut, $errorText);
} }
if(!version_compare(phpversion(), '5.2', '>')) if(!version_compare(phpversion(), '5.2', '>'))
{ {
$errorText = 'Current PHP version '.phpversion().', but you need > 5.3'; $errorText = 'Current PHP version '.phpversion().', you need > 5.3. (ERR_202)';
error_log($errorText, 0); error_log($errorText, 0);
array_push($stdOut, $errorText); array_push($stdOut, $errorText);
} }
if(!in_array('dom', $phpModules)) if(!in_array('dom', $phpModules))
{ {
$errorText = 'PHP module DOM does not exist'; $errorText = 'PHP module DOM does not exist. (ERR_203)';
error_log($errorText, 0); error_log($errorText, 0);
array_push($stdOut, $errorText); array_push($stdOut, $errorText);
} }
if(!in_array('json', $phpModules)) if(!in_array('json', $phpModules))
{ {
$errorText = 'PHP module JSON does not exist'; $errorText = 'PHP module JSON does not exist. (ERR_204)';
error_log($errorText, 0); error_log($errorText, 0);
array_push($stdOut, $errorText); array_push($stdOut, $errorText);
} }
if(!is_writable(PATH_CONTENT)) if(!is_writable(PATH_CONTENT))
{ {
$errorText = 'Writing test on content directory failed'; $errorText = 'Writing test failure, check directory content permissions. (ERR_205)';
error_log($errorText, 0); error_log($errorText, 0);
array_push($stdOut, $errorText); array_push($stdOut, $errorText);
} }

View File

@ -76,7 +76,7 @@ class Content
$parts = array_map('trim', explode(':', $line, 2)); $parts = array_map('trim', explode(':', $line, 2));
// Lowercase variable // Lowercase variable
$parts[0] = helperText::lowercase($parts[0]); $parts[0] = Text::lowercase($parts[0]);
if($parts[0]==='content') if($parts[0]==='content')
{ {

View File

@ -55,7 +55,7 @@ class fileContent
$parts = array_map('trim', explode(':', $line, 2)); $parts = array_map('trim', explode(':', $line, 2));
// Lowercase variable // Lowercase variable
$parts[0] = helperText::lowercase($parts[0]); $parts[0] = Text::lowercase($parts[0]);
// If variables is content then break the foreach and process the content after. // If variables is content then break the foreach and process the content after.
if($parts[0]==='content') if($parts[0]==='content')

View File

@ -11,7 +11,7 @@ function build_plugins()
global $plugins; global $plugins;
// List plugins directories // List plugins directories
$list = helperFilesystem::listDirectories(PATH_PLUGINS); $list = Filesystem::listDirectories(PATH_PLUGINS);
// Get declared clasess before load plugins clasess // Get declared clasess before load plugins clasess
$currentDeclaredClasess = get_declared_classes(); $currentDeclaredClasess = get_declared_classes();

View File

@ -1,92 +0,0 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
class dbPages extends DB_SERIALIZE
{
function __construct()
{
parent::__construct(PATH_DATABASES.'pages.php');
}
// Return an array with the database for a page
public function getDb($slug)
{
return $this->vars['pages'][$slug];
}
// Return TRUE if the page exists, FALSE otherwise.
public function validPage($slug)
{
return isset($this->vars['pages'][$slug]);
}
// Return an array with all page's databases.
public function getAll()
{
return $this->vars['pages'];
}
public function regenerate()
{
$db = $this->vars['pages'];
$paths = array();
$fields = array(
'title'=>'',
'content'=>'',
'username'=>'',
'status'=>'draft',
'author'=>'',
'unixstamp'=>Date::unixstamp(),
'date'=>'',
'timeago'=>'',
'slug'=>'',
'permalink'=>'',
'parent'=>''
);
if(HANDMADE_PUBLISHED)
$fields['status']='published';
// Recovery pages from the first level of directories
$tmpPaths = glob(PATH_PAGES.'*', GLOB_ONLYDIR);
foreach($tmpPaths as $directory)
{
$key = basename($directory);
if(file_exists($directory.'/index.txt'))
// The key is the directory name
$paths[$key] = true;
// Recovery pages from subdirectories
$subPaths = glob($directory.'/*', GLOB_ONLYDIR);
foreach($subPaths as $subDirectory)
{
$subKey = basename($subDirectory);
if(file_exists($subDirectory.'/index.txt'))
// The key is composed by the directory/subdirectory
$paths[$key.'/'.$subKey] = true;
}
}
// Remove old posts from db
foreach( array_diff_key($db, $paths) as $slug=>$data )
unset($this->vars['pages'][$slug]);
// Insert new posts to db
foreach( array_diff_key($paths, $db) as $slug=>$data )
{
$this->vars['pages'][$slug] = $fields;
// Get the parent if exists
$explode = explode('/', $slug);
if(!empty($explode[1]))
$this->vars['pages'][$slug]['parent'] = $explode[0];
}
$this->save();
}
}
?>

View File

@ -1,121 +0,0 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
class dbPosts extends DB_SERIALIZE
{
function __construct()
{
parent::__construct(PATH_DATABASES.'posts.php');
}
// Return an array with the database for a post.
public function getDb($slug)
{
return $this->vars['posts'][$slug];
}
// Return TRUE if the post exists, FALSE otherwise.
public function validPost($slug)
{
return isset($this->vars['posts'][$slug]);
}
public function regenerate()
{
$db = $this->vars['posts'];
$paths = array();
$fields = array(
'title'=>'',
'content'=>'',
'username'=>'',
'status'=>'draft',
'author'=>'',
'unixstamp'=>Date::unixstamp(),
'date'=>'',
'timeago'=>'',
'slug'=>'',
'permalink'=>''
);
if(HANDMADE_PUBLISHED)
$fields['status']='published';
// Scan all directories from /content/post/
$tmpPaths = glob(PATH_POSTS.'*', GLOB_ONLYDIR);
foreach($tmpPaths as $directory)
{
// Each directory is a post
if(file_exists($directory.'/index.txt')) {
$key = basename($directory);
$paths[$key] = true;
}
}
// Remove old posts from db
foreach( array_diff_key($db, $paths) as $slug=>$data )
unset($this->vars['posts'][$slug]);
// Insert new posts to db
foreach( array_diff_key($paths, $db) as $slug=>$data )
$this->vars['posts'][$slug] = $fields;
$this->save();
}
public function getPage($pageNumber, $postPerPage)
{
$init = (int) $postPerPage * $pageNumber;
$end = (int) min( ($init + $postPerPage - 1), count($this->vars['posts']) - 1 );
$outrange = $init<0 ? true : $init > $end;
// DEBUG: Ver una mejor manera de eliminar draft post antes de ordenarlos
$this->removeUnpublished();
$tmp = $this->sortByDate();
if(!$outrange)
return array_slice($tmp, $init, $end+1, true);
return array();
}
// DEBUG: Ver una mejor manera de eliminar draft post antes de ordenarlos
private function removeUnpublished()
{
$tmp = array();
foreach($this->vars['posts'] as $key=>$value)
{
if($value['status']==='published')
$tmp[$key]=$value;
}
$this->vars['posts'] = $tmp;
}
private function sortByDate($low_to_high=false)
{
// high to low
function high_to_low($a, $b) {
return $a['unixstamp']<$b['unixstamp'];
}
// low to high
function low_to_high($a, $b) {
return $a['unixstamp']>$b['unixstamp'];
}
$tmp = $this->vars['posts'];
if($low_to_high)
uasort($tmp, 'low_to_high');
else
uasort($tmp, 'high_to_low');
return $tmp;
}
}
?>

View File

@ -1,26 +0,0 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
class dbUsers extends DB_SERIALIZE
{
function __construct()
{
parent::__construct(PATH_DATABASES.'users.php');
}
// Return an array with the username databases
function get($username)
{
if($this->validUsername($username)) {
return $this->vars['users'][$username];
}
return false;
}
// Return TRUE if the post exists, FALSE otherwise.
public function validUsername($username)
{
return isset($this->vars['users'][$username]);
}
}

View File

@ -15,8 +15,8 @@ class dbLanguage extends dbJSON
// Return the translation, if the translation does'n exist then return the English translation. // Return the translation, if the translation does'n exist then return the English translation.
public function get($text) public function get($text)
{ {
$key = helperText::lowercase($text); $key = Text::lowercase($text);
$key = helperText::replace(' ', '-', $key); $key = Text::replace(' ', '-', $key);
if(isset($this->db[$key])) if(isset($this->db[$key]))
return $this->db[$key]; return $this->db[$key];

View File

@ -33,7 +33,7 @@ class dbPages extends dbJSON
// The user is always the one loggued. // The user is always the one loggued.
$args['username'] = Session::get('username'); $args['username'] = Session::get('username');
if( helperText::isEmpty($args['username']) ) { if( Text::isEmpty($args['username']) ) {
return false; return false;
} }
@ -61,7 +61,7 @@ class dbPages extends dbJSON
// Check where the field will be written, in file or database. // Check where the field will be written, in file or database.
if($options['inFile']) { if($options['inFile']) {
$dataForFile[$field] = $field.':'.$tmpValue; $dataForFile[$field] = Text::firstCharUp($field).': '.$tmpValue;
} }
else else
{ {
@ -74,7 +74,7 @@ class dbPages extends dbJSON
} }
// Make the directory. Recursive. // Make the directory. Recursive.
if( helperFilesystem::mkdir(PATH_PAGES.$key, true) === false ) { if( Filesystem::mkdir(PATH_PAGES.$key, true) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the directory '.PATH_PAGES.$key); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the directory '.PATH_PAGES.$key);
return false; return false;
} }
@ -105,7 +105,7 @@ class dbPages extends dbJSON
// The user is always the one loggued. // The user is always the one loggued.
$args['username'] = Session::get('username'); $args['username'] = Session::get('username');
if( helperText::isEmpty($args['username']) ) { if( Text::isEmpty($args['username']) ) {
return false; return false;
} }
@ -134,7 +134,7 @@ class dbPages extends dbJSON
// Check where the field will be written, if in the file or in the database. // Check where the field will be written, if in the file or in the database.
if($options['inFile']) { if($options['inFile']) {
$dataForFile[$field] = $field.':'.$tmpValue; $dataForFile[$field] = Text::firstCharUp($field).': '.$tmpValue;
} }
else else
{ {
@ -149,7 +149,7 @@ class dbPages extends dbJSON
// Make the directory. Recursive. // Make the directory. Recursive.
if($newKey!==$args['key']) if($newKey!==$args['key'])
{ {
if( helperFilesystem::mv(PATH_PAGES.$args['key'], PATH_PAGES.$newKey) === false ) { if( Filesystem::mv(PATH_PAGES.$args['key'], PATH_PAGES.$newKey) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to move the directory to '.PATH_PAGES.$newKey); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to move the directory to '.PATH_PAGES.$newKey);
return false; return false;
} }
@ -183,12 +183,12 @@ class dbPages extends dbJSON
} }
// Delete the index.txt file. // Delete the index.txt file.
if( helperFilesystem::rmfile(PATH_PAGES.$key.'/index.txt') === false ) { if( Filesystem::rmfile(PATH_PAGES.$key.'/index.txt') === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the file index.txt'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the file index.txt');
} }
// Delete the directory. // Delete the directory.
if( helperFilesystem::rmdir(PATH_PAGES.$key) === false ) { if( Filesystem::rmdir(PATH_PAGES.$key) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the directory '.PATH_PAGES.$key); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the directory '.PATH_PAGES.$key);
} }
@ -237,15 +237,15 @@ class dbPages extends dbJSON
// Generate a valid Key/Slug. // Generate a valid Key/Slug.
public function generateKey($text, $parent=NO_PARENT_CHAR, $returnSlug=false, $oldKey='') public function generateKey($text, $parent=NO_PARENT_CHAR, $returnSlug=false, $oldKey='')
{ {
if(helperText::isEmpty($text)) { if(Text::isEmpty($text)) {
$text = 'empty'; $text = 'empty';
} }
if( helperText::isEmpty($parent) || ($parent==NO_PARENT_CHAR) ) { if( Text::isEmpty($parent) || ($parent==NO_PARENT_CHAR) ) {
$newKey = helperText::cleanUrl($text); $newKey = Text::cleanUrl($text);
} }
else { else {
$newKey = helperText::cleanUrl($parent).'/'.helperText::cleanUrl($text); $newKey = Text::cleanUrl($parent).'/'.Text::cleanUrl($text);
} }
if($newKey!==$oldKey) if($newKey!==$oldKey)
@ -253,7 +253,7 @@ class dbPages extends dbJSON
// Verify if the key is already been used. // Verify if the key is already been used.
if( isset($this->db[$newKey]) ) if( isset($this->db[$newKey]) )
{ {
if( !helperText::endsWithNumeric($newKey) ) { if( !Text::endsWithNumeric($newKey) ) {
$newKey = $newKey.'-0'; $newKey = $newKey.'-0';
} }

View File

@ -28,11 +28,11 @@ class dbPosts extends dbJSON
// Generate a valid Key/Slug. // Generate a valid Key/Slug.
public function generateKey($text, $oldKey='') public function generateKey($text, $oldKey='')
{ {
if(helperText::isEmpty($text)) { if(Text::isEmpty($text)) {
$text = 'empty'; $text = 'empty';
} }
$newKey = helperText::cleanUrl($text); $newKey = Text::cleanUrl($text);
if($newKey===$oldKey) { if($newKey===$oldKey) {
return $newKey; return $newKey;
@ -41,7 +41,7 @@ class dbPosts extends dbJSON
// Verify if the key is already been used. // Verify if the key is already been used.
if( isset($this->db[$newKey]) ) if( isset($this->db[$newKey]) )
{ {
if( !helperText::endsWithNumeric($newKey) ) { if( !Text::endsWithNumeric($newKey) ) {
$newKey = $newKey.'-0'; $newKey = $newKey.'-0';
} }
@ -63,7 +63,7 @@ class dbPosts extends dbJSON
// The user is always the one loggued. // The user is always the one loggued.
$args['username'] = Session::get('username'); $args['username'] = Session::get('username');
if( helperText::isEmpty($args['username']) ) { if( Text::isEmpty($args['username']) ) {
return false; return false;
} }
@ -93,7 +93,7 @@ class dbPosts extends dbJSON
// Check where the field will be written, if in the file or in the database. // Check where the field will be written, if in the file or in the database.
if($options['inFile']) { if($options['inFile']) {
$dataForFile[$field] = $field.':'.$tmpValue; $dataForFile[$field] = Text::firstCharUp($field).': '.$tmpValue;
} }
else else
{ {
@ -106,7 +106,7 @@ class dbPosts extends dbJSON
} }
// Make the directory. // Make the directory.
if( helperFilesystem::mkdir(PATH_POSTS.$key) === false ) { if( Filesystem::mkdir(PATH_POSTS.$key) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the directory '.PATH_POSTS.$key); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the directory '.PATH_POSTS.$key);
return false; return false;
} }
@ -150,12 +150,12 @@ class dbPosts extends dbJSON
} }
// Delete the index.txt file. // Delete the index.txt file.
if( helperFilesystem::rmfile(PATH_POSTS.$key.'/index.txt') === false ) { if( Filesystem::rmfile(PATH_POSTS.$key.'/index.txt') === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the file index.txt'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the file index.txt');
} }
// Delete the directory. // Delete the directory.
if( helperFilesystem::rmdir(PATH_POSTS.$key) === false ) { if( Filesystem::rmdir(PATH_POSTS.$key) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the directory '.PATH_POSTS.$key); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the directory '.PATH_POSTS.$key);
} }

View File

@ -119,7 +119,7 @@ class dbUsers extends dbJSON
$dataForDb['registered'] = Date::unixTime(); $dataForDb['registered'] = Date::unixTime();
// Password // Password
$dataForDb['salt'] = helperText::randomText(SALT_LENGTH); $dataForDb['salt'] = Text::randomText(SALT_LENGTH);
$dataForDb['password'] = sha1($dataForDb['password'].$dataForDb['salt']); $dataForDb['password'] = sha1($dataForDb['password'].$dataForDb['salt']);
// Save the database // Save the database

View File

@ -1,30 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Category {
public static function id()
{
global $category;
return $category['id'];
}
public static function name()
{
global $category;
return $category['name'];
}
}
?>

View File

@ -1,6 +1,6 @@
<?php defined('BLUDIT') or die('Bludit CMS.'); <?php defined('BLUDIT') or die('Bludit CMS.');
class helperFilesystem { class Filesystem {
// NEW // NEW
public static function listDirectories($path, $regex='*') public static function listDirectories($path, $regex='*')

View File

@ -1,35 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Image {
/**
* Get either a Gravatar URL or complete image tag for a specified email address.
*
* @param string $email The email address
* @param string $s Size in pixels, defaults to 80px [ 1 - 2048 ]
* @param string $d Default imageset to use [ 404 | mm | identicon | monsterid | wavatar ]
* @param string $r Maximum rating (inclusive) [ g | pg | r | x ]
* @return String containing either just a URL
* @source http://gravatar.com/site/implement/images/php/
*/
public static function get_gravatar($email, $s = 80, $d = 'mm', $r = 'g')
{
$url = 'http://www.gravatar.com/avatar/';
$url .= md5( strtolower( trim( $email ) ) );
$url .= "?s=$s&d=$d&r=$r";
return $url;
}
}
?>

View File

@ -1,45 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Language {
private $lang = array();
public function get($key)
{
$key = strtoupper($key);
$key = str_replace(' ','_',$key);
if(isset($this->lang[$key]))
return $this->lang[$key];
return '';
}
public function set($array)
{
// Set an array with all keys from array uppercased
$this->lang = array_change_key_case($array, CASE_UPPER);
return true;
}
public function add($array)
{
$this->lang = array_merge($this->lang, $array);
return true;
}
}
?>

View File

@ -1,20 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Number {
public static function random_number($min, $max)
{
return( rand($min, $max) );
}
}
?>

View File

@ -1,57 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Page {
public static function title()
{
global $page;
return $page['title'];
}
public static function permalink($absolute=false)
{
global $page;
return helperUrl::page($page,$absolute);
}
public static function published($format=false)
{
global $page;
global $settings;
$format = $format===false?$settings['timestamp_format']:$format;
return Date::format($page['pub_date_unix'], $format);
}
public static function modified($format=false)
{
global $page;
global $settings;
$format = $format===false?$settings['timestamp_format']:$format;
return Date::format($page['mod_date_unix'], $format);
}
public static function content()
{
global $page;
return $page['content'];
}
}
?>

View File

@ -1,107 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Pager {
public static function href_newer()
{
global $pager;
return $pager['href_newer'];
}
public static function href_older()
{
global $pager;
return $pager['href_older'];
}
public static function num_posts()
{
global $pager;
return $pager['num_posts'];
}
public static function num_pages()
{
global $pager;
return $pager['num_pages'];
}
public static function current()
{
global $pager;
return $pager['current'];
}
public static function next()
{
global $pager;
return $pager['next'];
}
public static function prev()
{
global $pager;
return $pager['prev'];
}
public static function next_link($text=NULL)
{
global $pager;
global $Language;
if(!$pager['show_newer'])
return false;
$text = isset($text)?$text:$Language->get('NEWER_POSTS').' →';
$html = '<a class="next-page" href="'.$pager['href_newer'].'">'.$text.'</a>';
return $html;
}
public static function prev_link($text=NULL)
{
global $pager;
global $Language;
if(!$pager['show_older'])
return false;
$text = isset($text)?$text:'← '.$Language->get('OLDER_POSTS');
$html = '<a class="prev-page" href="'.$pager['href_older'].'">'.$text.'</a>';
return $html;
}
public static function home_link($text=NULL)
{
global $pager;
global $Language;
$text = isset($text)?$text:$Language->get('HOME');
$html = '<a class="home-page" href="'.HTML_PATH_ROOT.'">'.$text.'</a>';
return $html;
}
}
?>

View File

@ -1,23 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Plugin {
public static function title()
{
global $page;
return $page['title'];
}
}
?>

View File

@ -1,243 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Post {
public static function title()
{
global $post;
return $post['title'];
}
public static function description()
{
global $post;
return $post['description'];
}
public static function comments()
{
global $post;
global $_DB_COMMENTS;
$comments = $_DB_COMMENTS->get_list_by_post( array('id_post'=>$post['id']) );
return $comments;
}
public static function num_comments()
{
global $post;
return count($post['comments']);
}
public static function category($field=false)
{
global $post;
global $_DB_CATEGORIES;
$category = $_DB_CATEGORIES->get( array('id'=>$post['id_cat']) );
if($field=='id')
return $category['id'];
if($field=='slug')
return $category['slug'];
if($field=='permalink')
return helperUrl::category($category['slug']);
return $category['name'];
}
public static function read_more()
{
global $post;
return $post['read_more'];
}
public static function allow_comments()
{
global $post;
return $post['allow_comments'];
}
public static function permalink($absolute=false)
{
global $post;
return helperUrl::post($post,$absolute);
}
public static function tags($return2array=false)
{
global $post;
global $_DB_TAGS;
$tags = $_DB_TAGS->get_by_idpost( array('id_post'=>$post['id']) );
if($return2array)
return $tags;
$html = '<ul>';
foreach($tags as $tag)
$html .= '<li><a class="tag" href="'.helperUrl::tag($tag['name']).'">'.$tag['name_human'].'</a></li>';
$html .= '</ul>';
return $html;
}
public static function comment_count_link()
{
global $post;
global $theme;
global $Language;
global $Comment;
if(!$post['allow_comments'])
return false;
if( $Comment->disqus_enabled() )
{
$url = helperUrl::post($post, true);
return '<a href="'.$url.'#disqus_thread">'.$Language->get('COMMENTS').'</a>';
}
elseif( $Comment->facebook_enabled() )
{
$url = helperUrl::post($post, true);
return '<a href="'.$post['permalink'].'#comment_form">'.$Language->get('COMMENTS').' (<fb:comments-count href="'.$url.'"></fb:comments-count>)</a>';
}
else
{
return '<a href="'.$post['permalink'].'#comment_form">'.$Language->get('COMMENTS').' ('.count($post['comments']).')</a>';
}
}
// DEPRECATED
// Last version available 4.0.3
public static function tweet_link()
{
global $post;
$url = helperUrl::post($post, true);
return 'https://twitter.com/share?url='.urlencode($url);
}
public static function twitter($text=false)
{
global $post;
$text = $text===false?'':$text;
$url = helperUrl::post($post, true);
return 'http://twitter.com/home?status='.urlencode($text.' '.$url);
}
public static function facebook($text=false)
{
global $post;
$text = $text===false?'':$text;
$url = helperUrl::post($post, true);
return 'https://www.facebook.com/sharer/sharer.php?u='.urlencode($text.' '.$url);
}
public static function linkedin($title=false, $text=false)
{
global $post;
$title = $title===false?'':$title;
$text = $text===false?'':$text;
$url = helperUrl::post($post, true);
return 'http://www.linkedin.com/shareArticle?mini=true&url='.urlencode($url).'&title='.urlencode($title).'&summary='.urlencode($text);
}
public static function googleplus($text=false)
{
global $post;
$text = $text===false?'':$text;
$url = helperUrl::post($post, true);
return 'https://plus.google.com/share?url='.urlencode($text.' '.$url);
}
public static function mailto($text=false)
{
global $post;
$text = $text===false?'':$text;
$url = helperUrl::post($post, true);
return 'mailto:?subject='.rawurlencode(Blog::name().' - '.$text).'&amp;body='.urlencode($url);
}
public static function published($format=false)
{
global $post;
global $settings;
$format = $format===false?$settings['timestamp_format']:$format;
return Date::format($post['pub_date_unix'], $format);
}
public static function modified($format=false)
{
global $post;
global $settings;
$format = $format===false?$settings['timestamp_format']:$format;
return Date::format($post['mod_date_unix'], $format);
}
public static function content($full=false)
{
global $post;
global $theme;
if($post['type']=='quote')
{
$html = '<blockquote>'.$post['quote'].'</blockquote>';
}
elseif($post['type']=='video')
{
$video_width = !isset($theme['video_width'])?640:$theme['video_width'];
$video_height = !isset($theme['video_height'])?320:$theme['video_height'];
$video_info = Video::video_get_info($post['video'], $video_width, $video_height);
$html = '<div class="video-embed">';
$html .= $video_info['embed'];
$html .= '</div>';
}
else
{
if($full)
$html = $post['content'][0];
else
$html = $post['content'][1];
}
return $html;
}
}
?>

View File

@ -1,244 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Resize {
// *** Class variables
private $image;
private $width;
private $height;
private $imageResized;
public function setImage($fileName, $newWidth, $newHeight, $option="auto")
{
// *** Open up the file
$this->image = $this->openImage($fileName);
// *** Get width and height
$this->width = imagesx($this->image);
$this->height = imagesy($this->image);
$this->resizeImage($newWidth, $newHeight, $option);
}
public function saveImage($savePath, $imageQuality="100", $force_jpg=false)
{
$extension = strtolower(pathinfo($savePath, PATHINFO_EXTENSION));
// Remove the extension
$filename = substr($savePath, 0,strrpos($savePath,'.'));
$path_complete = $filename.'.'.$extension;
if($force_jpg)
{
imagejpeg($this->imageResized, $filename.'.jpg', $imageQuality);
}
else
{
switch($extension)
{
case 'jpg':
case 'jpeg':
if (imagetypes() & IMG_JPG) {
imagejpeg($this->imageResized, $path_complete, $imageQuality);
}
break;
case 'gif':
if (imagetypes() & IMG_GIF) {
imagegif($this->imageResized, $path_complete);
}
break;
case 'png':
// *** Scale quality from 0-100 to 0-9
$scaleQuality = round(($imageQuality/100) * 9);
// *** Invert quality setting as 0 is best, not 9
$invertScaleQuality = 9 - $scaleQuality;
if (imagetypes() & IMG_PNG) {
imagepng($this->imageResized, $path_complete, $invertScaleQuality);
}
break;
default:
// *** No extension - No save.
break;
}
}
imagedestroy($this->imageResized);
}
private function openImage($file)
{
// *** Get extension
$extension = strtolower(strrchr($file, '.'));
switch($extension)
{
case '.jpg':
case '.jpeg':
$img = imagecreatefromjpeg($file);
break;
case '.gif':
$img = imagecreatefromgif($file);
break;
case '.png':
$img = imagecreatefrompng($file);
break;
default:
$img = false;
break;
}
return $img;
}
private function resizeImage($newWidth, $newHeight, $option)
{
// *** Get optimal width and height - based on $option
$optionArray = $this->getDimensions($newWidth, $newHeight, $option);
$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];
// *** Resample - create image canvas of x, y size
$this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);
imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);
// *** if option is 'crop', then crop too
if ($option == 'crop') {
$this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);
}
}
private function getDimensions($newWidth, $newHeight, $option)
{
if( ($this->width < $newWidth) and ($this->height < $newHeight) )
{
return array('optimalWidth' => $this->width, 'optimalHeight' => $this->height);
}
switch ($option)
{
case 'exact':
$optimalWidth = $newWidth;
$optimalHeight= $newHeight;
break;
case 'portrait':
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
break;
case 'landscape':
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
break;
case 'auto':
$optionArray = $this->getSizeByAuto($newWidth, $newHeight);
$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];
break;
case 'crop':
$optionArray = $this->getOptimalCrop($newWidth, $newHeight);
$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];
break;
}
return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}
private function getSizeByFixedHeight($newHeight)
{
$ratio = $this->width / $this->height;
$newWidth = $newHeight * $ratio;
return $newWidth;
}
private function getSizeByFixedWidth($newWidth)
{
$ratio = $this->height / $this->width;
$newHeight = $newWidth * $ratio;
return $newHeight;
}
private function getSizeByAuto($newWidth, $newHeight)
{
if ($this->height < $this->width)
// *** Image to be resized is wider (landscape)
{
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
}
elseif ($this->height > $this->width)
// *** Image to be resized is taller (portrait)
{
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
}
else
// *** Image to be resizerd is a square
{
if ($newHeight < $newWidth) {
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
} else if ($newHeight > $newWidth) {
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
} else {
// *** Sqaure being resized to a square
$optimalWidth = $newWidth;
$optimalHeight= $newHeight;
}
}
return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}
private function getOptimalCrop($newWidth, $newHeight)
{
$heightRatio = $this->height / $newHeight;
$widthRatio = $this->width / $newWidth;
if ($heightRatio < $widthRatio) {
$optimalRatio = $heightRatio;
} else {
$optimalRatio = $widthRatio;
}
$optimalHeight = $this->height / $optimalRatio;
$optimalWidth = $this->width / $optimalRatio;
return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}
private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight)
{
// *** Find center - this will be used for the crop
$cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 );
$cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 );
$crop = $this->imageResized;
//imagedestroy($this->imageResized);
// *** Now crop from center to exact requested size
$this->imageResized = imagecreatetruecolor($newWidth , $newHeight);
imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight);
}
}
?>

View File

@ -1,19 +0,0 @@
<?php
class Site
{
private static $content;
public static function init()
{
self::$content = '';
}
public static function content()
{
return self::$content;
}
}
?>

View File

@ -1,42 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Social {
public static function twitter_share($args = array())
{
// HTML Code
$code = '<a href="https://twitter.com/share" class="twitter-share-button" data-url="'.$args['url'].'" data-text="'.$args['text'].'">Tweet</a>';
$code .= '<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>';
return $code;
}
public static function facebook_share($args = array())
{
// HTML Code
$code = '<fb:share-button type="button" href="'.$args['url'].'" />';
$code .= '<script type="text/javascript" src="http://static.ak.fbcdn.net/connect.php/js/FB.Share"></script>';
return $code;
}
public static function facebook_like($args = array())
{
// HTML Code
$code = '<iframe src="https://www.facebook.com/plugins/like.php?href='.$args['url'].'&amp;layout=button_count" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:21px;"></iframe>';
return $code;
}
}
?>

View File

@ -1,6 +1,6 @@
<?php defined('BLUDIT') or die('Bludit CMS.'); <?php defined('BLUDIT') or die('Bludit CMS.');
class helperText { class Text {
// New // New
@ -65,13 +65,31 @@ class helperText {
} }
// String to lowercase // String to lowercase
public static function lowercase($string) public static function lowercase($string, $encoding='UTF-8')
{ {
if(MB_STRING) if(MB_STRING) {
return mb_strtolower($string, 'UTF-8'); return mb_strtolower($string, $encoding);
}
return strtolower($string); return strtolower($string);
} }
// Make a string's first character uppercase
public static function firstCharUp($string, $encoding='UTF-8')
{
// Thanks http://stackoverflow.com/questions/2517947/ucfirst-function-for-multibyte-character-encodings
if(MB_STRING)
{
$strlen = mb_strlen($string, $encoding);
$firstChar = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, $strlen - 1, $encoding);
return mb_strtoupper($firstChar, $encoding).$then;
}
return ucfirst($string);
}
// Find position of first occurrence of substring in a string. // Find position of first occurrence of substring in a string.
public static function strpos($string, $substring) public static function strpos($string, $substring)
{ {

View File

@ -1,140 +0,0 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
class helperUrl
{
private static $uri;
private static $uri_strlen;
private static $whereAmI;
private static $slug;
private static $filters; // Filters for the URI
private static $notFound;
// Filters may be changed for different languages
// Ex (Spanish): Array('post'=>'/publicacion/', 'tag'=>'/etiqueta/', ....)
// Ex (English): Array('post'=>'/post/', 'tag'=>'/tag/', ....)
public static function init($filters)
{
// Decodes any %## encoding in the given string. Plus symbols ('+') are decoded to a space character.
self::$uri = urldecode($_SERVER['REQUEST_URI']);
// URI Lowercase
//self::$uri = helperText::lowercase(self::$uri);
self::$uri_strlen = helperText::length(self::$uri);
self::$whereAmI = 'home';
self::$notFound = false;
self::$slug = false;
self::$filters = $filters;
// Check if filtering by post
// Primero verifico que no haya ningun slug filtrado, asi no lo piso.
if(self::$slug===false)
self::is_post($filters['post']);
// Check if filtering by tag
// Primero verifico que no haya ningun slug filtrado, asi no lo piso.
if(self::$slug===false)
self::is_tag($filters['tag']);
// Check if filtering by page
// Primero verifico que no haya ningun slug filtrado, asi no lo piso.
if(self::$slug===false)
self::is_page($filters['page']);
}
public static function slug()
{
return self::$slug;
}
public static function uri()
{
return self::$uri;
}
// Return the filter used
public static function filters($type)
{
return self::$filters[$type];
}
// Return: home, tag, post
public static function whereAmI()
{
return self::$whereAmI;
}
public static function setWhereAmI($where)
{
self::$whereAmI = $where;
}
public static function notFound()
{
return self::$notFound;
}
public static function setNotFound($error = true)
{
self::$whereAmI = 'page';
self::$notFound = $error;
}
public static function is_tag($filter)
{
if(self::filter_slug($filter)===false)
return false;
self::$whereAmI = 'tag';
return true;
}
public static function is_post($filter)
{
if(self::filter_slug($filter)===false)
return false;
self::$whereAmI = 'post';
return true;
}
public static function is_page($filter)
{
if(self::filter_slug($filter)===false)
return false;
self::$whereAmI = 'page';
return true;
}
// Return the slug after the $filter
// ex: http://domain.com/cms/$filter/slug123 => slug123
private static function filter_slug($filter)
{
$position = helperText::strpos(self::$uri, $filter);
if($position===false)
return false;
$start = $position + helperText::length($filter);
$end = self::$uri_strlen;
self::$slug = helperText::cut(self::$uri, $start, $end);
if(empty(self::$slug))
return false;
return self::$slug;
}
}
?>

View File

@ -1,89 +0,0 @@
<?php
/*
* Nibbleblog -
* http://www.nibbleblog.com
* Author Diego Najar
* All Nibbleblog code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
class Video {
// Get video info on array
// If the video does not exist or is invalid, returns false
public static function video_get_info($url, $width = 640, $height = 360)
{
if( helperText::is_substring($url, 'youtube.com') )
{
return( self::video_get_youtube($url, $width, $height) );
}
elseif( helperText::is_substring($url, 'vimeo.com') )
{
return( self::video_get_vimeo($url, $width, $height) );
}
return false;
}
private static function video_get_youtube($url, $width = 640, $height = 360)
{
// Youtube ID
preg_match('/[\\?\\&]v=([^\\?\\&]+)/', $url, $matches);
$video_id = $matches[1];
// Check if a valid url
if(!Net::check_http_code('http://gdata.youtube.com/feeds/api/videos/'.$video_id,200))
{
return(false);
}
// GET INFO
$xml = simplexml_load_file('http://gdata.youtube.com/feeds/api/videos/'.$video_id);
$media = $xml->children('http://search.yahoo.com/mrss/');
$info = array();
$info['id'] = $video_id;
$info['title'] = (string)$media->group->title;
$info['description'] = (string)$media->group->description;
$info['thumb'][0] = (string)$media->group->thumbnail[0]->attributes()->url;
$info['thumb'][1] = (string)$media->group->thumbnail[1]->attributes()->url;
$info['thumb'][2] = (string)$media->group->thumbnail[2]->attributes()->url;
$info['thumb'][3] = (string)$media->group->thumbnail[3]->attributes()->url;
$info['embed'] = '<iframe class="youtube_embed" width="'.$width.'" height="'.$height.'" src="http://www.youtube.com/embed/'.$video_id.'?rel=0" frameborder="0" allowfullscreen></iframe>';
return($info);
}
private static function video_get_vimeo($url, $width = 640, $height = 360)
{
preg_match('/vimeo\.com\/([0-9]{1,10})/', $url, $matches);
$video_id = $matches[1];
// Check if a valid url
if(!Net::check_http_code('http://vimeo.com/api/v2/video/'.$video_id.'.php',200))
{
return(false);
}
$hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/'.$video_id.'.php'));
$info = array();
$info['id'] = $video_id;
$info['title'] = $hash[0]['title'];
$info['description'] = $hash[0]['description'];
$info['thumb'][0] = $hash[0]['thumbnail_medium'];
$info['thumb'][1] = $hash[0]['thumbnail_small'];
$info['embed'] = '<iframe class="vimeo_embed" width="'.$width.'" height="'.$height.'" src="http://player.vimeo.com/video/'.$video_id.'" frameborder="0" allowFullScreen></iframe>';
return($info);
}
}
?>

View File

@ -15,8 +15,8 @@ class Language extends DB_SERIALIZE
// Return the translation, if the translation does'n exist then return the English translation. // Return the translation, if the translation does'n exist then return the English translation.
public function get($text) public function get($text)
{ {
$key = helperText::lowercase($text); $key = Text::lowercase($text);
$key = helperText::replace(' ', '-', $key); $key = Text::replace(' ', '-', $key);
if(isset($this->vars[$key])) if(isset($this->vars[$key]))
return $this->vars[$key]; return $this->vars[$key];

View File

@ -22,7 +22,7 @@ class Url
$this->parameters = $_GET; $this->parameters = $_GET;
$this->uriStrlen = helperText::length($this->uri); $this->uriStrlen = Text::length($this->uri);
$this->whereAmI = 'home'; $this->whereAmI = 'home';
@ -147,15 +147,15 @@ class Url
} }
// Check if the filter is in the uri. // Check if the filter is in the uri.
$position = helperText::strpos($this->uri, $filter); $position = Text::strpos($this->uri, $filter);
if($position===false) { if($position===false) {
return false; return false;
} }
$start = $position + helperText::length($filter); $start = $position + Text::length($filter);
$end = $this->uriStrlen; $end = $this->uriStrlen;
$slug = helperText::cut($this->uri, $start, $end); $slug = Text::cut($this->uri, $start, $end);
$this->slug = trim($slug, '/'); $this->slug = trim($slug, '/');
return $slug; return $slug;

View File

@ -49,6 +49,15 @@ th, td {
padding: 0.5em 1em; padding: 0.5em 1em;
} }
pre, code {
white-space: pre-wrap !important;
}
code {
font-size: 13px !important;
padding: 5px !important;
}
#layout { #layout {
padding: 0; padding: 0;
} }
@ -78,13 +87,13 @@ th, td {
.sidebar h2 { .sidebar h2 {
font-weight: lighter; font-weight: lighter;
margin: -15px 0 20px; margin: -15px 0 5px;
padding: 0; padding: 0;
font-size: 2.2em; font-size: 2.2em;
} }
.sidebar div.links { .sidebar div.links {
margin: 20px 0; margin-bottom: 50px;
} }
.sidebar p.about { .sidebar p.about {

View File

@ -2,14 +2,13 @@
<h1><?php echo $Site->title() ?></h1> <h1><?php echo $Site->title() ?></h1>
<h2><?php echo $Site->slogan() ?></h2> <h2><?php echo $Site->slogan() ?></h2>
<p class="about"><?php echo $Site->description() ?></p>
<?php <?php
// Links // Links
echo '<div class="links">'; echo '<div class="links">';
echo '<a class="homelink" href="'.HTML_PATH_ROOT.'">Home</a>'; echo '<a class="homelink" href="'.HTML_PATH_ROOT.'">Home</a>';
echo '<span> | </span>'; echo '<span> - </span>';
echo '<a class="homelink" href="'.HTML_PATH_ROOT.'">Twitter</a>'; echo '<a class="homelink" href="'.HTML_PATH_ROOT.'">Twitter</a>';
echo '</div>'; echo '</div>';
@ -30,7 +29,7 @@ foreach($parents as $parent)
echo '<ul>'; echo '<ul>';
foreach($children as $child) foreach($children as $child)
{ {
echo '<li><a class="children" href="'.HTML_PATH_ROOT.$child->key().'">'.$child->title().'</a></li>'; echo '<li><a class="children" href="'.HTML_PATH_ROOT.$child->key().'">'.$child->title().'</a></li>';
} }
echo '</ul>'; echo '</ul>';
} }