3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
14 * Échafaudage du contenu du d'un squelette présentant le contenu d'une table SQL
16 * Production dynamique d'un squelette lorsqu'il ne figure pas dans les dossiers
17 * de squelettes mais que son nom est celui d'une table SQL:
18 * on produit une table HTML montrant le contenu de la table SQL
20 * Le squelette produit illustre quelques possibilites de SPIP:
21 * - pagination automatique
22 * - tri ascendant et descendant sur chacune des colonnes
23 * - critere conditionnel donnant l'extrait correspondant a la colonne en URL
25 * @package SPIP\Vertebres\Fonctions
28 if (!defined("_ECRIRE_INC_VERSION")) {
34 * Retourne un morceau de squelette pour ajouter les noms des colonnes
35 * et des tris possibles dessus
37 * @param array $fields
38 * Liste des champs de la table
42 function vertebrer_sort($fields) {
44 foreach ($fields as $n => $t) {
45 $res .= "\n\t\t<th scope='col'>[(#TRI{" . "$n,$n,ajax})]</th>";
52 * Retourne un morceau de squelette pour ajouter des recherches sur chaque champ de la table
54 * Autant de formulaire que de champs (pour les criteres conditionnels)
56 * @param array $fields
57 * Liste des champs de la table
61 function vertebrer_form($fields) {
63 $url = join('|', array_keys($fields));
64 $url = "#SELF|\n\t\t\tparametre_url{'$url',''}";
65 foreach ($fields as $n => $t) {
66 $s = sql_test_int($t) ?
11
67 : (preg_match('/char\s*\((\d)\)/i', $t, $r) ?
$r[1] : '');
69 if (!in_array($n, array('date', 'date_redac', 'lang'))) {
71 [(#ENV{" . $n . "}|non)
72 <a href='#' onclick=\"jQuery(this).toggle('fast').siblings('form').toggle('fast');return false;\">[(#CHEMIN_IMAGE{rechercher-20.png}|balise_img)]</a>
74 <form class='[(#ENV{" . $n . "}|non)none-js]' action='./' method='get'>"
76 . "\n\t\t\t<input name='$n'"
77 . ($s ?
" size='$s'" : '')
78 . "value=\"[(#ENV{" . $n . "}|entites_html)]\""
79 . " />\n\t\t\t[($url|\n\t\t\tform_hidden)]"
80 . "\n\t\t</div></form></td>";
90 * Retourne un morceau de squelette pour ajouter les critères à la boucle
92 * Autant de criteres conditionnels que de champs
94 * @param array $fields
95 * Liste des champs de la table
99 function vertebrer_crit($fields) {
101 foreach ($fields as $n => $t) {
102 if (!in_array($n, array('date', 'date_redac', 'lang', 'recherche', 'logo'))) {
103 $res .= "\n\t\t{" . $n . " ?}";
112 * Retourne un morceau de squelette pour afficher le contenu de chaque
113 * champ SQL dans une ligne d'un tableau
115 * Class CSS en fonction de la parité du numero de ligne.
116 * Style text-align en fonction du type SQL (numerique ou non).
118 * Filtre de belle date sur type SQL signalant une date ou une estampillé.
120 * Si une colonne référence une table, ajoute un href sur sa page dynamique
121 * (il faudrait aller chercher sa def pour ilustrer les jointures en SPIP)
123 * @param array $fields
124 * Liste des champs de la table
128 function vertebrer_cell($fields) {
130 foreach ($fields as $n => $t) {
131 $texte = "#CHAMP_SQL{" . $n . "}";
132 if (preg_match('/\s+references\s+([\w_]+)/', $t, $r)) {
133 $url = "[(#SELF|parametre_url{page,'" . $r[1] . "'})]";
134 $texte = "<a href='$url'>" . $texte . "</a>";
136 if (sql_test_int($t)) {
137 $s = " style='text-align: right;'";
140 if (sql_test_date($t)) {
141 $texte = "[($texte|affdate_heure)]";
144 $res .= "\n\t\t<td$s>$texte</td>";
151 * Calcule le contenu d'un squelette pour lister le contenu d'une
152 * table SQL à partir de la description de cette table.
154 * @see base_trouver_table_dist()
155 * @uses vertebrer_form()
156 * @uses vertebrer_crit()
157 * @uses vertebrer_cell()
158 * @uses vertebrer_sort()
161 * Descrption de la table, telle que retournéer par trouver_table.
163 * Contenu du squelette pour la table
165 function public_vertebrer_dist($desc) {
166 $nom = $desc['table'];
167 $surnom = $desc['id_table'];
168 $connexion = $desc['connexion'];
169 $field = $desc['field'];
172 $defaut_tri = array_keys($field);
173 $defaut_tri = reset($defaut_tri);
177 $form = vertebrer_form($field);
178 $crit = vertebrer_crit($field);
179 $cell = vertebrer_cell($field);
180 $sort = vertebrer_sort($field);
181 $distant = !$connexion ?
'' : "&connect=$connexion";
186 <h2>[(#GRAND_TOTAL|singulier_ou_pluriel{vertebres:1_donnee,vertebres:nb_donnees})]</h2>
187 [<p class='pagination'>(#PAGINATION)</p>]
188 <div style='overflow: scroll;overflow-y: auto'>
191 <tr class='row_first'>
193 <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>
202 <BOUCLE1($surnom){pagination}
203 {tri $defaut_tri, direct}$crit>
204 <tr class='[row_(#COMPTEUR_BOUCLE|alterner{'odd','even'})]'>
205 <td style='text-align: right;'>#COMPTEUR_BOUCLE</td>$cell
212 <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>
219 <div style='overflow: scroll;overflow-y: auto'>
220 <h2><:texte_vide:></h2>
223 <tr class='row_first'>
225 <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>