/**
 * 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;
}