コード例 #1
0
ファイル: sort.class.php プロジェクト: hogsim/PMB
 /**
  * Applique le tri sélectionner
  * Renvoi la requete finale utilisant les criteres de tri
  */
 function appliquer_tri($idTri_orTri, $selectTempo, $nomColonneIndex, $debLimit, $nbLimit)
 {
     global $msg;
     //récuperations des champs
     $fields = $this->params["FIELD"];
     $tableEnCours = $this->table_tri_tempo;
     //creation de la table de tri
     //$cmd_table = "DROP TABLE " . $tableEnCours;
     //pmb_mysql_query($cmd_table);
     //$cmd_table = "CREATE TABLE " . $tableEnCours . " ENGINE=MyISAM (".$selectTempo.")";
     $cmd_table = "CREATE TEMPORARY TABLE " . $tableEnCours . " ENGINE=MyISAM (" . $selectTempo . ")";
     //echo $cmd_table."<br />";
     pmb_mysql_query($cmd_table);
     $cmd_table = "ALTER TABLE " . $tableEnCours . " ADD PRIMARY KEY (" . $nomColonneIndex . ")";
     pmb_mysql_query($cmd_table);
     //récupération de la description du tri
     if (is_array($idTri_orTri)) {
         $result = $idTri_orTri;
     } else {
         $result = $this->dSort->recupTriParId($idTri_orTri);
     }
     $trier_par = explode(",", $result['tri_par']);
     //parcours des champs sur lesquels trier
     for ($j = 0; $j < count($trier_par); $j++) {
         //découpage du champ (ex : c_num_2 (croissance ou décroissance (c ou d),
         //type de champ (num,text,...) et id du champ)
         $temp = explode("_", $trier_par[$j]);
         //on parcours tous les champs de tri possible
         for ($i = 0; $i < count($fields); $i++) {
             //afin de trouver ceux sur lesquels le tri s'applique
             if ($fields[$i]["ID"] == $temp[2]) {
                 //on est sur un champ de tri
                 //suivant le type de champ
                 switch ($fields[$i]["TYPEFIELD"]) {
                     case "internal":
                         //c'est un champ de la requete de base
                         //on verifie que le champ est dans la table temporaire
                         $requete_fields = pmb_mysql_query("SELECT * FROM " . $tableEnCours . " LIMIT 1");
                         $x = 0;
                         while ($x < pmb_mysql_num_fields($requete_fields)) {
                             $ligne = pmb_mysql_fetch_field($requete_fields, $x);
                             if ($ligne->name == $fields[$i]["TABLEFIELD"][0][value]) {
                                 //le champ est la donc on ajoute le champ au order
                                 $orderby .= $this->ajoutOrder($fields[$i]["TABLEFIELD"][0][value], $temp[0]) . ",";
                                 $x = pmb_mysql_num_fields($requete_fields);
                             }
                             $x++;
                         }
                         pmb_mysql_free_result($requete_fields);
                         break;
                     case "select":
                         //une requete union est nécéssaire
                         //le nom du champ on ajoute tb pour corriger le probleme des noms numeriques
                         $nomChamp = "tb" . $fields[$i]["NAME"];
                         //on ajoute la colonne au orderby
                         $orderby .= $this->ajoutOrder($nomChamp, $temp[0]) . ",";
                         //on ajoute la colonne à la table temporaire
                         $this->ajoutColonneTableTempo($tableEnCours, $nomChamp, $temp[1]);
                         //on parcours la ou les tables pour generer les updates
                         for ($x = 0; $x < count($fields[$i]["TABLE"]); $x++) {
                             $requete = $this->genereRequeteUpdate($fields[$i]["TABLE"][$x], $tableEnCours, $nomChamp, $nomColonneIndex);
                             //echo("updateSort:".$requete."<br />");
                             pmb_mysql_query($requete);
                         }
                         //on a aussi des champs persos maitenant...
                         if ($fields[$i]['SOURCE'] == "cp") {
                             $requete = $this->generateRequeteCPUpdate($fields[$i], $tableEnCours, $nomChamp);
                             pmb_mysql_query($requete);
                         }
                         break;
                 }
                 //switch
             }
             //if ($fields[$i]["ID"] == $temp[2]) {
         }
         //for ($i = 0; $i < count($fields); $i++) {
     }
     //for ($j = 0; $j < count($trier_par); $j++) {
     if ($orderby != "") {
         //on enleve la derniere virgule
         $orderby = substr($orderby, 0, strlen($orderby) - 1);
         //on va classer la table tempo suivant les criteres donnés
         $requete = "ALTER TABLE " . $tableEnCours . " ORDER BY " . $orderby;
         pmb_mysql_query($requete);
     }
     //on retourne la requete sur la table de tri
     if ($this->table_select != "") {
         //c'est une requete avec des informations extérieures
         $requete = "SELECT " . $nomColonneIndex . "," . $this->champs_select;
         $requete .= " FROM " . $this->table_tri_tempo . "," . $this->table_select;
         $requete .= " WHERE " . $this->table_select . "." . $this->table_primary_key_select;
         $requete .= "=" . $this->table_tri_tempo . "." . $nomColonneIndex;
         $requete .= " GROUP BY " . $nomColonneIndex;
         if ($orderby != "") {
             $requete .= " ORDER BY " . $orderby;
         }
         if ($nbLimit > 0) {
             $requete .= " LIMIT " . $debLimit . "," . $nbLimit;
         }
     } else {
         if ($nbLimit > 0) {
             //requete de base sur la table triée avec limit
             $requete = "SELECT * FROM " . $tableEnCours . " LIMIT " . $debLimit . "," . $nbLimit;
         } else {
             //requete de base sur la table triée
             $requete = "SELECT " . $nomColonneIndex . " FROM " . $tableEnCours;
         }
     }
     return $requete;
 }
コード例 #2
0
ファイル: sort.class.php プロジェクト: hogsim/PMB
 function appliquer_tri_from_tmp_table($idTri = 0, $table, $nomColonneIndex, $start = 0, $numbers = 0)
 {
     //récuperations des champs
     $fields = $this->params["FIELD"];
     $this->table_tri_tempo = $table;
     //récupération de la description du tri
     $result = $this->dSort->recupTriParId($idTri);
     $trier_par = explode(",", $result['tri_par']);
     $do = false;
     //parcours des champs sur lesquels trier
     for ($j = 0; $j < count($trier_par); $j++) {
         //découpage du champ (ex : c_num_2 (croissance ou décroissance (c ou d),
         //type de champ (num,text,...) et id du champ)
         $temp = explode("_", $trier_par[$j]);
         //on parcours tous les champs de tri possible
         for ($i = 0; $i < count($fields); $i++) {
             //afin de trouver ceux sur lesquels le tri s'applique
             if ($fields[$i]["ID"] == $temp[2]) {
                 //on est sur un champ de tri
                 //suivant le type de champ
                 switch ($fields[$i]["TYPEFIELD"]) {
                     case "internal":
                         //c'est un champ de la requete de base
                         $nomChamp = $fields[$i]["TABLEFIELD"][0][value];
                         //on verifie que le champ est dans la table temporaire
                         $requete_fields = pmb_mysql_query("SELECT * FROM " . $this->table_tri_tempo . " LIMIT 1");
                         $x = 0;
                         if ($requete_fields) {
                             while ($x < pmb_mysql_num_fields($requete_fields)) {
                                 $ligne = pmb_mysql_fetch_field($requete_fields, $x);
                                 if ($ligne->name == $nomChamp) {
                                     //le champ est la donc on ajoute le champ au order
                                     if ($orderby != "") {
                                         $orderby .= ",";
                                     }
                                     $orderby .= $this->ajoutOrder($nomChamp, $temp[0]);
                                     $x = pmb_mysql_num_fields($requete_fields);
                                 }
                                 $x++;
                             }
                             pmb_mysql_free_result($requete_fields);
                         }
                         break;
                     case "select":
                         //une requete union est nécéssaire
                         //le nom du champ on ajoute tb pour corriger le probleme des noms numeriques
                         $nomChamp = "tb" . $fields[$i]["NAME"];
                         //on ajoute la colonne au orderby
                         if ($orderby != "") {
                             $orderby .= ",";
                         }
                         $orderby .= $this->ajoutOrder($nomChamp, $temp[0]);
                         //on ajoute la colonne à la table temporaire
                         $this->ajoutColonneTableTempo($this->table_tri_tempo, $nomChamp, $temp[1]);
                         //on parcours la ou les tables pour generer les updates
                         for ($x = 0; $x < count($fields[$i]["TABLE"]); $x++) {
                             $requete = $this->genereRequeteUpdate($fields[$i]["TABLE"][$x], $this->table_tri_tempo, $nomChamp, $nomColonneIndex);
                             pmb_mysql_query($requete);
                         }
                         //on a aussi des champs persos maitenant...
                         if ($fields[$i]['SOURCE'] == "cp") {
                             $requete = $this->generateRequeteCPUpdate($fields[$i], $this->table_tri_tempo, $nomChamp);
                             pmb_mysql_query($requete);
                         }
                         break;
                 }
                 //switch
                 if ($numbers > 0) {
                     $this->delete_useless($nomChamp, $orderby, $start + $numbers);
                 }
             }
             //if ($fields[$i]["ID"] == $temp[2]) {
         }
         //for ($i = 0; $i < count($fields); $i++) {
     }
     //for ($j = 0; $j < count($trier_par); $j++) {
     //on retourne la requete sur la table de tri
     if ($this->table_select != "") {
         //c'est une requete avec des informations extérieures
         $requete = "SELECT " . $nomColonneIndex . "," . $this->champs_select;
         $requete .= " FROM " . $this->table_tri_tempo . "," . $this->table_select;
         $requete .= " WHERE " . $this->table_select . "." . $this->table_primary_key_select;
         $requete .= "=" . $this->table_tri_tempo . "." . $nomColonneIndex;
         $requete .= " GROUP BY " . $nomColonneIndex;
     } else {
         //requete de base sur la table triée
         $requete = "SELECT " . $nomColonneIndex . " FROM " . $this->table_tri_tempo;
     }
     if ($orderby != "") {
         $requete .= " ORDER BY " . $orderby;
     }
     if ($numbers > 0) {
         $requete .= " limit {$start}," . $numbers;
     }
     return $requete;
 }
コード例 #3
0
 function gen_xml($requete, $champ_pivot)
 {
     global $msg;
     $execute_query = pmb_mysql_query($requete);
     $ret = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
     $ret .= "<fields>";
     $table = pmb_mysql_field_table($execute_query, $champ_pivot);
     $header = "<reference dynamicfields=\"\" prefixname=\"\">" . $table . "</reference>";
     $header .= "<referencekey>" . $champ_pivot . "</referencekey>";
     $i = 0;
     while ($i < pmb_mysql_num_fields($execute_query)) {
         $meta = pmb_mysql_fetch_field($execute_query);
         if ($meta) {
             $fields .= "<field name=\"" . $meta->name . "\" type=\"" . $meta->type . "\" value=\"\" id=\"" . $i . "\" filterable=\"yes\" sortable=\"yes\" displayable=\"yes\" defaultvalue=\"\">";
             $fields .= "<tablefield>" . $meta->name . "</tablefield>";
         } else {
             $fields .= "<field>";
             $this->error = true;
             $this->error_message = str_replace('%s', $i, $msg["erreur_detail_champ"]);
             $ret .= str_replace('%s', $i, $msg["erreur_detail_champ"]);
         }
         $fields .= "</field>";
     }
     $fields .= "<specialfields></specialfields>";
     $ret .= $header . $fields . "</fields>";
     $ret = htmlspecialchars($ret);
     return $ret;
 }