<?php
/**
 * Ce fichier permet de declarer la classe txForm.
 *
 * @package openmairie
 * @link http://www.openmairie.org/
 * @version SVN : $Id$
 */

/**
 *
 */
(defined("PATH_OPENMAIRIE") ? "" : define("PATH_OPENMAIRIE", ""));
require_once PATH_OPENMAIRIE."om_debug.inc.php";
(defined("DEBUG") ? "" : define("DEBUG", PRODUCTION_MODE));
require_once PATH_OPENMAIRIE."om_message.class.php";

/**
 *
 */
require_once PATH_OPENMAIRIE."formulairedyn.class.php";

/**
 * Cette classe permet de gerer une interface entre un objet metier et sa
 * representation dans un fichier.
 * 
 * @abstract
 */
class txForm {
    
    /**
     * Type de champ
     * @var
     */
    var $type;
    
    /**
     * Longueur max de champ
     * @var
     */
    var $longueurMax;
    
    /**
     * Valeur des champs requete selection
     * @var
     */
    var $val;
    
    /**
     * Valeur des champs retournes pour saisie et maj
     * @var
     */
    var $valF;
    
    /**
     * Message retourne au formulaire de saisie
     * @var
     */
    var $msg;
    
    /**
     * Flag retourne au formulaire
     * @var
     */
    var $correct;

    /**
     * Nom de fichier
     * @var string
     */
    var $obj = "";
    
    /**
     *
     */
    function ajouter($val, &$db, $DEBUG) {
        
        //
        $this->setValF($val);
        //
        $this->verifier();
        //
        if ($this->correct) {
            // 
            if (file_exists("../dyn/var.inc")) {
                include "../dyn/var.inc";
            }
            //
            if (file_exists("../sql/".$db->phptype."/".$this->obj.".".$this->objet.".inc"))
                $fichier = "../sql/".$db->phptype."/".$this->obj.".".$this->objet.".inc";
            else
                $fichier = "../sql/".$db->phptype."/".$this->obj.".".$this->objet.".inc.php";
            
            //
            $inf = fopen($fichier, "w");
            fwrite($inf, $this->valF);
            fclose($inf);
            //
            $this->msg .= _("Le fichier est enregistre.").
            $this->msg .= " [".$fichier."] ";
        }
        
    }
    
    /**
     *
     */
    function modifier($val, &$db, $DEBUG) {
        
        //
        $this->setValF($val);
        //
        $this->verifier();
        //
        if ($this->correct) {
            // 
            if (file_exists("../dyn/var.inc")) {
                include "../dyn/var.inc";
            }
            //
            if (file_exists("../sql/".$db->phptype."/".$this->obj.".".$this->objet.".inc"))
                $fichier = "../sql/".$db->phptype."/".$this->obj.".".$this->objet.".inc";
            else
                $fichier = "../sql/".$db->phptype."/".$this->obj.".".$this->objet.".inc.php";
            
            //
            $inf = fopen($fichier, "w");
            fwrite($inf, $this->valF);
            fclose($inf);
            //
            $this->msg .= _("Le fichier est enregistre.").
            $this->msg .= " [".$fichier."] ";
        }
        
    }
    
    /**
     *
     */
    function supprimer($val, &$db, $DEBUG) {
        
        //
        
    }
    
    /**
     * Verification de saisie
     *
     * @return void
     */
    function verifier() {
        
        $this->correct = True;
        
    }
    
    /**
     * Recuperation des valeurs du formulaire
     *
     * @param array $val 
     * @return void
     */
    function setvalF($val){
        
        //
        
    }
    
    /**
     * 
     *
     * @param integer $validation 
     * @param integer $maj Mode de mise a jour
     * @param resource $db Connexion base de donnees
     * @param array $postVar
     * @param string $aff Appel formulaire
     * @param boolean $DEBUG Mode debug
     * @param string $idx Valeur de l'id de la table
     * @return
     */
    function formulaire($validation, $maj, &$db, $postVar, $aff, $DEBUG, $idx) {
        
        //
        $DEBUG = 0;
        //
        // FORM
        echo "\n<!-- ########## START TXFORM ########## -->\n";
        echo "<form";
        echo " method=\"post\"";
        echo " name=\"f1\"";
        echo " action=\"";
        //
        echo "txform.php";
        echo "?";
        echo "obj=".$aff;
        echo "&amp;validation=".$validation;
        echo "&amp;idx=".$idx;
        echo "&amp;maj=".$maj;
        if ($maj == 0) {
            
        } else {
            if ($maj == 1) { // modifier
            } else { // supprimer
                echo "&amp;ids=1";
            }
        }
        //
        echo "\"";
        echo ">\n";
        // Compatibilite anterieure
        $validation--;
        // Compatibilite txform dbform
        $enteteTab = "";
        //
        $form = new formulaire($enteteTab, $validation, $maj, $this->champs, $this->val, $this->longueurMax);
        // Valorisation des variables formulaires
        $this->setVal($form, $maj, $validation);
        $this->setType($form, $maj);
        $this->setLib($form, $maj);
        $this->setTaille($form, $maj);
        $this->setMax($form, $maj);
        $this->setSelect($form, $maj, $db, $DEBUG);
        $this->setOnchange($form, $maj);
        $this->setGroupe($form, $maj);
        $this->setRegroupe($form, $maj);
        // Affichage du formulaire
        $form->recupererPostvar($this->champs, $validation, $postVar, $DEBUG);
        // Validation
        if ($validation > 0) {
            if ($maj == 2) {
                $this->supprimer($form->val, $db, $DEBUG);
            } else {
                if ($maj == 1) {
                    $this->modifier($form->val, $db, $DEBUG);
                } else {
                    $this->ajouter($form->val, $db, $DEBUG);
                }
            }
        }
        $this->message();
        if ($this->correct) {
            $this->retour();
        }
        $form->entete();
        $form->afficher($this->champs, $validation, $DEBUG, $this->correct);
        $form->enpied();
        
        // Affichage du bouton, message et retour
        echo "<div class=\"formControls\">\n";
        $this->bouton($maj);
        $this->retour();
        echo "</div>\n";

        //
        echo "</form>";
        
    }
    
    /**
     *
     */
    function message() {
        
        if ($this->msg != "") {
            
            //
            $m = new message();
            
            //
            if ($this->correct) {
                $class = "valid";
            } else {
                $class = "error";
            }
            $m->displayMessage($class, $this->msg);
            
        }
        
    }
    
    /**
     * Cette methode permet d'afficher le lien retour a la page precedente
     * 
     * @param integer $premier Page de retour
     * @param string $recherche Critere de recherche retour
     * @return void
     */
    function retour() {
        
        echo "\n<a class=\"retour\" ";
        echo "href=\"";
        //
        echo "txtab.php";
        echo "?";
        echo "obj=".$this->objet;
        //
        echo "\"";
        echo ">";
        //
        echo _("Retour");
        //
        echo "</a>\n";
        
    }
    
    /**
     * Cette methode permet d'afficher le bouton de validation du formulaire
     * 
     * @param integer $maj Mode de mise a jour
     * @return void
     */
    function bouton($maj) {
        
        if (!$this->correct) {
            //
            if ($maj == 2) {
                $bouton = _("Supprimer");
            } else {
                if ($maj == 1) {
                    $bouton = _("Modifier");
                } else {
                    $bouton = _("Ajouter");
                }
            }
            //
            $bouton .= "&nbsp;'".ucwords(_($this->objet))."'";
            //
            echo "<button type=\"submit\">";
            echo $bouton;
            echo "</button>";
        }
        
    }

    /**
     *
     */
    function setVal(&$form, $maj, $validation) {
        
        //
        
    }
    
    /**
     *
     */
    function setType(&$form, $maj) {
        
        //
        
    }
    
    /**
     *
     */
    function setLib(&$form, $maj) {
        
        //
        
    }
    
    /**
     *
     */
    function setTaille(&$form, $maj) {
        
        //
        
    }
    
    /**
     *
     */
    function setMax(&$form, $maj) {
        
        //
        
    }
    
    /**
     *
     */
    function setSelect(&$form, $maj, $db, $DEBUG) {
        
        //
        
    }
    
    /**
     *
     */
    function setOnchange(&$form, $maj) {
        
        //
        
    }
    
    /**
     *
     */
    function setGroupe(&$form, $maj) {
        
        //
        
    }
    
    /**
     *
     */
    function setRegroupe(&$form, $maj) {
        
        //
        
    }
    
    /**
     * Traitement des tableaux
     *
     * @param array $val
     * @return string
     */
    function enarray($val) {
        
        //
        $temp = explode("\n", $val);
        //
        $retour = "array(";
        //
        for ($i = 0; $i < sizeof($temp); $i++) {
            if ($temp[$i] != "") {
                if ($i == sizeof($temp) - 1) {
                    $retour .= "\"".$temp[$i]."\")";
                } else {
                    $retour .= "\"".substr($temp[$i], 0, strlen($temp[$i]) - 1)."\",";
                }
            } else {
                $retour .= ")";
            }
        }
        //
        return $retour;
        
    }
    
    /**
     * Traitement rvb
     *
     * @param array $val
     * @return string
     */
    function enrvb($val) {
        
        //
        $temp = explode("-", $val);
        //
        $retour = "array(";
        //
        for ($i = 0; $i < sizeof($temp); $i++) {
            if ($temp[$i] != "") {
                if ($i == sizeof($temp) - 1) {
                    $retour .= "\"".$temp[$i]."\")";
                } else {
                    $retour .= "\"".$temp[$i]."\",";
                }
            } else {
                $retour .= ")";
            }
        }
        //
        return $retour;
        
    }
    
    /**
     * Cette methode permettait de realiser la traduction selon l'ancien
     * systeme.
     * 
     * @param string $texte
     * @return string
     * @deprecated
     */
    function om_lang($texte) {
        
        return _($texte);
        
    }
    
}

?>