vertebrer.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. //
  12. // Production dynamique d'un squelette lorsqu'il ne figure pas
  13. // dans les dossiers de squelettes mais que son nom est celui d'une table SQL:
  14. // on produit une table HTML montrant le contenu de la table SQL
  15. // Le squelette produit illustre quelques possibilites de SPIP:
  16. // - pagination automatique
  17. // - tri ascendant et descendant sur chacune des colonnes
  18. // - critere conditionnel donnant l'extrait correspondant a la colonne en URL
  19. //
  20. if (!defined("_ECRIRE_INC_VERSION")) return;
  21. // nomme chaque colonne par le nom du champ,
  22. // qui sert de lien vers la meme page, avec la table triee selon ce champ
  23. // distingue champ numerique et non numerique
  24. // http://code.spip.net/@vertebrer_sort
  25. function vertebrer_sort($fields, $direction)
  26. {
  27. $res = '';
  28. foreach($fields as $n => $t) {
  29. $res .= "\n\t\t<th scope='col'>[(#TRI{"."$n,$n,ajax})]</th>";
  30. }
  31. return $res;
  32. }
  33. // Autant de formulaire que de champs (pour les criteres conditionnels)
  34. // http://code.spip.net/@vertebrer_form
  35. function vertebrer_form($fields)
  36. {
  37. $res = '';
  38. $url = join('|', array_keys($fields));
  39. $url = "#SELF|\n\t\t\tparametre_url{'$url',''}";
  40. foreach($fields as $n => $t) {
  41. $s = sql_test_int($t) ? 11
  42. : (preg_match('/char\s*\((\d)\)/i', $t, $r) ? $r[1] : '');
  43. if (!in_array($n, array('date', 'date_redac', 'lang'))){
  44. $res .= "\n\t\t<td>
  45. [(#ENV{".$n."}|non)
  46. <a href='#' onclick=\"jQuery(this).toggle('fast').siblings('form').toggle('fast');return false;\">[(#CHEMIN_IMAGE{rechercher-20.png}|balise_img)]</a>
  47. ]
  48. <form class='[(#ENV{".$n."}|non)none-js]' action='./' method='get'>"
  49. . "<div>"
  50. . "\n\t\t\t<input name='$n'"
  51. . ($s ? " size='$s'" : '')
  52. . "value=\"[(#ENV{".$n."}|entites_html)]\""
  53. . " />\n\t\t\t[($url|\n\t\t\tform_hidden)]"
  54. . "\n\t\t</div></form></td>";
  55. }
  56. else
  57. $res .= "<td></td>";
  58. }
  59. return $res;
  60. }
  61. // Autant de criteres conditionnels que de champs
  62. // http://code.spip.net/@vertebrer_crit
  63. function vertebrer_crit($v)
  64. {
  65. $res = "";
  66. foreach($v as $n => $t) {
  67. if (!in_array($n, array('date', 'date_redac', 'lang', 'recherche','logo')))
  68. $res .= "\n\t\t{" . $n . " ?}";
  69. }
  70. return $res;
  71. }
  72. // Class CSS en fonction de la parite du numero de ligne.
  73. // Style text-align en fonction du type SQL (numerique ou non).
  74. // Filtre de belle date sur type SQL signalant une date ou une estampille.
  75. // Si une colonne reference une table, ajoute un href sur sa page dynamique
  76. // (il faudrait aller chercher sa def pour ilustrer les jointures en SPIP)
  77. // http://code.spip.net/@vertebrer_cell
  78. function vertebrer_cell($fields)
  79. {
  80. $res = "";
  81. foreach($fields as $n => $t) {
  82. $texte = "#CHAMP_SQL{".$n."}";
  83. if (preg_match('/\s+references\s+([\w_]+)/' , $t, $r)) {
  84. $url = "[(#SELF|parametre_url{page,'" . $r[1] . "'})]";
  85. $texte = "<a href='$url'>" . $texte . "</a>";
  86. }
  87. if (sql_test_int($t))
  88. $s = " style='text-align: right;'";
  89. else {
  90. $s = '';
  91. if (sql_test_date($t))
  92. $texte = "[($texte|affdate_heure)]";
  93. }
  94. $res .= "\n\t\t<td$s>$texte</td>";
  95. }
  96. return $res;
  97. }
  98. // http://code.spip.net/@public_vertebrer_dist
  99. function public_vertebrer_dist($desc)
  100. {
  101. $nom = $desc['table'];
  102. $surnom = $desc['id_table'];
  103. $connexion = $desc['connexion'];
  104. $field = $desc['field'];
  105. $key = $desc['key'];
  106. $defaut_tri = array_keys($field);
  107. $defaut_tri = reset($defaut_tri);
  108. //ksort($field);
  109. $form = vertebrer_form($field);
  110. $crit = vertebrer_crit($field);
  111. $cell = vertebrer_cell($field);
  112. $sort = vertebrer_sort($field,'');
  113. $distant = !$connexion ? '' : "&amp;connect=$connexion";
  114. return
  115. "#CACHE{0}
  116. <B1>
  117. <h2>[(#GRAND_TOTAL|singulier_ou_pluriel{vertebres:1_donnee,vertebres:nb_donnees})]</h2>
  118. [<p class='pagination'>(#PAGINATION)</p>]
  119. <div style='overflow: scroll;overflow-y: auto'>
  120. <table class='spip'>
  121. <thead>
  122. <tr class='row_first'>
  123. <th>
  124. <p class='tri'>#TRI{'>',#CHEMIN_IMAGE{tri-asc-16.png}|balise_img{up},ajax} #TRI{'<',#CHEMIN_IMAGE{tri-desc-16.png}|balise_img{desc},ajax}</p>
  125. </th>
  126. $sort
  127. </tr>
  128. <tr>
  129. <td></td>$form
  130. </tr>
  131. </thead>
  132. <tbody>
  133. <BOUCLE1($surnom){pagination}
  134. {tri $defaut_tri, direct}$crit>
  135. <tr class='[row_(#COMPTEUR_BOUCLE|alterner{'odd','even'})]'>
  136. <td style='text-align: right;'>#COMPTEUR_BOUCLE</td>$cell
  137. </tr>
  138. </BOUCLE1>
  139. </tbody>
  140. <tfoot>
  141. <tr>
  142. <th>
  143. <p class='tri'>#TRI{'>',#CHEMIN_IMAGE{tri-asc-16.png}|balise_img{up},ajax} #TRI{'<',#CHEMIN_IMAGE{tri-desc-16.png}|balise_img{desc},ajax}</p>
  144. </th>
  145. $sort
  146. </tr>
  147. </tfoot>
  148. </table>
  149. </B1>
  150. <div style='overflow: scroll;overflow-y: auto'>
  151. <h2><:texte_vide:></h2>
  152. <table class='spip'>
  153. <thead>
  154. <tr class='row_first'>
  155. <th>
  156. <p class='tri'>#TRI{'>',#CHEMIN_IMAGE{tri-asc-16.png}|balise_img{up},ajax} #TRI{'<',#CHEMIN_IMAGE{tri-desc-16.png}|balise_img{desc},ajax}</p>
  157. </th>
  158. $sort
  159. </tr>
  160. <tr>
  161. <td></td>$form
  162. </tr>
  163. </thead>
  164. </table>
  165. <//B1>
  166. </div>
  167. ";
  168. }
  169. ?>