[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / ecrire / public / vertebrer.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
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 \***************************************************************************/
12
13 //
14 // Production dynamique d'un squelette lorsqu'il ne figure pas
15 // dans les dossiers de squelettes mais que son nom est celui d'une table SQL:
16 // on produit une table HTML montrant le contenu de la table SQL
17 // Le squelette produit illustre quelques possibilites de SPIP:
18 // - pagination automatique
19 // - tri ascendant et descendant sur chacune des colonnes
20 // - critere conditionnel donnant l'extrait correspondant a la colonne en URL
21 //
22
23 if (!defined('_ECRIRE_INC_VERSION')) return;
24
25 // nomme chaque colonne par le nom du champ,
26 // qui sert de lien vers la meme page, avec la table triee selon ce champ
27 // distingue champ numerique et non numerique
28
29 // http://doc.spip.org/@vertebrer_sort
30 function vertebrer_sort($fields, $direction)
31 {
32 $res = '';
33 foreach($fields as $n => $t) {
34 $tri = $direction
35 . ((sql_test_int($t) OR sql_test_date($r)) ? 'tri_n' : 'tri');
36
37 $url = vertebrer_sanstri($tri)
38 . "|parametre_url{" . $tri . ",'" . $n . "'}";
39
40 $res .= "\n\t\t<th style='text-align: center'>"
41 . "\n\t\t\t<a href='[(#SELF$url)]'>$n</a>"
42 . "\n\t\t</th>";
43 }
44 return $res;
45 }
46
47 // http://doc.spip.org/@vertebrer_sanstri
48 function vertebrer_sanstri($sauf='')
49 {
50 $url ="";
51 foreach (array('tri', 'tri_n', '_tri', '_tri_n') as $c) {
52 if ($sauf != $c) $url .= "|$c";
53 }
54 return '|parametre_url{"' . substr($url,1) .'",""}';
55 }
56
57 // Autant de formulaire que de champs (pour les criteres conditionnels)
58
59 // http://doc.spip.org/@vertebrer_form
60 function vertebrer_form($fields)
61 {
62 $res = '';
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] : '');
68
69 $res .= "\n\t\t<td><form action='./' method='get'>"
70 . "<div style='text-align: center;' >"
71 . "\n\t\t\t<input name='$n'"
72 . ($s ? " size='$s'" : '')
73 . " />\n\t\t\t[($url|\n\t\t\tform_hidden)]"
74 . "\n\t\t</div></form></td>";
75 }
76 return $res;
77 }
78
79 // Autant de criteres conditionnels que de champs
80
81 // http://doc.spip.org/@vertebrer_crit
82 function vertebrer_crit($v)
83 {
84 $res = "";
85 foreach($v as $n => $t) { $res .= "\n\t\t{" . $n . " ?}"; }
86 return $res;
87 }
88
89
90 // Class CSS en fonction de la parite du numero de ligne.
91 // Style text-align en fonction du type SQL (numerique ou non).
92 // Filtre de belle date sur type SQL signalant une date ou une estampille.
93 // Si une colonne reference une table, ajoute un href sur sa page dynamique
94 // (il faudrait aller chercher sa def pour ilustrer les jointures en SPIP)
95
96 // http://doc.spip.org/@vertebrer_cell
97 function vertebrer_cell($fields)
98 {
99 $res = "";
100 foreach($fields as $n => $t) {
101 $texte = "#" . strtoupper($n);
102 if (preg_match('/\s+references\s+([\w_]+)/' , $t, $r)) {
103 $url = "[(#SELF|parametre_url{page,'" . $r[1] . "'})]";
104 $texte = "<a href='$url'>" . $texte . "</a>";
105 }
106 if (sql_test_int($t))
107 $s = " style='text-align: right;'";
108 else {
109 $s = '';
110 if (sql_test_date($t))
111 $texte = "[($texte|affdate_heure)]";
112 }
113 $res .= "\n\t\t<td$s>$texte</td>";
114 }
115 return $res;
116 }
117
118 // http://doc.spip.org/@public_vertebrer_dist
119 function public_vertebrer_dist($desc)
120 {
121 $nom = $desc['table'];
122 $surnom = $desc['id_table'];
123 $connexion = $desc['connexion'];
124 $field = $desc['field'];
125 $key = $desc['key'];
126
127 ksort($field);
128
129 $form = vertebrer_form($field);
130 $crit = vertebrer_crit($field);
131 $cell = vertebrer_cell($field);
132 $sort = vertebrer_sort($field,'');
133 $tros = vertebrer_sort($field,'_');
134 $titre = "[(#ENV{page}|image_typo{police=dustismo_bold.ttf,taille=36,couleur=4433bb})]";
135 $distant = !$connexion ? '' : "&amp;connect=$connexion";
136 $skel = "./?"._SPIP_PAGE."=table:$surnom$distant&amp;var_mode=debug&amp;var_mode_affiche=squelette#debug_boucle";
137
138 return
139 "#CACHE{0}
140 <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
141 <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='#LANG' lang='#LANG' dir='#LANG_DIR'>
142 <head>
143 <title>[(#NOM_SITE_SPIP|textebrut)] - #ENV{page}</title>
144 <INCLURE{fond=inc-head}>
145 </head>
146 <body class='page_rubrique'><div id='page'>
147 <INCLURE{fond=inc-entete}>
148 <div id='contenu'>
149 <h1 style='text-align:center'>$titre</h1><br />
150 <B1>
151 [<p class='pagination'>(#PAGINATION)</p>]
152 <table class='spip' border='1' width='90%'>
153 <tr>
154 <th><:info_numero_abbreviation:></th>$sort
155 </tr>
156 <tr>
157 <td></td>$form
158 </tr>
159 <BOUCLE1($surnom){pagination}
160 {par #ENV{tri}}{!par #ENV{_tri}}{par num #ENV{tri_n}}{!par num #ENV{_tri_n}}$crit>
161 <tr class='[row_(#COMPTEUR_BOUCLE|alterner{'odd','even'})]'>
162 <td style='text-align: right;'>#COMPTEUR_BOUCLE</td>$cell
163 </tr>
164 </BOUCLE1>
165 <tr>
166 <th><:info_numero_abbreviation:></th>$tros
167 </tr>
168 </table>
169 </B1>\n<h2 style='text-align:center'><:texte_vide:></h2>
170 <//B1></div>
171 <INCLURE{fond=inc-pied}{skel='$skel'}>
172 </div>
173 </body>
174 </html>";
175 }
176 ?>