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

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

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

    /**
     *
     * @return array
     */
    function get_var_sql_forminc__champs() {
        return array(
            "zone",
            "cimetiere",
            "zonetype",
            "zonelib",
            "geom",
            "'' as lien_sig_externe",
            "om_collectivite",
        );
    }

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

    /**
     * SETTER_FORM - setType.
     *
     * @return void
     */
    function setType(&$form, $maj) {
        parent::setType($form, $maj);
        // Gestion du champs geom
        $form->setType('geom', 'hidden');
        $form->setType('lien_sig_externe', 'hidden');
        if ($this->f->getParameter("option_localisation") == "sig_interne") {
            if ($maj == 0 || $maj == 1 || $maj == 3) {
                $form->setType('geom', 'geom');
            }
        } elseif ($this->f->getParameter("option_localisation") == "sig_externe") {
            if ($maj == 3) {
                $form->setType('lien_sig_externe', 'http_localisation_sig_externe');
            }
        }
        
        // Gestion de l'affichage du champ om_collectivite selon le niveau de l'utilisateur
        if ($_SESSION['niveau'] == 1) {
            $form->setType('om_collectivite', 'hidden');
        }

    }

    /**
     * SETTER_FORM - setSelect.
     *
     * @return void
     */
    function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
        parent::setSelect($form, $maj);
        if ($maj == 3) {
            if ($this->f->getParameter("option_localisation") == "sig_externe") {
                $contenu[0] = '<i class="ri-map-pin-2-line"></i>'.__("Lien vers le SIG externe");
                $form->setSelect("lien_sig_externe",$contenu);

            }
        }
    }

    /**
     * SETTER_FORM - setvalF.
     *
     * @return void
     */
    function setvalF($val = array()) {
        parent::setValF($val);
        
        // Force la collectivité de l'utilisateur pour les collectivités de niveau 1
        if ($_SESSION['niveau'] == 1) {
            $this->valF['om_collectivite'] = $_SESSION['collectivite'];
        }
    }

    /**
     * SETTER_FORM - setVal.
     *
     * @return void
     */
    function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
        parent::setVal($form, $maj, $validation);
        
        // Force la collectivité de l'utilisateur pour les collectivités de niveau 1 lors de l'ajout
        if ($validation == 0 && $maj == 0 && $_SESSION['niveau'] == 1) {
            $form->setVal('om_collectivite', $_SESSION['collectivite']);
        }
        
        if ($maj == 3) {
            // requête
            $url = '';
            if ($this->f->getParameter("option_localisation") == "sig_externe") {
                // Instance geocimetiere
                try {
                    $geocimetiere = $this->f->get_geocimetiere_instance(true);
                } catch(geocimetiere_exception $e) {
                        $this->addToLog(
                            __METHOD__."() échec de l'instanciation du connecteur SIG. ".
                            gettype($e).": ".$e->getMessage(), DEBUG_MODE);
                        $this->f->handle_geocimetiere_exception($e);
                }
                if (! empty($geocimetiere)) {
                    $url = $geocimetiere->redirection_web("zone");
                }
                if (! empty($url)) {
                    $url = $url.$this->getVal('zone');
                }
                $form->setVal('lien_sig_externe', $url);
            }
        }
    }

    /**
     * SETTER_FORM - setValSousFormulaire.
     *
     * @return void
     */
    function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
        parent::setValsousformulaire($form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire);
        if ($maj == 3) {
            // requêtes
            if ($this->f->getParameter("option_localisation") == "sig_externe") {
                // Instance geocimetiere
                $url = '';
                try {
                    $geocimetiere = $this->f->get_geocimetiere_instance(true);
                } catch(geocimetiere_exception $e) {
                        $this->addToLog(
                            __METHOD__."() échec de l'instanciation du connecteur SIG. ".
                            gettype($e).": ".$e->getMessage(), DEBUG_MODE);
                        $this->f->handle_geocimetiere_exception($e);
                }
                if (! empty($geocimetiere)) {
                    $url = $geocimetiere->redirection_web("zone");
                }
                if (! empty($url)) {
                    $url = $url.$this->getVal('zone');
                }
                $form->setVal('lien_sig_externe', $url);
            }
        }
    }
}
