page = $page; $this->time = time(); $this->makeFileList(); } // tableaux des noms des fichiers // noter que le chemin et l'extension ne varient pas public function makeFileList() { // globbing = utiliser un pattern pour cibler des fichiers $nameList = glob('data/' . $this->page . '/' . $this->format . '/*.' . $this->format); $this->fileListCount = count($nameList); for($i = 0; $i < $this->fileListCount; $i++) { $pathInfo = pathinfo($nameList[$i]); $fileCode = $pathInfo['filename']; $this->fileList[$i] = [ 'fileCode' => $fileCode, 'fileName' => $nameList[$i], 'content' => '', //'date' => getdate() // peut-être utile plus tard ]; } } private function makeHtmlMiniImages($content) { while(preg_match('##', $content)) { // ? => mode paresseux, on fait matcher le moins d'occurences possibles $pattern = '#()#'; // insérer -mini au nom du dossier et au fichier $content = preg_replace($pattern, '$1$2-mini$3-mini$4', $content); } return $content; } // GET // SET // fonctions CRUD (create - read - update - delete) // create public function create($content) { // $format dépend de la classe qui a été instanciée // nommer les fichiers avec le timestamp pour: // - les trier par ordre chronologique // - rendre quasi impossible d'avoir deux fois le même nom if($this->format == 'html') { // html version images normales $contentMaxi = $content; $fileName = 'data/' . $this->page . '/' . $this->format . '-maxi-images/' . $this->time . '.' . $this->format; $file = fopen($fileName, 'w'); // w pour créer ou écraser fputs($file, $contentMaxi); fclose($file); chmod($fileName, 0666); // html version petites images $content = self::makeHtmlMiniImages($content); } $fileName = 'data/' . $this->page . '/' . $this->format . '/' . $this->time . '.' . $this->format; $file = fopen($fileName, 'w'); // w pour créer ou écraser fputs($file, $content); fclose($file); chmod($fileName, 0666); } // read public function readAll() // ajoute le contenu à FileList { for($i = 0; $i < $this->fileListCount; $i++) { $this->fileList[$i]['content'] = file_get_contents($this->fileList[$i]['fileName']); } } public function readOne() { return(file_get_contents('data/' . $this->page . '/' . $this->format . '/' . $this->fileCode . '.' . $this->format)); } // update public function update($content) { if($this->format == 'html') { // html version images normales $contentMaxi = $content; $fileName = 'data/' . $this->page . '/' . $this->format . '-maxi-images/' . $this->fileCode . '.' . $this->format; if(file_exists($fileName) && empty($content)) { $this->delete(); } elseif(!empty($content)) { $file = fopen($fileName, 'w'); // w pour créer ou écraser fputs($file, $contentMaxi); fclose($file); chmod($fileName, 0666); } // html version petites images $content = self::makeHtmlMiniImages($content); } // json ou html version petites images $fileName = 'data/' . $this->page . '/' . $this->format . '/' . $this->fileCode . '.' . $this->format; if(file_exists($fileName) && empty($content)) { $this->delete(); } elseif(!empty($content)) { $file = fopen($fileName, 'w'); // w pour créer ou écraser fputs($file, $content); fclose($file); chmod($fileName, 0666); } } // delete public function delete() { unlink('data/' . $this->page . '/' . $this->format . '/' . $this->fileCode . '.' . $this->format); } }