1 |
<?php |
2 |
/** |
3 |
* Ce fichier permet de declarer la classe table. |
4 |
* |
5 |
* @package openmairie |
6 |
* @link http://www.openmairie.org/ |
7 |
* @version SVN : $Id$ |
8 |
*/ |
9 |
|
10 |
/** |
11 |
* |
12 |
*/ |
13 |
require_once PATH_OPENMAIRIE."om_table.class.php"; |
14 |
/** |
15 |
* Cette classe permet de 'tabler' les champs suivant une requete |
16 |
*/ |
17 |
class widget extends table { |
18 |
|
19 |
/** |
20 |
* |
21 |
* |
22 |
* @param array $params |
23 |
* @param array $href |
24 |
* @param mixed $db |
25 |
* @param string $style Prefixe de la classe CSS a utiliser |
26 |
* @param boolean $onglet |
27 |
* @return void |
28 |
*/ |
29 |
function display($params = array(), $href = array(), $db = NULL, $class = "tab", $onglet = false) { |
30 |
|
31 |
// |
32 |
$this->db = $db; |
33 |
$countHrefColumns=0; |
34 |
// |
35 |
$this->setParams($params); |
36 |
// Construction de la requete |
37 |
$this->composeQuery(); |
38 |
|
39 |
// Calcul du nombre total de resultats de la requete |
40 |
$nbligne = $db->getOne($this->sqlC); |
41 |
|
42 |
// Calcul du nombre total de resultats different si on detecte un |
43 |
// group by dans la requete |
44 |
if (preg_match("/group by/i", $this->tri) == 1) { |
45 |
$res1 = $db->query($this->sqlG); |
46 |
$nbligne = $res1->numRows(); |
47 |
} |
48 |
|
49 |
// Execution de la requete a partir de l'enregistrement $premier avec |
50 |
// la limite $this->serie |
51 |
$res = $db->limitquery($this->sql, $this->getParam("premier"), $this->serie); |
52 |
|
53 |
// Verification d'erreur sur le resultat de la requete |
54 |
if (database::isError($res)) { |
55 |
|
56 |
// Appel de la methode de gestion des erreurs |
57 |
echo "<pre>"; |
58 |
echo $res->getDebugInfo()."\n".$res->getMessage(); |
59 |
echo "</pre>"; |
60 |
echo "</div></div>"; |
61 |
die(); |
62 |
|
63 |
} else { |
64 |
|
65 |
// Recuperation des infos sur la table |
66 |
// ( oracle: recuperation immediate (en dynamique) ) |
67 |
$info = $this->getColumnsName($res); |
68 |
|
69 |
// Affichage de la table |
70 |
echo "<!-- tab-tab -->\n"; |
71 |
echo "<table class=\"".$class."-tab\">\n"; |
72 |
|
73 |
// Affichage de la ligne d'entete du tableau |
74 |
// false car tab non dynamique (pas d'onglet) |
75 |
$this->displayHeader($href, $info, $class, $onglet); |
76 |
|
77 |
// Calcul du nombre de colonnes |
78 |
$nbchamp = count($info); |
79 |
|
80 |
// Gestion d'une classe css differente une ligne sur deux |
81 |
$odd = 0; |
82 |
|
83 |
// Affichage des lignes de tableaux |
84 |
echo "\t<!-- tab-data -->\n"; |
85 |
|
86 |
// Si aucun resultat, on affiche une ligne avec un message |
87 |
// indiquant qu'il n'y a aucun enregistrement |
88 |
if ($nbligne == 0) { |
89 |
|
90 |
echo "\t<tr class=\"".$class."-data empty\">\n"; |
91 |
echo "<td colspan=\"".(count($href)+$nbchamp)."\">"; |
92 |
echo _("Aucun enregistrement."); |
93 |
echo "</td>"; |
94 |
echo "\t</tr>\n"; |
95 |
|
96 |
} |
97 |
|
98 |
//$countHrefColumns = $this->countHrefColumns($href); |
99 |
|
100 |
// Boucle sur les resultats de la requete |
101 |
while ($row =& $res->fetchRow()) { |
102 |
// Gestion des options |
103 |
$option_style = ""; |
104 |
$option_href = false; |
105 |
foreach($this->options as $option) { |
106 |
if ($option["type"] == "condition") { |
107 |
foreach($option["case"] as $case) { |
108 |
if (isset($row[$this->getKeyForColumnName($option["field"])]) |
109 |
and in_array($row[$this->getKeyForColumnName($option["field"])], $case["values"])) { |
110 |
$option_style .= (isset($case["style"]) ? " ".$case["style"] : ""); |
111 |
if (isset($case["href"])) { |
112 |
$option_href = $case["href"]; |
113 |
} |
114 |
} |
115 |
} |
116 |
} |
117 |
} |
118 |
|
119 |
// |
120 |
$links = $href; |
121 |
if ($option_href != false) { |
122 |
$links = $option_href; |
123 |
} |
124 |
|
125 |
// Affichage d'une ligne de tableau |
126 |
echo "\t<tr"; |
127 |
echo " class=\""; |
128 |
echo $class."-data"; |
129 |
echo $option_style; |
130 |
echo " ".($odd % 2 == 0 ? "odd" : "even"); |
131 |
echo "\">\n"; |
132 |
|
133 |
// Gestion d'une classe css differente une ligne sur deux |
134 |
$odd += 1; |
135 |
|
136 |
// |
137 |
if ($countHrefColumns != 0) { |
138 |
echo "\t\t<td class=\"icons\">"; |
139 |
echo " "; |
140 |
} |
141 |
|
142 |
// Affichage des liens en debut de ligne |
143 |
foreach ($links as $key => $elem) { |
144 |
|
145 |
// Les liens a afficher en debut de tableau sont les |
146 |
// valeurs href[2] a [n] donc > 1 |
147 |
if ($key > 0 |
148 |
and $links[$key]['lien'] != "" |
149 |
and $links[$key]['lien'] != "#" |
150 |
and $links[$key]['lib'] != "") { |
151 |
|
152 |
// |
153 |
echo "<a "; |
154 |
if ($onglet == false or $key > 2) { |
155 |
echo "href=\"".$links[$key]['lien'].urlencode($row[0]).$links[$key]['id']."\""; |
156 |
} else { |
157 |
echo "href=\""; |
158 |
echo "#"; |
159 |
echo "\" "; |
160 |
echo " onclick=\"ajaxIt('".$this->getParam("obj")."','"; |
161 |
echo $links[$key]['lien'].urlencode($row[0]).$links[$key]['id']; |
162 |
echo "');\""; |
163 |
} |
164 |
echo ">"; |
165 |
echo $links[$key]['lib']; |
166 |
echo "</a>"; |
167 |
echo " "; |
168 |
|
169 |
} |
170 |
|
171 |
} |
172 |
|
173 |
// |
174 |
if ($countHrefColumns != 0) { |
175 |
echo "</td>\n"; |
176 |
} |
177 |
|
178 |
// Pour chaque colonne du tableau |
179 |
foreach ($row as $key => $elem) { |
180 |
|
181 |
// Affichage de la cellule sans lien |
182 |
echo "\t\t<td "; |
183 |
echo "class=\"col-".$key.""; |
184 |
if ($key == 0) { |
185 |
echo " firstcol"; |
186 |
} |
187 |
if ($key == count($row)-1) { |
188 |
echo " lastcol"; |
189 |
} |
190 |
if (is_numeric($elem)) { |
191 |
echo " right"; |
192 |
} |
193 |
if (preg_match("/@/", $elem)) { |
194 |
echo " left"; |
195 |
} |
196 |
echo "\""; |
197 |
echo ">"; |
198 |
|
199 |
// Affichage d'un lien mailto si on detecte un @ |
200 |
if (preg_match("/@/", $elem)) { |
201 |
echo "<a href='mailto:".$elem."' "; |
202 |
echo "title=\""._("Envoyer un mail a cette adresse")."\">"; |
203 |
echo "<span class=\"ui-icon ui-icon-mail-closed\"></span>"; |
204 |
echo "</a>"; |
205 |
} |
206 |
|
207 |
// |
208 |
echo $elem; |
209 |
echo "</td>\n"; |
210 |
|
211 |
} |
212 |
|
213 |
|
214 |
|
215 |
// Fermeture de la balise ligne de tableau |
216 |
echo "\t</tr>\n"; |
217 |
|
218 |
} |
219 |
|
220 |
// Fermeture de la balise table |
221 |
echo "</table>\n"; |
222 |
|
223 |
// Libere le resultat de la requete |
224 |
$res->free(); |
225 |
|
226 |
} |
227 |
|
228 |
|
229 |
} |
230 |
|
231 |
/** |
232 |
* |
233 |
* |
234 |
* @param array $href |
235 |
* @param array $info |
236 |
* @param string $style Prefixe de la classe CSS a utiliser |
237 |
* @param boolean $onglet |
238 |
* @return void |
239 |
*/ |
240 |
function displayHeader($href, $info, $class = "tab", $onglet = false) { |
241 |
|
242 |
// |
243 |
echo "\t<!-- tab-head -->\n"; |
244 |
// Ouverture de la ligne |
245 |
echo "\t<tr class=\"ui-tabs-nav ui-accordion ui-state-default ".$class."-title\">\n"; |
246 |
// Ouverture de la 1ERE cellule |
247 |
|
248 |
// Nom des champs en entete de colonne |
249 |
foreach ($info as $key => $elem) { |
250 |
echo "\t\t<th class=\"title\">"; |
251 |
echo ucwords($elem['name']); |
252 |
echo "</th>\n"; |
253 |
} |
254 |
echo "\t</tr>\n"; |
255 |
|
256 |
} |
257 |
} |
258 |
|
259 |
?> |