<?php
//$Id: blocnote.class.php 4685 2015-04-30 12:30:55Z nmeucci $ 
//gen openMairie le 10/02/2011 20:31 
require_once ("../gen/obj/blocnote.class.php");

class blocnote extends blocnote_gen {

    /** @var boolean Les nouvelles actions sont activées sur cet objet */
    var $activate_class_action;
    
    function blocnote($id,&$db,$debug) {
        //On active les nouvelles actions
        $this->activate_class_action = true;
        $this->constructeur($id,$db,$debug);
    }// fin constructeur
    
    /**
     * Définition des actions disponibles sur la classe.
     *
     * @return void
     */
    function init_class_actions() {
        
        parent::init_class_actions();
        
        // ACTION - 000 - ajouter
        // 
        $this->class_actions[0]["condition"] = "is_ajoutable";
        
        // ACTION - 001 - modifier
        // 
        $this->class_actions[1]["condition"] = "is_modifiable";
        
        // ACTION - 002 - supprimer
        //
        $this->class_actions[2]["condition"] = "is_supprimable";
    }
    
    // {{{ Gestion de la confidentialité des données spécifiques

    /**
     * Cette variable permet de stocker le résultat de la méthode
     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
     * ces appels.
     * @var string Code de la division du dossier en cours
     */
    var $_division_from_dossier = NULL;

    /**
     * Cette méthode permet de récupérer le code de division correspondant
     * au dossier sur lequel on se trouve.
     *
     * @return string Code de la division du dossier en cours
     */
    function getDivisionFromDossier() {

        // Cette méthode peut être appelée plusieurs fois lors d'une requête.
        // Pour éviter de refaire le traitement de recherche de la division
        // alors on vérifie si nous ne l'avons pas déjà calculé.
        if ($this->_division_from_dossier != NULL) {
            // Logger
            $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
            // On retourne la valeur déjà calculée
            return $this->_division_from_dossier;
        }

        // Par défaut, on définit la valeur du dossier à NULL
        $dossier = NULL;
        // Test sur le mode et le contexte du formulaire
        if ($this->getParameter("maj") == 0
            && ($this->getParameter("retourformulaire") == "dossier"
                || $this->getParameter("retourformulaire") == "dossier_instruction"
                || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
                || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
                || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
                || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
            // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
            // n'existe pas en base de données) ET que nous nous trouvons
            // dans le contexte d'un dossier d'instruction alors on récupère
            // le numéro de dossier depuis le paramètre 'idxformulaire'
            $dossier = $this->getParameter("idxformulaire");
        } else {
            // Sinon on récupère le numéro de dossier dans le champs dossier de
            // l'enregistrement (en base de données)
            $dossier = $this->getVal("dossier");
        }

        // On appelle la méthode de la classe utils qui renvoi le code de la
        // division d'un dossier, on la stocke pour ne pas refaire le calcul au
        // prochain appel de cette méthode
        $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
        // Logger
        $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
        // On retourne la valeur retournée
        return $this->_division_from_dossier;

    }

    // }}}

    function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
        if ($validation==0) {
            if ($maj == 0){
                $form->setVal("dossier", $idxformulaire);
            }
        }
    }

    function setLib(&$form, $maj) {
        //
        parent::setLib($form, $maj);
        //
        $form->setLib($this->clePrimaire, _("id"));
    }

    function setType(&$form, $maj) {
        //
        parent::setType($form, $maj);
        //
        if ($maj < 2) {
            $form->setType('categorie', 'select');
            $form->setType('dossier', 'hiddenstatic');
        }else{
             $form->setType('blocnote', 'hiddenstatic');
             $form->setType('destination', 'hiddenstatic');
             $form->setType('dossier', 'hiddenstatic');
        }
        
        // 
        if ($this->getParameter("retourformulaire") == "dossier"
            || $this->getParameter("retourformulaire") == "dossier_instruction"
            || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
            || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
            || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
            || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
            //
            $form->setType('dossier', 'hidden');
        }
    }



    function setSelect(&$form, $maj,$db,$debug) {
        $contenu=array();
        $contenu[0]=array(
            _('reprise'),
            _('suivi projet'),
            _('contentieux'),
            _('divers'),
            );
        $contenu[1]=array(
            _('reprise'),
            _('suivi projet'),
            _('contentieux'),
            _('divers'),
            );
        $form->setSelect("categorie",$contenu);
    }

    /**
     * CONDITION - is_ajoutable.
     *
     * Condition pour pouvoir ajouter
     *
     * @return boolean
     */
    function is_ajoutable() {
        // Test du bypass
        if ($this->f->isAccredited("blocnote_ajouter_bypass")) {
            return true;
        }
        // Test des autres conditions
        return $this->is_ajoutable_or_modifiable_or_supprimable();
    }

    /**
     * CONDITION - is_modifiable.
     *
     * Condition pour afficher le bouton modifier
     *
     * @return boolean
     */
    function is_modifiable() {
        // Test du bypass
        if ($this->f->isAccredited("blocnote_modifier_bypass")) {
            return true;
        }
        // Test des autres conditions
        return $this->is_ajoutable_or_modifiable_or_supprimable();
    }

    /**
     * CONDITION - is_supprimable.
     *
     * Condition pour afficher le bouton supprimer
     * @return boolean
     */
    function is_supprimable() {
        // Test du bypass
        if ($this->f->isAccredited("blocnote_supprimer_bypass")) {
            return true;
        }
        // Test des autres conditions
        return $this->is_ajoutable_or_modifiable_or_supprimable();
    }

    /**
     * Conditions pour afficher les boutons modifier et supprimer
     *
     * @return boolean
     */
    function is_ajoutable_or_modifiable_or_supprimable() {
        //
        $dossier = ($this->getParameter("maj")==0)?$this->getParameter("idxformulaire"):$this->getVal("dossier");
        /**
         * Tester si le dossier est cloturé , de la meme division, instructeur, admin (?)
         */
        if($this->f->isUserInstructeur()
            && isset($this->f->om_utilisateur["division"])
            && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){
            return false;
        }
        //
        if ( $this->f->isUserInstructeur() && $this->f->getStatutDossier($dossier) == "cloture" ){
            return false;
        }
        return true;
    }
}

?>
