PageRenderTime 122ms CodeModel.GetById 38ms RepoModel.GetById 0ms app.codeStats 1ms

/_dev_/sqlAdmin/sqlAdmin_fonctions.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 237 lines | 179 code | 39 blank | 19 comment | 16 complexity | 21ff98f08f10fc97f7dc9f07b5372a5d MD5 | raw file
  1. <?php
  2. $GLOBALS['sqla_version'] = '0.3.5';
  3. $GLOBALS['sqla_data'] = array();
  4. /* fournit une balise pour recuperer la version de SQLAdmin en cours */
  5. function balise_sqladmin_version($p){
  6. global $sqla_version;
  7. $p->code="'".$sqla_version."'";
  8. return $p;
  9. }
  10. /* fournit la liste des fonctions sql possibles */
  11. function sqla_liste_SQL_fonctions(){
  12. return array(
  13. 'sql_query' ,
  14. 'sql_select'/*,
  15. 'sql_insert',
  16. 'sql_insertq',
  17. 'sql_replace',
  18. 'sql_update',
  19. 'sql_updateq' */
  20. );
  21. }
  22. /* recupere la liste des noms de connexions possibles */
  23. function sqla_liste_connexions(){
  24. include_spip('inc/flock');
  25. $files = preg_files(_DIR_CONNECT, '.*\.php');
  26. $liste = array();
  27. foreach ($files as $f){
  28. $f = str_replace(_DIR_CONNECT,'',$f);
  29. $f = str_replace('.php','',$f);
  30. $liste[] = $f;
  31. }
  32. return $liste;
  33. }
  34. /* ajoute lles nouveaux parametres postes dans l'historique existant */
  35. function sqla_ajouter_parametres_dans_historique(){
  36. $historique = unserialize(_request('sqla_historiques'));
  37. if (!$historique) $historique=array();
  38. $histo = array();
  39. $histo['connect'] = _request('connect');
  40. $histo['fonction'] = _request('sqla_sql_fonction');
  41. $histo['params'] = sqla_get_champs();
  42. if ($histo['fonction']) array_unshift($historique, $histo);
  43. if (count($historique)>5) array_pop($historique);
  44. global $sqla_data;
  45. $sqla_data['historique'] = $historique;
  46. }
  47. /* ajoute la requete generee dans l'historique */
  48. function sqla_ajouter_requete_dans_historique(){
  49. global $sqla_data;
  50. if (_request('sqla_sql_fonction')){
  51. $sqla_data['historique'][0]['requete'] = sqla_fin_ligne($sqla_data['requete']['query']);
  52. }
  53. }
  54. /* recupere la liste des dernieres requetes executees */
  55. function sqla_liste_historique(){
  56. global $sqla_data;
  57. $historique = $sqla_data['historique'];
  58. return $historique ? $historique : array();
  59. }
  60. /* presente un texte comprehensible pour la liste de l'historique */
  61. function sqla_presenter_historique($h){
  62. $histo = array();
  63. foreach ($h as $c=>$v){
  64. $texte = '('.$v['fonction'].') ' . substr($v['requete'],0,60);
  65. $histo[$c] = $texte;
  66. }
  67. return $histo;
  68. }
  69. /* transforme un tableau en une suite de <option> */
  70. function array2option($tableau, $valeur_selectionnee='', $cle=false){
  71. $s = "";
  72. foreach ($tableau as $c=>$t){
  73. $sel = ($t == $valeur_selectionnee) ? " selected='selected'":'';
  74. $v = $cle ? $c : $t;
  75. $s .= "<option value='$v'$sel>$t</option>\n";
  76. }
  77. return $s;
  78. }
  79. /* execute la requete demandee */
  80. function sqla_executer_requete(){
  81. global $sqla_data;
  82. $res='';
  83. $serveur = _request('connect');
  84. $sql_fonction = _request('sqla_sql_fonction');
  85. $params = sqla_get_champs();
  86. $params['select'] = sqla_exploser_texte($params['select']);
  87. $params['from'] = sqla_exploser_texte($params['from']);
  88. $params['where'] = sqla_exploser_texte($params['where']);
  89. $params['groupby'] = sqla_exploser_texte($params['groupby']);
  90. $params['orderby'] = sqla_exploser_texte($params['orderby']);
  91. //$params['limit'] = sqla_exploser_texte($params['limit']);
  92. $params['having'] = sqla_exploser_texte($params['having']);
  93. if (!$sql_fonction) return;
  94. $sqla_data['requete'] = array();
  95. $sqla_data['requete']['connect'] = $serveur;
  96. switch ($sql_fonction){
  97. case 'sql_query':
  98. $sqla_data['requete']['query'] = $sql_fonction($params['query'], $serveur, false);
  99. if ($sqla_data['requete']['ressource'] = $sql_fonction($params['query'], $serveur)){
  100. $sqla_data['requete']['total'] = sql_count($sqla_data['requete']['ressource'], $serveur);
  101. $sqla_data['requete']['resultats'] = array();
  102. while ($r = sql_fetch($sqla_data['requete']['ressource'], $serveur)){
  103. $sqla_data['requete']['resultats'][]=$r;
  104. }
  105. } else {
  106. $sqla_data['requete']['erreurs'] = sql_error("SqlAdmin: ".$sqla_data['requete']['query'],$serveur);
  107. }
  108. break;
  109. case 'sql_select':
  110. $sqla_data['requete']['query'] = $sql_fonction(
  111. $params['select'], $params['from'], $params['where'],
  112. $params['groupby'], $params['orderby'], $params['limit'],
  113. $params['having'], $serveur, false);
  114. if ($sqla_data['requete']['ressource'] = $sql_fonction(
  115. $params['select'], $params['from'], $params['where'],
  116. $params['groupby'], $params['orderby'], $params['limit'],
  117. $params['having'], $serveur)){
  118. $sqla_data['requete']['total'] = sql_count($sqla_data['requete']['ressource'], $serveur);
  119. $sqla_data['requete']['resultats'] = array();
  120. while ($r = sql_fetch($sqla_data['requete']['ressource'], $serveur)){
  121. $sqla_data['requete']['resultats'][]=$r;
  122. }
  123. } else {
  124. $sqla_data['requete']['erreurs'] = sql_error("SqlAdmin: ".$sqla_data['requete']['query'],$serveur);
  125. }
  126. break;
  127. }
  128. return;
  129. }
  130. /* recupere les champs du formulaire dans un tableau */
  131. function sqla_get_champs(){
  132. $champs = array();
  133. $champs['query'] = _request('sqla_champ_query');
  134. $champs['select'] = _request('sqla_champ_select');
  135. $champs['from'] = _request('sqla_champ_from');
  136. $champs['where'] = _request('sqla_champ_where');
  137. $champs['groupby'] = _request('sqla_champ_groupby');
  138. $champs['orderby'] = _request('sqla_champ_orderby');
  139. $champs['limit'] = _request('sqla_champ_limit');
  140. $champs['having'] = _request('sqla_champ_having');
  141. return $champs;
  142. }
  143. /* explose le contenu du texte pour en faire un array de valeurs */
  144. function sqla_exploser_texte($texte){
  145. return $texte ? explode("\r\n",$texte) : $texte;
  146. }
  147. /* affiche le contenu demande du resultat de requete */
  148. function sqla_afficher($quoi){
  149. global $sqla_data;
  150. switch ($quoi){
  151. case 'erreurs':
  152. return $sqla_data['requete']['erreurs'];
  153. break;
  154. case 'infos':
  155. return "Version du serveur SQL en cours : " . sql_version($sqla_data['requete']['connect']);
  156. break;
  157. case 'resultats':
  158. $retour = "<table>";
  159. $entete = 0;
  160. if ($sqla_data['requete']['resultats']){
  161. foreach ($sqla_data['requete']['resultats'] as $r){
  162. if (!$entete){
  163. $retour .= "<tr>";
  164. foreach ($r as $cle=>$val) {
  165. $retour .= "<th>$cle</th>\n";
  166. }
  167. $retour .= "</tr>\n";
  168. $entete = 1;
  169. }
  170. $retour .= "<tr>";
  171. foreach ($r as $val) {
  172. $retour .= "<td>$val</td>\n";
  173. }
  174. $retour .= "</tr>\n";
  175. }
  176. }
  177. $retour .= "</table>\n";
  178. return $retour;
  179. break;
  180. case 'requete':
  181. return $sqla_data['requete']['query'];
  182. break;
  183. case 'total':
  184. return "sql_count : ". $sqla_data['requete']['total']
  185. . '<br />count($rows) : ' . count($sqla_data['requete']['resultats']);
  186. break;
  187. }
  188. }
  189. /* harmonise les fins de lignes */
  190. function sqla_fin_ligne($txt){
  191. $hop = array(
  192. "\r\n" => "\n",
  193. "\r" => "\n",
  194. "\n" => "\r\n"
  195. );
  196. return str_replace(array_keys($hop),$hop, $txt);
  197. }
  198. ?>