diff --git a/install.php b/install.php index 6c937ad6..892ca0bd 100755 --- a/install.php +++ b/install.php @@ -190,6 +190,12 @@ function install($adminPassword, $email) error_log($errorText, 0); } + if(!mkdir(PATH_PLUGINS_DATABASES.'tinymce', $dirpermissions, true)) + { + $errorText = 'Error when trying to created the directory=>'.PATH_PLUGINS_DATABASES; + error_log($errorText, 0); + } + if(!mkdir(PATH_UPLOADS, $dirpermissions, true)) { $errorText = 'Error when trying to created the directory=>'.PATH_UPLOADS; @@ -282,15 +288,24 @@ function install($adminPassword, $email) file_put_contents(PATH_DATABASES.'security.php', $dataHead.json_encode($data, JSON_PRETTY_PRINT), LOCK_EX); - // File plugins/pages/db.php $data = array( 'homeLink'=>true, - 'label'=>$Language->get('Pages') + 'label'=>$Language->get('Pages'), + 'position'=>'0' ); file_put_contents(PATH_PLUGINS_DATABASES.'pages'.DS.'db.php', $dataHead.json_encode($data, JSON_PRETTY_PRINT), LOCK_EX); + // File plugins/tinymce/db.php + $data = array( + 'plugins'=>'autoresize, fullscreen, pagebreak, link, textcolor, code', + 'toolbar'=>'bold italic underline strikethrough | alignleft aligncenter alignright | bullist numlist | styleselect | link forecolor backcolor removeformat | pagebreak code fullscreen', + 'position'=>'0' + ); + + file_put_contents(PATH_PLUGINS_DATABASES.'tinymce'.DS.'db.php', $dataHead.json_encode($data, JSON_PRETTY_PRINT), LOCK_EX); + // File index.txt for error page $data = 'Title: '.$Language->get('Error').' Content: '.$Language->get('The page has not been found'); diff --git a/kernel/boot/rules/70.build_pages.php b/kernel/boot/rules/70.build_pages.php index 3ccddac6..2ff98fbe 100644 --- a/kernel/boot/rules/70.build_pages.php +++ b/kernel/boot/rules/70.build_pages.php @@ -64,8 +64,10 @@ function build_page($key) $Page->setField('contentRaw', $Page->content(), true); // Parse markdown content. - $content = $Parsedown->text($contentRaw); // Parse Markdown. + $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. + $content = Text::pre2htmlentities($content); // Parse pre code with htmlentities $Page->setField('content', $content, true); // Parse username for the page. diff --git a/kernel/boot/rules/70.build_posts.php b/kernel/boot/rules/70.build_posts.php index 91c7e1ff..5ebe2af1 100644 --- a/kernel/boot/rules/70.build_posts.php +++ b/kernel/boot/rules/70.build_posts.php @@ -53,7 +53,8 @@ function buildPost($key) $Post->setField('contentRaw', $contentRaw, true); // Parse the content - $content = $Parsedown->text($contentRaw); // Parse Markdown. + $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); @@ -68,7 +69,7 @@ function buildPost($key) $user = $dbUsers->getDb( $Post->username() ); $Post->setField('authorFirstName', $user['firstName'], false); - + $Post->setField('authorLastName', $user['lastName'], false); } diff --git a/kernel/dbpages.class.php b/kernel/dbpages.class.php index 70bd7f74..4a25b8e1 100644 --- a/kernel/dbpages.class.php +++ b/kernel/dbpages.class.php @@ -110,8 +110,14 @@ class dbPages extends dbJSON } // Unix time created and modified. - $args['unixTimeCreated'] = $this->db[$args['key']]['unixTimeCreated']; - $args['unixTimeModified'] = Date::unixTime(); + // If the page is a draft then the time created is now. + if( $this->db[$args['key']]['status']=='draft' ) { + $args['unixTimeCreated'] = Date::unixTime(); + } + else { + $args['unixTimeCreated'] = $this->db[$args['key']]['unixTimeCreated']; + $args['unixTimeModified'] = Date::unixTime(); + } // Verify arguments with the database fields. foreach($this->dbFields as $field=>$options) diff --git a/kernel/dbposts.class.php b/kernel/dbposts.class.php index 566dad20..f5559999 100644 --- a/kernel/dbposts.class.php +++ b/kernel/dbposts.class.php @@ -3,15 +3,15 @@ class dbPosts extends dbJSON { private $dbFields = array( - 'title'=> array('inFile'=>true, 'value'=>''), - 'content'=> array('inFile'=>true, 'value'=>''), - 'description'=> array('inFile'=>false, 'value'=>''), - 'username'=> array('inFile'=>false, 'value'=>''), - 'status'=> array('inFile'=>false, 'value'=>'draft'), - 'tags'=> array('inFile'=>false, 'value'=>''), - 'allowComments'=> array('inFile'=>false, 'value'=>false), - 'unixTimeCreated'=> array('inFile'=>false, 'value'=>0), - 'unixTimeModified'=>array('inFile'=>false, 'value'=>0) + 'title'=> array('inFile'=>true, 'value'=>''), + 'content'=> array('inFile'=>true, 'value'=>''), + 'description'=> array('inFile'=>false, 'value'=>''), + 'username'=> array('inFile'=>false, 'value'=>''), + 'status'=> array('inFile'=>false, 'value'=>'draft'), + 'tags'=> array('inFile'=>false, 'value'=>''), + 'allowComments'=> array('inFile'=>false, 'value'=>false), + 'unixTimeCreated'=> array('inFile'=>false, 'value'=>0), + 'unixTimeModified'=> array('inFile'=>false, 'value'=>0) ); private $numberPosts = array( @@ -157,8 +157,14 @@ class dbPosts extends dbJSON public function edit($args) { // Unix time created and modified. - $args['unixTimeCreated'] = $this->db[$args['key']]['unixTimeCreated']; - $args['unixTimeModified'] = Date::unixTime(); + // If the page is a draft then the time created is now. + if( $this->db[$args['key']]['status']=='draft' ) { + $args['unixTimeCreated'] = Date::unixTime(); + } + else { + $args['unixTimeCreated'] = $this->db[$args['key']]['unixTimeCreated']; + $args['unixTimeModified'] = Date::unixTime(); + } if( $this->delete($args['key']) ) { return $this->add($args); diff --git a/kernel/helpers/text.class.php b/kernel/helpers/text.class.php index 3b4967ef..a71f0315 100644 --- a/kernel/helpers/text.class.php +++ b/kernel/helpers/text.class.php @@ -171,7 +171,15 @@ class Text { public static function imgRel2Abs($string, $base) { - return preg_replace('/(src)="([^:"]*)(?:")/', "$1=\"$base$2\"", $string); + return preg_replace('/(?!code).(src)="([^:"]*)(?:")/', "$1=\"$base$2\"", $string); + } + + public static function pre2htmlentities($string) + { + return preg_replace_callback('/
(.*?)<\/code><\/pre>/imsu',
+ create_function('$input', 'return "".htmlentities($input[2])."
";'),
+ $string);
+
}
}
diff --git a/themes/pure/css/blog.css b/themes/pure/css/blog.css
index 0fd8a85f..aa2bf3d0 100644
--- a/themes/pure/css/blog.css
+++ b/themes/pure/css/blog.css
@@ -1,121 +1,123 @@
+
+/* ------------------------
+Default tags
+------------------------ */
* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
a {
- text-decoration: none;
- color: #2672ec;
+ text-decoration: none;
+ color: #2672ec;
}
a:hover,
a:focus
{
- text-decoration: none;
+ text-decoration: none;
}
p {
- margin: 10px 0 0 0;
+ margin: 10px 0 0 0;
}
img {
- display: block;
- max-width: 100%;
+ display: block;
+ max-width: 100%;
}
table {
- empty-cells: show;
- border: 1px solid #cbcbcb;
+ empty-cells: show;
+ border: 1px solid #cbcbcb;
}
thead {
- background-color: #e0e0e0;
- color: #000;
- text-align: left;
- vertical-align: bottom;
+ background-color: #e0e0e0;
+ color: #000;
+ text-align: left;
+ vertical-align: bottom;
}
tr {
- display: table-row;
- vertical-align: inherit;
- border-color: inherit;
+ display: table-row;
+ vertical-align: inherit;
+ border-color: inherit;
}
th, td {
- padding: 0.5em 1em;
+ padding: 0.5em 1em;
}
pre, code {
- white-space: pre-wrap !important;
+ white-space: pre-wrap !important;
}
-code {
- font-size: 13px !important;
-}
-.subhead {
- text-transform: uppercase;
- color: #aaa;
- border-bottom: 1px solid #eee;
- padding: 0.4em 0;
- font-size: 80%;
- font-weight: 500;
- letter-spacing: 0.1em;
+/* ------------------------
+Content / Main
+------------------------ */
+#layout {
+ padding: 0;
}
.content {
- padding-top: 3em;
- margin-right: 30px;
- margin-left: 30px;
+ padding: 2em 1em 0;
}
-#layout {
- padding: 0;
+.subhead {
+ text-transform: uppercase;
+ color: #aaa;
+ border-bottom: 1px solid #eee;
+ padding: 0.4em 0;
+ font-size: 80%;
+ font-weight: 500;
+ letter-spacing: 0.1em;
}
-div.footer {
- font-size: 0.9em;
- color: #999;
- text-align: center;
- margin: 30px 0;
+.footer {
+ font-size: 0.9em;
+ color: #999;
+ text-align: center;
+ margin: 30px 0;
}
/* ------------------------
Paginator
------------------------ */
#paginator {
- margin: 20px 0;
+margin: 20px 0;
}
#paginator a {
- color: #2672ec;
+color: #2672ec;
}
#paginator ul {
- clear: both;
- list-style-type: none;
- margin: 0;
- overflow: auto;
- padding: 0;
+clear: both;
+list-style-type: none;
+margin: 0;
+overflow: auto;
+padding: 0;
}
#paginator li {
- display: block;
+display: block;
}
#paginator li.left {
- float: left !important;
+float: left !important;
}
#paginator li.list {
- background: #e0e0e0;
- color: #747474;
- padding: 2px 11px;
+background: #e0e0e0;
+color: #747474;
+padding: 2px 11px;
}
#paginator li.right {
- float: right !important;
+float: right !important;
}
/* ------------------------
@@ -123,165 +125,168 @@ Pages and Posts
------------------------ */
.page,
.post {
- margin: 0 0 70px 0;
+margin: 0 0 70px 0;
}
.page-title,
.post-title
{
- font-size: 2.4em;
- margin: 0;
+font-size: 2.4em;
+margin: 0;
}
.page-title a,
.post-title a
{
- color: #555;
- border-bottom: 5px solid #ccc;
- display: inline-block;
+color: #555;
+border-bottom: 5px solid #ccc;
+display: inline-block;
}
.page a.read-more,
.post a.read-more{
- display: block;
- text-align: center;
- padding: 2px 5px;
+display: block;
+text-align: center;
+padding: 2px 5px;
}
.page-content,
.post-content {
- color: #444;
- line-height: 1.7em;
- margin-top: 22px;
+color: #444;
+line-height: 1.7em;
+margin-top: 22px;
}
.page-content hr,
.post-content hr {
- display: block;
- height: 1px;
- border: 0;
- border-top: 1px solid #ccc;
- margin: 30px 0;
- padding: 0;
+display: block;
+height: 1px;
+border: 0;
+border-top: 1px solid #ccc;
+margin: 30px 0;
+padding: 0;
}
.page-content h2,
.post-content h2
{
- color: #555;
- margin: 30px 0 30px 0;
- font-size: 2em;
- font-weight: normal;
+color: #555;
+margin: 30px 0 30px 0;
+font-size: 2em;
+font-weight: normal;
}
.page-content h3,
.post-content h3
{
- color: #555;
- margin: 35px 0 25px 0;
- font-size: 1.5em;
- font-weight: normal;
+color: #555;
+margin: 35px 0 25px 0;
+font-size: 1.5em;
+font-weight: normal;
}
.page-content h4,
.post-content h4
{
- color: #555;
- margin: 25px 0 15px 0;
- font-size: 1.2em;
- font-weight: lighter;
+color: #555;
+margin: 25px 0 15px 0;
+font-size: 1.2em;
+font-weight: lighter;
}
.post-meta,
.page-meta {
- font-size: 90%;
- margin: 0;
+font-size: 90%;
+margin: 0;
}
.post-meta span.date,
.page-meta span.date {
- color: #999;
- margin-right: 10px;
+color: #999;
+margin-right: 10px;
}
.post-meta span.author,
.page-meta span.author {
- color: #ccc;
+color: #ccc;
}
/* ------------------------
Sidebar
------------------------ */
-
.sidebar {
- margin: 60px 30px 0;
+ background: #f1f1f1;
+}
+
+.sidebar-content {
+ padding: 30px 10px 0 30px;
}
.sidebar a {
- color: #555;
+ color: #555;
}
.sidebar a:hover {
- color: #000;
+ color: #000;
}
.sidebar h1.title {
- font-size: 3.2em;
- font-weight: lighter;
- margin: 0;
- padding: 0;
+ font-size: 3.2em;
+ font-weight: lighter;
+ margin: 0;
+ padding: 0;
}
.sidebar h2.slogan {
- font-size: 2.2em;
- font-weight: lighter;
- margin: -10px 0 0 0;
- padding: 0;
+ font-size: 2.2em;
+ font-weight: lighter;
+ margin: -10px 0 0 0;
+ padding: 0;
}
/* ------------------------
Plugins
------------------------ */
div.plugin {
- margin-top: 40px;
+ margin-top: 40px;
}
div.plugin h2 {
- border-bottom: 1px solid #ccc;
- color: #ccc;
- display: inline-block;
- font-size: 1em;
- margin-bottom: 5px;
+ border-bottom: 1px solid #ccc;
+ color: #ccc;
+ display: inline-block;
+ font-size: 1em;
+ margin-bottom: 5px;
}
div.plugin-content {
- padding: 0 10px;
+ padding: 0 10px;
}
div.plugin-content li {
- margin-top: 5px;
+ margin-top: 5px;
}
div.plugin-content ul {
- display: block;
- list-style-type: none;
- margin: 5px 0;
- padding: 0;
+ display: block;
+ list-style-type: none;
+ margin: 5px 0;
+ padding: 0;
}
div.plugin-content ul > li > ul > li {
- margin: 0;
+ margin: 0;
}
div.plugin-content ul > li > ul > li:before {
- color: #777;
- content: "—";
- padding-right: 5px;
+ color: #777;
+ content: "—";
+ padding-right: 5px;
}
div.plugin-content ul > li > ul > li > a {
- color: #777;
+ color: #777;
}
/* ------------------------
@@ -289,15 +294,15 @@ Responsive
------------------------ */
@media (min-width: 48em) {
- .content {
- padding: 1em 3em 0;
- margin-left: 25%;
- }
+ .content {
+ padding: 1em 3em 0;
+ margin-left: 25%;
+ }
- .sidebar {
- position: fixed;
- top: 0;
- bottom: 0;
- overflow: auto;
- }
+ .sidebar {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ overflow: auto;
+ }
}
diff --git a/themes/pure/css/rainbow.github.css b/themes/pure/css/rainbow.github.css
index 088f0657..e5796467 100644
--- a/themes/pure/css/rainbow.github.css
+++ b/themes/pure/css/rainbow.github.css
@@ -5,7 +5,7 @@
* @version 1.0.4
*/
pre {
- border: 1px solid #ccc;
+ border: 1px solid #E7E9EE;
word-wrap: break-word;
padding: 6px 10px;
line-height: 19px;
@@ -13,10 +13,9 @@ pre {
}
code {
- border: 1px solid #eaeaea;
+ border: 1px solid #E7E9EE;
margin: 0px 2px;
padding: 0px 5px;
- font-size: 12px;
}
pre code {
@@ -30,8 +29,8 @@ pre code {
pre, code {
font-family: Consolas, 'Liberation Mono', Courier, monospace;
- color: #333;
- background: #f8f8f8;
+ background: #f8faff none repeat scroll 0 0;
+ color: #211fab;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
diff --git a/themes/pure/php/sidebar.php b/themes/pure/php/sidebar.php
index ef86ce9e..4e48937c 100644
--- a/themes/pure/php/sidebar.php
+++ b/themes/pure/php/sidebar.php
@@ -1,5 +1,9 @@
+
\ No newline at end of file