This commit is contained in:
Dipchikov 2015-11-25 09:38:47 +02:00
commit 1a994e265b
114 changed files with 1639 additions and 180 deletions

View File

@ -16,6 +16,7 @@ Social
- [Twitter](https://twitter.com/bludit)
- [Facebook](https://www.facebook.com/bluditcms)
- [Google+](https://plus.google.com/+Bluditcms)
- [Freenode IRC](https://webchat.freenode.net) channel #bludit
[![Join the chat at https://gitter.im/dignajar/bludit](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dignajar/bludit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
@ -30,6 +31,7 @@ You only need a web server with PHP support.
* Apache with [mod_rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html) module.
* Lighttpd with [mod_rewrite](http://redmine.lighttpd.net/projects/1/wiki/docs_modrewrite) module.
* Nginx with [ngx_http_rewrite_module](http://nginx.org/en/docs/http/ngx_http_rewrite_module.html) module.
* PHP Built-in web server
Installation guide
------------------

View File

@ -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

View File

@ -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">

View File

@ -46,7 +46,7 @@ class dbJSON
}
}
public function restoreDb()
public function restoreDB()
{
$this->db = $this->dbBackup;
return true;
@ -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()
{

View File

@ -3,6 +3,28 @@
// ============================================================================
// Functions
// ============================================================================
function updateBludit()
{
global $Site;
// Check if Bludit need to be update.
if($Site->currentBuild() < BLUDIT_BUILD)
{
$directories = array(PATH_POSTS, PATH_PAGES, PATH_PLUGINS_DATABASES, PATH_UPLOADS_PROFILES);
foreach($directories as $dir)
{
// Check if the directory is already created.
if(!file_exists($dir)) {
// Create the directory recursive.
mkdir($dir, DIR_PERMISSIONS, true);
}
}
// Set and save the database.
$Site->set(array('currentBuild'=>BLUDIT_BUILD));
}
}
// ============================================================================
// Main before POST
@ -16,6 +38,10 @@
// Main after POST
// ============================================================================
// Try update Bludit
updateBludit();
// Get draft posts and schedules
$_draftPosts = array();
$_scheduledPosts = array();
foreach($posts as $Post)
@ -28,6 +54,7 @@ foreach($posts as $Post)
}
}
// Get draft pages
$_draftPages = array();
foreach($pages as $Page)
{

View File

@ -26,6 +26,10 @@
background: #1F5FC4;
}
.uk-form legend {
width: 70% !important;
}
.uk-navbar-nav > li > a {
border: none;
height: 70px;
@ -62,12 +66,16 @@ a {
color: #2672ec;
}
a.bludit-logo {
li.bludit-logo {
color: #848484 !important;
}
a.bludit-logo:hover {
background: none !important;
height: 70px;
padding: 15px;
display: block;
font-size: 14px;
font-weight: 400;
height: 35px;
line-height: 40px;
text-shadow: 0 1px 0 #fff;
}
.uk-panel-box {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1005 B

After

Width:  |  Height:  |  Size: 1005 B

View File

@ -57,7 +57,7 @@ $(document).ready(function() {
<div class="uk-container uk-container-center">
<ul class="uk-navbar-nav uk-hidden-small">
<li><a target="_blank" class="bludit-logo" href="http://www.bludit.com">BLUDIT</a></li>
<li class="bludit-logo">BLUDIT</li>
<li <?php echo ($layout['view']=='dashboard')?'class="uk-active"':'' ?> ><a href="<?php echo HTML_PATH_ADMIN_ROOT.'dashboard' ?>"><i class="uk-icon-object-ungroup"></i> <?php $L->p('Dashboard') ?></a></li>
<li <?php echo ($layout['view']=='new-post')?'class="uk-active"':'' ?>><a href="<?php echo HTML_PATH_ADMIN_ROOT.'new-post' ?>"><i class="uk-icon-pencil"></i> <?php $L->p('New post') ?></a></li>
<li <?php echo ($layout['view']=='new-page')?'class="uk-active"':'' ?>><a href="<?php echo HTML_PATH_ADMIN_ROOT.'new-page' ?>"><i class="uk-icon-file-text-o"></i> <?php $L->p('New page') ?></a></li>
@ -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_ADMIN_THEME_IMG.'default.jpg';
if(file_exists(PATH_UPLOADS_PROFILES.$Login->username().'.jpg')) {
$profilePictureSrc = HTML_PATH_UPLOADS_PROFILES.$Login->username().'.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>

View File

@ -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;
}
}

View File

@ -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>

View File

@ -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() ?>">

View File

@ -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() ?>">

View File

@ -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>';
}

View File

@ -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>

View File

@ -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,30 @@ if(empty($tmpName)) {
$tmpName = $filename.'.'.$fileExtension;
}
move_uploaded_file($source, PATH_UPLOADS.$tmpName);
// --- PROFILE PICTURE ---
if($type=='profilePicture')
{
// Move to tmp file
move_uploaded_file($source, PATH_UPLOADS_PROFILES.'tmp'.'.'.$fileExtension);
// Resize and crop profile image.
$username = Sanitize::html($_POST['username']);
$tmpName = $username.'.jpg';
$Image = new Image();
$Image->setImage(PATH_UPLOADS_PROFILES.'tmp'.'.'.$fileExtension, '200', '200', 'crop');
$Image->saveImage(PATH_UPLOADS_PROFILES.$tmpName, 100, true);
// Remove tmp file
unlink(PATH_UPLOADS_PROFILES.'tmp'.'.'.$fileExtension);
}
// --- 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
)));
?>

View File

@ -4,6 +4,7 @@
define('BLUDIT_VERSION', 'githubVersion');
define('BLUDIT_CODENAME', '');
define('BLUDIT_RELEASE_DATE', '');
define('BLUDIT_BUILD', '20151119');
// Debug mode
define('DEBUG_MODE', TRUE);
@ -35,7 +36,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 +77,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
@ -84,6 +86,9 @@ define('TOKEN_EMAIL_TTL', '+15 minutes');
// Charset, default UTF-8.
define('CHARSET', 'UTF-8');
// Directory permissions
define('DIR_PERMISSIONS', '0755');
// Multibyte string extension loaded.
define('MB_STRING', extension_loaded('mbstring'));
@ -113,6 +118,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 +134,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 +150,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 +174,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);

View File

@ -14,7 +14,7 @@ $pagesParents = array(NO_PARENT_CHAR=>array());
// Functions
// ============================================================================
function orderChildren($a, $b)
function sortPages($a, $b)
{
if ($a->position() == $b->position()) {
return 0;
@ -23,10 +23,6 @@ function orderChildren($a, $b)
return ($a->position() < $b->position()) ? -1 : 1;
}
function orderParent($array, $values, $offset) {
return ( array_slice($array, 0, $offset, true) + $values + array_slice($array, $offset, NULL, true) );
}
function build_page($key)
{
global $dbPages;
@ -110,31 +106,27 @@ function build_all_pages()
}
}
// ======== Sort pages ========
// --- SORT PAGES ---
$tmpNoParents = $pagesParents[NO_PARENT_CHAR];
// Sort parents.
$parents = $pagesParents[NO_PARENT_CHAR];
uasort($parents, 'sortPages');
// Sort children.
unset($pagesParents[NO_PARENT_CHAR]);
// Sort children
$children = $pagesParents;
$tmpPageWithParent = array();
foreach($pagesParents as $parentKey=>$childrenPages)
foreach($children as $parentKey=>$childrenPages)
{
$tmpPageWithParent[$parentKey] = $childrenPages;
uasort($tmpPageWithParent[$parentKey], 'orderChildren');
}
// Sort parents
$tmp = array();
foreach($tmpNoParents as $parentKey=>$childrenPages)
{
// DEBUG: Workaround, Esto es un bug, cuando se usa el Cli mode
// DEBUG: Se genera un padre sin index.txt y adentro hay un hijo
if(isset($pages[$parentKey])) {
$tmp = orderParent($tmp, array($parentKey=>$childrenPages), $pages[$parentKey]->position());
// If the child doesn't have a valid parent, then doesn't included them.
if(isset($pages[$parentKey]))
{
$tmpPageWithParent[$parentKey] = $childrenPages;
uasort($tmpPageWithParent[$parentKey], 'sortPages');
}
}
$pagesParents = array(NO_PARENT_CHAR=>$tmp) + $tmpPageWithParent;
$pagesParents = array(NO_PARENT_CHAR=>$parents) + $tmpPageWithParent;
}
// ============================================================================

View File

@ -22,7 +22,7 @@ function reIndexTagsPosts()
$dbTags->reindexPosts( $dbPosts->db );
// Restore de db on dbPost
$dbPosts->restoreDb();
$dbPosts->restoreDB();
return true;
}
@ -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() ) )
{

View File

@ -63,29 +63,31 @@ function build_plugins()
{
$Plugin = new $pluginClass;
// Set Plugin data
// Default language and meta data for the plugin
$tmpMetaData = array();
$languageFilename = PATH_PLUGINS.$Plugin->directoryName().DS.'languages'.DS.'en_US.json';
$database = new dbJSON($languageFilename, false);
$tmpMetaData = $database->db['plugin-data'];
// Check if the plugin is translated.
$languageFilename = PATH_PLUGINS.$Plugin->directoryName().DS.'languages'.DS.$Site->locale().'.json';
if( Sanitize::pathFile($languageFilename) )
{
$database = new dbJSON($languageFilename, false);
}
else
{
$languageFilename = PATH_PLUGINS.$Plugin->directoryName().DS.'languages'.DS.'en_US.json';
$database = new dbJSON($languageFilename, false);
$tmpMetaData = array_merge($tmpMetaData, $database->db['plugin-data']);
}
$databaseArray = $database->db;
$Plugin->setData( $databaseArray['plugin-data'] );
// Set plugin meta data
$Plugin->setData($tmpMetaData);
// Add words to language dictionary.
unset($databaseArray['plugin-data']);
$Language->add($databaseArray);
unset($database->db['plugin-data']);
$Language->add($database->db);
// Push Plugin to array all plugins installed and not installed.
$plugins['all'][$pluginClass] = $Plugin;
// If the plugin installed
// If the plugin is installed, order by hooks.
if($Plugin->installed())
{
foreach($pluginsEvents as $event=>$value)

View File

@ -93,14 +93,17 @@ class dbLanguage extends dbJSON
foreach($files as $file)
{
$t = new dbJSON($file, false);
$native = $t->db['language-data']['native'];
$locale = basename($file, '.json');
$tmp[$locale] = $native;
// Check if the JSON is complete.
if(isset($t->db['language-data']['native']))
{
$native = $t->db['language-data']['native'];
$locale = basename($file, '.json');
$tmp[$locale] = $native;
}
}
return $tmp;
}
}

View File

@ -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,10 @@ 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'),
'currentBuild'=> array('inFile'=>false, 'value'=>0)
);
function __construct()
@ -61,9 +64,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 +77,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 +165,31 @@ class dbSite extends dbJSON
// Returns the timezone.
public function timezone()
{
return $this->db['timezone'];
return $this->getField('timezone');
}
// Returns the current build / version of Bludit.
public function currentBuild()
{
return $this->getField('currentBuild');
}
// 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 +205,7 @@ class dbSite extends dbJSON
// Returns the current homepage.
public function homepage()
{
return $this->db['homepage'];
return $this->getField('homepage');
}
// Set the locale.

View File

@ -8,7 +8,7 @@ class dbTags extends dbJSON
$postsIndex['tag2']['name'] = 'Tag 2';
$postsIndex['tag2']['posts'] = array('post1','post5');
*/
private $dbFields = array(
public $dbFields = array(
'postsIndex'=>array('inFile'=>false, 'value'=>array()),
'pagesIndex'=>array('inFile'=>false, 'value'=>array())
);

View File

@ -2,17 +2,17 @@
class dbUsers extends dbJSON
{
private $dbFields = array(
'firstName'=> array('inFile'=>false, 'value'=>''),
'lastName'=> array('inFile'=>false, 'value'=>''),
'username'=> array('inFile'=>false, 'value'=>''),
'role'=> array('inFile'=>false, 'value'=>'editor'),
'password'=> array('inFile'=>false, 'value'=>''),
'salt'=> array('inFile'=>false, 'value'=>'!Pink Floyd!Welcome to the machine!'),
'email'=> array('inFile'=>false, 'value'=>''),
'registered'=> array('inFile'=>false, 'value'=>'1985-03-15 10:00'),
'tokenEmail'=> array('inFile'=>false, 'value'=>''),
'tokenEmailTTL'=>array('inFile'=>false, 'value'=>'2009-03-15 14:00')
public $dbFields = array(
'firstName'=> array('inFile'=>false, 'value'=>''),
'lastName'=> array('inFile'=>false, 'value'=>''),
'username'=> array('inFile'=>false, 'value'=>''),
'role'=> array('inFile'=>false, 'value'=>'editor'),
'password'=> array('inFile'=>false, 'value'=>''),
'salt'=> array('inFile'=>false, 'value'=>'!Pink Floyd!Welcome to the machine!'),
'email'=> array('inFile'=>false, 'value'=>''),
'registered'=> array('inFile'=>false, 'value'=>'1985-03-15 10:00'),
'tokenEmail'=> array('inFile'=>false, 'value'=>''),
'tokenEmailTTL'=> array('inFile'=>false, 'value'=>'2009-03-15 14:00')
);
function __construct()
@ -20,6 +20,11 @@ class dbUsers extends dbJSON
parent::__construct(PATH_DATABASES.'users.php');
}
public function getAll()
{
return $this->db;
}
// Return an array with the username databases, filtered by username.
public function getDb($username)
{
@ -51,11 +56,6 @@ class dbUsers extends dbJSON
return isset($this->db[$username]);
}
public function getAll()
{
return $this->db;
}
public function generateTokenEmail($username)
{
// Random hash

View 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);
}
}

View File

@ -147,6 +147,7 @@ class Page extends fileContent
return '/'.$htmlPath.'/'.$tmp;
}
// Returns the parent key, if the page doesn't have a parent returns FALSE.
public function parentKey()
{
$explode = explode('/', $this->getField('key'));
@ -157,6 +158,18 @@ class Page extends fileContent
return false;
}
// Returns the parent method output, if the page doesn't have a parent returns FALSE.
public function parentMethod($method)
{
global $pages;
if( isset($pages[$this->parentKey()]) ) {
return $pages[$this->parentKey()]->{$method}();
}
return false;
}
public function children()
{
$tmp = array();

View 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">&#8617;</a>';
}
$backLinksMarkup = substr($backLinksMarkup, 1);
if (substr($text, - 4) === '</p>')
{
$backLinksMarkup = '&#160;'.$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]+[ ]*)';
}

View File

@ -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);

View File

@ -3,7 +3,7 @@
{
"native": "Deutsch (Deutschland)",
"english-name": "German",
"last-update": "2015-11-10",
"last-update": "2015-11-22",
"author": "Edi Goetschel",
"email": "egoetschel@clickwork.ch",
"website": "http://www.clickwork.ch"
@ -44,7 +44,7 @@
"general": "Allgemein",
"advanced": "Erweitert",
"regional": "Lokalisierung",
"about": "Systeminformation",
"about": "Über",
"login": "Anmelden",
"logout": "Abmelden",
"manage": "Verwaltung",
@ -149,7 +149,7 @@
"welcome-to-the-bludit-installer": "Willkommen beim Bludit-Installer!",
"complete-the-form-choose-a-password-for-the-username-admin": "Bitte ein Passwort für den Benutzer \"admin\" wählen<br>und eine E-Mail-Adresse eingeben.",
"password-visible-field": "Das Passwort wird in Klartext angezeigt!",
"install": "Aktivieren",
"install": "Installieren",
"choose-your-language": "Sprache wählen",
"next": "Weiter",
"the-password-field-is-empty": "Das Passwort-Feld ist leer.",
@ -170,7 +170,7 @@
"command-line-mode": "Kommandozeilen-Modus",
"enable-the-command-line-mode-if-you-add-edit": "Verwende den Kommandozeilen-Modus, wenn du Beiträge und Seiten im Dateisystem hinzufügen, ändern oder löschen möchtest.",
"configure": "Konfiguration",
"uninstall": "Deaktivieren",
"uninstall": "Deinstallieren",
"change-password": "Neues Passwort",
"to-schedule-the-post-just-select-the-date-and-time": "Um einen Beitrag zu einem bestimmten Zeitpunkt zu veröffentlichen, Datum und Zeit wählen.",
"write-the-tags-separated-by-commas": "Schlagwörter durch Kommas getrennt.",
@ -184,7 +184,7 @@
"emails-will-be-sent-from-this-address":"E-Mails werden mit dieser E-Mail-Adresse als Absender verschickt.",
"bludit-login-access-code": "BLUDIT - Zugangscode",
"check-your-inbox-for-your-login-access-code":"Der Zugangscoe wurde Dir geschickt.",
"there-was-a-problem-sending-the-email":"There was a problem sending the email",
"there-was-a-problem-sending-the-email":"Es besteht ein Pronlem mit dem Verschicken dieser E-Mail.",
"back-to-login-form": "Zurück zum Login",
"send-me-a-login-access-code": "Zugangscode zuschicken",
"get-login-access-code": "Zugangscode schicken",
@ -193,13 +193,23 @@
"show-password": "Passwort zeigen",
"edit-or-remove-your=pages": "Seiten bearbeiten oder löschen.",
"edit-or-remove-your-blogs-posts": "Beiträge bearbeiten oder löschen.",
"general-settings": "Allgemeine Einnstellungen",
"advanced-settings": "Erweiterte Einnstellungen",
"general-settings": "Allgemein",
"advanced-settings": "Erweitert",
"manage-users": "Benutzerverwaltung",
"view-and-edit-your-profile": "Profil anschauen und bearbeiten.",
"password-must-be-at-least-6-characters-long": "Das Passwort muss mindestens 6 Zeichen lang sein",
"images": "Bilder",
"upload-image": "Bild hochladen",
"drag-and-drop-or-click-here": "Drag and Drop oder klicke hier",
"insert-image": "Bild einfügen"
"insert-image": "Bild einfügen",
"supported-image-file-types": "Unterstützte Datei-Formate",
"date-format": "Datumsformat",
"time-format": "Zeitformat",
"chat-with-developers-and-users-on-gitter":"Chatte mit Entwicklern und Benutzern bei [Gitter](https://gitter.im/dignajar/bludit)",
"this-is-a-brief-description-of-yourself-our-your-site":"Dies ist eine kurze Beschreibung, wer du bist, oder deiner Website. Um diesen Text zu ändern, gehe im Admin-Panel zu den Einstellungen und konfiguriere unter \"Plugins\" das Plugin \"Über\".",
"profile-picture": "Profil-Bild",
"the-about-page-is-very-important": "Die Seite \"Über\" ist wichtig und wirkungsvoll beispielsweise für zukünfige Kunden und Partner. Für alle, die wissen möchten, wer hinter der Website steht, ist die \"Über\"-Seite die erste Informationsquelle.",
"change-this-pages-content-on-the-admin-panel": "Der Inhalt dieser Seite kann im Admin-Panel unter \"Verwaltung\" > \"Seiten\" geändert werden.",
"about-your-site-or-yourself": "Über dich oder deine Website",
"welcome-to-bludit": "Willkommen bei Bludit"
}

View File

@ -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"
}

View File

@ -13,7 +13,7 @@
"password": "Contraseña",
"confirm-password": "Confirmar contraseña",
"editor": "Editor",
"dashboard": "Panel",
"dashboard": "Panel de administración",
"role": "Rol",
"post": "Entrada",
"posts": "Entradas",
@ -51,7 +51,7 @@
"themes": "Temas",
"prev-page": "Pag. anterior",
"next-page": "Pag. siguiente",
"configure-plugin": "Configurar plugin",
"configure-plugin": "Configurar complemento",
"confirm-delete-this-action-cannot-be-undone": "Confirmar eliminación, esta operación no se puede deshacer.",
"site-title": "Titulo del sitio",
"site-slogan": "Slogan del sitio",
@ -76,9 +76,9 @@
"published-date": "Fecha de publicación",
"modified-date": "Fecha de modificación",
"empty-title": "Titulo vacío",
"plugins": "Plugins",
"install-plugin": "Instalar plugin",
"uninstall-plugin": "Desinstalar plugin",
"plugins": "Complementos",
"install-plugin": "Instalar complemento",
"uninstall-plugin": "Desinstalar complemento",
"new-password": "Nueva contraseña",
"edit-user": "Editar usuario",
"publish-now": "Publicar",
@ -163,7 +163,7 @@
"scheduled": "Programado",
"publish": "Publicar",
"please-check-your-theme-configuration": "Verifique la configuración del tema.",
"plugin-label": "Titulo del plugin",
"plugin-label": "Titulo del complemento",
"enabled": "Habilitado",
"disabled": "Deshabilitado",
"cli-mode": "Modo Cli",
@ -199,5 +199,19 @@
"manage-users": "Administrar usuarios",
"view-and-edit-your-profile": "Modifique su perfil.",
"password-must-be-at-least-6-characters-long": "La contraseña debe tener al menos 6 carácteres."
"password-must-be-at-least-6-characters-long": "La contraseña debe tener al menos 6 carácteres.",
"images": "Imagenes",
"upload-image": "Subir imagen",
"drag-and-drop-or-click-here": "Arrastre y suelte, o haga clic aquí",
"insert-image": "Insertar imagen",
"supported-image-file-types": "Tipo de imagen soportados",
"date-format": "Formato de fecha",
"time-format": "Formato de hora",
"chat-with-developers-and-users-on-gitter":"Charla con los desarrolladores y usuarios en [Gitter](https://gitter.im/dignajar/bludit)",
"this-is-a-brief-description-of-yourself-our-your-site":"Breve descripción de ti o de tu sitio, para cambiar este texto, vaya al panel de administración, ajustes, complementos, y configurar el complemento Acerca de",
"profile-picture": "Imagen de perfil",
"the-about-page-is-very-important": "La página acerca es una herramienta importante y de gran alcance para los clientes y socios potenciales. Para aquellos que quieren saber quien esta detras de este sitio, su pagina Acerca de es la primera fuente de información.",
"change-this-pages-content-on-the-admin-panel": "Modifique el contenido de esta pagina en el panel de administración, administrar, paginas, y luego clic en la pagina Acerca de.",
"about-your-site-or-yourself": "Acerca de ti o de tu sitio",
"welcome-to-bludit": "Bienvenido a Bludit"
}

View File

@ -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,15 @@
"images": "Images",
"upload-image": "Envoyer une image",
"drag-and-drop-or-click-here": "Glissez et déposez ou cliquez ici",
"insert-image": "Insérer limage sélectionnée"
"insert-image": "Insérer limage sélectionnée",
"supported-image-file-types": "Extensions des images prises en charge",
"date-format": "Format de la Date",
"time-format": "Format de lheure",
"chat-with-developers-and-users-on-gitter":"Chattez avec les développeurs et les utilisateurs sur [Gitter](https://gitter.im/dignajar/bludit)",
"this-is-a-brief-description-of-yourself-our-your-site":"Ceci est une brève description de vous-même ou de votre site, pour modifier ce texte aller dans le panneau dadministration, paramètres -> plugins et configurer le plugin « à propos ».",
"profile-picture": "Image de profil",
"the-about-page-is-very-important": "Votre page **à propos** est très utile. Elle fournit à vos visiteurs des informations importantes sur vous, elle crée un rapport de confiance entre vous et votre visiteur, elle présente votre société et votre site et elle vous différencie de tous les autres sites de votre niche.",
"change-this-pages-content-on-the-admin-panel": "Changer le contenu de cette page à partir du panneau dadministration, Gestion de contenu -> Pages et cliquez sur la page « à propos » pour léditer.",
"about-your-site-or-yourself": "À propos de vous",
"welcome-to-bludit": "Bienvenue sur Bludit"
}

214
languages/he_IL.json Normal file
View 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": "תמונת פרופיל"
}

View File

@ -3,7 +3,7 @@
{
"native": "Русский (Россия)",
"english-name": "Russian",
"last-update": "2015-11-05",
"last-update": "2015-11-17",
"author": "Сергей Ворон",
"email": "sergey@voron.pw",
"website": "voron.pw"
@ -203,5 +203,15 @@
"images": "Изображения",
"upload-image": "Загрузить изображение",
"drag-and-drop-or-click-here": "Перетащите или нажмите здесь",
"insert-image": "Вставить изображение"
"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-site":"Это краткое описание о вас или о сайте, чтобы изменить этот текст перейдите в панель управления, настройки, плагины и настройте плагин about.",
"profile-picture": "Изображение профиля",
"the-about-page-is-very-important": "Страница о нас является важным и мощным инструментом для потенциальных клиентов и партнеров. Для тех, кто пришел, кому интересен ваш сайт, страница О нас является первым источником информации.",
"change-this-pages-content-on-the-admin-panel": "Измените содержимое этой страницы в панели управления, Управление, Страницы и нажмите на страницу about.",
"about-your-site-or-yourself": "О Вашем сайте или о вас",
"welcome-to-bludit": "Добро пожаловать в Bludit"
}

View File

@ -3,7 +3,7 @@
{
"native": "Українська (Україна)",
"english-name": "Ukrainian",
"last-update": "2015-10-30",
"last-update": "2015-11-19",
"author": "Allec Bernz",
"email": "admin@allec.info",
"website": "allec.info"
@ -86,7 +86,7 @@
"last-name": "Прізвище",
"bludit-version": "Версія Bludit",
"powered-by": "Працює на",
"recent-posts": "Останні повідомлення",
"recent-posts": "Останні публікації",
"manage-pages": "Керування сторінками",
"advanced-options": "Додаткові параметри",
"user-deleted": "Користувач видалений",
@ -119,14 +119,15 @@
"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": "Видалити користувача та зв'язати його публікації з користувачем admin",
"read-more": "Читати далі",
"show-blog": "Показати блог",
"default-home-page": "Домашня сторінка за промовчанням",
"default-home-page": "Домашня сторінка за замовчуванням",
"version": "Версія",
"there-are-no-drafts": "Немає чернеток.",
"create-a-new-article-for-your-blog":"Створити нову статтю для свого блогу.",
"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":"Змінити Вашу мову та регіональні налаштування.",
@ -134,7 +135,7 @@
"author": "Автор",
"start-here": "Почніть тут",
"install-theme": "Встановити тему",
"first-post": "Перша стаття",
"first-post": "Перша публікація",
"congratulations-you-have-successfully-installed-your-bludit": "Вітаємо, Ви успішно встановили ваш **Bludit**",
"whats-next": "Що далі",
"manage-your-bludit-from-the-admin-panel": "Керуйте вашим Bludit через [панель управління](./admin/)",
@ -158,6 +159,7 @@
"ip-address-has-been-blocked": "IP-адресу заблоковано.",
"try-again-in-a-few-minutes": "Повторіть спробу через декілька хвилин.",
"date": "Дата",
"scheduled": "Заплановано",
"publish": "Опублікувати",
"please-check-your-theme-configuration": "Будь ласка, перевірте конфігурацію вашої теми.",
@ -167,6 +169,7 @@
"cli-mode": "Режим CLI",
"command-line-mode": "Режим командного рядка",
"enable-the-command-line-mode-if-you-add-edit": "Увімкніть режим командного рядка, якщо ви додаєте, редагуєте або видаляєте публікації та сторінки з файлової системи",
"configure": "Налаштування",
"uninstall": "Видалити",
"change-password": "Зміна пароля",
@ -194,5 +197,21 @@
"general-settings": "Загальні налаштування",
"advanced-settings": "Додаткові налаштування",
"manage-users": "Управління користувачами",
"view-and-edit-your-profile": "Перегляд і редагування свого профілю."
"view-and-edit-your-profile": "Перегляд і редагування свого профілю.",
"password-must-be-at-least-6-characters-long": "Пароль повинен містити не менше 6 символів",
"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-site":"Це короткий опис про себе або про сайт, щоб змінити цей текст зайдіть в панель адміністратора, налаштування, плагіни, і налаштуйте плагін про сайт.",
"profile-picture": "Зображення профілю",
"the-about-page-is-very-important": "Сторінка про сайт є важливим і потужним інструментом для потенційних клієнтів і партнерів. Для тих, кому цікаво, хто стоїть за сайтом, ваша сторінка про сайт є першим джерелом інформації.",
"change-this-pages-content-on-the-admin-panel": "Щоб змінити зміст цієї сторінки зайдіть в панель адміністратора, керування, сторінки та натисніть кнопку Про сайт.",
"about-your-site-or-yourself": "Про Ваш сайт або про Вас",
"welcome-to-bludit": "Ласкаво просимо до Bludit"
}

View File

@ -3,7 +3,7 @@
{
"native": "Traditional Chinese (Taiwan)",
"english-name": "Traditional Chinese",
"last-update": "2015-11-10",
"last-update": "2015-11-21",
"author": "Ethan Chen",
"email": "ethan42411@gmail.com",
"website": "http://single4.ml"
@ -203,5 +203,14 @@
"upload-image": "上傳圖片",
"drag-and-drop-or-click-here": "拖曳您的圖片到這裡或是點選這裡選擇圖片",
"insert-image": "插入圖片",
"supported-image-file-types": "可以上傳的檔案格式"
"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-site":"這是關於您的自己或是網站的簡短介紹,如果想要修改介紹,請至管理介面/設定/延伸模組,設定一個名為關於的延伸模組。",
"profile-picture": "大頭貼",
"the-about-page-is-very-important": "這個關於頁面是對於使用者與合作夥伴非常重要、非常有用的工具。對於那些不了解您網站內容的人,您的關於頁面將會是他們第一個閱讀的頁面。",
"change-this-pages-content-on-the-admin-panel": "在管理介面中更改此頁面的內容,管理/頁面,接著點選關於頁面。",
"about-your-site-or-yourself": "關於您的網站或是您自己",
"welcome-to-bludit": "歡迎使用Bludit"
}

View File

@ -0,0 +1,12 @@
{
"plugin-data":
{
"name": "Über",
"description": "Kurzer Text über die Website oder zu dir.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.6",
"releaseDate": "2015-11-13"
}
}

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "Acerca de",
"description": "Pequeña descripcion sobre tu mismo o sobre tu sitio."
}
}

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "О блоге",
"description": "Небольшое описание о вашем сайте или о себя."
}
}

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "Про блог",
"description": "Невеликий опис вашого сайту або про Вас."
}
}

View File

@ -0,0 +1,11 @@
{
"plugin-data":
{
"name": "Комментарии Disqus",
"description": "Disqus это сервис комментариев для сайтов и блогов. Необходимо быть зарегистрированным на Disqus.com перед использованием плагина."
},
"disqus-shortname": "Disqus shortname",
"enable-disqus-on-pages": "Включить Disqus на страницах",
"enable-disqus-on-posts": "Включить Disqus в записях",
"enable-disqus-on-default-home-page": "Включить Disqus на домашней странице"
}

View File

@ -0,0 +1,11 @@
{
"plugin-data":
{
"name": "Google Tools",
"description": "Этот плагин генерирует мета теги для проверки вашего сайта в Google Webmasters Tools и код JavaScript для отслеживания вашего сайта в Google Analytics."
},
"google-webmasters-tools": "Google Webmasters tools",
"google-analytics-tracking-id": "Google Analytics Tracking ID",
"complete-this-field-with-the-google-site-verification": "Заполните это поле для проверки владельца сайта.",
"complete-this-field-with-the-tracking-id": "Заполните это поле с Tracking ID чтобы сгенерировать код Javascript для отслеживания в Google Analytics."
}

View File

@ -0,0 +1,10 @@
{
"plugin-data":
{
"name": "Режим обслуживания",
"description": "Установите ваш сайт в режим обслуживания, вы можете получить доступ к панели управления."
},
"enable-maintence-mode": "Включить режим обслуживания",
"message": "Сообщение"
}

View File

@ -2,6 +2,6 @@
"plugin-data":
{
"name": "Open Graph",
"description": "El protocolo Open Graph sirve para publicar contenido en las redes sociales."
"description": "Utiliza este plugin para mejorar las publicaciones en las redes sociales."
}
}

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "Open Graph",
"description": "Протокол Open Graph дает возможность связывать свой контент с социальными сетями."
}
}

Some files were not shown because too many files have changed in this diff Show More