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

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

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

    /**
     * GETTER_FORMINC - champs.
     *
     * @return array
     */
    function get_var_sql_forminc__champs() {
        return array(
            "autorisation",
            "emplacement",
            "nature",
            "titre",
            "nom",
            "marital",
            "prenom",
            "datenaissance",
            "dcd",
            "datedeces",
            "lieudeces",
            "adresse1",
            "adresse2",
            "cp",
            "ville",
            "telephone1",
            "telephone2",
            "courriel",
            "parente",
            "genealogie",
            "observation",
        );
    }

    /**
     * SETTER_FORM - setType.
     *
     * @return void
     */
    function setType(&$form, $maj) {
        //
        parent::setType($form, $maj);
        //
        $form->setType('emplacement', 'hidden');
        $form->setType('genealogie', 'hidden');

        if ($maj == 0) {
            $form->setType('nature', 'select');
        } else {
            $form->setType('nature', 'hiddenstatic');
        }
        //
        if ($maj < 2) {
            $form->setType('autorisation', 'hiddenstatic');
        }

        if ($maj == 3) {
            $form->setType('genealogie', 'static');
        }
    }

    /**
     * SETTER_FORM - setSelect.
     *
     * @return void
     */
    function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
        parent::setSelect($form, $maj);
        // MODE AJOUTER & MODE MODIFIER
        if ($maj == 0 || $maj == 1) {
            // type de contact
            $contenu = array();
            $contenu [0] = array ("", "concessionnaire", "ayantdroit", "autre");
            $contenu [1] = array (__("Choisir nature"), __("Concessionnaire"), __("Ayant-droit"), __("Autre"));
            $form->setSelect("nature", $contenu);
        }
    }

    /**
     * SETTER_FORM - setValsousformulaire (setVal).
     *
     * @return void
     */
    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('autorisation', "[...]");
                $form->setVal('emplacement', $idxformulaire);
            }
        }
        // En mode consultation on récupère les lien de parenté du contact sur lequel on est
        if ($maj == 3) {
            $form->setVal('genealogie', $this->f->generate_text_genealogie('autorisation', $this->getVal($this->clePrimaire)));
        }
    }

    /**
     * SETTER_FORM - setLib.
     *
     * @return void
     */
    function setLib(&$form, $maj) {
        parent::setLib($form, $maj);
        //
        $form->setLib($this->clePrimaire, __("id"));
        $form->setLib('nom', __("Nom de naissance"));
    }

    /**
     * SETTER_FORM - setOnchange.
     *
     * @return void
     */
    function setOnchange(&$form, $maj) {
        parent::setOnchange($form, $maj);
        // * mise en majuscule
        // On liste les champs sur lesquels on veut forcer les majuscules automatiques
        $fields_to_upper_case = array('nom', 'prenom', 'marital', 'adresse1', 'adresse2', 'ville');
        // On récupère les valeurs de l'option, si il y en a pas retourne un tableau vide
        $option_casse_force_majuscule = $this->f->get_option_casse_force_majuscule();
        // On boucle sur les champs à mettre en majuscule auto
        foreach ($fields_to_upper_case as $field) {
            // Si la clé existe dans l'option et que la valeur est true ou que la clé n'existe pas
            if (array_key_exists($this->clePrimaire.'.'.$field, $option_casse_force_majuscule)
                && $option_casse_force_majuscule[$this->clePrimaire.'.'.$field] === true
                || array_key_exists($this->clePrimaire.'.'.$field, $option_casse_force_majuscule) == false) {
                // On force la majuscule sur le champ
                $form->setOnchange($field, "this.value=this.value.toUpperCase()");
            }
        }
    }

    /**
     * SETTER_FORM - setLayout.
     *
     * @return void
     */
    function setLayout(&$form, $maj) {
        parent::setLayout($form, $maj);
        //
        $bloc_global_width_full = "span12";
        $bloc_global_width_half = "span6";

        //// CONTAINER GLOBAL - START
        $this->form->setBloc("autorisation", "D", "", "emplacement-form autorisation-form form-action-".$maj);

            // START : BLOC 1 : ID + NATURE
            $this->form->setBloc("autorisation", "D", "", "row-fluid emplacement-autorisation-metadata");
                $this->form->setBloc("emplacement", "DF", "", "emplacement-field-autorisation span6");
                $this->form->setBloc("nature", "DF", "", "emplacement-field-nature span5");
            $this->form->setBloc("nature", "F");
            // END - BLOC 1

            // START : BLOC 2 : CONTACT
            $this->form->setBloc("titre", "D", __("Contact"), "row-fluid emplacement-autorisation-contact");
                $this->form->setBloc("titre", "D", __("Informations"), "emplacement-autorisation-contact span7");
                    $this->form->setBloc("titre", "DF", "", "emplacement-field-titre span12");
                    $this->form->setBloc("nom", "DF", "", "emplacement-field-nom span12");
                    $this->form->setBloc("marital", "DF", "", "emplacement-field-marital span12");
                    $this->form->setBloc("prenom", "DF", "", "emplacement-field-prenom span12");
                    $this->form->setBloc("datenaissance", "DF", "", "emplacement-field-date-naissance span12");
                $this->form->setBloc("datenaissance", "F");
                $this->form->setBloc("dcd", "D", __("Décès"), "emplacement-autorisation-dcd span5");
                    $this->form->setBloc("dcd", "DF", "", "emplacement-field-dcd span12");
                    $this->form->setBloc("datedeces", "DF", "", "emplacement-field-datedeces span5");
                    $this->form->setBloc("lieudeces", "DF", "", "emplacement-field-lieudeces span5");
                $this->form->setBloc("lieudeces", "F");
                $this->form->setBloc("adresse1", "D", __("Coordonnées"), "emplacement-autorisation-coordonnees span12");
                    $this->form->setBloc("adresse1", "DF", "", "emplacement-field-adresse1 span12");
                    $this->form->setBloc("adresse2", "DF", "", "emplacement-field-adresse2 span12");
                    $this->form->setBloc("cp", "DF", "", "emplacement-field-cp span4");
                    $this->form->setBloc("ville", "DF", "", "emplacement-field-ville span8");
                    $this->form->setBloc("telephone1", "DF", "", "emplacement-field-telephone1 span6");
                    $this->form->setBloc("telephone2", "DF", "", "emplacement-field-telephone2 span6");
                    $this->form->setBloc("courriel", "DF", "", "emplacement-field-courriel span12");
                $this->form->setBloc("courriel", "F");
            $this->form->setBloc("courriel", "F");
            // END - BLOC 2

            // START : BLOC 3 : PARENTE + GENEALOGIE
            $this->form->setBloc("parente", "D", __("Parenté"), "row-fluid emplacement-autorisation-parente");
                $this->form->setBloc("parente", "DF", "", "emplacement-field-parente span6");
                $this->form->setBloc("genealogie", "DF", "", "emplacement-field-genealogie span6");
            $this->form->setBloc("genealogie", "F");
            // END - BLOC 3

            // START - BLOC 8 : OBSERVATIONS
            $this->form->setBloc("observation", "DF",  __("Observations"), "row-fluid no-label emplacement-autorisation-observations span12");
            // END - BLOC 8 : OBSERVATIONS

        //// CONTAINER GLOBAL - END
        $this->form->setBloc("observation", "F");


    }

    /**
     *
     * Permet de retourner une chaîne de caractère formatée avec
     * les élément de l'adresse du contact
     *
     * @return string
     */
    function get_formatted_address($args) {
        //
        $available_datas = array(
            "adresse1" => "",
            "adresse2" => "",
            "cp" => "",
            "ville" => "",
        );
        foreach ($available_datas as $key => $value) {
            if (array_key_exists($key, $args) === true
                && is_string($args[$key]) === true
                && $args[$key] !== "") {
                //
                continue;
            }
            $args[$key] = $value;
        }
        //
        $addressCleanSpaces = function ($line) {
            return trim(preg_replace('| +|', ' ', str_replace(array("\n", "\r"), ' ', $line)));
        };
        //
        if (array_key_exists("format", $args) === true
            && $args["format"] === "1_line") {
            // Adresse complète sur une seule ligne
            return $addressCleanSpaces(
                implode(' ', array(
                    $args["adresse1"],
                    $args['adresse2'],
                    $args['cp'],
                    $args['ville'],
                ))
            );
        }
        // Adresse complète sur quatre lignes
        return trim(
            implode("\n", array_filter(
                array(
                    $addressCleanSpaces($args['adresse1']),
                    $addressCleanSpaces($args['adresse2']),
                    $addressCleanSpaces(implode(' ', array(
                        $args['cp'],
                        $args['ville'],
                    ))),
                ),
                function ($line) { return !empty($line); }
            ))
        );
    }

    /**
     * MERGE_FIELDS - get_labels_merge_fields.
     *
     * @return array
     */
    function get_labels_merge_fields() {
        $labels = parent::get_labels_merge_fields();
        //
        $labels["autorisation"]["autorisation.titre"] = __("titre de civilité (libellé)");
        $labels["autorisation"]["autorisation.titre_code"] = __("titre de civilité (code)");
        $labels["autorisation"]["autorisation.titre_description"] = __("titre de civilité (description)");
        $labels["autorisation"]["autorisation.premier_prenom"] = __("Premier prénom du contact. (Ne fonctionne que si les prénoms sont séparés par des virgules)");
        $labels["autorisation"]["autorisation.nom_intelligent"] = __("Nom intelligent, permet d'afficher le nom d'usage s'il y en a un, sinon le nom de naissance.");
        $labels["autorisation"]["autorisation.adresse_complete_sur_quatre_lignes"] = __("adresse complète sur quatre lignes");
        //
        return $labels;
    }

    /**
     * MERGE_FIELDS - get_values_merge_fields.
     *
     * @return array
     */
    function get_values_merge_fields() {
        $values = parent::get_values_merge_fields();
        //
        $inst_titre = $this->f->get_inst__om_dbform(array(
            "obj" => "titre_de_civilite",
            "idx" => $this->getVal("titre"),
        ));
        $values["autorisation.titre"] = $inst_titre->getVal("libelle");
        $values["autorisation.titre_code"] = $inst_titre->getVal("code");
        $values["autorisation.titre_description"] = $inst_titre->getVal("description");
        // Récupère le premier prénom du contact
        $values["autorisation.premier_prenom"] = trim(explode(',', $values['autorisation.prenom'])[0]);
        // Affiche le nom marital ou le nom de naissance
        $values["autorisation.nom_intelligent"] = ! empty($values['autorisation.marital']) ? $values['autorisation.marital'] : $values['autorisation.nom'];
        //
        $values["autorisation.observation"] = str_replace("\n", "<br/>", $values["autorisation.observation"]);

        // Adresse complète sur quatre lignes
        $table = $this->table;
        $values[$table.'.adresse_complete_sur_quatre_lignes'] = nl2br($this->get_formatted_address(array(
            "format" => "4_lines",
            "adresse1" => $this->getVal('adresse1'),
            "adresse2" => $this->getVal('adresse2'),
            "cp" => $this->getVal('cp'),
            "ville" => $this->getVal('ville'),
        )));

        return $values;
    }
}
