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