table=$table; //Vérification que la requête existe if ($table=="caddie_procs" || $table=="authorities_caddie_procs") { $requete="select idproc, type, name, requete, comment, autorisations, parameters from ".$this->table." where idproc=$id_parameters"; } else { //Ca c'est parcequ'Eric est borné !! $requete="select idproc, name, requete, comment, autorisations, parameters from ".$this->table." where idproc=$id_parameters"; } $resultat=pmb_mysql_query($requete); //Si requête échoue, c'est que le numéro passé n'est pas un nombre if ($resultat==false) return 0; //Si il y a 0 résultats, c'est que l'id passé n'existe pas if (pmb_mysql_num_rows($resultat)==0) return 0; $this->proc=pmb_mysql_fetch_object($resultat); $this->id_query=$id_parameters; //Récupération des paramètres cités dans la requête if (!$this->get_query_parameters()) return 0; //Récupération des paramètres décrits if (!$this->get_parameters_description()) return 0; //Vérification de la concordance et complément automatique s'il manque certains paramètres if (!$this->check_parameters()) return 0; $this->n_parameters=count($this->query_parameters); return 1; } public function get_hidden_values() { global $charset; $ret=""; for ($i=0; $iquery_parameters); $i++) { $name=$this->query_parameters[$i]; global ${$name}; $val=${$name}; if (isset($val)) { if (is_array($val)) { for ($j=0; $j\n"; } } else { $ret.="\n"; } } } return $ret; } //Pour ceux qui ne veulent pas gérer les appels en fonction du formulaire public function proceed() { global $form_type; //Si type de formulaire vide alors retourner 0 if ($form_type=="") return 0; switch ($form_type) { //Le formulaire était le formulaire de saisie des paramètres d'une requête : // appel du constructeur de requête et retour de la valeur 1 case "gen_form": $this->get_final_query(); return 1; break; //Le formulaire étatit le formulaire de configuration des paramètres : //appel de la fonction de mise à jour des paramètres dans la table des procédures //et retour = 2 case "config_form": $this->update_config(); return 2; break; } } //Récupération des paramètres de la requête public function get_query_parameters() { $query_parameters=array(); //S'il y a des termes !!*!! dans la requête alors il y a des paramètres if (preg_match_all("|!!(.*)!!|U",$this->proc->requete,$query_parameters)) { $this->query_parameters=array(); for ($i=0; $iquery_parameters); if (!(($as!==false)&&($as!==null))) $this->query_parameters[]=$query_parameters[1][$i]; } return 1; } else { //Sinon retour faux return 0; } } //Récupération de la description XML des paramètres et transformation en tableau public function get_parameters_description() { global $parameters_description; $parameters_description=array(); //Appel du parser _parser_text_($this->proc->parameters, array("FIELD"=>"_field_"), "FIELDS"); //Récupération du tableau $this->parameters_description=$parameters_description; return 1; } //Comparaison entre les paramètres trouvés dans la requête et ceux trouvés dans le champ XML //Si besoin, création des paramètres de la requête non détaillés dans le XML public function check_parameters() { //Paramètre par défaut : texte obligatoire $default_param['MANDATORY']="yes"; $default_param['ALIAS'][0]['value']=""; $default_param['TYPE'][0]['value']="text"; //Pour chaque paramètre trouvé dans la requête for ($i=0; $iquery_parameters);$i++) { //Si le paramètre n'est pas décrit if (!isset($this->parameters_description[$this->query_parameters[$i]]) ||!$this->parameters_description[$this->query_parameters[$i]]) { //Ajout du paramètre par défaut dans le tableau de description $default_param['NAME']=$this->query_parameters[$i]; $default_param['ALIAS'][0]['value']=$this->query_parameters[$i]; $this->parameters_description[$this->query_parameters[$i]]=$default_param; } } return 1; } //Renvoi du type d'un paramètre public function get_field_type($field) { return $field['TYPE'][0]['value']; } //Renvoi de l'alias d'un paramètre (texte affiché dans le formulaire) public function get_field_alias($field) { return $field['ALIAS'][0]['value']; } //Renvoi des options d'un type de paramètre public function get_field_options($field) { return $field['OPTIONS'][0]; } public function get_content_form() { global $aff_list; $content_form = "\n"; //Affichage des champs $champ_focus="";//nom du champ où l'on va mettre le focus for ($i=0; $iquery_parameters); $i++) { $name=$this->query_parameters[$i]; $champ_type=$this->get_field_type($this->parameters_description[$name]); if(!$champ_focus && ($champ_type == "text")) $champ_focus=$name;//en priorité le premier champ texte $content_form .= pmb_bidi(""); eval("\$aff=".$aff_list[$champ_type]."(\$this->parameters_description[\$name],\$check_scripts);"); $content_form .= pmb_bidi("\n"); } $content_form .= "
".$this->get_field_alias($this->parameters_description[$name])."".$aff."
"; return $content_form; } public function get_form($lien_base) { //$aff_list = liste des fonctions d'affichage en fonction du type global $msg; global $current_module; global $base_path; //$check_scripts contients les javascripts de test de validité des champs avant soumission $check_scripts=""; //Titre du formulaire $form = "

".$msg["proc_param_choice"]."

"; $form .= pmb_bidi("

".$this->proc->name."

"); $form .= pmb_bidi("".$this->proc->comment.""); $form .= "

"; $form .= $this->get_content_form(); $form .= "
"; if(empty($champ_focus)) $champ_focus=$this->query_parameters[0];//Si pas de champ texte par défaut on prend le premier //Compilation des javascripts de validité renvoyés par les fonctions d'affichage $check_scripts=""; $form .= $check_scripts; //Boutons d'annulation/soumission $form .= " "; $form .= "id_query."\" />\n"; $form .= "\n"; $form .= "
"; $form .= " "; return $form; } //Génération du formulaire de saisie des paramètres //$lien_base = adresse de postage du formulaire public function gen_form($lien_base) { echo $this->get_form($lien_base); } //Génération du formulaire de saisie des paramètres pour le planificateur public function gen_form_plann() { //$aff_list = liste des fonctions d'affichage en fonction du type global $aff_list; global $msg; //$check_scripts contients les javascripts de test de validité des champs avant soumission $check_scripts=""; //Titre du formulaire $result = "

".$msg["proc_param_choice"]."

"; $result .= pmb_bidi("

".$this->proc->name."

"); $result .= pmb_bidi("".$this->proc->comment.""); $result .= "

"; $result .= "\n"; //Affichage des champs for ($i=0; $iquery_parameters); $i++) { $name=$this->query_parameters[$i]; //appel de la globale pré-enregistré (par le planificateur) s'il y a... global ${$name}; $result .= pmb_bidi(""); eval("\$aff=".$aff_list[$this->get_field_type($this->parameters_description[$name])]."(\$this->parameters_description[\$name],\$check_scripts);"); $result .= pmb_bidi("\n"); } $result .= "
".$this->get_field_alias($this->parameters_description[$name])."".$aff."
"; //Compilation des javascripts de validité renvoyés par les fonctions d'affichage $check_scripts=""; $result .= $check_scripts; // $result .= "id_query."\" />\n"; // $result .= "\n"; return $result; } //sérialisation des paramètres de la procédure pour le planificateur public function make_serialized_parameters_params() { $t = array(); //seulement pour les procs internes... if ($this->parameters_description) { foreach($this->parameters_description as $parameter) { $name = $parameter["NAME"]; global ${$name}; $t[$name] = ${$name}; } } return $t; } //Récupération de la requête interprétée en fonction de ce qui a été saisi //dans le formulaire de saisie des paramètres public function get_final_query() { global $chk_list; global $val_list; //Vérification du formulaire côté serveur for ($i=0; $iquery_parameters); $i++) { $name=$this->query_parameters[$i]; eval("\$chk=".$chk_list[$this->get_field_type($this->parameters_description[$name])]."(\$this->parameters_description[\$name],\$check_message);"); if (!$chk) { echo ""; exit(); } } //Récupération des valeurs finales & remplacement dans la requête $query=$this->proc->requete; for ($i=0; $iquery_parameters); $i++) { $name=$this->query_parameters[$i]; eval("\$val=".$val_list[$this->get_field_type($this->parameters_description[$name])]."(\$this->parameters_description[\$name]);"); if($this->get_field_type($this->parameters_description[$name]) == 'selector'){ $field_options = $this->get_field_options($this->parameters_description[$name]); if(!is_numeric($val) && ($field_options['DATA_TYPE'][0]['value'] == 9)){ $val = onto_common_uri::get_id($val); } } $query=str_replace("!!".$name."!!",$val,$query); } //Stockage du résultats $this->final_query=$query; } //Conversion en XML du tableau des options public function options_to_xml($field) { if (isset($field['OPTIONS'][0])) { return array_to_xml($field['OPTIONS'][0],"OPTIONS"); } return ""; } //Affichage de la liste des types de champs public function show_list_type($field) { global $type_list; $res=""; return $res; } //Fonction de mise à jour de la description des paramètres d'une procédure //l'appel doit être fait après le soumission du formulaire de configuration public function update_config($lien_base) { global $charset; global $msg; $ret="\n"; $ret.="\n"; //Pour chaque paramètre for ($i=0; $iquery_parameters); $i++) { $name=$this->query_parameters[$i]; //Récupération des valeurs du formulaire de configuration $alias=$name."_alias"; $mandatory=$name."_mandatory"; $for=$name."_for"; $type=$name."_type"; $options=$name."_options"; global ${$alias},${$mandatory},${$for},${$type},${$options}; //Transformation de mandatory en "yes" ou "no" if (${$mandatory}==1) ${$mandatory}="yes"; else ${$mandatory}="no"; //Si un type choisi dans le formulaire de configuration ne correspond pas au type des options //alors erreur ! if (${$type}!=${$for}) { echo ""; exit(); } //Ajout de la description XML du paramètre $ret.=" \n"; $ret.=" \n"; $ret.=" ".${$type}."\n"; $ret.=stripslashes(${$options})."\n"; $ret.=" \n"; } $ret.=""; //Mise à jour de la procédure $requete="update ".$this->table." set parameters='".addslashes($ret)."' where idproc=".$this->id_query; pmb_mysql_query($requete); //Retour au lien echo ""; } //Formulaire de configuration des paramètres //$lien_base = adresse de postage du formulaire //$lien_cancel = adresse de retour en cas d'annulation public function show_config_screen($lien_base,$lien_cancel) { global $type_list; global $options_list; global $charset; global $include_path; global $msg; global $current_module; global $charset; echo "
\n"; //Titre du formulaire echo "

".$msg["proc_param_define"]."

".$this->proc->name."

"; echo pmb_bidi("".$this->proc->comment."
"); $html_requete=$this->proc->requete; //Surlignage des paramètres dans la requête for ($i=0; $iquery_parameters); $i++) { $name=$this->query_parameters[$i]; $html_requete=str_replace("!!".$name."!!","".$name."",$html_requete); } echo "
".$html_requete."
"; echo "
"; echo "\n"; echo "\n"; //Affichage du tableau de configuration des paramètres for ($i=0; $iquery_parameters); $i++) { $name=$this->query_parameters[$i]; echo pmb_bidi(""); echo pmb_bidi(""); echo ""; echo "\n"; } echo "
".$msg["proc_param_title"]."".$msg["proc_param_choice_mod"]."".$msg["proc_param_mandatory"]."
".$name."get_field_alias($this->parameters_description[$name]),ENT_QUOTES,$charset)."\" name=\"".$name."_alias\">".$this->show_list_type($this->parameters_description[$name])."parameters_description[$name]['MANDATORY']=="yes") echo "checked"; echo ">options_to_xml($this->parameters_description[$name]),ENT_QUOTES, $charset)."\" />get_field_type($this->parameters_description[$name])."\" />
"; //Boutons de soumission/annulation echo "id_query."\" />\n"; echo "\n"; echo " "; echo "
"; } //Verification de la presence et de la syntaxe des parametres de la requete //retourne true si OK, le nom du parametre entre parentheses sinon public static function check_param($requete) { $query_parameters=array(); //S'il y a des termes !!*!! dans la requête alors il y a des paramètres if (preg_match_all("|!!(.*)!!|U",$requete,$query_parameters)) { for ($i=0; $i