diff --git a/admin/themes/default/css/favicon.png b/admin/themes/default/css/favicon.png new file mode 100644 index 00000000..517c6c12 Binary files /dev/null and b/admin/themes/default/css/favicon.png differ diff --git a/admin/themes/default/index.php b/admin/themes/default/index.php index e2c4f1f0..f09e96b9 100644 --- a/admin/themes/default/index.php +++ b/admin/themes/default/index.php @@ -8,6 +8,8 @@ <?php echo $layout['title'] ?> + + diff --git a/kernel/boot/rules/70.pages.php b/kernel/boot/rules/70.pages.php index d3ebd2bf..2e0400ce 100644 --- a/kernel/boot/rules/70.pages.php +++ b/kernel/boot/rules/70.pages.php @@ -30,26 +30,21 @@ function build_page($key) global $dbUsers; global $Parsedown; - // Page object. + // Page object, content from FILE. $Page = new Page($key); if( !$Page->isValid() ) { return false; } - // Page database. + // Page database, content from DATABASE JSON. $db = $dbPages->getDb($key); if( !$db ) { return false; } - // Foreach field from database. - foreach($db as $field=>$value) - { - // Not overwrite the value from file. - $Page->setField($field, $value, false); - - // Overwrite the value on the db. - //$dbPages->setDb($key, $field, $value); + // Foreach field from DATABASE. + foreach($db as $field=>$value) { + $Page->setField($field, $value); } // Content in raw format diff --git a/kernel/boot/rules/70.posts.php b/kernel/boot/rules/70.posts.php index fc01bf6f..62f6ff9e 100644 --- a/kernel/boot/rules/70.posts.php +++ b/kernel/boot/rules/70.posts.php @@ -34,25 +34,23 @@ function buildPost($key) global $Parsedown; global $Site; - // Post object, this get the content from the file. + // 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; } - // Page database, this get the contente from the database json. + // Post database, content from DATABASE JSON. $db = $dbPosts->getDb($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) - { - // Not overwrite the value from file. - $Post->setField($field, $value, false); + // Foreach field from DATABASE. + foreach($db as $field=>$value) { + $Post->setField($field, $value); } // Content in raw format @@ -119,7 +117,9 @@ function buildPostsForPage($pageNumber=0, $amount=POSTS_PER_PAGE_ADMIN, $removeU // Search for changes on posts by the user. if( $Site->cliMode() ) { - $dbPosts->regenerateCli(); + if($dbPosts->regenerateCli()) { + reIndexTagsPosts(); + } } // Execute the scheduler. diff --git a/kernel/dbpages.class.php b/kernel/dbpages.class.php index 4be86e09..298349c5 100644 --- a/kernel/dbpages.class.php +++ b/kernel/dbpages.class.php @@ -372,13 +372,27 @@ class dbPages extends dbJSON // Update all fields from FILE to DATABASE. foreach($fields as $f=>$v) { - if($Page->getField($f)) { - // DEBUG: Validar/Sanitizar valores, ej: validar formato fecha - $this->db[$key][$f] = $Page->getField($f); + // If the field exists on the FILE, update it. + if($Page->getField($f)) + { + $valueFromFile = $Page->getField($f); + + if($f=='tags') { + // Generate tags array. + $this->db[$key]['tags'] = $this->generateTags($valueFromFile); + } + elseif($f=='date') { + // Validate Date from file + if(Valid::date($valueFromFile, DB_DATE_FORMAT)) { + $this->db[$key]['date'] = $valueFromFile; + } + } + else { + // Sanitize the values from file. + $this->db[$key][$f] = Sanitize::html($valueFromFile); + } } } - - // DEBUG: Update tags } // Remove old pages from db diff --git a/kernel/dbposts.class.php b/kernel/dbposts.class.php index 57d23dd4..68122961 100644 --- a/kernel/dbposts.class.php +++ b/kernel/dbposts.class.php @@ -378,13 +378,15 @@ class dbPosts extends dbJSON return $a['date']<$b['date']; } + // Return TRUE if there are new posts, FALSE otherwise. public function regenerateCli() { $db = $this->db; - $newPaths = array(); + $allPosts = array(); $fields = array(); + $currentDate = Date::current(DB_DATE_FORMAT); - // Default fields and value + // Generate default fields and values. foreach($this->dbFields as $field=>$options) { if(!$options['inFile']) { $fields[$field] = $options['value']; @@ -392,55 +394,62 @@ class dbPosts extends dbJSON } $fields['status'] = CLI_STATUS; - $fields['date'] = Date::current(DB_DATE_FORMAT); + $fields['date'] = $currentDate; - // Recovery pages from the first level of directories - //$tmpPaths = glob(PATH_POSTS.'*', GLOB_ONLYDIR); + // Recovery posts from the first level of directories $tmpPaths = Filesystem::listDirectories(PATH_POSTS); foreach($tmpPaths as $directory) { - $key = basename($directory); - - if(file_exists($directory.DS.'index.txt')) { - // The key is the directory name - $newPaths[$key] = true; - } - } - - foreach($newPaths as $key=>$value) - { - if(!isset($this->db[$key])) { - $this->db[$key] = $fields; - } - - $Post = new Post($key); - - // Update all fields from FILE to DATABASE. - foreach($fields as $f=>$v) + if(file_exists($directory.DS.'index.txt')) { - if($Post->getField($f)) { + // The key is the directory name. + $key = basename($directory); - $valueFromFile = $Post->getField($f); + // All keys posts + $allPosts[$key] = true; - // Validate values from file. - if($f=='tags') { - $valueFromFile = array_map('trim', explode(',', $valueFromFile)); - $valueFromFile = implode(',', $valueFromFile); - } - elseif($f=='date') { - if(!Valid::date($valueFromFile,DB_DATE_FORMAT)) { - $valueFromFile = Date::current(DB_DATE_FORMAT); + // Create the new entry if not exists on DATABASE. + if(!isset($this->db[$key])) { + // New entry on database + $this->db[$key] = $fields; + } + + // Create the post from FILE. + $Post = new Post($key); + + // Update all fields from FILE to DATABASE. + 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') { + // Generate tags array. + $this->db[$key]['tags'] = $this->generateTags($valueFromFile); + } + elseif($f=='date') { + // Validate Date from file + if(Valid::date($valueFromFile, DB_DATE_FORMAT)) { + $this->db[$key]['date'] = $valueFromFile; + + if( $valueFromFile>$currentDate ) { + $this->db[$key]['status'] = 'scheduled'; + } + } + } + else { + // Sanitize the values from file. + $this->db[$key][$f] = Sanitize::html($valueFromFile); } } - - // Sanitize the values from file. - $this->db[$key][$f] = Sanitize::html($valueFromFile); } } } - // Remove old posts from db - foreach( array_diff_key($db, $newPaths) as $key=>$data ) { + // Remove orphan posts from db, the orphan posts are posts deleted by hand (directory deleted). + foreach( array_diff_key($db, $allPosts) as $key=>$data ) { unset($this->db[$key]); } diff --git a/kernel/helpers/filesystem.class.php b/kernel/helpers/filesystem.class.php index 3832d660..e5a3310e 100644 --- a/kernel/helpers/filesystem.class.php +++ b/kernel/helpers/filesystem.class.php @@ -3,6 +3,8 @@ class Filesystem { // NEW + + // Returns an array with the absolutes directories. public static function listDirectories($path, $regex='*') { $directories = glob($path.$regex, GLOB_ONLYDIR); diff --git a/plugins/pages/plugin.php b/plugins/pages/plugin.php index 262ad11c..a430fadf 100644 --- a/plugins/pages/plugin.php +++ b/plugins/pages/plugin.php @@ -32,49 +32,46 @@ class pluginPages extends Plugin { global $Language; global $pagesParents; global $Site, $Url; - $home = $Url->whereAmI()==='home'; $html = '
'; - // Print the label if it not empty. + // Print the label if not empty. $label = $this->getDbField('label'); if( !empty($label) ) { $html .= '

'.$label.'

'; } $html .= '
'; - - $parents = $pagesParents[NO_PARENT_CHAR]; - $html .= '