<?php 
/**
 * Ce script permet de déclarer la classe or_aff.
 * 
 * @package openresultat
 * @version SVN : $Id$
 */

/**
 * Inclusion d'une librairie permettant de gérer les problématiques d'encodage.
 * Les fichiers générés depuis la version 1.00 de l'applicatif peuvent avoir 
 * été généré dans divers encodage. Cette librairie permet de palier à cette 
 * problématique en passant les contenus de fichiers générés par cette
 * librairie.
 */
require "encoding.class.php";

/**
 * Class or_aff
 */
class or_aff {

    /**
     *
     */
    var $election = NULL;

    /**
     *
     */
    var $infos = array();

    /**
     *
     */
    var $params = array();

    /**
     *
     */
    var $jscript = "";

    /**
     *
     */
    var $colors = array();

    /**
     *
     */
    function __construct($election = NULL, $identifier = NULL) {
        //
        if ($election == NULL || !is_dir(AFF_RESULTS_PATH.$election)) {
            die("Cette élection n'existe pas.");
        }
        //
        $this->election = $election;
        //
        define("AFF_ELECTION_RESULTS_PATH", AFF_RESULTS_PATH.$election."/");
        define("AFF_ELECTION_RESULTS_URL", AFF_RESULTS_URL.$election."/");
        //
        $this->identifier = $identifier;
        //
        $this->set_params();
        //
        $this->initialize_animation_routine();
        //
        $this->set_infos();
        //
        $this->display_html_header();
        //
        $this->display();
    }

    /**
     *
     */
    function display() {

        $affichage = $this->params["affichage"];
        $b = $_SESSION['b'];

        //
        $txt_bureau = "bureau arrivé";
        if ($this->infos["election"]["nb_bureaux_arrives"] > 1) {
            $txt_bureau = "bureaux arrivés";
        }

        //
        if ($affichage == "resultat"
            || $affichage === "resultat_liste_gauche"
            || $affichage === "resultat_sans_cumul_liste_gauche"
            || $affichage === "resultat_avec_graphique_cumul_liste_gauche") {
            //
            $subtitle = "Résultats provisoires";
            $subtitle .= " - ";
            $subtitle .= $this->infos["election"]["nb_bureaux_arrives"];
            $subtitle .= " ".$txt_bureau." sur ";
            $subtitle .= $this->infos["election"]["nb_bureaux_totaux"];
        } elseif ($affichage == "participation") {
            //
            $subtitle = "Participation";
        } elseif ($affichage == "regroupement") {
            //
            $subtitle = "Résultats provisoires - Regroupement";
        } elseif ($affichage == "liste_municipale") {
            //
            $subtitle = "Résultats provisoires";
            $subtitle .= " - ";
            $subtitle .= $this->infos["election"]["nb_bureaux_arrives"];
            $subtitle .= " ".$txt_bureau." sur ";
            $subtitle .= $this->infos["election"]["nb_bureaux_totaux"];
        }
        //
        $template_header = "
            <div class=\"navbar navbar-inverse navbar-fixed-top\" role=\"navigation\">
              <div class=\"container-fluid\">
                <div class=\"navbar-header\">
                  <span class=\"navbar-brand\" >%s</span>
                </div>
                <ul class=\"nav navbar-nav navbar-right\">
                  <li><span>%s</span></li>
                </ul>
              </div>
            </div>
        ";
        //
        printf(
            $template_header, 
            $this->infos["election"]["libelle"],
            $subtitle
        );




        /**
         * START CONTAINER
         */
        //
        echo "
        <div class=\"container-fluid\">
            <div class=\"row\">
        ";


        //
        if ($affichage == "resultat"
            || $affichage == "participation"
            || $affichage == "regroupement") {

            // DISPOSITION N°1 - avec liste à droite
            echo "<div class=\"col-sm-9 main\">";

        } elseif ($affichage == "liste_municipale") {

            // DISPOSITION N°2 - sans liste à droite
            echo "<div class=\"col-sm-12 main\">";

        } elseif ($affichage === "resultat_sans_cumul_liste_gauche") {

            // DISPOSITION N°3 - avec liste à gauche
            echo "<div class=\"col-sm-12 col-sm-offset-4 main\">";

        } elseif ($affichage === "resultat_liste_gauche"
            || $affichage === "resultat_avec_graphique_cumul_liste_gauche") {

            // DISPOSITION N°4 - avec liste à gauche
            echo "<div class=\"col-sm-9 col-sm-offset-3 main\">";

        }

        if ($affichage == "resultat"
            || $affichage == "participation"
            || $affichage == "regroupement"
            || $affichage == "liste_municipale") {

            //
            echo "<div class=\"row\">";
            echo "<div class=\"col-sm-7\">";
            //
            if ($affichage == "resultat") {
                //
                $this->display_resultats_commune();
            } elseif ($affichage == "participation") {
                //
                $this->display_participation_commune();
            } elseif ($affichage == "regroupement") {
                //
                $this->display_resultats_regroupement();
            } elseif ($affichage == "liste_municipale") {
                //
                $this->display_resultats_commune();
            }
            //
            echo "</div>";
            echo "<div class=\"col-sm-5 bloc-bureau\">";
            //
            if ($affichage == "resultat") {
                //
                $this->display_resultats_entite("bureau", $b);
            } elseif ($affichage == "participation") {
                //
                $this->display_participation_entite("bureau", $b);
            } elseif ($affichage == "regroupement") {
                //
                $this->display_resultats_entite("commune", $b);
            } elseif ($affichage == "liste_municipale") {
                //
                $this->display_repartition_sieges();
            }
        } elseif ($affichage === "resultat_sans_cumul_liste_gauche") {

            // DISPOSITION N°3 - Seulement le résultat du bureau à droite
            echo "<div class=\"row\">";
            echo "<div class=\"col-sm-8 bloc-bureau-8\">";
            $this->display_resultats_entite("bureau", $b);

        } elseif ($affichage === "resultat_liste_gauche"
            || $affichage === "resultat_avec_graphique_cumul_liste_gauche") {

            // DISPOSITION N°4 - Résultat du bureau et cumul à droite
            echo "<div class=\"row\">";
            echo "<div class=\"col-sm-5 bloc-bureau-centre\">";
            $this->display_resultats_entite("bureau", $b);
            echo "</div>";
            //
            echo "<div class=\"col-sm-7\">";

            //
            $graph = false;
            if ($affichage === "resultat_avec_graphique_cumul_liste_gauche") {
                //
                $graph = true;
            }

            //
            $this->display_resultats_commune($graph);

        }
        //
        echo "</div>";
        //
        echo "</div>";
        //
        echo "</div>";



        /*
         * Affichage de la sidebar
         */
        if ($affichage == "resultat"
            || $affichage == "participation"
            || $affichage == "regroupement") {

            // DISPOSITION N°1 - avec liste à droite
            echo "<div class=\"col-sm-3 sidebar\">";
            if ($affichage == "resultat") {
                //
                $this->display_liste_entite("bureau");
            } elseif($affichage == "participation") {
                //
                $this->display_liste_entite("bureau", "participation");
            } elseif($affichage == "regroupement") {
                //
                $this->display_liste_entite("commune");
            }
            echo "</div>";

        } elseif ($affichage == "liste_municipale") {

            // DISPOSITION N°2 - sans liste à droite
            echo "";

        } elseif ($affichage === "resultat_sans_cumul_liste_gauche") {

            // DISPOSITION N°3 - liste des bureaux à gauche de taille 4 colonnes
            echo "<div class=\"col-sm-4 sidebar-left\">";
            $this->display_liste_entite("bureau");
            echo "</div>";

        } elseif ($affichage === "resultat_liste_gauche"
            || $affichage === "resultat_avec_graphique_cumul_liste_gauche") {

            // DISPOSITION N°4 - liste des bureaux à gauche de taille 3 colonnes
            echo "<div class=\"col-sm-3 sidebar-left\">";
            $this->display_liste_entite("bureau");
            echo "</div>";
        }

        // END CONTAINER
        echo "
            </div>
        </div>
        ";

    }

    /**
     *
     */
    function initialize_animation_routine() {
        //
        include("../dyn/session.inc");

        // Initialisation de la variable click pour la fonctionnalité bureau arrive clickable
        if (!isset($_SESSION['click'])) {
            //
            $_SESSION['click'] = 0;
        }

        //
        if (!isset($_SESSION['b'])) {
            //
            $_SESSION['b'] = 0;
        }

        // Bureau arrivé clickable   
        if (isset($_GET['click']) and isset($_GET['b']) and $_GET['click'] != $_SESSION['click']) {
            //
            $_SESSION['click'] += 1;
            $_SESSION['b'] = $_GET['b'];
            return;
        }

        //
        $param = array(
            "participation" => array(
                "affichage" => "participation",
                "path" => "bpar",
            ),
            "resultat" => array(
                "affichage" => "resultat",
                "path" => "bres",
            ),
            "resultat_liste_gauche" => array(
                "affichage" => "resultat_liste_gauche",
                "path" => "bres",
            ),
            "resultat_avec_graphique_cumul_liste_gauche" => array(
                "affichage" => "resultat_avec_graphique_cumul_liste_gauche",
                "path" => "bres",
            ),
            "resultat_sans_cumul_liste_gauche" => array(
                "affichage" => "resultat_sans_cumul_liste_gauche",
                "path" => "bres",
            ),
            "regroupement" => array(
                "affichage" => "regroupement",
                "path" => "bcom",
            ),
        );

        // On récupère la liste des bureaux participation
        $liste_entite = array();
        // 
        if (!isset($param[$this->params["affichage"]]["path"])) {
            return;
        }
        //
        $dir = AFF_ELECTION_RESULTS_PATH.$param[$this->params["affichage"]]["path"];
        if (file_exists($dir)) {
            $dossier = opendir($dir);
            while($entree = readdir($dossier)) {
                if ($entree == "." || $entree ==".." || $entree == "CVS") {
                    continue;
                } else {
                    //
                    $elem = explode(".", $entree);
                    //
                    $toto = substr($elem[0], 1, strlen($elem[0])-1);
                    //
                    array_push($liste_entite, $toto);
                }
            }
            closedir($dossier);
            sort($liste_entite);
        }
        
        // Si la valeur de la session n'existe pas dans la liste des bureaux arrivés
        if (!in_array($_SESSION['b'], $liste_entite)) {
            // On affecte la première valeur du tableau
            $_SESSION['b'] = reset($liste_entite);
            return;
        }

        //
        $test = 0;
        while ($test == 0) {
            if ($_SESSION['b'] == current($liste_entite)) {
                $_SESSION['b'] = next($liste_entite);
                if ($_SESSION['b'] == false)
                    $_SESSION['b'] = reset($liste_entite);
                $test = 1;
            }
            next($liste_entite);
        }
    }

    /**
     *
     */
    function display_html_header() {
        // Le thème par défaut est t01
        $theme = 't01';
        if (isset($_GET['theme']) && $_GET['theme'] !== null && $_GET['theme'] !== '') {
            $theme = $_GET['theme'];
        }

        printf(
            $this->template_html_header,
            $this->params["refresh"],
            $theme
        );
    }

    /**
     *
     */
    function display_html_footer() {
        // Le thème par défaut est t01
        $theme = 't01';
        if (isset($_GET['theme']) && $_GET['theme'] !== null && $_GET['theme'] !== '') {
            $theme = $_GET['theme'];
        }

        printf(
            $this->template_html_footer,
            $theme,
            $this->jscript
        );
    }

    /**
     *
     */
    function __destruct() {
        //
        $this->display_html_footer();
    }

    /**
     * RESULTATS / COMMUNE
     */
    function display_resultats_commune($graph=false) {

        $percentage_votants = '0,00%';
        $inscritsbureauxarrives = '';
        if (isset($this->infos["election"]["inscritsbureauxarrives"]) 
            && $this->infos["election"]["inscritsbureauxarrives"] !== null
            && $this->infos["election"]["inscritsbureauxarrives"] !== ''
            && $this->infos["election"]["inscritsbureauxarrives"] !== '0') {
            //
            $inscritsbureauxarrives = $this->infos["election"]["inscritsbureauxarrives"];
            $percentage_votants = str_replace(".", ",", number_format(round ($this->infos["election"]["votants"] * 100 / $inscritsbureauxarrives, 2),2))."%";
        }

        //
        echo "<div class=\"box panel panel-primary resultats resultats-sur-commune candidats-".count($this->infos["resultats_commune"])."\">";

        // Titre de la colonne
        echo "<div class=\"panel-heading\">";
        echo "RÉSULTATS GLOBAUX";
        echo "</div>";

        //
        echo "<div class=\"panel-body\">";
        echo "Total inscrits : ".$this->infos["election"]["inscrits"]."<br/>";
        echo "<br/>";
        echo "<b>Cumul des bureaux arrivés</b><br/>";
        if ($inscritsbureauxarrives !== '') {
            echo "Inscrits : ".$inscritsbureauxarrives." / ";
        }
        echo "Votants : ".$this->infos["election"]["votants"]." ";
        if ($percentage_votants !== '') {
            echo "(" . $percentage_votants . ")";
        }
        echo "<br/>";
        echo "Blancs : ".$this->infos["election"]["blancs"]." / ";
        echo "Nuls : ".$this->infos["election"]["nuls"]." / ";
        echo "Exprimés : ".$this->infos["election"]["exprimes"]."";
        echo "</div>";
        //
        $resultats_table_body_content = "";
        //
        foreach ($this->infos["resultats_commune"] as $key => $elem) {
            //
            $photo = "";
            if (file_exists(AFF_ELECTION_RESULTS_PATH."candidat/".$elem['photo'])) {
                $photo = "<img 
                src=\"".AFF_ELECTION_RESULTS_URL."candidat/".$elem['photo']."\" 
                class=\"pull-left img-responsive photo-candidat\" 
                alt=\"-\" 
                />";
            }
            //
            $badge = "";
            if ($graph === true) {
                $badge = "
                <span class=\"badge color-chart\" style=\"background-color:#".$this->get_color($elem["ordre"])."\">&nbsp;</span>
                ";
            }
            //
            $resultats_table_body_content .= sprintf(
                $this->template_resultats_ligne,
                $photo.$badge." ".Encoding::toUTF8($elem['nom']." ".$elem['prenom']),
                $elem['voix'],
                str_replace(".", ",", number_format(floatval($elem['tx']),2))."%"
            );
        }
        //
        echo sprintf(
            $this->template_resultats_table,
            $resultats_table_body_content
        );

        //
        if ($graph !== true) {
            //
            echo "</div>";

        } else {
            //
            echo "<div class=\"panel-body container-chart text-center\">";
            echo "<canvas id=\"myChartComm\"></canvas>";
            echo "</div>";
            //
            echo "</div>";
            //
            $graph_script = "<script type=\"text/javascript\">";
            $graph_script .= "var data = [";
            foreach ($this->infos["resultats_commune"] as $key => $elem) {
                $graph_script .= "{value:".$elem['voix'].", color:\"#".$this->get_color($elem["ordre"])."\"},";
            }
            $graph_script .= "];\n";
            $graph_script .= "var options = {animation : false};\n";
            $graph_script .= "var ctx = document.getElementById(\"myChartComm\").getContext(\"2d\");\n";
            $graph_script .= "new Chart(ctx).Pie(data,options);\n";
            $graph_script .= "</script>";
            $this->jscript .= $graph_script;
        }
    }

    /**
     * RESULTATS / REGROUPEMENT
     */
    function display_resultats_regroupement() {
        //
        echo "<div class=\"box panel resultats resultats-sur-regroupement candidats-".count($this->infos["resultats_regroupement"])."\">";
        //
        $resultats_table_body_content = "";
        //
        foreach ($this->infos["resultats_regroupement"] as $key => $elem) {
            //
            $photo = "";
            if (file_exists(AFF_ELECTION_RESULTS_PATH."candidat/".$elem['photo'])) {
                $photo = "<img 
                src=\"".AFF_ELECTION_RESULTS_URL."candidat/".$elem['photo']."\" 
                class=\"pull-left img-responsive photo-candidat\" 
                alt=\"-\" 
                />";
            }
            //
            $resultats_table_body_content .= sprintf(
                $this->template_resultats_ligne,
                $photo." ".Encoding::toUTF8($elem['nom']." ".$elem['prenom']),
                $elem['voix'],
                str_replace(".", ",", number_format(floatval($elem['tx']),2))."%"
            );
        }
        //
        echo sprintf(
            $this->template_resultats_table,
            $resultats_table_body_content
        );
        //
        echo "</div>";
    }

    /**
     * RESULTATS / ENTITE (bureau ou commune)
     */
    function display_resultats_entite($entite_type = "bureau", $entite_id = NULL) {

        /**
         *
         */
        //
        if (!isset($this->infos["resultats_par_".$entite_type][$entite_id])) {
            return;
        }
        //
        $entite_infos = $this->infos["resultats_par_".$entite_type][$entite_id];
        $percentage_votants = str_replace(".", ",", number_format(round ($entite_infos["votants"] * 100 / $entite_infos["inscrits"], 2),2))."%";

        /**
         *
         */
        //
        echo "<div class=\"box panel panel-primary resultats candidats-".count($entite_infos["resultats"])."\">";
        //
        echo "<div class=\"panel-heading\">";
        echo $entite_infos["libelle"];
        echo "</div>";
        //
        echo "<div class=\"panel-body\">";
        echo "Inscrits : ".$entite_infos["inscrits"]." / ";
        echo "Votants : ".$entite_infos["votants"]." ";
        echo "(" . $percentage_votants . ")<br/>";
        echo "Blancs : ".$entite_infos["blancs"]." / ";
        echo "Nuls : ".$entite_infos["nuls"]." / ";
        echo "Exprimés : ".$entite_infos["exprimes"]."";
        echo "</div>";
        //
        $resultats_table_body_content = "";
        //
        foreach ($entite_infos["resultats"] as $key => $elem) {
            //
            $badge = "
            <span class=\"badge color-chart\" style=\"background-color:#".$this->get_color($elem["ordre"])."\">&nbsp;</span>
            ";
            //
            $resultats_table_body_content .= sprintf(
                $this->template_resultats_ligne,
                $badge." ".Encoding::toUTF8($elem['nom']." ".$elem['prenom']),
                $elem['voix'],
                str_replace(".", ",", number_format(floatval($elem['tx']),2))."%"
            );
        }
        //
        echo sprintf(
            $this->template_resultats_table,
            $resultats_table_body_content
        );
        //
        echo "<div class=\"panel-body container-chart text-center\">";
        echo "<canvas id=\"myChart\"></canvas>";
        echo "</div>";
        //
        echo "</div>";
        //
        $graph_script = "<script type=\"text/javascript\">";
        $graph_script .= "var data = [";
        foreach ($entite_infos["resultats"] as $key => $elem) {
            $graph_script .= "{value:".$elem['voix'].", color:\"#".$this->get_color($elem["ordre"])."\"},";
        }
        $graph_script .= "];\n";
        $graph_script .= "var options = {animation : true};\n";
        $graph_script .= "var ctx = document.getElementById(\"myChart\").getContext(\"2d\");\n";
        $graph_script .= "new Chart(ctx).Pie(data,options);\n";
        $graph_script .= "</script>";
        $this->jscript .= $graph_script;
    }


    /**
     * PARTICIPATION / COMMUNE
     */
    function display_participation_commune() {
        //
        echo "<div class=\"panel box participation participation-sur-commune\">";
        //
        echo "<div class=\"panel-body\">";
        echo "Inscrits : ".$this->infos["election"]["inscrits"];
        echo "</div>";
        //
        $participation_table_body_content = "";
        //
        foreach ($this->infos["participation_commune"] as $key => $elem) {
            //
            $participation_table_body_content .= sprintf(
                $this->template_participation_ligne,
                $elem['heure'],
                $elem['votants'],
                str_replace(".", ",", number_format(floatval($elem['tx']),2))."%"
            );
        }
        //
        echo sprintf(
            $this->template_participation_table,
            $participation_table_body_content
        );
        //
        echo "</div>";
    }

    /**
     * PARTICIPATION / ENTITE (bureau)
     */
    function display_participation_entite($entite_type = "bureau", $entite_id = NULL) {

        /**
         *
         */
        //
        if (!isset($this->infos["participation_par_".$entite_type][$entite_id])) {
            return;
        }
        //
        $entite_infos = $this->infos["participation_par_".$entite_type][$entite_id];

        /**
         *
         */
        //
        echo "<div class=\"box panel panel-primary participation\">";
        //
        echo "<div class=\"panel-heading\">";
        echo $entite_infos["libelle"];
        echo "</div>";
        //
        echo "<div class=\"panel-body\">";
        echo "Inscrits : ".$entite_infos["inscrits"];
        echo "</div>";
        //
        $participation_table_body_content = "";
        foreach ($entite_infos["participation"] as $key => $elem) {
            $participation_table_body_content .= sprintf(
                $this->template_participation_ligne,
                $elem['heure'],
                $elem['votants'],
                str_replace(".", ",", number_format(floatval($elem['tx']),2))."%"
            );
        }
        echo sprintf(
            $this->template_participation_table,
            $participation_table_body_content
        );
        //
        echo "<div class=\"panel-body container-chart text-center\">";
        echo "<canvas id=\"myChart\"></canvas>";
        echo "</div>";
        //
        echo "</div>";

        /**
         *
         */
        //
        $taux = 0;
        if (isset($elem['tx'])) {
            $taux = number_format(floatval($elem['tx']),2);
        }
        //
        $graph_script = "<script type=\"text/javascript\">";
        $graph_script .= "var data = [";
        $graph_script .= "{value:".$taux.", color:\"#0000ff\"},";
        $graph_script .= "{value:".(100-$taux).", color:\"#cdcdcd\"},";
        $graph_script .= "];\n";
        $graph_script .= "var options = {animation : true};\n";
        $graph_script .= "var ctx = document.getElementById(\"myChart\").getContext(\"2d\");\n";
        $graph_script .= "new Chart(ctx).Pie(data,options);\n";
        $graph_script .= "</script>";
        $this->jscript .= $graph_script;

    }

    /**
     * LISTE ENTITE (bureau ou commune)
     */
    function display_liste_entite($entite_type = "bureau", $contexte = "resultat") {
        //
        if ($entite_type == "bureau" && !isset($this->infos["bureaux"])
            || $entite_type == "commune" && !isset($this->infos["communes"])) {
            return;
        }

        // Si un thème spécifique est utilisé
        $theme = '';
        if (isset($_GET['theme']) === true) {
            //
            $theme = '&amp;theme='.$_GET['theme'];
        }

        //
        if ($entite_type == "bureau") {
            $entite_liste = $this->infos["bureaux"];
            $entite_titre = "Bureaux de vote";
        } elseif ($entite_type == "commune") {
            $entite_liste = $this->infos["communes"];
            $entite_titre = "Communes";
        }
        //
        $limite_basse = (intval(count($entite_liste) / 10) * 10);
        $limite_haute = $limite_basse + 9;
        //
        echo "<ul class=\"nav nav-sidebar entite-".count($entite_liste)." entite-entre-".$limite_basse."-".$limite_haute."\">";
        echo "<li class=\"nav-header\">";
        echo $entite_titre;
        echo "</li>";
        //
        $first = true;
        //
        foreach ($entite_liste as $elem) {
            //
            echo "<li";
            echo " class=\"";
            //
            if ($first == true) {
                echo " first";
                $first = false;
            }
            //
            if ($contexte == "resultat") {
                if ($elem['etat'] == '1') {
                    echo " arrived";
                } else {
                    echo " wait";
                }
            }
            //
            if ($elem['code'] == $_SESSION['b']) {
                echo " active";
            }
            echo "\"";
            echo ">";
            //
            if ($contexte == "resultat" && $elem['etat'] == '1' || $contexte == "participation") {
                // Template du lien
                $template_link = "<a href=\"?identifier=%s&amp;b=%s&amp;idx=%s&amp;click=%s%s\">";
                // Affichage du lien
                printf(
                    $template_link,
                    $this->identifier,
                    $elem['code'],
                    $this->election,
                    ($_SESSION['click'] + 1),
                    $theme
                );
            }
            //
            if ($contexte == "resultat" && $elem['etat'] == '1') {
                //
                echo "<span class=\"glyphicon glyphicon-ok\"><!-- --></span> ";
            } elseif ($contexte == "resultat" && $elem['etat'] == '0') {
                //
                echo "<span class=\"glyphicon glyphicon-time\"><!-- --></span> ";
            } else {
                //
                echo "<span class=\"glyphicon glyphicon-chevron-right\"><!-- --></span> ";
            }
            //
            echo Encoding::toUTF8($elem['lib']);
            //
            if ($contexte == "resultat" && $elem['etat'] == '1' || $contexte == "participation") {
                echo "</a>";
            }
            //
            echo "</li>";
        }
        //
        echo "</ul>";
    }

    /**
     *
     */
    function display_repartition_sieges() {
        //
        $nb_liste_sieges_cm = count($this->infos["sieges"]["sieges_cm"]);
        if ($nb_liste_sieges_cm > 0) {
            //
            echo "<div id='repartition_sieges_cm' class=\"panel panel-primary\">";
            //
            echo "<div class=\"panel-heading\">";
            echo "Conseil Municipal";
            echo "</div>";
            //
            echo "<table class='table table-condensed'>";
            //
            for ($k = 0; $k < $nb_liste_sieges_cm; $k++) {
                //
                $liste_id = $this->infos["sieges"]["listes"][$k];
                //
                echo "<tr>";
                //
                echo "<td>";
                echo "Liste no ".$liste_id;
                echo "</td>";
                //
                echo "<td align='right'";
                echo " style='background-color:#".$this->get_color($liste_id)."'";
                echo " class='liste_lm2'>";
                echo $this->infos["sieges"]["sieges_cm"][$k]." siège(s)";
                echo "</td>";
                //
                echo "</tr>";
            }
            //
            echo "</table>";
            //
            echo "<div class=\"panel-body container-chart text-center\">";
            echo "<canvas id=\"myChart_cm\"></canvas>";
            echo "</div>";
            //
            echo "</div>";
            //
            $graph_script = "<script type=\"text/javascript\">";
            $graph_script .= "var data = [";
            for ($k = 0; $k < $nb_liste_sieges_cm; $k++) {
                $liste_id = $this->infos["sieges"]["listes"][$k];
                $graph_script .= "{value:".$this->infos["sieges"]["sieges_cm"][$k].", color:\"#".$this->get_color($liste_id)."\"},";
            }
            $graph_script .= "];\n";
            $graph_script .= "var options = {animation : true};\n";
            $graph_script .= "var ctx = document.getElementById(\"myChart_cm\").getContext(\"2d\");\n";
            $graph_script .= "new Chart(ctx).Doughnut(data,options);\n";
            $graph_script .= "</script>";
            $this->jscript .= $graph_script;
        }
        //
        $nb_liste_sieges_cc = count($this->infos["sieges"]["sieges_cc"]);
        if ($nb_liste_sieges_cc > 0) {
            //
            echo "<div id='repartition_sieges_cc' class=\"panel panel-primary\">";
            echo "<div class=\"panel-heading\">";
            echo "Conseil Communautaire";
            echo "</div>";
            //
            echo "<table class='table table-condensed'>";
            //
            for ($k = 0; $k < $nb_liste_sieges_cc; $k++) {
                //
                $liste_id = $this->infos["sieges"]["listes"][$k];
                //
                echo "<tr>";
                echo "<td>";
                echo "Liste  no ".$liste_id."</td>";
                echo "<td align='right'";
                echo " style='background-color:#".$this->get_color($liste_id)."'";
                echo " class='liste_lm2'>".$this->infos["sieges"]["sieges_cc"][$k]." siège(s)";
                echo "</td>";
                echo "</tr>";
            }
            //
            echo "</table>";
            //
            echo "<div class=\"panel-body container-chart text-center\">";
            echo "<canvas id=\"myChart_cc\"></canvas>";
            echo "</div>";
            //
            echo "</div>";
            //
            $graph_script = "<script type=\"text/javascript\">";
            $graph_script .= "var data = [";
            for ($k = 0; $k < $nb_liste_sieges_cm; $k++) {
                $liste_id = $this->infos["sieges"]["listes"][$k];
                $graph_script .= "{value:".$this->infos["sieges"]["sieges_cc"][$k].", color:\"#".$this->get_color($liste_id)."\"},";
            }
            $graph_script .= "];\n";
            $graph_script .= "var options = {animation : true};\n";
            $graph_script .= "var ctx = document.getElementById(\"myChart_cc\").getContext(\"2d\");\n";
            $graph_script .= "new Chart(ctx).Doughnut(data,options);\n";
            $graph_script .= "</script>";
            $this->jscript .= $graph_script;
        }
    }

    /**
     *
     */
    function set_infos() {

        /**
         * election.inc
         */
        //
        $election = "";
        $bureauxarrives = "0";
        $bureauxtot = "0";
        $inscrits = "0";
        $votants = "0";
        $blancs = "0";
        $nuls = "0";
        $exprimes = "0";
        //
        if (file_exists(AFF_ELECTION_RESULTS_PATH."election.inc")) {
            //
            include AFF_ELECTION_RESULTS_PATH."election.inc";
        }
        //
        $this->infos["election"] = array(
            "libelle" => Encoding::toUTF8($election),
            "nb_bureaux_arrives" => $bureauxarrives,
            "nb_bureaux_totaux" => $bureauxtot,
            "inscrits" => $inscrits,
            "votants" => $votants,
            "blancs" => $blancs,
            "nuls" => $nuls,
            "exprimes" => $exprimes,
            "inscritsbureauxarrives" => (isset($inscritsbureauxarrives) && $inscritsbureauxarrives !== null ? $inscritsbureauxarrives : ""),
        );

        /**
         * Résultats par candidat pour la commune
         * resultats.inc
         */
        //
        $candidats = array();
        //
        if (file_exists(AFF_ELECTION_RESULTS_PATH."resultats.inc")) {
            //
            include AFF_ELECTION_RESULTS_PATH."resultats.inc";
        }
        //
        $this->infos["resultats_commune"] = $candidats;
        //
        $results_candidats = array();
        foreach ($this->infos["resultats_commune"] as $key => $value) {
            $value["ordre"] = $key;
            $results_candidats[str_pad($value["voix"], 10, "0", STR_PAD_LEFT)."-".$key] = $value;
        }
        if ($this->get_tri() == true) {
            krsort($results_candidats);
        }
        $this->infos["resultats_commune"] = $results_candidats;

        /**
         * Participation par heure pour la commune
         * participations.inc
         */
        //
        $participations = array();
        //
        if (file_exists(AFF_ELECTION_RESULTS_PATH."participations.inc")) {
            //
            include AFF_ELECTION_RESULTS_PATH."participations.inc";
        }
        //
        $this->infos["participation_commune"] = $participations;

        /**
         * Liste des bureaux de vote de la commune
         * bureaux.inc
         */
        //
        $bureau = array();
        //
        if (file_exists(AFF_ELECTION_RESULTS_PATH."bureaux.inc")) {
            //
            include AFF_ELECTION_RESULTS_PATH."bureaux.inc";
        }
        //
        $this->infos["bureaux"] = $bureau;

        /**
         * Résultats par bureau de vote de la commune
         * bres/b*.inc
         */
        //
        foreach ($this->infos["bureaux"] as $elem) {
            //
            if (file_exists(AFF_ELECTION_RESULTS_PATH."bres/b".$elem["code"].".inc")) {
                //
                $bureau_libelle = "";
                $inscrit = "0";
                $votant = "0";
                $exprime = "0";
                $blanc = "0";
                $nul = "0";
                $candidat = array();
                //
                include AFF_ELECTION_RESULTS_PATH."bres/b".$elem["code"].".inc";
                //
                $results_candidats = array();
                foreach ($candidat as $key => $value) {
                    $value["ordre"] = $key;
                    $results_candidats[str_pad($value["voix"], 10, "0", STR_PAD_LEFT)."-".$key] = $value;
                }
                if ($this->get_tri() == true) {
                    krsort($results_candidats);
                }
                //
                $this->infos["resultats_par_bureau"][$elem["code"]] = array(
                    "libelle" => Encoding::toUTF8($bureau_libelle),
                    "inscrits" => $inscrit,
                    "votants" => $votant,
                    "blancs" => $blanc,
                    "nuls" => $nul,
                    "exprimes" => $exprime,
                    "resultats" => $results_candidats,
                );
            }
        }

        /**
         * Participation par bureau de vote de la commune
         * bpar/b*.inc
         */
        //
        foreach ($this->infos["bureaux"] as $elem) {
            //
            if (file_exists(AFF_ELECTION_RESULTS_PATH."bpar/b".$elem["code"].".inc")) {
                //
                $bureau_libelle = "";
                $inscrit = "0";
                $votant = "0";
                $exprime = "0";
                $nul = "0";
                $participation = array();
                //
                include AFF_ELECTION_RESULTS_PATH."bpar/b".$elem["code"].".inc";
                //
                $participation_non_vide = array();
                foreach ($participation as $key => $value) {
                    if ($value["votants"] != 0) {
                        $participation_non_vide[$key] = $value;
                    }
                }
                //
                $this->infos["participation_par_bureau"][$elem["code"]] = array(
                    "libelle" => Encoding::toUTF8($bureau_libelle),
                    "inscrits" => $inscrit,
                    "votants" => $votant,
                    "blancs" => $blanc,
                    "nuls" => $nul,
                    "exprimes" => $exprime,
                    "participation" => $participation_non_vide,
                );
            }
        }

        /**
         * Liste des communes du regroupement
         * commune.inc
         */
        //
        $commune = array();
        //
        if (file_exists(AFF_ELECTION_RESULTS_PATH."commune.inc")) {
            //
            include AFF_ELECTION_RESULTS_PATH."commune.inc";
        }
        //
        $this->infos["communes"] = $commune;

        /**
         * Résultats par candidat pour le regroupement
         * regroupements.inc
         */
        //
        $candidats = array();
        //
        if (file_exists(AFF_ELECTION_RESULTS_PATH."regroupements.inc")) {
            //
            include AFF_ELECTION_RESULTS_PATH."regroupements.inc";
        }
        //
        $this->infos["resultats_regroupement"] = $candidats;
        //
        $results_candidats = array();
        foreach ($this->infos["resultats_regroupement"] as $key => $value) {
            $value["ordre"] = $key;
            $results_candidats[str_pad($value["voix"], 10, "0", STR_PAD_LEFT)."-".$key] = $value;
        }
        if ($this->get_tri() == true) {
            krsort($results_candidats);
        }
        $this->infos["resultats_regroupement"] = $results_candidats;

        /**
         * Résultats par commune du regroupement
         * bcom/b*.inc
         */
        //
        foreach ($this->infos["communes"] as $elem) {
            //
            if (file_exists(AFF_ELECTION_RESULTS_PATH."bcom/b".$elem["code"].".inc")) {
                //
                $commune_libelle = "";
                $inscrit = "0";
                $votant = "0";
                $exprime = "0";
                $blanc = "0";
                $nul = "0";
                $candidat = array();
                //
                include AFF_ELECTION_RESULTS_PATH."bcom/b".$elem["code"].".inc";
                //
                $results_candidats = array();
                foreach ($candidat as $key => $value) {
                    $value["ordre"] = $key;
                    $results_candidats[str_pad($value["voix"], 10, "0", STR_PAD_LEFT)."-".$key] = $value;
                }
                if ($this->get_tri() == true) {
                    krsort($results_candidats);
                }
                //
                $this->infos["resultats_par_commune"][$elem["code"]] = array(
                    "libelle" => Encoding::toUTF8($commune_libelle),
                    "inscrits" => $inscrit,
                    "votants" => $votant,
                    "blancs" => $blanc,
                    "nuls" => $nul,
                    "exprimes" => $exprime,
                    "resultats" => $results_candidats,
                );
            }
        }

        /**
         * Sieges de conseillers municipaux et de conseillers communautaires
         * sieges_lm.inc
         */
        //
        $siege_lm = array();
        $siege_lc = array();
        $noliste_lm = array();
        //
        if (file_exists(AFF_ELECTION_RESULTS_PATH."sieges_lm.inc")) {
            //
            include AFF_ELECTION_RESULTS_PATH."sieges_lm.inc";
        }
        //
        $this->infos["sieges"] = array(
            "listes" => $noliste_lm,
            "sieges_cm" => $siege_lm,
            "sieges_cc" => $siege_lc,
        );

    }

    /**
     *
     */
    function set_params() {
        //
        switch ($this->identifier) {
            case 0 : $param = "param.inc"; break;
            case 1 : $param = "param1.inc"; break;
            case 2 : $param = "param-global.inc"; break;
            default : $param = "param".$this->identifier.".inc"; break;
        }
        //
        $affichage = "participation";
        $refresh = 60;
        //
        if (file_exists(AFF_ELECTION_RESULTS_PATH.$param)) {
            //
            include AFF_ELECTION_RESULTS_PATH.$param;
        }
        //
        $this->params = array(
            "affichage" => $affichage,
            "refresh" => $refresh,
        );
    }

    /**
     *
     */
    function set_colors() {
        //
        $this->colors = array(
            "BBD597","A5946b","6FBA84","88F1C6","A5A93F","BB8697","3D7EB7",
            "6F6584","EF941B","C35D08","84BC40","07DCDA","8BCD85","688EE4",
            "57234C","DD3360","64A5E3","DFFB81","CCBD92","A5003F","00A0E6",
            "09A93F","DF0997","6FBA09","09A0E6","A5093F","A50009","0009E6",
            "A0A93F","A00997","A0BA09","A0A0E6"
        );
    }

    /**
     *
     */
    function get_color($id = 0) {
        //
        if ($this->colors == NULL) {
            $this->set_colors();
        }
        //
        if (isset($this->colors[$id])) {
            return $this->colors[$id];
        } else{
            return "cdcdcd";
        }
    }

    /**
     *
     */
    function get_tri() {
        return false;
    }

    /**
     *
     */
    var $template_html_header = '<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="refresh" content="%1$s">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>R&eacute;sultats &eacute;lectoraux</title>
    <link href="themes/%2$s/css/bootstrap.min.css" rel="stylesheet">
    <link href="themes/%2$s/css/style.css" rel="stylesheet">
  </head>
  <body>';

    /**
     *
     */
    var $template_html_footer = '
    <!-- JavaScript -->
    <script src="themes/%1$s/js/jquery.min.js"></script>
    <script src="themes/%1$s/js/bootstrap.min.js"></script>
    <script src="themes/%1$s/js/Chart.min.js"></script>
    <script src="themes/%1$s/js/script.js"></script>
    %2$s
  </body>
</html>';

    /**
     *
     */
    var $template_resultats_table = '
<table class="table table-bordered table-condensed table-striped resultats-resultats">
  <thead>
    <tr class="resultat_titre">
      <th>Candidat / Liste</th>
      <th class="text-center">Voix</th>
      <th class="text-center">%%</th>
    </tr>
  </thead>
  <tbody>%s
  </tbody>
</table>';

    /**
     *
     */
    var $template_resultats_ligne = '
<tr class="resultats_ligne">
  <td class="resultats_candidat">%s</td>
  <td class="resultats_voix text-right">%s</td>
  <td class="resultats_tx text-right">%s</td>
</tr>';

    /**
     *
     */
    var $template_participation_table = '
<table class="table table-bordered table-condensed table-striped">
  <thead>
    <tr class="participation_titre">
      <th>Heure</th>
      <th class="text-center">Votants</th>
      <th class="text-center">%%</th>
    </tr>
  </thead>
  <tbody>%s
  </tbody>
</table>';

    /**
     *
     */
    var $template_participation_ligne = '
<tr class="participations_ligne">
  <td class="participations_candidat">%s</td>
  <td class="participations_voix text-right">%s</td>
  <td class="participations_tx text-right">%s</td>
</tr>';

}

?>
