83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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;
 | 
						|
    }
 | 
						|
} |