123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- /***************************************************************************\
- * SPIP, Systeme de publication pour l'internet *
- * *
- * Copyright (c) 2001-2014 *
- * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
- * *
- * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
- * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
- \***************************************************************************/
- //
- // Production dynamique d'un squelette lorsqu'il ne figure pas
- // dans les dossiers de squelettes mais que son nom est celui d'une table SQL:
- // on produit une table HTML montrant le contenu de la table SQL
- // Le squelette produit illustre quelques possibilites de SPIP:
- // - pagination automatique
- // - tri ascendant et descendant sur chacune des colonnes
- // - critere conditionnel donnant l'extrait correspondant a la colonne en URL
- //
- if (!defined("_ECRIRE_INC_VERSION")) return;
- // nomme chaque colonne par le nom du champ,
- // qui sert de lien vers la meme page, avec la table triee selon ce champ
- // distingue champ numerique et non numerique
- // http://code.spip.net/@vertebrer_sort
- function vertebrer_sort($fields, $direction)
- {
- $res = '';
- foreach($fields as $n => $t) {
- $res .= "\n\t\t<th scope='col'>[(#TRI{"."$n,$n,ajax})]</th>";
- }
- return $res;
- }
- // Autant de formulaire que de champs (pour les criteres conditionnels)
- // http://code.spip.net/@vertebrer_form
- function vertebrer_form($fields)
- {
- $res = '';
- $url = join('|', array_keys($fields));
- $url = "#SELF|\n\t\t\tparametre_url{'$url',''}";
- foreach($fields as $n => $t) {
- $s = sql_test_int($t) ? 11
- : (preg_match('/char\s*\((\d)\)/i', $t, $r) ? $r[1] : '');
- if (!in_array($n, array('date', 'date_redac', 'lang'))){
- $res .= "\n\t\t<td>
- [(#ENV{".$n."}|non)
- <a href='#' onclick=\"jQuery(this).toggle('fast').siblings('form').toggle('fast');return false;\">[(#CHEMIN_IMAGE{rechercher-20.png}|balise_img)]</a>
- ]
- <form class='[(#ENV{".$n."}|non)none-js]' action='./' method='get'>"
- . "<div>"
- . "\n\t\t\t<input name='$n'"
- . ($s ? " size='$s'" : '')
- . "value=\"[(#ENV{".$n."}|entites_html)]\""
- . " />\n\t\t\t[($url|\n\t\t\tform_hidden)]"
- . "\n\t\t</div></form></td>";
- }
- else
- $res .= "<td></td>";
- }
- return $res;
- }
- // Autant de criteres conditionnels que de champs
- // http://code.spip.net/@vertebrer_crit
- function vertebrer_crit($v)
- {
- $res = "";
- foreach($v as $n => $t) {
- if (!in_array($n, array('date', 'date_redac', 'lang', 'recherche','logo')))
- $res .= "\n\t\t{" . $n . " ?}";
- }
- return $res;
- }
- // Class CSS en fonction de la parite du numero de ligne.
- // Style text-align en fonction du type SQL (numerique ou non).
- // Filtre de belle date sur type SQL signalant une date ou une estampille.
- // Si une colonne reference une table, ajoute un href sur sa page dynamique
- // (il faudrait aller chercher sa def pour ilustrer les jointures en SPIP)
- // http://code.spip.net/@vertebrer_cell
- function vertebrer_cell($fields)
- {
- $res = "";
- foreach($fields as $n => $t) {
- $texte = "#CHAMP_SQL{".$n."}";
- if (preg_match('/\s+references\s+([\w_]+)/' , $t, $r)) {
- $url = "[(#SELF|parametre_url{page,'" . $r[1] . "'})]";
- $texte = "<a href='$url'>" . $texte . "</a>";
- }
- if (sql_test_int($t))
- $s = " style='text-align: right;'";
- else {
- $s = '';
- if (sql_test_date($t))
- $texte = "[($texte|affdate_heure)]";
- }
- $res .= "\n\t\t<td$s>$texte</td>";
- }
- return $res;
- }
- // http://code.spip.net/@public_vertebrer_dist
- function public_vertebrer_dist($desc)
- {
- $nom = $desc['table'];
- $surnom = $desc['id_table'];
- $connexion = $desc['connexion'];
- $field = $desc['field'];
- $key = $desc['key'];
- $defaut_tri = array_keys($field);
- $defaut_tri = reset($defaut_tri);
- //ksort($field);
- $form = vertebrer_form($field);
- $crit = vertebrer_crit($field);
- $cell = vertebrer_cell($field);
- $sort = vertebrer_sort($field,'');
- $distant = !$connexion ? '' : "&connect=$connexion";
- return
- "#CACHE{0}
- <B1>
- <h2>[(#GRAND_TOTAL|singulier_ou_pluriel{vertebres:1_donnee,vertebres:nb_donnees})]</h2>
- [<p class='pagination'>(#PAGINATION)</p>]
- <div style='overflow: scroll;overflow-y: auto'>
- <table class='spip'>
- <thead>
- <tr class='row_first'>
- <th>
- <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>
- </th>
- $sort
- </tr>
- <tr>
- <td></td>$form
- </tr>
- </thead>
- <tbody>
- <BOUCLE1($surnom){pagination}
- {tri $defaut_tri, direct}$crit>
- <tr class='[row_(#COMPTEUR_BOUCLE|alterner{'odd','even'})]'>
- <td style='text-align: right;'>#COMPTEUR_BOUCLE</td>$cell
- </tr>
- </BOUCLE1>
- </tbody>
- <tfoot>
- <tr>
- <th>
- <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>
- </th>
- $sort
- </tr>
- </tfoot>
- </table>
- </B1>
- <div style='overflow: scroll;overflow-y: auto'>
- <h2><:texte_vide:></h2>
- <table class='spip'>
- <thead>
- <tr class='row_first'>
- <th>
- <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>
- </th>
- $sort
- </tr>
- <tr>
- <td></td>$form
- </tr>
- </thead>
- </table>
- <//B1>
- </div>
- ";
- }
- ?>
|