From 8c03f6859c452738aafd554f8dc42cc636a4a1e9 Mon Sep 17 00:00:00 2001 From: vincent-peugnet Date: Mon, 10 Feb 2020 19:19:45 +0100 Subject: new feature : page redirection, close #44 --- app/class/Controllerpage.php | 3 +- app/class/Modeldb.php | 7 ++- app/class/Modelhome.php | 2 +- app/class/Modelpage.php | 3 ++ app/class/Modelrender.php | 90 ++++++++++---------------------------- app/class/Page.php | 41 +++++++++++++++++ app/view/templates/editleftbar.php | 8 +++- app/view/templates/homemenu.php | 26 ++++++++--- assets/css/home.css | 4 ++ 9 files changed, 106 insertions(+), 78 deletions(-) diff --git a/app/class/Controllerpage.php b/app/class/Controllerpage.php index 92632fc..d646184 100644 --- a/app/class/Controllerpage.php +++ b/app/class/Controllerpage.php @@ -108,8 +108,7 @@ class Controllerpage extends Controller $renderengine->render($page); $page->setdaterender($now); $page->setlinkfrom($renderengine->linkfrom()); - $page->setlinkto($renderengine->linkto()); - + return $page; } diff --git a/app/class/Modeldb.php b/app/class/Modeldb.php index 92f0d22..953521f 100644 --- a/app/class/Modeldb.php +++ b/app/class/Modeldb.php @@ -33,7 +33,12 @@ class Modeldb extends Model $this->repo = new Repository($repo, $this->database); } - public function list() + /** + * List every IDs of a database + * + * @return array of ID strings + */ + public function list() : array { return $this->repo->getAllIds(); } diff --git a/app/class/Modelhome.php b/app/class/Modelhome.php index e3d60a3..943f4bd 100644 --- a/app/class/Modelhome.php +++ b/app/class/Modelhome.php @@ -45,7 +45,7 @@ class Modelhome extends Modelpage * @param Opt $opt * @param string $regex */ - public function table2(array $table, Opt $opt, string $regex, array $searchopt) + public function table2(array $table, Opt $opt, string $regex = "", array $searchopt = []) { diff --git a/app/class/Modelpage.php b/app/class/Modelpage.php index 7a0facc..e40ac04 100644 --- a/app/class/Modelpage.php +++ b/app/class/Modelpage.php @@ -387,6 +387,9 @@ class Modelpage extends Modeldb if($reset['author']) { $page->setauthors([]); } + if($reset['redirection']) { + $page->setredirection(''); + } if($reset['date']) { $page->setdate($now); } diff --git a/app/class/Modelrender.php b/app/class/Modelrender.php index e070f7d..6fc8932 100644 --- a/app/class/Modelrender.php +++ b/app/class/Modelrender.php @@ -10,6 +10,7 @@ class Modelrender extends Modelpage protected $router; /** @var Page */ protected $page; + /** @var array list of ID as strings */ protected $pagelist; protected $linkfrom = []; protected $sum = []; @@ -25,7 +26,7 @@ class Modelrender extends Modelpage parent::__construct(); $this->router = $router; - $this->pagelist = $this->getlister(); + $this->pagelist = $this->list(); if(Config::internallinkblank()) { $this->internallinkblank = ' target="_blank" '; @@ -51,7 +52,14 @@ class Modelrender extends Modelpage } - public function upage($id) + /** + * Generate page relative link for given page_id including basepath + * + * @param string $id given page ID + * + * @return string Relative URL + */ + public function upage(string $id) : string { return $this->router->generate('pageread/', ['page' => $id]); } @@ -103,7 +111,6 @@ class Modelrender extends Modelpage } $body = $this->article($body); $body = $this->automedialist($body); - $body = $this->autotaglistupdate($body); return $body; } @@ -181,7 +188,6 @@ class Modelrender extends Modelpage $content = $this->article($element->content()); $content = $this->automedialist($content); $content = $this->pagelist($content); - $content = $this->autotaglistupdate($content); $content = $this->date($content); $content = $this->thumbnail($content); if($element->autolink()) { @@ -217,10 +223,6 @@ class Modelrender extends Modelpage $tempaltecsspage = $this->get($this->page->template('array')['css']); file_put_contents(Model::RENDER_DIR . $tempaltecsspage->id() . '.css', $tempaltecsspage->css()); } - if (array_key_exists('quickcss', $this->page->template('array'))) { - $tempaltequickcsspage = $this->get($this->page->template('array')['quickcss']); - file_put_contents(Model::RENDER_DIR . $tempaltequickcsspage->id() . '.quick.css', $tempaltequickcsspage->quickcss()); - } if (array_key_exists('javascript', $this->page->template('array'))) { $templatejspage = $this->get($this->page->template('array')['javascript']); file_put_contents(Model::RENDER_DIR . $templatejspage->id() . '.js', $templatejspage->javascript()); @@ -306,6 +308,16 @@ class Modelrender extends Modelpage ' . PHP_EOL; } + + if (!empty($this->page->redirection())) { + if (preg_match('%https?:\/\/\S*%', $this->page->redirection(), $out)) { + $url = $out[0]; + $head .= PHP_EOL . ''; + } elseif (in_array($this->page->redirection(), $this->pagelist)) { + $url = $this->upage($this->page->redirection()); + $head .= PHP_EOL . ''; + } + } return $head; @@ -535,50 +547,6 @@ class Modelrender extends Modelpage } - - public function autotaglist($text) - { - $pattern = "/\%TAG:([a-z0-9_-]+)\%/"; - preg_match_all($pattern, $text, $out); - return $out[1]; - - } - - public function autotaglistupdate($text) - { - $taglist = $this->autotaglist($text); - foreach ($taglist as $tag) { - $li = []; - foreach ($this->pagelist as $item) { - if (in_array($tag, $item->tag('array'))) { - $li[] = $item; - } - - } - $ul = '' . PHP_EOL; - - - $text = str_replace('%TAG:' . $tag . '%', $ul, $text); - - $li = array_map(function ($item) { - return $item->id(); - }, $li); - $this->linkfrom = array_unique(array_merge($this->linkfrom, $li)); - } - return $text; - } - - public function date(string $text) { $page = $this->page; @@ -674,10 +642,12 @@ class Modelrender extends Modelpage $modelhome = new Modelhome(); if(isset($matches)) { + $pagelist = $this->getlister(); + foreach ($matches as $match) { - $optlist = $modelhome->Optlistinit($this->pagelist); + $optlist = $modelhome->Optlistinit($pagelist); $optlist->parsehydrate($match['options']); - $table2 = $modelhome->table2($this->pagelist, $optlist); + $table2 = $modelhome->table2($pagelist, $optlist, '', []); $content = '