diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/class/Controllerpage.php | 3 | ||||
-rw-r--r-- | app/class/Modeldb.php | 7 | ||||
-rw-r--r-- | app/class/Modelhome.php | 2 | ||||
-rw-r--r-- | app/class/Modelpage.php | 3 | ||||
-rw-r--r-- | app/class/Modelrender.php | 90 | ||||
-rw-r--r-- | app/class/Page.php | 41 | ||||
-rw-r--r-- | app/view/templates/editleftbar.php | 8 | ||||
-rw-r--r-- | app/view/templates/homemenu.php | 26 |
8 files changed, 102 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 </script> ' . PHP_EOL; } + + if (!empty($this->page->redirection())) { + if (preg_match('%https?:\/\/\S*%', $this->page->redirection(), $out)) { + $url = $out[0]; + $head .= PHP_EOL . '<meta http-equiv="refresh" content="' . $this->page->refresh() . '; URL=' . $url . '" />'; + } elseif (in_array($this->page->redirection(), $this->pagelist)) { + $url = $this->upage($this->page->redirection()); + $head .= PHP_EOL . '<meta http-equiv="refresh" content="' . $this->page->refresh() . '; URL=' . $url . '" />'; + } + } 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 = '<ul class="taglist" id="' . $tag . '">' . PHP_EOL; - $this->pagelistsort($li, 'date', -1); - foreach ($li as $item) { - if ($item->id() === $this->page->id()) { - $actual = ' actualpage'; - } else { - $actual = ''; - } - $ul .= '<li><a href="' . $this->router->generate('pageread/', ['page' => $item->id()]) . '" title="' . $item->description() . '" class="internal' . $actual . '" '. $this->internallinkblank .' >' . $item->title() . '</a></li>' . PHP_EOL; - } - $ul .= '</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 = '<ul class="pagelist">' . PHP_EOL ; foreach ($table2 as $page ) { @@ -720,18 +690,6 @@ class Modelrender extends Modelpage return $linkfrom; } - public function linkto() - { - $linkto = []; - foreach ($this->pagelist as $page) { - if (in_array($this->page->id(), $page->linkfrom())) { - $linkto[] = $page->id(); - } - } - return $linkto; - } - - } diff --git a/app/class/Page.php b/app/class/Page.php index c30352c..c57ecc4 100644 --- a/app/class/Page.php +++ b/app/class/Page.php @@ -44,6 +44,8 @@ class Page extends Dbitem protected $editcount; protected $editby; protected $sleep; + protected $redirection; + protected $refresh; const LEN = 255; @@ -103,6 +105,9 @@ class Page extends Dbitem $this->seteditcount(0); $this->seteditby([]); $this->setsleep(0); + $this->setredirection(''); + $this->setrefresh(0); + } public static function classvarlist() @@ -383,6 +388,16 @@ class Page extends Dbitem return $this->sleep; } + public function redirection($type = 'string') + { + return $this->redirection; + } + + public function refresh($type = 'int') + { + return $this->refresh; + } + @@ -707,6 +722,32 @@ class Page extends Dbitem } } + public function setredirection($redirection) + { + if(is_string($redirection) && strlen($redirection) <= 64) { + $redirection = strip_tags($redirection); + if(preg_match('%https?:\/\/\S*%', $redirection, $out)) { + $this->redirection = $out[0]; + } else { + $redirection = idclean($redirection); + if ($redirection !== $this->id) { + $this->redirection = $redirection; + } + } + } + } + + public function setrefresh($refresh) + { + $refresh = intval($refresh); + if($refresh > 180) { + $refresh = 180; + } elseif ($refresh < 0) { + $refresh = 0; + } + $this->refresh = $refresh; + } + // __________________________________ C O U N T E R S ______________________________ diff --git a/app/view/templates/editleftbar.php b/app/view/templates/editleftbar.php index 3004351..812c30d 100644 --- a/app/view/templates/editleftbar.php +++ b/app/view/templates/editleftbar.php @@ -159,7 +159,7 @@ - <details id="advanced" <?= !empty($page->externalcss()) || !empty($page->customhead()) || !empty($page->sleep()) ? 'open' : '' ?>> + <details id="advanced" <?= !empty($page->externalcss()) || !empty($page->customhead()) || !empty($page->sleep()) || !empty($page->redirection()) ? 'open' : '' ?>> <summary>Advanced</summary> @@ -186,6 +186,12 @@ <label for="sleep">Sleep time (seconds)</label> <input type="number" name="sleep" id="sleep" value="<?= $page->sleep() ?>" min="0" max="180"> + <label for="redirection" title="page_id or URL like https://domain.org">Redirection</label> + <input type="text" name="redirection" id="redirection" value="<?= $page->redirection() ?>" list="searchdatalist"> + + <label for="refresh" title="Time before redirection (in seconds)">Refresh time</label> + <input type="number" name="refresh" value="<?= $page->refresh() ?>" id="refresh" min="0" max="180"> + </fieldset> </details> diff --git a/app/view/templates/homemenu.php b/app/view/templates/homemenu.php index 83d2b90..5f484a1 100644 --- a/app/view/templates/homemenu.php +++ b/app/view/templates/homemenu.php @@ -38,6 +38,13 @@ <div class="submenu"> <i>Edit selected pages</i> <form action="<?= $this->url('multi') ?>" method="post" id="multi"> + <h2>Render</h2> + <input type="submit" name="action" value="render"> + <h2>Delete</h2> + <input type="hidden" name="confirmdelete" value="0"> + <input type="checkbox" name="confirmdelete" id="confirmdelete" value="1"> + <label for="confirmdelete">confirm</label> + <input type="submit" name="action" value="delete"> <h2>Edit Meta infos</h2> <input type="text" name="datas[title]" id="title"> <label for="title">title</label> @@ -142,6 +149,16 @@ <input type="number" name="datas[sleep]" id="sleep" min="0" max="180"> <label for="sleep">Sleep time (seconds)</label> </br> + <input type="hidden" name="reset[redirection]" value="0"> + <input type="checkbox" name="reset[redirection]" id="resetredirection" value="1"> + <label for="resetredirection">reset redirection</label> + </br> + <input type="text" name="datas[redirection]" id="redirection" list="searchdatalist"> + <label for="redirection" title="page_id or URL like https://domain.org">Redirection</label> + </br> + <input type="number" name="datas[refresh]" id="refresh" min="0" max="180"> + <label for="refresh">refresh time (seconds)</label> + </br> <strong>Author</strong> </br> <select name="addauthor" id="addauthor"> @@ -159,16 +176,11 @@ <label for="resetauthor">Empty Authors</label> </br> <input type="hidden" name="reset[datemodif]" value="0"> - <input type="checkbox" name="reset[datemodif]" id="resetdatemodif" value="1"> + <input type="checkbox" name="reset[datemodif]" id="resetdatemodif" value="1" checked> <label for="resetdatemodif">update modification date</label> </br> <input type="submit" name="action" value="edit"> - <h2>Actions</h2> - <input type="submit" name="action" value="render"> - <input type="hidden" name="confirmdelete" value="0"> - <input type="checkbox" name="confirmdelete" id="confirmdelete" value="1"> - <label for="confirmdelete">confirm</label> - <input type="submit" name="action" value="delete"> + </form> </div> </details> |