diff options
author | vincent-peugnet <v.peugnet@free.fr> | 2020-01-18 16:35:20 +0100 |
---|---|---|
committer | vincent-peugnet <v.peugnet@free.fr> | 2020-01-18 16:35:20 +0100 |
commit | 227a2a35d64db87d889f7a44101f11a117b8e06a (patch) | |
tree | 9854f830e728c66d165006ac1eaeae7958baf785 /app/class/Medialist.php | |
parent | 57ef3a9a12738081b3ab26559076bfb2b43e75db (diff) | |
download | wcms-227a2a35d64db87d889f7a44101f11a117b8e06a.tar.gz wcms-227a2a35d64db87d889f7a44101f11a117b8e06a.zip |
refactoring medialist
Diffstat (limited to 'app/class/Medialist.php')
-rw-r--r-- | app/class/Medialist.php | 110 |
1 files changed, 89 insertions, 21 deletions
diff --git a/app/class/Medialist.php b/app/class/Medialist.php index da5ba4f..d36e5d1 100644 --- a/app/class/Medialist.php +++ b/app/class/Medialist.php @@ -7,8 +7,8 @@ class Medialist /** @var string full regex match */ protected $fullmatch; - /** @var string options */ - protected $options = ''; + /** @var string full filter code line */ + protected $filter = ''; /** @var string directory of media */ protected $path = ''; @@ -19,16 +19,20 @@ class Medialist /** @var int */ protected $order = 1; + /** @var array list of media type to display */ + protected $type = ['image', 'sound', 'video', 'other']; + /** @var int display media contents*/ protected $display = 1; /** @var int display download links*/ protected $links = 0; - /** @var string ouput html code generated*/ - protected $content = ''; + /** @var string display the file name of the file */ + protected $filename = 0; - const SORT_BY_OPTIONS = ['id', 'size', 'type']; + const SORT_BY_FILTER = ['id', 'size', 'type']; + const TYPES = ['image', 'sound', 'video', 'other']; @@ -39,8 +43,6 @@ class Medialist public function __construct(array $datas = []) { $this->hydrate($datas); - $this->readoptions(); - $this->generatecontent(); } public function hydrate($datas) @@ -54,16 +56,16 @@ class Medialist } } - public function readoptions() + public function readfilter() { - parse_str($this->options, $datas); + parse_str($this->filter, $datas); $this->hydrate($datas); } public function generatecontent() { $mediamanager = new Modelmedia(); - $medialist = $mediamanager->getlistermedia(Model::MEDIA_DIR . $this->path . '/'); + $medialist = $mediamanager->getlistermedia($this->dir(), $this->type); if (!$medialist) { $this->content = '<strong>RENDERING ERROR :</strong> path : <code>' . Model::MEDIA_DIR . $this->path . '/</code> does not exist'; return false; @@ -91,10 +93,44 @@ class Medialist $div .= '</div>' . PHP_EOL; - $this->content = $div; + return $div; + } + } + + /** + * Generate link adress for table header + * + * @param string $sortby + * @return string link adress + */ + public function getsortbyadress(string $sortby) : string + { + if(!in_array($sortby, self::SORT_BY_FILTER)) { + $sortby = 'id'; + } + if ($this->sortby === $sortby) { + $order = $this->order * -1; + } else { + $order = $this->order; + } + $query = ['path' => $this->path, 'sortby' => $sortby, 'order' => $order, 'type' => $this->type]; + return '?' . urldecode(http_build_query($query)); + + } + + public function getpathadress(string $path) : string + { + $query = ['path' => '/' . $path, 'sortby' => $this->sortby, 'order' => $this->order, 'type' => $this->type]; + return '?' . urldecode(http_build_query($query)); + } - return true; + public function getquery() + { + $query = ['path' => $this->path, 'sortby' => $this->sortby, 'order' => $this->order]; + if(array_diff( self::TYPES, $this->type) != []) { + $query['type'] = $this->type; } + return '%MEDIA?' . urldecode(http_build_query($query)). '%'; } @@ -106,17 +142,38 @@ class Medialist return $this->fullmatch; } - public function options() + public function filter() { - return $this->options; + return $this->filter; } - public function content() + public function path() { - return $this->content; + return $this->path; } + /** + * @return string formated like `media/<folder>/` + */ + public function dir() + { + return ltrim($this->path, '/') . '/'; + } + public function sortby() + { + return $this->sortby; + } + + public function order() + { + return $this->order; + } + + public function type() + { + return $this->type; + } // __________________________________________________ S E T ____________________________________________________________ @@ -127,21 +184,25 @@ class Medialist } - public function setoptions(string $options) + public function setfilter(string $filter) { - if (!empty($options)) { - $this->options = $options; + if (!empty($filter)) { + $this->filter = $filter; } } public function setpath(string $path) { - $this->path = $path; + if(preg_match('%^\/' . Model::MEDIA_DIR . '%', $path)) { + $this->path = $path; + } elseif (!preg_match('%^\/%', $path)) { + $this->path = '/' . Model::MEDIA_DIR . $path; + } } public function setsortby(string $sortby) { - if (in_array($sortby, self::SORT_BY_OPTIONS)) { + if (in_array($sortby, self::SORT_BY_FILTER)) { $this->sortby = $sortby; } } @@ -152,4 +213,11 @@ class Medialist $this->order = $order; } } + + public function settype($type) + { + if(is_array($type)) { + $this->type = array_intersect(self::TYPES, array_unique($type)); + } + } } |