hydrate($donnees); } public function resetall() { $varlist = get_class_vars(self::class); foreach ($varlist as $var => $default) { $method = 'set' . $var; $this->$method($default); } } public function reset($var) { $varlist = get_class_vars(self::class); if (in_array($var, $varlist)) { $this->$var = $varlist[$var]; } } public function submit() { if (isset($_GET['submit'])) { if ($_GET['submit'] == 'reset') { $_SESSION['opt'] = []; } elseif ($_GET['submit'] == 'filter') { $this->getall(); } } else { $this->sessionall(); } } public function getall() { $optlist = ['sortby', 'order', 'secure', 'tagcompare', 'tagfilter', 'authorcompare', 'authorfilter', 'limit', 'invert', 'linkto']; foreach ($optlist as $method) { if (method_exists($this, $method)) { if (isset($_GET[$method])) { $setmethod = 'set' . $method; $this->$setmethod($_GET[$method]); } else { $this->reset($method); } $_SESSION['opt'][$method] = $this->$method(); } } } public function sessionall() { if (isset($_SESSION['opt'])) { $this->hydrate($_SESSION['opt']); } } public function getadress() { $object = $this->drylist(['sortby', 'order', 'secure', 'tagfilter', 'tagcompare', 'authorfilter', 'authorcompare', 'invert', 'limit']); $object['submit'] = 'filter'; return '?' . urldecode(http_build_query($object)); } public function sortbyorder($sortby = "") { $object = $this->drylist(['sortby', 'order', 'secure', 'tagfilter', 'tagcompare', 'authorfilter', 'authorcompare', 'invert', 'limit']); if (!empty($sortby)) { $object['sortby'] = $sortby; } $object['order'] = $object['order'] * -1; $object['submit'] = 'filter'; return '?' . urldecode(http_build_query($object)); } /** * Get the link list for each tags of a page * * @param array $taglist List of tag to be abalysed * @return string html code to be printed */ public function taglinks(array $taglist = []): string { $tagstring = ""; foreach ($taglist as $tag) { $tagstring .= '' . $tag . '' . PHP_EOL; } return $tagstring; } /** * Get the link list for each authors of an page * * @param array $authorlist List of author to be * @return string html code to be printed */ public function authorlinks(array $authorlist = []): string { $authorstring = ""; foreach ($authorlist as $author) { $authorstring .= '' . $author . '' . PHP_EOL; } return $authorstring; } public function securelink(int $level, string $secure) { return '' . $secure . '' . PHP_EOL; } public function linktolink(array $linktolist) { $linktostring = ""; foreach ($linktolist as $linkto ) { $linktostring .= '' . $linkto . '' . PHP_EOL; } return $linktostring; } public function getfilteradress(array $vars = []) { $varlist = ['sortby', 'order', 'secure', 'tagfilter', 'tagcompare', 'authorfilter', 'authorcompare', 'linkto', 'invert', 'limit']; // array_filter($vars, function ()) $object = $this->drylist($varlist); $object = array_merge($object, $vars); $object['submit'] = 'filter'; return urldecode(http_build_query($object)); } /** * Get the query as http string * * @return string The resulted query */ public function getquery(): string { $class = get_class_vars(get_class($this)); $object = get_object_vars($this); $class['pagevarlist'] = $object['pagevarlist']; $class['taglist'] = $object['taglist']; $class['authorlist'] = $object['authorlist']; $query = array_diff_assoc_recursive($object, $class); return urldecode(http_build_query($query)); } public function parsetagcss(string $cssstring) { $classprefix = 'tag'; $pattern = '%a\.' . $classprefix . '\_([a-z0-9\-\_]*)\s*\{\s*(background-color):\s*(#[A-F0-6]{6})\;\s*\}%'; preg_match($pattern, $cssstring, $matches); foreach ($matches as $value) { } } public function tocss($cssdatas) { $string = ''; foreach ($cssdatas as $element => $css) { $string .= PHP_EOL . $element . ' {'; foreach ($css as $param => $value) { $string .= PHP_EOL . ' ' . $param . ': ' . $value . ';'; } $string .= PHP_EOL . '}' . PHP_EOL; } return $string; } // _______________________________________________ G E T _______________________________________________ public function sortby() { return $this->sortby; } public function order() { return $this->order; } public function secure() { return $this->secure; } public function tagfilter($type = 'array') { return $this->tagfilter; } public function tagcompare() { return $this->tagcompare; } public function authorfilter($type = 'array') { return $this->authorfilter; } public function authorcompare() { return $this->authorcompare; } public function linkto($type = 'string') { return $this->linkto; } public function col($type = 'array') { if ($type == 'string') { return implode(', ', $this->col); } else { return ($this->col); } } public function taglist() { return $this->taglist; } public function authorlist() { return $this->authorlist; } public function invert() { return $this->invert; } public function pagevarlist() { return $this->pagevarlist; } public function limit() { return $this->limit; } public function pageidlist() { return $this->pageidlist; } // __________________________________________________ S E T _____________________________________________ public function setsortby($sortby) { if (is_string($sortby) && in_array($sortby, $this->pagevarlist) && in_array($sortby, Model::COLUMNS)) { $this->sortby = strtolower(strip_tags($sortby)); } } public function setorder($order) { $order = intval($order); if (in_array($order, [-1, 0, 1])) { $this->order = $order; } } public function settagfilter($tagfilter) { if (!empty($tagfilter) && is_array($tagfilter)) { $tagfilterverif = []; foreach ($tagfilter as $tag) { if (array_key_exists($tag, $this->taglist)) { $tagfilterverif[] = $tag; } } $this->tagfilter = $tagfilterverif; } } public function settagcompare($tagcompare) { if (in_array($tagcompare, ['OR', 'AND'])) { $this->tagcompare = $tagcompare; } } public function setauthorfilter($authorfilter) { if (!empty($authorfilter) && is_array($authorfilter)) { $authorfilterverif = []; foreach ($authorfilter as $author) { if (array_key_exists($author, $this->authorlist)) { $authorfilterverif[] = $author; } } $this->authorfilter = $authorfilterverif; } } public function setauthorcompare($authorcompare) { if (in_array($authorcompare, ['OR', 'AND'])) { $this->authorcompare = $authorcompare; } } public function setsecure($secure) { if ($secure >= 0 && $secure <= 5) { $this->secure = intval($secure); } } public function setlinkto($linkto) : bool { if (is_string($linkto)) { if(empty($this->pageidlist)) { $this->linkto = idclean($linkto); return true; } elseif (in_array($linkto, $this->pageidlist)) { $this->linkto = idclean($linkto); return true; } else { return false; } } else { return false; } } public function setcol($col) { if (is_array($col)) { $this->col = array_intersect($this->pagevarlist, $col); } } public function settaglist(array $pagelist) { $taglist = []; foreach ($pagelist as $page) { foreach ($page->tag('array') as $tag) { if (!array_key_exists($tag, $taglist)) { $taglist[$tag] = 1; } else { $taglist[$tag]++; } } } $taglistsorted = arsort($taglist); $this->taglist = $taglist; } public function setauthorlist(array $pagelist) { $authorlist = []; foreach ($pagelist as $page) { foreach ($page->authors('array') as $author) { if (!array_key_exists($author, $authorlist)) { $authorlist[$author] = 1; } else { $authorlist[$author]++; } } } $authorlistsorted = arsort($authorlist); $this->authorlist = $authorlist; } public function setinvert(int $invert) { if ($invert == 0 || $invert == 1) { $this->invert = $invert; } else { $this->invert = 0; } } public function setlimit($limit) { $limit = intval($limit); if ($limit < 0) { $limit = 0; } elseif ($limit >= 10000) { $limit = 9999; } $this->limit = $limit; } /** * Import list of pages IDs * * @param array $pageidlist could be array of IDs or array of Page Object * * @return bool false if array content isn't string or Pages, otherwise : true */ public function setpageidlist(array $pageidlist) : bool { $idlist = []; foreach ($pageidlist as $item) { if (is_string($item)) { $idlist[] = $item; } elseif ($item instanceof Page) { $idlist[] = $item->id(); } else { return false; } } $this->pageidlist = $idlist; return true; } public function setpagevarlist(array $pagevarlist) { $this->pagevarlist = $pagevarlist; } }