<?php
/**
 * Ce script définit la classe 'parti_politique'.
 *
 * @package openresultat
 * @version SVN : $Id$
 */
require_once "../gen/obj/parti_politique.class.php";

/**
 * Définition de la classe 'parti_politique'.
 *
 * Cette classe gère les partis politiques, qui sont les organisations
 * auxquelles les candidats sont rattachés lors des différentes élections.
 * Elle hérite de la classe générée parti_politique_gen et ajoute
 * l'exposition des données en JSON pour permettre l'intégration avec
 * des applications tierces, ainsi que des méthodes utilitaires pour
 * la gestion des partis (ajout conditionnel, recherche par libellé).
 */
class parti_politique extends parti_politique_gen {

    /**
     * Définition des actions disponibles sur la classe.
     *
     * Ajoute les actions JSON permettant d'exposer les données des
     * circonscriptions via une API REST :
     * - json_list (997) : liste de tous les partis politiques
     * - json_data (998) : données d'un parti politique spécifique
     *
     * @return void
     */
    function init_class_actions() {
        parent::init_class_actions();
        // ACTION - 997 - json_list
        // Expose la liste des circonscriptions au format JSON
        $this->class_actions[997] = array(
            "identifier" => "json_list",
            "view" => "view_json_list",
            "permission_suffix" => "tab",
        );
        // ACTION - 998 - json_data
        // Expose les données d'une circonscription au format JSON
        $this->class_actions[998] = array(
            "identifier" => "json_data",
            "view" => "view_json_data",
            "permission_suffix" => "consulter",
        );
    }

    /**
     * SETTER FORM - setType.
     *
     * @param formulaire $form Instance formulaire.
     * @param integer $maj Identifant numérique de l'action.
     *
     * @return void
     */
    function setType(&$form, $maj) {
        parent::setType($form, $maj);
        $form->setType('couleur', 'hexa');
    }

    /**
     * Ajoute un parti politique si un parti de même libellé n'existe pas
     * déjà.
     * Renvoie un tableau contenant des informations relatives à l'ajout tel que :
     *  - id : identifiant du parti existant si trouvé ou ajouté sinon
     *  - nouvel_ajout : booleen indiquant si un parti a été ajouté ou pas
     *  - succes : booleen indiquant si le traitement à fonctionné
     *  - message : message en cas d'erreur de traitement
     *
     * @param string libelle : libellé du candidat
     * @return array
     */
    function ajouter_parti_si_non_existant($libelle) {
        // Vérification de l'existence du parti
        $traitement_infos = array(
            'id' => $this->recuperer_id_parti_via_libelle($libelle),
            'nouvel_ajout' => false,
            'succes' => true,
            'message' => ''
        );

        // Création du parti
        if (empty($traitement_infos['id'])) {
            $val = array(
                'parti_politique' => '',
                'libelle' => $libelle,
                'couleur' => '#eeeeee'
            );
            if ($this->ajouter($val) === false) {
                // Si l'ajout echoue récupère le message d'erreur
                $traitement_infos['false'] = true;
                $traitement_infos['message'] = $this->msg;
            } else {
                // Récupère l'id du dernier élement de la table parti_politique, soit
                // l'id du dernier ajouté
                $res = $this->f->get_one_result_from_db_query(
                    "SELECT CURRVAL('".DB_PREFIXE."parti_politique_seq')",
                    array('origin' => __METHOD__)
                );
                $traitement_infos['id'] = $res['result'];
                $traitement_infos['nouvel_ajout'] = true;
            }
        }

        return $traitement_infos;
    }

    /**
     * Cherche via une requête sql si un parti politique ayant le
     * libellé fourni existe, récupère son identifiant et le renvoie.
     *
     * Note : la recherche de libellé des partis n'est pas sensible à la casse
     *
     * @param string libelle : libelle du parti politique
     * @return string
     */
    function recuperer_id_parti_via_libelle($libelle) {
        $res = $this->f->get_one_result_from_db_query(
            sprintf(
                "SELECT parti_politique
                FROM %sparti_politique
                WHERE LOWER(libelle) = LOWER('%s')",
                DB_PREFIXE,
                $this->f->db->escapeSimple($libelle)
            ),
            array('origin' => __METHOD__)
        );

        return $res['result'];
    }
}
