/** * 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; }
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; }
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; }