/** * Renvoi un objet Conteneur de news * Les données sont stockées dans un fichier yaml, pour faire un peu standard... quand même... */ function lectureNewsYaml($nomFichier) { // Création du conteneur à retourner $conteneur = new ConteneurNews(); // Lecture du fichier yaml $array = Spyc::YAMLLoad($nomFichier); // on commence par le noeud racine: la liste des news foreach ($array as $noeudRacine) { // on chope la news $news = new News(); $news->setNouvelAttribut("titre", $noeudRacine["titre"]); $news->setNouvelAttribut("dateDebut", $noeudRacine["dateDebut"]); $news->setNouvelAttribut("dateFin", $noeudRacine["dateFin"]); $news->setNouvelAttribut("image", $noeudRacine["image"]); $news->setNouvelAttribut("imageInformation", $noeudRacine["imageInformation"]); $news->setNouvelAttribut("important", $noeudRacine["important"]); $news->setNouvelAttribut("resume", isset($noeudRacine["resume"]) ? $noeudRacine["resume"] : null); // on chope le formulaire à saisir, s'il existe if (isset($noeudRacine["include"])) { $news->ajouteInclude($noeudRacine["include"]); } // on chope les questions si elles existent if (isset($noeudRacine["questions"])) { $questions = $noeudRacine["questions"]; foreach ($questions as $question) { $questionReponse = new Question(); $questionReponse->setQuestion($question["q"]); $questionReponse->setReponse(isset($question["r"]) ? $question["r"] : null); $questionReponse->setReponseImage(isset($question["rimg"]) ? $question["rimg"] : null); $news->ajouteQuestionReponse($questionReponse); } } // On chope les fichiers attachés, s'ils existent if (isset($noeudRacine["fichiersAttaches"])) { $fichiers = $noeudRacine["fichiersAttaches"]; foreach ($fichiers as $fichier) { $fic = new FichierAttache(); $fic->setTitre($fichier["titre"]); $fic->setUrlFichier($fichier["url"]); $news->ajouteFichierAttache($fic); } } $conteneur->ajouteNews($news); } return $conteneur; }
/** * Renvoi un objet Conteneur de news * */ function lectureNews() { // Construction du chemin absolu du fichier $cheminAbsolu = dirname(__FILE__); $cheminAbsolu = str_replace("/archi", "", $cheminAbsolu); $cheminAbsolu = str_replace("\\archi", "", $cheminAbsolu); $nomFichier = $cheminAbsolu . "/parametres/news.ini"; // Gestion cas limite: le fichier n'a pas été trouvé if (!($fp = fopen($nomFichier, "r"))) { echo "Echec de l'ouverture du fichier " . $nomFichier; exit; } // Création du conteneur à retourner $conteneur = new ConteneurNews(); $news = null; $question = null; $fichierAttache = null; $include = null; $sectionAttributNews = false; $sectionQR = false; $sectionFichier = false; $sectionInclude = false; while (!feof($fp)) { // On récupère une ligne $ligne = trim(fgets($fp, 4096)); if (isLigneVide($ligne)) { continue; } // Section [News] if (preg_match("/^\\[News\\]/", $ligne) == 1) { $sectionQR = false; $sectionAttributNews = true; $sectionFichier = false; $sectionInclude = false; // déclaration d'une instance de Edito $news = new News(); $conteneur->ajouteNews($news); } else { if (preg_match("/^\\[Question\\]/", $ligne) == 1) { $sectionAttributNews = false; $sectionQR = true; $sectionFichier = false; $sectionInclude = false; // déclaration d'une instance de Question $question = new Question(); $news->ajouteQuestionReponse($question); } else { if (preg_match("/^\\[FichierAttache\\]/", $ligne) == 1) { $sectionAttributNews = false; $sectionQR = false; $sectionFichier = true; $sectionInclude = false; // déclaration d'une instance de fichier attaché à la news $fichierAttache = new FichierAttache(); $news->ajouteFichierAttache($fichierAttache); } else { if (preg_match("/^\\[Include\\]/", $ligne) == 1) { $sectionAttributNews = false; $sectionQR = false; $sectionFichier = false; $sectionInclude = true; } else { if (preg_match("/^\\[\\/News\\]/", $ligne) == 1) { $sectionQR = false; $sectionAttributNews = false; $sectionFichier = false; $sectionInclude = false; } else { if (preg_match("/^\\[\\/Question\\]/", $ligne) == 1) { $sectionAttributNews = true; $sectionQR = false; $sectionFichier = false; $sectionInclude = false; } else { if (preg_match("/^\\[\\/FichierAttache\\]/", $ligne) == 1) { $sectionAttributNews = true; $sectionQR = false; $sectionFichier = false; $sectionInclude = false; } else { if (preg_match("/^\\[\\/Include\\]/", $ligne) == 1) { $sectionAttributNews = true; $sectionQR = false; $sectionFichier = false; $sectionInclude = false; } else { if (!$sectionAttributNews && !$sectionQR && !$sectionFichier && !$sectionInclude) { continue; } // on est dans une section attribut // que je vais décrotiquer et setter dns les différents objets $relation = explode(" = ", $ligne); if (count($relation) == 2) { $nomAttribut = trim($relation[0]); $valeurAttribut = trim($relation[1]); if ($sectionAttributNews) { $news->setNouvelAttribut($nomAttribut, $valeurAttribut); } else { if ($sectionQR) { if ($nomAttribut == "q") { $question->setQuestion($valeurAttribut); } else { if ($nomAttribut == "r") { $question->setReponse($valeurAttribut); } } } else { if ($sectionFichier) { if ($nomAttribut == "titre") { $fichierAttache->setTitre($valeurAttribut); } else { if ($nomAttribut == "URL") { $fichierAttache->setUrlFichier($valeurAttribut); } } } else { if ($sectionInclude) { $news->ajouteInclude($valeurAttribut); } } } } } } } } } } } } } } fclose($fp); // On ferme le fichier return $conteneur; }