Wiki navigation bar
This commit is contained in:
83
lib/Helper/WikiTree.php
Normal file
83
lib/Helper/WikiTree.php
Normal file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
namespace OCA\MyWiki\Helper;
|
||||
|
||||
class WikiTree {
|
||||
private array $wikiPages;
|
||||
|
||||
public function __construct(?array $wikiPages) {
|
||||
$this->wikiPages = $wikiPages??[];
|
||||
}
|
||||
|
||||
public function getWikiPages(): array {
|
||||
return $this->wikiPages;
|
||||
}
|
||||
|
||||
public function get($id): ?WikiTreePage {
|
||||
$wikiTreePage = null;
|
||||
foreach($this->wikiPages as $page) {
|
||||
if ( $page['id']==$id) {
|
||||
$wikiTreePage = new WikiTreePage();
|
||||
$wikiTreePage->id = $page['id'];
|
||||
$wikiTreePage->pid = $page['pid'];
|
||||
$wikiTreePage->title = $page['title'];
|
||||
$wikiTreePage->sort = $page['sort'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $wikiTreePage;
|
||||
}
|
||||
|
||||
private function countChilds($id): int {
|
||||
$n = 0;
|
||||
foreach($this->wikiPages as $page) {
|
||||
if ($page['pid']==$id) {
|
||||
$n++;
|
||||
}
|
||||
}
|
||||
return $n;
|
||||
}
|
||||
|
||||
public function set(WikiTreePage $wikiTreePage): WikiTree {
|
||||
if ( $this->get($wikiTreePage->id) === null ) {
|
||||
$this->add($wikiTreePage);
|
||||
} else {
|
||||
$this->modify($wikiTreePage);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function add(WikiTreePage $wikiTreePage): WikiTree {
|
||||
if ($wikiTreePage->sort<=0) {
|
||||
$wikiTreePage->sort = $this->countChilds($wikiTreePage->pid) + 1;
|
||||
}
|
||||
$this->wikiPages[] = [
|
||||
"id"=>$wikiTreePage->id,
|
||||
"pid"=>$wikiTreePage->pid,
|
||||
"title"=>$wikiTreePage->title,
|
||||
"sort"=>$wikiTreePage->sort
|
||||
];
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function modify(WikiTreePage $wikiTreePage): WikiTree {
|
||||
foreach($this->wikiPages as &$page) {
|
||||
if ( $page['id']==$wikiTreePage->id) {
|
||||
$page['pid'] = $wikiTreePage->pid;
|
||||
$page['title'] = $wikiTreePage->title;
|
||||
$page['sort'] = $wikiTreePage->sort;
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function del($id): ?WikiTree {
|
||||
$pages = [];
|
||||
foreach($this->wikiPages as $k => $page) {
|
||||
if ($page['id']!=$id && $page['pid']!=$id) {
|
||||
$pages[] = $page;
|
||||
}
|
||||
}
|
||||
$this->wikiPages = $pages;
|
||||
return $this;
|
||||
}
|
||||
}
|
9
lib/Helper/WikiTreePage.php
Normal file
9
lib/Helper/WikiTreePage.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace OCA\MyWiki\Helper;
|
||||
|
||||
class WikiTreePage {
|
||||
public int $id;
|
||||
public int $pid;
|
||||
public string $title;
|
||||
public int $sort = 0;
|
||||
}
|
Reference in New Issue
Block a user