commit
1a3e00a7be
@ -1,7 +0,0 @@
|
||||
# Bludit
|
||||
|
||||
If you are reading this, you must enable rewrite module.
|
||||
|
||||
Documentation:
|
||||
- http://docs.bludit.com/en/getting-started/requirements
|
||||
- http://docs.bludit.com/en/troubleshooting/browser-returns-not-found
|
80
install.php
80
install.php
@ -23,6 +23,7 @@ define('PATH_ROOT', __DIR__.DS);
|
||||
define('PATH_CONTENT', PATH_ROOT.'content'.DS);
|
||||
define('PATH_POSTS', PATH_CONTENT.'posts'.DS);
|
||||
define('PATH_UPLOADS', PATH_CONTENT.'uploads'.DS);
|
||||
define('PATH_UPLOADS_PROFILES', PATH_UPLOADS.'profiles'.DS);
|
||||
define('PATH_PAGES', PATH_CONTENT.'pages'.DS);
|
||||
define('PATH_DATABASES', PATH_CONTENT.'databases'.DS);
|
||||
define('PATH_PLUGINS_DATABASES',PATH_CONTENT.'databases'.DS.'plugins'.DS);
|
||||
@ -30,10 +31,20 @@ define('PATH_KERNEL', PATH_ROOT.'kernel'.DS);
|
||||
define('PATH_HELPERS', PATH_KERNEL.'helpers'.DS);
|
||||
define('PATH_LANGUAGES', PATH_ROOT.'languages'.DS);
|
||||
define('PATH_ABSTRACT', PATH_KERNEL.'abstract'.DS);
|
||||
define('DOMAIN', getenv('HTTP_HOST'));
|
||||
define('DOMAIN', $_SERVER['HTTP_HOST']);
|
||||
|
||||
// HTML PATHs
|
||||
$base = (dirname(getenv('SCRIPT_NAME'))==DS)?'/':dirname(getenv('SCRIPT_NAME')).'/';
|
||||
$base = empty( $_SERVER['SCRIPT_NAME'] ) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
|
||||
$base = dirname($base);
|
||||
|
||||
if($base!=DS) {
|
||||
$base = $base.'/';
|
||||
}
|
||||
else {
|
||||
// Workaround for Windows Web Servers
|
||||
$base = '/';
|
||||
}
|
||||
|
||||
define('HTML_PATH_ROOT', $base);
|
||||
|
||||
// Log separator
|
||||
@ -220,6 +231,12 @@ function install($adminPassword, $email, $timezoneOffset)
|
||||
error_log($errorText, 0);
|
||||
}
|
||||
|
||||
if(!mkdir(PATH_PAGES.'about', $dirpermissions, true))
|
||||
{
|
||||
$errorText = 'Error when trying to created the directory=>'.PATH_PAGES.'about';
|
||||
error_log($errorText, 0);
|
||||
}
|
||||
|
||||
if(!mkdir(PATH_PLUGINS_DATABASES.'pages', $dirpermissions, true))
|
||||
{
|
||||
$errorText = 'Error when trying to created the directory=>'.PATH_PLUGINS_DATABASES.'pages';
|
||||
@ -238,9 +255,15 @@ function install($adminPassword, $email, $timezoneOffset)
|
||||
error_log($errorText, 0);
|
||||
}
|
||||
|
||||
if(!mkdir(PATH_UPLOADS, $dirpermissions, true))
|
||||
if(!mkdir(PATH_PLUGINS_DATABASES.'about', $dirpermissions, true))
|
||||
{
|
||||
$errorText = 'Error when trying to created the directory=>'.PATH_UPLOADS;
|
||||
$errorText = 'Error when trying to created the directory=>'.PATH_PLUGINS_DATABASES.'about';
|
||||
error_log($errorText, 0);
|
||||
}
|
||||
|
||||
if(!mkdir(PATH_UPLOADS_PROFILES, $dirpermissions, true))
|
||||
{
|
||||
$errorText = 'Error when trying to created the directory=>'.PATH_UPLOADS_PROFILES;
|
||||
error_log($errorText, 0);
|
||||
}
|
||||
|
||||
@ -259,6 +282,14 @@ function install($adminPassword, $email, $timezoneOffset)
|
||||
'status'=>'published',
|
||||
'date'=>$currentDate,
|
||||
'position'=>0
|
||||
),
|
||||
'about'=>array(
|
||||
'description'=>$Language->get('About your site or yourself'),
|
||||
'username'=>'admin',
|
||||
'tags'=>array(),
|
||||
'status'=>'published',
|
||||
'date'=>$currentDate,
|
||||
'position'=>1
|
||||
)
|
||||
);
|
||||
|
||||
@ -267,7 +298,7 @@ function install($adminPassword, $email, $timezoneOffset)
|
||||
// File posts.php
|
||||
$data = array(
|
||||
$firstPostSlug=>array(
|
||||
'description'=>'Welcome to Bludit',
|
||||
'description'=>$Language->get('Welcome to Bludit'),
|
||||
'username'=>'admin',
|
||||
'status'=>'published',
|
||||
'tags'=>array('bludit'=>'Bludit','cms'=>'CMS','flat-files'=>'Flat files'),
|
||||
@ -279,10 +310,10 @@ function install($adminPassword, $email, $timezoneOffset)
|
||||
|
||||
// File site.php
|
||||
$data = array(
|
||||
'title'=>'Bludit',
|
||||
'slogan'=>'cms',
|
||||
'title'=>'BLUDIT',
|
||||
'slogan'=>'CMS',
|
||||
'description'=>'',
|
||||
'footer'=>Date::current('Y'),
|
||||
'footer'=>'Copyright © '.Date::current('Y'),
|
||||
'language'=>$Language->getCurrentLocale(),
|
||||
'locale'=>$Language->getCurrentLocale(),
|
||||
'timezone'=>$timezone,
|
||||
@ -306,7 +337,7 @@ function install($adminPassword, $email, $timezoneOffset)
|
||||
|
||||
$data = array(
|
||||
'admin'=>array(
|
||||
'firstName'=>'',
|
||||
'firstName'=>$Language->get('Administrator'),
|
||||
'lastName'=>'',
|
||||
'twitter'=>'',
|
||||
'role'=>'admin',
|
||||
@ -364,6 +395,19 @@ function install($adminPassword, $email, $timezoneOffset)
|
||||
LOCK_EX
|
||||
);
|
||||
|
||||
// File plugins/about/db.php
|
||||
file_put_contents(
|
||||
PATH_PLUGINS_DATABASES.'about'.DS.'db.php',
|
||||
$dataHead.json_encode(
|
||||
array(
|
||||
'position'=>0,
|
||||
'label'=>$Language->get('About'),
|
||||
'text'=>$Language->get('this-is-a-brief-description-of-yourself-our-your-site')
|
||||
),
|
||||
JSON_PRETTY_PRINT),
|
||||
LOCK_EX
|
||||
);
|
||||
|
||||
// File plugins/simplemde/db.php
|
||||
file_put_contents(
|
||||
PATH_PLUGINS_DATABASES.'simplemde'.DS.'db.php',
|
||||
@ -391,19 +435,27 @@ function install($adminPassword, $email, $timezoneOffset)
|
||||
|
||||
// File index.txt for error page
|
||||
$data = 'Title: '.$Language->get('Error').'
|
||||
Content: '.$Language->get('The page has not been found');
|
||||
Content: '.$Language->get('The page has not been found');
|
||||
|
||||
file_put_contents(PATH_PAGES.'error'.DS.'index.txt', $data, LOCK_EX);
|
||||
|
||||
// File index.txt for about page
|
||||
$data = 'Title: '.$Language->get('About').'
|
||||
Content:
|
||||
'.$Language->get('the-about-page-is-very-important').'
|
||||
|
||||
'.$Language->get('change-this-pages-content-on-the-admin-panel');
|
||||
|
||||
file_put_contents(PATH_PAGES.'about'.DS.'index.txt', $data, LOCK_EX);
|
||||
|
||||
// File index.txt for welcome post
|
||||
$data = 'Title: '.$Language->get('First post').'
|
||||
Content:
|
||||
|
||||
## '.$Language->get('Congratulations you have successfully installed your Bludit').'
|
||||
|
||||
### '.$Language->get('Whats next').'
|
||||
## '.$Language->get('Whats next').'
|
||||
- '.$Language->get('Manage your Bludit from the admin panel').'
|
||||
- '.$Language->get('Follow Bludit on').' [Twitter](https://twitter.com/bludit) / [Facebook](https://www.facebook.com/bluditcms) / [Google+](https://plus.google.com/+Bluditcms)
|
||||
- '.$Language->get('Chat with developers and users on Gitter').'
|
||||
- '.$Language->get('Visit the support forum').'
|
||||
- '.$Language->get('Read the documentation for more information').'
|
||||
- '.$Language->get('Share with your friends and enjoy');
|
||||
@ -469,7 +521,7 @@ if( $_SERVER['REQUEST_METHOD'] == 'POST' )
|
||||
<!DOCTYPE HTML>
|
||||
<html class="uk-height-1-1 uk-notouch">
|
||||
<head>
|
||||
<base href="admin/themes/default/">
|
||||
<base href="kernel/admin/themes/default/">
|
||||
<meta charset="<?php echo CHARSET ?>">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
|
@ -58,6 +58,15 @@ class dbJSON
|
||||
return count($this->db);
|
||||
}
|
||||
|
||||
public function getField($field)
|
||||
{
|
||||
if(isset($this->db[$field])) {
|
||||
return $this->db[$field];
|
||||
}
|
||||
|
||||
return $this->dbFields[$field]['value'];
|
||||
}
|
||||
|
||||
// Save the JSON file.
|
||||
public function save()
|
||||
{
|
||||
|
@ -26,6 +26,10 @@
|
||||
background: #1F5FC4;
|
||||
}
|
||||
|
||||
.uk-form legend {
|
||||
width: 70% !important;
|
||||
}
|
||||
|
||||
.uk-navbar-nav > li > a {
|
||||
border: none;
|
||||
height: 70px;
|
BIN
kernel/admin/themes/default/img/default.jpg
Normal file
BIN
kernel/admin/themes/default/img/default.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1005 B After Width: | Height: | Size: 1005 B |
@ -98,7 +98,15 @@ $(document).ready(function() {
|
||||
<div class="uk-navbar-flip uk-hidden-small">
|
||||
<ul class="uk-navbar-nav">
|
||||
<li class="uk-parent" data-uk-dropdown>
|
||||
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'edit-user/'.$Login->username() ?>"><i class="uk-icon-user"></i> <?php echo $Login->username() ?> ▾</a>
|
||||
<?php
|
||||
$profilePictureSrc = HTML_PATH_UPLOADS_PROFILES.$Login->username().'.jpg';
|
||||
if(!file_exists($profilePictureSrc)) {
|
||||
$profilePictureSrc = HTML_PATH_ADMIN_THEME_IMG.'default.jpg';
|
||||
}
|
||||
?>
|
||||
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'edit-user/'.$Login->username() ?>">
|
||||
<img class="uk-border-circle" width="28px" src="<?php echo $profilePictureSrc ?>" alt=""> <?php echo $Login->username() ?> ▾
|
||||
</a>
|
||||
<div class="uk-dropdown uk-dropdown-navbar">
|
||||
<ul class="uk-nav uk-nav-navbar">
|
||||
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'edit-user/'.$Login->username() ?>"><?php $L->p('Profile') ?></a></li>
|
@ -207,4 +207,64 @@ class HTML {
|
||||
echo $html;
|
||||
}
|
||||
|
||||
public static function profileUploader($username)
|
||||
{
|
||||
global $L;
|
||||
|
||||
$html = '
|
||||
<div id="jsprogressBar" class="uk-progress uk-hidden">
|
||||
<div class="uk-progress-bar" style="width: 0%;">0%</div>
|
||||
</div>
|
||||
|
||||
<div id="upload-drop" class="uk-placeholder uk-text-center">
|
||||
<i class="uk-icon-cloud-upload uk-margin-small-right"></i>'.$L->g('Upload Image').'<br><a class="uk-form-file">'.$L->g('Drag and drop or click here').'<input id="upload-select" type="file"></a>
|
||||
</div>
|
||||
';
|
||||
|
||||
$html .= '
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
$(function()
|
||||
{
|
||||
var progressbar = $("#jsprogressBar");
|
||||
var bar = progressbar.find(".uk-progress-bar");
|
||||
var settings =
|
||||
{
|
||||
type: "json",
|
||||
action: "'.HTML_PATH_ADMIN_ROOT.'ajax/uploader",
|
||||
allow : "*.(jpg|jpeg|gif|png)",
|
||||
params: {"type":"profilePicture", "username":"'.$username.'"},
|
||||
|
||||
loadstart: function() {
|
||||
bar.css("width", "0%").text("0%");
|
||||
progressbar.removeClass("uk-hidden");
|
||||
},
|
||||
|
||||
progress: function(percent) {
|
||||
percent = Math.ceil(percent);
|
||||
bar.css("width", percent+"%").text(percent+"%");
|
||||
},
|
||||
|
||||
allcomplete: function(response) {
|
||||
bar.css("width", "100%").text("100%");
|
||||
progressbar.addClass("uk-hidden");
|
||||
$("#jsprofilePicture").attr("src", "'.HTML_PATH_UPLOADS_PROFILES.$username.'.jpg?"+new Date().getTime());
|
||||
},
|
||||
|
||||
notallowed: function(file, settings) {
|
||||
alert("'.$L->g('Supported image file types').' "+settings.allow);
|
||||
}
|
||||
};
|
||||
|
||||
var select = UIkit.uploadSelect($("#upload-select"), settings);
|
||||
var drop = UIkit.uploadDrop($("#upload-drop"), settings);
|
||||
});
|
||||
|
||||
});
|
||||
</script>';
|
||||
|
||||
echo $html;
|
||||
}
|
||||
|
||||
}
|
@ -2,6 +2,9 @@
|
||||
|
||||
HTML::title(array('title'=>$L->g('Edit user'), 'icon'=>'user'));
|
||||
|
||||
echo '<div class="uk-grid">';
|
||||
echo '<div class="uk-width-7-10">';
|
||||
|
||||
HTML::formOpen(array('id'=>'edit-user-profile-form','class'=>'uk-form-horizontal'));
|
||||
|
||||
// Security token
|
||||
@ -92,6 +95,13 @@ if( ($Login->role()==='admin') && ($_user['username']!='admin') ) {
|
||||
|
||||
HTML::formClose();
|
||||
|
||||
echo '</div>';
|
||||
echo '<div class="uk-width-3-10" style="margin-top: 50px; text-align: center;">';
|
||||
echo '<img id="jsprofilePicture" class="uk-border-rounded" src="'.HTML_PATH_UPLOADS_PROFILES.$_user['username'].'.jpg" alt="'.$L->g('Profile picture').'">';
|
||||
HTML::profileUploader($_user['username']);
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
|
||||
?>
|
||||
|
||||
<script>
|
@ -1,6 +1,6 @@
|
||||
<div class="login-form">
|
||||
|
||||
<form method="post" action="<?php echo HTML_PATH_ADMIN_ROOT.'login-email' ?>" class="uk-form" autocomplete="off">
|
||||
<form method="post" action="" class="uk-form" autocomplete="off">
|
||||
|
||||
<input type="hidden" id="jstoken" name="tokenCSRF" value="<?php $Security->printToken() ?>">
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="login-form">
|
||||
|
||||
<form method="post" action="<?php echo HTML_PATH_ADMIN_ROOT.'login' ?>" class="uk-form" autocomplete="off">
|
||||
<form method="post" action="" class="uk-form" autocomplete="off">
|
||||
|
||||
<input type="hidden" id="jstoken" name="tokenCSRF" value="<?php $Security->printToken() ?>">
|
||||
|
@ -26,7 +26,7 @@ echo '
|
||||
|
||||
echo '<tr>';
|
||||
echo '<td><a href="'.HTML_PATH_ADMIN_ROOT.'edit-post/'.$Post->key().'">'.($status?'<span class="label-draft">'.$status.'</span>':'').($Post->title()?$Post->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a></td>';
|
||||
echo '<td class="uk-text-center">'.$Post->date().'</td>';
|
||||
echo '<td class="uk-text-center">'.$Post->dateRaw().'</td>';
|
||||
echo '<td><a target="_blank" href="'.$Post->permalink().'">'.$Url->filters('post').'/'.$Post->key().'</a></td>';
|
||||
echo '</tr>';
|
||||
}
|
@ -35,6 +35,13 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
|
||||
'tip'=>$L->g('you-can-use-this-field-to-define-a-set-off')
|
||||
));
|
||||
|
||||
HTML::formInputText(array(
|
||||
'name'=>'dateFormat',
|
||||
'label'=>$L->g('Date format'),
|
||||
'value'=>$Site->dateFormat(),
|
||||
'class'=>'uk-width-1-2 uk-form-medium'
|
||||
));
|
||||
|
||||
echo '<div class="uk-form-row">
|
||||
<div class="uk-form-controls">
|
||||
<button type="submit" class="uk-button uk-button-primary">'.$L->g('Save').'</button>
|
@ -1,4 +1,12 @@
|
||||
<?php header('Content-Type: application/json');
|
||||
<?php defined('BLUDIT') or die('Bludit CMS.');
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
// Type
|
||||
$type = 'other';
|
||||
if(!empty($_POST['type'])) {
|
||||
$type = Sanitize::html($_POST['type']);
|
||||
}
|
||||
|
||||
// Source
|
||||
$source = $_FILES['files']['tmp_name'][0];
|
||||
@ -24,12 +32,26 @@ if(empty($tmpName)) {
|
||||
$tmpName = $filename.'.'.$fileExtension;
|
||||
}
|
||||
|
||||
move_uploaded_file($source, PATH_UPLOADS.$tmpName);
|
||||
// --- PROFILE PICTURE ---
|
||||
if($type=='profilePicture') {
|
||||
$username = Sanitize::html($_POST['username']);
|
||||
$tmpName = $username.'.jpg';
|
||||
|
||||
move_uploaded_file($source, PATH_UPLOADS_PROFILES.$tmpName);
|
||||
|
||||
// Resize and crop profile image.
|
||||
$Image = new Image();
|
||||
$Image->setImage(PATH_UPLOADS_PROFILES.$tmpName, '200', '200', 'crop');
|
||||
$Image->saveImage(PATH_UPLOADS_PROFILES.$tmpName, 100, true);
|
||||
}
|
||||
// --- OTHERS ---
|
||||
else {
|
||||
move_uploaded_file($source, PATH_UPLOADS.$tmpName);
|
||||
}
|
||||
|
||||
exit(json_encode(array(
|
||||
'status'=>0,
|
||||
'filename'=>$tmpName,
|
||||
'date'=>date("F d Y H:i:s.", filemtime(PATH_UPLOADS.$tmpName))
|
||||
'filename'=>$tmpName
|
||||
)));
|
||||
|
||||
?>
|
@ -35,7 +35,8 @@ define('PATH_PAGES', PATH_CONTENT.'pages'.DS);
|
||||
define('PATH_DATABASES', PATH_CONTENT.'databases'.DS);
|
||||
define('PATH_PLUGINS_DATABASES', PATH_CONTENT.'databases'.DS.'plugins'.DS);
|
||||
define('PATH_UPLOADS', PATH_CONTENT.'uploads'.DS);
|
||||
define('PATH_ADMIN', PATH_ROOT.'admin'.DS);
|
||||
define('PATH_UPLOADS_PROFILES', PATH_UPLOADS.'profiles'.DS);
|
||||
define('PATH_ADMIN', PATH_KERNEL.'admin'.DS);
|
||||
define('PATH_ADMIN_THEMES', PATH_ADMIN.'themes'.DS);
|
||||
define('PATH_ADMIN_CONTROLLERS', PATH_ADMIN.'controllers'.DS);
|
||||
define('PATH_ADMIN_VIEWS', PATH_ADMIN.'views'.DS);
|
||||
@ -75,7 +76,7 @@ define('CLI_STATUS', 'published');
|
||||
// Database format date
|
||||
define('DB_DATE_FORMAT', 'Y-m-d H:i');
|
||||
|
||||
// Database format date
|
||||
// Date format for Dashboard schedule posts
|
||||
define('SCHEDULED_DATE_FORMAT', 'd M - h:i a');
|
||||
|
||||
// Token time to live for login via email. The offset is defined by http://php.net/manual/en/datetime.modify.php
|
||||
@ -113,6 +114,7 @@ include(PATH_KERNEL.'page.class.php');
|
||||
include(PATH_KERNEL.'url.class.php');
|
||||
include(PATH_KERNEL.'login.class.php');
|
||||
include(PATH_KERNEL.'parsedown.class.php');
|
||||
include(PATH_KERNEL.'parsedownextra.class.php');
|
||||
include(PATH_KERNEL.'security.class.php');
|
||||
|
||||
// Include Helpers Classes
|
||||
@ -128,6 +130,7 @@ include(PATH_HELPERS.'email.class.php');
|
||||
include(PATH_HELPERS.'filesystem.class.php');
|
||||
include(PATH_HELPERS.'alert.class.php');
|
||||
include(PATH_HELPERS.'paginator.class.php');
|
||||
include(PATH_HELPERS.'image.class.php');
|
||||
|
||||
// Session
|
||||
Session::start();
|
||||
@ -143,17 +146,20 @@ $dbUsers = new dbUsers();
|
||||
$dbTags = new dbTags();
|
||||
$Site = new dbSite();
|
||||
$Url = new Url();
|
||||
$Parsedown = new Parsedown();
|
||||
$Parsedown = new ParsedownExtra();
|
||||
$Security = new Security();
|
||||
|
||||
// HTML PATHs
|
||||
//$base = (dirname(getenv('SCRIPT_NAME'))==DS)?'/':dirname(getenv('SCRIPT_NAME')).'/';
|
||||
$base = empty( $_SERVER['SCRIPT_NAME'] ) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
|
||||
$base = dirname($base);
|
||||
|
||||
if($base!=DS) {
|
||||
$base = $base.'/';
|
||||
}
|
||||
else {
|
||||
// Workaround for Windows Web Servers
|
||||
$base = '/';
|
||||
}
|
||||
|
||||
define('HTML_PATH_ROOT', $base);
|
||||
|
||||
@ -164,16 +170,20 @@ define('HTML_PATH_THEME_CSS', HTML_PATH_THEME.'css/');
|
||||
define('HTML_PATH_THEME_JS', HTML_PATH_THEME.'js/');
|
||||
define('HTML_PATH_THEME_IMG', HTML_PATH_THEME.'img/');
|
||||
|
||||
define('HTML_PATH_ADMIN_THEME', HTML_PATH_ROOT.'admin/themes/'.$Site->adminTheme().'/');
|
||||
define('HTML_PATH_ADMIN_THEME_JS', HTML_PATH_ADMIN_THEME.'js/');
|
||||
define('HTML_PATH_ADMIN_ROOT', HTML_PATH_ROOT.'admin/');
|
||||
define('HTML_PATH_ADMIN_THEME', HTML_PATH_ROOT.'kernel/admin/themes/'.$Site->adminTheme().'/');
|
||||
define('HTML_PATH_ADMIN_THEME_JS', HTML_PATH_ADMIN_THEME.'js/');
|
||||
define('HTML_PATH_ADMIN_THEME_CSS', HTML_PATH_ADMIN_THEME.'css/');
|
||||
define('HTML_PATH_ADMIN_THEME_IMG', HTML_PATH_ADMIN_THEME.'img/');
|
||||
|
||||
define('HTML_PATH_UPLOADS', HTML_PATH_ROOT.'content/uploads/');
|
||||
define('HTML_PATH_UPLOADS_PROFILES', HTML_PATH_UPLOADS.'profiles/');
|
||||
define('HTML_PATH_PLUGINS', HTML_PATH_ROOT.'plugins/');
|
||||
|
||||
define('JQUERY', HTML_PATH_ADMIN_THEME_JS.'jquery.min.js');
|
||||
|
||||
// PHP paths with dependency
|
||||
define('PATH_THEME', PATH_ROOT.'themes/'.$Site->theme().'/');
|
||||
define('PATH_THEME', PATH_ROOT.'themes'.DS.$Site->theme().DS);
|
||||
define('PATH_THEME_PHP', PATH_THEME.'php'.DS);
|
||||
define('PATH_THEME_CSS', PATH_THEME.'css'.DS);
|
||||
define('PATH_THEME_JS', PATH_THEME.'js'.DS);
|
||||
|
@ -68,6 +68,13 @@ function buildPost($key)
|
||||
$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);
|
||||
|
||||
// Parse username for the post.
|
||||
if( $dbUsers->userExists( $Post->username() ) )
|
||||
{
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
class dbSite extends dbJSON
|
||||
{
|
||||
private $dbFields = array(
|
||||
public $dbFields = array(
|
||||
'title'=> array('inFile'=>false, 'value'=>'I am Guybrush Threepwood, mighty developer'),
|
||||
'slogan'=> array('inFile'=>false, 'value'=>''),
|
||||
'description'=> array('inFile'=>false, 'value'=>''),
|
||||
@ -19,7 +19,9 @@ class dbSite extends dbJSON
|
||||
'uriTag'=> array('inFile'=>false, 'value'=>'/tag/'),
|
||||
'url'=> array('inFile'=>false, 'value'=>''),
|
||||
'cliMode'=> array('inFile'=>false, 'value'=>true),
|
||||
'emailFrom'=> array('inFile'=>false, 'value'=>'')
|
||||
'emailFrom'=> array('inFile'=>false, 'value'=>''),
|
||||
'dateFormat'=> array('inFile'=>false, 'value'=>'F j, Y'),
|
||||
'timeFormat'=> array('inFile'=>false, 'value'=>'g:i a')
|
||||
);
|
||||
|
||||
function __construct()
|
||||
@ -61,9 +63,9 @@ class dbSite extends dbJSON
|
||||
public function uriFilters($filter='')
|
||||
{
|
||||
$filters['admin'] = '/admin/';
|
||||
$filters['post'] = $this->db['uriPost'];
|
||||
$filters['page'] = $this->db['uriPage'];
|
||||
$filters['tag'] = $this->db['uriTag'];
|
||||
$filters['post'] = $this->getField('uriPost');
|
||||
$filters['page'] = $this->getField('uriPage');
|
||||
$filters['tag'] = $this->getField('uriTag');
|
||||
|
||||
if(empty($filter)) {
|
||||
return $filters;
|
||||
@ -74,70 +76,83 @@ class dbSite extends dbJSON
|
||||
|
||||
public function urlPost()
|
||||
{
|
||||
return $this->url().ltrim($this->db['uriPost'], '/');
|
||||
$filter = $this->getField('uriPost');
|
||||
return $this->url().ltrim($filter, '/');
|
||||
}
|
||||
|
||||
public function urlPage()
|
||||
{
|
||||
return $this->url().ltrim($this->db['uriPage'], '/');
|
||||
$filter = $this->getField('uriPage');
|
||||
return $this->url().ltrim($filter, '/');
|
||||
}
|
||||
|
||||
public function urlTag()
|
||||
{
|
||||
return $this->url().ltrim($this->db['uriTag'], '/');
|
||||
$filter = $this->getField('uriTag');
|
||||
return $this->url().ltrim($filter, '/');
|
||||
}
|
||||
|
||||
// Returns the site title.
|
||||
public function title()
|
||||
{
|
||||
return $this->db['title'];
|
||||
return $this->getField('title');
|
||||
}
|
||||
|
||||
public function emailFrom()
|
||||
{
|
||||
return $this->db['emailFrom'];
|
||||
return $this->getField('emailFrom');
|
||||
}
|
||||
|
||||
public function dateFormat()
|
||||
{
|
||||
return $this->getField('dateFormat');
|
||||
}
|
||||
|
||||
public function timeFormat()
|
||||
{
|
||||
return $this->getField('timeFormat');
|
||||
}
|
||||
|
||||
// Returns the site slogan.
|
||||
public function slogan()
|
||||
{
|
||||
return $this->db['slogan'];
|
||||
return $this->getField('slogan');
|
||||
}
|
||||
|
||||
// Returns the site description.
|
||||
public function description()
|
||||
{
|
||||
return $this->db['description'];
|
||||
return $this->getField('description');
|
||||
}
|
||||
|
||||
// Returns the site theme name.
|
||||
public function theme()
|
||||
{
|
||||
return $this->db['theme'];
|
||||
return $this->getField('theme');
|
||||
}
|
||||
|
||||
// Returns the admin theme name.
|
||||
public function adminTheme()
|
||||
{
|
||||
return $this->db['adminTheme'];
|
||||
return $this->getField('adminTheme');
|
||||
}
|
||||
|
||||
// Returns the footer text.
|
||||
public function footer()
|
||||
{
|
||||
return $this->db['footer'];
|
||||
return $this->getField('footer');
|
||||
}
|
||||
|
||||
// Returns the url site.
|
||||
public function url()
|
||||
{
|
||||
return $this->db['url'];
|
||||
return $this->getField('url');
|
||||
}
|
||||
|
||||
// Returns TRUE if the cli mode is enabled, otherwise FALSE.
|
||||
public function cliMode()
|
||||
{
|
||||
return $this->db['cliMode'];
|
||||
return $this->getField('cliMode');
|
||||
}
|
||||
|
||||
// Returns the relative home link
|
||||
@ -149,25 +164,25 @@ class dbSite extends dbJSON
|
||||
// Returns the timezone.
|
||||
public function timezone()
|
||||
{
|
||||
return $this->db['timezone'];
|
||||
return $this->getField('timezone');
|
||||
}
|
||||
|
||||
// Returns posts per page.
|
||||
public function postsPerPage()
|
||||
{
|
||||
return $this->db['postsperpage'];
|
||||
return $this->getField('postsperpage');
|
||||
}
|
||||
|
||||
// Returns the current language.
|
||||
public function language()
|
||||
{
|
||||
return $this->db['language'];
|
||||
return $this->getField('language');
|
||||
}
|
||||
|
||||
// Returns the current locale.
|
||||
public function locale()
|
||||
{
|
||||
return $this->db['locale'];
|
||||
return $this->getField('locale');
|
||||
}
|
||||
|
||||
// Returns the current language in short format.
|
||||
@ -183,7 +198,7 @@ class dbSite extends dbJSON
|
||||
// Returns the current homepage.
|
||||
public function homepage()
|
||||
{
|
||||
return $this->db['homepage'];
|
||||
return $this->getField('homepage');
|
||||
}
|
||||
|
||||
// Set the locale.
|
||||
|
231
kernel/helpers/image.class.php
Normal file
231
kernel/helpers/image.class.php
Normal file
@ -0,0 +1,231 @@
|
||||
<?php defined('BLUDIT') or die('Bludit CMS.');
|
||||
|
||||
class Image {
|
||||
|
||||
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", $forceJPG=false)
|
||||
{
|
||||
$extension = strtolower(pathinfo($savePath, PATHINFO_EXTENSION));
|
||||
|
||||
// Remove the extension
|
||||
$filename = substr($savePath, 0,strrpos($savePath,'.'));
|
||||
|
||||
$path_complete = $filename.'.'.$extension;
|
||||
|
||||
if($forceJPG) {
|
||||
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);
|
||||
}
|
||||
}
|
526
kernel/parsedownextra.class.php
Normal file
526
kernel/parsedownextra.class.php
Normal file
@ -0,0 +1,526 @@
|
||||
<?php
|
||||
|
||||
#
|
||||
#
|
||||
# Parsedown Extra
|
||||
# https://github.com/erusev/parsedown-extra
|
||||
#
|
||||
# (c) Emanuil Rusev
|
||||
# http://erusev.com
|
||||
#
|
||||
# For the full license information, view the LICENSE file that was distributed
|
||||
# with this source code.
|
||||
#
|
||||
#
|
||||
|
||||
class ParsedownExtra extends Parsedown
|
||||
{
|
||||
# ~
|
||||
|
||||
const version = '0.7.0';
|
||||
|
||||
# ~
|
||||
|
||||
function __construct()
|
||||
{
|
||||
if (parent::version < '1.5.0')
|
||||
{
|
||||
throw new Exception('ParsedownExtra requires a later version of Parsedown');
|
||||
}
|
||||
|
||||
$this->BlockTypes[':'] []= 'DefinitionList';
|
||||
$this->BlockTypes['*'] []= 'Abbreviation';
|
||||
|
||||
# identify footnote definitions before reference definitions
|
||||
array_unshift($this->BlockTypes['['], 'Footnote');
|
||||
|
||||
# identify footnote markers before before links
|
||||
array_unshift($this->InlineTypes['['], 'FootnoteMarker');
|
||||
}
|
||||
|
||||
#
|
||||
# ~
|
||||
|
||||
function text($text)
|
||||
{
|
||||
$markup = parent::text($text);
|
||||
|
||||
# merge consecutive dl elements
|
||||
|
||||
$markup = preg_replace('/<\/dl>\s+<dl>\s+/', '', $markup);
|
||||
|
||||
# add footnotes
|
||||
|
||||
if (isset($this->DefinitionData['Footnote']))
|
||||
{
|
||||
$Element = $this->buildFootnoteElement();
|
||||
|
||||
$markup .= "\n" . $this->element($Element);
|
||||
}
|
||||
|
||||
return $markup;
|
||||
}
|
||||
|
||||
#
|
||||
# Blocks
|
||||
#
|
||||
|
||||
#
|
||||
# Abbreviation
|
||||
|
||||
protected function blockAbbreviation($Line)
|
||||
{
|
||||
if (preg_match('/^\*\[(.+?)\]:[ ]*(.+?)[ ]*$/', $Line['text'], $matches))
|
||||
{
|
||||
$this->DefinitionData['Abbreviation'][$matches[1]] = $matches[2];
|
||||
|
||||
$Block = array(
|
||||
'hidden' => true,
|
||||
);
|
||||
|
||||
return $Block;
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Footnote
|
||||
|
||||
protected function blockFootnote($Line)
|
||||
{
|
||||
if (preg_match('/^\[\^(.+?)\]:[ ]?(.*)$/', $Line['text'], $matches))
|
||||
{
|
||||
$Block = array(
|
||||
'label' => $matches[1],
|
||||
'text' => $matches[2],
|
||||
'hidden' => true,
|
||||
);
|
||||
|
||||
return $Block;
|
||||
}
|
||||
}
|
||||
|
||||
protected function blockFootnoteContinue($Line, $Block)
|
||||
{
|
||||
if ($Line['text'][0] === '[' and preg_match('/^\[\^(.+?)\]:/', $Line['text']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($Block['interrupted']))
|
||||
{
|
||||
if ($Line['indent'] >= 4)
|
||||
{
|
||||
$Block['text'] .= "\n\n" . $Line['text'];
|
||||
|
||||
return $Block;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$Block['text'] .= "\n" . $Line['text'];
|
||||
|
||||
return $Block;
|
||||
}
|
||||
}
|
||||
|
||||
protected function blockFootnoteComplete($Block)
|
||||
{
|
||||
$this->DefinitionData['Footnote'][$Block['label']] = array(
|
||||
'text' => $Block['text'],
|
||||
'count' => null,
|
||||
'number' => null,
|
||||
);
|
||||
|
||||
return $Block;
|
||||
}
|
||||
|
||||
#
|
||||
# Definition List
|
||||
|
||||
protected function blockDefinitionList($Line, $Block)
|
||||
{
|
||||
if ( ! isset($Block) or isset($Block['type']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$Element = array(
|
||||
'name' => 'dl',
|
||||
'handler' => 'elements',
|
||||
'text' => array(),
|
||||
);
|
||||
|
||||
$terms = explode("\n", $Block['element']['text']);
|
||||
|
||||
foreach ($terms as $term)
|
||||
{
|
||||
$Element['text'] []= array(
|
||||
'name' => 'dt',
|
||||
'handler' => 'line',
|
||||
'text' => $term,
|
||||
);
|
||||
}
|
||||
|
||||
$Block['element'] = $Element;
|
||||
|
||||
$Block = $this->addDdElement($Line, $Block);
|
||||
|
||||
return $Block;
|
||||
}
|
||||
|
||||
protected function blockDefinitionListContinue($Line, array $Block)
|
||||
{
|
||||
if ($Line['text'][0] === ':')
|
||||
{
|
||||
$Block = $this->addDdElement($Line, $Block);
|
||||
|
||||
return $Block;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isset($Block['interrupted']) and $Line['indent'] === 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($Block['interrupted']))
|
||||
{
|
||||
$Block['dd']['handler'] = 'text';
|
||||
$Block['dd']['text'] .= "\n\n";
|
||||
|
||||
unset($Block['interrupted']);
|
||||
}
|
||||
|
||||
$text = substr($Line['body'], min($Line['indent'], 4));
|
||||
|
||||
$Block['dd']['text'] .= "\n" . $text;
|
||||
|
||||
return $Block;
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Header
|
||||
|
||||
protected function blockHeader($Line)
|
||||
{
|
||||
$Block = parent::blockHeader($Line);
|
||||
|
||||
if (preg_match('/[ #]*{('.$this->regexAttribute.'+)}[ ]*$/', $Block['element']['text'], $matches, PREG_OFFSET_CAPTURE))
|
||||
{
|
||||
$attributeString = $matches[1][0];
|
||||
|
||||
$Block['element']['attributes'] = $this->parseAttributeData($attributeString);
|
||||
|
||||
$Block['element']['text'] = substr($Block['element']['text'], 0, $matches[0][1]);
|
||||
}
|
||||
|
||||
return $Block;
|
||||
}
|
||||
|
||||
#
|
||||
# Markup
|
||||
|
||||
protected function blockMarkupComplete($Block)
|
||||
{
|
||||
if ( ! isset($Block['void']))
|
||||
{
|
||||
$Block['markup'] = $this->processTag($Block['markup']);
|
||||
}
|
||||
|
||||
return $Block;
|
||||
}
|
||||
|
||||
#
|
||||
# Setext
|
||||
|
||||
protected function blockSetextHeader($Line, array $Block = null)
|
||||
{
|
||||
$Block = parent::blockSetextHeader($Line, $Block);
|
||||
|
||||
if (preg_match('/[ ]*{('.$this->regexAttribute.'+)}[ ]*$/', $Block['element']['text'], $matches, PREG_OFFSET_CAPTURE))
|
||||
{
|
||||
$attributeString = $matches[1][0];
|
||||
|
||||
$Block['element']['attributes'] = $this->parseAttributeData($attributeString);
|
||||
|
||||
$Block['element']['text'] = substr($Block['element']['text'], 0, $matches[0][1]);
|
||||
}
|
||||
|
||||
return $Block;
|
||||
}
|
||||
|
||||
#
|
||||
# Inline Elements
|
||||
#
|
||||
|
||||
#
|
||||
# Footnote Marker
|
||||
|
||||
protected function inlineFootnoteMarker($Excerpt)
|
||||
{
|
||||
if (preg_match('/^\[\^(.+?)\]/', $Excerpt['text'], $matches))
|
||||
{
|
||||
$name = $matches[1];
|
||||
|
||||
if ( ! isset($this->DefinitionData['Footnote'][$name]))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$this->DefinitionData['Footnote'][$name]['count'] ++;
|
||||
|
||||
if ( ! isset($this->DefinitionData['Footnote'][$name]['number']))
|
||||
{
|
||||
$this->DefinitionData['Footnote'][$name]['number'] = ++ $this->footnoteCount; # » &
|
||||
}
|
||||
|
||||
$Element = array(
|
||||
'name' => 'sup',
|
||||
'attributes' => array('id' => 'fnref'.$this->DefinitionData['Footnote'][$name]['count'].':'.$name),
|
||||
'handler' => 'element',
|
||||
'text' => array(
|
||||
'name' => 'a',
|
||||
'attributes' => array('href' => '#fn:'.$name, 'class' => 'footnote-ref'),
|
||||
'text' => $this->DefinitionData['Footnote'][$name]['number'],
|
||||
),
|
||||
);
|
||||
|
||||
return array(
|
||||
'extent' => strlen($matches[0]),
|
||||
'element' => $Element,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private $footnoteCount = 0;
|
||||
|
||||
#
|
||||
# Link
|
||||
|
||||
protected function inlineLink($Excerpt)
|
||||
{
|
||||
$Link = parent::inlineLink($Excerpt);
|
||||
|
||||
$remainder = substr($Excerpt['text'], $Link['extent']);
|
||||
|
||||
if (preg_match('/^[ ]*{('.$this->regexAttribute.'+)}/', $remainder, $matches))
|
||||
{
|
||||
$Link['element']['attributes'] += $this->parseAttributeData($matches[1]);
|
||||
|
||||
$Link['extent'] += strlen($matches[0]);
|
||||
}
|
||||
|
||||
return $Link;
|
||||
}
|
||||
|
||||
#
|
||||
# ~
|
||||
#
|
||||
|
||||
protected function unmarkedText($text)
|
||||
{
|
||||
$text = parent::unmarkedText($text);
|
||||
|
||||
if (isset($this->DefinitionData['Abbreviation']))
|
||||
{
|
||||
foreach ($this->DefinitionData['Abbreviation'] as $abbreviation => $meaning)
|
||||
{
|
||||
$pattern = '/\b'.preg_quote($abbreviation, '/').'\b/';
|
||||
|
||||
$text = preg_replace($pattern, '<abbr title="'.$meaning.'">'.$abbreviation.'</abbr>', $text);
|
||||
}
|
||||
}
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
#
|
||||
# Util Methods
|
||||
#
|
||||
|
||||
protected function addDdElement(array $Line, array $Block)
|
||||
{
|
||||
$text = substr($Line['text'], 1);
|
||||
$text = trim($text);
|
||||
|
||||
unset($Block['dd']);
|
||||
|
||||
$Block['dd'] = array(
|
||||
'name' => 'dd',
|
||||
'handler' => 'line',
|
||||
'text' => $text,
|
||||
);
|
||||
|
||||
if (isset($Block['interrupted']))
|
||||
{
|
||||
$Block['dd']['handler'] = 'text';
|
||||
|
||||
unset($Block['interrupted']);
|
||||
}
|
||||
|
||||
$Block['element']['text'] []= & $Block['dd'];
|
||||
|
||||
return $Block;
|
||||
}
|
||||
|
||||
protected function buildFootnoteElement()
|
||||
{
|
||||
$Element = array(
|
||||
'name' => 'div',
|
||||
'attributes' => array('class' => 'footnotes'),
|
||||
'handler' => 'elements',
|
||||
'text' => array(
|
||||
array(
|
||||
'name' => 'hr',
|
||||
),
|
||||
array(
|
||||
'name' => 'ol',
|
||||
'handler' => 'elements',
|
||||
'text' => array(),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
uasort($this->DefinitionData['Footnote'], 'self::sortFootnotes');
|
||||
|
||||
foreach ($this->DefinitionData['Footnote'] as $definitionId => $DefinitionData)
|
||||
{
|
||||
if ( ! isset($DefinitionData['number']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$text = $DefinitionData['text'];
|
||||
|
||||
$text = parent::text($text);
|
||||
|
||||
$numbers = range(1, $DefinitionData['count']);
|
||||
|
||||
$backLinksMarkup = '';
|
||||
|
||||
foreach ($numbers as $number)
|
||||
{
|
||||
$backLinksMarkup .= ' <a href="#fnref'.$number.':'.$definitionId.'" rev="footnote" class="footnote-backref">↩</a>';
|
||||
}
|
||||
|
||||
$backLinksMarkup = substr($backLinksMarkup, 1);
|
||||
|
||||
if (substr($text, - 4) === '</p>')
|
||||
{
|
||||
$backLinksMarkup = ' '.$backLinksMarkup;
|
||||
|
||||
$text = substr_replace($text, $backLinksMarkup.'</p>', - 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
$text .= "\n".'<p>'.$backLinksMarkup.'</p>';
|
||||
}
|
||||
|
||||
$Element['text'][1]['text'] []= array(
|
||||
'name' => 'li',
|
||||
'attributes' => array('id' => 'fn:'.$definitionId),
|
||||
'text' => "\n".$text."\n",
|
||||
);
|
||||
}
|
||||
|
||||
return $Element;
|
||||
}
|
||||
|
||||
# ~
|
||||
|
||||
protected function parseAttributeData($attributeString)
|
||||
{
|
||||
$Data = array();
|
||||
|
||||
$attributes = preg_split('/[ ]+/', $attributeString, - 1, PREG_SPLIT_NO_EMPTY);
|
||||
|
||||
foreach ($attributes as $attribute)
|
||||
{
|
||||
if ($attribute[0] === '#')
|
||||
{
|
||||
$Data['id'] = substr($attribute, 1);
|
||||
}
|
||||
else # "."
|
||||
{
|
||||
$classes []= substr($attribute, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($classes))
|
||||
{
|
||||
$Data['class'] = implode(' ', $classes);
|
||||
}
|
||||
|
||||
return $Data;
|
||||
}
|
||||
|
||||
# ~
|
||||
|
||||
protected function processTag($elementMarkup) # recursive
|
||||
{
|
||||
# http://stackoverflow.com/q/1148928/200145
|
||||
libxml_use_internal_errors(true);
|
||||
|
||||
$DOMDocument = new DOMDocument;
|
||||
|
||||
# http://stackoverflow.com/q/11309194/200145
|
||||
$elementMarkup = mb_convert_encoding($elementMarkup, 'HTML-ENTITIES', 'UTF-8');
|
||||
|
||||
# http://stackoverflow.com/q/4879946/200145
|
||||
$DOMDocument->loadHTML($elementMarkup);
|
||||
$DOMDocument->removeChild($DOMDocument->doctype);
|
||||
$DOMDocument->replaceChild($DOMDocument->firstChild->firstChild->firstChild, $DOMDocument->firstChild);
|
||||
|
||||
$elementText = '';
|
||||
|
||||
if ($DOMDocument->documentElement->getAttribute('markdown') === '1')
|
||||
{
|
||||
foreach ($DOMDocument->documentElement->childNodes as $Node)
|
||||
{
|
||||
$elementText .= $DOMDocument->saveHTML($Node);
|
||||
}
|
||||
|
||||
$DOMDocument->documentElement->removeAttribute('markdown');
|
||||
|
||||
$elementText = "\n".$this->text($elementText)."\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($DOMDocument->documentElement->childNodes as $Node)
|
||||
{
|
||||
$nodeMarkup = $DOMDocument->saveHTML($Node);
|
||||
|
||||
if ($Node instanceof DOMElement and ! in_array($Node->nodeName, $this->textLevelElements))
|
||||
{
|
||||
$elementText .= $this->processTag($nodeMarkup);
|
||||
}
|
||||
else
|
||||
{
|
||||
$elementText .= $nodeMarkup;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# because we don't want for markup to get encoded
|
||||
$DOMDocument->documentElement->nodeValue = 'placeholder\x1A';
|
||||
|
||||
$markup = $DOMDocument->saveHTML($DOMDocument->documentElement);
|
||||
$markup = str_replace('placeholder\x1A', $elementText, $markup);
|
||||
|
||||
return $markup;
|
||||
}
|
||||
|
||||
# ~
|
||||
|
||||
protected function sortFootnotes($A, $B) # callback
|
||||
{
|
||||
return $A['number'] - $B['number'];
|
||||
}
|
||||
|
||||
#
|
||||
# Fields
|
||||
#
|
||||
|
||||
protected $regexAttribute = '(?:[#.][-\w]+[ ]*)';
|
||||
}
|
@ -83,6 +83,11 @@ class Post extends fileContent
|
||||
return $this->getField('username');
|
||||
}
|
||||
|
||||
public function profilePicture()
|
||||
{
|
||||
return HTML_PATH_UPLOADS_PROFILES.$this->username().'.jpg';
|
||||
}
|
||||
|
||||
public function authorFirstName()
|
||||
{
|
||||
return $this->getField('authorFirstName');
|
||||
@ -101,7 +106,13 @@ class Post extends fileContent
|
||||
// Returns the post date according to locale settings and format settings.
|
||||
public function date($format=false)
|
||||
{
|
||||
$date = $this->getField('date');
|
||||
return $this->getField('date');
|
||||
}
|
||||
|
||||
// Returns the post date according to locale settings and format as database stored.
|
||||
public function dateRaw($format=false)
|
||||
{
|
||||
$date = $this->getField('dateRaw');
|
||||
|
||||
if($format) {
|
||||
return Date::format($date, DB_DATE_FORMAT, $format);
|
||||
|
@ -204,5 +204,14 @@
|
||||
"upload-image": "Upload image",
|
||||
"drag-and-drop-or-click-here": "Drag and drop or click here",
|
||||
"insert-image": "Insert image",
|
||||
"supported-image-file-types": "Supported image file types"
|
||||
"supported-image-file-types": "Supported image file types",
|
||||
"date-format": "Date format",
|
||||
"time-format": "Time format",
|
||||
"chat-with-developers-and-users-on-gitter":"Chat with developers and users on [Gitter](https://gitter.im/dignajar/bludit)",
|
||||
"this-is-a-brief-description-of-yourself-our-your-site":"This is a brief description of yourself or your site, to change this text go to the admin panel, settings, plugins, and configure the plugin about.",
|
||||
"profile-picture": "Profile picture",
|
||||
"the-about-page-is-very-important": "The about page is an important and powerful tool for potential clients and partners. For those who wonder who is behind the website, your About page is the first source of information.",
|
||||
"change-this-pages-content-on-the-admin-panel": "Change this page's content on the admin panel, manage, pages and click on the about page.",
|
||||
"about-your-site-or-yourself": "About your site or yourself",
|
||||
"welcome-to-bludit": "Welcome to Bludit"
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
{
|
||||
"native": "Français (France)",
|
||||
"english-name": "French",
|
||||
"last-update": "2015-11-08",
|
||||
"last-update": "2015-11-15",
|
||||
"author": "Frédéric K.",
|
||||
"email": "stradfred@gmail.com",
|
||||
"website": ""
|
||||
@ -169,6 +169,7 @@
|
||||
"cli-mode": "Mode Cli",
|
||||
"command-line-mode": "Mode ligne de commande",
|
||||
"enable-the-command-line-mode-if-you-add-edit": "Activer le mode ligne de commande si vous créez, modifiez ou supprimez des articles ou des pages du système de fichiers.",
|
||||
|
||||
"configure": "Configuration",
|
||||
"uninstall": "Désinstaller",
|
||||
"change-password": "Modifier le mot de passe",
|
||||
@ -202,6 +203,8 @@
|
||||
"images": "Images",
|
||||
"upload-image": "Envoyer une image",
|
||||
"drag-and-drop-or-click-here": "Glissez et déposez ou cliquez ici",
|
||||
"insert-image": "Insérer l’image sélectionnée"
|
||||
|
||||
"insert-image": "Insérer l’image sélectionnée",
|
||||
"supported-image-file-types": "Extensions des images prises en charge",
|
||||
"date-format": "Format de la Date",
|
||||
"time-format": "Format de l’heure"
|
||||
}
|
214
languages/he_IL.json
Normal file
214
languages/he_IL.json
Normal file
@ -0,0 +1,214 @@
|
||||
{
|
||||
"language-data":
|
||||
{
|
||||
"native": "עברית",
|
||||
"english-name": "Hebrew",
|
||||
"last-update": "2015-11-16",
|
||||
"author": "hxii",
|
||||
"email": "paul@paulglushak.com",
|
||||
"website": "http://paulglushak.com"
|
||||
},
|
||||
|
||||
"username": "שם משתמש",
|
||||
"password": "סיסמא",
|
||||
"confirm-password": "אימות סיסמא",
|
||||
"editor": "עורך",
|
||||
"dashboard": "לוח מחוונים",
|
||||
"role": "תפקיד",
|
||||
"post": "הודעה",
|
||||
"posts": "הודעות",
|
||||
"users": "משתמשים",
|
||||
"administrator": "מנהל",
|
||||
"add": "הוסף",
|
||||
"cancel": "ביטול",
|
||||
"content": "תוכן",
|
||||
"title": "כותרת",
|
||||
"no-parent": "אין הורה",
|
||||
"edit-page": "ערוך דף",
|
||||
"edit-post": "ערוך הודעה",
|
||||
"add-a-new-user": "הוספת משתמש חדש",
|
||||
"parent": "הורה",
|
||||
"friendly-url": "כתובת URL",
|
||||
"description": "תאור",
|
||||
"posted-by": "נכתב על ידי",
|
||||
"tags": "תגיות",
|
||||
"position": "מיקום",
|
||||
"save": "שמור",
|
||||
"draft": "טיוטה",
|
||||
"delete": "מחק",
|
||||
"registered": "רשום",
|
||||
"Notifications": "התראות",
|
||||
"profile": "פרופיל",
|
||||
"email": "דואל",
|
||||
"settings": "הגדרות",
|
||||
"general": "כללי",
|
||||
"advanced": "מתקדם",
|
||||
"regional": "אזורי",
|
||||
"about": "אודות",
|
||||
"login": "כניסה",
|
||||
"logout": "יציאה",
|
||||
"manage": "ניהול",
|
||||
"themes": "ערכות נושא",
|
||||
"prev-page": "דף קודם",
|
||||
"next-page": "דף הבא",
|
||||
"configure-plugin": "הגדרת תוסף",
|
||||
"confirm-delete-this-action-cannot-be-undone": "אתה בטוח שברצונך למחוק? לא ניתן לבטל פעולה זו.",
|
||||
"site-title": "כותרת האתר",
|
||||
"site-slogan": "סלוגן האתר",
|
||||
"site-description": "תאור האתר",
|
||||
"footer-text": "טקסט תחתון",
|
||||
"posts-per-page": "הודעות לדף",
|
||||
"site-url": "כתובת האתר",
|
||||
"writting-settings": "הגדרות כתיבה",
|
||||
"url-filters": "URL filters",
|
||||
"page": "דף",
|
||||
"pages": "דפים",
|
||||
"home": "בית",
|
||||
"welcome-back": "ברוכ\\ה השב\\ה",
|
||||
"language": "שפה",
|
||||
"website": "אתר",
|
||||
"timezone": "אזור זמן",
|
||||
"locale": "שפה",
|
||||
"new-post": "הודעה חדשה",
|
||||
"new-page": "דף חדש",
|
||||
"html-and-markdown-code-supported": "HTML ו-Markdown נתמך",
|
||||
"manage-posts": "ניהול הודעות",
|
||||
"published-date": "תאריך פרסום",
|
||||
"modified-date": "תאריך שינוי",
|
||||
"empty-title": "כותרת ריקה",
|
||||
"plugins": "תוספים",
|
||||
"install-plugin": "התקנת תוסף",
|
||||
"uninstall-plugin": "מחיקת תוסף",
|
||||
"new-password": "סיסמא חדשה",
|
||||
"edit-user": "עריכת משתמש",
|
||||
"publish-now": "פרסם עכשיו",
|
||||
"first-name": "שם פרטי",
|
||||
"last-name": "שם משפחה",
|
||||
"bludit-version": "גרסת Bludit",
|
||||
"powered-by": "מופעל על ידי",
|
||||
"recent-posts": "הודעות אחרונות",
|
||||
"manage-pages": "ניהול דפים",
|
||||
"advanced-options": "הגדרות מתקדמות",
|
||||
"user-deleted": "המשתמש נמחק",
|
||||
"page-added-successfully": "הדף הוסף בהצלחה",
|
||||
"post-added-successfully": "ההודעה הוספה בהצלחה",
|
||||
"the-post-has-been-deleted-successfully": "ההודעה נמחקה",
|
||||
"the-page-has-been-deleted-successfully": "הדף נמחק",
|
||||
"username-or-password-incorrect": "שם משתמש או סיסמא אינם נכונים",
|
||||
"database-regenerated": "מסד הנתונים חודש",
|
||||
"the-changes-have-been-saved": "ההגדרות נשמרו",
|
||||
"enable-more-features-at": "אפשר יותר תכונות ב",
|
||||
"username-already-exists": "שם משתמש כבר קיים",
|
||||
"username-field-is-empty": "שדה שם המשתמש ריק",
|
||||
"the-password-and-confirmation-password-do-not-match":"הסיסמאות אינן זהות",
|
||||
"user-has-been-added-successfully": "המשתמש הוסף בהצלחה",
|
||||
"you-do-not-have-sufficient-permissions": "אין לך הרשאות מתאימות לצפייה בדף זה. אנא צור קשר עם המנהל.",
|
||||
"settings-advanced-writting-settings": "הגדרות->מתקדם->הגדרות כתיבה",
|
||||
"new-posts-and-pages-synchronized": "הודעות ודפים חדשים סונכרנו.",
|
||||
"you-can-choose-the-users-privilege": "באפשרותך להגדיר את הרשאות המשתמש. רק העורך יכול לכתוב הודעות וליצור דפים.",
|
||||
"email-will-not-be-publicly-displayed": "כתובת הדואל לא תוצג. נדרשת עבור איפוס הסיסמא ועבור התראות.",
|
||||
"use-this-field-to-name-your-site": "השתמש בשדה זה בכדי לתת שם לאתר שלך. השם יופיע בראשו של כל דף.",
|
||||
"use-this-field-to-add-a-catchy-phrase": "השתמש בשדה זה בכדי לתת לאתרך סלוגן.",
|
||||
"you-can-add-a-site-description-to-provide": "השתמש בשדה זה בכדי לספר בקצרה על אתרך.",
|
||||
"you-can-add-a-small-text-on-the-bottom": "באפשרותך להוסיף טקסט קצר בתחתית העמוד.",
|
||||
"number-of-posts-to-show-per-page": "מספר ההודעות שיש להראות בכל עמוד",
|
||||
"the-url-of-your-site": "כתובת ה-URL של האתר",
|
||||
"add-or-edit-description-tags-or": "הוסף או שנה את התאור, תגיות ואת כתובת ה-URL.",
|
||||
"select-your-sites-language": "בחר את שפת האתר",
|
||||
"select-a-timezone-for-a-correct": "בחר את אזור הזמן בו אתה נמצא",
|
||||
"you-can-use-this-field-to-define-a-set-of": "באפשרותך להתמש בשדה זה בכדי להגדיר פרמטרים הקשורים לשפה, מדינה והגדרות נוספות.",
|
||||
"you-can-modify-the-url-which-identifies":"באפשרותך לשנות את כתובת ה-URL של הודעה או דף בכדי שיהיו קריאים. עד 150 תוים.",
|
||||
"this-field-can-help-describe-the-content": "בשדה זה ניתן לרשום תאור קצר של התוכן. עד 150 תוים.",
|
||||
|
||||
"delete-the-user-and-all-its-posts":"מחק את המשתמש ואת כל הודעותיו",
|
||||
"delete-the-user-and-associate-its-posts-to-admin-user": "מחק את המשתמש והעבר את כל הודעותיו למנהל",
|
||||
"read-more": "המשך לקרוא",
|
||||
"show-blog": "הראה בלוג",
|
||||
"default-home-page": "דף בית ברירת מחדל",
|
||||
"version": "גרסא",
|
||||
"there-are-no-drafts": "לא נמצא טיוטות.",
|
||||
"create-a-new-article-for-your-blog":"צור הודעה חדשה לבלוג שלך.",
|
||||
"create-a-new-page-for-your-website":"צור דף חדש לאתר שלך.",
|
||||
"invite-a-friend-to-collaborate-on-your-website":"הזמן חבר להשתתף באתרך.",
|
||||
"change-your-language-and-region-settings":"שינוי הגדרות שפה ומיקום.",
|
||||
"language-and-timezone":"שפה ואזור זמן",
|
||||
"author": "כותב",
|
||||
"start-here": "התחל כאן",
|
||||
"install-theme": "התקנת ערכת נושא",
|
||||
"first-post": "הודעה ראשונה",
|
||||
"congratulations-you-have-successfully-installed-your-bludit": "**Bludit** הותקן בהצלחה!",
|
||||
"whats-next": "מה הלאה?",
|
||||
"manage-your-bludit-from-the-admin-panel": "נהל את Bludit מ[דף הניהול](./admin/)",
|
||||
"follow-bludit-on": "עקוב אחר Bludit",
|
||||
"visit-the-support-forum": "בקר ב[פורום](http://forum.bludit.com) לתמיכה",
|
||||
"read-the-documentation-for-more-information": "קרא את ה[מסמכים](http://docs.bludit.com) למידע נוסף",
|
||||
"share-with-your-friends-and-enjoy": "שתף עם חבריך",
|
||||
"the-page-has-not-been-found": "הדף לא נמצא.",
|
||||
"error": "שגיאה",
|
||||
"bludit-installer": "התקנת Bludit",
|
||||
"welcome-to-the-bludit-installer": "ברוכים הבאים להתקנת Bludit",
|
||||
"complete-the-form-choose-a-password-for-the-username-admin": "מלא את הפרטים ובחר סיסמא למשתמש « admin »",
|
||||
"password-visible-field": "סיסמא, שדה גלוי",
|
||||
"install": "התקנה",
|
||||
"choose-your-language": "בחר שאת שפתך",
|
||||
"next": "הבא",
|
||||
"the-password-field-is-empty": "שדה הסיסמא ריק",
|
||||
"your-email-address-is-invalid":"כתובת הדואל אינה נכונה",
|
||||
"proceed-anyway": "המשך בכל זאת",
|
||||
"drafts":"טיוטות",
|
||||
"ip-address-has-been-blocked": "כתובת IP נחסמה",
|
||||
"try-again-in-a-few-minutes": "אנא נסה בעוד מספר דקות",
|
||||
"date": "תאריך",
|
||||
|
||||
"scheduled": "מתוכנן",
|
||||
"publish": "פרסם",
|
||||
"please-check-your-theme-configuration": "אנא בדוק את הגדרות ערכת הנושא.",
|
||||
"plugin-label": "תווית תוסף",
|
||||
"enabled": "מאופשר",
|
||||
"disabled": "מבוטל",
|
||||
"cli-mode": "מצב CLI",
|
||||
"command-line-mode": "Command Line Mode",
|
||||
"enable-the-command-line-mode-if-you-add-edit": "אפשר את מצב CLI אם ברצונך ליצור, לשנות ולמחוק הודעות ודפים דרך המערכת",
|
||||
|
||||
"configure": "הגדרה",
|
||||
"uninstall": "ביטול התקנה",
|
||||
"change-password": "שינוי סיסמא",
|
||||
"to-schedule-the-post-just-select-the-date-and-time": "בכדי לתכנן הודעה, הגדר את הזמן והתאריך.",
|
||||
"write-the-tags-separated-by-commas": "רשום תוויות מופרדות בפסיק",
|
||||
"status": "סטטוס",
|
||||
"published": "מפורסם",
|
||||
"scheduled-posts": "הודעות מתוכננות",
|
||||
"statistics": "סטטיסטיקה",
|
||||
"name": "שם",
|
||||
"email-account-settings":"הגדרות חשבון דואל",
|
||||
"sender-email": "דואל שולח",
|
||||
"emails-will-be-sent-from-this-address":"הודעות דואל ישלחו מכתובת זו",
|
||||
"bludit-login-access-code": "BLUDIT - קוד גישת כניסה",
|
||||
"check-your-inbox-for-your-login-access-code":"אנא בדוק בתיבת הדואל שלך לקוד גישה",
|
||||
"there-was-a-problem-sending-the-email":"הייתה בעיה בשליחת המייל",
|
||||
"back-to-login-form": "חזרה לדף כניסה",
|
||||
"send-me-a-login-access-code": "שלח לי קוד גישה",
|
||||
"get-login-access-code": "קבל קוד גישה",
|
||||
"email-notification-login-access-code": "<p>זוהי התראה מאתרך {{WEBSITE_NAME}}</p><p>לקבלת קוד גישה, אנא לחץ על הקישור:</p><p>{{LINK}}</p>",
|
||||
"there-are-no-scheduled-posts": "אין הודעות מתוכננות.",
|
||||
"show-password": "הראה סיסמא",
|
||||
"edit-or-remove-your=pages": "ערוך או מחק דפים",
|
||||
"edit-or-remove-your-blogs-posts": "ערוך או מחק הודעות.",
|
||||
"general-settings": "הגדרות כלליות",
|
||||
"advanced-settings": "הגדרות מתקדמות",
|
||||
"manage-users": "ניהול משתמשים",
|
||||
"view-and-edit-your-profile": "ראה וערוך פרופיל אישי",
|
||||
|
||||
"password-must-be-at-least-6-characters-long": "הסיסמא חייבת להיות בעלת 5 תויים לפחות",
|
||||
"images": "תמונות",
|
||||
"upload-image": "העלה תמונה",
|
||||
"drag-and-drop-or-click-here": "גרור תמונה או לחץ כאן",
|
||||
"insert-image": "הכנס תמונה",
|
||||
"supported-image-file-types": "סוגי קבצי תמונה נתמכים",
|
||||
"date-format": "פורמט תאריך",
|
||||
"time-format": "פורמט שעה",
|
||||
"chat-with-developers-and-users-on-gitter":"שוחח עם מפתחים ומשתמשים ב[Gitter](https://gitter.im/dignajar/bludit)",
|
||||
|
||||
"this-is-a-brief-description-of-yourself-our-your-blog":"זהו תאור קצר עליך או על אתרך. בכדי לשנות אותו נווט לדף הניהול->הגדרות->תוספים והגדר את תוסף about",
|
||||
"profile-picture": "תמונת פרופיל"
|
||||
}
|
@ -54,24 +54,32 @@ class pluginPages extends Plugin {
|
||||
$parents = $pagesParents[NO_PARENT_CHAR];
|
||||
foreach($parents as $parent)
|
||||
{
|
||||
// Print the parent
|
||||
$html .= '<li>';
|
||||
$html .= '<a class="parent '.( ($parent->key()==$Url->slug())?' active':'').'" href="'.$parent->permalink().'">'.$parent->title().'</a>';
|
||||
|
||||
// Check if the parent has children
|
||||
if(isset($pagesParents[$parent->key()]))
|
||||
// Check if the parent is published
|
||||
if( $parent->published() )
|
||||
{
|
||||
$children = $pagesParents[$parent->key()];
|
||||
// Print the parent
|
||||
$html .= '<li>';
|
||||
$html .= '<a class="parent '.( ($parent->key()==$Url->slug())?' active':'').'" href="'.$parent->permalink().'">'.$parent->title().'</a>';
|
||||
|
||||
// Print children
|
||||
$html .= '<ul>';
|
||||
foreach($children as $child)
|
||||
// Check if the parent has children
|
||||
if(isset($pagesParents[$parent->key()]))
|
||||
{
|
||||
$html .= '<li>';
|
||||
$html .= '<a class="children '.( ($child->key()==$Url->slug())?' active':'').'" href="'.$child->permalink().'">'.$child->title().'</a>';
|
||||
$html .= '</li>';
|
||||
$children = $pagesParents[$parent->key()];
|
||||
|
||||
// Print children
|
||||
$html .= '<ul class="children">';
|
||||
foreach($children as $child)
|
||||
{
|
||||
// Check if the child is published
|
||||
if( $child->published() )
|
||||
{
|
||||
$html .= '<li class="child">';
|
||||
$html .= '<a class="'.( ($child->key()==$Url->slug())?' active':'').'" href="'.$child->permalink().'">'.$child->title().'</a>';
|
||||
$html .= '</li>';
|
||||
}
|
||||
}
|
||||
$html .= '</ul>';
|
||||
}
|
||||
$html .= '</ul>';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,11 +2,6 @@
|
||||
"theme-data":
|
||||
{
|
||||
"name": "Pure",
|
||||
"description": "Einfaches und übersichtliches Theme unter Verwendung des Frameworks Pure.css. Website: http://purecss.io.",
|
||||
"author": "Bludit",
|
||||
"email": "",
|
||||
"website": "https://github.com/dignajar/bludit-themes",
|
||||
"version": "0.3",
|
||||
"releaseDate": "2015-10-02"
|
||||
"description": "Einfaches und übersichtliches Theme unter Verwendung des Frameworks Pure.css."
|
||||
}
|
||||
}
|
||||
}
|
@ -2,11 +2,11 @@
|
||||
"theme-data":
|
||||
{
|
||||
"name": "Pure",
|
||||
"description": "Simple and clean theme, based on the framework Pure.css. Website: http://purecss.io",
|
||||
"description": "Simple and clean theme, based on the framework Pure.css.",
|
||||
"author": "Bludit",
|
||||
"email": "",
|
||||
"website": "https://github.com/dignajar/bludit-themes",
|
||||
"version": "0.3",
|
||||
"releaseDate": "2015-10-02"
|
||||
"version": "0.6",
|
||||
"releaseDate": "2015-11-13"
|
||||
}
|
||||
}
|
@ -22,7 +22,7 @@
|
||||
<?php
|
||||
echo $Language->get('Posted By').' ';
|
||||
|
||||
if( Text::isNotEmpty($Post->authorFirstName()) && Text::isNotEmpty($Post->authorLastName()) ) {
|
||||
if( Text::isNotEmpty($Post->authorFirstName()) || Text::isNotEmpty($Post->authorLastName()) ) {
|
||||
echo $Post->authorFirstName().' '.$Post->authorLastName();
|
||||
}
|
||||
else {
|
||||
|
@ -20,7 +20,7 @@
|
||||
<?php
|
||||
echo $Language->get('Posted By').' ';
|
||||
|
||||
if( Text::isNotEmpty($Post->authorFirstName()) && Text::isNotEmpty($Post->authorLastName()) ) {
|
||||
if( Text::isNotEmpty($Post->authorFirstName()) || Text::isNotEmpty($Post->authorLastName()) ) {
|
||||
echo $Post->authorFirstName().' '.$Post->authorLastName();
|
||||
}
|
||||
else {
|
||||
|
Loading…
Reference in New Issue
Block a user