diff options
Diffstat (limited to 'app/class/Page.php')
-rw-r--r-- | app/class/Page.php | 1619 |
1 files changed, 817 insertions, 802 deletions
diff --git a/app/class/Page.php b/app/class/Page.php index da19f61..760521b 100644 --- a/app/class/Page.php +++ b/app/class/Page.php @@ -8,809 +8,824 @@ use DateTimeZone; class Page extends Dbitem { - protected $id; - protected $title; - protected $description; - protected $tag; - protected $date; - protected $datecreation; - protected $datemodif; - protected $daterender; - protected $css; - protected $javascript; - protected $body; - protected $header; - protected $main; - protected $nav; - protected $aside; - protected $footer; - protected $externalcss; - protected $customhead; - protected $secure; - protected $interface; - protected $linkto; - protected $templatebody; - protected $templatecss; - protected $templatejavascript; - protected $templateoptions; - protected $favicon; - protected $thumbnail; - protected $authors; - protected $invites; - protected $readers; - protected $affcount; - protected $visitcount; - protected $editcount; - protected $editby; - protected $sleep; - protected $redirection; - protected $refresh; - - - const LEN = 255; - const LENTEXT = 2**20; - const SECUREMAX = 2; - const TABS = ['main', 'css', 'header', 'body', 'nav', 'aside', 'footer', 'javascript']; - const VAR_DATE = ['date', 'datecreation', 'datemodif', 'daterender']; - - - + protected $id; + protected $title; + protected $description; + protected $tag; + protected $date; + protected $datecreation; + protected $datemodif; + protected $daterender; + protected $css; + protected $javascript; + protected $body; + protected $header; + protected $main; + protected $nav; + protected $aside; + protected $footer; + protected $externalcss; + protected $customhead; + protected $secure; + protected $interface; + protected $linkto; + protected $templatebody; + protected $templatecss; + protected $templatejavascript; + protected $templateoptions; + protected $favicon; + protected $thumbnail; + protected $authors; + protected $invites; + protected $readers; + protected $affcount; + protected $visitcount; + protected $editcount; + protected $editby; + protected $sleep; + protected $redirection; + protected $refresh; + + + public const LEN = 255; + public const LENTEXT = 2 ** 20; + public const SECUREMAX = 2; + public const TABS = ['main', 'css', 'header', 'body', 'nav', 'aside', 'footer', 'javascript']; + public const VAR_DATE = ['date', 'datecreation', 'datemodif', 'daterender']; + + + // _____________________________________________________ F U N ____________________________________________________ - public function __construct($datas = []) - { - $this->reset(); - $this->hydrate($datas); - } - - public function getobjectvars() : array - { - return get_object_vars($this); - } - - public function reset() - { - $now = new DateTimeImmutable(null, timezone_open("Europe/Paris")); - - $this->settitle($this->id()); - $this->setdescription(''); - $this->settag([]); - $this->setdate($now); - $this->setdatecreation($now); - $this->setdatecreation($now); - $this->setdatemodif($now); - $this->setdaterender($now); - $this->setcss(''); - $this->setjavascript(''); - $this->setbody(Config::defaultbody()); - $this->setheader(''); - $this->setmain(''); - $this->setnav(''); - $this->setaside(''); - $this->setfooter(''); - $this->setexternalcss([]); - $this->setcustomhead(''); - $this->setsecure(Config::defaultprivacy()); - $this->setinterface('main'); - $this->setlinkto([]); - $this->settemplatebody(''); - $this->settemplatecss(''); - $this->settemplatejavascript(''); - $this->settemplateoptions(['externalcss', 'externaljavascript', 'favicon', 'thumbnail', 'reccursivecss']); - $this->setfavicon(''); - $this->setthumbnail(''); - $this->setauthors([]); - $this->setinvites([]); - $this->setreaders([]); - $this->setaffcount(0); - $this->setvisitcount(0); - $this->seteditcount(0); - $this->seteditby([]); - $this->setsleep(0); - $this->setredirection(''); - $this->setrefresh(0); - - } - - // _____________________________________________________ G E T ____________________________________________________ - - public function id($type = 'string') - { - return $this->id; - } - - public function title($type = 'string') - { - if($type == 'sort') { - return strtolower($this->title); - } else { - return $this->title; - } - } - - public function description($type = 'string') - { - if($type == 'short' && strlen($this->description) > 15 ) { - return substr($this->description, 0, 20) . '...'; - } else { - return $this->description; - } - } - - public function tag($option = 'array') - { - if ($option == 'string') { - return implode(", ", $this->tag); - } elseif ($option == 'array') { - return $this->tag; - } elseif ($option == 'sort') { - return count($this->tag); - } - } - - public function date($option = 'date') - { - return $this->datetransform('date', $option); - } - - public function datecreation($option = 'date') - { - return $this->datetransform('datecreation', $option); - } - - - public function datemodif($option = 'date') - { - return $this->datetransform('datemodif', $option); - } - - public function daterender($option = 'date') - { - return $this->datetransform('daterender', $option); - } - - public function css($type = 'string') - { - return $this->css; - } - - public function javascript($type = 'string') - { - return $this->javascript; - } - - public function body($type = 'string') - { - return $this->body; - } - - public function header($type = 'string') - { - return $this->header; - } - - public function main($type = 'string') - { - return $this->main; - } - - public function nav($type = "string") - { - return $this->nav; - } - - public function aside($type = "string") - { - return $this->aside; - } - - public function externalcss($type = "array") - { - return $this->externalcss; - } - - public function customhead($type = "string") - { - if($type === 'string') { - return $this->customhead; - } elseif($type === 'int') { - return substr_count($this->customhead, PHP_EOL) + 1; - } - } - - public function footer($type = "string") - { - return $this->footer; - } - - public function secure($type = 'int') - { - if ($type == 'string') { - if ($this->secure == 0) $secure = 'public'; - if ($this->secure == 1) $secure = 'private'; - if ($this->secure == 2) $secure = 'not_published'; - return $secure; - } else { - return $this->secure; - } - } - - public function invitepassword($type = 'string') - { - return $this->invitepassword; - } - - public function readpassword($type = 'string') - { - return $this->readpassword; - } - - public function interface($type = 'string') - { - return $this->interface; - } - - public function linkto($option = 'array') - { - if ($option == 'json') { - $linkto = json_encode($this->linkto); - } elseif ($option == 'array') { - $linkto = $this->linkto; - } elseif ($option == 'sort') { - return count($this->linkto); - } elseif ($option == 'string') { - return implode(', ', $this->linkto); - } - return $linkto; - - } - - public function templatebody($type = 'string') - { - return $this->templatebody; - } - - public function templatecss($type = 'string') - { - return $this->templatecss; - } - - public function templatejavascript($type = 'string') - { - return $this->templatejavascript; - } - - public function template() - { - $template['body'] = $this->templatebody; - $template['css'] = $this->templatecss; - $template['javascript'] = $this->templatejavascript; - - $template['cssreccursive'] = $this->checkoption('reccursive'); - $template['externalcss'] = $this->checkoption('externalcss'); - $template['cssfavicon'] = $this->checkoption('favicon'); - $template['cssthumbnail'] = $this->checkoption('thumbnail'); - - $template['externaljavascript'] = $this->checkoption('externaljavascript'); - - return $template; - } - - public function templateoptions($type = 'array') - { - return $this->templateoptions; - } - - function checkoption($option) - { - if (in_array($option, $this->templateoptions)) { - return true; - } else { - return false; - } - } - - public function favicon($type = 'string') - { - return $this->favicon; - } - - public function thumbnail($type = 'string') - { - return $this->thumbnail; - } - - public function authors($type = 'array') - { - if($type == 'string') { - return implode(', ', $this->authors); - } elseif ($type == 'array') { - return $this->authors; - } elseif ($type == 'sort') { - return count($this->authors); - } - } - - public function invites($type = 'array') - { - return $this->invites; - } - - public function readers($type = 'array') - { - return $this->invites; - } - - public function affcount($type = 'int') - { - return $this->affcount; - } - - public function visitcount($type = 'int') - { - return $this->visitcount; - } - - public function editcount($type = 'int') - { - return $this->editcount; - } - - public function editby($type = 'array') - { - return $this->editby; - } - - public function sleep($type = 'int') - { - return $this->sleep; - } - - public function redirection($type = 'string') - { - return $this->redirection; - } - - public function refresh($type = 'int') - { - return $this->refresh; - } - - - - - // _____________________________________________________ S E T ____________________________________________________ - - public function setid($id) - { - if (strlen($id) <= Model::MAX_ID_LENGTH and is_string($id)) { - $this->id = strip_tags(strtolower(str_replace(" ", "", $id))); - } - } - - public function settitle($title) - { - if (strlen($title) < self::LEN and is_string($title)) { - $this->title = strip_tags(trim($title)); - } - } - - public function setdescription($description) - { - if (strlen($description) < self::LEN and is_string($description)) { - $this->description = strip_tags(trim($description)); - } - } - - public function settag($tag) - { - if (is_string($tag) && strlen($tag) < self::LEN) { - $tag = $this->tagtoarray($tag); - } - if (is_array($tag)) { - $tag = array_map('idclean', $tag); - $tag = array_filter($tag); - $this->tag = $tag; - } - } - - public function setdate($date) - { - if ($date instanceof DateTimeImmutable) { - $this->date = $date; - } else { - $this->date = DateTimeImmutable::createFromFormat(DateTime::ISO8601, $date, new DateTimeZone('Europe/Paris')); - } - } - - public function setptime($ptime) - { - if(is_string($ptime) && DateTime::createFromFormat('H:i', $ptime) !== FALSE) { - $time = explode(':', $ptime); - $this->date = $this->date->setTime($time[0], $time[1]); - } - } - - public function setpdate($pdate) - { - if(is_string($pdate) && DateTime::createFromFormat('Y-m-d', $pdate) !== FALSE) { - $date = explode('-', $pdate); - $this->date = $this->date->setDate($date[0], $date[1], $date[2]); - } - } - - /** - * DateTimeImmutable : set date - * string ISO8601 : set date - * true : reset to now - * - * @param string|DateTimeImmutable|true $datecreation Set or reset date of creation - */ - public function setdatecreation($datecreation) - { - if ($datecreation instanceof DateTimeImmutable) { - $this->datecreation = $datecreation; - } elseif ($datecreation === true) { - $this->datecreation = new DateTimeImmutable(null, timezone_open("Europe/Paris")); - } else { - $this->datecreation = DateTimeImmutable::createFromFormat(DateTime::ISO8601, $datecreation, new DateTimeZone('Europe/Paris')); - } - } - - public function setdatemodif($datemodif) - { - if ($datemodif instanceof DateTimeImmutable) { - $this->datemodif = $datemodif; - } else { - $this->datemodif = DateTimeImmutable::createFromFormat(DateTime::ISO8601, $datemodif, new DateTimeZone('Europe/Paris')); - } - } - - public function setdaterender($daterender) - { - if ($daterender instanceof DateTimeImmutable) { - $this->daterender = $daterender; - } else { - $this->daterender = DateTimeImmutable::createFromFormat(DateTime::ISO8601, $daterender, new DateTimeZone('Europe/Paris')); - } - } - - - public function setcss($css) - { - if (strlen($css) < self::LENTEXT and is_string($css)) { - $this->css = trim(strtolower($css)); - } - } - - - - public function setjavascript($javascript) - { - if (strlen($javascript < self::LENTEXT && is_string($javascript))) { - $this->javascript = $javascript; - } - } - - - public function setbody($body) - { - if (strlen($body < self::LENTEXT && is_string($body))) { - $this->body = $body; - } - } - - public function setheader($header) - { - if (strlen($header < self::LENTEXT && is_string($header))) { - $this->header = $header; - } - } - - public function setmain($main) - { - if (strlen($main) < self::LENTEXT and is_string($main)) { - $this->main = $main; - } - } - - public function setnav($nav) - { - if (strlen($nav) < self::LENTEXT and is_string($nav)) { - $this->nav = $nav; - } - } - - public function setaside($aside) - { - if (strlen($aside) < self::LENTEXT and is_string($aside)) { - $this->aside = $aside; - } - } - - public function setexternalcss($externalcss) - { - if(is_array($externalcss)) { - $this->externalcss = array_values(array_filter($externalcss)); - } - } - - public function setcustomhead(string $customhead) - { - if(is_string($customhead)) { - $this->customhead = $customhead; - } - } - - public function setfooter($footer) - { - if (strlen($footer) < self::LENTEXT and is_string($footer)) { - $this->footer = $footer; - } - } - - public function setsecure($secure) - { - if ($secure >= 0 and $secure <= self::SECUREMAX) { - $this->secure = intval($secure); - } - } - - public function setinvitepassword($invitepassword) - { - if (is_string($invitepassword) && strlen($invitepassword) < self::LEN) { - $this->invitepassword = $invitepassword; - } - } - - public function setreadpassword($readpassword) - { - if (is_string($readpassword) && strlen($readpassword) < self::LEN) { - $this->readpassword = $readpassword; - } - } - - public function setinterface($interface) - { - if (in_array($interface, self::TABS)) { - $this->interface = $interface; - } - } - - public function setlinkto($linkto) - { - if (is_array($linkto)) { - $this->linkto = $linkto; - } elseif (is_string($linkto)) { - $linktojson = json_decode($linkto); - if (is_array($linktojson)) { - $this->linkto = $linktojson; - } - } elseif ($linkto === null) { - $this->linkto = []; - } - } - - public function settemplatebody($templatebody) - { - if (is_string($templatebody)) { - $this->templatebody = $templatebody; - } - } - - public function settemplatecss($templatecss) - { - if (is_string($templatecss)) { - $this->templatecss = $templatecss; - } - } - - public function settemplatejavascript($templatejavascript) - { - if (is_string($templatejavascript)) { - $this->templatejavascript = $templatejavascript; - } - } - - public function settemplateoptions($templateoptions) - { - if(is_array($templateoptions)) { - $this->templateoptions = array_values(array_filter($templateoptions)); - } - } - - public function setfavicon($favicon) - { - if (is_string($favicon)) { - $this->favicon = $favicon; - } - } - - public function setthumbnail($thumbnail) - { - if (is_string($thumbnail)) { - $this->thumbnail = $thumbnail; - } - } - - public function setauthors($authors) - { - if(is_array($authors)) { - $this->authors = array_unique(array_values(array_filter($authors))); - } - } - - public function setinvites($invites) - { - if(is_array($invites)) { - $this->invites = array_values(array_filter($invites)); - } - } - - public function setreaders($readers) - { - if(is_array($readers)) { - $this->readers = array_values(array_filter($readers)); - } - } - - public function setaffcount($affcount) - { - if (is_int($affcount)) { - $this->affcount = $affcount; - } elseif (is_numeric($affcount)) { - $this->affcount = intval($affcount); - } - } - - public function setvisitcount($visitcount) - { - if (is_int($visitcount)) { - $this->visitcount = $visitcount; - } elseif (is_numeric($visitcount)) { - $this->visitcount = intval($visitcount); - } - } - - public function seteditcount($editcount) - { - if (is_int($editcount)) { - $this->editcount = $editcount; - } elseif (is_numeric($editcount)) { - $this->editcount = intval($editcount); - } - } - - public function seteditby($editby) - { - if(is_array($editby)) { - $this->editby = $editby; - } - } - - 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 ______________________________ - - - public function addeditcount() - { - $this->editcount++; - } - - public function addaffcount() - { - $this->affcount++; - } - - public function addvisitcount() - { - $this->visitcount++; - } - - public function updateedited() - { - $now = new DateTimeImmutable(null, timezone_open("Europe/Paris")); - $this->setdatemodif($now); - $this->addeditcount(); - } - - public function addauthor(string $id) - { - if(!in_array($id, $this->authors)) { - $this->authors[] = $id; - } - } - - public function addeditby(string $id) - { - $this->editby[$id] = true; - } - - public function removeeditby(string $id) - { - unset($this->editby[$id]); - } - - public function iseditedby() - { - return count($this->editby) > 0; - } - - public function setsleep($sleep) - { - $sleep = abs(intval($sleep)); - if($sleep > 180) { - $sleep = 180; - } - $this->sleep = $sleep; - } - - /** - * Merge new tag with actual tags - * - * @param string|array $tag Could be tags as string or array - */ - - public function addtag($tag) - { - if (is_string($tag)) { - $tag = $this->tagtoarray($tag); - } - if(is_array($tag)) { - $tag = array_map('idclean', $tag); - $tag = array_filter($tag); - $this->tag = array_unique(array_merge($this->tag, $tag)); - } - } - - - // _________________________________ T O O L S ______________________________________ - - /** - * Convert a tag string to an array ready to be stored - * - * @param string $tagstring Tag as string separated by commas - * @return array Tags stored as an array - */ - - private function tagtoarray(string $tagstring) : array - { - $tag = strip_tags(trim(strtolower($tagstring))); - $tag = str_replace(' ', '', $tag); - $taglist = explode(",", $tag); - $taglist = array_filter($taglist); - return $taglist; - } - - + public function __construct($datas = []) + { + $this->reset(); + $this->hydrate($datas); + } + + public function getobjectvars(): array + { + return get_object_vars($this); + } + + public function reset() + { + $now = new DateTimeImmutable(null, timezone_open("Europe/Paris")); + + $this->settitle($this->id()); + $this->setdescription(''); + $this->settag([]); + $this->setdate($now); + $this->setdatecreation($now); + $this->setdatecreation($now); + $this->setdatemodif($now); + $this->setdaterender($now); + $this->setcss(''); + $this->setjavascript(''); + $this->setbody(Config::defaultbody()); + $this->setheader(''); + $this->setmain(''); + $this->setnav(''); + $this->setaside(''); + $this->setfooter(''); + $this->setexternalcss([]); + $this->setcustomhead(''); + $this->setsecure(Config::defaultprivacy()); + $this->setinterface('main'); + $this->setlinkto([]); + $this->settemplatebody(''); + $this->settemplatecss(''); + $this->settemplatejavascript(''); + $this->settemplateoptions(['externalcss', 'externaljavascript', 'favicon', 'thumbnail', 'reccursivecss']); + $this->setfavicon(''); + $this->setthumbnail(''); + $this->setauthors([]); + $this->setinvites([]); + $this->setreaders([]); + $this->setaffcount(0); + $this->setvisitcount(0); + $this->seteditcount(0); + $this->seteditby([]); + $this->setsleep(0); + $this->setredirection(''); + $this->setrefresh(0); + } + + // _____________________________________________________ G E T ____________________________________________________ + + public function id($type = 'string') + { + return $this->id; + } + + public function title($type = 'string') + { + if ($type == 'sort') { + return strtolower($this->title); + } else { + return $this->title; + } + } + + public function description($type = 'string') + { + if ($type == 'short' && strlen($this->description) > 15) { + return substr($this->description, 0, 20) . '...'; + } else { + return $this->description; + } + } + + public function tag($option = 'array') + { + if ($option == 'string') { + return implode(", ", $this->tag); + } elseif ($option == 'array') { + return $this->tag; + } elseif ($option == 'sort') { + return count($this->tag); + } + } + + public function date($option = 'date') + { + return $this->datetransform('date', $option); + } + + public function datecreation($option = 'date') + { + return $this->datetransform('datecreation', $option); + } + + + public function datemodif($option = 'date') + { + return $this->datetransform('datemodif', $option); + } + + public function daterender($option = 'date') + { + return $this->datetransform('daterender', $option); + } + + public function css($type = 'string') + { + return $this->css; + } + + public function javascript($type = 'string') + { + return $this->javascript; + } + + public function body($type = 'string') + { + return $this->body; + } + + public function header($type = 'string') + { + return $this->header; + } + + public function main($type = 'string') + { + return $this->main; + } + + public function nav($type = "string") + { + return $this->nav; + } + + public function aside($type = "string") + { + return $this->aside; + } + + public function externalcss($type = "array") + { + return $this->externalcss; + } + + public function customhead($type = "string") + { + if ($type === 'string') { + return $this->customhead; + } elseif ($type === 'int') { + return substr_count($this->customhead, PHP_EOL) + 1; + } + } + + public function footer($type = "string") + { + return $this->footer; + } + + public function secure($type = 'int') + { + if ($type == 'string') { + if ($this->secure == 0) { + $secure = 'public'; + } + if ($this->secure == 1) { + $secure = 'private'; + } + if ($this->secure == 2) { + $secure = 'not_published'; + } + return $secure; + } else { + return $this->secure; + } + } + + public function invitepassword($type = 'string') + { + return $this->invitepassword; + } + + public function readpassword($type = 'string') + { + return $this->readpassword; + } + + public function interface($type = 'string') + { + return $this->interface; + } + + public function linkto($option = 'array') + { + if ($option == 'json') { + $linkto = json_encode($this->linkto); + } elseif ($option == 'array') { + $linkto = $this->linkto; + } elseif ($option == 'sort') { + return count($this->linkto); + } elseif ($option == 'string') { + return implode(', ', $this->linkto); + } + return $linkto; + } + + public function templatebody($type = 'string') + { + return $this->templatebody; + } + + public function templatecss($type = 'string') + { + return $this->templatecss; + } + + public function templatejavascript($type = 'string') + { + return $this->templatejavascript; + } + + public function template() + { + $template['body'] = $this->templatebody; + $template['css'] = $this->templatecss; + $template['javascript'] = $this->templatejavascript; + + $template['cssreccursive'] = $this->checkoption('reccursive'); + $template['externalcss'] = $this->checkoption('externalcss'); + $template['cssfavicon'] = $this->checkoption('favicon'); + $template['cssthumbnail'] = $this->checkoption('thumbnail'); + + $template['externaljavascript'] = $this->checkoption('externaljavascript'); + + return $template; + } + + public function templateoptions($type = 'array') + { + return $this->templateoptions; + } + + public function checkoption($option) + { + if (in_array($option, $this->templateoptions)) { + return true; + } else { + return false; + } + } + + public function favicon($type = 'string') + { + return $this->favicon; + } + + public function thumbnail($type = 'string') + { + return $this->thumbnail; + } + + public function authors($type = 'array') + { + if ($type == 'string') { + return implode(', ', $this->authors); + } elseif ($type == 'array') { + return $this->authors; + } elseif ($type == 'sort') { + return count($this->authors); + } + } + + public function invites($type = 'array') + { + return $this->invites; + } + + public function readers($type = 'array') + { + return $this->invites; + } + + public function affcount($type = 'int') + { + return $this->affcount; + } + + public function visitcount($type = 'int') + { + return $this->visitcount; + } + + public function editcount($type = 'int') + { + return $this->editcount; + } + + public function editby($type = 'array') + { + return $this->editby; + } + + public function sleep($type = 'int') + { + return $this->sleep; + } + + public function redirection($type = 'string') + { + return $this->redirection; + } + + public function refresh($type = 'int') + { + return $this->refresh; + } + + + + + // _____________________________________________________ S E T ____________________________________________________ + + public function setid($id) + { + if (strlen($id) <= Model::MAX_ID_LENGTH and is_string($id)) { + $this->id = strip_tags(strtolower(str_replace(" ", "", $id))); + } + } + + public function settitle($title) + { + if (strlen($title) < self::LEN and is_string($title)) { + $this->title = strip_tags(trim($title)); + } + } + + public function setdescription($description) + { + if (strlen($description) < self::LEN and is_string($description)) { + $this->description = strip_tags(trim($description)); + } + } + + public function settag($tag) + { + if (is_string($tag) && strlen($tag) < self::LEN) { + $tag = $this->tagtoarray($tag); + } + if (is_array($tag)) { + $tag = array_map('idclean', $tag); + $tag = array_filter($tag); + $this->tag = $tag; + } + } + + public function setdate($date) + { + if ($date instanceof DateTimeImmutable) { + $this->date = $date; + } else { + $this->date = DateTimeImmutable::createFromFormat( + DateTime::ISO8601, + $date, + new DateTimeZone('Europe/Paris') + ); + } + } + + public function setptime($ptime) + { + if (is_string($ptime) && DateTime::createFromFormat('H:i', $ptime) !== false) { + $time = explode(':', $ptime); + $this->date = $this->date->setTime($time[0], $time[1]); + } + } + + public function setpdate($pdate) + { + if (is_string($pdate) && DateTime::createFromFormat('Y-m-d', $pdate) !== false) { + $date = explode('-', $pdate); + $this->date = $this->date->setDate($date[0], $date[1], $date[2]); + } + } + + /** + * DateTimeImmutable : set date + * string ISO8601 : set date + * true : reset to now + * + * @param string|DateTimeImmutable|true $datecreation Set or reset date of creation + */ + public function setdatecreation($datecreation) + { + if ($datecreation instanceof DateTimeImmutable) { + $this->datecreation = $datecreation; + } elseif ($datecreation === true) { + $this->datecreation = new DateTimeImmutable(null, timezone_open("Europe/Paris")); + } else { + $this->datecreation = DateTimeImmutable::createFromFormat( + DateTime::ISO8601, + $datecreation, + new DateTimeZone('Europe/Paris') + ); + } + } + + public function setdatemodif($datemodif) + { + if ($datemodif instanceof DateTimeImmutable) { + $this->datemodif = $datemodif; + } else { + $this->datemodif = DateTimeImmutable::createFromFormat( + DateTime::ISO8601, + $datemodif, + new DateTimeZone('Europe/Paris') + ); + } + } + + public function setdaterender($daterender) + { + if ($daterender instanceof DateTimeImmutable) { + $this->daterender = $daterender; + } else { + $this->daterender = DateTimeImmutable::createFromFormat( + DateTime::ISO8601, + $daterender, + new DateTimeZone('Europe/Paris') + ); + } + } + + + public function setcss($css) + { + if (strlen($css) < self::LENTEXT and is_string($css)) { + $this->css = trim(strtolower($css)); + } + } + + + + public function setjavascript($javascript) + { + if (strlen($javascript < self::LENTEXT && is_string($javascript))) { + $this->javascript = $javascript; + } + } + + + public function setbody($body) + { + if (strlen($body < self::LENTEXT && is_string($body))) { + $this->body = $body; + } + } + + public function setheader($header) + { + if (strlen($header < self::LENTEXT && is_string($header))) { + $this->header = $header; + } + } + + public function setmain($main) + { + if (strlen($main) < self::LENTEXT and is_string($main)) { + $this->main = $main; + } + } + + public function setnav($nav) + { + if (strlen($nav) < self::LENTEXT and is_string($nav)) { + $this->nav = $nav; + } + } + + public function setaside($aside) + { + if (strlen($aside) < self::LENTEXT and is_string($aside)) { + $this->aside = $aside; + } + } + + public function setexternalcss($externalcss) + { + if (is_array($externalcss)) { + $this->externalcss = array_values(array_filter($externalcss)); + } + } + + public function setcustomhead(string $customhead) + { + if (is_string($customhead)) { + $this->customhead = $customhead; + } + } + + public function setfooter($footer) + { + if (strlen($footer) < self::LENTEXT and is_string($footer)) { + $this->footer = $footer; + } + } + + public function setsecure($secure) + { + if ($secure >= 0 and $secure <= self::SECUREMAX) { + $this->secure = intval($secure); + } + } + + public function setinvitepassword($invitepassword) + { + if (is_string($invitepassword) && strlen($invitepassword) < self::LEN) { + $this->invitepassword = $invitepassword; + } + } + + public function setreadpassword($readpassword) + { + if (is_string($readpassword) && strlen($readpassword) < self::LEN) { + $this->readpassword = $readpassword; + } + } + + public function setinterface($interface) + { + if (in_array($interface, self::TABS)) { + $this->interface = $interface; + } + } + + public function setlinkto($linkto) + { + if (is_array($linkto)) { + $this->linkto = $linkto; + } elseif (is_string($linkto)) { + $linktojson = json_decode($linkto); + if (is_array($linktojson)) { + $this->linkto = $linktojson; + } + } elseif ($linkto === null) { + $this->linkto = []; + } + } + + public function settemplatebody($templatebody) + { + if (is_string($templatebody)) { + $this->templatebody = $templatebody; + } + } + + public function settemplatecss($templatecss) + { + if (is_string($templatecss)) { + $this->templatecss = $templatecss; + } + } + + public function settemplatejavascript($templatejavascript) + { + if (is_string($templatejavascript)) { + $this->templatejavascript = $templatejavascript; + } + } + + public function settemplateoptions($templateoptions) + { + if (is_array($templateoptions)) { + $this->templateoptions = array_values(array_filter($templateoptions)); + } + } + + public function setfavicon($favicon) + { + if (is_string($favicon)) { + $this->favicon = $favicon; + } + } + + public function setthumbnail($thumbnail) + { + if (is_string($thumbnail)) { + $this->thumbnail = $thumbnail; + } + } + + public function setauthors($authors) + { + if (is_array($authors)) { + $this->authors = array_unique(array_values(array_filter($authors))); + } + } + + public function setinvites($invites) + { + if (is_array($invites)) { + $this->invites = array_values(array_filter($invites)); + } + } + + public function setreaders($readers) + { + if (is_array($readers)) { + $this->readers = array_values(array_filter($readers)); + } + } + + public function setaffcount($affcount) + { + if (is_int($affcount)) { + $this->affcount = $affcount; + } elseif (is_numeric($affcount)) { + $this->affcount = intval($affcount); + } + } + + public function setvisitcount($visitcount) + { + if (is_int($visitcount)) { + $this->visitcount = $visitcount; + } elseif (is_numeric($visitcount)) { + $this->visitcount = intval($visitcount); + } + } + + public function seteditcount($editcount) + { + if (is_int($editcount)) { + $this->editcount = $editcount; + } elseif (is_numeric($editcount)) { + $this->editcount = intval($editcount); + } + } + + public function seteditby($editby) + { + if (is_array($editby)) { + $this->editby = $editby; + } + } + + 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 ______________________________ + + + public function addeditcount() + { + $this->editcount++; + } + + public function addaffcount() + { + $this->affcount++; + } + + public function addvisitcount() + { + $this->visitcount++; + } + + public function updateedited() + { + $now = new DateTimeImmutable(null, timezone_open("Europe/Paris")); + $this->setdatemodif($now); + $this->addeditcount(); + } + + public function addauthor(string $id) + { + if (!in_array($id, $this->authors)) { + $this->authors[] = $id; + } + } + + public function addeditby(string $id) + { + $this->editby[$id] = true; + } + + public function removeeditby(string $id) + { + unset($this->editby[$id]); + } + + public function iseditedby() + { + return count($this->editby) > 0; + } + + public function setsleep($sleep) + { + $sleep = abs(intval($sleep)); + if ($sleep > 180) { + $sleep = 180; + } + $this->sleep = $sleep; + } + + /** + * Merge new tag with actual tags + * + * @param string|array $tag Could be tags as string or array + */ + + public function addtag($tag) + { + if (is_string($tag)) { + $tag = $this->tagtoarray($tag); + } + if (is_array($tag)) { + $tag = array_map('idclean', $tag); + $tag = array_filter($tag); + $this->tag = array_unique(array_merge($this->tag, $tag)); + } + } + + + // _________________________________ T O O L S ______________________________________ + + /** + * Convert a tag string to an array ready to be stored + * + * @param string $tagstring Tag as string separated by commas + * @return array Tags stored as an array + */ + + private function tagtoarray(string $tagstring): array + { + $tag = strip_tags(trim(strtolower($tagstring))); + $tag = str_replace(' ', '', $tag); + $taglist = explode(",", $tag); + $taglist = array_filter($taglist); + return $taglist; + } } - - -?>
\ No newline at end of file |