ryxeo-glpi-git / scripts / libraries / fonctions.php @ 4ce9f9ca
Historique | Voir | Annoter | Télécharger (14,4 ko)
1 | 4ce9f9ca | Eric Seigne | <?php
|
---|---|---|---|
2 | error_reporting(E_ALL); |
||
3 | //debug: E_ALL
|
||
4 | // ------------------------------------
|
||
5 | // On rebind la fonction sql_exec pasqu'elle est vraiment lourdingue !
|
||
6 | // SELECT: retourne le résultat ou le tableau de résultat
|
||
7 | function sql_exec($req) { |
||
8 | global $dbh; |
||
9 | //sql debug mode
|
||
10 | //echo "req = $req\n";
|
||
11 | |||
12 | if ( DB::isError($res = $dbh->query($req)) ) { |
||
13 | die ("***\n" . DB::errorMessage($res) . "\n***\n\n"); |
||
14 | } |
||
15 | if ( $res === DB_OK ) { |
||
16 | return;
|
||
17 | } |
||
18 | |||
19 | if ( $row = $res->fetchRow() ) { |
||
20 | if (DB::isError($row)) { |
||
21 | print $row->toString() . "<br/>"; |
||
22 | continue;
|
||
23 | } |
||
24 | } |
||
25 | |||
26 | if ( $res->numRows() > 1 ) { |
||
27 | return $res; |
||
28 | } else {
|
||
29 | return $row; |
||
30 | } |
||
31 | } |
||
32 | |||
33 | // ------------------------------------
|
||
34 | // Avant d'insérer le nouvel enregistrement on essaye de voir si il n'est
|
||
35 | // pas déjà présent
|
||
36 | function ajoute_ou_upgrade_package($packageid, $serverid, $version, $etat) { |
||
37 | $vi = makeintversion($version); |
||
38 | $reqt = "SELECT id " . |
||
39 | "FROM packages_installed " .
|
||
40 | "WHERE `id_package`='$packageid' and `id_server`='$serverid';";
|
||
41 | $rest = sql_exec($reqt); |
||
42 | if ( is_array($rest) ) { |
||
43 | $r = $rest[0]; |
||
44 | } else {
|
||
45 | $r = $rest; |
||
46 | } |
||
47 | if ( $r ) { |
||
48 | $req1 = "UPDATE packages_installed " . |
||
49 | "SET `inst_version`='$version', `inst_version_int`='$vi' " .
|
||
50 | "WHERE `id`='$r';";
|
||
51 | $row1 = sql_exec($req1); |
||
52 | } else {
|
||
53 | $req1 = "INSERT INTO packages_installed (id_server, " . |
||
54 | "id_package, " .
|
||
55 | "package_status, " .
|
||
56 | "inst_version, " .
|
||
57 | "inst_version_int ) " .
|
||
58 | "VALUES ('$serverid', '$packageid', '$etat', '$version', $vi);";
|
||
59 | $row1 = sql_exec($req1); |
||
60 | } |
||
61 | } |
||
62 | |||
63 | // ------------------------------------
|
||
64 | // Vérification que ce serveur est bien enregistré dans la base
|
||
65 | // ... si jamais il n'est pas dans la base on expédie un rapport
|
||
66 | function get_serveruid ( $serveruid, $str="" ) { |
||
67 | global $mailto, $mail_subject; |
||
68 | |||
69 | // Détection du "format" de la chaîne SERVERUID contenue dans le mail
|
||
70 | // Les anciennes versions sont du style SERVERUID=AA:BB:CC:DD:EE:FF;AA:BB:CC:DD:EE:GG
|
||
71 | // Les nouvelles versions sont du style SERVERUID=AABBCCDDEEFF
|
||
72 | // ...donc recherche du caractère ";"
|
||
73 | if (strstr($serveruid,";")) { |
||
74 | // On a une ancienne forme...
|
||
75 | $t = explode(";",$serveruid); |
||
76 | if ( strstr($t[0],":") ) { |
||
77 | $t[0] = str_replace(":","",$t[0]); |
||
78 | } |
||
79 | if ( strstr($t[1], ":") ) { |
||
80 | $t[1] = str_replace(":", "", $t[1]); |
||
81 | } |
||
82 | |||
83 | $req = "SELECT id " . |
||
84 | "FROM servers " .
|
||
85 | "WHERE (`mac_address_0`='" . $t[0] . "' " . |
||
86 | " AND `mac_address_1`='" . $t[1] . "') " . |
||
87 | "OR (`mac_address_0`='" . $t[1] . "' " . |
||
88 | " AND `mac_address_1`='" . $t[0] . "') " . |
||
89 | "OR (`mac_address_0`='" . strtolower($t[0]) . "' " . |
||
90 | " AND `mac_address_1`='" . strtolower($t[1]) . "') " . |
||
91 | "OR (`mac_address_0`='" . strtolower($t[1]) . "' " . |
||
92 | " AND `mac_address_1`='" . strtolower($t[0]) . "');"; |
||
93 | // print "R: $req\n";
|
||
94 | } else {
|
||
95 | // Nouvelle forme ("horizon-system-tools")
|
||
96 | $req = "SELECT id " . |
||
97 | "FROM servers " .
|
||
98 | "WHERE `mac_address_0` LIKE '" . $serveruid . "' ". |
||
99 | "OR `mac_address_1` LIKE '" . $serveruid . "' ". |
||
100 | "OR `mac_address_0` LIKE '" . strtoupper($serveruid) . "' ". |
||
101 | "OR `mac_address_1` LIKE '" . strtoupper($serveruid) . "';"; |
||
102 | } |
||
103 | |||
104 | $res = sql_exec($req); |
||
105 | |||
106 | if ( is_array($res) ) { |
||
107 | $r = $res[0]; |
||
108 | } |
||
109 | |||
110 | if ( isset($r) ) { |
||
111 | return $r; |
||
112 | } else {
|
||
113 | $message = "Tentative de get_serveruid ($serveruid)\n" . |
||
114 | "STR: $str";
|
||
115 | mail($mailto,$mail_subject,$message); |
||
116 | return -1; |
||
117 | } |
||
118 | } |
||
119 | |||
120 | // ------------------------------------
|
||
121 | // Récupration du serveurname
|
||
122 | function get_servername($id,$str) { |
||
123 | global $mailto, $mail_subject; |
||
124 | $req = "SELECT name FROM servers WHERE id='" . addslashes($id) . "';"; |
||
125 | $row = sql_exec($req); |
||
126 | if (is_array($row)) { |
||
127 | $r = $row[0]; |
||
128 | } else {
|
||
129 | $r = $row; |
||
130 | } |
||
131 | |||
132 | if(isset($r)) |
||
133 | return $r; |
||
134 | else {
|
||
135 | $message = "tentative de get_servername $id |
||
136 | STR:$str";
|
||
137 | mail($mailto,$mail_subject,$message); |
||
138 | return -1; |
||
139 | } |
||
140 | } |
||
141 | |||
142 | // ------------------------------
|
||
143 | // transforme une date au format mysql en date "normale"
|
||
144 | // 2003-10-05 en 05/10/2003 ...
|
||
145 | function MysqlDateToFrDate($s,$h = 1) { |
||
146 | $masque = "d/m/Y"; |
||
147 | if($h == 1) |
||
148 | $masque .= " G:i:s"; |
||
149 | return date($masque,strtotime($s)); |
||
150 | //implode('/',array_reverse(split('[-]',$s)));
|
||
151 | } |
||
152 | |||
153 | // ------------------------------
|
||
154 | // On a des versions de paquets qui sont en 1:1.2.3
|
||
155 | // Il faut donc virer le 1:
|
||
156 | function cleanversion($s) { |
||
157 | $masque = "/(.:)?(.*)/"; |
||
158 | $r = preg_replace($masque, "\${2}", $s); |
||
159 | // print "$s -> $r\n";
|
||
160 | return preg_replace($masque, "\${2}", $s); |
||
161 | } |
||
162 | |||
163 | // ------------------------------
|
||
164 | // transforme une version en un bigint qui permet la comparaison !
|
||
165 | function makeintversion($s) { |
||
166 | $max = 6; |
||
167 | $masque = "/(.:)?([\d\.]*)[-+]?.*/"; |
||
168 | $i = preg_replace($masque, "\${2}", $s); |
||
169 | // print "$s -> $i\n";
|
||
170 | $tab = @explode( ".", preg_replace("/\(\w\D\)/i", "", $i) ); |
||
171 | |||
172 | /*
|
||
173 | * $masque = "/[-+[:alpha:]]/";
|
||
174 | * $i = preg_split($masque,$s);
|
||
175 | * $tab = explode(".",preg_replace("/\(\w\D\)/i","",$i[0]));
|
||
176 | */
|
||
177 | for ( $i = 0; $i < count($tab) || $i < $max; $i++) { |
||
178 | //Modifier le 03 par ce qu'on veut pour le masque de sortie
|
||
179 | $res .= @sprintf("%03d",$tab[$i]); |
||
180 | } |
||
181 | return $res; |
||
182 | } |
||
183 | |||
184 | //Update la date de dernière info sur la table servers
|
||
185 | function update_datederniereinfo($id) { |
||
186 | $r = "UPDATE servers SET datederniereinfo=now() WHERE id='$id'"; |
||
187 | // $s = sql_exec($r);
|
||
188 | } |
||
189 | |||
190 | //Retourne le diff -u système des deux fichiers
|
||
191 | function systemdiff($f1,$f2,$filename) { |
||
192 | $t = ''; |
||
193 | $tf1 = tempnam("/tmp",basename("$filename") . "_1-"); |
||
194 | $tf2 = tempnam("/tmp",basename("$filename") . "_2-"); |
||
195 | |||
196 | $handle = fopen($tf1, "w"); |
||
197 | fwrite($handle, $f1); |
||
198 | fclose($handle); |
||
199 | |||
200 | $handle = fopen($tf2, "w"); |
||
201 | fwrite($handle, $f2); |
||
202 | fclose($handle); |
||
203 | |||
204 | exec("diff -u $tf1 $tf2",$t); |
||
205 | $r = implode("\n",$t); |
||
206 | unlink($tf1); |
||
207 | unlink($tf2); |
||
208 | return $r; |
||
209 | } |
||
210 | |||
211 | |||
212 | // ---------------------------------------------
|
||
213 | // On vire les espaces ponctuations etc.
|
||
214 | // agressif = 0 on est gentil - on ne fait rien
|
||
215 | // = 1 on vire les accents + tout en minuscules
|
||
216 | // = 2 on vire aussi les tirets et espaces (login / pass)
|
||
217 | function anti_speciaux($t, $agressif=0) { |
||
218 | if(trim($t) == "") |
||
219 | return ;
|
||
220 | if($agressif >= 1) { |
||
221 | $texte = strtolower($t); |
||
222 | $texte = remove_accents($texte); |
||
223 | if($agressif == 2) { |
||
224 | // On vire les espaces
|
||
225 | $texte = str_replace(" ","",$texte); |
||
226 | $texte = str_replace("-","",$texte); |
||
227 | $texte = str_replace("_","",$texte); |
||
228 | //le python accepte - et _ dans le login apres une lettre
|
||
229 | } |
||
230 | } |
||
231 | else {
|
||
232 | $texte=$t; |
||
233 | } |
||
234 | return $texte; |
||
235 | } |
||
236 | |||
237 | /**
|
||
238 | * Code from wordpress - wordpress.org
|
||
239 | * Converts all accent characters to ASCII characters.
|
||
240 | *
|
||
241 | * If there are no accent characters, then the string given is just returned.
|
||
242 | *
|
||
243 | * @since 1.2.1
|
||
244 | *
|
||
245 | * @param string $string Text that might have accent characters
|
||
246 | * @return string Filtered string with replaced "nice" characters.
|
||
247 | */
|
||
248 | function remove_accents($string) { |
||
249 | if ( !preg_match('/[\x80-\xff]/', $string) ) |
||
250 | return $string; |
||
251 | |||
252 | if (seems_utf8($string)) { |
||
253 | $chars = array( |
||
254 | // Decompositions for Latin-1 Supplement
|
||
255 | chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', |
||
256 | chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', |
||
257 | chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', |
||
258 | chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', |
||
259 | chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', |
||
260 | chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', |
||
261 | chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', |
||
262 | chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', |
||
263 | chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', |
||
264 | chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', |
||
265 | chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', |
||
266 | chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', |
||
267 | chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', |
||
268 | chr(195).chr(159) => 's', chr(195).chr(160) => 'a', |
||
269 | chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', |
||
270 | chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', |
||
271 | chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', |
||
272 | chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', |
||
273 | chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', |
||
274 | chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', |
||
275 | chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', |
||
276 | chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', |
||
277 | chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', |
||
278 | chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', |
||
279 | chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', |
||
280 | chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', |
||
281 | chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', |
||
282 | chr(195).chr(191) => 'y', |
||
283 | // Decompositions for Latin Extended-A
|
||
284 | chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', |
||
285 | chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', |
||
286 | chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', |
||
287 | chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', |
||
288 | chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', |
||
289 | chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', |
||
290 | chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', |
||
291 | chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', |
||
292 | chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', |
||
293 | chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', |
||
294 | chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', |
||
295 | chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', |
||
296 | chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', |
||
297 | chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', |
||
298 | chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', |
||
299 | chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', |
||
300 | chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', |
||
301 | chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', |
||
302 | chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', |
||
303 | chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', |
||
304 | chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', |
||
305 | chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', |
||
306 | chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', |
||
307 | chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', |
||
308 | chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', |
||
309 | chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', |
||
310 | chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', |
||
311 | chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', |
||
312 | chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', |
||
313 | chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', |
||
314 | chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', |
||
315 | chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', |
||
316 | chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', |
||
317 | chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', |
||
318 | chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', |
||
319 | chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', |
||
320 | chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', |
||
321 | chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', |
||
322 | chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', |
||
323 | chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', |
||
324 | chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', |
||
325 | chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', |
||
326 | chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', |
||
327 | chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', |
||
328 | chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', |
||
329 | chr(197).chr(154) => 'S',chr(197).chr(155) => 's', |
||
330 | chr(197).chr(156) => 'S',chr(197).chr(157) => 's', |
||
331 | chr(197).chr(158) => 'S',chr(197).chr(159) => 's', |
||
332 | chr(197).chr(160) => 'S', chr(197).chr(161) => 's', |
||
333 | chr(197).chr(162) => 'T', chr(197).chr(163) => 't', |
||
334 | chr(197).chr(164) => 'T', chr(197).chr(165) => 't', |
||
335 | chr(197).chr(166) => 'T', chr(197).chr(167) => 't', |
||
336 | chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', |
||
337 | chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', |
||
338 | chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', |
||
339 | chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', |
||
340 | chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', |
||
341 | chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', |
||
342 | chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', |
||
343 | chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', |
||
344 | chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', |
||
345 | chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', |
||
346 | chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', |
||
347 | chr(197).chr(190) => 'z', chr(197).chr(191) => 's', |
||
348 | // Euro Sign
|
||
349 | chr(226).chr(130).chr(172) => 'E', |
||
350 | // GBP (Pound) Sign
|
||
351 | chr(194).chr(163) => ''); |
||
352 | |||
353 | $string = strtr($string, $chars); |
||
354 | } else {
|
||
355 | // Assume ISO-8859-1 if not UTF-8
|
||
356 | $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) |
||
357 | .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) |
||
358 | .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) |
||
359 | .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) |
||
360 | .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) |
||
361 | .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) |
||
362 | .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) |
||
363 | .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) |
||
364 | .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) |
||
365 | .chr(252).chr(253).chr(255); |
||
366 | |||
367 | $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; |
||
368 | |||
369 | $string = strtr($string, $chars['in'], $chars['out']); |
||
370 | $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); |
||
371 | $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); |
||
372 | $string = str_replace($double_chars['in'], $double_chars['out'], $string); |
||
373 | } |
||
374 | |||
375 | return $string; |
||
376 | } |
||
377 | |||
378 | /**
|
||
379 | * Code from wordpress - wordpress.org
|
||
380 | * Checks to see if a string is utf8 encoded.
|
||
381 | *
|
||
382 | * NOTE: This function checks for 5-Byte sequences, UTF8
|
||
383 | * has Bytes Sequences with a maximum length of 4.
|
||
384 | *
|
||
385 | * @author bmorel at ssi dot fr (modified)
|
||
386 | * @since 1.2.1
|
||
387 | *
|
||
388 | * @param string $str The string to be checked
|
||
389 | * @return bool True if $str fits a UTF-8 model, false otherwise.
|
||
390 | */
|
||
391 | function seems_utf8($str) { |
||
392 | $length = strlen($str); |
||
393 | for ($i=0; $i < $length; $i++) { |
||
394 | $c = ord($str[$i]); |
||
395 | if ($c < 0x80) $n = 0; # 0bbbbbbb |
||
396 | elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb |
||
397 | elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb |
||
398 | elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb |
||
399 | elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb |
||
400 | elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b |
||
401 | else return false; # Does not match any model |
||
402 | for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? |
||
403 | if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) |
||
404 | return false; |
||
405 | } |
||
406 | } |
||
407 | return true; |
||
408 | } |
||
409 | |||
410 | |||
411 | ?> |