Merge remote-tracking branch 'refs/remotes/dignajar/master'

This commit is contained in:
Hristo Dipchikov 2016-09-14 15:22:37 +03:00
commit e0ea75d696
199 changed files with 4106 additions and 2016 deletions

View File

@ -1,14 +1,14 @@
[Bludit](http://www.bludit.com/) [Bludit](https://www.bludit.com/)
================================ ================================
**Fast**, **simple**, **extensible** and **flat file** CMS. **Fast**, **simple**, **extensible** and **flat file** CMS.
Bludit is a simple web application to make your own **blog** or **site** in seconds, it's completly **free and open source**. Bludit uses flat-files (text files in JSON format) to store the posts and pages, you don't need to install or configure a database. Bludit is a simple web application to make your own **blog** or **site** in seconds, it's completly **free and open source**. Bludit uses flat-files (text files in JSON format) to store the posts and pages, you don't need to install or configure a database.
- [Documentation](http://docs.bludit.com) - [Documentation](https://docs.bludit.com)
- [Help and Support](http://forum.bludit.com) - [Help and Support](https://forum.bludit.com)
- [Plugins](https://github.com/dignajar/bludit-plugins) - [Plugins](https://plugins.bludit.com)
- [Themes](https://github.com/dignajar/bludit-themes) - [Themes](https://themes.bludit.com)
- [More plugins and themes](http://forum.bludit.com/viewforum.php?f=14) - [More plugins and themes](https://forum.bludit.com/viewforum.php?f=14)
Social networks Social networks
--------------- ---------------
@ -36,7 +36,7 @@ You only need a web server with PHP support.
Installation guide Installation guide
------------------ ------------------
1. Download the latest version from http://www.bludit.com/bludit_latest.zip 1. Download the latest version from https://s3.amazonaws.com/bludit-s3/bludit-builds/bludit_latest.zip
2. Extract the zip file into a directory like `bludit`. 2. Extract the zip file into a directory like `bludit`.
3. Upload the directory `bludit` to your hosting server. 3. Upload the directory `bludit` to your hosting server.
4. Done! 4. Done!

View File

@ -1,6 +0,0 @@
# Bludit
Set the correct permissions on this directory.
Documentation:
- http://docs.bludit.com/en/troubleshooting/writing-test-failure-err205

View File

@ -11,13 +11,13 @@ class Content {
} }
} }
// Return true if valid // Return TRUE if the content is loaded correctly
public function isValid() public function isValid()
{ {
return($this->vars!==false); return($this->vars!==false);
} }
// Returns the value from the $field, FALSE if the field doesn't exist. // Returns the value from the $field, FALSE if the field doesn't exist
public function getField($field) public function getField($field)
{ {
if(isset($this->vars[$field])) { if(isset($this->vars[$field])) {
@ -27,7 +27,7 @@ class Content {
return false; return false;
} }
// $notoverwrite true if you don't want to replace the value if are set previusly // Set a value to a field
public function setField($field, $value, $overwrite=true) public function setField($field, $value, $overwrite=true)
{ {
if($overwrite || empty($this->vars[$field])) { if($overwrite || empty($this->vars[$field])) {
@ -37,14 +37,15 @@ class Content {
return true; return true;
} }
// Parse the content from the file index.txt
private function build($path) private function build($path)
{ {
if( !Sanitize::pathFile($path.'index.txt') ) { if( !Sanitize::pathFile($path.FILENAME) ) {
return false; return false;
} }
$tmp = 0; $tmp = 0;
$lines = file($path.'index.txt'); $lines = file($path.FILENAME);
foreach($lines as $lineNumber=>$line) foreach($lines as $lineNumber=>$line)
{ {
$parts = array_map('trim', explode(':', $line, 2)); $parts = array_map('trim', explode(':', $line, 2));
@ -88,17 +89,17 @@ class Content {
} }
// Returns the post title. // Returns the title field
public function title() public function title()
{ {
return $this->getField('title'); return $this->getField('title');
} }
// Returns the content. // Returns the content
// This content is markdown parser. // This content is markdown parser
// (boolean) $fullContent, TRUE returns all content, if FALSE returns the first part of the content. // (boolean) $fullContent, TRUE returns all content, if FALSE returns the first part of the content
// (boolean) $raw, TRUE returns the content without sanitized, FALSE otherwise. // (boolean) $noSanitize, TRUE returns the content without sanitized
public function content($fullContent=true, $raw=true) public function content($fullContent=true, $noSanitize=true)
{ {
// This content is not sanitized. // This content is not sanitized.
$content = $this->getField('content'); $content = $this->getField('content');
@ -107,55 +108,60 @@ class Content {
$content = $this->getField('breakContent'); $content = $this->getField('breakContent');
} }
if($raw) { if($noSanitize) {
return $content; return $content;
} }
return Sanitize::html($content); return Sanitize::html($content);
} }
// Returns the content
// This content is not markdown parser
// (boolean) $noSanitize, TRUE returns the content without sanitized
public function contentRaw($noSanitize=true)
{
// This content is not sanitized.
$content = $this->getField('contentRaw');
if($noSanitize) {
return $content;
}
return Sanitize::html($content);
}
// Returns TRUE if the content has the text splited
public function readMore() public function readMore()
{ {
return $this->getField('readMore'); return $this->getField('readMore');
} }
// Returns the content. This content is not markdown parser. // Returns the field key
// (boolean) $raw, TRUE returns the content without sanitized, FALSE otherwise.
public function contentRaw($raw=true)
{
// This content is not sanitized.
$content = $this->getField('contentRaw');
if($raw) {
return $content;
}
return Sanitize::html($content);
}
public function key() public function key()
{ {
return $this->getField('key'); return $this->getField('key');
} }
// Returns TRUE if the post is published, FALSE otherwise. // Returns TRUE if the post/page is published, FALSE otherwise.
public function published() public function published()
{ {
return ($this->getField('status')==='published'); return ($this->getField('status')==='published');
} }
// Returns TRUE if the post is scheduled, FALSE otherwise. // Returns TRUE if the post/page is scheduled, FALSE otherwise.
public function scheduled() public function scheduled()
{ {
return ($this->getField('status')==='scheduled'); return ($this->getField('status')==='scheduled');
} }
// Returns TRUE if the post is draft, FALSE otherwise. // Returns TRUE if the post/page is draft, FALSE otherwise.
public function draft() public function draft()
{ {
return ($this->getField('status')=='draft'); return ($this->getField('status')=='draft');
} }
// Returns the file name of the cover image, FALSE there isn't a cover image setted
// (boolean) $absolute, TRUE returns the absolute path and file name, FALSE just the file name
public function coverImage($absolute=true) public function coverImage($absolute=true)
{ {
$fileName = $this->getField('coverImage'); $fileName = $this->getField('coverImage');
@ -171,12 +177,16 @@ class Content {
return $fileName; return $fileName;
} }
/*
DEPRECATED ?
public function profilePicture() public function profilePicture()
{ {
return HTML_PATH_UPLOADS_PROFILES.$this->username().'.jpg'; return HTML_PATH_UPLOADS_PROFILES.$this->username().'.jpg';
} }
*/
// Returns the user object if $field is false, otherwise returns the field's value. // Returns the user object
// (boolean) $field, TRUE returns the value of the field, FALSE returns the object
public function user($field=false) public function user($field=false)
{ {
// Get the user object. // Get the user object.
@ -189,23 +199,26 @@ class Content {
return $User; return $User;
} }
// Returns the username who created the post/page
public function username() public function username()
{ {
return $this->getField('username'); return $this->getField('username');
} }
// Returns the description field
public function description() public function description()
{ {
return $this->getField('description'); return $this->getField('description');
} }
// Returns the post date according to locale settings and format settings. // Returns the date according to locale settings and format settings
public function date() public function date()
{ {
return $this->getField('date'); return $this->getField('date');
} }
// Returns the post date according to locale settings and format as database stored. // Returns the date according to locale settings and format as database stored
// (string) $format, you can specify the date format
public function dateRaw($format=false) public function dateRaw($format=false)
{ {
$date = $this->getField('dateRaw'); $date = $this->getField('dateRaw');
@ -217,6 +230,8 @@ class Content {
return $date; return $date;
} }
// Returns the tags
// (boolean) $returnsArray, TRUE to get the tags as an array, FALSE to get the tags separeted by comma
public function tags($returnsArray=false) public function tags($returnsArray=false)
{ {
global $Url; global $Url;
@ -241,6 +256,8 @@ class Content {
} }
} }
// Returns the permalink
// (boolean) $absolute, TRUE returns the post/page link with the DOMAIN, FALSE without the DOMAIN
public function permalink($absolute=false) public function permalink($absolute=false)
{ {
global $Url; global $Url;
@ -271,5 +288,20 @@ class Content {
return '/'.$htmlPath.'/'.$tmp; return '/'.$htmlPath.'/'.$tmp;
} }
public function json($returnsArray=false)
{
$tmp['key'] = $this->key();
$tmp['title'] = $this->title();
$tmp['content'] = $this->content(); // Markdown parsed
$tmp['contentRaw'] = $this->contentRaw(); // No Markdown parsed
$tmp['description'] = $this->description();
$tmp['date'] = $this->dateRaw();
$tmp['permalink'] = $this->permalink(true);
if($returnsArray) {
return $tmp;
}
return json_encode($tmp);
}
} }

View File

@ -81,7 +81,13 @@ class dbJSON
$this->dbBackup = $this->db; $this->dbBackup = $this->db;
// LOCK_EX flag to prevent anyone else writing to the file at the same time. // LOCK_EX flag to prevent anyone else writing to the file at the same time.
return file_put_contents($this->file, $data, LOCK_EX); if( file_put_contents($this->file, $data, LOCK_EX) ) {
return true;
}
else {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.');
return false;
}
} }
// Returns a JSON encoded string on success or FALSE on failure. // Returns a JSON encoded string on success or FALSE on failure.

View File

@ -105,7 +105,7 @@ class Plugin {
public function setDb($args) public function setDb($args)
{ {
$tmp = array(); $tmp = $this->db;
foreach($this->dbFields as $key=>$value) foreach($this->dbFields as $key=>$value)
{ {
@ -120,10 +120,6 @@ class Plugin {
// Set value // Set value
$tmp[$key] = $tmpValue; $tmp[$key] = $tmpValue;
} }
else
{
$tmp[$key] = false;
}
} }
$this->db = $tmp; $this->db = $tmp;
@ -174,6 +170,13 @@ class Plugin {
return $this->className; return $this->className;
} }
public function isCompatible()
{
$explode = explode(',', $this->getMetadata('compatible'));
return in_array(BLUDIT_VERSION, $explode);
}
public function directoryName() public function directoryName()
{ {
return $this->directoryName; return $this->directoryName;
@ -186,7 +189,7 @@ class Plugin {
return false; return false;
} }
// Create plugin directory for databases and others files. // Create plugin directory for databases and other files
mkdir(PATH_PLUGINS_DATABASES.$this->directoryName, 0755, true); mkdir(PATH_PLUGINS_DATABASES.$this->directoryName, 0755, true);
// Create database // Create database

View File

@ -43,6 +43,9 @@ if(!method_exists($_Plugin, 'form')) {
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{ {
$_Plugin->setDb($_POST); $_Plugin->setDb($_POST);
Theme::plugins('afterFormSave');
Alert::set($Language->g('the-changes-have-been-saved')); Alert::set($Language->g('the-changes-have-been-saved'));
} }

View File

@ -12,28 +12,53 @@ function updateBludit()
// Check if Bludit need to be update. // Check if Bludit need to be update.
if( ($Site->currentBuild() < BLUDIT_BUILD) || isset($_GET['update']) ) if( ($Site->currentBuild() < BLUDIT_BUILD) || isset($_GET['update']) )
{ {
// --- Update dates on posts --- // LOG
foreach($dbPosts->db as $key=>$post) Log::set('UPDATE SYSTEM - Starting...');
{
// LOG
Log::set('UPDATE SYSTEM - Checking posts.');
// Update posts
foreach($dbPosts->db as $key=>$post) {
// Dates
$date = Date::format($post['date'], 'Y-m-d H:i', DB_DATE_FORMAT); $date = Date::format($post['date'], 'Y-m-d H:i', DB_DATE_FORMAT);
if($date !== false) { if($date !== false) {
$dbPosts->setPostDb($key,'date',$date); $dbPosts->setPostDb($key, 'date', $date);
}
// Checksum
if( empty($post['md5file']) ) {
$checksum = md5_file(PATH_POSTS.$key.DS.FILENAME);
$dbPosts->setPostDb($key, 'md5file', $checksum);
} }
} }
$dbPosts->save(); $dbPosts->save();
// --- Update dates on pages --- // LOG
foreach($dbPages->db as $key=>$page) Log::set('UPDATE SYSTEM - Checking pages.');
{
// Update pages
foreach($dbPages->db as $key=>$page) {
$date = Date::format($page['date'], 'Y-m-d H:i', DB_DATE_FORMAT); $date = Date::format($page['date'], 'Y-m-d H:i', DB_DATE_FORMAT);
if($date !== false) { if($date !== false) {
$dbPages->setPageDb($key,'date',$date); $dbPages->setPageDb($key, 'date', $date);
}
// Checksum
if( empty($post['md5file']) ) {
$checksum = md5_file(PATH_PAGES.$key.DS.FILENAME);
$dbPages->setPageDb($key, 'md5file', $checksum);
} }
} }
$dbPages->save(); $dbPages->save();
// LOG
Log::set('UPDATE SYSTEM - Checking directories.');
// --- Update directories --- // --- Update directories ---
$directories = array( $directories = array(
PATH_POSTS, PATH_POSTS,
@ -44,8 +69,8 @@ function updateBludit()
PATH_TMP PATH_TMP
); );
foreach($directories as $dir) foreach($directories as $dir) {
{
// Check if the directory is already created. // Check if the directory is already created.
if(!file_exists($dir)) { if(!file_exists($dir)) {
// Create the directory recursive. // Create the directory recursive.
@ -56,7 +81,8 @@ function updateBludit()
// Set and save the database. // Set and save the database.
$Site->set(array('currentBuild'=>BLUDIT_BUILD)); $Site->set(array('currentBuild'=>BLUDIT_BUILD));
Log::set('updateBludit'.LOG_SEP.'System updated'); // LOG
Log::set('UPDATE SYSTEM - Updated...');
} }
} }

View File

@ -45,6 +45,7 @@ function checkPost($args)
$sent = Email::send(array( $sent = Email::send(array(
'from'=>$Site->emailFrom(), 'from'=>$Site->emailFrom(),
'fromName'=>$Site->title(),
'to'=>$email, 'to'=>$email,
'subject'=>$subject, 'subject'=>$subject,
'message'=>$message 'message'=>$message

View File

@ -1,31 +1,172 @@
/* ----------- UIKIT HACKs FOR BLUDIT ----------- */ .uk-form * {
border-radius: 2px !important;
}
.uk-tab a {
color: #2196f3 !important;
}
a {
color: #2196f3 !important;
}
/* UIKIT HACKs navbar
---------------------------------------------------------------- */
.uk-navbar { .uk-navbar {
background: #EEEEEE !important; background: #323232 !important;
border: 0 !important;
border-radius: 0 !important;
}
.uk-navbar-nav a {
border: none !important; border: none !important;
border-radius: none !important;
text-shadow: none !important;
color: #fff !important;
font-weight: 300 !important;
padding: 0 25px !important;
} }
.uk-navbar-nav > li.uk-open > a,
.uk-navbar-nav > li:hover > a,
.uk-navbar-nav > li:focus > a,
.uk-navbar-nav > li > a:focus,
.uk-navbar-nav > li > a:hover {
background: none !important;
border-radius: 0 !important;
color: #BBBBBB !important;
box-shadow: none !important;
text-shadow: none !important;
}
.uk-nav-navbar > li > a:focus,
.uk-nav-navbar > li > a:hover {
background: none !important;
border-radius: 0 !important;
color: #888 !important;
box-shadow: none !important;
text-shadow: none !important;
}
.uk-navbar-nav > li.uk-active > a {
background: none !important;
color: #BBBBBB !important;
}
.uk-navbar-nav .uk-border-circle {
border-radius: 20px !important;
}
.uk-dropdown-navbar {
margin: 0 !important;
padding: 10px 0 !important;
position: fixed;
text-align: center;
width: 100%;
border-radius: 0 !important;
border-left: 0 !important;
border-right: 0 !important;
border-top: 0 !important;
}
.uk-dropdown-navbar li {
display: inline-block !important;
}
.uk-dropdown-navbar a {
color: #323232 !important;
}
li.bludit-logo {
color: #fff !important;
display: block;
font-size: 14px;
font-weight: 400;
height: 41px;
line-height: 40px;
margin-left: -1px;
margin-top: -1px;
margin-right: 12px;
}
.bludit-user-navbar {
background: #333 none repeat scroll 0 0;
border-color: #ccc;
border-radius: 0 0 5px 5px !important;
color: #fff;
position: absolute;
}
.bludit-user-navbar a {
color: #fff !important;
}
@media (min-width: 333px) and (max-width: 959px) {
/* Hidden the Welcome USERNAME */
.uk-navbar-flip {
display: none !important;
}
/* Expand and hidden the sidebar */
.uk-width-large-8-10 {
width: 100% !important;
}
/* Hidden the sidebar */
.uk-width-large-2-10 {
width: 0% !important;
display: none !important;
}
}
@media (min-width: 960px) {
.uk-width-large-4-5,
.uk-width-large-8-10 {
width: 75% !important;
}
.uk-width-large-1-5,
.uk-width-large-2-10 {
width: 25% !important;
}
}
/* UIKIT HACKs hidden navbar
---------------------------------------------------------------- */
.uk-navbar-brand {
text-shadow: none !important;
color: #fff !important;
}
.uk-navbar-toggle {
text-shadow: none !important;
color: #fff !important;
}
.uk-nav-offcanvas > li > a {
color: #fff !important;
}
/* UIKIT HACKs buttons
---------------------------------------------------------------- */
.uk-button { .uk-button {
color: #ffffff; padding: 2px 26px;
padding: 2px 22px;
text-shadow: none; text-shadow: none;
background: #888888; color: #333 !important;
border-radius: 3px;
}
.uk-button:hover,
.uk-button:focus {
background-color: #777777;
color: #ffffff;
} }
.uk-button-primary { .uk-button-primary {
background: #2672ec; background: #2196f3 !important;
color: #fff !important;
} }
.uk-button-primary:hover { .uk-button-primary:hover {
background: #1F5FC4; background: #2EA3FF;
color: #fafafa !important;
} }
/* UIKIT HACKs forms
---------------------------------------------------------------- */
legend { legend {
width: 70% !important; width: 70% !important;
margin-top: 40px !important; margin-top: 40px !important;
@ -35,16 +176,7 @@ legend.first-child {
margin-top: 0px !important; margin-top: 0px !important;
} }
.uk-navbar-nav > li > a {
border: none;
height: 70px;
padding: 15px;
}
.uk-nav-navbar > li > a:hover,
.uk-nav-navbar > li > a:focus {
background: #2672ec;
}
.uk-form-label { .uk-form-label {
color: #666666; color: #666666;
@ -61,6 +193,11 @@ legend.first-child {
padding: 15px 10px; padding: 15px 10px;
} }
.uk-table td.children {
padding: 15px 10px 15px 25px;
}
.uk-badge { .uk-badge {
margin-right: 5px !important; margin-right: 5px !important;
font-size: 0.9em; font-size: 0.9em;
@ -72,36 +209,15 @@ a {
color: #2672ec; color: #2672ec;
} }
li.bludit-logo {
color: #848484 !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 { .uk-panel-box {
background: #F9F9F9 !important; background: #F9F9F9 !important;
border: 0;
} }
.uk-container { .uk-container {
max-width: 1280px !important; max-width: 1280px !important;
} }
.uk-width-large-4-5,
.uk-width-large-8-10 {
width: 75% !important;
}
.uk-width-large-1-5,
.uk-width-large-2-10 {
width: 25% !important;
}
.uk-thumbnail { .uk-thumbnail {
margin: 2px 3px !important; margin: 2px 3px !important;
max-width: 30% !important; max-width: 30% !important;
@ -116,6 +232,7 @@ li.bludit-logo {
margin-bottom: 0 !important; margin-bottom: 0 !important;
} }
/* ----------- BLUDIT ----------- */ /* ----------- BLUDIT ----------- */
body { body {
@ -165,23 +282,22 @@ table.statistics tr:last-child td {
/* ----------- ALERT ----------- */ /* ----------- ALERT ----------- */
#alert { #alert {
bottom: 20px; bottom: 0;
color: #ffffff; color: #ffffff;
padding: 10px;
display: none; display: none;
padding: 24px;
position: fixed; position: fixed;
right: 20px;
text-align: center; text-align: center;
width: 350px;
z-index: 100; z-index: 100;
right: 0;
} }
.alert-ok { .alert-ok {
background: rgba(48, 102, 187, 0.91); background: #4374C1;
} }
.alert-fail { .alert-fail {
background: rgba(187, 48, 48, 0.91); background: #c14343;
} }
/* ----------- FORM ----------- */ /* ----------- FORM ----------- */
@ -237,7 +353,8 @@ table.statistics tr:last-child td {
} }
#jstagList span.select { #jstagList span.select {
color: #2672ec; color: #2196f3;
padding: 2px 13px;
} }
/* ----------- BLUDIT IMAGES V8 ----------- */ /* ----------- BLUDIT IMAGES V8 ----------- */
@ -541,3 +658,7 @@ div.plugin-links > span.separator {
margin-bottom: 0px !important; margin-bottom: 0px !important;
display: inline-block; display: inline-block;
} }
#jsformplugin p {
margin-bottom: 0;
}

View File

@ -1,6 +1,10 @@
/* ----------- UIKIT HACKs FOR BLUDIT ----------- */ /* ----------- UIKIT HACKs FOR BLUDIT ----------- */
html { html {
background: #f1f1f1; background: #F7F7F7;
}
.uk-form * {
border-radius: 2px !important;
} }
.uk-button-primary { .uk-button-primary {
@ -13,8 +17,9 @@ html {
input[type="text"], input[type="text"],
input[type="password"] { input[type="password"] {
border-color: #FFF !important; border-color: #EBEBEB !important;
background: #FFF; border-radius: 2px !important;
color: #333;
} }
input:disabled { input:disabled {
@ -22,7 +27,7 @@ input:disabled {
} }
.uk-vertical-align-middle { .uk-vertical-align-middle {
margin-top: -100px; margin-top: -150px;
} }
.uk-panel { .uk-panel {

View File

@ -1,6 +1,10 @@
/* ----------- UIKIT HACKs FOR BLUDIT ----------- */ /* ----------- UIKIT HACKs FOR BLUDIT ----------- */
html { html {
background: #f1f1f1; background: #F7F7F7;
}
* {
border-radius: 2px !important;
} }
.uk-button-primary { .uk-button-primary {
@ -13,7 +17,13 @@ html {
input[type="text"], input[type="text"],
input[type="password"] { input[type="password"] {
border-color: #FFF !important; border-color: #EBEBEB !important;
border-radius: 2px !important;
color: #333;
}
.uk-alert {
padding: 22px 0 !important;
} }
/* ----------- BLUDIT ----------- */ /* ----------- BLUDIT ----------- */
@ -40,10 +50,10 @@ div.login-form > h2 {
} }
a.login-email { a.login-email {
background: #f9f9f9 none repeat scroll 0 0; border: 0;
border: 1px solid #eeeeee;
color: #777; color: #777;
display: block; display: block;
padding: 20px;
margin: 20px 0; margin: 20px 0;
padding: 0;
text-align: left;
} }

View File

@ -1,2 +1,2 @@
/*! UIkit 2.24.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /*! UIkit 2.26.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
.uk-form-file{display:inline-block;vertical-align:middle;position:relative;overflow:hidden}.uk-form-file input[type=file]{position:absolute;top:0;z-index:1;width:100%;opacity:0;cursor:pointer;left:0;font-size:500px} .uk-form-file{display:inline-block;vertical-align:middle;position:relative;overflow:hidden}.uk-form-file input[type=file]{position:absolute;top:0;z-index:1;width:100%;opacity:0;cursor:pointer;left:0;font-size:500px}

View File

@ -1,2 +1,2 @@
/*! UIkit 2.24.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /*! UIkit 2.26.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
.uk-placeholder{margin-bottom:15px;padding:15px;border:1px dashed #ddd;background:#fafafa;color:#444}*+.uk-placeholder{margin-top:15px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder-large{padding-top:80px;padding-bottom:80px} .uk-placeholder{margin-bottom:15px;padding:15px;border:1px dashed #ddd;background:#fafafa;color:#444}*+.uk-placeholder{margin-top:15px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder-large{padding-top:80px;padding-bottom:80px}

View File

@ -1,2 +1,2 @@
/*! UIkit 2.24.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /*! UIkit 2.26.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
.uk-progress{box-sizing:border-box;height:20px;margin-bottom:15px;background:#f5f5f5;overflow:hidden;line-height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);border-radius:4px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#00a8e6;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#8cc14c}.uk-progress-warning .uk-progress-bar{background-color:#faa732}.uk-progress-danger .uk-progress-bar{background-color:#da314b}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}.uk-progress-mini,.uk-progress-small{border-radius:500px} .uk-progress{box-sizing:border-box;height:20px;margin-bottom:15px;background:#f5f5f5;overflow:hidden;line-height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);border-radius:4px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#00a8e6;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#8cc14c}.uk-progress-warning .uk-progress-bar{background-color:#faa732}.uk-progress-danger .uk-progress-bar{background-color:#da314b}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}.uk-progress-mini,.uk-progress-small{border-radius:500px}

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
/*! UIkit 2.24.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /*! UIkit 2.26.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)} .uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)}

View File

@ -1,7 +1,6 @@
<!DOCTYPE HTML> <!DOCTYPE HTML>
<html> <html>
<head> <head>
<base href="<?php echo HTML_PATH_ADMIN_THEME ?>">
<meta charset="<?php echo CHARSET ?>"> <meta charset="<?php echo CHARSET ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noindex,nofollow"> <meta name="robots" content="noindex,nofollow">
@ -9,23 +8,22 @@
<title><?php echo $layout['title'] ?></title> <title><?php echo $layout['title'] ?></title>
<!-- Favicon --> <!-- Favicon -->
<link rel="shortcut icon" type="image/x-icon" href="./img/favicon.png"> <link rel="shortcut icon" type="image/x-icon" href="<?php echo HTML_PATH_ADMIN_THEME.'img/favicon.png' ?>">
<!-- CSS --> <!-- CSS -->
<link rel="stylesheet" type="text/css" href="./css/uikit/uikit.almost-flat.min.css?version=<?php echo BLUDIT_VERSION ?>"> <link rel="stylesheet" type="text/css" href="<?php echo HTML_PATH_ADMIN_THEME.'css/uikit/uikit.almost-flat.min.css?version='.BLUDIT_VERSION ?>">
<link rel="stylesheet" type="text/css" href="./css/uikit/upload.almost-flat.min.css?version=<?php echo BLUDIT_VERSION ?>"> <link rel="stylesheet" type="text/css" href="<?php echo HTML_PATH_ADMIN_THEME.'css/uikit/upload.almost-flat.min.css?version='.BLUDIT_VERSION ?>">
<link rel="stylesheet" type="text/css" href="./css/uikit/form-file.almost-flat.min.css?version=<?php echo BLUDIT_VERSION ?>"> <link rel="stylesheet" type="text/css" href="<?php echo HTML_PATH_ADMIN_THEME.'css/uikit/form-file.almost-flat.min.css?version='.BLUDIT_VERSION ?>">
<link rel="stylesheet" type="text/css" href="./css/uikit/placeholder.almost-flat.min.css?version=<?php echo BLUDIT_VERSION ?>"> <link rel="stylesheet" type="text/css" href="<?php echo HTML_PATH_ADMIN_THEME.'css/uikit/placeholder.almost-flat.min.css?version='.BLUDIT_VERSION ?>">
<link rel="stylesheet" type="text/css" href="./css/uikit/progress.almost-flat.min.css?version=<?php echo BLUDIT_VERSION ?>"> <link rel="stylesheet" type="text/css" href="<?php echo HTML_PATH_ADMIN_THEME.'css/uikit/progress.almost-flat.min.css?version='.BLUDIT_VERSION ?>">
<link rel="stylesheet" type="text/css" href="<?php echo HTML_PATH_ADMIN_THEME.'css/default.css?version='.BLUDIT_VERSION ?>">
<link rel="stylesheet" type="text/css" href="./css/default.css?version=<?php echo BLUDIT_VERSION ?>"> <link rel="stylesheet" type="text/css" href="<?php echo HTML_PATH_ADMIN_THEME.'css/jquery.datetimepicker.css?version='.BLUDIT_VERSION ?>">
<link rel="stylesheet" type="text/css" href="./css/jquery.datetimepicker.css?version=<?php echo BLUDIT_VERSION ?>">
<!-- Javascript --> <!-- Javascript -->
<script charset="utf-8" src="./js/jquery.min.js?version=<?php echo BLUDIT_VERSION ?>"></script> <script charset="utf-8" src="<?php echo HTML_PATH_ADMIN_THEME.'js/jquery.min.js?version='.BLUDIT_VERSION ?>"></script>
<script charset="utf-8" src="./js/uikit/uikit.min.js?version=<?php echo BLUDIT_VERSION ?>"></script> <script charset="utf-8" src="<?php echo HTML_PATH_ADMIN_THEME.'js/uikit/uikit.min.js?version='.BLUDIT_VERSION ?>"></script>
<script charset="utf-8" src="./js/uikit/upload.min.js?version=<?php echo BLUDIT_VERSION ?>"></script> <script charset="utf-8" src="<?php echo HTML_PATH_ADMIN_THEME.'js/uikit/upload.min.js?version='.BLUDIT_VERSION ?>"></script>
<script charset="utf-8" src="./js/jquery.datetimepicker.js?version=<?php echo BLUDIT_VERSION ?>"></script> <script charset="utf-8" src="<?php echo HTML_PATH_ADMIN_THEME.'js/jquery.datetimepicker.js?version='.BLUDIT_VERSION ?>"></script>
<!-- Plugins --> <!-- Plugins -->
<?php Theme::plugins('adminHead') ?> <?php Theme::plugins('adminHead') ?>
@ -43,8 +41,8 @@ $(document).ready(function() {
echo '$("#alert").slideDown().delay(3500).slideUp();'; echo '$("#alert").slideDown().delay(3500).slideUp();';
} }
?> ?>
$("#alert").click(function() { $(window).click(function() {
$(this).hide(); $("#alert").hide();
}); });
}); });
</script> </script>
@ -61,12 +59,12 @@ $(document).ready(function() {
<ul class="uk-navbar-nav"> <ul class="uk-navbar-nav">
<li class="bludit-logo">BLUDIT</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']=='dashboard')?'class="uk-active"':'' ?> ><a href="<?php echo HTML_PATH_ADMIN_ROOT.'dashboard' ?>"><?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-post')?'class="uk-active"':'' ?>><a href="<?php echo HTML_PATH_ADMIN_ROOT.'new-post' ?>"><?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> <li <?php echo ($layout['view']=='new-page')?'class="uk-active"':'' ?>><a href="<?php echo HTML_PATH_ADMIN_ROOT.'new-page' ?>"><?php $L->p('New page') ?></a></li>
<li class="uk-parent" data-uk-dropdown> <li class="uk-parent" data-uk-dropdown>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'manage-posts' ?>"><i class="uk-icon-clone"></i> <?php $L->p('Manage') ?> ▾</a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'manage-posts' ?>"><?php $L->p('Manage') ?> ▾</a>
<div class="uk-dropdown uk-dropdown-navbar"> <div class="uk-dropdown uk-dropdown-navbar">
<ul class="uk-nav uk-nav-navbar"> <ul class="uk-nav uk-nav-navbar">
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'manage-posts' ?>"><i class="uk-icon-folder-o"></i> <?php $L->p('Posts') ?></a></li> <li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'manage-posts' ?>"><i class="uk-icon-folder-o"></i> <?php $L->p('Posts') ?></a></li>
@ -80,27 +78,30 @@ $(document).ready(function() {
<?php if($Login->role() == 'admin') { ?> <?php if($Login->role() == 'admin') { ?>
<li class="uk-parent" data-uk-dropdown> <li class="uk-parent" data-uk-dropdown>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-general' ?>"><i class="uk-icon-cog"></i> <?php $L->p('Settings') ?> ▾</a> <a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-general' ?>"><?php $L->p('Settings') ?> ▾</a>
<div class="uk-dropdown uk-dropdown-navbar"> <div class="uk-dropdown uk-dropdown-navbar">
<ul class="uk-nav uk-nav-navbar"> <ul class="uk-nav uk-nav-navbar">
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-general' ?>"><i class="uk-icon-th-large"></i> <?php $L->p('General') ?></a></li> <li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-general' ?>"><i class="uk-icon-cog"></i> <?php $L->p('General') ?></a></li>
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-advanced' ?>"><i class="uk-icon-th"></i> <?php $L->p('Advanced') ?></a></li> <li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-advanced' ?>"><i class="uk-icon-cogs"></i> <?php $L->p('Advanced') ?></a></li>
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-regional' ?>"><i class="uk-icon-globe"></i> <?php $L->p('Language and timezone') ?></a></li> <li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'settings-regional' ?>"><i class="uk-icon-globe"></i> <?php $L->p('Language and timezone') ?></a></li>
<li class="uk-nav-divider"></li>
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'plugins' ?>"><i class="uk-icon-puzzle-piece"></i> <?php $L->p('Plugins') ?></a></li> <li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'plugins' ?>"><i class="uk-icon-puzzle-piece"></i> <?php $L->p('Plugins') ?></a></li>
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'themes' ?>"><i class="uk-icon-paint-brush"></i> <?php $L->p('Themes') ?></a></li> <li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'themes' ?>"><i class="uk-icon-paint-brush"></i> <?php $L->p('Themes') ?></a></li>
<li class="uk-nav-divider"></li>
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'about' ?>"><?php $L->p('About') ?></a></li> <li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'about' ?>"><i class="uk-icon-support"></i> <?php $L->p('About') ?></a></li>
</ul> </ul>
</div> </div>
</li> </li>
<?php } ?> <?php } ?>
<li><a target="_blank" href="<?php echo HTML_PATH_ROOT ?>"><?php $L->p('Website') ?></a></li>
</ul> </ul>
<div class="uk-navbar-flip"> <div class="uk-navbar-flip">
<ul class="uk-navbar-nav"> <ul class="uk-navbar-nav">
<li class="uk-parent" data-uk-dropdown> <li class="uk-parent" data-uk-dropdown>
<?php <?php
$profilePictureSrc = HTML_PATH_ADMIN_THEME_IMG.'default.png'; $profilePictureSrc = HTML_PATH_ADMIN_THEME_IMG.'default.png';
if(file_exists(PATH_UPLOADS_PROFILES.$Login->username().'.png')) { if(file_exists(PATH_UPLOADS_PROFILES.$Login->username().'.png')) {
@ -108,13 +109,11 @@ $(document).ready(function() {
} }
?> ?>
<a href="<?php echo HTML_PATH_ADMIN_ROOT.'edit-user/'.$Login->username() ?>"> <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() ?> <img class="uk-border-circle" width="28px" src="<?php echo $profilePictureSrc ?>" alt=""> <?php $L->p('Welcome') ?> <?php echo $Login->username() ?>
</a> </a>
<div class="uk-dropdown uk-dropdown-navbar">
<div class="uk-dropdown uk-dropdown-navbar bludit-user-navbar">
<ul class="uk-nav uk-nav-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>
<li class="uk-nav-divider"></li>
<li><a target="_blank" href="<?php echo HTML_PATH_ROOT ?>"><?php $L->p('Website') ?></a></li>
<li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'logout' ?>"><?php $L->p('Logout') ?></a></li> <li><a href="<?php echo HTML_PATH_ADMIN_ROOT.'logout' ?>"><?php $L->p('Logout') ?></a></li>
</ul> </ul>
</div> </div>

View File

@ -27,7 +27,7 @@ class HTML {
// Prevent the form submit when press enter key. // Prevent the form submit when press enter key.
$("form").keypress(function(e) { $("form").keypress(function(e) {
if (e.which == 13) { if( (e.which == 13) && (e.target.type !== "textarea") ) {
return false; return false;
} }
}); });
@ -205,11 +205,11 @@ class HTML {
public static function bluditCoverImage($coverImage="") public static function bluditCoverImage($coverImage="")
{ {
global $L;
// Javascript code // Javascript code
include(PATH_JS.'bludit-cover-image.js'); include(PATH_JS.'bludit-cover-image.js');
global $L;
$style = ''; $style = '';
if(!empty($coverImage)) { if(!empty($coverImage)) {
$style = 'background-image: url('.HTML_PATH_UPLOADS_THUMBNAILS.$coverImage.')'; $style = 'background-image: url('.HTML_PATH_UPLOADS_THUMBNAILS.$coverImage.')';
@ -263,11 +263,11 @@ class HTML {
public static function bluditImagesV8() public static function bluditImagesV8()
{ {
global $L;
// Javascript code // Javascript code
include(PATH_JS.'bludit-images-v8.js'); include(PATH_JS.'bludit-images-v8.js');
global $L;
$html = '<!-- BLUDIT IMAGES V8 -->'; $html = '<!-- BLUDIT IMAGES V8 -->';
$html .= ' $html .= '
<div id="bludit-images-v8" class="uk-modal"> <div id="bludit-images-v8" class="uk-modal">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,256 @@
/*! UIkit 2.24.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) {
!function(e){var t;window.UIkit&&(t=e(UIkit)),"function"==typeof define&&define.amd&&define("uikit-upload",["uikit"],function(){return t||e(UIkit)})}(function(e){"use strict";function t(o,a){function r(t,n){var o=new FormData,a=new XMLHttpRequest;if(n.before(n,t)!==!1){for(var r,i=0;r=t[i];i++)o.append(n.param,r);for(var l in n.params)o.append(l,n.params[l]);a.upload.addEventListener("progress",function(e){var t=e.loaded/e.total*100;n.progress(t,e)},!1),a.addEventListener("loadstart",function(e){n.loadstart(e)},!1),a.addEventListener("load",function(e){n.load(e)},!1),a.addEventListener("loadend",function(e){n.loadend(e)},!1),a.addEventListener("error",function(e){n.error(e)},!1),a.addEventListener("abort",function(e){n.abort(e)},!1),a.open(n.method,n.action,!0),"json"==n.type&&a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){if(n.readystatechange(a),4==a.readyState){var t=a.responseText;if("json"==n.type)try{t=e.$.parseJSON(t)}catch(o){t=!1}n.complete(t,a)}},n.beforeSend(a),a.send(o)}}if(!e.support.ajaxupload)return this;if(a=e.$.extend({},t.defaults,a),o.length){if("*.*"!==a.allow)for(var i,l=0;i=o[l];l++)if(!n(a.allow,i.name))return"string"==typeof a.notallowed?alert(a.notallowed):a.notallowed(i,a),void 0;var s=a.complete;if(a.single){var d=o.length,f=0,p=!0;a.beforeAll(o),a.complete=function(e,t){f+=1,s(e,t),a.filelimit&&f>=a.filelimit&&(p=!1),p&&d>f?r([o[f]],a):a.allcomplete(e,t)},r([o[0]],a)}else a.complete=function(e,t){s(e,t),a.allcomplete(e,t)},r(o,a)}}function n(e,t){var n="^"+e.replace(/\//g,"\\/").replace(/\*\*/g,"(\\/[^\\/]+)*").replace(/\*/g,"[^\\/]+").replace(/((?!\\))\?/g,"$1.")+"$";return n="^"+n+"$",null!==t.match(new RegExp(n,"i"))}return e.component("uploadSelect",{init:function(){var e=this;this.on("change",function(){t(e.element[0].files,e.options);var n=e.element.clone(!0).data("uploadSelect",e);e.element.replaceWith(n),e.element=n})}}),e.component("uploadDrop",{defaults:{dragoverClass:"uk-dragover"},init:function(){var e=this,n=!1;this.on("drop",function(n){n.dataTransfer&&n.dataTransfer.files&&(n.stopPropagation(),n.preventDefault(),e.element.removeClass(e.options.dragoverClass),e.element.trigger("dropped.uk.upload",[n.dataTransfer.files]),t(n.dataTransfer.files,e.options))}).on("dragenter",function(e){e.stopPropagation(),e.preventDefault()}).on("dragover",function(t){t.stopPropagation(),t.preventDefault(),n||(e.element.addClass(e.options.dragoverClass),n=!0)}).on("dragleave",function(t){t.stopPropagation(),t.preventDefault(),e.element.removeClass(e.options.dragoverClass),n=!1})}}),e.support.ajaxupload=function(){function e(){var e=document.createElement("INPUT");return e.type="file","files"in e}function t(){var e=new XMLHttpRequest;return!!(e&&"upload"in e&&"onprogress"in e.upload)}function n(){return!!window.FormData}return e()&&t()&&n()}(),e.support.ajaxupload&&e.$.event.props.push("dataTransfer"),t.defaults={action:"",single:!0,method:"POST",param:"files[]",params:{},allow:"*.*",type:"text",filelimit:!1,before:function(){},beforeSend:function(){},beforeAll:function(){},loadstart:function(){},load:function(){},loadend:function(){},error:function(){},abort:function(){},progress:function(){},complete:function(){},allcomplete:function(){},readystatechange:function(){},notallowed:function(e,t){alert("Only the following file types are allowed: "+t.allow)}},e.Utils.xhrupload=t,t});
var component;
if (window.UIkit) {
component = addon(UIkit);
}
if (typeof define == "function" && define.amd) {
define("uikit-upload", ["uikit"], function(){
return component || addon(UIkit);
});
}
})(function(UI){
"use strict";
UI.component('uploadSelect', {
init: function() {
var $this = this;
this.on("change", function() {
xhrupload($this.element[0].files, $this.options);
var twin = $this.element.clone(true).data('uploadSelect', $this);
$this.element.replaceWith(twin);
$this.element = twin;
});
}
});
UI.component('uploadDrop', {
defaults: {
'dragoverClass': 'uk-dragover'
},
init: function() {
var $this = this, hasdragCls = false;
this.on("drop", function(e){
if (e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files) {
e.stopPropagation();
e.preventDefault();
$this.element.removeClass($this.options.dragoverClass);
$this.element.trigger('dropped.uk.upload', [e.originalEvent.dataTransfer.files]);
xhrupload(e.originalEvent.dataTransfer.files, $this.options);
}
}).on("dragenter", function(e){
e.stopPropagation();
e.preventDefault();
}).on("dragover", function(e){
e.stopPropagation();
e.preventDefault();
if (!hasdragCls) {
$this.element.addClass($this.options.dragoverClass);
hasdragCls = true;
}
}).on("dragleave", function(e){
e.stopPropagation();
e.preventDefault();
$this.element.removeClass($this.options.dragoverClass);
hasdragCls = false;
});
}
});
UI.support.ajaxupload = (function() {
function supportFileAPI() {
var fi = document.createElement('INPUT'); fi.type = 'file'; return 'files' in fi;
}
function supportAjaxUploadProgressEvents() {
var xhr = new XMLHttpRequest(); return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));
}
function supportFormData() {
return !! window.FormData;
}
return supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData();
})();
function xhrupload(files, settings) {
if (!UI.support.ajaxupload){
return this;
}
settings = UI.$.extend({}, xhrupload.defaults, settings);
if (!files.length){
return;
}
if (settings.allow !== '*.*') {
for(var i=0,file;file=files[i];i++) {
if(!matchName(settings.allow, file.name)) {
if(typeof(settings.notallowed) == 'string') {
alert(settings.notallowed);
} else {
settings.notallowed(file, settings);
}
return;
}
}
}
var complete = settings.complete;
if (settings.single){
var count = files.length,
uploaded = 0,
allow = true;
settings.beforeAll(files);
settings.complete = function(response, xhr){
uploaded = uploaded + 1;
complete(response, xhr);
if (settings.filelimit && uploaded >= settings.filelimit){
allow = false;
}
if (allow && uploaded<count){
upload([files[uploaded]], settings);
} else {
settings.allcomplete(response, xhr);
}
};
upload([files[0]], settings);
} else {
settings.complete = function(response, xhr){
complete(response, xhr);
settings.allcomplete(response, xhr);
};
upload(files, settings);
}
function upload(files, settings){
// upload all at once
var formData = new FormData(), xhr = new XMLHttpRequest();
if (settings.before(settings, files)===false) return;
for (var i = 0, f; f = files[i]; i++) { formData.append(settings.param, f); }
for (var p in settings.params) { formData.append(p, settings.params[p]); }
// Add any event handlers here...
xhr.upload.addEventListener("progress", function(e){
var percent = (e.loaded / e.total)*100;
settings.progress(percent, e);
}, false);
xhr.addEventListener("loadstart", function(e){ settings.loadstart(e); }, false);
xhr.addEventListener("load", function(e){ settings.load(e); }, false);
xhr.addEventListener("loadend", function(e){ settings.loadend(e); }, false);
xhr.addEventListener("error", function(e){ settings.error(e); }, false);
xhr.addEventListener("abort", function(e){ settings.abort(e); }, false);
xhr.open(settings.method, settings.action, true);
if (settings.type=="json") {
xhr.setRequestHeader("Accept", "application/json");
}
xhr.onreadystatechange = function() {
settings.readystatechange(xhr);
if (xhr.readyState==4){
var response = xhr.responseText;
if (settings.type=="json") {
try {
response = UI.$.parseJSON(response);
} catch(e) {
response = false;
}
}
settings.complete(response, xhr);
}
};
settings.beforeSend(xhr);
xhr.send(formData);
}
}
xhrupload.defaults = {
'action': '',
'single': true,
'method': 'POST',
'param' : 'files[]',
'params': {},
'allow' : '*.*',
'type' : 'text',
'filelimit': false,
// events
'before' : function(o){},
'beforeSend' : function(xhr){},
'beforeAll' : function(){},
'loadstart' : function(){},
'load' : function(){},
'loadend' : function(){},
'error' : function(){},
'abort' : function(){},
'progress' : function(){},
'complete' : function(){},
'allcomplete' : function(){},
'readystatechange': function(){},
'notallowed' : function(file, settings){ alert('Only the following file types are allowed: '+settings.allow); }
};
function matchName(pattern, path) {
var parsedPattern = '^' + pattern.replace(/\//g, '\\/').
replace(/\*\*/g, '(\\/[^\\/]+)*').
replace(/\*/g, '[^\\/]+').
replace(/((?!\\))\?/g, '$1.') + '$';
parsedPattern = '^' + parsedPattern + '$';
return (path.match(new RegExp(parsedPattern, 'i')) !== null);
}
UI.Utils.xhrupload = xhrupload;
return xhrupload;
});

View File

@ -31,7 +31,7 @@
<h1>BLUDIT</h1> <h1>BLUDIT</h1>
<?php <?php
if(Alert::defined()) { if(Alert::defined()) {
echo '<div class="uk-alert uk-alert-danger">'.Alert::get().'</div>'; echo '<div class="uk-alert">'.Alert::get().'</div>';
} }
if( Sanitize::pathFile(PATH_ADMIN_VIEWS, $layout['view'].'.php') ) { if( Sanitize::pathFile(PATH_ADMIN_VIEWS, $layout['view'].'.php') ) {

View File

@ -14,8 +14,18 @@ echo '
'; ';
echo '<tr>'; echo '<tr>';
echo '<td>Bludit</td>'; echo '<td>Bludit version</td>';
echo '<td>'.BLUDIT_VERSION.' ('.BLUDIT_CODENAME.')</td>'; echo '<td>'.BLUDIT_VERSION.'</td>';
echo '</tr>';
echo '<tr>';
echo '<td>Bludit codename</td>';
echo '<td>'.BLUDIT_CODENAME.'</td>';
echo '</tr>';
echo '<tr>';
echo '<td>Bludit build</td>';
echo '<td>'.BLUDIT_BUILD.'</td>';
echo '</tr>'; echo '</tr>';
echo '<tr>'; echo '<tr>';

View File

@ -1,3 +1,5 @@
<?php if(empty($_POST)) { ?>
<div class="login-form"> <div class="login-form">
<form method="post" action="" class="uk-form" autocomplete="off"> <form method="post" action="" class="uk-form" autocomplete="off">
@ -16,4 +18,6 @@
</div> </div>
<?php } ?>
<a class="login-email" href="<?php echo HTML_PATH_ADMIN_ROOT.'login' ?>"><i class="uk-icon-chevron-left"></i> <?php $L->p('Back to login form') ?></a> <a class="login-email" href="<?php echo HTML_PATH_ADMIN_ROOT.'login' ?>"><i class="uk-icon-chevron-left"></i> <?php $L->p('Back to login form') ?></a>

View File

@ -20,4 +20,4 @@
</div> </div>
<a class="login-email" href="<?php echo HTML_PATH_ADMIN_ROOT.'login-email' ?>"><i class="uk-icon-envelope-o"></i> <?php $L->p('Send me a login access code') ?></a> <a class="login-email" href="<?php echo HTML_PATH_ADMIN_ROOT.'login-email' ?>"><i class="uk-icon-envelope-o"></i> <?php $L->p('Email access code') ?></a>

View File

@ -7,7 +7,6 @@ echo '
<thead> <thead>
<tr> <tr>
<th>'.$L->g('Title').'</th> <th>'.$L->g('Title').'</th>
<th>'.$L->g('Parent').'</th>
<th class="uk-text-center">'.$L->g('Position').'</th> <th class="uk-text-center">'.$L->g('Position').'</th>
<th>'.$L->g('Friendly URL').'</th> <th>'.$L->g('Friendly URL').'</th>
</tr> </tr>
@ -15,23 +14,42 @@ echo '
<tbody> <tbody>
'; ';
foreach($pagesParents as $parentKey=>$pageList) foreach($pagesParents[NO_PARENT_CHAR] as $key=>$db)
{ {
foreach($pageList as $Page) // Parent page
{ $Page = $pages[$key];
if($parentKey!==NO_PARENT_CHAR) {
$parentTitle = $pages[$Page->parentKey()]->title(); $friendlyURL = Text::isEmpty($Url->filters('page')) ? '/'.$Page->key() : '/'.$Url->filters('page').'/'.$Page->key();
}
else {
$parentTitle = '';
}
echo '<tr>'; echo '<tr>';
echo '<td>'.($Page->parentKey()?'- ':'').'<a href="'.HTML_PATH_ADMIN_ROOT.'edit-page/'.$Page->key().'">'.($Page->published()?'':'<span class="label-draft">'.$Language->g('Draft').'</span> ').($Page->title()?$Page->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a></td>'; echo '<td>';
echo '<td>'.$parentTitle.'</td>'; echo '<a href="'.HTML_PATH_ADMIN_ROOT.'edit-page/'.$Page->key().'">'.($Page->published()?'':'<span class="label-draft">'.$Language->g('Draft').'</span> ').($Page->title()?$Page->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a>';
echo '</td>';
echo '<td class="uk-text-center">'.$Page->position().'</td>'; echo '<td class="uk-text-center">'.$Page->position().'</td>';
echo '<td><a target="_blank" href="'.$Page->permalink().'">'.$Url->filters('page').'/'.$Page->key().'</a></td>'; echo '<td><a target="_blank" href="'.$Page->permalink().'">'.$friendlyURL.'</a></td>';
echo '</tr>'; echo '</tr>';
// If the page has children
if(isset($pagesParents[$Page->key()]))
{
// Get the children
$children = $pagesParents[$Page->key()];
foreach($children as $keyChildren=>$dbChildren)
{
// Parent page
$Page = $pages[$keyChildren];
$friendlyURL = Text::isEmpty($Url->filters('page')) ? '/'.$Page->key() : '/'.$Url->filters('page').'/'.$Page->key();
echo '<tr class="children">';
echo '<td class="children">';
echo '<a href="'.HTML_PATH_ADMIN_ROOT.'edit-page/'.$Page->key().'">'.($Page->published()?'':'<span class="label-draft">'.$Language->g('Draft').'</span> ').($Page->title()?$Page->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a>';
echo '</td>';
echo '<td class="uk-text-center">'.$Page->position().'</td>';
echo '<td><a target="_blank" href="'.$Page->permalink().'">'.$friendlyURL.'</a></td>';
echo '</tr>';
}
} }
} }

View File

@ -27,7 +27,10 @@ echo '
echo '<tr>'; 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><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->dateRaw().'</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>';
$friendlyURL = Text::isEmpty($Url->filters('post')) ? '/'.$Post->key() : '/'.$Url->filters('post').'/'.$Post->key();
echo '<td><a target="_blank" href="'.$Post->permalink().'">'.$friendlyURL.'</a></td>';
echo '</tr>'; echo '</tr>';
} }

View File

@ -37,17 +37,6 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
'tip'=>$L->g('the-url-of-your-site') 'tip'=>$L->g('the-url-of-your-site')
)); ));
HTML::legend(array('value'=>$L->g('Command Line Mode')));
HTML::formSelect(array(
'name'=>'cliMode',
'label'=>$L->g('Cli Mode'),
'options'=>array('true'=>$L->g('Enabled'), 'false'=>$L->g('Disabled')),
'selected'=>$Site->cliMode(),
'class'=>'uk-width-1-3 uk-form-medium',
'tip'=>$L->g('enable-the-command-line-mode-if-you-add-edit')
));
HTML::legend(array('value'=>$L->g('Email account settings'))); HTML::legend(array('value'=>$L->g('Email account settings')));
HTML::formInputText(array( HTML::formInputText(array(

View File

@ -51,7 +51,6 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
'label'=>'Twitter', 'label'=>'Twitter',
'value'=>$Site->twitter(), 'value'=>$Site->twitter(),
'class'=>'uk-width-1-2 uk-form-medium', 'class'=>'uk-width-1-2 uk-form-medium',
'placeholder'=>'https://twitter.com/USERNAME',
'tip'=>'' 'tip'=>''
)); ));
@ -60,7 +59,6 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
'label'=>'Facebook', 'label'=>'Facebook',
'value'=>$Site->facebook(), 'value'=>$Site->facebook(),
'class'=>'uk-width-1-2 uk-form-medium', 'class'=>'uk-width-1-2 uk-form-medium',
'placeholder'=>'https://www.facebook.com/USERNAME',
'tip'=>'' 'tip'=>''
)); ));
@ -69,16 +67,14 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
'label'=>'Google+', 'label'=>'Google+',
'value'=>$Site->googlePlus(), 'value'=>$Site->googlePlus(),
'class'=>'uk-width-1-2 uk-form-medium', 'class'=>'uk-width-1-2 uk-form-medium',
'placeholder'=>'https://plus.google.com/+USERNAME',
'tip'=>'' 'tip'=>''
)); ));
HTML::formInputText(array( HTML::formInputText(array(
'name'=>'instagram', 'name'=>'instagram',
'label'=>'Instagram', 'label'=>'Instagram',
'value'=>$Site->googlePlus(), 'value'=>$Site->instagram(),
'class'=>'uk-width-1-2 uk-form-medium', 'class'=>'uk-width-1-2 uk-form-medium',
'placeholder'=>'https://www.instagram.com/USERNAME',
'tip'=>'' 'tip'=>''
)); ));
@ -87,7 +83,6 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
'label'=>'Github', 'label'=>'Github',
'value'=>$Site->github(), 'value'=>$Site->github(),
'class'=>'uk-width-1-2 uk-form-medium', 'class'=>'uk-width-1-2 uk-form-medium',
'placeholder'=>'https://github.com/USERNAME',
'tip'=>'' 'tip'=>''
)); ));

View File

@ -34,7 +34,7 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
'label'=>$L->g('Locale'), 'label'=>$L->g('Locale'),
'value'=>$Site->locale(), 'value'=>$Site->locale(),
'class'=>'uk-width-1-2 uk-form-medium', 'class'=>'uk-width-1-2 uk-form-medium',
'tip'=>$L->g('you-can-use-this-field-to-define-a-set-off') 'tip'=>$L->g('you-can-use-this-field-to-define-a-set-of')
)); ));
HTML::legend(array('value'=>$L->g('Date and time formats'))); HTML::legend(array('value'=>$L->g('Date and time formats')));
@ -43,7 +43,8 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
'name'=>'dateFormat', 'name'=>'dateFormat',
'label'=>$L->g('Date format'), 'label'=>$L->g('Date format'),
'value'=>$Site->dateFormat(), 'value'=>$Site->dateFormat(),
'class'=>'uk-width-1-2 uk-form-medium' 'class'=>'uk-width-1-2 uk-form-medium',
'tip'=>$L->g('Current format').': '.Date::current($Site->dateFormat())
)); ));
echo '<div class="uk-form-row"> echo '<div class="uk-form-row">

View File

@ -16,7 +16,7 @@ HTML::formOpen(array('id'=>'edit-user-profile-form','class'=>'uk-form-horizontal
'value'=>$_user['username'] 'value'=>$_user['username']
)); ));
HTML::legend(array('value'=>$L->g('New password'))); HTML::legend(array('value'=>$L->g('New password'), 'class'=>'first-child'));
HTML::formInputText(array( HTML::formInputText(array(
'name'=>'usernameDisable', 'name'=>'usernameDisable',

View File

@ -40,15 +40,15 @@ if($type=='profilePicture')
$username = Sanitize::html($_POST['username']); $username = Sanitize::html($_POST['username']);
$tmpName = $username.'.png'; $tmpName = $username.'.png';
$Image = new Image(); $Image = new Image();
$Image->setImage(PATH_TMP.'original'.'.'.$fileExtension, '400', '400', 'crop'); $Image->setImage(PATH_TMP.'original'.'.'.$fileExtension, PROFILE_IMG_WIDTH, PROFILE_IMG_HEIGHT, 'crop');
$Image->saveImage(PATH_UPLOADS_PROFILES.$tmpName, 100, false, true); $Image->saveImage(PATH_UPLOADS_PROFILES.$tmpName, PROFILE_IMG_QUALITY, false, true);
} }
// --- OTHERS --- // --- OTHERS ---
else { else {
// Generate the thumbnail // Generate the thumbnail
$Image = new Image(); $Image = new Image();
$Image->setImage(PATH_TMP.'original'.'.'.$fileExtension, THUMBNAILS_WIDTH, THUMBNAILS_HEIGHT, 'crop'); $Image->setImage(PATH_TMP.'original'.'.'.$fileExtension, THUMBNAILS_WIDTH, THUMBNAILS_HEIGHT, 'crop');
$Image->saveImage(PATH_UPLOADS_THUMBNAILS.$tmpName, 100, true); $Image->saveImage(PATH_UPLOADS_THUMBNAILS.$tmpName, THUMBNAILS_QUALITY, true);
// Move the original to the upload folder. // Move the original to the upload folder.
rename(PATH_TMP.'original'.'.'.$fileExtension, PATH_UPLOADS.$tmpName); rename(PATH_TMP.'original'.'.'.$fileExtension, PATH_UPLOADS.$tmpName);

View File

@ -1,10 +1,10 @@
<?php defined('BLUDIT') or die('Bludit CMS.'); <?php defined('BLUDIT') or die('Bludit CMS.');
// Bludit version // Bludit version
define('BLUDIT_VERSION', 'githubVersion'); define('BLUDIT_VERSION', '1.5beta');
define('BLUDIT_CODENAME', ''); define('BLUDIT_CODENAME', '');
define('BLUDIT_RELEASE_DATE', ''); define('BLUDIT_RELEASE_DATE', '2016-07-16');
define('BLUDIT_BUILD', '20160201'); define('BLUDIT_BUILD', '20160716');
// Debug mode // Debug mode
define('DEBUG_MODE', TRUE); define('DEBUG_MODE', TRUE);
@ -65,12 +65,20 @@ define('ALERT_STATUS_OK', 0);
// Alert status fail // Alert status fail
define('ALERT_STATUS_FAIL', 1); define('ALERT_STATUS_FAIL', 1);
// Salt length // Amount of thumbnails shown on Bludit Quick images
define('THUMBNAILS_WIDTH', 400);
define('THUMBNAILS_HEIGHT', 400);
define('THUMBNAILS_AMOUNT', 6); define('THUMBNAILS_AMOUNT', 6);
// Salt length // Thubmnails size
define('THUMBNAILS_WIDTH', 400);
define('THUMBNAILS_HEIGHT', 400);
define('THUMBNAILS_QUALITY', 100); // 100%
// Profile image size
define('PROFILE_IMG_WIDTH', 400);
define('PROFILE_IMG_HEIGHT', 400);
define('PROFILE_IMG_QUALITY', 100); // 100%
// Password salt length
define('SALT_LENGTH', 8); define('SALT_LENGTH', 8);
// Page brake string // Page brake string
@ -82,8 +90,8 @@ define('NO_PARENT_CHAR', '3849abb4cb7abd24c2d8dac17b216f17');
// Post per page on Manage->Posts // Post per page on Manage->Posts
define('POSTS_PER_PAGE_ADMIN', 10); define('POSTS_PER_PAGE_ADMIN', 10);
// Check if JSON encode and decode are enabled. // Cli mode status for new posts/pages
// define('JSON', function_exists('json_encode')); define('CLI_MODE', FALSE);
// Cli mode status for new posts/pages // Cli mode status for new posts/pages
define('CLI_STATUS', 'published'); define('CLI_STATUS', 'published');
@ -91,6 +99,9 @@ define('CLI_STATUS', 'published');
// Cli mode username for new posts/pages // Cli mode username for new posts/pages
define('CLI_USERNAME', 'admin'); define('CLI_USERNAME', 'admin');
// Filename for posts and pages, you can change for example, for index.md
define('FILENAME', 'index.txt');
// Database date format // Database date format
define('DB_DATE_FORMAT', 'Y-m-d H:i:s'); define('DB_DATE_FORMAT', 'Y-m-d H:i:s');
@ -106,20 +117,17 @@ define('TOKEN_EMAIL_TTL', '+15 minutes');
// Charset, default UTF-8. // Charset, default UTF-8.
define('CHARSET', 'UTF-8'); define('CHARSET', 'UTF-8');
// EXTREME FRIENDLY URL, TRUE for dissmiss internet standard
define('EXTREME_FRIENDLY_URL', false);
// Directory permissions // Directory permissions
define('DIR_PERMISSIONS', 0755); define('DIR_PERMISSIONS', 0755);
// Multibyte string extension loaded. // Set internal character encoding.
define('MB_STRING', extension_loaded('mbstring')); mb_internal_encoding(CHARSET);
if(MB_STRING) // Set HTTP output character encoding.
{ mb_http_output(CHARSET);
// Set internal character encoding.
mb_internal_encoding(CHARSET);
// Set HTTP output character encoding.
mb_http_output(CHARSET);
}
// Inclde Abstract Classes // Inclde Abstract Classes
include(PATH_ABSTRACT.'dbjson.class.php'); include(PATH_ABSTRACT.'dbjson.class.php');
@ -142,6 +150,9 @@ include(PATH_KERNEL.'parsedown.class.php');
include(PATH_KERNEL.'parsedownextra.class.php'); include(PATH_KERNEL.'parsedownextra.class.php');
include(PATH_KERNEL.'security.class.php'); include(PATH_KERNEL.'security.class.php');
// Include functions
include(PATH_KERNEL.'functions.php');
// Include Helpers Classes // Include Helpers Classes
include(PATH_HELPERS.'text.class.php'); include(PATH_HELPERS.'text.class.php');
include(PATH_HELPERS.'log.class.php'); include(PATH_HELPERS.'log.class.php');
@ -222,6 +233,8 @@ define('JQUERY', HTML_PATH_ADMIN_THEME_JS.'jquery.min.js');
// --- PHP paths with dependency --- // --- PHP paths with dependency ---
// This paths are absolutes for the OS. // This paths are absolutes for the OS.
// Depreacted, use THEME_DIR and THEME_DIR_XXX
define('PATH_THEME', PATH_ROOT.'bl-themes'.DS.$Site->theme().DS); define('PATH_THEME', PATH_ROOT.'bl-themes'.DS.$Site->theme().DS);
define('PATH_THEME_PHP', PATH_THEME.'php'.DS); define('PATH_THEME_PHP', PATH_THEME.'php'.DS);
define('PATH_THEME_CSS', PATH_THEME.'css'.DS); define('PATH_THEME_CSS', PATH_THEME.'css'.DS);
@ -229,6 +242,14 @@ define('PATH_THEME_JS', PATH_THEME.'js'.DS);
define('PATH_THEME_IMG', PATH_THEME.'img'.DS); define('PATH_THEME_IMG', PATH_THEME.'img'.DS);
define('PATH_THEME_LANG', PATH_THEME.'languages'.DS); define('PATH_THEME_LANG', PATH_THEME.'languages'.DS);
define('THEME_DIR', PATH_ROOT.'bl-themes'.DS.$Site->theme().DS);
define('THEME_DIR_PHP', PATH_THEME.'php'.DS);
define('THEME_DIR_CSS', PATH_THEME.'css'.DS);
define('THEME_DIR_JS', PATH_THEME.'js'.DS);
define('THEME_DIR_IMG', PATH_THEME.'img'.DS);
define('THEME_DIR_LANG', PATH_THEME.'languages'.DS);
// --- Absolute paths with domain --- // --- Absolute paths with domain ---
// This paths are absolutes for the user / web browsing. // This paths are absolutes for the user / web browsing.
define('DOMAIN', $Site->domain()); define('DOMAIN', $Site->domain());

View File

@ -25,6 +25,7 @@ $plugins = array(
'afterAdminLoad'=>array(), 'afterAdminLoad'=>array(),
'beforeRulesLoad'=>array(), 'beforeRulesLoad'=>array(),
'afterFormSave'=>array(),
'afterPostCreate'=>array(), 'afterPostCreate'=>array(),
'afterPostModify'=>array(), 'afterPostModify'=>array(),
@ -62,8 +63,12 @@ function buildPlugins()
// Load each plugin clasess // Load each plugin clasess
foreach($list as $pluginPath) { foreach($list as $pluginPath) {
// Check if the directory has the plugin.php
if(file_exists($pluginPath.DS.'plugin.php')) {
include($pluginPath.DS.'plugin.php'); include($pluginPath.DS.'plugin.php');
} }
}
// Get plugins clasess loaded // Get plugins clasess loaded
$pluginsDeclaredClasess = array_diff(get_declared_classes(), $currentDeclaredClasess); $pluginsDeclaredClasess = array_diff(get_declared_classes(), $currentDeclaredClasess);
@ -91,20 +96,24 @@ function buildPlugins()
$Language->add($database); $Language->add($database);
} }
// If the plugin is compatible with the Bludit version, add to arrays
if($Plugin->isCompatible()) {
// Push Plugin to array all plugins installed and not installed. // Push Plugin to array all plugins installed and not installed.
$plugins['all'][$pluginClass] = $Plugin; $plugins['all'][$pluginClass] = $Plugin;
// If the plugin is installed, order by hooks. // If the plugin is installed, order by hooks.
if($Plugin->installed()) if($Plugin->installed()) {
{
foreach($pluginsEvents as $event=>$value) foreach($pluginsEvents as $event=>$value) {
{
if(method_exists($Plugin, $event)) { if(method_exists($Plugin, $event)) {
array_push($plugins[$event], $Plugin); array_push($plugins[$event], $Plugin);
} }
} }
} }
} }
}
} }
// ============================================================================ // ============================================================================

View File

@ -8,123 +8,13 @@
// Filter by page number, by tag, etc. // Filter by page number, by tag, etc.
$posts = array(); $posts = array();
// ============================================================================
// Functions
// ============================================================================
function reIndexTagsPosts()
{
global $dbPosts;
global $dbTags;
// Remove unpublished.
$dbPosts->removeUnpublished();
// Regenerate the tags index for posts.
$dbTags->reindexPosts( $dbPosts->db );
// Restore the database, before remove the unpublished.
$dbPosts->restoreDB();
return true;
}
function buildPost($key)
{
global $dbPosts;
global $dbUsers;
global $Parsedown;
global $Site;
// Post object, content from FILE.
$Post = new Post($key);
if( !$Post->isValid() ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from file with key: '.$key);
return false;
}
// Post database, content from DATABASE JSON.
$db = $dbPosts->getPostDB($key);
if( !$db ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from database with key: '.$key);
return false;
}
// Foreach field from DATABASE.
foreach($db as $field=>$value) {
$Post->setField($field, $value);
}
// Content in raw format
$contentRaw = $Post->content();
$Post->setField('contentRaw', $contentRaw, true);
// Parse the content
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
$content = $Parsedown->text($content); // Parse Markdown.
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
$Post->setField('content', $content, true);
// Pagebrake
$explode = explode(PAGE_BREAK, $content);
$Post->setField('breakContent', $explode[0], true);
$Post->setField('readMore', !empty($explode[1]), true);
// Date format
$postDate = $Post->date();
$Post->setField('dateRaw', $postDate, true);
$postDateFormated = $Post->dateRaw( $Site->dateFormat() );
$Post->setField('date', $postDateFormated, true);
// User object
$username = $Post->username();
$Post->setField('user', $dbUsers->getUser($username));
return $Post;
}
function buildPostsForPage($pageNumber=0, $amount=POSTS_PER_PAGE_ADMIN, $removeUnpublished=true, $tagKey=false)
{
global $dbPosts;
global $dbTags;
global $Url;
$posts = array();
if($tagKey) {
// Get the keys list from tags database, this database is optimized for this case.
$list = $dbTags->getList($pageNumber, $amount, $tagKey);
}
else {
// Get the keys list from posts database.
$list = $dbPosts->getList($pageNumber, $amount, $removeUnpublished);
}
// There are not posts for the page number then set the page notfound
if(empty($list) && $pageNumber>0) {
$Url->setNotFound(true);
}
// Foreach post key, build the post.
foreach($list as $postKey=>$values)
{
$Post = buildPost($postKey);
if($Post!==false) {
array_push($posts, $Post);
}
}
return $posts;
}
// ============================================================================ // ============================================================================
// Main // Main
// ============================================================================ // ============================================================================
// Search for changes on posts by the user. // Search for changes on posts by the user.
if( $Site->cliMode() ) { if( CLI_MODE && false) {
if($dbPosts->regenerateCli()) { if($dbPosts->cliMode()) {
reIndexTagsPosts(); reIndexTagsPosts();
} }
} }

View File

@ -7,147 +7,20 @@
// Array with all pages. // Array with all pages.
$pages = array(); $pages = array();
$pagesPublished = array();
// Array with all pages, order by parent. // Array with all pages, order by parent.
$pagesParents = array(NO_PARENT_CHAR=>array()); $pagesParents = array(NO_PARENT_CHAR=>array());
// ============================================================================ $pagesParentsPublished = array();
// Functions
// ============================================================================
function sortPages($a, $b)
{
if ($a->position() == $b->position()) {
return 0;
}
return ($a->position() < $b->position()) ? -1 : 1;
}
function buildPage($key)
{
global $dbPages;
global $dbUsers;
global $Parsedown;
global $Site;
// Page object, content from FILE.
$Page = new Page($key);
if( !$Page->isValid() ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the page from file with key: '.$key);
return false;
}
// Page database, content from DATABASE JSON.
$db = $dbPages->getPageDB($key);
if( !$db ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the page from database with key: '.$key);
return false;
}
// Foreach field from DATABASE.
foreach($db as $field=>$value) {
$Page->setField($field, $value);
}
// Content in raw format
$contentRaw = $Page->content();
$Page->setField('contentRaw', $Page->content(), true);
// Parse markdown content.
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
$content = $Parsedown->text($content); // Parse Markdown.
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
$Page->setField('content', $content, true);
// Pagebrake
$explode = explode(PAGE_BREAK, $content);
$Page->setField('breakContent', $explode[0], true);
$Page->setField('readMore', !empty($explode[1]), true);
// Date format
$pageDate = $Page->date();
$Page->setField('dateRaw', $pageDate, true);
$pageDateFormated = $Page->dateRaw( $Site->dateFormat() );
$Page->setField('date', $pageDateFormated, true);
// User object
$username = $Page->username();
$Page->setField('user', $dbUsers->getUser($username));
return $Page;
}
function buildAllPages()
{
global $pagesParents;
global $dbPages;
$list = $dbPages->getDB();
// Clean pages array.
$pages = array();
unset($list['error']);
foreach($list as $key=>$db)
{
$Page = buildPage($key);
if($Page!==false)
{
// --- Order pages by parents ---
// Generate all posible parents.
if( $Page->parentKey()===false )
{
// Add the parent key in the dbPages
$dbPages->addParentKey($Page->key());
$pagesParents[NO_PARENT_CHAR][$Page->key()] = $Page;
}
else
{
$pagesParents[$Page->parentKey()][$Page->key()] = $Page;
}
// --- All pages in 1 array ---
$pages[$Page->key()] = $Page;
}
}
// --- SORT PAGES ---
// Sort parents.
$parents = $pagesParents[NO_PARENT_CHAR];
uasort($parents, 'sortPages');
// Sort children.
unset($pagesParents[NO_PARENT_CHAR]);
$children = $pagesParents;
$tmpPageWithParent = array();
foreach($children as $parentKey=>$childrenPages)
{
// 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=>$parents) + $tmpPageWithParent;
return $pages;
}
// ============================================================================ // ============================================================================
// Main // Main
// ============================================================================ // ============================================================================
// Search for changes on pages by the user. // Search for changes on pages by the user.
if( $Site->cliMode() ) { if( CLI_MODE ) {
$dbPages->regenerateCli(); $dbPages->cliMode();
} }
// Build specific page. // Build specific page.
@ -193,3 +66,4 @@ if($Url->notFound())
// Build all pages // Build all pages
$pages = buildAllPages(); $pages = buildAllPages();

View File

@ -28,7 +28,7 @@ function buildThemes()
$database = file_get_contents($languageFilename); $database = file_get_contents($languageFilename);
$database = json_decode($database, true); $database = json_decode($database, true);
if(empty($database)) { if(empty($database)) {
Log::set('99.themes.php'.LOG_SEP.'JSON Error on theme '.$themePath); Log::set('99.themes.php'.LOG_SEP.'Language file error on theme '.$themePath);
break; break;
} }
@ -43,15 +43,20 @@ function buildThemes()
{ {
$metadataString = file_get_contents($filenameMetadata); $metadataString = file_get_contents($filenameMetadata);
$metadata = json_decode($metadataString, true); $metadata = json_decode($metadataString, true);
if(empty($metadata)) {
Log::set('99.themes.php'.LOG_SEP.'JSON Error on theme '.$themePath); if( !empty($metadata['compatible']) ) {
break;
$explode = explode(',', $metadata['compatible']);
if(in_array(BLUDIT_VERSION, $explode)) {
$database = $database + $metadata;
array_push($themes, $database);
}
}
else {
Log::set('99.themes.php'.LOG_SEP.'Metadata file error on theme '.$themePath);
} }
$database = $database + $metadata;
// Theme data
array_push($themes, $database);
} }
} }
} }

View File

@ -48,7 +48,7 @@ class dbLanguage extends dbJSON
return $this->db[$key]; return $this->db[$key];
} }
return ''; return $string;
} }
// Returns translation. // Returns translation.
@ -71,7 +71,7 @@ class dbLanguage extends dbJSON
public function add($array) public function add($array)
{ {
$this->db = array_merge($this->db, $array); $this->db = array_merge($array, $this->db);
} }
// Returns the item from plugin-data. // Returns the item from plugin-data.

View File

@ -12,9 +12,9 @@ class dbPages extends dbJSON
'tags'=> array('inFile'=>false, 'value'=>array()), 'tags'=> array('inFile'=>false, 'value'=>array()),
'status'=> array('inFile'=>false, 'value'=>'draft'), 'status'=> array('inFile'=>false, 'value'=>'draft'),
'date'=> array('inFile'=>false, 'value'=>''), 'date'=> array('inFile'=>false, 'value'=>''),
'dateModified'=> array('inFile'=>false, 'value'=>''),
'position'=> array('inFile'=>false, 'value'=>0), 'position'=> array('inFile'=>false, 'value'=>0),
'coverImage'=> array('inFile'=>false, 'value'=>''), 'coverImage'=> array('inFile'=>false, 'value'=>'')
'checksum'=> array('inFile'=>false, 'value'=>'')
); );
function __construct() function __construct()
@ -76,10 +76,6 @@ class dbPages extends dbJSON
} }
} }
// Create Hash
$serialize = serialize($dataForDb+$dataForFile);
$dataForDb['checksum'] = sha1($serialize);
// Make the directory. Recursive. // Make the directory. Recursive.
if( Filesystem::mkdir(PATH_PAGES.$key, true) === false ) { if( Filesystem::mkdir(PATH_PAGES.$key, true) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the directory '.PATH_PAGES.$key); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the directory '.PATH_PAGES.$key);
@ -88,7 +84,7 @@ class dbPages extends dbJSON
// Make the index.txt and save the file. // Make the index.txt and save the file.
$data = implode("\n", $dataForFile); $data = implode("\n", $dataForFile);
if( file_put_contents(PATH_PAGES.$key.'/index.txt', $data) === false ) { if( file_put_contents(PATH_PAGES.$key.DS.FILENAME, $data) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to put the content in the file index.txt'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to put the content in the file index.txt');
return false; return false;
} }
@ -124,6 +120,9 @@ class dbPages extends dbJSON
$args['date'] = $this->db[$args['key']]['date']; $args['date'] = $this->db[$args['key']]['date'];
} }
// Modified date
$args['dateModified'] = Date::current(DB_DATE_FORMAT);
// Verify arguments with the database fields. // Verify arguments with the database fields.
foreach($this->dbFields as $field=>$options) foreach($this->dbFields as $field=>$options)
{ {
@ -162,10 +161,6 @@ class dbPages extends dbJSON
} }
} }
// Create Hash
$serialize = serialize($dataForDb+$dataForFile);
$dataForDb['checksum'] = sha1($serialize);
// Move the directory from old key to new key. // Move the directory from old key to new key.
if($newKey!==$args['key']) if($newKey!==$args['key'])
{ {
@ -177,7 +172,7 @@ class dbPages extends dbJSON
// Make the index.txt and save the file. // Make the index.txt and save the file.
$data = implode("\n", $dataForFile); $data = implode("\n", $dataForFile);
if( file_put_contents(PATH_PAGES.$newKey.DS.'index.txt', $data) === false ) { if( file_put_contents(PATH_PAGES.$newKey.DS.FILENAME, $data) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to put the content in the file index.txt'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to put the content in the file index.txt');
return false; return false;
} }
@ -203,7 +198,7 @@ class dbPages extends dbJSON
} }
// Delete the index.txt file. // Delete the index.txt file.
if( Filesystem::rmfile(PATH_PAGES.$key.DS.'index.txt') === false ) { if( Filesystem::rmfile(PATH_PAGES.$key.DS.FILENAME) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the file index.txt'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the file index.txt');
} }
@ -345,6 +340,167 @@ class dbPages extends dbJSON
return $count - 1; return $count - 1;
} }
public function cliMode()
{
// LOG
Log::set('CLI MODE - PAGES - Starting...');
$pageList = array();
$pagesDirectories = Filesystem::listDirectories(PATH_PAGES);
foreach( $pagesDirectories as $directory ) {
if( Sanitize::pathFile($directory.DS.FILENAME) ) {
// The key is the directory name
$key = basename($directory);
// Add the page key to the list
$pageList[$key] = true;
// LOG
Log::set('CLI MODE - Page found, key: '.$key);
// Search sub-pages
$subPaths = Filesystem::listDirectories($directory.DS);
foreach( $subPaths as $subDirectory )
{
// The key of the sub-page
$subKey = basename($subDirectory);
if( Sanitize::pathFile($subDirectory.DS.FILENAME) ) {
// Add the key of the sub-page, the key is composed by the directory/subdirectory
$pageList[$key.'/'.$subKey] = true;
// LOG
Log::set('CLI MODE - Page found, key: '.$key);
}
}
}
}
foreach( $pageList as $key=>$value ) {
if( !isset($this->db[$key]) ) {
// LOG
Log::set('CLI MODE - The page is not in the database, key: '.$key);
// Insert new post
$this->cliModeInsert($key);
}
else {
$checksum = md5_file(PATH_PAGES.$key.DS.FILENAME);
// If checksum is different, update the post
if( !isset($this->db[$key]['md5file']) ||
$this->db[$key]['md5file']!==$checksum ) {
// LOG
Log::set('CLI MODE - Different md5 checksum, key: '.$key);
// Update the post
$this->cliModeInsert($key, $update=true);
}
}
}
// LOG
Log::set('CLI MODE - Cleaning database...');
foreach( array_diff_key($this->db, $pageList) as $key=>$data ) {
// LOG
Log::set('CLI MODE - Removing page from database, key: '.$key);
// Remove the page from database
unset( $this->db[$key] );
}
// Save the database
$this->save();
// LOG
Log::set('CLI MODE - PAGES - Finishing...');
return true;
}
private function cliModeInsert($key, $update=false)
{
if($update) {
// LOG
Log::set('CLI MODE - cliModeInsert() - Updating the page, key: '.$key);
// Database from the current database
$dataForDb = $this->db[$key];
$dataForDb['dateModified'] = Date::current(DB_DATE_FORMAT);
}
else {
// LOG
Log::set('CLI MODE - cliModeInsert() - Inserting the new post, key: '.$key);
// Database for the new page, fields with the default values
$dataForDb = array();
foreach( $this->dbFields as $field=>$options ) {
if( !$options['inFile'] ) {
$dataForDb[$field] = $options['value'];
}
}
// Fields and value predefined in init.php
$dataForDb['username'] = CLI_USERNAME;
$dataForDb['status'] = CLI_STATUS;
$dataForDb['date'] = Date::current(DB_DATE_FORMAT);
}
// MD5 checksum
$dataForDb['md5file'] = md5_file(PATH_PAGES.$key.DS.FILENAME);
// Generate the Object from the file
$Page = new Page($key);
foreach( $this->dbFields as $field=>$options ) {
if( !$options['inFile'] ) {
// Get the field from the file
// If the field doesn't exist, the function returns FALSE
$data = $Page->getField($field);
if( $data!==false ) {
$tmpValue = '';
if( $field=='tags' ) {
$tmpValue = $this->generateTags($data);
}
elseif( $field=='date' ) {
// Validate format date from file
if( Valid::date($data, DB_DATE_FORMAT) ) {
$tmpValue = $data;
}
}
else {
$tmpValue = Sanitize::html($data);
}
settype($tmpValue, gettype($options['value']));
$dataForDb[$field] = $tmpValue;
}
}
}
// Insert row in the database
$this->db[$key] = $dataForDb;
return true;
}
public function regenerateCli() public function regenerateCli()
{ {
$db = $this->db; $db = $this->db;
@ -364,7 +520,7 @@ class dbPages extends dbJSON
{ {
$key = basename($directory); $key = basename($directory);
if(file_exists($directory.DS.'index.txt')) { if(file_exists($directory.DS.FILENAME)) {
// The key is the directory name // The key is the directory name
$newPaths[$key] = true; $newPaths[$key] = true;
} }
@ -376,7 +532,7 @@ class dbPages extends dbJSON
{ {
$subKey = basename($subDirectory); $subKey = basename($subDirectory);
if(file_exists($subDirectory.DS.'index.txt')) { if(file_exists($subDirectory.DS.FILENAME)) {
// The key is composed by the directory/subdirectory // The key is composed by the directory/subdirectory
$newPaths[$key.'/'.$subKey] = true; $newPaths[$key.'/'.$subKey] = true;
} }

View File

@ -9,31 +9,37 @@ class dbPosts extends dbJSON
'username'=> array('inFile'=>false, 'value'=>''), 'username'=> array('inFile'=>false, 'value'=>''),
'status'=> array('inFile'=>false, 'value'=>'draft'), // published, draft, scheduled 'status'=> array('inFile'=>false, 'value'=>'draft'), // published, draft, scheduled
'tags'=> array('inFile'=>false, 'value'=>array()), 'tags'=> array('inFile'=>false, 'value'=>array()),
'allowComments'=> array('inFile'=>false, 'value'=>false), 'allowComments'=> array('inFile'=>false, 'value'=>0),
'date'=> array('inFile'=>false, 'value'=>''), 'date'=> array('inFile'=>false, 'value'=>''),
'dateModified'=> array('inFile'=>false, 'value'=>''),
'coverImage'=> array('inFile'=>false, 'value'=>''), 'coverImage'=> array('inFile'=>false, 'value'=>''),
'checksum'=> array('inFile'=>false, 'value'=>'') 'md5file'=> array('inFile'=>false, 'value'=>'')
);
private $numberPosts = array(
'total'=>0,
'published'=>0
); );
function __construct() function __construct()
{ {
parent::__construct(PATH_DATABASES.'posts.php'); parent::__construct(PATH_DATABASES.'posts.php');
$this->numberPosts['total'] = count($this->db);
} }
// Return the amount of posts
// $total = TRUE, returns the total of posts
// $total = FALSE, return the amount of published posts
public function numberPost($total=false) public function numberPost($total=false)
{ {
// Amount of total posts, published, scheduled and draft
if($total) { if($total) {
return $this->numberPosts['total']; return count($this->db);
} }
return $this->numberPosts['published']; // Amount of published posts
$i = 0;
foreach($this->db as $values) {
if($values['status']=='published') {
$i++;
}
}
return $i;
} }
// Returns the database // Returns the database
@ -64,7 +70,7 @@ class dbPosts extends dbJSON
// Return TRUE if the post exists, FALSE otherwise. // Return TRUE if the post exists, FALSE otherwise.
public function postExists($key) public function postExists($key)
{ {
return isset($this->db[$key]); return isset( $this->db[$key] );
} }
// Generate a valid Key/Slug. // Generate a valid Key/Slug.
@ -99,18 +105,21 @@ class dbPosts extends dbJSON
{ {
$dataForDb = array(); // This data will be saved in the database $dataForDb = array(); // This data will be saved in the database
$dataForFile = array(); // This data will be saved in the file $dataForFile = array(); // This data will be saved in the file
// Current date, format of DB_DATE_FORMAT
$currentDate = Date::current(DB_DATE_FORMAT); $currentDate = Date::current(DB_DATE_FORMAT);
// Generate the database key. // Generate the database key / index
$key = $this->generateKey($args['slug']); $key = $this->generateKey($args['slug']);
// The user is always who is loggued. // The user is always who is loggued
$args['username'] = Session::get('username'); $args['username'] = Session::get('username');
if( Text::isEmpty($args['username']) ) { if( Text::isEmpty($args['username']) ) {
Log::set(__METHOD__.LOG_SEP.'Session username doesnt exists.');
return false; return false;
} }
// If the date not valid, then set the current date. // If the date is not valid, then set the current date.
if(!Valid::date($args['date'], DB_DATE_FORMAT)) { if(!Valid::date($args['date'], DB_DATE_FORMAT)) {
$args['date'] = $currentDate; $args['date'] = $currentDate;
} }
@ -123,7 +132,7 @@ class dbPosts extends dbJSON
// Verify arguments with the database fields. // Verify arguments with the database fields.
foreach($this->dbFields as $field=>$options) foreach($this->dbFields as $field=>$options)
{ {
// If the field is in the arguments. // If the field is in the arguments
if( isset($args[$field]) ) if( isset($args[$field]) )
{ {
if($field=='tags') { if($field=='tags') {
@ -139,13 +148,13 @@ class dbPosts extends dbJSON
} }
} }
} }
// Default value if not in the arguments. // Set a default value if not in the arguments
else else
{ {
$tmpValue = $options['value']; $tmpValue = $options['value'];
} }
// Check where the field will be written, if in the file or in the database. // Check where the field will be written, in the file or in the database
if($options['inFile']) { if($options['inFile']) {
$dataForFile[$field] = Text::firstCharUp($field).': '.$tmpValue; $dataForFile[$field] = Text::firstCharUp($field).': '.$tmpValue;
} }
@ -159,10 +168,6 @@ class dbPosts extends dbJSON
} }
} }
// Create Hash
$serialize = serialize($dataForDb+$dataForFile);
$dataForDb['checksum'] = sha1($serialize);
// Make the directory. // Make the directory.
if( Filesystem::mkdir(PATH_POSTS.$key) === false ) { if( Filesystem::mkdir(PATH_POSTS.$key) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the directory '.PATH_POSTS.$key); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to create the directory '.PATH_POSTS.$key);
@ -171,18 +176,27 @@ class dbPosts extends dbJSON
// Make the index.txt and save the file. // Make the index.txt and save the file.
$data = implode("\n", $dataForFile); $data = implode("\n", $dataForFile);
if( file_put_contents(PATH_POSTS.$key.DS.'index.txt', $data) === false ) { if( file_put_contents(PATH_POSTS.$key.DS.FILENAME, $data) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to put the content in the file index.txt'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to put the content in the file index.txt');
return false; return false;
} }
// Calculate the checksum of the file
$dataForDb['md5file'] = md5_file(PATH_POSTS.$key.DS.FILENAME);
// Save the database // Save the database
$this->db[$key] = $dataForDb; $this->db[$key] = $dataForDb;
// Sort posts before save. // Sort posts before save
$this->sortByDate(); $this->sortByDate();
if( $this->save() === false ) { if( $this->save() === false ) {
// Trying to rollback
Log::set(__METHOD__.LOG_SEP.'Rollback...');
Filesystem::rmfile(PATH_POSTS.$key.DS.FILENAME);
Filesystem::rmdir(PATH_POSTS.$key);
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.');
return false; return false;
} }
@ -193,6 +207,10 @@ class dbPosts extends dbJSON
public function edit($args) public function edit($args)
{ {
if( $this->delete($args['key']) ) { if( $this->delete($args['key']) ) {
// Modified date
$args['dateModified'] = Date::current(DB_DATE_FORMAT);
return $this->add($args); return $this->add($args);
} }
@ -208,7 +226,7 @@ class dbPosts extends dbJSON
} }
// Delete the index.txt file. // Delete the index.txt file.
if( Filesystem::rmfile(PATH_POSTS.$key.DS.'index.txt') === false ) { if( Filesystem::rmfile(PATH_POSTS.$key.DS.FILENAME) === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the file index.txt'); Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to delete the file index.txt');
} }
@ -231,12 +249,12 @@ class dbPosts extends dbJSON
// Returns an array with a list of posts keys, filtered by a page number. // Returns an array with a list of posts keys, filtered by a page number.
public function getList($pageNumber, $postPerPage, $removeUnpublished=true) public function getList($pageNumber, $postPerPage, $removeUnpublished=true)
{ {
$totalPosts = $this->numberPosts['total']; $totalPosts = $this->numberPost(true);
// Remove the unpublished posts. // Remove the unpublished posts.
if($removeUnpublished) { if($removeUnpublished) {
$this->removeUnpublished(); $this->removeUnpublished();
$totalPosts = $this->numberPosts['published']; $totalPosts = $this->numberPost(true);
} }
$init = (int) $postPerPage * $pageNumber; $init = (int) $postPerPage * $pageNumber;
@ -246,7 +264,7 @@ class dbPosts extends dbJSON
if(!$outrange) { if(!$outrange) {
$tmp = array_slice($this->db, $init, $postPerPage, true); $tmp = array_slice($this->db, $init, $postPerPage, true);
// Restore the database because we delete the unpublished posts. // Restore the database because we deleted the unpublished posts.
$this->restoreDB(); $this->restoreDB();
return $tmp; return $tmp;
@ -255,30 +273,26 @@ class dbPosts extends dbJSON
return array(); return array();
} }
// Delete all posts from an user. // Delete all posts from an user
public function deletePostsByUser($username) public function deletePostsByUser($username)
{ {
foreach($this->db as $key=>$value) foreach($this->db as $key=>$value) {
{
if($value['username']==$username) { if($value['username']==$username) {
unset($this->db[$key]); $this->delete($key);
Log::set(__METHOD__.LOG_SEP.'Post deleted: '.$key);
} }
} }
// Save the database. Log::set(__METHOD__.LOG_SEP.'Posts from the user '.$username.' were delete.');
if( $this->save() === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.');
return false;
}
return true; return true;
} }
// Link-up all posts from an user to another user. // Link-up all posts from an user to another user.
public function linkPostsToUser($oldUsername, $newUsername) public function linkPostsToUser($oldUsername, $newUsername)
{ {
foreach($this->db as $key=>$value) foreach($this->db as $key=>$value) {
{
if($value['username']==$oldUsername) { if($value['username']==$oldUsername) {
$this->db[$key]['username'] = $newUsername; $this->db[$key]['username'] = $newUsername;
} }
@ -293,28 +307,27 @@ class dbPosts extends dbJSON
return false; return false;
} }
Log::set(__METHOD__.LOG_SEP.'Posts linked to another user.');
return true; return true;
} }
// Remove unpublished posts, status != published. // Remove unpublished posts, status != published.
public function removeUnpublished() public function removeUnpublished()
{ {
foreach($this->db as $key=>$values) foreach($this->db as $key=>$values) {
{
if($values['status']!='published') { if($values['status']!='published') {
unset($this->db[$key]); unset($this->db[$key]);
} }
} }
$this->numberPosts['published'] = count($this->db);
return true; return true;
} }
// Return TRUE if there are new posts published, FALSE otherwise. // Return TRUE if there are new posts published, FALSE otherwise.
public function scheduler() public function scheduler()
{ {
// Get current date. // Get current date
$currentDate = Date::current(DB_DATE_FORMAT); $currentDate = Date::current(DB_DATE_FORMAT);
$saveDatabase = false; $saveDatabase = false;
@ -322,10 +335,11 @@ class dbPosts extends dbJSON
// Check scheduled posts // Check scheduled posts
foreach($this->db as $postKey=>$values) foreach($this->db as $postKey=>$values)
{ {
if($values['status']=='scheduled') if($values['status']=='scheduled') {
{
// Publish post. // Publish post
if($values['date']<=$currentDate) { if($values['date']<=$currentDate) {
$this->db[$postKey]['status'] = 'published'; $this->db[$postKey]['status'] = 'published';
$saveDatabase = true; $saveDatabase = true;
} }
@ -343,6 +357,7 @@ class dbPosts extends dbJSON
return false; return false;
} }
Log::set(__METHOD__.LOG_SEP.'New posts published from the scheduler.');
return true; return true;
} }
@ -395,92 +410,152 @@ class dbPosts extends dbJSON
return $a['date']<$b['date']; return $a['date']<$b['date'];
} }
// Return TRUE if there are new posts or orphan post deleted, FALSE otherwise. public function cliMode()
public function regenerateCli()
{ {
$db = $this->db; // LOG
$allPosts = array(); Log::set('CLI MODE - POSTS - Starting...');
$fields = array();
$currentDate = Date::current(DB_DATE_FORMAT);
// Generate default fields and values. $postList = array();
foreach($this->dbFields as $field=>$options) {
if(!$options['inFile']) {
$fields[$field] = $options['value'];
}
}
$fields['status'] = CLI_STATUS; $postsDirectories = Filesystem::listDirectories(PATH_POSTS);
$fields['date'] = $currentDate;
$fields['username'] = CLI_USERNAME;
// Get all posts from the first level of directories. foreach( $postsDirectories as $directory ) {
$tmpPaths = Filesystem::listDirectories(PATH_POSTS);
foreach($tmpPaths as $directory) if( Sanitize::pathFile($directory.DS.FILENAME) ) {
{
// Check if the post have the index.txt file. // The key is the directory name
if(Sanitize::pathFile($directory.DS.'index.txt'))
{
// The key is the directory name.
$key = basename($directory); $key = basename($directory);
$allPosts[$key] = true; // Add the key to the list
$postList[$key] = true;
// Create the new entry if not exist inside the DATABASE. // Checksum
if(!isset($this->db[$key])) { $checksum = md5_file($directory.DS.FILENAME);
// New entry on database with the default fields and values.
$this->db[$key] = $fields; // LOG
Log::set('CLI MODE - Post found, key: '.$key);
if( !isset($this->db[$key]) ) {
// LOG
Log::set('CLI MODE - The post is not in the database, key: '.$key);
// Insert new post
$this->cliModeInsert($key);
}
else {
// If checksum is different, update the post
if( $this->db[$key]['md5file']!==$checksum ) {
// LOG
Log::set('CLI MODE - Different md5 checksum, key: '.$key);
// Update the post
$this->cliModeInsert($key, $update=true);
}
}
}
} }
// Create the post from FILE. // LOG
Log::set('CLI MODE - Cleaning database...');
foreach( array_diff_key($this->db, $postList) as $key=>$data ) {
// LOG
Log::set('CLI MODE - Removing post from database, key: '.$key);
// Removing the post from database
unset( $this->db[$key] );
}
// Sort posts before save
$this->sortByDate();
// Save the database
$this->save();
// LOG
Log::set('CLI MODE - POSTS - Finishing...');
return true;
}
private function cliModeInsert($key, $update=false)
{
if($update) {
// LOG
Log::set('CLI MODE - cliModeInsert() - Updating the post, key: '.$key);
// Database from the current database
$dataForDb = $this->db[$key];
$dataForDb['dateModified'] = Date::current(DB_DATE_FORMAT);
}
else {
// LOG
Log::set('CLI MODE - cliModeInsert() - Inserting the new post, key: '.$key);
// Database for the new post, fields with the default values
$dataForDb = array();
foreach( $this->dbFields as $field=>$options ) {
if( !$options['inFile'] ) {
$dataForDb[$field] = $options['value'];
}
}
// Fields and value predefined in init.php
$dataForDb['username'] = CLI_USERNAME;
$dataForDb['status'] = CLI_STATUS;
$dataForDb['date'] = Date::current(DB_DATE_FORMAT);
}
// MD5 checksum
$dataForDb['md5file'] = md5_file(PATH_POSTS.$key.DS.FILENAME);
// Generate the Object from the file
$Post = new Post($key); $Post = new Post($key);
// Update all fields from FILE to DATABASE. foreach( $this->dbFields as $field=>$options ) {
foreach($fields as $f=>$v)
{
// If the field exists on the FILE, update it.
if($Post->getField($f))
{
$valueFromFile = $Post->getField($f);
if($f=='tags') { if( !$options['inFile'] ) {
// Generate tags array.
$this->db[$key]['tags'] = $this->generateTags($valueFromFile); // Get the field from the file
// If the field doesn't exist, the function returns FALSE
$data = $Post->getField($field);
if( $data!==false ) {
$tmpValue = '';
if( $field=='tags' ) {
$tmpValue = $this->generateTags($data);
} }
elseif($f=='date') { elseif( $field=='date' ) {
// Validate Date from file
if(Valid::date($valueFromFile, DB_DATE_FORMAT)) {
$this->db[$key]['date'] = $valueFromFile;
if( $valueFromFile > $currentDate ) { // Validate format date from file
$this->db[$key]['status'] = 'scheduled'; if( Valid::date($data, DB_DATE_FORMAT) ) {
$tmpValue = $data;
if( $data > $currentDate ) {
$dataForDb['status'] = 'scheduled';
} }
} }
} }
else { else {
// Sanitize the values from file. $tmpValue = Sanitize::html($data);
$this->db[$key][$f] = Sanitize::html($valueFromFile);
}
} }
settype($tmpValue, gettype($options['value']));
$dataForDb[$field] = $tmpValue;
} }
} }
} }
// Remove orphan posts from db, the orphan posts are posts deleted by hand (directory deleted). // Insert row in the database
foreach( array_diff_key($db, $allPosts) as $key=>$data ) { $this->db[$key] = $dataForDb;
unset($this->db[$key]);
}
// Sort posts before save. return true;
$this->sortByDate();
// Save the database.
if( $this->save() === false ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying to save the database file.');
return false;
}
return $this->db!=$db;
} }
} }

View File

@ -19,7 +19,6 @@ class dbSite extends dbJSON
'uriTag'=> array('inFile'=>false, 'value'=>'/tag/'), 'uriTag'=> array('inFile'=>false, 'value'=>'/tag/'),
'uriBlog'=> array('inFile'=>false, 'value'=>'/blog/'), 'uriBlog'=> array('inFile'=>false, 'value'=>'/blog/'),
'url'=> array('inFile'=>false, 'value'=>''), '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'), 'dateFormat'=> array('inFile'=>false, 'value'=>'F j, Y'),
'timeFormat'=> array('inFile'=>false, 'value'=>'g:i a'), 'timeFormat'=> array('inFile'=>false, 'value'=>'g:i a'),
@ -216,12 +215,6 @@ class dbSite extends dbJSON
return $parse['scheme'].'://'.$domain; return $parse['scheme'].'://'.$domain;
} }
// Returns TRUE if the cli mode is enabled, otherwise FALSE.
public function cliMode()
{
return $this->getField('cliMode');
}
// Returns the relative home link // Returns the relative home link
public function homeLink() public function homeLink()
{ {

View File

@ -25,6 +25,10 @@ class dbTags extends dbJSON
foreach($this->db['postsIndex'] as $tagSlug=>$tagInfo) { foreach($this->db['postsIndex'] as $tagSlug=>$tagInfo) {
$tmp[$tagSlug] = $tagInfo['name']; $tmp[$tagSlug] = $tagInfo['name'];
} }
// Sort low to high, by value.
natcasesort($tmp);
return $tmp; return $tmp;
} }

240
bl-kernel/functions.php Normal file
View File

@ -0,0 +1,240 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
// POST FUNCTIONS
// ----------------------------------------------------------------------------
function reIndexTagsPosts()
{
global $dbPosts;
global $dbTags;
// Remove unpublished.
$dbPosts->removeUnpublished();
// Regenerate the tags index for posts.
$dbTags->reindexPosts( $dbPosts->db );
// Restore the database, before remove the unpublished.
$dbPosts->restoreDB();
return true;
}
function buildPost($key)
{
global $dbPosts;
global $dbUsers;
global $Parsedown;
global $Site;
// Post object, content from FILE.
$Post = new Post($key);
if( !$Post->isValid() ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from file with key: '.$key);
return false;
}
// Post database, content from DATABASE JSON.
$db = $dbPosts->getPostDB($key);
if( !$db ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the post from database with key: '.$key);
return false;
}
// Foreach field from DATABASE.
foreach($db as $field=>$value) {
$Post->setField($field, $value);
}
// Content in raw format
$contentRaw = $Post->content();
$Post->setField('contentRaw', $contentRaw, true);
// Parse the content
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
$content = $Parsedown->text($content); // Parse Markdown.
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
$Post->setField('content', $content, true);
// Pagebrake
$explode = explode(PAGE_BREAK, $content);
$Post->setField('breakContent', $explode[0], true);
$Post->setField('readMore', !empty($explode[1]), true);
// Date format
$postDate = $Post->date();
$Post->setField('dateRaw', $postDate, true);
$postDateFormated = $Post->dateRaw( $Site->dateFormat() );
$Post->setField('date', $postDateFormated, true);
// User object
$username = $Post->username();
$Post->setField('user', $dbUsers->getUser($username));
return $Post;
}
function buildPostsForPage($pageNumber=0, $amount=POSTS_PER_PAGE_ADMIN, $removeUnpublished=true, $tagKey=false)
{
global $dbPosts;
global $dbTags;
global $Url;
$posts = array();
if($tagKey) {
// Get the keys list from tags database, this database is optimized for this case.
$list = $dbTags->getList($pageNumber, $amount, $tagKey);
}
else {
// Get the keys list from posts database.
$list = $dbPosts->getList($pageNumber, $amount, $removeUnpublished);
}
// There are not posts for the page number then set the page notfound
if(empty($list) && $pageNumber>0) {
$Url->setNotFound(true);
}
// Foreach post key, build the post.
foreach($list as $postKey=>$values)
{
$Post = buildPost($postKey);
if($Post!==false) {
array_push($posts, $Post);
}
}
return $posts;
}
// PAGE FUNCTIONS
// ----------------------------------------------------------------------------
function sortPages($a, $b)
{
if ($a['position'] == $b['position']) {
return 0;
}
return ($a['position'] < $b['position']) ? -1 : 1;
}
function buildPage($key)
{
global $dbPages;
global $dbUsers;
global $Parsedown;
global $Site;
// Page object, content from FILE.
$Page = new Page($key);
if( !$Page->isValid() ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the page from file with key: '.$key);
return false;
}
// Page database, content from DATABASE JSON.
$db = $dbPages->getPageDB($key);
if( !$db ) {
Log::set(__METHOD__.LOG_SEP.'Error occurred when trying build the page from database with key: '.$key);
return false;
}
// Foreach field from DATABASE.
foreach($db as $field=>$value) {
$Page->setField($field, $value);
}
// Content in raw format
$contentRaw = $Page->content();
$Page->setField('contentRaw', $Page->content(), true);
// Parse markdown content.
$content = Text::pre2htmlentities($contentRaw); // Parse pre code with htmlentities
$content = $Parsedown->text($content); // Parse Markdown.
$content = Text::imgRel2Abs($content, HTML_PATH_UPLOADS); // Parse img src relative to absolute.
$Page->setField('content', $content, true);
// Pagebrake
$explode = explode(PAGE_BREAK, $content);
$Page->setField('breakContent', $explode[0], true);
$Page->setField('readMore', !empty($explode[1]), true);
// Date format
$pageDate = $Page->date();
$Page->setField('dateRaw', $pageDate, true);
$pageDateFormated = $Page->dateRaw( $Site->dateFormat() );
$Page->setField('date', $pageDateFormated, true);
// User object
$username = $Page->username();
$Page->setField('user', $dbUsers->getUser($username));
return $Page;
}
function buildAllPages()
{
global $pagesParents;
global $pagesParentsPublished;
global $pagesPublished;
global $dbPages;
// Get the page list
$list = $dbPages->getDB();
// Clean pages array.
$pages = array();
// Remove the error page
unset($list['error']);
// Sorte pages
uasort($list, 'sortPages');
foreach($list as $key=>$db)
{
$Page = buildPage($key);
if($Page!==false)
{
// Filter pages, with and without parent
// If the page doesn't have a father, it's a parent page :P
if( $Page->parentKey()===false ) {
// Add the parent key in the dbPages
$dbPages->addParentKey($Page->key());
// Add the page as a parent page in the array
$pagesParents[NO_PARENT_CHAR][$Page->key()] = $Page;
// If the page is published
if($Page->published()) {
$pagesParentsPublished[NO_PARENT_CHAR][$Page->key()] = $Page;
}
}
else {
$pagesParents[$Page->parentKey()][$Page->key()] = $Page;
// If the page is published
if($Page->published()) {
$pagesParentsPublished[$Page->parentKey()][$Page->key()] = $Page;
}
}
// All pages in one array
$pages[$Page->key()] = $Page;
// If the page is published
if($Page->published()) {
$pagesPublished[$Page->parentKey()][$Page->key()] = $Page;
}
}
}
return $pages;
}

View File

@ -5,25 +5,38 @@ class Email {
// Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise. // Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.
public static function send($args) public static function send($args)
{ {
// Current time in unixtimestamp
$now = time();
// Domain
$domainParse = parse_url(DOMAIN);
$headers = array(); $headers = array();
$headers[] = 'MIME-Version: 1.0'; $headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf-8'; $headers[] = 'Content-type: text/html; charset=utf-8';
$headers[] = 'From: '.$args['from']; $headers[] = 'Content-Transfer-Encoding: 8bit';
$headers[] = 'From: =?UTF-8?B?'.base64_encode($args['fromName']).'?= <'.$args['from'].'>';
$headers[] = 'Reply-To: '.$args['from'];
$headers[] = 'Return-Path: '.$args['from'];
$headers[] = 'message-id: <'.$now.'webmaster@'.$domainParse['host'].'>';
$headers[] = 'X-Mailer: PHP/'.phpversion(); $headers[] = 'X-Mailer: PHP/'.phpversion();
$subject = '=?UTF-8?B?'.base64_encode($args['subject']).'?=';
$message = '<html> $message = '<html>
<head> <head>
<meta charset="UTF-8">
<title>BLUDIT</title> <title>BLUDIT</title>
</head> </head>
<body style="background-color: #f1f1f1;"> <body>
<div style="margin: 0px auto; padding: 10px; font-size: 14px; width: 70%; max-width: 600px;"> <div>
<div style="font-size: 26px;">BLUDIT</div>
'.$args['message'].' '.$args['message'].'
</div> </div>
</body> </body>
</html>'; </html>';
return mail($args['to'], $args['subject'], $message, implode(PHP_EOL, $headers)); return mail($args['to'], $subject, $message, implode(PHP_EOL, $headers));
} }
} }

View File

@ -4,7 +4,7 @@ class Log {
public static function set($text, $type=0) public static function set($text, $type=0)
{ {
error_log($text, $type); error_log('('.BLUDIT_VERSION.')'.$text, $type);
} }
} }

View File

@ -78,29 +78,26 @@ class Text {
return $string; return $string;
} }
public static function endsWith($string, $endsString) public static function startsWith($string, $startString)
{ {
$endsPosition = (-1)*self::length($endsString); $length = self::length($startString);
if(MB_STRING) { return( mb_substr($string, 0, $length)===$startString );
return( mb_substr($string, $endsPosition)===$endsString );
} }
return( substr($string, $endsPosition)===$endsString ); public static function endsWith($string, $endsString)
{
$length = (-1)*self::length($endsString);
return( mb_substr($string, $length)===$endsString );
} }
public static function endsWithNumeric($string) public static function endsWithNumeric($string)
{ {
$endsPosition = (-1)*self::length($string);
if(MB_STRING) {
return( is_numeric(mb_substr($string, -1, 1)) ); return( is_numeric(mb_substr($string, -1, 1)) );
} }
return( is_numeric(substr($string, -1, 1)) );
}
public static function randomText($length) public static function randomText($length)
{ {
$characteres = "1234567890abcdefghijklmnopqrstuvwxyz!@#%^&*"; $characteres = "1234567890abcdefghijklmnopqrstuvwxyz!@#%^&*";
@ -118,6 +115,11 @@ class Text {
public static function cleanUrl($string, $separator='-') public static function cleanUrl($string, $separator='-')
{ {
if(EXTREME_FRIENDLY_URL) {
$string = preg_replace("/[\/_|+ -]+/", $separator, $string);
return $string;
}
// Transliterate characters to ASCII // Transliterate characters to ASCII
$string = str_replace(array_keys(self::$specialChars), self::$specialChars, $string); $string = str_replace(array_keys(self::$specialChars), self::$specialChars, $string);
@ -142,19 +144,13 @@ class Text {
// String to lowercase // String to lowercase
public static function lowercase($string, $encoding='UTF-8') public static function lowercase($string, $encoding='UTF-8')
{ {
if(MB_STRING) {
return mb_strtolower($string, $encoding); return mb_strtolower($string, $encoding);
} }
return strtolower($string);
}
// Make a string's first character uppercase // Make a string's first character uppercase
public static function firstCharUp($string, $encoding='UTF-8') public static function firstCharUp($string, $encoding='UTF-8')
{ {
// Thanks http://stackoverflow.com/questions/2517947/ucfirst-function-for-multibyte-character-encodings // Thanks http://stackoverflow.com/questions/2517947/ucfirst-function-for-multibyte-character-encodings
if(MB_STRING)
{
$strlen = mb_strlen($string, $encoding); $strlen = mb_strlen($string, $encoding);
$firstChar = mb_substr($string, 0, 1, $encoding); $firstChar = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, $strlen - 1, $encoding); $then = mb_substr($string, 1, $strlen - 1, $encoding);
@ -162,28 +158,16 @@ class Text {
return mb_strtoupper($firstChar, $encoding).$then; return mb_strtoupper($firstChar, $encoding).$then;
} }
return ucfirst($string);
}
// Find position of first occurrence of substring in a string otherwise returns FALSE. // Find position of first occurrence of substring in a string otherwise returns FALSE.
public static function stringPosition($string, $substring) public static function stringPosition($string, $substring)
{ {
if(MB_STRING) {
return mb_strpos($string, $substring, 0, 'UTF-8'); return mb_strpos($string, $substring, 0, 'UTF-8');
} }
return strpos($string, $substring);
}
// Returns the portion of string specified by the start and length parameters. // Returns the portion of string specified by the start and length parameters.
public static function cut($string, $start, $length) public static function cut($string, $start, $length)
{ {
if(MB_STRING) {
$cut = mb_substr($string, $start, $length, 'UTF-8'); $cut = mb_substr($string, $start, $length, 'UTF-8');
}
else {
$cut = substr($string, $start, $length);
}
if(empty($cut)) { if(empty($cut)) {
return ''; return '';
@ -195,17 +179,16 @@ class Text {
// Return string length // Return string length
public static function length($string) public static function length($string)
{ {
if(MB_STRING)
return mb_strlen($string, 'UTF-8'); return mb_strlen($string, 'UTF-8');
return strlen($string);
} }
public static function isEmpty($string) public static function isEmpty($string)
{ {
$string = trim($string); $string = trim($string);
if(empty($string)) if(empty($string)) {
return true; return true;
}
return false; return false;
} }

View File

@ -183,7 +183,6 @@ class Theme {
return $tmp; return $tmp;
} }
} }
?> ?>

View File

@ -85,7 +85,7 @@ $(document).ready(function() {
}, },
notallowed: function(file, settings) { notallowed: function(file, settings) {
alert("'.$L->g('Supported image file types').' "+settings.allow); alert("<?php echo $L->g('error').'. '.$L->g('Supported image file types')?>: "+settings.allow);
} }
}; };

View File

@ -58,7 +58,7 @@ $(document).ready(function() {
}, },
notallowed: function(file, settings) { notallowed: function(file, settings) {
alert("'.$L->g('Supported image file types').' "+settings.allow); alert("<?php echo $L->g('error').'. '.$L->g('Supported image file types')?>: "+settings.allow);
} }
}; };

View File

@ -47,6 +47,17 @@ var menuV8 = new function() {
} }
// This function is the default to add the image to the textarea.
// Only call when the textarea doesn't have a HTML Editor enabled.
function editorAddImageDefault(filename) {
var textarea = $("#jscontent");
var imgHTML = '<img src="'+filename+'" alt="">';
textarea.val(textarea.val() + imgHTML);
}
$(document).ready(function() { $(document).ready(function() {
// Click on document. // Click on document.
@ -87,8 +98,13 @@ $(document).ready(function() {
// Insert image // Insert image
$("body").on("click", "#bludit-menuV8-insert", function(e) { $("body").on("click", "#bludit-menuV8-insert", function(e) {
if(typeof editorAddImage == 'function') {
// This function is defined in each editor plugin. // This function is defined in each editor plugin.
editorAddImage( menuV8.getFilename() ); editorAddImage( menuV8.getFilename() );
}
else {
editorAddImageDefault( menuV8.getFilename() );
}
}); });

View File

@ -9,7 +9,7 @@ function insertTag() {
} }
var findTag = $("span[data-tag]").filter(function() { var findTag = $("span[data-tag]").filter(function() {
return $(this).attr('data-tag').toLowerCase() == newTag; return $(this).attr('data-tag').toLowerCase() == newTag.toLowerCase();
}); });
if( findTag.length > 0 ) { if( findTag.length > 0 ) {

View File

@ -13,13 +13,13 @@ class Page extends Content {
parent::__construct(PATH_PAGES.$key.DS); parent::__construct(PATH_PAGES.$key.DS);
} }
// Returns the page position. // Returns the page position
public function position() public function position()
{ {
return $this->getField('position'); return $this->getField('position');
} }
// Returns the page slug. // Returns the page slug
public function slug() public function slug()
{ {
$explode = explode('/', $this->getField('key')); $explode = explode('/', $this->getField('key'));
@ -32,7 +32,7 @@ class Page extends Content {
return $explode[0]; return $explode[0];
} }
// Returns the parent key, if the page doesn't have a parent returns FALSE. // Returns the parent key, if the page doesn't have a parent returns FALSE
public function parentKey() public function parentKey()
{ {
$explode = explode('/', $this->getField('key')); $explode = explode('/', $this->getField('key'));
@ -43,7 +43,7 @@ class Page extends Content {
return false; return false;
} }
// Returns the parent method output, if the page doesn't have a parent returns FALSE. // Returns the parent method output, if the page doesn't have a parent returns FALSE
public function parentMethod($method) public function parentMethod($method)
{ {
global $pages; global $pages;
@ -55,6 +55,7 @@ class Page extends Content {
return false; return false;
} }
// Returns an array with all children's key
public function children() public function children()
{ {
$tmp = array(); $tmp = array();

View File

@ -13,11 +13,7 @@ class Post extends Content {
parent::__construct(PATH_POSTS.$key.DS); parent::__construct(PATH_POSTS.$key.DS);
} }
public function key() // Returns the post slug
{
return $this->getField('key');
}
public function slug() public function slug()
{ {
return $this->getField('key'); return $this->getField('key');
@ -28,4 +24,5 @@ class Post extends Content {
{ {
return ($this->getField('status')==='scheduled'); return ($this->getField('status')==='scheduled');
} }
} }

View File

@ -14,6 +14,14 @@ class Security extends dbJSON
parent::__construct(PATH_DATABASES.'security.php'); parent::__construct(PATH_DATABASES.'security.php');
} }
// Authentication key
// --------------------------------------------------------------------
public function key1()
{
return $this->db['key1'];
}
// ==================================================== // ====================================================
// TOKEN FOR CSRF // TOKEN FOR CSRF
// ==================================================== // ====================================================

242
bl-languages/GR.json Normal file
View File

@ -0,0 +1,242 @@
{
"language-data":
{
"native": "Ελληνικά (Greek)",
"english-name": "Greek",
"last-update": "2016-06-21",
"author": "penglezos",
"email": "panagiotisegl@gmail.com",
"website": "www.penglezos.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": "Μήνυμα Ηλεκτρονικού Ταχυδρομείου (e-mail)",
"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": "URL Ιστότοπου",
"writting-settings": "Εγγραφή Ρυθμίσεων",
"url-filters": "Φίλτρα URL",
"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": "To Μήνυμα Ηλεκτρονικού Ταχυδρομείου (e-mail) δεν θα εμφανιστεί δημοσίως. Προτεινόμενο για επαναφορά κωδικού και ειδοποιήσεων.",
"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": "Εμφάνιση Ιστολογίου (blog)",
"default-home-page": "Προεπιλεγμένη αρχική σελίδα",
"version": "Έκδοση",
"there-are-no-drafts": "Δεν υπάρχουν πρόχειρα.",
"create-a-new-article-for-your-blog":"Δημιουργία νέου άρθρου για το 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": "Τι είναι επόμενο",
"follow-bludit-on": "Ακολουθείστε το Bludit σε: ",
"visit-the-support-forum": "Επισκευτείτε το [forum] https://forum.bludit.com) για υποστήριξη",
"read-the-documentation-for-more-information": "Διαβάσετε το [documentation](https://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":"Η διεύθυνση email είναι λάθος.",
"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",
"enable-the-command-line-mode-if-you-add-edit": "Ενεργοποίηση της command line λειτουργίας άμα προσθέσετε, επεξεργαστείτε ή διαγράψετε δημοσιεύσεις και σελίδες απο το filesystem",
"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":"Ρυθμίσεις Email λογαριασμού",
"sender-email": "Email αποστολέα",
"emails-will-be-sent-from-this-address":"Τα Emails θα σταλθούν απο αυτή την διεύθυνση.",
"bludit-login-access-code": "BLUDIT - Κωδικός Σύνδεσης",
"check-your-inbox-for-your-login-access-code":"Ελέγξτε το inbox για τον Κωδικό Σύνδεσης",
"there-was-a-problem-sending-the-email":"Υπήρχε ένα πρόβλημα για να σταλθεί το 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": "Επεξεργασία ή διαγραφή των δημοσιεύσεων του blog.",
"general-settings": "Γενικές Ρυθμίσεις",
"advanced-settings": "Προχωρημένες Ρυθμίσεις",
"manage-users": "Διαχείριση Χρηστών",
"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": "Καλώς Ορίσατε στο Βludit",
"site-information": "Πληροφορίες Ιστοσελίδας",
"date-and-time-formats": "Μορφή Ημέρας και Ώρας",
"activate": "Ενεργοποίημενο",
"deactivate": "Απενεργοποιημένο",
"cover-image": "Εικόνα Εξοφύλλου",
"blog": "Ιστολόγιο",
"more-images": "Περισσότερς Εικόνες",
"click-here-to-cancel": "Επιλέξτε εδώ για να ακυρώσετε.",
"type-the-tag-and-press-enter": "Εισάγετε την ετικέτα και πατήστε το enter.",
"add": "Προσθήκη",
"manage-your-bludit-from-the-admin-panel": "Διαχείριση Bludit [admin area]({{ADMIN_AREA_LINK}})",
"there-are-no-images":"Δεν υπάρχουν εικόνες",
"click-on-the-image-for-options": "Επιλέξτε την εικόνα για επιλογές.",
"set-as-cover-image": "Εφαρμογή ως εικόνα εξόφφυλο",
"delete-image": "Διαγραφή Εικόνας",
"image-description": "Περιγραφή Εικόνας",
"social-networks-links": "Συνδεσμοι κοινωνικού δικτύου",
"email-access-code": "Κωδικός Πρόσβασης Email",
"current-format": "Τωρινή Μορφή"
}

239
bl-languages/ar_MA.json Normal file
View File

@ -0,0 +1,239 @@
{
"language-data":
{
"native": "اللغة العربية",
"english-name": "Arabic",
"last-update": "2016-04-16",
"author": "english4ar.com",
"email": "",
"website": "english4ar.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": "روابط محسنة",
"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": "فلتر الرابط",
"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": "رابط موقعك",
"add-or-edit-description-tags-or": "إضافة أو تعديل الوصف والعلامات أو تعديل الروابط المحسنة",
"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":"يمكنك تعديل الرابط الذي يحدد صفحة أو مشاركة باستخدام كلمات رئيسية قابلة للقراءة. لا تزيد عن 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": "ماهي الخطوة التالية",
"follow-bludit-on": "تابع جديدنا على",
"visit-the-support-forum": "[forum](https://forum.bludit.com) منتدى الدعم",
"read-the-documentation-for-more-information": "[documentation](https://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": "أكمل النموذج، إختر إسم وكلمة سر للمدير",
"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": "وضع سطر الأوامر",
"enable-the-command-line-mode-if-you-add-edit": "تمكين وضع سطر الأوامر إذا قمت بإضافة، تعديل أو إزالة المشاركات والصفحات من نظام الملفات",
"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": "يجب أن لا تقل كلمة السر عن 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":"هذا وصف موجز لنفسك أو لموقعك، لتغيير هذا النص تذهب إلى لوحة المشرف، إعدادات، والإضافات، وتعديل في إضافة About",
"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",
"site-information": "معلومات الموقع",
"date-and-time-formats": "تنسيق التاريخ والوقت",
"activate": "تفعيل",
"deactivate": "تعطيل",
"cover-image": "صورة الغلاف",
"blog": "المدونة",
"more-images": "المزيد من الصور",
"click-here-to-cancel": ".انقر هنا إلى إلغاء",
"type-the-tag-and-press-enter": ".أكتب العلامات وإضغظ زر الإدخال",
"add": "أضـف",
"manage-your-bludit-from-the-admin-panel": "إدارة الموقع[admin area]({{ADMIN_AREA_LINK}})",
"there-are-no-images":"لا توجد صور بعد",
"click-on-the-image-for-options": "إضغط على الصورة للمزيد من خيارات.",
"set-as-cover-image": "جعلها صورة للغلاف",
"delete-image": "حذف الصورة",
"image-description": "وصف الصورة",
"social-networks-links": "روابط الشبكات الإجتماعية"
}

View File

@ -3,10 +3,10 @@
{ {
"native": "Deutsch (Schweiz)", "native": "Deutsch (Schweiz)",
"english-name": "German", "english-name": "German",
"last-update": "2016-02-15", "last-update": "2016-05-31",
"author": "Clickwork", "author": "Clickwork",
"email": "egoetschel@clickwork.ch", "email": "egoetschel@clickwork.ch",
"website": "http://www.clickwork.ch" "website": "https://clickwork.ch"
}, },
"username": "Benutzername", "username": "Benutzername",
@ -222,5 +222,12 @@
"click-here-to-cancel": "Abbrechen", "click-here-to-cancel": "Abbrechen",
"type-the-tag-and-press-enter": "Schlagwort eingeben und mit \"Enter\" hinzufügen.", "type-the-tag-and-press-enter": "Schlagwort eingeben und mit \"Enter\" hinzufügen.",
"manage-your-bludit-from-the-admin-panel": "Verwalte Bludit im [Administrationsbereich](./admin/).", "manage-your-bludit-from-the-admin-panel": "Verwalte Bludit im [Administrationsbereich](./admin/).",
"there-are-no-images":"Keine Bilder vorhanden" "there-are-no-images":"Keine Bilder vorhanden",
"click-on-the-image-for-options": "Für die Bildoptionen auf das Bild klicken.",
"set-as-cover-image": "Als Hauptbild verwenden",
"delete-image": "Bild löschen",
"image-description": "Bildbeschreibung",
"social-networks-links": "Links zu sozialen Netzwerken",
"email-access-code": "Zugangscode zuschicken",
"current-format": "Aktuelles Datumsformat"
} }

View File

@ -3,10 +3,10 @@
{ {
"native": "Deutsch (Deutschland)", "native": "Deutsch (Deutschland)",
"english-name": "German", "english-name": "German",
"last-update": "2016-02-15", "last-update": "2016-05-31",
"author": "Clickwork", "author": "Clickwork",
"email": "egoetschel@clickwork.ch", "email": "egoetschel@clickwork.ch",
"website": "http://www.clickwork.ch" "website": "https://clickwork.ch"
}, },
"username": "Benutzername", "username": "Benutzername",
@ -222,5 +222,12 @@
"click-here-to-cancel": "Abbrechen", "click-here-to-cancel": "Abbrechen",
"type-the-tag-and-press-enter": "Schlagwort eingeben und mit \"Enter\" hinzufügen.", "type-the-tag-and-press-enter": "Schlagwort eingeben und mit \"Enter\" hinzufügen.",
"manage-your-bludit-from-the-admin-panel": "Verwalte Bludit im [Administrationsbereich](./admin/).", "manage-your-bludit-from-the-admin-panel": "Verwalte Bludit im [Administrationsbereich](./admin/).",
"there-are-no-images":"Keine Bilder vorhanden" "there-are-no-images":"Keine Bilder vorhanden",
"click-on-the-image-for-options": "Für die Bildoptionen auf das Bild klicken.",
"set-as-cover-image": "Als Hauptbild verwenden",
"delete-image": "Bild löschen",
"image-description": "Bildbeschreibung",
"social-networks-links": "Links zu sozialen Netzwerken",
"email-access-code": "Zugangscode zuschicken",
"current-format": "Aktuelles Datumsformat"
} }

View File

@ -235,5 +235,10 @@
"delete-image": "Delete image", "delete-image": "Delete image",
"image-description": "Image description", "image-description": "Image description",
"social-networks-links": "Social networks links" "social-networks-links": "Social networks links",
"email-access-code": "Email access code",
"current-format": "Current format",
"welcome": "Welcome"
} }

View File

@ -226,6 +226,7 @@
"click-here-to-cancel": "Clic aquí para cancelar.", "click-here-to-cancel": "Clic aquí para cancelar.",
"type-the-tag-and-press-enter": "Escriba la etiqueta y presione enter.", "type-the-tag-and-press-enter": "Escriba la etiqueta y presione enter.",
"add": "Agregar",
"manage-your-bludit-from-the-admin-panel": "Administre su Bludit desde el [panel de administración]({{ADMIN_AREA_LINK}})", "manage-your-bludit-from-the-admin-panel": "Administre su Bludit desde el [panel de administración]({{ADMIN_AREA_LINK}})",
"there-are-no-images":"No hay imagenes", "there-are-no-images":"No hay imagenes",
@ -234,5 +235,10 @@
"delete-image": "Eliminar imagen", "delete-image": "Eliminar imagen",
"image-description": "Descripción de la imagen", "image-description": "Descripción de la imagen",
"social-networks-links": "Redes sociales enlaces" "social-networks-links": "Redes sociales enlaces",
"email-access-code": "Código de acceso via email",
"current-format": "Formato actual",
"welcome": "Bienvenido"
} }

239
bl-languages/fa_IR.JSON Normal file
View File

@ -0,0 +1,239 @@
{
"language-data":
{
"native": "فارسی (Iran)",
"english-name": "Persian",
"last-update": "2016-03-13",
"author": "Abdulhalim",
"email": "abdulhalim.po@gmail.com",
"website": "http://getpunbb.ir"
},
"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": "آدرس وب کاربر پسند",
"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": "فیلتر های آدرس وب",
"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": "نسخه بلودیت",
"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": "از این کادر برای نامگذاری سایت خود استفاده کنید ، این نام بالای تمام صفحات سایت شما نمایش داده میشود.",
"you-can-add-a-site-description-to-provide": "میتوانید توضیحات سایت را برای ارائه یک شرح حال کوتاه در مورد سایت خود اضافه کنید.",
"use-this-field-to-add-a-catchy-phrase": "از این کادر برای اضافه کردن یک عبارت جذاب در سایت خود استفاده کنید.",
"you-can-add-a-small-text-on-the-bottom": "میتوانید در پایین تمام صفحات خود یک متن مختصر اضافه کنید . مثلا : حق تالیف ، دارنده سایت ، تاریخ و غیره.",
"number-of-posts-to-show-per-page": "تعداد نوشته برای نمایش در هر صفحه.",
"the-url-of-your-site": "آدرس وبسایت شما.",
"add-or-edit-description-tags-or": "افزودن یا ویرایش توضیحات ، برچسب ها یا مدیریت آدرس وب کاربر پسند.",
"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":"میتوانید آدرس وب را که شناسه یک صفحه یا نوشته است با استفاده از کلمات کلیدی قابل خواندن توسط انسان ویرایش کنید . از 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": "حالا چه کنیم ؟",
"follow-bludit-on": "بلودیت را دنبال کنید",
"visit-the-support-forum": "برای دریافت پشتیبانی از [انجمن بلودیت](https://forum.bludit.com) دیدن کنید",
"read-the-documentation-for-more-information": "برای کسب اطلاعات بیشتر [مستندات](https://docs.bludit.com) را مطالعه کنید",
"share-with-your-friends-and-enjoy": "با دوستانتان به اشتراک گذاشته و لذت ببرید",
"the-page-has-not-been-found": "صفحه مورد نظر یافت نشد.",
"error": "خطا",
"bludit-installer": "نصب کننده بلودیت",
"welcome-to-the-bludit-installer": "به نصب کننده بلودیت خوش آمدید",
"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": "حالت خط فرمان",
"enable-the-command-line-mode-if-you-add-edit": "اگر شما نوشته ها و صفحات خود را از طریق فایل سیستم اضافه ، ویرایش و یا حذف میکنید ، حالت خط فرمان را فعال کنید",
"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": "بلودیت - کد دسترسی ورود به سایت",
"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": "پسورد حداقل باید 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": "به بلودیت خوش آمدید",
"site-information": "اطلاعات سایت",
"date-and-time-formats": "فرمت تاریخ و زمان",
"activate": "بکار انداختن",
"deactivate": "از کار انداختن",
"cover-image": "تصویر کاور",
"blog": "بلاگ",
"more-images": "تصاویر بیشتر",
"click-here-to-cancel": "برای انصراف اینجا را کلیک کنید.",
"type-the-tag-and-press-enter": "برچسب را نوشته و دکمه انتر را بزنید.",
"add": "افزودن",
"manage-your-bludit-from-the-admin-panel": "بلودیت خود را از [محیط مدیریت]({{ADMIN_AREA_LINK}}) کنترل کنید",
"there-are-no-images":"هیچ تصویری وجود ندارد",
"click-on-the-image-for-options": "برای گزینه ها بر روی تصویر کلیک کنید.",
"set-as-cover-image": "انتخاب بعنوان تصویر کاور",
"delete-image": "حذف تصویر",
"image-description": "توضیحات تصویر",
"social-networks-links": "لینک های شبکه های اجتماعی"
}

242
bl-languages/fi_FI.json Normal file
View File

@ -0,0 +1,242 @@
{
"language-data":
{
"native": "Suomi (Suomi)",
"english-name": "Finnish",
"last-update": "2016-06-11",
"author": "Tuomas K.",
"email": "",
"website": ""
},
"username": "Käyttäjätunnus",
"password": "Salasana",
"confirm-password": "Vahvista salasana",
"editor": "Kirjoittaja",
"dashboard": "Hallintapaneeli",
"role": "Tyyppi",
"post": "Blogikirjoitus",
"posts": "Blogikirjoitukset",
"users": "Käyttäjät",
"administrator": "Ylläpitäjä",
"add": "Lisää",
"cancel": "Peruuta",
"content": "Sisältö",
"title": "Otsikko",
"no-parent": "Ei ole",
"edit-page": "Muokkaa sivua",
"edit-post": "Muokkaa blogikirjoitusta",
"add-a-new-user": "Lisää uusi käyttäjä",
"parent": "Onko tämä jonkun sivun alasivu?",
"friendly-url": "Sivun osoite",
"description": "Kuvaus",
"posted-by": "Julkaisija",
"tags": "Tagit",
"position": "Sijainti navigaatiossa",
"save": "Tallenna",
"draft": "Luonnos",
"delete": "Poista",
"registered": "Käyttäjä luotu",
"notifications": "Ilmoitukset",
"profile": "Profiili",
"email": "Sähköpostiosoite",
"settings": "Asetukset",
"general": "Yleiset",
"advanced": "Lisäasetukset",
"regional": "Alueellinen",
"about": "Tietoja",
"login": "Kirjaudu sisään",
"logout": "Kirjaudu ulos",
"manage": "Hallitse",
"themes": "Teemat",
"prev-page": "Edellinen sivu",
"next-page": "Seuraava sivu",
"configure-plugin": "Lisäosan asetukset",
"confirm-delete-this-action-cannot-be-undone": "Haluatko varmasti poistaa? Tätä toimintoa ei voi perua.",
"site-title": "Sivuston otsikko",
"site-slogan": "Mainoslause",
"site-description": "Sivuston kuvaus",
"footer-text": "Alapalkin teksti",
"posts-per-page": "Blogikirjoituksia per sivu",
"site-url": "Sivuston URL-osoite",
"writting-settings": "Kirjoittamisen asetukset",
"url-filters": "Osoitteiden asetukset",
"page": "Sivu",
"pages": "Sivut",
"home": "Etusivu",
"welcome-back": "Tervetuloa takaisin",
"language": "Kieli",
"website": "Julkinen sivusto",
"timezone": "Aikavyöhyke",
"locale": "Maa/Kieli",
"new-post": "Uusi blogikirjoitus",
"new-page": "Uusi sivu",
"html-and-markdown-code-supported": "HTML sekä Markdown toimivat",
"manage-posts": "Hallitse blogikirjoituksia",
"published-date": "Julkaisuaika",
"modified-date": "Muokattu aika",
"empty-title": "Tyhjä otsikko",
"plugins": "Lisäosat",
"install-plugin": "Asenna lisäosa",
"uninstall-plugin": "Poista lisäosa",
"new-password": "Uusi salasana",
"edit-user": "Muokkaa käyttäjää",
"publish-now": "Julkaise nyt",
"first-name": "Etunimi",
"last-name": "Sukunimi",
"bludit-version": "Bludit:in versio",
"powered-by": "Virtaa antaa: ",
"recent-posts": "Viimeisimmät blogikirjoitukset",
"manage-pages": "Hallitse sivuja",
"advanced-options": "Lisäasetukset",
"user-deleted": "Käyttäjä poistettu",
"page-added-successfully": "Sivu lisätty onnistuneesti",
"post-added-successfully": "Blogikirjoitus lisätty onnistuneesti",
"the-post-has-been-deleted-successfully": "Blogikirjoitus poistettu",
"the-page-has-been-deleted-successfully": "Sivu poistettu",
"username-or-password-incorrect": "Käyttäjätunnus tai salasana virheellinen",
"database-regenerated": "Tietokanta uudelleengeneroitu",
"the-changes-have-been-saved": "Muutokset on tallennettu",
"enable-more-features-at": "Ota käyttöön lisää ominaisuuksia",
"username-already-exists": "Käyttäjätunnus on jo olemassa",
"username-field-is-empty": "Käyttäjätunnus on tyhjä",
"the-password-and-confirmation-password-do-not-match":"Salasana ja sen vahvistus eivät täsmää",
"user-has-been-added-successfully": "Käyttäjä lisätty onnistuneesti",
"you-do-not-have-sufficient-permissions": "Sinulla ei ole tarvittavia oikeuksia tälle sivulle. Ota yhteyttä ylläpitäjään.",
"settings-advanced-writting-settings": "Asetukset->Lisäasetukset->Kirjoittamisen asetukset",
"new-posts-and-pages-synchronized": "Uudet sivut ja blogikirjoitukset synkronisoitu.",
"you-can-choose-the-users-privilege": "Voit valita käyttäjän tyypin. Kirjoittaja voi ainostaan muokata sivuja ja blogikirjoituksia, ylläpitäjä myös muuttaa asetuksia.",
"email-will-not-be-publicly-displayed": "Sähköpostia ei näytetä julkisesti. Suositeltu salasanan palauttamiseen ja ilmoituksiin.",
"use-this-field-to-name-your-site": "Kirjoita tähän sivusi nimi. Se näkyy jokaisen sivun yläreunassa.",
"use-this-field-to-add-a-catchy-phrase": "Voit keksiä tähän esimerkiksi mainoslauseen tms.",
"you-can-add-a-site-description-to-provide": "Voit lisätä lyhyen kuvauksen sivustostasi.",
"you-can-add-a-small-text-on-the-bottom": "Voit lisätä pienen tekstinpätkän jokaisen sivun loppuun. Se voi olla vaikkapa sivuston nimi, yhteystietoja, päivämäärä, jne.",
"number-of-posts-to-show-per-page": "Kuinka monta blogikirjoitusta yhdellä sivulla saa näkyä.",
"the-url-of-your-site": "Sivustosi internetosoite.",
"add-or-edit-description-tags-or": "Lisää ja muokkaa kuvausta, tageja tai sivun osoitetta.",
"select-your-sites-language": "Valitse sivuston kieli.",
"select-a-timezone-for-a-correct": "Valitse aikavyöhyke, jotta kellonajat ja päivämäärät näkyvät oikein.",
"you-can-use-this-field-to-define-a-set-of": "Tällä kentällä voit määritellä joukon asetuksia liittyen kieleen, maahan ja erityisiin asetuksiin.",
"you-can-modify-the-url-which-identifies":"Voit muokata sivun osoitetta. Enintään 150 merkkiä",
"this-field-can-help-describe-the-content": "Kirjoita tähän kuvaus sivun sisällöstä. Kuvaus näkyy hakutuloksessa esim. Googlessa. Enintään 150 merkkiä.",
"delete-the-user-and-all-its-posts":"Poista käyttäjä, sekä kaikki sen blogikirjoitukset",
"delete-the-user-and-associate-its-posts-to-admin-user": "Poista käyttäjä, ja siirrä sen blogikirjoitukset ylläpitäjän nimiin",
"read-more": "Lue lisää...",
"show-blog": "Näytä blogi",
"default-home-page": "Sivuston etusivu",
"version": "Versio",
"there-are-no-drafts": "Ei luonnoksia.",
"create-a-new-article-for-your-blog":"Kirjoita blogiisi.",
"create-a-new-page-for-your-website":"Luo uusi sivu sivustollesi.",
"invite-a-friend-to-collaborate-on-your-website":"Tee ystävällesi omat tunnukset, niin hänkin voi kirjoittaa sivustollesi",
"change-your-language-and-region-settings":"Muuta kielen ja alueen asetuksia.",
"language-and-timezone":"Kieli ja aikavyöhyke",
"author": "Tekijä",
"start-here": "Aloita tästä",
"install-theme": "Asenna teema",
"first-post": "Ensimmäinen blogikirjoitus",
"congratulations-you-have-successfully-installed-your-bludit": "Onneksi olkoon! **Bludit** on nyt asennettu!",
"whats-next": "Mitä seuraavaksi?",
"follow-bludit-on": "Seuraa Bludit:ia",
"visit-the-support-forum": "Vieraile [foorumilla](https://forum.bludit.com) jos tarvitse tukea",
"read-the-documentation-for-more-information": "[Dokumentaatiosta](https://docs.bludit.com) löydät paljon lisää tietoa",
"share-with-your-friends-and-enjoy": "Jaa ystäviesi kanssa ja nauti!",
"the-page-has-not-been-found": "Etsimääsi sivua ei löydy.",
"error": "Virhe",
"bludit-installer": "Bludit Installer",
"welcome-to-the-bludit-installer": "Tervetuloa asentamaan Bludit!",
"complete-the-form-choose-a-password-for-the-username-admin": "Täytä lomake, valitse salasana käyttäjälle « admin » (sivuston ylläpitäjä)",
"password-visible-field": "Salasana, näkyvä kenttä!",
"install": "Asenna",
"choose-your-language": "Valitse kielesi",
"next": "Seuraava",
"the-password-field-is-empty": "Salasanakenttä on tyhjä",
"your-email-address-is-invalid":"Sähköpostiosoitteesi on vääränlainen.",
"proceed-anyway": "Jatka silti!",
"drafts":"Luonnokset",
"ip-address-has-been-blocked": "IP osoitteesi on estetty.",
"try-again-in-a-few-minutes": "Yritä uudelleen muutaman minuutin päästä.",
"date": "Päivämäärä",
"scheduled": "Ajastettu",
"publish": "Julkaise",
"please-check-your-theme-configuration": "Tarkista teeman asetukset.",
"plugin-label": "Lisäosan nimi",
"enabled": "Käytössä",
"disabled": "Poissa käytöstä",
"cli-mode": "CLI-tila",
"command-line-mode": "Komentorivitila",
"enable-the-command-line-mode-if-you-add-edit": "Ota käyttöön komentorivitila, jos lisää, muokkaat tai poistat sivuja tai blogikirjoituksia suoraan tiedostojärjestemästä",
"configure": "Asetukset",
"uninstall": "Poista",
"change-password": "Muuta salasana",
"to-schedule-the-post-just-select-the-date-and-time": "Ajastaaksesi lähetyksen, valitse päivä ja aika.",
"write-the-tags-separated-by-commas": "Kirjoita tagit erotetuna pilkuilla.",
"status": "Tila",
"published": "Julkaistu",
"scheduled-posts": "Ajastetut blogikirjoitukset",
"statistics": "Tilastot",
"name": "Nimi",
"email-account-settings":"Sähköpostin asetukset",
"sender-email": "Lähettäjän sähköpostiosoite",
"emails-will-be-sent-from-this-address":"Sähköpostit tullaan lähettämään tästä osoitteesta.",
"bludit-login-access-code": "BLUDIT - Kirjautumisen tunnistautumiskoodi",
"check-your-inbox-for-your-login-access-code":"Tunnistautumiskoodi on lähetetty sinulle sähköpostilla",
"there-was-a-problem-sending-the-email":"Sähköpostin lähettämisessä tapahtui ongelma",
"back-to-login-form": "Takaisin",
"send-me-a-login-access-code": "Lähetä minulle tunnistautumiskoodi",
"get-login-access-code": "Lähetä tunnistautumiskoodi",
"email-notification-login-access-code": "<p>Tämä on ilmoitus sivustoltasi {{WEBSITE_NAME}}</p><p>Jos pyysit kirjautumisen tunnistautumiskoodia, paina tästä linkistä:</p><p>{{LINK}}</p>",
"there-are-no-scheduled-posts": "Ei ajastettuja blogikirjoituksia",
"show-password": "Näytä salasana",
"edit-or-remove-your=pages": "Lisää, muokkaa ja poista sivujasi",
"edit-or-remove-your-blogs-posts": "Lisää, muokkaa ja poista blogikirjoituksiasi",
"general-settings": "Yleiset asetukset",
"advanced-settings": "Lisäasetukset",
"manage-users": "Hallitse käyttäjiä",
"view-and-edit-your-profile": "Näytä ja muokkaa oma profiilisi",
"password-must-be-at-least-6-characters-long": "Salasanan täytyy olla vähintään 6 merkkiä pitkä",
"images": "Kuvat",
"upload-image": "Lähetä image",
"drag-and-drop-or-click-here": "Klikkaa tästä, tai vedä kuva tänne",
"insert-image": "Lisää kuva",
"supported-image-file-types": "Tuetut kuvatyypit",
"date-format": "Päivämäärän muoto",
"time-format": "Ajan muoto",
"chat-with-developers-and-users-on-gitter":"Keskustele muiden kehittäjien ja käyttäjien kanssa [Gitterissä](https://gitter.im/dignajar/bludit)",
"this-is-a-brief-description-of-yourself-our-your-site":"Tämä on lyhyt kuvaus sinusta, tai sivustostasi. Voit muuttaa tätä hallintapaneelista kohdasta Asetukset->Lisäosat, ja muokkaa lisäosan \"About\" asetuksia",
"profile-picture": "Profiilikuva",
"the-about-page-is-very-important": "Tietoja-sivu on tärkeä työkalu mahdollisille asiakkaillesi. Niille asiakkaille, jotka miettivät, kuka on tämän mahtavan sivuston takana, sinun Tietoja-sivu on ensimmäinen paikka josta katsoa.",
"change-this-pages-content-on-the-admin-panel": "Voit muokata tämän sivun sisältöä hallintapaneelista, kohdasta Hallitse->Sivut, ja paina \"Tietoja\".",
"about-your-site-or-yourself": "Sivustostasi tai sinusta.",
"welcome-to-bludit": "Bludit toivottaa sinut tervetulleeksi!",
"site-information": "Sivuston tiedot",
"date-and-time-formats": "Päivämäärän ja ajan esitysmuodot",
"activate": "Ota käyttöön",
"deactivate": "Poista käytöstä",
"cover-image": "Artikkelikuva",
"blog": "Blogi",
"more-images": "Lisää kuvia",
"click-here-to-cancel": "Paina tästä peruaksesi.",
"type-the-tag-and-press-enter": "Kirjoita tagi, ja paina enter.",
"add": "Lisää",
"manage-your-bludit-from-the-admin-panel": "Voit hallita Bludit:ia [hallintapaneelista]({{ADMIN_AREA_LINK}})",
"there-are-no-images":"Ei kuvia",
"click-on-the-image-for-options": "Paina kuvaa saadaksesi lisätietoja.",
"set-as-cover-image": "Aseta artikkelikuvaksi",
"delete-image": "Poista kuva",
"image-description": "Kuvan kuvaus",
"social-networks-links": "Sosiaalisen median linkit",
"email-access-code": "Pyydä tunnistautumiskoodi",
"current-format": "Nykyinen muoto"
}

View File

@ -3,7 +3,7 @@
{ {
"native": "Français (France)", "native": "Français (France)",
"english-name": "French", "english-name": "French",
"last-update": "2016-02-13", "last-update": "2016-02-29",
"author": "Frédéric K.", "author": "Frédéric K.",
"email": "stradfred@gmail.com", "email": "stradfred@gmail.com",
"website": "http://flatboard.co.nf" "website": "http://flatboard.co.nf"
@ -223,7 +223,7 @@
"cover-image": "Image de couverture", "cover-image": "Image de couverture",
"blog": "Blog", "blog": "Blog",
"more-images": "Plus dimages", "more-images": "Plus dimages",
"double-click-on-the-image-to-add-it": "Double-cliquez sur limage pour lajouter.",
"click-here-to-cancel": "Cliquez ici pour annuler.", "click-here-to-cancel": "Cliquez ici pour annuler.",
"type-the-tag-and-press-enter": "Saisissez le tag et appuyez sur Entrée.", "type-the-tag-and-press-enter": "Saisissez le tag et appuyez sur Entrée.",
"add": "Ajouter", "add": "Ajouter",
@ -235,9 +235,5 @@
"delete-image": "Supprimer limage", "delete-image": "Supprimer limage",
"image-description": "Description de limage", "image-description": "Description de limage",
"social-networks": "Réseaux sociaux", "social-networks-links": "Liens vers les réseaux sociaux"
"twitter-username": "Compte utilisateur Twitter",
"facebook-username": "Compte utilisateur Facebook",
"google-username": "Compte utilisateur Google",
"instagram-username": "Compte utilisateur Instagram"
} }

244
bl-languages/hu_HU.json Normal file
View File

@ -0,0 +1,244 @@
{
"language-data":
{
"native": "Magyar",
"english-name": "Hungarian",
"last-update": "2016-06-25",
"author": "Korfa",
"email": "",
"website": ""
},
"username": "Felhasználónév",
"password": "Jelszó",
"confirm-password": "Jelszó újra",
"editor": "WYSIWYG szerkesztő engedélyezése",
"dashboard": "Vezérlőpult",
"role": "Jogosultság",
"post": "Új bejegyzés",
"posts": "Új bejegyzés",
"users": "Felhasználók hozzászólásainak engedélyezése",
"administrator": "Adminisztrátor felhasználóneve",
"add": "Kategória hozzáadása",
"cancel": "Mégse",
"content": "Haladó beállítások. Például: Hozzászólások engedélyezése vagy tiltása, kategóriák kiválasztása, stb.",
"title": "Írja be a címet",
"no-parent": "Nics szülő",
"edit-page": "Oldal szerkesztése",
"edit-post": "Bejegyzés szerkesztése",
"add-a-new-user": "Új felhasználó:",
"parent": "Szűlő",
"friendly-url": "Keresőbarát URL",
"description": "Rövid leírás. Maximum 150 karakter lehet.",
"posted-by": "Szerző",
"tags": "Címke",
"position": "Pozíció",
"save": "Változások mentése",
"draft": "Piszkozat",
"delete": "Törlés",
"registered": "Regisztrált",
"notifications": "Értesítések",
"profile": "Profil",
"email": "E-mail",
"settings": "Beállítások",
"general": "Általános beállítások",
"advanced": "Bejegyzés haladó beállításai",
"regional": "Területi beállítások",
"about": "A blogodról",
"login": "Belépés",
"logout": "Kilépés",
"manage": "Bejegyzések szerkesztése",
"themes": "Témák",
"prev-page": "Előző oldal",
"next-page": "Következő oldal",
"configure-plugin": "Bővítmény beállítása",
"confirm-delete-this-action-cannot-be-undone": "Biztosan törli?",
"site-title": "Oldal cím",
"site-slogan": "Oldal szlogen",
"site-description": "Oldal leírás",
"footer-text": "Lábléc text",
"posts-per-page": "Bejegyzések oldalanként",
"site-url": "Weboldal URL",
"writting-settings": "Írási beállítások",
"url-filters": "URL-szűrők",
"page": "Bejegyzések száma egy oldalon",
"pages": "Oldal",
"home": "Kezdőlap",
"welcome-back": "Isten hozta újra!",
"language": "Nyelv",
"website": "Weboldal",
"timezone": "Időzóna",
"locale": "Helyi",
"new-post": "Új bejegyzés",
"new-page": "Új oldal",
"html-and-markdown-code-supported": "HTML és Markdown kód használható",
"manage-posts": "Posztok kezelése",
"published-date": "Publikálás dátuma",
"modified-date": "Modosítás dátuma",
"empty-title": "Üres cím",
"plugins": "Bővitmények kezelése",
"install-plugin": "Bővitmény telepítése",
"uninstall-plugin": "Bővitmény eltávolítása",
"new-password": "Új jelszó",
"edit-user": "Felhasználó szerkesztése",
"publish-now": "Publikálás azonnal",
"first-name": "Keresztnév",
"last-name": "Vezetéknév",
"bludit-version": "Verzió",
"powered-by": "Mozgásban tartja",
"recent-posts": "Friss posztok",
"manage-pages": "Oldalak kezelése",
"advanced-options": "További lehetőségek",
"user-deleted": "Felhasználó törlése",
"page-added-successfully": "Oldal hozzáadása sikerült",
"post-added-successfully": "Bejegyzés hozzáadása sikerült",
"the-post-has-been-deleted-successfully": "Bejegyzés törlése sikerült",
"the-page-has-been-deleted-successfully": "Oldal törlése sikerült",
"username-or-password-incorrect": "A felhasználónév és a jelszó nem egyezik",
"database-regenerated": "Adatbáis újragenerálva",
"the-changes-have-been-saved": "A változtatások elmentve",
"enable-more-features-at": "További funkciókat itt kapcsolhat be",
"username-already-exists": "Felhasználónév már létezik",
"username-field-is-empty": "Felhasználónév mező üres",
"the-password-and-confirmation-password-do-not-match":"A jelszó és megerősítése nem egyezik",
"user-has-been-added-successfully": "Felhasználó sikeresen hozzáadva",
"you-do-not-have-sufficient-permissions": "Nem rendelkezik megfelelő engedélyekkel az oldal eléréséhez, lépjen kapcsolatba a rendszergazdával!",
"settings-advanced-writting-settings": "Beállítások->Haladó->Írási beállítások",
"new-posts-and-pages-synchronized": "Új hozzászólások és oldalak szinkronizálva.",
"you-can-choose-the-users-privilege": "Kiválaszthatja a felhasználói jogosultságokat. A szerkesztői szerepkörrel csak oldalakat és bejegyzéseket tud írni.",
"email-will-not-be-publicly-displayed": "E-mail nem jelenik meg nyilvánosan. A jelszó helyreállításához és az értesítésekhez javasoljuk.",
"use-this-field-to-name-your-site": "Ebben a mezőben adja meg a weboldal nevét, ez minden oldal tetején meg fog jelenni a weboldalon.",
"use-this-field-to-add-a-catchy-phrase": "Ebben a mezőben megadhat egy szlogent a weboldalhoz.",
"you-can-add-a-site-description-to-provide": "Itt megadhatja a weboldal leírását, egy rövid összefoglalót az oldalról.",
"you-can-add-a-small-text-on-the-bottom": "Megadhat egy apróbetűs szöveget az oldalak aljára. Pl. jogi információk, tulajdonos, dátumok, stb.",
"number-of-posts-to-show-per-page": "Hány bejegyzés jelenjen meg oldalanként.",
"the-url-of-your-site": "Az oldal címe (URL)",
"add-or-edit-description-tags-or": "Felveheti és szerkesztheti a leírást, a címkéket, vagy módosíthatja a keresőbarát URL-t.",
"select-your-sites-language": "Válassza ki weboldala nyelvét!",
"select-a-timezone-for-a-correct": "Válasszon időzónát a dátumok megfelelő megjelenítéséhez!",
"you-can-use-this-field-to-define-a-set-of": "Ebben a mezőben a nyelvvel, országgal és más különleges beállításokkal kapcsolatos paramétereket veheti fel.",
"you-can-modify-the-url-which-identifies": "Itt könnyen megjegyezhető kulcsszavak segítségével módosíthatja az oldalhoz vagy bejegyzéshez tartozó URL-t. Legfeljebb 150 karakter.",
"this-field-can-help-describe-the-content": "Ebben a mezőben néhány szóban összefoglalhatja a tartalmat. Legfeljebb 150 karakter.",
"delete-the-user-and-all-its-posts": "A felhasználó törlése összes bejegyzésével együtt",
"delete-the-user-and-associate-its-posts-to-admin-user": "A felhasználó törlése, bejegyzéseinek gazdája az adminisztrátor lesz",
"read-more": "Tovább",
"show-blog": "Blog megmutatása",
"default-home-page": "Alapértelmezett kezdőoldal",
"version": "Verziószám",
"there-are-no-drafts": "Nincsenek vázlatok.",
"create-a-new-article-for-your-blog": "Új cikk írása a blogba.",
"create-a-new-page-for-your-website": "Új oldal létrehozása a weboldalra.",
"invite-a-friend-to-collaborate-on-your-website": "Ismerős meghívása az oldalon végzendő közös munkára.",
"change-your-language-and-region-settings": "Nyelvi és területi beállítások megváltoztatása.",
"language-and-timezone": "Nyelv és időzóna",
"author": "Szerző",
"start-here": "Kezdje itt!",
"install-theme": "Téma telepítése",
"first-post": "Első bejegyzés",
"congratulations-you-have-successfully-installed-your-bludit": "Gratulálunk a **Bludit** sikeres telepítéséhez!",
"whats-next": "Mi következik?",
"follow-bludit-on": "Kövesse a Bluditot!",
"visit-the-support-forum": "Látogassa meg a [fórumot](https://forum.bludit.com) ha segítségre van szüksége!",
"read-the-documentation-for-more-information": "Olvassa el a [dokumentációt](https://docs.bludit.com) további információkért!",
"share-with-your-friends-and-enjoy": "Ossza meg barátaival és élvezze!",
"the-page-has-not-been-found": "Ez az oldal nem található.",
"error": "Hiba",
"bludit-installer": "Bludit telepítő",
"welcome-to-the-bludit-installer": "Üdvözli a Bludit telepítő!",
"complete-the-form-choose-a-password-for-the-username-admin": "Töltse ki az űrlapot, válasszon jelszót az « admin » felhasználónak!",
"password-visible-field": "Jelszó, a mező tartalma látható!",
"install": "Telepítés",
"choose-your-language": "Válasszon nyelvet!",
"next": "Tovább",
"the-password-field-is-empty": "A Jelszó mező üres",
"your-email-address-is-invalid": "Az email mező tartalma nem megfelelő.",
"proceed-anyway": "Akkor is folytatom!",
"drafts": "Vázlatok",
"ip-address-has-been-blocked": "Az IP-cím le lett tiltva.",
"try-again-in-a-few-minutes": "Próbálja újra néhány perc múlva!",
"date": "Válasszon egy időzónát, a helyes idő megjelenítéséért!",
"scheduled": "Időzített",
"publish": "Közzététel",
"please-check-your-theme-configuration": "Kérjük, ellenőrizze a témája beállításait!",
"plugin-label": "Bővítménycímke",
"enabled": "Bekapcsolva",
"disabled": "Kikapcsolva",
"cli-mode": "Cli mód",
"command-line-mode": "Parancssori üzemmód",
"enable-the-command-line-mode-if-you-add-edit": "Kapcsolja be a parancssori üzemmódot, ha a fájlrendszerből akar bejegyzéseket és oldalakat létrehozni, szerkeszteni vagy törölni!",
"configure": "Beállitás",
"uninstall": "Eltávolítás",
"change-password": "Jelszó megváltoztatása",
"to-schedule-the-post-just-select-the-date-and-time": "A bejegyzés időzítéséhez csak válassza ki a dátumot és az időpontot!",
"write-the-tags-separated-by-commas": "Írja be a címkéket vesszővel elválasztva!",
"status": "Állapot",
"published": "A bejegyzés sikeresen közzétéve",
"scheduled-posts": "Időzített bejegyzések",
"statistics": "Statisztika",
"name": "Felhasználónév",
"email-account-settings": "Levelezési beállítások",
"sender-email": "Küldő email címe",
"emails-will-be-sent-from-this-address": "Az emailek erről a címről kerülnek majd kiküldésre.",
"bludit-login-access-code": "BLUDIT - Hozzáférési kód",
"check-your-inbox-for-your-login-access-code": "Ellenőrizze postafiókjában a hozzáférési kódot tartalmazó emailt!",
"there-was-a-problem-sending-the-email": "Nem sikerült elküldeni az emailt.",
"back-to-login-form": "Vissza a bejelentkezési oldalra",
"send-me-a-login-access-code": "Hozzáférési kódot kérek",
"get-login-access-code": "Hozzáférési kód megszerzése",
"email-notification-login-access-code": "<p>Ezt az értesítőt {{WEBSITE_NAME}} küldte Önnek.</p><p>Hozzáférési kódot kérvényezett, ehhez kattintson az alábbi linkre::</p><p>{{LINK}}</p>",
"there-are-no-scheduled-posts": "Nincsenek időzített bejegyzések.",
"show-password": "Mutassa a jelszót",
"edit-or-remove-your=pages": "Oldalak szerkesztése vagy törlése.",
"edit-or-remove-your-blogs-posts": "A blog bejegyzéseinek szerkesztése vagy törlése.",
"general-settings": "Általános beállítások",
"advanced-settings": "Haladó beállítások",
"manage-users": "Felhasználók kezelése",
"view-and-edit-your-profile": "Profiloldalának megtekintése és szerkesztése.",
"password-must-be-at-least-6-characters-long": "A jelszónak legalább 6 karakter hosszúnak kell lennie.",
"images": "Képek",
"upload-image": "Kép feltöltése",
"drag-and-drop-or-click-here": "Húzza ide vagy kattintson ide!",
"insert-image": "Kép beszúrása",
"supported-image-file-types": "Támogatott képfájl-formátumok",
"date-format": "Dátumformátum",
"time-format": "Időformátum",
"chat-with-developers-and-users-on-gitter": "Beszélgessen a fejlesztőkkel és a felhasználókkal a [Gitter-en](https://gitter.im/dignajar/bludit)",
"this-is-a-brief-description-of-yourself-our-your-site": "Itt röviden bemutathatja önmagát vagy a weboldalát, a szöveg megváltoztatásához menjen az Adminlapra, Beállítások, Bővítmények, majd a Névjegy bővítmény beállításai.",
"profile-picture": "Profilkép",
"the-about-page-is-very-important": "A Névjegy oldal fontos és hasznos eszköz a potenciális ügyfelek és partnerek számára. Azoknak, akiket érdekel, ki áll a weboldal mögött, a Névjegy oldal jelenti az elsődleges információforrást.",
"change-this-pages-content-on-the-admin-panel": "Ennek az oldalnak a tartalmát így változtathatja meg: Adminlap, Vezérlés, Oldalak, majd kattintás a Névjegy oldalra.",
"about-your-site-or-yourself": "Névjegy - önmaga és a weboldal bemutatása",
"welcome-to-bludit": "Üdvözöljük a Bluditban!",
"site-information": "Weboldal-információ",
"date-and-time-formats": "Dátum- és időformátum",
"activate": "Aktiválás",
"deactivate": "Deaktiválás",
"cover-image": "Borítóképek",
"blog": "Blog",
"more-images": "További képek",
"click-here-to-cancel": "Kattintson ide a kilépéshez!",
"type-the-tag-and-press-enter": "Írja be a címkét és nyomjon Entert!",
"add": "Hozzáadás",
"manage-your-bludit-from-the-admin-panel": "Vezérelje a Bluditot az [admin felületről]({{ADMIN_AREA_LINK}})",
"there-are-no-images": "Nincs kép",
"click-on-the-image-for-options": "Kattintson a képre a beállításokhoz!",
"set-as-cover-image": "Beállítás borítóképnek",
"delete-image": "Kép törlése",
"image-description": "Kép leírása",
"social-networks-links": "Közösségimédia-linkek",
"email-access-code": "Email hozzáférési kód",
"current-format": "Jelenlegi",
"welcome": "Üdvözöljük a blogon!"
}

View File

@ -3,7 +3,7 @@
{ {
"native": "Italiano (Italia)", "native": "Italiano (Italia)",
"english-name": "Italian", "english-name": "Italian",
"last-update": "2016-01-22", "last-update": "2016-02-20",
"author": "Daniele La Pira", "author": "Daniele La Pira",
"email": "daniele.lapira@gmail.com", "email": "daniele.lapira@gmail.com",
"website": "https://github.com/danielelapira" "website": "https://github.com/danielelapira"
@ -119,6 +119,7 @@
"you-can-use-this-field-to-define-a-set-of": "Puoi utilizzare questo campo per definire un set di parametri riferiti alla lingua, alla nazione e preferenze speciali.", "you-can-use-this-field-to-define-a-set-of": "Puoi utilizzare questo campo per definire un set di parametri riferiti alla lingua, alla nazione e preferenze speciali.",
"you-can-modify-the-url-which-identifies":"Puoi modificare l'indirizzo URL che identifica una pagina o un articolo utilizzando delle parole chiavi leggibili. Non più di 150 caratteri.", "you-can-modify-the-url-which-identifies":"Puoi modificare l'indirizzo URL che identifica una pagina o un articolo utilizzando delle parole chiavi leggibili. Non più di 150 caratteri.",
"this-field-can-help-describe-the-content": "Quì puoi descrivere il contenuto in poche parole. Non più di 150 caratteri.", "this-field-can-help-describe-the-content": "Quì puoi descrivere il contenuto in poche parole. Non più di 150 caratteri.",
"delete-the-user-and-all-its-posts":"Elimina l'utente e tutti i suoi articoli", "delete-the-user-and-all-its-posts":"Elimina l'utente e tutti i suoi articoli",
"delete-the-user-and-associate-its-posts-to-admin-user": "Elimina l'utente e assegna i suoi articoli all'utente admin", "delete-the-user-and-associate-its-posts-to-admin-user": "Elimina l'utente e assegna i suoi articoli all'utente admin",
"read-more": "Leggi tutto", "read-more": "Leggi tutto",
@ -195,7 +196,7 @@
"edit-or-remove-your-blogs-posts": "Modifica o elimina articoli del blog.", "edit-or-remove-your-blogs-posts": "Modifica o elimina articoli del blog.",
"general-settings": "Impostazioni generali", "general-settings": "Impostazioni generali",
"advanced-settings": "Impostazioni avanzate", "advanced-settings": "Impostazioni avanzate",
"manage-users": "Gestisci utenti", "manage-users": "Amministra utenti",
"view-and-edit-your-profile": "Visualizza e modifica il tuo profilo.", "view-and-edit-your-profile": "Visualizza e modifica il tuo profilo.",
"password-must-be-at-least-6-characters-long": "La Password deve contenere almeno 6 caratteri", "password-must-be-at-least-6-characters-long": "La Password deve contenere almeno 6 caratteri",
@ -222,9 +223,17 @@
"cover-image": "Immagine di copertina", "cover-image": "Immagine di copertina",
"blog": "Blog", "blog": "Blog",
"more-images": "Più immagini", "more-images": "Più immagini",
"double-click-on-the-image-to-add-it": "Clicca due volte sull'immagine da inserire.",
"click-here-to-cancel": "Clicca quì per annullare.", "click-here-to-cancel": "Clicca quì per annullare.",
"type-the-tag-and-press-enter": "Scrivi il tag e premi invio.", "type-the-tag-and-press-enter": "Scrivi il tag e premi invio.",
"manage-your-bludit-from-the-admin-panel": "Gestisci Bludit dal [pannello di amministrazione]({{ADMIN_AREA_LINK}})", "add": "Aggiungi",
"there-are-no-images":"Non ci sono immagini" "manage-your-bludit-from-the-admin-panel": "Amministra Bludit dal [pannello di amministrazione]({{ADMIN_AREA_LINK}})",
"there-are-no-images":"Non ci sono immagini",
"click-on-the-image-for-options": "Clicca sull'immagine per le opzioni.",
"set-as-cover-image": "Set as cover image",
"delete-image": "Elimima immagine",
"image-description": "Descrizione dell'immagine",
"social-networks-links": "Social Networks"
} }

View File

@ -116,7 +116,6 @@
"add-or-edit-description-tags-or": "Tambah atau sunting perihal dan tag atau ubah URL mesra.", "add-or-edit-description-tags-or": "Tambah atau sunting perihal dan tag atau ubah URL mesra.",
"select-your-sites-language": "Pilih bahasa laman web anda.", "select-your-sites-language": "Pilih bahasa laman web anda.",
"select-a-timezone-for-a-correct": "Pilih zon masa yang betul untuk paparan tarikh dan masa yang tepat.", "select-a-timezone-for-a-correct": "Pilih zon masa yang betul untuk paparan tarikh dan masa yang tepat.",
"you-can-use-this-field-to-define-a-set-of": "You can use this field to define a set of parameters related to the language, country and special preferences.",
"you-can-use-this-field-to-define-a-set-of": "Tetapkan set parameter berkaitan dengan bahasa, negara dan keutamaan istimewa.", "you-can-use-this-field-to-define-a-set-of": "Tetapkan set parameter berkaitan dengan bahasa, negara dan keutamaan istimewa.",
"you-can-modify-the-url-which-identifies":"Anda boleh mengubah URL yang mengenalpasti sesuatu artikel atau halaman menggunakan kata kunci yang boleh dibaca oleh manusia. Tidak lebih daripada 150 aksara.", "you-can-modify-the-url-which-identifies":"Anda boleh mengubah URL yang mengenalpasti sesuatu artikel atau halaman menggunakan kata kunci yang boleh dibaca oleh manusia. Tidak lebih daripada 150 aksara.",
"this-field-can-help-describe-the-content": "Huraikan secara ringkas kandungan ini. Tidak lebih daripada 150 aksara.", "this-field-can-help-describe-the-content": "Huraikan secara ringkas kandungan ini. Tidak lebih daripada 150 aksara.",

View File

@ -3,7 +3,7 @@
{ {
"native": "Русский (Россия)", "native": "Русский (Россия)",
"english-name": "Russian", "english-name": "Russian",
"last-update": "2015-11-17", "last-update": "2016-06-01",
"author": "Сергей Ворон", "author": "Сергей Ворон",
"email": "sergey@voron.pw", "email": "sergey@voron.pw",
"website": "http://voron.pw" "website": "http://voron.pw"
@ -235,9 +235,8 @@
"delete-image": "Удалить изображение", "delete-image": "Удалить изображение",
"image-description": "Описание изображения", "image-description": "Описание изображения",
"social-networks": "Социальные сети", "social-networks-links": "Социальные сети",
"twitter-username": "Имя пользователя в Twitter",
"facebook-username": "Имя пользователя в Facebook", "email-access-code": "Проверочный код email",
"google-username": "Имя пользователя в Google", "current-format": "Текущий формат"
"instagram-username": "Имя пользователя в Instagram"
} }

View File

@ -227,5 +227,18 @@
"click-here-to-cancel": "İptal etmek için tıklayın.", "click-here-to-cancel": "İptal etmek için tıklayın.",
"type-the-tag-and-press-enter": "Etiketi girin ve enter tuşuna basın.", "type-the-tag-and-press-enter": "Etiketi girin ve enter tuşuna basın.",
"manage-your-bludit-from-the-admin-panel": "Bludit'i [yönetici panelinden]({{ADMIN_AREA_LINK}}) yönetin.", "manage-your-bludit-from-the-admin-panel": "Bludit'i [yönetici panelinden]({{ADMIN_AREA_LINK}}) yönetin.",
"there-are-no-images":"Hiç resim yok." "there-are-no-images":"Hiç resim yok.",
"click-on-the-image-for-options": "Özellikler için resme tıklayın.",
"set-as-cover-image": "Kapak resmi olarak ayarla",
"delete-image": "Resmi sil",
"image-description": "Resim açıklaması",
"social-networks-links": "Sosyal ağ linkleri",
"email-access-code": "Email erişim kodu",
"current-format": "Geçerli format",
"welcome": "Hoşgeldiniz"
} }

View File

@ -3,7 +3,7 @@
{ {
"native": "Українська (Україна)", "native": "Українська (Україна)",
"english-name": "Ukrainian", "english-name": "Ukrainian",
"last-update": "2016-01-23", "last-update": "2016-02-20",
"author": "Allec Bernz", "author": "Allec Bernz",
"email": "admin@allec.info", "email": "admin@allec.info",
"website": "http://allec.info" "website": "http://allec.info"
@ -37,7 +37,7 @@
"draft": "Чернетка", "draft": "Чернетка",
"delete": "Видалити", "delete": "Видалити",
"registered": "Зареєстрований", "registered": "Зареєстрований",
"Notifications": "Сповіщення", "notifications": "Повідомлення",
"profile": "Профіль", "profile": "Профіль",
"email": "Email", "email": "Email",
"settings": "Параметри", "settings": "Параметри",
@ -223,9 +223,17 @@
"cover-image": "Зображення обкладинки", "cover-image": "Зображення обкладинки",
"blog": "Блог", "blog": "Блог",
"more-images": "Більше зображень", "more-images": "Більше зображень",
"double-click-on-the-image-to-add-it": "Двічі клацніть на зображення, щоб додати його.",
"click-here-to-cancel": "Натисніть тут, щоб скасувати.", "click-here-to-cancel": "Натисніть тут, щоб скасувати.",
"type-the-tag-and-press-enter": "Введіть тег і натисніть Enter.", "type-the-tag-and-press-enter": "Введіть тег і натисніть Enter.",
"add": "Додати",
"manage-your-bludit-from-the-admin-panel": "Керуйте вашим Bludit через [панель управління]({{ADMIN_AREA_LINK}})", "manage-your-bludit-from-the-admin-panel": "Керуйте вашим Bludit через [панель управління]({{ADMIN_AREA_LINK}})",
"there-are-no-images":"Немає зображень" "there-are-no-images":"Немає зображень",
"click-on-the-image-for-options": "Натисніть на зображення, щоб переглянути параметри.",
"set-as-cover-image": "Встановити в якості обкладинки",
"delete-image": "Видалити зображення",
"image-description": "Опис зображення",
"social-networks-links": "Лінки на соціальні мережі"
} }

222
bl-languages/zh_CN.json Normal file
View File

@ -0,0 +1,222 @@
{
"language-data":
{
"native": "Simplified Chinese (PRC)",
"english-name": "Simplified Chinese",
"last-update": "2017-07-20",
"author": "Zhou Hao",
"email": "zhou.hao.27@gmail.com",
"website": "http://thezeusoft.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": "友好链接",
"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": "网址过滤器",
"page": "页面",
"pages": "页面",
"home": "首页",
"welcome-back": "欢迎回來",
"language": "语言",
"website": "网站",
"timezone": "时区",
"locale": "区域",
"new-post": "新文章",
"html-and-markdown-code-supported": "支持HTML与Markdown代码",
"new-page": "新页面",
"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": "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": "Email將不会被公开显示建议用于复原密码或是通知",
"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": "网站的网址",
"add-or-edit-description-tags-or": "新增或编辑简介、标签或是修改友好网址",
"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":"您可以修改网址來让文章或页面的网址可以更接近人类所了解的字词不能超过150个字",
"this-field-can-help-describe-the-content": "這個字段可以帮助快速理解內容不能超过150个字",
"write-the-tags-separated-by-comma": "撰写使用逗号分隔的标签,例如: 标签1, 标签2, 标签3",
"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": "通过[admin area](./admin/)管理您的Bludit",
"follow-bludit-on": "Follow Bludit on",
"visit-the-support-forum": "访问[forum](https://forum.bludit.com)來取得支持",
"read-the-documentation-for-more-information": "阅读[documentation](https://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":"您所输入的email是无效的",
"proceed-anyway": "继续!",
"drafts":"草稿",
"ip-address-has-been-blocked": "IP 地址已被封锁",
"try-again-in-a-few-minutes": "请过几分钟后再试",
"date": "日期",
"you-can-schedule-the-post-just-select-the-date-and-time": "您只需要选择一个日期与时间就可以预定什么時候再发表此文章",
"scheduled": "已安排",
"publish": "发表",
"please-check-your-theme-configuration": "请检查您的主題设定",
"plugin-label": "插件标签",
"enabled": "启用",
"disabled": "禁止",
"cli-mode": "Cli模式",
"command-line-mode": "命令行模式",
"enable-the-command-line-mode-if-you-add-edit": "启用命令行模式,如果您需要完成新增或者编辑工作。",
"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":"Email账户设定",
"sender-email": "发送者email",
"emails-will-be-sent-from-this-address":"Emails將会被从此地址发送",
"bludit-login-access-code": "BLUDIT - 登入存取码",
"check-your-inbox-for-your-login-access-code":"检查您的收件夹是否有收到登入存取码",
"there-was-a-problem-sending-the-email":"发送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": "密吗长度必须在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",
"you-can-use-this-field-to-define-a-set-off": "使用此字段定义默认语言代码",
"More images": "更多的图片",
"Cover image": "封面图片",
"site-information": "网站资讯",
"date-and-time-formats": "日期与时间格式",
"activate": "启用",
"deactivate": "关闭"
}

View File

@ -1,10 +1,10 @@
{ {
"author": "Bludit", "author": "Bludit",
"email": "", "email": "",
"website": "https://github.com/dignajar/bludit-plugins", "website": "https://plugins.bludit.com",
"version": "1.1", "version": "1.4",
"releaseDate": "2016-02-15", "releaseDate": "2016-05-28",
"license": "MIT", "license": "MIT",
"requires": "Bludit v1.1", "compatible": "1.5beta",
"notes": "" "notes": ""
} }

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "API",
"description": "Interface to interact with Bludit using HTTP protocol."
}
}

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "API",
"description": "Interfaz para interactuar con Bludit mediante el protocolo HTTP."
}
}

View File

@ -0,0 +1,7 @@
{
"plugin-data":
{
"name": "API",
"description": "Интерфейс для взаимодействия с Bludit через HTTP протокол."
}
}

View File

@ -0,0 +1,10 @@
{
"author": "Bludit",
"email": "",
"website": "https://plugins.bludit.com",
"version": "1.4",
"releaseDate": "2016-05-28",
"license": "MIT",
"compatible": "1.5beta",
"notes": ""
}

213
bl-plugins/api/plugin.php Normal file
View File

@ -0,0 +1,213 @@
<?php
class pluginAPI extends Plugin {
public function init()
{
global $Security;
// This key is used for request such as get the list of all posts and pages
$authKey = md5($Security->key1().time().DOMAIN_BASE);
$this->dbFields = array(
'ping'=>0, // 0 = false, 1 = true
'authKey'=>$authKey, // Private key
'showAllAmount'=>15 // Amount of posts and pages for return
);
}
public function form()
{
$html = '';
$html .= '<div>';
$html .= '<input type="hidden" name="ping" value="0">';
$html .= '<input name="ping" id="jsping" type="checkbox" value="1" '.($this->getDbField('ping')?'checked':'').'>';
$html .= '<label class="forCheckbox" for="jsping">Ping Bludit.com</label>';
$html .= '<div class="tip">Enable this feature to share your posts and pages with Bludit.com.</div>';
$html .= '</div>';
$html .= '<div>';
$html .= '<p><b>Authorization Key:</b> '.$this->getDbField('authKey').'</p>';
$html .= '<div class="tip">This key is private, do not share it with anyone.</div>';
$html .= '</div>';
$html .= '<div>';
$html .= '<p><b>Show all posts:</b> <a href="'.DOMAIN_BASE.'api/show/all/posts/'.$this->getDbField('authKey').'">'.DOMAIN_BASE.'api/show/all/posts/'.$this->getDbField('authKey').'</a></p>';
$html .= '<div class="tip">Get all posts from this site.</div>';
$html .= '</div>';
$html .= '<div>';
$html .= '<p><b>Show all pages:</b> <a href="'.DOMAIN_BASE.'api/show/all/pages/'.$this->getDbField('authKey').'">'.DOMAIN_BASE.'api/show/all/pages/'.$this->getDbField('authKey').'</a></p>';
$html .= '<div class="tip">Get all pages from this site.</div>';
$html .= '</div>';
$html .= '<div>';
$html .= '<p><b>Show post:</b> <a href="'.DOMAIN_BASE.'api/show/post/{POST-NAME}">'.DOMAIN_BASE.'api/show/post/{POST-NAME}</a></p>';
$html .= '<div class="tip">Get a particular post, change the {POST-NAME} with the post friendly url.</div>';
$html .= '</div>';
$html .= '<div>';
$html .= '<p><b>Show page:</b> <a href="'.DOMAIN_BASE.'api/show/page/{PAGE-NAME}">'.DOMAIN_BASE.'api/show/page/{PAGE-NAME}</a></p>';
$html .= '<div class="tip">Get a particular page, change the {PAGE-NAME} with the page friendly url.</div>';
$html .= '</div>';
return $html;
}
public function afterFormSave()
{
$this->ping();
}
private function ping()
{
if($this->getDbField('ping')) {
// Get the authentication key
$authKey = $this->getDbField('authKey');
// Just a request HTTP with the website URL
Log::set( file_get_contents('https://www.bludit.com/api.php?authKey='.$authKey) );
}
}
private function getPost($key)
{
// Generate the object Post
$Post = buildPost($key);
if(!$Post) {
return json_encode(array(
'status'=>'0',
'bludit'=>'Bludit API plugin',
'message'=>'The post doesn\'t exist'
));
}
return $Post->json();
}
private function getAllPosts()
{
$posts = buildPostsForPage(0, $this->getDbField('showAllAmount'), true, false);
$tmp = array();
foreach($posts as $Post) {
array_push($tmp, $Post->json( $returnsArray=true ));
}
return json_encode($tmp);
}
private function getPage($key)
{
// Generate the object Page
$Page = buildPage($key);
if(!$Page) {
return json_encode(array(
'status'=>'0',
'bludit'=>'Bludit API plugin',
'message'=>'The page doesn\'t exist'
));
}
return $Page->json();
}
private function getAllPages()
{
$pages = buildAllPages();
$tmp = array();
foreach($pages as $Page) {
if($Page->published()) {
array_push($tmp, $Page->json( $returnsArray=true ));
}
}
return json_encode($tmp);
}
public function beforeRulesLoad()
{
global $Url;
// The URI start with /api/
$startString = HTML_PATH_ROOT.'api/';
$URI = $Url->uri();
$length = mb_strlen($startString, CHARSET);
if( mb_substr($URI, 0, $length)!=$startString ) {
return false;
}
// Remove the first part of the URI
$URI = ltrim($URI, HTML_PATH_ROOT.'api/');
// Parameters
// ------------------------------------------------------------
// show post {post slug}
// show page {page slug}
// show all posts {AUTH KEY}
// show all pages {AUTH KEY}
// Get parameters
$parameters = explode('/', $URI);
for($i=0; $i<3; $i++) {
if(empty($parameters[$i])) {
return false;
} else {
// Sanizite
$parameters[$i] = Sanitize::html($parameters[$i]);
}
}
// Default JSON
$json = json_encode(array(
'status'=>'0',
'bludit'=>'Bludit API plugin',
'message'=>'Check the parameters'
));
if($parameters[0]==='show') {
if($parameters[1]==='all') {
// Authentication key from the URI
$authKey = $parameters[3];
// Compare keys
if( $authKey===$this->getDbField('authKey') ) {
if($parameters[2] === 'posts') {
$json = $this->getAllPosts();
}
elseif($parameters[2] === 'pages') {
$json = $this->getAllPages();
}
}
}
elseif($parameters[1]==='post' || $parameters[1]==='page') {
$key = $parameters[2];
if($parameters[1] === 'post') {
$json = $this->getPost($key);
}
elseif($parameters[1] === 'page') {
$json = $this->getPage($key);
}
}
}
// Print the JSON
header('Content-Type: application/json');
exit($json);
}
}

View File

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

View File

@ -1,10 +1,10 @@
{ {
"author": "Bludit", "author": "Bludit",
"email": "", "email": "",
"website": "https://github.com/dignajar/bludit-plugins", "website": "https://plugins.bludit.com",
"version": "1.1", "version": "1.4",
"releaseDate": "2016-02-13", "releaseDate": "2016-05-28",
"license": "MIT", "license": "MIT",
"requires": "Bludit v1.1", "compatible": "1.5beta",
"notes": "" "notes": ""
} }

View File

@ -8,9 +8,9 @@ class pluginDisqus extends Plugin {
{ {
$this->dbFields = array( $this->dbFields = array(
'shortname'=>'', 'shortname'=>'',
'enablePages'=>false, 'enablePages'=>0,
'enablePosts'=>false, 'enablePosts'=>0,
'enableDefaultHomePage'=>false 'enableDefaultHomePage'=>1
); );
} }
@ -44,17 +44,20 @@ class pluginDisqus extends Plugin {
$html .= '</div>'; $html .= '</div>';
$html .= '<div>'; $html .= '<div>';
$html .= '<input name="enablePages" id="jsenablePages" type="checkbox" value="true" '.($this->getDbField('enablePages')?'checked':'').'>'; $html .= '<input type="hidden" name="enablePages" value="0">';
$html .= '<input name="enablePages" id="jsenablePages" type="checkbox" value="1" '.($this->getDbField('enablePages')?'checked':'').'>';
$html .= '<label class="forCheckbox" for="jsenablePages">'.$Language->get('Enable Disqus on pages').'</label>'; $html .= '<label class="forCheckbox" for="jsenablePages">'.$Language->get('Enable Disqus on pages').'</label>';
$html .= '</div>'; $html .= '</div>';
$html .= '<div>'; $html .= '<div>';
$html .= '<input name="enablePosts" id="jsenablePosts" type="checkbox" value="true" '.($this->getDbField('enablePosts')?'checked':'').'>'; $html .= '<input type="hidden" name="enablePosts" value="0">';
$html .= '<input name="enablePosts" id="jsenablePosts" type="checkbox" value="1" '.($this->getDbField('enablePosts')?'checked':'').'>';
$html .= '<label class="forCheckbox" for="jsenablePosts">'.$Language->get('Enable Disqus on posts').'</label>'; $html .= '<label class="forCheckbox" for="jsenablePosts">'.$Language->get('Enable Disqus on posts').'</label>';
$html .= '</div>'; $html .= '</div>';
$html .= '<div>'; $html .= '<div>';
$html .= '<input name="enableDefaultHomePage" id="jsenableDefaultHomePage" type="checkbox" value="true" '.($this->getDbField('enableDefaultHomePage')?'checked':'').'>'; $html .= '<input type="hidden" name="enableDefaultHomePage" value="0">';
$html .= '<input name="enableDefaultHomePage" id="jsenableDefaultHomePage" type="checkbox" value="1" '.($this->getDbField('enableDefaultHomePage')?'checked':'').'>';
$html .= '<label class="forCheckbox" for="jsenableDefaultHomePage">'.$Language->get('Enable Disqus on default home page').'</label>'; $html .= '<label class="forCheckbox" for="jsenableDefaultHomePage">'.$Language->get('Enable Disqus on default home page').'</label>';
$html .= '</div>'; $html .= '</div>';

View File

@ -0,0 +1,12 @@
{
"plugin-data":
{
"name": "Інструменти Google",
"description": "Цей плагін генерує мета-тег для перевірки вашого сайту у Google Webmasters Tools і JavaScript-код для відстеження вашого сайту з Google Analytics."
},
"google-webmasters-tools": "Google Webmasters tools",
"google-analytics-tracking-id": "КОД відстеження Google Analytics",
"complete-this-field-with-the-google-site-verification": "Заповніть це поле для перевірки власника сайту.",
"complete-this-field-with-the-tracking-id": "Заповніть це поле для генерації Javascript-коду відстеження у Google Analytics."
}

View File

@ -1,10 +1,10 @@
{ {
"author": "Bludit", "author": "Bludit",
"email": "", "email": "",
"website": "https://github.com/dignajar/bludit-plugins", "website": "https://plugins.bludit.com",
"version": "1.1", "version": "1.4",
"releaseDate": "2016-02-13", "releaseDate": "2016-05-28",
"license": "MIT", "license": "MIT",
"requires": "Bludit v1.1", "compatible": "1.5beta",
"notes": "" "notes": ""
} }

View File

@ -31,13 +31,15 @@ class pluginGoogleTools extends Plugin {
public function siteHead() public function siteHead()
{ {
$html = PHP_EOL.'<!-- Google Webmasters Tools -->'.PHP_EOL; global $Url;
$html .= '<meta name="google-site-verification" content="'.$this->getDbField('google-site-verification').'">'.PHP_EOL;
if(Text::isEmpty($this->getDbField('google-site-verification'))) { if(Text::isEmpty($this->getDbField('google-site-verification')) || !($Url->whereAmI()=='home')) {
return false; return false;
} }
$html = PHP_EOL.'<!-- Google Webmasters Tools -->'.PHP_EOL;
$html .= '<meta name="google-site-verification" content="'.$this->getDbField('google-site-verification').'">'.PHP_EOL;
return $html; return $html;
} }

View File

@ -0,0 +1,9 @@
{
"plugin-data":
{
"name": "Neueste Beiträge",
"description": "Anzeige der neuesten Beiträge."
},
"amount-of-posts": "Anzahl der Beiträge"
}

View File

@ -0,0 +1,9 @@
{
"plugin-data":
{
"name": "Neueste Beiträge",
"description": "Anzeige der neuesten Beiträge."
},
"amount-of-posts": "Anzahl der Beiträge"
}

View File

@ -5,6 +5,5 @@
"description": "Shows the latest posts published." "description": "Shows the latest posts published."
}, },
"amount-of-posts": "Amount of posts", "amount-of-posts": "Amount of posts"
"show-home-link": "Show home link"
} }

View File

@ -5,6 +5,5 @@
"description": "Muestra las últimas entradas publicadas." "description": "Muestra las últimas entradas publicadas."
}, },
"amount-of-posts": "Cantidad de entradas", "amount-of-posts": "Cantidad de entradas"
"show-home-link": "Mostrar vínculo a inicio"
} }

View File

@ -5,6 +5,5 @@
"description": "Muestra las últimas entradas publicadas." "description": "Muestra las últimas entradas publicadas."
}, },
"amount-of-posts": "Cantidad de entradas", "amount-of-posts": "Cantidad de entradas"
"show-home-link": "Mostrar vínculo a inicio"
} }

View File

@ -5,6 +5,5 @@
"description": "Muestra las últimas entradas publicadas." "description": "Muestra las últimas entradas publicadas."
}, },
"amount-of-posts": "Cantidad de entradas", "amount-of-posts": "Cantidad de entradas"
"show-home-link": "Mostrar vínculo a inicio"
} }

View File

@ -5,6 +5,5 @@
"description": "公開された最近の投稿を表示します。" "description": "公開された最近の投稿を表示します。"
}, },
"amount-of-posts": "投稿表示数", "amount-of-posts": "投稿表示数"
"show-home-link": "ホーム・リンクを表示"
} }

View File

@ -0,0 +1,9 @@
{
"plugin-data":
{
"name": "Последние записи",
"description": "Показывает последние опубликованные записи."
},
"amount-of-posts": "Количество записей"
}

View File

@ -0,0 +1,10 @@
{
"plugin-data":
{
"name": "Останні публікації",
"description": "Показує останні опубліковані публікації."
},
"amount-of-posts": "Кількість публікацій",
"show-home-link": "Показати лінк на домашню сторінку"
}

View File

@ -1,10 +1,10 @@
{ {
"author": "Bludit", "author": "Bludit",
"email": "", "email": "",
"website": "https://github.com/dignajar/bludit-plugins", "website": "https://plugins.bludit.com",
"version": "1.1", "version": "1.4",
"releaseDate": "2016-02-13", "releaseDate": "2016-05-28",
"license": "MIT", "license": "MIT",
"requires": "Bludit v1.1", "compatible": "1.5beta",
"notes": "" "notes": ""
} }

View File

@ -1,10 +0,0 @@
{
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "1.1",
"releaseDate": "2016-02-13",
"license": "MIT",
"requires": "Bludit v1.1",
"notes": ""
}

View File

@ -5,6 +5,6 @@
"description": "Поставете вашия сайт на режим на поддръжка." "description": "Поставете вашия сайт на режим на поддръжка."
}, },
"enable-maintence-mode": "Активиране режим на поддръжка ", "enable-maintenance-mode": "Активиране режим на поддръжка ",
"message": "Съобщение" "message": "Съобщение"
} }

View File

@ -5,6 +5,6 @@
"description": "Wartungsmodus für die Website mit Zugang zum Admin-Bereich." "description": "Wartungsmodus für die Website mit Zugang zum Admin-Bereich."
}, },
"enable-maintence-mode": "Aktivierung des Wartungsmodus", "enable-maintenance-mode": "Aktivierung des Wartungsmodus",
"message": "Auf der Website angezeigter Hinweis" "message": "Auf der Website angezeigter Hinweis"
} }

View File

@ -5,6 +5,6 @@
"description": "Wartungsmodus für die Website mit Zugang zum Admin-Bereich." "description": "Wartungsmodus für die Website mit Zugang zum Admin-Bereich."
}, },
"enable-maintence-mode": "Aktivierung des Wartungsmodus", "enable-maintenance-mode": "Aktivierung des Wartungsmodus",
"message": "Auf der Website angezeigter Hinweis" "message": "Auf der Website angezeigter Hinweis"
} }

View File

@ -5,6 +5,6 @@
"description": "Set your site on maintenance mode, you can access to admin area." "description": "Set your site on maintenance mode, you can access to admin area."
}, },
"enable-maintence-mode": "Enable maintence mode", "enable-maintenance-mode": "Enable maintenance mode",
"message": "Message" "message": "Message"
} }

View File

@ -5,6 +5,6 @@
"description": "Configura el sitio en modo mantenimiento, se puede acceder al panel de administración mientras tanto." "description": "Configura el sitio en modo mantenimiento, se puede acceder al panel de administración mientras tanto."
}, },
"enable-maintence-mode": "Habilitar modo mantenimiento", "enable-maintenance-mode": "Habilitar modo mantenimiento",
"message": "Mensaje" "message": "Mensaje"
} }

View File

@ -5,6 +5,6 @@
"description": "Configurer votre site sur le mode de maintenance, vous pouvez accéder à la zone d'administration." "description": "Configurer votre site sur le mode de maintenance, vous pouvez accéder à la zone d'administration."
}, },
"enable-maintence-mode": "Activer le mode de maintence", "enable-maintenance-mode": "Activer le mode de maintenance",
"message": "Message" "message": "Message"
} }

View File

@ -5,6 +5,6 @@
"description": "メンテンナンス・モードに設定します。管理エリアにはアクセスできます。" "description": "メンテンナンス・モードに設定します。管理エリアにはアクセスできます。"
}, },
"enable-maintence-mode": "メンテンナンス・モードを有効にする", "enable-maintenance-mode": "メンテンナンス・モードを有効にする",
"message": "メッセージ" "message": "メッセージ"
} }

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