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