<?php
/**
 * Ce script définit la classe 'emplacement_archive'.
 *
 * @package opencimetiere
 * @version SVN : $Id$
 */

require_once "../gen/obj/genealogie_archive.class.php";

/**
 * Définition de la classe 'genealogie_archive' (om_dbform).
 */
class genealogie_archive extends genealogie_archive_gen {

    /**
     * Définition des actions disponibles sur la classe.
     *
     * @return void
     */
    function init_class_actions() {
        parent::init_class_actions();
        // ACTION - 001 - modifier
        // -> modification impossible
        unset($this->class_actions[1]);
        // ACTION - 002 - supprimer
        // -> suppression impossible
        unset($this->class_actions[2]);
        // ACTION - 003 - consulter
        // Ajout de la vérification de collectivité
        $this->class_actions[3]['condition'][] = "is_user_from_allowed_collectivite";
    }

    /**
     * Retourne la collectivité de la généalogie archivée.
     * 
     * Surcharge de la méthode parent pour récupérer la collectivité
     * via une jointure SQL avec l'emplacement archivé.
     *
     * @return int|null L'identifiant de la collectivité ou null
     */
    function get_collectivite() {
        // Si la généalogie archivée n'existe pas, on retourne null
        if ($this->exists() !== true) {
            return null;
        }
        
        // Récupération de la collectivité via jointure avec emplacement_archive
        $sql = sprintf(
            "SELECT emplacement_archive.om_collectivite
            FROM %sgenealogie_archive
            INNER JOIN %semplacement_archive ON genealogie_archive.emplacement = emplacement_archive.emplacement
            WHERE genealogie_archive.genealogie = %s",
            DB_PREFIXE,
            DB_PREFIXE,
            intval($this->getVal($this->clePrimaire))
        );
        
        $res = $this->f->db->getOne($sql);
        $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
        
        if ($this->f->isDatabaseError($res, true)) {
            return null;
        }
        
        return $res;
    }

    function get_var_sql_forminc__champs() {
        return array(
            "genealogie",
            "emplacement",
            "autorisation_p1",
            "autorisation_p2",
            "defunt_p1",
            "defunt_p2",
            "personne_1",
            "lien_parente",
            "personne_2",
            "commentaire",
        );
    }

    function setType(&$form, $maj) {
        parent::setType($form, $maj);

        $form->setType('emplacement', 'hidden');
        // En consultation et suppression
        if ($maj >= 2) {
            $form->setType('personne_1', 'selectstatic');
            $form->setType('personne_2', 'selectstatic');
            // On masque les champs autorisation et defunt p1/p2
            $form->setType('autorisation_p1', 'hidden');
            $form->setType('autorisation_p2', 'hidden');
            $form->setType('defunt_p1', 'hidden');
            $form->setType('defunt_p2', 'hidden');
            $form->setType('lien_parente', 'selectstatic');

        }
    }


    function get_var_sql_forminc__sql_lien_parente_by_id() {
        return "SELECT lien_parente.lien_parente, CONCAT_WS(' -> ', lien_parente.libelle, lien_parente.lien_inverse) as libelle FROM ".DB_PREFIXE."lien_parente WHERE lien_parente = <idx>";
    }

    function get_var_sql_forminc__sql_autorisation_by_id() {
        return "
            SELECT
                autorisation_archive.autorisation, CONCAT_WS(' ', autorisation_archive.autorisation, autorisation_archive.nom, autorisation_archive.marital, autorisation_archive.prenom, 'contact') as libelle
            FROM
                ".DB_PREFIXE."autorisation_archive
            WHERE
                autorisation = <idx>";
    }

    function get_var_sql_forminc__sql_defunt_by_id() {
        return "
            SELECT
                defunt_archive.defunt, CONCAT_WS(' ', defunt_archive.defunt, defunt_archive.nom, defunt_archive.marital, defunt_archive.prenom, 'defunt') as libelle
            FROM
                ".DB_PREFIXE."defunt_archive
            WHERE
                defunt = <idx>";
    }

    function get_var_sql_forminc__sql_autorisation_p1_by_id() {
        return $this->get_var_sql_forminc__sql_autorisation_by_id();
    }

    function get_var_sql_forminc__sql_autorisation_p2_by_id() {
        return $this->get_var_sql_forminc__sql_autorisation_by_id();
    }

    function get_var_sql_forminc__sql_defunt_p1_by_id() {
        return $this->get_var_sql_forminc__sql_defunt_by_id();
    }

    function get_var_sql_forminc__sql_defunt_p2_by_id() {
        return $this->get_var_sql_forminc__sql_defunt_by_id();
    }

    function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
        parent::setSelect($form, $maj, $dnu1, $dnu2);
        // En consultation et suppression
        if ($maj >= 2) {
            // En fonction de la valeur d'autorisation_p1 et defunt_p1
            // on récupère la requête sql à lancer pour récupérer la personne
            if ($this->getVal('autorisation_p1') !== '') {
                $table = 'autorisation';
                $libelle_from_select = str_replace(
                    '<idx>',
                    $this->getVal('autorisation_p1'),
                    $this->get_var_sql_forminc__sql_autorisation_p1_by_id()
                );
            }
            if ($this->getVal('defunt_p1') !== '') {
                $table = 'defunt';
                $libelle_from_select = str_replace(
                    '<idx>',
                    $this->getVal('defunt_p1'),
                    $this->get_var_sql_forminc__sql_defunt_p1_by_id()
                );
            }
            // On lance la requête sql get_all_results qui permet
            // de récupérer l'identifiant et le libelle de la personne sélectionnée
            $resq = $this->f->get_all_results_from_db_query(
                $libelle_from_select,
                array('force_return' => false, 'origin' => __METHOD__)
            );
            // Vérifier si des résultats ont été retournés avant d'accéder à l'index 0
            if (!empty($resq['result'])) {
                // On construit le tableau et on l'ajoute
                // au champ personne_1
                $contenu=array();
                $contenu[0][]=$resq['result'][0][$table];
                $contenu[1][]=$resq['result'][0]['libelle'];
                $form->setSelect("personne_1", $contenu);
            }

            // De même pour personne_2
            if ($this->getVal('autorisation_p2') !== '') {
                $table = 'autorisation';
                $libelle_from_select = str_replace(
                    '<idx>',
                    $this->getVal('autorisation_p2'),
                    $this->get_var_sql_forminc__sql_autorisation_p2_by_id()
                );
            }
            if ($this->getVal('defunt_p2') !== '') {
                $table = 'defunt';
                $libelle_from_select = str_replace(
                    '<idx>',
                    $this->getVal('defunt_p2'),
                    $this->get_var_sql_forminc__sql_defunt_p2_by_id()
                );
            }
            $resq = $this->f->get_all_results_from_db_query(
                $libelle_from_select,
                array('force_return' => false, 'origin' => __METHOD__)
            );
            $contenu=array();
            $contenu[0][]=$resq['result'][0][$table];
            $contenu[1][]=$resq['result'][0]['libelle'];
            $form->setSelect("personne_2", $contenu);

            // Maintenant le lien de parente
            $table = 'lien_parente';
            $libelle_from_select = str_replace(
                '<idx>',
                $this->getVal('lien_parente'),
                $this->get_var_sql_forminc__sql_lien_parente_by_id()
            );
            $resq = $this->f->get_all_results_from_db_query(
                $libelle_from_select,
                array('force_return' => false, 'origin' => __METHOD__)
            );
            $contenu=array();
            $contenu[0][]=$resq['result'][0][$table];
            $contenu[1][]=$resq['result'][0]['libelle'];
            $form->setSelect("lien_parente", $contenu);
        }
    }

    function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
        parent::setValsousformulaire($form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire);
        //
        if ($validation==0) {
            if ($maj == 0){
                $form->setVal('genealogie', "[...]");
                $form->setVal('emplacement', $idxformulaire);
            }
        }
        // En consultation et suppression
        if ($maj>=2) {
            if ($this->getVal('autorisation_p1') !== '') {
                $form->setVal('personne_1', $this->getVal('autorisation_p1'));
            }
            if ($this->getVal('defunt_p1') !== '') {
                $form->setVal('personne_1', $this->getVal('defunt_p1'));
            }

            if ($this->getVal('autorisation_p2') !== '') {
                $form->setVal('personne_2', $this->getVal('autorisation_p2'));
            }
            if ($this->getVal('defunt_p2') !== '') {
                $form->setVal('personne_2', $this->getVal('defunt_p2'));
            }
        }
    }
}