Merge remote-tracking branch 'dignajar/master'

This commit is contained in:
Frédéric K 2015-11-15 10:09:31 +01:00
commit bf252e65ca
49 changed files with 497 additions and 169 deletions

View File

@ -103,6 +103,7 @@ button.delete-button:hover {
height: 400px;
}
/* ----------- ALERT ----------- */
#alert {
@ -235,9 +236,16 @@ div.plugin-links > span.separator {
color: #AAAAAA;
}
#jsformplugin textarea {
min-width: 400px;
width: 60%;
min-height: 100px;
}
#jsformplugin input[type=text] {
min-width: 400px;
width: 60%;
height: 37px;
}
#jsformplugin input[type="checkbox"] {
@ -248,6 +256,6 @@ div.plugin-links > span.separator {
#jsformplugin label.forCheckbox {
margin-left: 3px;
margin-bottom: 10px;
margin-bottom: 0px !important;
display: inline-block;
}

View File

@ -159,6 +159,9 @@ class HTML {
$("#jsaddImage").on("click", function() {
var filename = $("#jsimageList option:selected").text();
if(!filename.trim()) {
return false;
}
var textareaValue = $("#jscontent").val();
$("#jscontent").val(textareaValue + "<img src=\""+filename+"\" alt=\"\">" + "\n");
});
@ -187,6 +190,10 @@ class HTML {
bar.css("width", "100%").text("100%");
setTimeout(function() { progressbar.addClass("uk-hidden"); }, 250);
$("#jsimageList").prepend("<option value=\'"+response.filename+"\' selected=\'selected\'>"+response.filename+"</option>");
},
notallowed: function(file, settings) {
alert("'.$L->g('Supported image file types').' "+settings.allow);
}
};

View File

@ -26,7 +26,7 @@ echo '
echo '<tr>';
echo '<td><a href="'.HTML_PATH_ADMIN_ROOT.'edit-post/'.$Post->key().'">'.($status?'<span class="label-draft">'.$status.'</span>':'').($Post->title()?$Post->title():'<span class="label-empty-title">'.$Language->g('Empty title').'</span> ').'</a></td>';
echo '<td class="uk-text-center">'.$Post->date().'</td>';
echo '<td class="uk-text-center">'.$Post->dateRaw().'</td>';
echo '<td><a target="_blank" href="'.$Post->permalink().'">'.$Url->filters('post').'/'.$Post->key().'</a></td>';
echo '</tr>';
}

View File

@ -35,6 +35,13 @@ HTML::formOpen(array('class'=>'uk-form-horizontal'));
'tip'=>$L->g('you-can-use-this-field-to-define-a-set-off')
));
HTML::formInputText(array(
'name'=>'dateFormat',
'label'=>$L->g('Date format'),
'value'=>$Site->dateFormat(),
'class'=>'uk-width-1-2 uk-form-medium'
));
echo '<div class="uk-form-row">
<div class="uk-form-controls">
<button type="submit" class="uk-button uk-button-primary">'.$L->g('Save').'</button>

View File

@ -7,6 +7,11 @@
* Bludit is opensource software licensed under the MIT license.
*/
// Check PHP version
if(version_compare(phpversion(), '5.3', '<')) {
exit('Current PHP version '.phpversion().', you need > 5.3. (ERR_202)');
}
// Security constant
define('BLUDIT', true);
@ -139,19 +144,6 @@ function checkSystem()
$phpModules = get_loaded_extensions();
}
// If the php version is less than 5.3, then don't check others requirements.
if(!version_compare(phpversion(), '5.3', '>='))
{
$errorText = 'Current PHP version '.phpversion().', you need > 5.3. (ERR_202)';
error_log($errorText, 0);
$tmp['title'] = 'PHP version';
$tmp['errorText'] = $errorText;
array_push($stdOut, $tmp);
return $stdOut;
}
if(!file_exists(PATH_ROOT.'.htaccess'))
{
$errorText = 'Missing file, upload the file .htaccess (ERR_201)';
@ -202,9 +194,8 @@ function install($adminPassword, $email, $timezoneOffset)
$stdOut = array();
$timezone = timezone_name_from_abbr('', $timezoneOffset, 1);
$timezone = timezone_name_from_abbr('', $timezoneOffset, 0);
if($timezone === false) { $timezone = timezone_name_from_abbr('', $timezoneOffset, 0); } // Workaround bug #44780
date_default_timezone_set($timezone);
$currentDate = Date::current(DB_DATE_FORMAT);

View File

@ -58,6 +58,15 @@ class dbJSON
return count($this->db);
}
public function getField($field)
{
if(isset($this->db[$field])) {
return $this->db[$field];
}
return $this->dbFields[$field]['value'];
}
// Save the JSON file.
public function save()
{

View File

@ -75,7 +75,7 @@ define('CLI_STATUS', 'published');
// Database format date
define('DB_DATE_FORMAT', 'Y-m-d H:i');
// Database format date
// Date format for Dashboard schedule posts
define('SCHEDULED_DATE_FORMAT', 'd M - h:i a');
// Token time to live for login via email. The offset is defined by http://php.net/manual/en/datetime.modify.php
@ -128,6 +128,7 @@ include(PATH_HELPERS.'email.class.php');
include(PATH_HELPERS.'filesystem.class.php');
include(PATH_HELPERS.'alert.class.php');
include(PATH_HELPERS.'paginator.class.php');
include(PATH_HELPERS.'image.class.php');
// Session
Session::start();
@ -147,13 +148,16 @@ $Parsedown = new Parsedown();
$Security = new Security();
// HTML PATHs
//$base = (dirname(getenv('SCRIPT_NAME'))==DS)?'/':dirname(getenv('SCRIPT_NAME')).'/';
$base = empty( $_SERVER['SCRIPT_NAME'] ) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
$base = dirname($base);
if($base!=DS) {
$base = $base.'/';
}
else {
// Workaround for Windows Web Servers
$base = '/';
}
define('HTML_PATH_ROOT', $base);
@ -173,7 +177,7 @@ define('HTML_PATH_PLUGINS', HTML_PATH_ROOT.'plugins/');
define('JQUERY', HTML_PATH_ADMIN_THEME_JS.'jquery.min.js');
// PHP paths with dependency
define('PATH_THEME', PATH_ROOT.'themes/'.$Site->theme().'/');
define('PATH_THEME', PATH_ROOT.'themes'.DS.$Site->theme().DS);
define('PATH_THEME_PHP', PATH_THEME.'php'.DS);
define('PATH_THEME_CSS', PATH_THEME.'css'.DS);
define('PATH_THEME_JS', PATH_THEME.'js'.DS);

View File

@ -68,6 +68,13 @@ function buildPost($key)
$Post->setField('breakContent', $explode[0], true);
$Post->setField('readMore', !empty($explode[1]), true);
// Date format
$postDate = $Post->date();
$Post->setField('dateRaw', $postDate, true);
$postDateFormated = $Post->dateRaw( $Site->dateFormat() );
$Post->setField('date', $postDateFormated, true);
// Parse username for the post.
if( $dbUsers->userExists( $Post->username() ) )
{

View File

@ -11,7 +11,7 @@ class dbPages extends dbJSON
'username'=> array('inFile'=>false, 'value'=>''),
'tags'=> array('inFile'=>false, 'value'=>array()),
'status'=> array('inFile'=>false, 'value'=>'draft'),
'date'=> array('inFile'=>false, 'value'=>0),
'date'=> array('inFile'=>false, 'value'=>''),
'position'=> array('inFile'=>false, 'value'=>0)
);
@ -34,9 +34,7 @@ class dbPages extends dbJSON
}
// Current date.
if(empty($args['date'])) {
$args['date'] = Date::current(DB_DATE_FORMAT);
}
$args['date'] = Date::current(DB_DATE_FORMAT);
// Verify arguments with the database fields.
foreach($this->dbFields as $field=>$options)

View File

@ -2,7 +2,7 @@
class dbSite extends dbJSON
{
private $dbFields = array(
public $dbFields = array(
'title'=> array('inFile'=>false, 'value'=>'I am Guybrush Threepwood, mighty developer'),
'slogan'=> array('inFile'=>false, 'value'=>''),
'description'=> array('inFile'=>false, 'value'=>''),
@ -19,7 +19,9 @@ class dbSite extends dbJSON
'uriTag'=> array('inFile'=>false, 'value'=>'/tag/'),
'url'=> array('inFile'=>false, 'value'=>''),
'cliMode'=> array('inFile'=>false, 'value'=>true),
'emailFrom'=> array('inFile'=>false, 'value'=>'')
'emailFrom'=> array('inFile'=>false, 'value'=>''),
'dateFormat'=> array('inFile'=>false, 'value'=>'F j, Y'),
'timeFormat'=> array('inFile'=>false, 'value'=>'g:i a')
);
function __construct()
@ -61,9 +63,9 @@ class dbSite extends dbJSON
public function uriFilters($filter='')
{
$filters['admin'] = '/admin/';
$filters['post'] = $this->db['uriPost'];
$filters['page'] = $this->db['uriPage'];
$filters['tag'] = $this->db['uriTag'];
$filters['post'] = $this->getField('uriPost');
$filters['page'] = $this->getField('uriPage');
$filters['tag'] = $this->getField('uriTag');
if(empty($filter)) {
return $filters;
@ -74,70 +76,83 @@ class dbSite extends dbJSON
public function urlPost()
{
return $this->url().ltrim($this->db['uriPost'], '/');
$filter = $this->getField('uriPost');
return $this->url().ltrim($filter, '/');
}
public function urlPage()
{
return $this->url().ltrim($this->db['uriPage'], '/');
$filter = $this->getField('uriPage');
return $this->url().ltrim($filter, '/');
}
public function urlTag()
{
return $this->url().ltrim($this->db['uriTag'], '/');
$filter = $this->getField('uriTag');
return $this->url().ltrim($filter, '/');
}
// Returns the site title.
public function title()
{
return $this->db['title'];
return $this->getField('title');
}
public function emailFrom()
{
return $this->db['emailFrom'];
return $this->getField('emailFrom');
}
public function dateFormat()
{
return $this->getField('dateFormat');
}
public function timeFormat()
{
return $this->getField('timeFormat');
}
// Returns the site slogan.
public function slogan()
{
return $this->db['slogan'];
return $this->getField('slogan');
}
// Returns the site description.
public function description()
{
return $this->db['description'];
return $this->getField('description');
}
// Returns the site theme name.
public function theme()
{
return $this->db['theme'];
return $this->getField('theme');
}
// Returns the admin theme name.
public function adminTheme()
{
return $this->db['adminTheme'];
return $this->getField('adminTheme');
}
// Returns the footer text.
public function footer()
{
return $this->db['footer'];
return $this->getField('footer');
}
// Returns the url site.
public function url()
{
return $this->db['url'];
return $this->getField('url');
}
// Returns TRUE if the cli mode is enabled, otherwise FALSE.
public function cliMode()
{
return $this->db['cliMode'];
return $this->getField('cliMode');
}
// Returns the relative home link
@ -149,25 +164,25 @@ class dbSite extends dbJSON
// Returns the timezone.
public function timezone()
{
return $this->db['timezone'];
return $this->getField('timezone');
}
// Returns posts per page.
public function postsPerPage()
{
return $this->db['postsperpage'];
return $this->getField('postsperpage');
}
// Returns the current language.
public function language()
{
return $this->db['language'];
return $this->getField('language');
}
// Returns the current locale.
public function locale()
{
return $this->db['locale'];
return $this->getField('locale');
}
// Returns the current language in short format.
@ -183,7 +198,7 @@ class dbSite extends dbJSON
// Returns the current homepage.
public function homepage()
{
return $this->db['homepage'];
return $this->getField('homepage');
}
// Set the locale.

View File

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

View File

@ -101,7 +101,13 @@ class Post extends fileContent
// Returns the post date according to locale settings and format settings.
public function date($format=false)
{
$date = $this->getField('date');
return $this->getField('date');
}
// Returns the post date according to locale settings and format as database stored.
public function dateRaw($format=false)
{
$date = $this->getField('dateRaw');
if($format) {
return Date::format($date, DB_DATE_FORMAT, $format);

View File

@ -3,7 +3,7 @@
{
"native": "Български (България)",
"english-name": "Bulgarian",
"last-update": "2015-10-29",
"last-update": "2015-11-09",
"author": "Христо Дипчиков",
"email": "",
"website": "www.hristodipchikov.tk"
@ -70,7 +70,7 @@
"timezone": "Часова зона",
"locale": "Местоположение",
"new-post": "Нова публикация",
"html-and-markdown-code-supported": "Поддръжан код HTML и Markdown ",
"html-and-markdown-code-supported": "Поддръжан код HTML и Markdown ",
"new-page": "Нова страница",
"manage-posts": "Управление на публикациите",
"published-date": "Дата на побликуване",
@ -116,9 +116,9 @@
"add-or-edit-description-tags-or": "Добавяне или редактиране на описание, eтикети или модифициране 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":"Можете да промените адреса, на дадената страница или публикация използвайки ключови думи. Но с обща дължина повече от 150 символаНапиши етикети.",
"this-field-can-help-describe-the-content": " В това поле може да опишете съдържанието с няколко думи. Но с обща дължина повече от 150 символа.",
"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 символа.",
"write-the-tags-separeted-by-comma": "Добавянето на етикети става чрез добавянето на запетая. Например: TAG1, tag2, tag3",
"delete-the-user-and-all-its-posts":"Изтриване на потребителя и всички негови публикации.",
"delete-the-user-and-associate-its-posts-to-admin-user": "Изтриване на потребителя, без изтриване на неговите публикации.",
@ -139,14 +139,14 @@
"congratulations-you-have-successfully-installed-your-bludit": "Поздравления вие успешно инсталирахте вашият **Bludit**",
"whats-next": "Какво следва?",
"manage-your-bludit-from-the-admin-panel": "Управлявайте вашият Bludit от [Администраторският панел](./admin/)",
"follow-bludit-on": "Follow Bludit on",
"visit-the-support-forum": "Visit the [forum](http://forum.bludit.com) for support",
"follow-bludit-on": "Последвайте Bludit в",
"visit-the-support-forum": "Посети [форум](http://forum.bludit.com) за подръжка",
"read-the-documentation-for-more-information": "Прочети [документацията](http://docs.bludit.com) за повече информация",
"share-with-your-friends-and-enjoy": "Споделете с приятелите си",
"the-page-has-not-been-found": "Страницата не е намерена.",
"error": "Грешна",
"bludit-installer": "Bludit Installer",
"welcome-to-the-bludit-installer": "Welcome to the Bludit installer",
"bludit-installer": "Bludit Инстлатор",
"welcome-to-the-bludit-installer": "Добре дошли в Bludit инсталатор",
"complete-the-form-choose-a-password-for-the-username-admin": "Попълнете формуляра, или парола за потребителското име « admin »",
"password-visible-field": "Парола във видимото поле!",
"install": "Инсталиране",
@ -172,7 +172,7 @@
"configure": "Конфигориране",
"uninstall": "Премахване",
"change-password": "Промяна на парола:",
"to-schedule-the-post-just-select-the-date-and-time": "За да планирате поста, просто изберете датата и часа.",
"to-schedule-the-post-just-select-the-date-and-time": "За да планирате поста, просто изберете дата и час.",
"write-the-tags-separated-by-commas": "Напишете етикети, разделени със запетая.",
"status": "Статус",
"published": "Пубиликуван",
@ -185,9 +185,9 @@
"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": "Вземете кода за достъп",
"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": "Покажи паролата",

View File

@ -3,7 +3,7 @@
{
"native": "Deutsch (Deutschland)",
"english-name": "German",
"last-update": "2015-11-05",
"last-update": "2015-11-13",
"author": "Edi Goetschel",
"email": "egoetschel@clickwork.ch",
"website": "http://www.clickwork.ch"
@ -41,8 +41,8 @@
"profile": "Profil",
"email": "E-Mail",
"settings": "Einstellungen",
"general": "Allgemeine Einstellungen",
"advanced": "Erweiterte Einstellungen",
"general": "Allgemein",
"advanced": "Erweitert",
"regional": "Lokalisierung",
"about": "Systeminformation",
"login": "Anmelden",
@ -163,7 +163,7 @@
"scheduled": "Veröffentlichung geplant.",
"publish": "Veröffentlichen",
"please-check-your-theme-configuration": "Bitte die Einstellungen des Themes prüfen.",
"plugin-label": "Plugin-Bezeichnung",
"plugin-label": "Titel auf der Website",
"enabled": "Aktiviert",
"disabled": "Deaktiviert",
"cli-mode": "CLI-Modus",
@ -193,8 +193,8 @@
"show-password": "Passwort zeigen",
"edit-or-remove-your=pages": "Seiten bearbeiten oder löschen.",
"edit-or-remove-your-blogs-posts": "Beiträge bearbeiten oder löschen.",
"general-settings": "Allgemeine Einnstellungen",
"advanced-settings": "Erweiterte Einnstellungen",
"general-settings": "Allgemein",
"advanced-settings": "Erweitert",
"manage-users": "Benutzerverwaltung",
"view-and-edit-your-profile": "Profil anschauen und bearbeiten.",
"password-must-be-at-least-6-characters-long": "Das Passwort muss mindestens 6 Zeichen lang sein",

View File

@ -203,5 +203,8 @@
"images": "Images",
"upload-image": "Upload image",
"drag-and-drop-or-click-here": "Drag and drop or click here",
"insert-image": "Insert image"
"insert-image": "Insert image",
"supported-image-file-types": "Supported image file types",
"date-format": "Date format",
"time-format": "Time format"
}

0
languages/fr_FR.json Executable file → Normal file
View File

View File

@ -3,7 +3,7 @@
{
"native": "Traditional Chinese (Taiwan)",
"english-name": "Traditional Chinese",
"last-update": "2015-11-05",
"last-update": "2015-11-10",
"author": "Ethan Chen",
"email": "ethan42411@gmail.com",
"website": "http://single4.ml"
@ -202,5 +202,6 @@
"images": "圖片",
"upload-image": "上傳圖片",
"drag-and-drop-or-click-here": "拖曳您的圖片到這裡或是點選這裡選擇圖片",
"insert-image": "插入圖片"
"insert-image": "插入圖片",
"supported-image-file-types": "可以上傳的檔案格式"
}

View File

@ -0,0 +1,12 @@
{
"plugin-data":
{
"name": "About",
"description": "Little description about your site or yourself.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.6",
"releaseDate": "2015-11-13"
}
}

47
plugins/about/plugin.php Normal file
View File

@ -0,0 +1,47 @@
<?php
class pluginAbout extends Plugin {
public function init()
{
$this->dbFields = array(
'label'=>'About',
'text'=>''
);
}
public function form()
{
global $Language;
$html = '<div>';
$html .= '<label>'.$Language->get('Plugin label').'</label>';
$html .= '<input name="label" id="jslabel" type="text" value="'.$this->getDbField('label').'">';
$html .= '</div>';
$html .= '<div>';
$html .= '<label>'.$Language->get('About').'</label>';
$html .= '<textarea name="text" id="jstext">'.$this->getDbField('text').'</textarea>';
$html .= '</div>';
return $html;
}
public function siteSidebar()
{
global $Language;
global $dbTags;
global $Url;
$filter = $Url->filters('tag');
$html = '<div class="plugin plugin-about">';
$html .= '<h2>'.$this->getDbField('label').'</h2>';
$html .= '<div class="plugin-content">';
$html .= $this->getDbField('text');
$html .= '</div>';
$html .= '</div>';
return $html;
}
}

View File

@ -6,8 +6,8 @@
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"version": "0.6",
"releaseDate": "2015-11-13"
},
"disqus-shortname": "Disqus shortname",
"enable-disqus-on-pages": "Enable Disqus on pages",

View File

@ -2,12 +2,7 @@
"plugin-data":
{
"name": "System komentarzy - Disqus",
"description": "System komentarzy Disqus przechowuje komentarze dla serwisów internetowych. Korzystanie z tej wtyczki wymaga rejestracji w serwisie disqus.com.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"description": "System komentarzy Disqus przechowuje komentarze dla serwisów internetowych. Korzystanie z tej wtyczki wymaga rejestracji w serwisie disqus.com."
},
"disqus-shortname": "Nazwa użytkownika Disqus",
"enable-disqus-on-pages": "Włącz Disqus na wszystkich stronach",

View File

@ -2,12 +2,7 @@
"plugin-data":
{
"name": "Google-Tools",
"description": "Dieses Plugin erzeugt den Meta-Tag, um deine Website mit den Google Webmasters Tools zu verbinden, und den Code für das JavaScript, der benötigt wird, um Google Analytics verwenden zu können.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"description": "Dieses Plugin erzeugt den Meta-Tag, um deine Website mit den Google Webmasters Tools zu verbinden, und den Code für das JavaScript, der benötigt wird, um Google Analytics verwenden zu können."
},
"google-webmasters-tools": "Google Webmasters Tools",
"google-analytics-tracking-id": "Google Analytics ID",

View File

@ -6,8 +6,8 @@
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"version": "0.6",
"releaseDate": "2015-11-13"
},
"google-webmasters-tools": "Google Webmasters tools",
"google-analytics-tracking-id": "Google Analytics Tracking ID",

View File

@ -2,12 +2,7 @@
"plugin-data":
{
"name": "Narzędzia Google",
"description": "Wtyczka ta generuje kod metatagów pozwalający zweryfikować stronę z serwisem Narzędzia Google Dla Webmasterów oraz wygenerować kod JavaScript monitorujący ruch z usługą Google Analytics.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"description": "Wtyczka ta generuje kod metatagów pozwalający zweryfikować stronę z serwisem Narzędzia Google Dla Webmasterów oraz wygenerować kod JavaScript monitorujący ruch z usługą Google Analytics."
},
"google-webmasters-tools": "Google Webmasters tools",
"google-analytics-tracking-id": "Google Analytics Tracking ID",

View File

@ -6,8 +6,8 @@
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"version": "0.6",
"releaseDate": "2015-11-13"
},
"enable-maintence-mode": "Enable maintence mode",

View File

@ -2,12 +2,7 @@
"plugin-data":
{
"name": "Tryb konserwacji",
"description": "Przełącz stronę w tryb konwersacji (wówczas działać będzie tylko kokpit).",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"description": "Przełącz stronę w tryb konwersacji (wówczas działać będzie tylko kokpit)."
},
"enable-maintence-mode": "Włącz tryb konwersacji",

View File

@ -6,7 +6,7 @@
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"version": "0.6",
"releaseDate": "2015-11-13"
}
}

View File

@ -2,11 +2,6 @@
"plugin-data":
{
"name": "Open Graph",
"description": "Protokół Open Graph zezwala stronie na stosowanie meta tagów używanych w serwisach społecznościowych.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"description": "Protokół Open Graph zezwala stronie na stosowanie meta tagów używanych w serwisach społecznościowych."
}
}

View File

@ -1,8 +1,8 @@
{
"plugin-data":
{
"name": "Liste aller Seiten",
"description": "Auflistung aller Seiten."
"name": "Anzeige aller Seiten",
"description": "Anzeige aller Seiten in der Seitenleiste (bei Themes mit Seitenleiste)."
},
"home": "Hauptseite",

View File

@ -6,10 +6,10 @@
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"version": "0.6",
"releaseDate": "2015-11-13"
},
"home": "Home",
"show-home-link": "Show home link"
"home": "Home",
"show-home-link": "Show home link"
}

View File

@ -5,6 +5,6 @@
"description": "Constitue un menu avec les liens des pages dans la colonne du thème."
},
"home": "Accueil",
"show-home-link": "Afficher le lien de la page daccueil"
"home": "Accueil",
"show-home-link": "Afficher le lien de la page daccueil"
}

View File

@ -2,14 +2,9 @@
"plugin-data":
{
"name": "Lista stron",
"description": "Wyświetla listę stron znajdujących się w witrynie.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"description": "Wyświetla listę stron znajdujących się w witrynie."
},
"home": "Strona główna",
"show-home-link": "Pokaż odnośnik do strony głównek"
"home": "Strona główna",
"show-home-link": "Pokaż odnośnik do strony głównek"
}

View File

@ -5,6 +5,6 @@
"description": "顯示所有頁面的列表"
},
"home": "首頁",
"show-home-link": "顯示首頁連結"
"home": "首頁",
"show-home-link": "顯示首頁連結"
}

View File

@ -54,24 +54,32 @@ class pluginPages extends Plugin {
$parents = $pagesParents[NO_PARENT_CHAR];
foreach($parents as $parent)
{
// Print the parent
$html .= '<li>';
$html .= '<a class="parent '.( ($parent->key()==$Url->slug())?' active':'').'" href="'.$parent->permalink().'">'.$parent->title().'</a>';
// Check if the parent has children
if(isset($pagesParents[$parent->key()]))
// Check if the parent is published
if( $parent->published() )
{
$children = $pagesParents[$parent->key()];
// Print the parent
$html .= '<li>';
$html .= '<a class="parent '.( ($parent->key()==$Url->slug())?' active':'').'" href="'.$parent->permalink().'">'.$parent->title().'</a>';
// Print children
$html .= '<ul>';
foreach($children as $child)
// Check if the parent has children
if(isset($pagesParents[$parent->key()]))
{
$html .= '<li>';
$html .= '<a class="children '.( ($child->key()==$Url->slug())?' active':'').'" href="'.$child->permalink().'">'.$child->title().'</a>';
$html .= '</li>';
$children = $pagesParents[$parent->key()];
// Print children
$html .= '<ul class="children">';
foreach($children as $child)
{
// Check if the child is published
if( $child->published() )
{
$html .= '<li class="child">';
$html .= '<a class="'.( ($child->key()==$Url->slug())?' active':'').'" href="'.$child->permalink().'">'.$child->title().'</a>';
$html .= '</li>';
}
}
$html .= '</ul>';
}
$html .= '</ul>';
}
}

View File

@ -6,8 +6,8 @@
"author": "NextStepWebs",
"email": "",
"website": "https://github.com/NextStepWebs/simplemde-markdown-editor",
"version": "1.8.0",
"releaseDate": "2015-10-29"
"version": "1.8.1",
"releaseDate": "2015-11-13"
},
"toolbar": "Toolbar",
"tab-size": "Tab size"

View File

@ -2,12 +2,7 @@
"plugin-data":
{
"name": "Edytor SimpleMDE",
"description": "Prosty, piękny i osadzony w JavaScript edytor markdown stworzony przez @WesCossick. Na potrzeby Bludit dostosowany przez Diego Najara.",
"author": "NextStepWebs",
"email": "",
"website": "https://github.com/NextStepWebs/simplemde-markdown-editor",
"version": "1.7.4",
"releaseDate": "2015-10-02"
"description": "Prosty, piękny i osadzony w JavaScript edytor markdown stworzony przez @WesCossick. Na potrzeby Bludit dostosowany przez Diego Najar."
},
"toolbar": "Pasek narzędzi",
"tab-size": "Rozmiar wcięcia"

View File

@ -97,6 +97,9 @@ class pluginsimpleMDE extends Plugin {
$html .= '$("#jsaddImage").on("click", function() {
var filename = $("#jsimageList option:selected" ).text();
if(!filename.trim()) {
return false;
}
var text = simplemde.value();
simplemde.value(text + "![alt text]("+filename+")" + "\n");
});';

View File

@ -1,7 +1,7 @@
{
"plugin-data":
{
"name": "Liste aller Schlagwörter",
"description": "Anzeige aller Schlagwörter."
"name": "Anzeige aller Schlagwörter",
"description": "Anzeige aller Schlagwörter in der Seitenleiste (bei Themes mit Seitenleiste)."
}
}

View File

@ -6,7 +6,7 @@
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"version": "0.6",
"releaseDate": "2015-11-13"
}
}

View File

@ -2,11 +2,6 @@
"plugin-data":
{
"name": "Lista tagów",
"description": "Wyświetla wszystkie tagi w postaci listy.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-plugins",
"version": "0.3",
"releaseDate": "2015-10-02"
"description": "Wyświetla wszystkie tagi w postaci listy."
}
}

View File

@ -14,7 +14,7 @@ class pluginTags extends Plugin {
global $Language;
$html = '<div>';
$html .= '<label>Plugin label</label>';
$html .= '<label>'.$Language->get('Plugin label').'</label>';
$html .= '<input name="label" id="jslabel" type="text" value="'.$this->getDbField('label').'">';
$html .= '</div>';

View File

@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Pure",
"description": "Einfaches und übersichtliches Theme unter Verwendung des Frameworks Pure.css."
}
}

View File

@ -2,11 +2,11 @@
"theme-data":
{
"name": "Pure",
"description": "Simple and clean theme, based on the framework Pure.css. Website: http://purecss.io",
"description": "Simple and clean theme, based on the framework Pure.css.",
"author": "Bludit",
"email": "",
"website": "https://github.com/dignajar/bludit-themes",
"version": "0.3",
"releaseDate": "2015-10-02"
"version": "0.6",
"releaseDate": "2015-11-13"
}
}

View File

@ -1,7 +1,5 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="<?php echo $Site->description() ?>">
<title><?php echo $Site->title() ?></title>
<?php
@ -22,9 +20,14 @@
// <meta name="keywords" content="HTML,CSS,XML,JavaScript">
if( $Url->whereAmI()=='post' ) {
Theme::keywords( $Post->tags() );
Theme::description( $Post->description() );
}
elseif( $Url->whereAmI()=='page' ) {
Theme::keywords( $Page->tags() );
Theme::description( $Page->description() );
}
else {
Theme::description( $Site->description() );
}
?>

View File

@ -23,7 +23,7 @@
echo $Language->get('Posted By').' ';
if( Text::isNotEmpty($Post->authorFirstName()) && Text::isNotEmpty($Post->authorLastName()) ) {
echo $Post->authorFirstName().', '.$Post->authorLastName();
echo $Post->authorFirstName().' '.$Post->authorLastName();
}
else {
echo $Post->username();

View File

@ -21,7 +21,7 @@
echo $Language->get('Posted By').' ';
if( Text::isNotEmpty($Post->authorFirstName()) && Text::isNotEmpty($Post->authorLastName()) ) {
echo $Post->authorFirstName().', '.$Post->authorLastName();
echo $Post->authorFirstName().' '.$Post->authorLastName();
}
else {
echo $Post->username();