page = $page; $this->time = time(); if($this->page == 'discographie') { $this->format = 'json'; } } // GET public function getPage() { return($this->page); } public function getNbArticles() { return($this->nbArticles); } public function getFileNames() { return($this->files); } // SET public function setFormat($format) { $this->format = $format; } // tableaux des noms des fichiers public function makeFileList() { $this->files = glob('data/' . $this->page . '/' . $this->format . '/*.' . $this->format); //$this->files = glob('*.' . $this->format); } /*public function makeFilePath() {}*/ // fonctions CRUD (create - read - update - delete) // create // read public function readAll() { $i = 0; $articles = array(); foreach ($this->files as $oneFile) { $articles[$i] = file_get_contents($oneFile); $i++; } //print_r($articles); return $articles; } // update // delete } // article créé ou ciblé pour modification/suppression class OneArticle extends AllArticles { private $fileName; // correspond à $_SESSION['nomFichier'] // GET public function getFileName() { return($this->fileName); } // SET public function setFileName($nomFichier) // modification { $this->fileName = $nomFichier; } public function findFileName($numArticle) // nouvel article { $this->fileName = $this->files[$numArticle - 1]; } // fonctions CRUD (create - read - update - delete) // create public function create($content) { $format = 'html'; // nommer les fichiers avec le timestamp pour: // - les trier par ordre chronologique // - rendre quasi impossible d'avoir deux fois le même nom (à la condition de gérer la "concurrence") $nom_fichier = 'data/' . $this->page . '/' . $format . '/' . $this->time . '.' . $format; $fichier = fopen($nom_fichier, 'w'); // w pour créer ou écraser fputs($fichier, $content); fclose($fichier); chmod($nom_fichier, 0666); } // read public function readOne() { return(file_get_contents($this->fileName)); } // pour afficher des dates /*public function getDate($fileNumber) { // le 2è paramètre exclut le suffixe .html $timestamp = basename($this->files[$fileNumber], '.html'); return getdate($timestamp); }*/ // update public function update($content) { $file = fopen($this->fileName, 'w'); // crée ou écrase fputs($file, $content); fclose($file); //chown($this->fileName, 'http'); chmod($this->fileName, 0666); } // delete public function delete() { unlink($this->fileName); } } class Album extends OneArticle { // variables //private $fileNameJSON; // même nom en .json //protected $format = 'json'; // GET // SET // fonctions CRUD // create public function createVignette($titre, $annee, $pochette) { if($pochette != '') { // enregistrer le fichier // retourner une erreur en cas d'échec de l'upload } $albumJSON = json_encode([$titre, $annee, $pochette]); $nom_fichier = 'data/' . $this->page . '/' . $this->format . '/' . $this->time . '.' . $this->format; $fichier = fopen($nom_fichier, 'w'); // w pour créer ou écraser fputs($fichier, $albumJSON); fclose($fichier); chmod($nom_fichier, 0666); } // read public function read() {} // update public function updateVignette($titre, $annee, $pochette) {} // delete public function delete() {} } // note: les pros font de l'hydration // le code du modèle est orienté objet et "refactorisé" d'une manière précise: // on utilise un objet pour une chose (des articles, commentaires, etc), // un objet article contiendrait ainsi tout le nécessaire pour lire, écrire ou modifier un article // il y a pour ça un programme appelé "doctrine" (inclu dans symphony) qui est capable de lire une base de données et d'en écrire les objets PHP