From 3235c49acd9d52d0298f5a0c812eb1968ee314f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ste=CC=81phane=20Goetz?= Date: Sat, 18 Jul 2015 14:37:18 +0200 Subject: [PATCH] Refactor to not use ->value in the tree --- libs/Daux.php | 4 ++-- libs/DauxHelper.php | 4 ++-- libs/Format/Confluence/Generator.php | 2 +- libs/Format/HTML/Generator.php | 2 +- libs/Format/HTML/Template.php | 13 +++++++------ libs/Server/Server.php | 2 +- libs/Tree/Builder.php | 28 +++++++++++++++------------- libs/Tree/Content.php | 7 ------- libs/Tree/Directory.php | 22 ++++++++++++++++++++-- libs/Tree/Entry.php | 10 ++++++---- libs/Tree/Raw.php | 6 ------ 11 files changed, 55 insertions(+), 45 deletions(-) diff --git a/libs/Daux.php b/libs/Daux.php index 4d578bc..01ca449 100644 --- a/libs/Daux.php +++ b/libs/Daux.php @@ -127,7 +127,7 @@ class Daux $this->tree = Builder::build($this->docs_path, $this->options['ignore'], $this->getParams()); if (!empty($this->options['languages'])) { foreach ($this->options['languages'] as $key => $node) { - $this->tree->value[$key]->title = $node; + $this->tree->getEntries()[$key]->title = $node; } } } @@ -155,7 +155,7 @@ class Daux $this->options['index'] = ($index = $this->tree->getIndexPage()) ? $index : $this->tree->getFirstPage(); if ($this->options['multilanguage']) { foreach ($this->options['languages'] as $key => $name) { - $this->options['entry_page'][$key] = $this->tree->value[$key]->getFirstPage(); + $this->options['entry_page'][$key] = $this->tree->getEntries()[$key]->getFirstPage(); } } else { $this->options['entry_page'] = $this->tree->getFirstPage(); diff --git a/libs/DauxHelper.php b/libs/DauxHelper.php index 6b6d0eb..a5b5623 100644 --- a/libs/DauxHelper.php +++ b/libs/DauxHelper.php @@ -113,8 +113,8 @@ class DauxHelper // if the node exists in the current request tree, // change the $tree variable to reference the new // node and proceed to the next url part - if (isset($tree->value[$node])) { - $tree = $tree->value[$node]; + if (isset($tree->getEntries()[$node])) { + $tree = $tree->getEntries()[$node]; continue; } diff --git a/libs/Format/Confluence/Generator.php b/libs/Format/Confluence/Generator.php index 0bf3f96..92eb90d 100644 --- a/libs/Format/Confluence/Generator.php +++ b/libs/Format/Confluence/Generator.php @@ -53,7 +53,7 @@ class Generator if ($base_url !== '') { $params['entry_page'] = $tree->getFirstPage(); } - foreach ($tree->value as $key => $node) { + foreach ($tree->getEntries() as $key => $node) { if ($node instanceof Directory) { $final['children'][$this->prefix . $node->getTitle()] = $this->generateRecursive( $node, diff --git a/libs/Format/HTML/Generator.php b/libs/Format/HTML/Generator.php index 93ad39c..6d3c019 100644 --- a/libs/Format/HTML/Generator.php +++ b/libs/Format/HTML/Generator.php @@ -54,7 +54,7 @@ class Generator if ($base_url !== '' && empty($params['entry_page'])) { $params['entry_page'] = $tree->getFirstPage(); } - foreach ($tree->value as $key => $node) { + foreach ($tree->getEntries() as $key => $node) { if ($node instanceof Directory) { $new_output_dir = $output_dir . DS . $key; mkdir($new_output_dir); diff --git a/libs/Format/HTML/Template.php b/libs/Format/HTML/Template.php index 501c3a5..62712c4 100644 --- a/libs/Format/HTML/Template.php +++ b/libs/Format/HTML/Template.php @@ -2,6 +2,8 @@ use League\Plates\Engine; use Todaymade\Daux\Daux; +use Todaymade\Daux\Tree\Content; +use Todaymade\Daux\Tree\Directory; class Template { @@ -88,13 +90,13 @@ class Template return ""; } - private function buildNavigation($tree, $path, $current_url, $base_page, $mode) + private function buildNavigation(Directory $tree, $path, $current_url, $base_page, $mode) { $nav = []; - foreach ($tree->value as $node) { + foreach ($tree->getEntries() as $node) { $url = $node->getUri(); - if ($node instanceof \Todaymade\Daux\Tree\Content) { - if ($node->value === 'index') { + if ($node instanceof Content) { + if ($node->getName() === '_index') { continue; } @@ -105,8 +107,7 @@ class Template 'href' => $base_page . $link, 'class' => ($current_url === $link) ? 'active' : '' ]; - } - if ($node instanceof \Todaymade\Daux\Tree\Directory) { + } else if ($node instanceof Directory) { $link = ($path === '') ? $url : $path . '/' . $url; $folder = [ diff --git a/libs/Server/Server.php b/libs/Server/Server.php index 80b9963..1469b69 100644 --- a/libs/Server/Server.php +++ b/libs/Server/Server.php @@ -130,7 +130,7 @@ class Server $params = $this->params; $params['request'] = $request; - $params['file_uri'] = $file->value; + $params['file_uri'] = $file->getUri(); if ($request !== 'index') { $params['entry_page'] = $file->getFirstPage(); } diff --git a/libs/Tree/Builder.php b/libs/Tree/Builder.php index c4657f8..2e5e6e7 100644 --- a/libs/Tree/Builder.php +++ b/libs/Tree/Builder.php @@ -57,14 +57,14 @@ class Builder } if ($entry instanceof Entry) { - $node->value[$entry->getUri()] = $entry; + $node->addChild($entry); } } $node->sort(); - if (isset($node->value[$params['index_key']])) { - $node->value[$params['index_key']]->setFirstPage($node->getFirstPage()); - $node->setIndexPage($node->value[$params['index_key']]); + if (isset($node->getEntries()[$params['index_key']])) { + $node->getEntries()[$params['index_key']]->setFirstPage($node->getFirstPage()); + $node->setIndexPage($node->getEntries()[$params['index_key']]); } else { $node->setIndexPage(false); } @@ -72,22 +72,22 @@ class Builder } /** - * @param Entry $parent + * @param Directory $parent * @param String $title * @return Directory */ - public static function getOrCreateDir($parent, $title) + public static function getOrCreateDir(Directory $parent, $title) { $slug = DauxHelper::slug($title); - if (array_key_exists($slug, $parent->value)) { - return $parent->value[$slug]; + if (array_key_exists($slug, $parent->getEntries())) { + return $parent->getEntries()[$slug]; } $dir = new Directory(); $dir->setTitle($title); $dir->setUri($slug); - $parent->value[$slug] = $dir; + $parent->addChild($dir); return $dir; } @@ -102,10 +102,13 @@ class Builder $slug = DauxHelper::slug($title); $uri = $slug . ".html"; + /** + * @var Directory $nearestParent + */ $nearestParent = end($parents); - if (array_key_exists($uri, $nearestParent->value)) { - return $nearestParent->value[$uri]; + if (array_key_exists($uri, $nearestParent->getEntries())) { + return $nearestParent->getEntries()[$uri]; } $page = new Content('', $parents); @@ -115,14 +118,13 @@ class Builder if ($title == 'index') { $page->setName('_index'); $page->setTitle($nearestParent->getTitle()); - $page->value = 'index'; $nearestParent->setIndexPage($page); } else { $page->setName($slug); $page->setTitle($title); } - $nearestParent->value[$uri] = $page; + $nearestParent->addChild($page); return $page; } diff --git a/libs/Tree/Content.php b/libs/Tree/Content.php index fc73b19..420733a 100644 --- a/libs/Tree/Content.php +++ b/libs/Tree/Content.php @@ -9,13 +9,6 @@ class Content extends Entry */ protected $content; - public function __construct($path = '', $parents = array()) - { - parent::__construct($path, $parents); - - $this->value = $this->uri; - } - /** * @return string */ diff --git a/libs/Tree/Directory.php b/libs/Tree/Directory.php index 9d128e3..9a1694d 100644 --- a/libs/Tree/Directory.php +++ b/libs/Tree/Directory.php @@ -2,11 +2,29 @@ class Directory extends Entry { - public $value = []; + protected $children = []; public function sort() { - uasort($this->value, array($this, 'compareEntries')); + uasort($this->children, array($this, 'compareEntries')); + } + + public function getEntries() + { + return $this->children; + } + + public function addChild(Entry $entry) + { + //TODO :: set parent in the entry + //TODO :: remove child from previous parent + + $this->children[$entry->getUri()] = $entry; + } + + public function removeChild(Entry $entry) + { + unset($this->children[$entry->getUri()]); } private function compareEntries($a, $b) diff --git a/libs/Tree/Entry.php b/libs/Tree/Entry.php index ad9f8eb..15db34b 100644 --- a/libs/Tree/Entry.php +++ b/libs/Tree/Entry.php @@ -99,21 +99,23 @@ abstract class Entry return false; } - foreach ($this->value as $node) { + // First we try to find a real page + foreach ($this->getEntries() as $node) { if ($node instanceof Content) { if (!count($node->getParents()) && $node->title == 'index') { //the homepage should not count as first page continue; } - $this->first_page = $node; + $this->setFirstPage($node); return $node; } } - foreach ($this->value as $node) { + // If we can't find one we check in the sub-directories + foreach ($this->getEntries() as $node) { if ($node instanceof Directory && $page = $node->getFirstPage()) { - $this->first_page = $page; + $this->setFirstPage($page); return $page; } } diff --git a/libs/Tree/Raw.php b/libs/Tree/Raw.php index 50e1016..37bacd0 100644 --- a/libs/Tree/Raw.php +++ b/libs/Tree/Raw.php @@ -2,10 +2,4 @@ class Raw extends Entry { - public function __construct($path = '', $parents = array()) - { - parent::__construct($path, $parents); - - $this->value = $this->uri; - } }