diff --git a/class/Comment.php b/class/Comment.php new file mode 100644 index 0000000..63c4c3a --- /dev/null +++ b/class/Comment.php @@ -0,0 +1,41 @@ +id = $id; + $this->value = $content; + } + + public function addItem($obj, $key = null) { + } + + public function deleteItem($key) { + } + + public function getItem($key) { + } + + public function getContent($level = 0) { + $comments = $this->value; + $comments['level'] = $level; + + foreach($this->children as $child) { + array_merge($comments, $child->getContent($level + 1)); + } + return $comments; + } + + public function setParent($parent) { + $this->parent = $parent; + } + public function addSubComment($obj) { + $this->children[] = $obj; + } + +} \ No newline at end of file diff --git a/comments.php b/comments.php index df1f915..7b9e312 100644 --- a/comments.php +++ b/comments.php @@ -16,6 +16,8 @@ use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\File\File; use Symfony\Component\Yaml\Yaml; +require_once 'class\Comment.php'; + class CommentsPlugin extends Plugin { protected $route = 'comments'; @@ -402,11 +404,48 @@ class CommentsPlugin extends Plugin $filename .= $this->grav['uri']->path() . '.yaml'; $comments = $this->getDataFromFilename($filename)['comments']; + $comments = setCommentLevels($comments); //save to cache if enabled $cache->save($this->comments_cache_id, $comments); return $comments; } + /** + * Return the latest commented pages + */ + private function setCommentLevels($comments) { + $levels = array(); + $levelsflat = array(); + foreach($comments as $key => $comment) { + //$comments[$key]['level'] = 0; + $levels[$comment['parent']][] = $comment['id']; + $levelsflat[$comment['id']]['parent'] = $comment['parent']; + $levelsflat[$comment['id']]['class'] = new Comment($comment['id'], $comments[$key]); + } + //get starting points (entries without valid parent = root element) + $leveltree = array(); + foreach($levelsflat as $id => $parent) { + $parent_id = $parent['parent']; + if(!isset($levelsflat[$parent_id]){ + $leveltree[$id] = $levelsflat[$id]['class']; + //$leveltree[$id] = array(); + //$leveltree[$id]['level'] = 0; + //$leveltree[$id]['children'] = array(); + } else { + $currentParent = $levelsflat[$parent_id]['class']; + $currentChild = $levelsflat[$id]['class']; + $levelsflat[$id]['class']->setParent($currentParent); + $levelsflat[$parent_id]['class']->addSubComment($currentChild); + } + } + //reset comment values to nested order + $comments = array(); + foreach($leveltree as $id => $comment) { + array_merge($comments, $comment->getContent); + } + return $comments; + } + /** * Return the latest commented pages */