1 | <?php |
---|
2 | |
---|
3 | |
---|
4 | function maxi(){return 50;} |
---|
5 | |
---|
6 | function encode($str) |
---|
7 | { |
---|
8 | return (dc_encoding == 'UTF-8') ? utf8_encode($str) : htmlentities($str); |
---|
9 | } |
---|
10 | |
---|
11 | function nombres($i) |
---|
12 | { |
---|
13 | $arr = array( |
---|
14 | 0 =>'zéro', |
---|
15 | 1 =>'un', |
---|
16 | 2 =>'deux', |
---|
17 | 3 =>'trois', |
---|
18 | 4 =>'quatre', |
---|
19 | 5 =>'cinq', |
---|
20 | 6 =>'six', |
---|
21 | 7 =>'sept', |
---|
22 | 8 =>'huit', |
---|
23 | 9 =>'neuf', |
---|
24 | 10 =>'dix', |
---|
25 | 11 =>'onze', |
---|
26 | 12 =>'douze', |
---|
27 | 13 =>'treize', |
---|
28 | 14 =>'quatorze', |
---|
29 | 15 =>'quinze', |
---|
30 | 16 =>'seize', |
---|
31 | 17 =>'dix-sept', |
---|
32 | 18 =>'dix-huit', |
---|
33 | 19 =>'dix-neuf', |
---|
34 | 20 =>'vingt', |
---|
35 | 21 =>'vingt et un', |
---|
36 | 22 =>'vingt-deux', |
---|
37 | 23 =>'vingt-trois', |
---|
38 | 24 =>'vingt-quatre', |
---|
39 | 25 =>'vingt-cinq', |
---|
40 | 26 =>'vingt-six', |
---|
41 | 27 =>'vingt-sept', |
---|
42 | 28 =>'vingt-huit', |
---|
43 | 29 =>'vingt-neuf', |
---|
44 | 30 =>'trente', |
---|
45 | 31 =>'trente et un', |
---|
46 | 32 =>'trente-deux', |
---|
47 | 33 =>'trente-trois', |
---|
48 | 34 =>'trente-quatre', |
---|
49 | 35 =>'trente-cinq', |
---|
50 | 36 =>'trente-six', |
---|
51 | 37 =>'trente-sept', |
---|
52 | 38 =>'trente-huit', |
---|
53 | 39 =>'trente-neuf', |
---|
54 | 40 =>'quarante', |
---|
55 | 41 =>'quarante et un', |
---|
56 | 42 =>'quarante-deux', |
---|
57 | 43 =>'quarante-trois', |
---|
58 | 44 =>'quarante-quatre', |
---|
59 | 45 =>'quarante-cinq', |
---|
60 | 46 =>'quarante-six', |
---|
61 | 47 =>'quarante-sept', |
---|
62 | 48 =>'quarante-huit', |
---|
63 | 49 =>'quarante-neuf', |
---|
64 | 50 =>'cinquante', |
---|
65 | ); |
---|
66 | return $i >= 0 ? $arr[$i] : array_values($arr); |
---|
67 | } |
---|
68 | |
---|
69 | function position_lettre($size, $n=0) |
---|
70 | { |
---|
71 | $res = ''; |
---|
72 | switch($n) |
---|
73 | { |
---|
74 | case 0 : $res = 'le premier'; break; |
---|
75 | case 1 : $res = 'le deuxième'; break; |
---|
76 | case 2 : $res = 'le troisième'; break; |
---|
77 | case 3 : $res = 'le quatrième'; break; |
---|
78 | case 4 : $res = 'le cinquième'; break; |
---|
79 | case 5 : $res = 'le sixième'; break; |
---|
80 | case 6 : $res = 'le septième'; break; |
---|
81 | case 7 : $res = 'le huitième'; break; |
---|
82 | case 8 : $res = 'le neuvième'; break; |
---|
83 | case 9 : $res = 'le dixième'; break; |
---|
84 | case 10 : $res = 'le onzième'; break; |
---|
85 | case 11 : $res = 'le douzième'; break; |
---|
86 | case 12 : $res = 'le treizième'; break; |
---|
87 | case 13 : $res = 'le quatorzième'; break; |
---|
88 | case 14 : $res = 'le quinzième'; break; |
---|
89 | case 15 : $res = 'le seizième'; break; |
---|
90 | case 16 : $res = 'le dix-septième'; break; |
---|
91 | case 17 : $res = 'le dix-huitième'; break; |
---|
92 | case 18 : $res = 'le dix-neuvième'; break; |
---|
93 | case 19 : $res = 'le vingtième'; break; |
---|
94 | } |
---|
95 | |
---|
96 | if (1+$n == $size) $res= 'le dernier'; |
---|
97 | else if ( 1+$n == $size-1 ) $res='l\'avant-dernier'; |
---|
98 | |
---|
99 | return $res; |
---|
100 | } |
---|
101 | |
---|
102 | |
---|
103 | |
---|
104 | function mots() |
---|
105 | { |
---|
106 | $mots = nombres(-1); //recupere tous les nombres |
---|
107 | //array_map('mots','l10n', $mots); //internalisation |
---|
108 | |
---|
109 | if ( !empty($GLOBALS['captcha_my_words']) ) |
---|
110 | { |
---|
111 | $mots = array_merge($mots, $GLOBALS['captcha_my_words']); //ajoute les mots personnels , todo virer la globale |
---|
112 | } |
---|
113 | |
---|
114 | $i= rand(0, count($mots)-1); //mot aleatoire |
---|
115 | return $mots[$i]; |
---|
116 | } |
---|
117 | |
---|
118 | |
---|
119 | |
---|
120 | function addition() |
---|
121 | { |
---|
122 | while ( ( $c =($a = rand(0, maxi())) + ($b = rand(0, maxi()))) > maxi() ); |
---|
123 | return array( sprintf(('combien font %s et %s ? (chiffres)'), (nombres($a)), (nombres($b)) ) , $c); |
---|
124 | } |
---|
125 | |
---|
126 | |
---|
127 | |
---|
128 | function soustraction() |
---|
129 | { |
---|
130 | while ( ( $c =($a = rand(0, maxi())) - ($b = rand(0, maxi()))) < 0 ); |
---|
131 | return array( sprintf(('que donne %s moins %s ? (chiffres)'), (nombres($a)), (nombres($b)) ) , $c); |
---|
132 | } |
---|
133 | |
---|
134 | |
---|
135 | |
---|
136 | function multiplication() |
---|
137 | { |
---|
138 | while ( ( $c =($a = rand(0, maxi())) * ($b = rand(0, maxi()))) > maxi() ); |
---|
139 | return array( sprintf(('que donne %s fois %s ? (chiffres)'), (nombres($a)), (nombres($b)) ) , $c); |
---|
140 | } |
---|
141 | |
---|
142 | |
---|
143 | function lettre_mot() |
---|
144 | { |
---|
145 | $f = rand(0, 3); |
---|
146 | |
---|
147 | if ($f <= 1) // 0 |
---|
148 | { |
---|
149 | if ($f) // 1 : on recupere un mot |
---|
150 | { |
---|
151 | do{ |
---|
152 | do{ |
---|
153 | $str = mots(); |
---|
154 | $ok = strpos($str, ' ') === FALSE; |
---|
155 | } while (!$ok); |
---|
156 | $l = strlen($str); |
---|
157 | $nbr = rand(0, $l); |
---|
158 | }while ((!$ok = position_lettre($l, $nbr)) || !isset($str[$nbr]) ); |
---|
159 | } |
---|
160 | else // 0 : on genere un chaine de caracteres |
---|
161 | { |
---|
162 | $str = ''; |
---|
163 | $l = rand(4, 16); //4 a 16 caracteres |
---|
164 | $chars = range(0, 9); // chiffres de 0 a 9 : 0123456789 |
---|
165 | $chars = array_merge($chars, range('A', 'Z')); //=> 0123456789ABCDEF...XYZ |
---|
166 | $chars = array_merge($chars, array('-', '_', '*')); //=> 0123456789ABCDEF...XYZ-_* |
---|
167 | shuffle($chars); // on touille |
---|
168 | |
---|
169 | for ($i=0; $i < $l; $i++) |
---|
170 | { |
---|
171 | $c= array_pop($chars); |
---|
172 | $str.= rand(0, 1) ? strtolower($c) : strtoupper($c); // minuscule/MAJUSCULE |
---|
173 | } |
---|
174 | |
---|
175 | $nbr = rand(0, $l-1); |
---|
176 | $ok = position_lettre($l, $nbr); |
---|
177 | } |
---|
178 | return array(sprintf(('quel est %s caractère du mot "%s" ?'), ($ok), encode($str)), $str[$nbr]) ; |
---|
179 | } |
---|
180 | |
---|
181 | else //2, 3 : mot a completer |
---|
182 | { |
---|
183 | do{ |
---|
184 | $str = mots(); |
---|
185 | $l = strlen($str); |
---|
186 | }while ($l < 6); |
---|
187 | $chars = range(0, $l-1); |
---|
188 | shuffle($chars); |
---|
189 | $res = $str; |
---|
190 | |
---|
191 | $nbr = 1; |
---|
192 | for ($i=0; $i < $nbr; $i++) |
---|
193 | { |
---|
194 | do { |
---|
195 | $j = array_pop($chars); |
---|
196 | } while( $res[$j] == ' '); |
---|
197 | $str[$j] = '*'; |
---|
198 | } |
---|
199 | $str = sprintf(('complétez le mot "%s" ...'), encode($str)) ; |
---|
200 | |
---|
201 | $str = str_replace('*', '<span style="color:red">*</span>', $str); |
---|
202 | return array($str , $res); |
---|
203 | } |
---|
204 | } |
---|
205 | |
---|
206 | |
---|
207 | |
---|
208 | function chiffre_mot_suivante() |
---|
209 | { |
---|
210 | $str = ''; |
---|
211 | $nbr = rand(4, 10); |
---|
212 | |
---|
213 | $numbers = range(0,9); |
---|
214 | shuffle($numbers); |
---|
215 | for ($i=0; $i < $nbr; $i++) $str .= array_pop($numbers); |
---|
216 | |
---|
217 | $f = rand(0, 1); |
---|
218 | if ($f) |
---|
219 | { |
---|
220 | $nbr = rand(0, $nbr-2); |
---|
221 | return array(encode('dans le nombre "'.$str.'", quel chiffre vient après '. nombres($str[$nbr]). ' ? (chiffres) ') , $str[1+$nbr]); |
---|
222 | } |
---|
223 | else |
---|
224 | { |
---|
225 | $nbr = rand(1, $nbr-1); |
---|
226 | return array(encode('dans le nombre "'.$str.'", quel chiffre vient avant '. nombres($str[$nbr]). ' ? (chiffres) ') , $str[$nbr-1]); |
---|
227 | } |
---|
228 | } |
---|
229 | |
---|
230 | |
---|
231 | |
---|
232 | function caractere_mot_suivante() |
---|
233 | { |
---|
234 | $str=''; |
---|
235 | $l = 15; |
---|
236 | $nbr = rand(4, $l); |
---|
237 | |
---|
238 | $chars = range(0, 9); |
---|
239 | $chars = array_merge($chars, range('A', 'Z')); |
---|
240 | shuffle($numbers); |
---|
241 | for ($i=0; $i < $nbr; $i++) $str.=array_pop($numbers); |
---|
242 | |
---|
243 | $nbr = rand(0, $nbr-1); |
---|
244 | $nbr = position_lettre($l, $nbr); |
---|
245 | |
---|
246 | return array(sprintf(('quel est %s caractère du mot "%s" ?'), ($nbr), encode($str)) , $str[$nbr]); |
---|
247 | } |
---|
248 | |
---|
249 | |
---|
250 | |
---|
251 | function my_captcha() |
---|
252 | { |
---|
253 | if ( !empty($GLOBALS['my_captcha']) ) |
---|
254 | { |
---|
255 | $temp = array(); |
---|
256 | foreach($GLOBALS['my_captcha'] as $k => $v) $temp[] = array($k, $v); |
---|
257 | shuffle($temp); |
---|
258 | list($question, $sol) = array_pop($temp); |
---|
259 | return array($question , $sol); |
---|
260 | } |
---|
261 | else return lettre_mot(); |
---|
262 | } |
---|
263 | |
---|
264 | |
---|
265 | |
---|
266 | function captcha_level($l = 0) |
---|
267 | { |
---|
268 | $l = intval($l); |
---|
269 | $GLOBALS['captcha_level'] = ( ($l < 0) || ($l > 2) ) ? 0 : $l; |
---|
270 | } |
---|
271 | |
---|
272 | |
---|
273 | |
---|
274 | function question($s='%s') |
---|
275 | { |
---|
276 | if ( empty($GLOBALS['captcha_level']) ) |
---|
277 | { |
---|
278 | if ( !empty($GLOBALS['captcha_fonctions']) ) |
---|
279 | { |
---|
280 | $fct_i = rand(0, count($GLOBALS['captcha_fonctions'])-1 ); |
---|
281 | $fct = $GLOBALS['captcha_fonctions'][$fct_i]; |
---|
282 | } |
---|
283 | else $fct = 'lettre_mot'; |
---|
284 | $GLOBALS['dc_captcha_index'] = $fct(); |
---|
285 | save_captcha(); |
---|
286 | //printf($s, $GLOBALS['dc_captcha_index'][0]); |
---|
287 | $result = '<span class="spip_form_label">'.$GLOBALS['dc_captcha_index'][0].'</span>'; |
---|
288 | } |
---|
289 | else |
---|
290 | { |
---|
291 | $captcha_id = md5( uniqid(microtime()) ); |
---|
292 | $GLOBALS['dc_captcha_index'] = array ($captcha_id, mt_rand(100000, 999999), 'gd'); |
---|
293 | //$url = _DIR_PLUGIN_CAPTCHA."inc/imagevide.php"; |
---|
294 | //$url = $_SERVER['REQUEST_URI']; |
---|
295 | |
---|
296 | //$captchaimg = mt_rand(100000, 999999); |
---|
297 | |
---|
298 | if (dc_url_scan == 'path_info') |
---|
299 | { |
---|
300 | if ( strpos(' '.$url, '?') ) |
---|
301 | $url = str_replace('?', '?img_captcha=' . $GLOBALS['dc_captcha_index'][0] .'&', $url.'&'); |
---|
302 | else $url .= '?img_captcha=' . $GLOBALS['dc_captcha_index'][0] .'&'; |
---|
303 | } |
---|
304 | else |
---|
305 | { |
---|
306 | $url .= '?img_captcha=' . $GLOBALS['dc_captcha_index'][0] .'&'; |
---|
307 | } |
---|
308 | |
---|
309 | if ( !function_exists('imagePng') && !function_exists('imageJpeg') ) $GLOBALS['captcha_level'] = 1; |
---|
310 | |
---|
311 | save_captcha(); |
---|
312 | |
---|
313 | if ( $GLOBALS['captcha_level'] == 1 ) |
---|
314 | { |
---|
315 | |
---|
316 | |
---|
317 | $result = ''; |
---|
318 | $result = show_captcha_img($GLOBALS['dc_captcha_index'][0],'0'); |
---|
319 | $result .= show_captcha_img($GLOBALS['dc_captcha_index'][0],'1'); |
---|
320 | $result .= show_captcha_img($GLOBALS['dc_captcha_index'][0],'2'); |
---|
321 | $result .= show_captcha_img($GLOBALS['dc_captcha_index'][0],'3'); |
---|
322 | $result .= show_captcha_img($GLOBALS['dc_captcha_index'][0],'4'); |
---|
323 | $result .= show_captcha_img($GLOBALS['dc_captcha_index'][0],'5'); |
---|
324 | //$result = ''; |
---|
325 | //$result = '<img src="captcha.png" alt="' . str_replace('"', '', ('Si vous ne voyez aucun chiffre lisible, utilisez le formulaire de contact pour signaler le problème')) . '" border="0" />'; |
---|
326 | |
---|
327 | } |
---|
328 | else if ( $GLOBALS['captcha_level'] == 2 ) |
---|
329 | { |
---|
330 | $result = ''; |
---|
331 | $result = show_captcha_img($GLOBALS['dc_captcha_index'][0],'0'); |
---|
332 | } |
---|
333 | else |
---|
334 | { |
---|
335 | echo '<img src="'. $url . '" alt="' . str_replace('"', '', ('Si vous ne voyez aucun chiffre lisible, utilisez le formulaire de contact pour signaler le problème')) . '" title="' . str_replace('"', '', ('Si vous ne voyez aucun chiffre lisible, utilisez le formulaire de contact pour signaler le problème')) . '" border="0" />'; |
---|
336 | } |
---|
337 | //echo '<br /><strong>' . ('Captcha anti-spam') . ' : </strong>'; |
---|
338 | $result .= '<br /><span class="spip_form_label">recopiez le code numérique indiqué ci-dessus</span>'; |
---|
339 | } |
---|
340 | |
---|
341 | return $result; |
---|
342 | } |
---|
343 | |
---|
344 | |
---|
345 | |
---|
346 | function save_captcha() |
---|
347 | { |
---|
348 | global $con, $blog; |
---|
349 | //if ( empty($GLOBALS['captcha_enable']) || !isset($GLOBALS['dc_captcha_index'][1]) ) return; |
---|
350 | |
---|
351 | if ( !empty($GLOBALS['dc_captcha_index'][2]) ) |
---|
352 | { |
---|
353 | $code = $GLOBALS['dc_captcha_index'][0]; |
---|
354 | $q = $GLOBALS['captcha_level'] . '-' . $GLOBALS['dc_captcha_index'][1]; |
---|
355 | } |
---|
356 | else |
---|
357 | { |
---|
358 | $q = md5(strtolower($GLOBALS['dc_captcha_index'][1])); |
---|
359 | $code = md5(uniqid(microtime())); |
---|
360 | } |
---|
361 | clear(); |
---|
362 | |
---|
363 | $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR'); |
---|
364 | $browser = substr($_SERVER['HTTP_USER_AGENT'], 0, 100); |
---|
365 | $timer = time(); |
---|
366 | spip_query("INSERT INTO `spip_captcha` (`captcha_code`, `captcha_solution`, `captcha_time`, `captcha_ip_address`, `captcha_user_agent`) VALUES ('$code', '$q', '$timer', '$ip', '$browser');"); |
---|
367 | |
---|
368 | //$con = spip_query($insReq); |
---|
369 | //if (!$con = spip_query($insReq)) |
---|
370 | //$blog->setError('MySQL : '.$con->error(), 2000); |
---|
371 | $GLOBALS['captcha_sol'] = $q; |
---|
372 | $GLOBALS['captcha_code'] = $code; |
---|
373 | } |
---|
374 | |
---|
375 | |
---|
376 | |
---|
377 | function field($id_form,$champ) |
---|
378 | { |
---|
379 | // global $con, $blog; |
---|
380 | // if ( empty($GLOBALS['captcha_code']) ) return; |
---|
381 | //xxxxxxxxxxxxxx |
---|
382 | $result = ''; |
---|
383 | $result = '<input name="'.$champ.'" id="input-'.$id_form.'-'.$champ.'" type="text" title="captcha anti-spam" size="10" class="password formo" />'; |
---|
384 | $result .= '<input name="'.$champ.'_code" id="input-'.$id_form.'-'.$champ.'_code" value="' . $GLOBALS['captcha_code'] . '" type="hidden" />'; |
---|
385 | return $result; |
---|
386 | } |
---|
387 | |
---|
388 | |
---|
389 | |
---|
390 | function clear($code='') |
---|
391 | { |
---|
392 | global $con; |
---|
393 | |
---|
394 | $strReq = "DELETE FROM spip_captcha WHERE captcha_time <" . (time() - 60 * 60 * 2); |
---|
395 | |
---|
396 | if ( !empty($code) ) |
---|
397 | $strReq .= " OR captcha_code='" .$code. "'"; |
---|
398 | |
---|
399 | spip_query($strReq); |
---|
400 | //if (!$con->spip_query($strReq)) |
---|
401 | // return 0; |
---|
402 | return 1; |
---|
403 | } |
---|
404 | |
---|
405 | |
---|
406 | |
---|
407 | function check($md5val, $value) |
---|
408 | { |
---|
409 | global $con; |
---|
410 | |
---|
411 | $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR'); |
---|
412 | $browser = substr($_SERVER['HTTP_USER_AGENT'], 0, 100); |
---|
413 | |
---|
414 | // 'captcha_ip_address = \'' . $con->escapeStr($ip) . '\' AND '. |
---|
415 | |
---|
416 | $strReq = "SELECT captcha_solution FROM spip_captcha WHERE captcha_code = '$md5val' AND captcha_user_agent = '$browser'"; |
---|
417 | |
---|
418 | $s = spip_query($strReq); |
---|
419 | $row = spip_fetch_array($s); |
---|
420 | $solution = $row['captcha_solution']; |
---|
421 | |
---|
422 | |
---|
423 | $ok = 0; |
---|
424 | |
---|
425 | if ( strlen($solution) < 32 ) |
---|
426 | { |
---|
427 | list($GLOBALS['captcha_level'], $solution) = split('-', $solution); |
---|
428 | if($value == $solution) |
---|
429 | { |
---|
430 | $ok = 1; |
---|
431 | }else{$ok = 0;} |
---|
432 | } |
---|
433 | else |
---|
434 | { |
---|
435 | if(md5(strtolower($value)) == $solution) |
---|
436 | { |
---|
437 | $ok = 1; |
---|
438 | }else{$ok = 0;} |
---|
439 | } |
---|
440 | clear($md5val); |
---|
441 | |
---|
442 | |
---|
443 | |
---|
444 | return $ok; |
---|
445 | } |
---|
446 | |
---|
447 | function make_gd_img($content = '') |
---|
448 | { |
---|
449 | $content = ' '. preg_replace( '/(\w)/', '\\1 ', $content) .' '; |
---|
450 | |
---|
451 | $temp_width= 135; |
---|
452 | $temp_height = 20; |
---|
453 | |
---|
454 | $image_width = 150; |
---|
455 | $image_height = 40; |
---|
456 | |
---|
457 | if ( function_exists('imageCreateTrueColor') ) |
---|
458 | { |
---|
459 | $temp = imageCreateTrueColor($temp_width, $temp_height); |
---|
460 | $image = imageCreateTrueColor($image_width, $image_height); |
---|
461 | } |
---|
462 | else |
---|
463 | { |
---|
464 | $temp = imageCreate($temp_width, $temp_height); |
---|
465 | $image = imageCreate($image_width, $image_height); |
---|
466 | } |
---|
467 | |
---|
468 | $white = imageColorAllocate($temp, 255, 255, 255); |
---|
469 | $black = imageColorAllocate($temp, 0, 0, 0); |
---|
470 | $grey = imageColorAllocate($temp, 210, 210, 210); |
---|
471 | $text_color = imageColorAllocate($temp, rand(0, 150), rand(0, 50), rand(0, 60)); |
---|
472 | |
---|
473 | imageFill($temp, 0, 0, $white); |
---|
474 | |
---|
475 | $nbr_obj = rand(3, 5); |
---|
476 | for ( $i = 0; $i < $nbr_obj; $i++ ) |
---|
477 | { |
---|
478 | $nbr_corners = rand(3, 20); |
---|
479 | $poly = array(); |
---|
480 | for ( $j = 0; $j < $nbr_corners; $j++ ) |
---|
481 | { |
---|
482 | $poly[] = rand(0, $temp_width); |
---|
483 | $poly[] = rand(0, $temp_height); |
---|
484 | } |
---|
485 | $color = imageColorAllocate($temp, rand(130, 255), rand(130,255), rand(130, 255)); |
---|
486 | imageFilledPolygon($temp, $poly, $nbr_corners, $color); |
---|
487 | |
---|
488 | } |
---|
489 | |
---|
490 | imageString($temp, 5, 0, 2, $content, $text_color); |
---|
491 | imageCopyResized($image, $temp, 0, 0, 0, 0, $image_width, $image_height, $temp_width, $temp_height); |
---|
492 | imageDestroy($temp); |
---|
493 | |
---|
494 | $nbr_waves = rand(1, 3); |
---|
495 | $coef_wave = ($nbr_waves * 360) / $image_width; |
---|
496 | $maxY = $image_height-rand(0, $image_height/2); |
---|
497 | for ( $bit = 0; $bit <= 1; $bit++ ) |
---|
498 | { |
---|
499 | $curX = 0; |
---|
500 | $curY = $bit ? 0 : $maxY; |
---|
501 | for($pt = 0; $pt < $image_width; $pt++) |
---|
502 | { |
---|
503 | $newX = $curX + 1; |
---|
504 | $newY = $bit |
---|
505 | ?($image_height/2) + (sin(deg2rad($newX * $coef_wave - 90)) * ($maxY/2)) |
---|
506 | :($image_height/2) + (cos(deg2rad($newX * $coef_wave)) * ($maxY/2)); |
---|
507 | ImageLine($image, $curX, $curY, $newX, $newY, $text_color); |
---|
508 | $curX = $newX; |
---|
509 | $curY = $newY; |
---|
510 | } |
---|
511 | } |
---|
512 | |
---|
513 | $nbr_obj = $image_width * $image_height / rand(5, 10); |
---|
514 | for ( $i = 0; $i < $nbr_obj; $i++ ) |
---|
515 | { |
---|
516 | imageSetPixel($image, rand(0, $image_width), rand(0, $image_height), $black); |
---|
517 | } |
---|
518 | |
---|
519 | //$type = function_exists('imageJpeg') ? 'jpeg' : 'png'; |
---|
520 | //@header('Content-Type: image/' . $type); |
---|
521 | //@header('Cache-control: no-cache, no-store'); |
---|
522 | //($type =='png') ?imagePng($image) : imageJpeg($image); |
---|
523 | //ImageDestroy($image); |
---|
524 | |
---|
525 | $string = "$content"; |
---|
526 | $query = md5($string); |
---|
527 | $dossier = sous_repertoire(_DIR_VAR, 'cache-image'); |
---|
528 | $fichier = "$dossier$query.png"; |
---|
529 | |
---|
530 | imagepng($image, $fichier); |
---|
531 | imagedestroy($image); |
---|
532 | $images = $fichier; |
---|
533 | |
---|
534 | return "<img src='".$images."' alt='' border='0' />"; |
---|
535 | } |
---|
536 | |
---|
537 | function make_png_char($char,$i) |
---|
538 | { |
---|
539 | $png = array( |
---|
540 | |
---|
541 | 0 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACBUlEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAGKh3IiLL959+PFLgINNX0IIjzKAAKLIpkknri28ePvhhy8QrrwAT5+7ub2CBFbFAAHESF7OBfqjaOdJIAmxQEGAB+IzIHdvvCdWzwEEEDk2AQ0NXrkXaC7Q+Xnm2hBPALnFO09uvPEIyF0b7oypCyCAmMi2Js5ABWgiPKyA8QS0Fcg4+OAFxHNoACCASLMJaATcGmCUoMnCAw0SqmgAIIBIswkYPkBrgCZiWkMQAAQQCTYBgwUYDUBGnb0hroCFhySmLEAAkWDToou3gSQwYnClY7hNWNMeQAAxER9DEA/F6avi9PTD50DSX0MOqyxAADERH3QQBi6DgPkX4hQ/dXmsCgACiFibIAUBnvKm6eB5SC7G5RSAACIt7WGNaiAA+gbiITxpEiCASM5PWBMCMPWDotBABVdiAQKAACLWJogRQEPRciW8yAAGLK7UDwEAAUSsTUCDIJYBC1ZI6gDGHLAsd164HWINsGTCFbYQABBAJJSwcOejiedZaAFLPPzWAAFAAJFWlgP9MfHk1U03HkGqPj8NOX91eTxxgwwAAoiRbi1LgACiXzsCIIDoZxNAANHPJoAAop9NAAFEP5sAAoh+NgEEEP1sAggg+tkEEED0swkgwABMhs4JaJfE5gAAAABJRU5ErkJggg==', |
---|
542 | 1 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABjklEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAKLIpocfvlx88Y5IxQABxEKq6UCjDz54cfHlWyD54ccvoMib8mhiNAIEEGk2Ba/cC7QAWSTOQIVIvQABRELoAe2AWAM0vc/dXICDDcjON9cmUjtAADH8JwUcuP/8/fefQMbE41eFO5YU7jhBvF6AACIt9OwVJIAkMHomnbxKmocYGAACiJy0t+nGI6BlQFvlBXiI1wUQQOTYNBHsIX91eZJ0AQQQExmpHJiNgMmB+FQHAQABRLJNCy/eBpJ+GnKkagQIICYyIglIxuurkqoRIIBIs2kjOC0AE4K+hBCpNgEEEGk2HXz4HJQWSA86IAAIICYygk5fXJgMmwACiLTSCFKkkucngABiIil9w4sJMgBAADGRGklkpAUIAAggEmyC2EFeJAEBQAAx0q1lCRBA9GtHAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAKKfTQABRD+bAAKIfjYBBBgA9Hy/mlzuqpUAAAAASUVORK5CYII=', |
---|
543 | 2 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACEUlEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAGKhRPPFF+8+/PgFZOhLCAlwsOFXDBBA5Nh08MGLRRdvb7zxCFkwzkClzt4Qj30AAcRIas5tOnh+0olrEDbEKw8+fHn44QuEuzbcGZdlAAFEmk2LLtwp2nkSyMiz0IrXV5UX4IGIA/1XvPMkMCSBPutzN8eqFyCASEsR/GD3As0CBhTcGiDw15DLM9cGMjahBikyAAgg0uIJaKK/RjRWKWDQAUlIAsEKAAKIaqkcElXIHkUDAAFEHZuAXpl48iqQYa8ggUsNQAAxUcWa4JV7gX4Cpjpg/OFSBhBALBRaA8xbwNQIsQZPEgcCgABioSRigHkLkn+ByWGevy2eSAICgABiIc8OYKwA8xaQDfQEMH0DsxdBXQABRLJNwAJi0smrkNRMsARCBgABxEKSV5I2HgaWqpCMhZZ5CQKAACLWJqAFwAQG9ArQB73u5kCbSA0MgAAiqtwD+sZ54XZIiAH9oQD2CtBKfXFhCAMoSLDiAAggomwCpmNI/OMH+MtygAAiKvQU+HmBwWUvL4kcMZAIe/DxM9DHwFwFEQFlLHABiAkAAoiRWi1LoGXAUMWTRgACiJFubViAAKJfiwUggOhnE0AA0c8mgACin00AAUQ/mwACiH42AQQQ/WwCCCD62QQQYAAKbLSfiCgo0QAAAABJRU5ErkJggg==', |
---|
544 | 3 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACCElEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAGKhRPPDD18efPgCZOhLCAlwsOFXDBBA5Nj04cevSSevLrpwB8iAC9orSNTZGwKtxKULIIAYSc25G288Kt55EmKHvACPggAPkH3xxTuI7Fx/W38NOawaAQKINJuAwWU8cyPEB33u5kCb4OJJGw8D7QOG4Z38UKx6AQKI5BQBNAvo6rXhznBrIJ6b528LCdiDD15g1QgQQKTFE9BEXE5GthgrAAggqqXySSeuQewDBixWBQABxEQta5oOngcygMkPlxqAACIzPwEjH5jQISkQyAYyCKZygAAi0yZgtAOTO3Ik5Zlr47EGCAACiJHsmhCSxoDpe+PNh0A2ME3ujffEky4AAoiRKnVu8Mq9QMviDFSAmQyXGoAAok6KsJeXhPgPjxqAAGIismgAuhpY0OFS8ODjZ4JZCiCAWIgs64CBA0xjwDjHjHagOMQRBuLCeAwBCCCi/AQsfoARDkzKQJ8Bsw68PAX6FcgFCkJKQmA84TEEIICITRFA04t2noTbgemUXndz/FUUQACRlvaAoXTw4XNgSMJrDaBX/NXlcZVAyAAggBjp1rIECCD6tSMAAoh+NgEEEP1sAggg+tkEEED0swkggOhnE0AA0c8mgACin00AAUQ/mwACDAAW68RXFduHKgAAAABJRU5ErkJggg==', |
---|
545 | 4 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB8UlEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAKKyTRdfvPvw4xdWKYAAIt+mSSeuqUxcnbzxMFzk4IMXzgu3L7pwB6t6gABiIc+aop0ngSbKC/DkmWvDBZsOngeS/hpyWLUABBA5NgFNBFqjLyG0NtxZgIMN7iFg0NkrSACtx6oLIIBIDj2gHcBwA1owz98Wbg0oME9eBZJx+qq4NAIEEGk2PfzwBRJEve7myG4H+gboJ6AIrqADAoAAYiI1eoBJC2gcmokLL94GkvG4PQQEAAHERFK4AR0ODDGgh5DFgXZvuvEIT1qAAIAAIsGmieCYACY25OgBAqA1QMvwpAUIAAggFuI9BIwkeE6Ciz/4+BnoURDjw5fglXuBDHt5yTwLLUwTAAKIWJvgOR+SIrAmFohTcPkMIICItQmrM4FZatHF2xtvPAIGHTwLA9lYTQAIIEYKa3fjmRuBXulzN48zUMGvEiCAmCgsTyEh5oc31UEAQABRZBMkLQCDCy01YgUAAUSRTRtvPoQkNmIUAwQQpaGHJ7GhAYAAosgmYNoDhhuuxIYGAAKIkW4tS4AAol87AiCA6GcTQADRzyaAAKKfTQABRD+bAAKIfjYBBBD9bAIIIPrZBBBA9LMJIMAAL2Sb+wxF0loAAAAASUVORK5CYII=', |
---|
546 | 5 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB6UlEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAGKh3IiDD16gidgrSGAqAwggcmy6+OJd0sbDDz98waVgbbgzpmUAAUSOTUU7T8Kt0ZcQEuBgQ5aVF+DB6ieAACLZpkUX7gD9BDTubLo/SRoBAojkFHHw4XMgmW+uTapGgAAizaYPP35tvPEIyPDTkCPVJoAAIi30NoGt8deQA8YNMKoegGMLM6qwAoAAIs2mCy/fAkmgBSoTVwP9BxePM1ABhicw8vDoBQggRpJqjeCVe+G5B+IVoH3ABALkAtl74z3xWAYQQKTZBDQUaBMkHcNDDBiMwOwFlAIKAnMSLr0AAcRIlZoQaD3Qu0AGMOnj8hZAAFGn3INn1Qe4Cw6AAKKOTcipAxcACCAmIgNHpHPppBPX8BQckESBtRyCAIAAYiIyIQDJpoPnIQxMa4BSQEYe3oIDIICIsgmSVSGpHOgzePEKtBhY2gIRJNEDcxUeQwACiNi0BzQUaA2u+AA6pdfdHH9JARBAJKRyoDXAgNp48yE8DIH+AEaMv7o8kEFQO0AAMdKtZQkQQPRrRwAEEP1sAggg+tkEEED0swkggOhnE0AA0c8mgACin00AAUQ/mwACiH42AQQYAH9WrBYy0ynJAAAAAElFTkSuQmCC', |
---|
547 | 6 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACKElEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAGKh3IiHH748+PAFyLBXkMCjDCCAKLJp0olrCy/efgi2BgLiDFTyzbXlBXgwFQMEECN5Offii3dJGw9D7ACaqyDAA/QWhCvAwbY33hPTMoAAIsdPiy7caTp4/sOPX8Dg6nM3hxt68MGL5I2HgeJAJI+hCyCASPYT0DfOC7dDAgpoDZos0A6gz/QlhDA1AgQQaTYBDTKZuRFIYrUGPwAIINJSOSTQgMFVZ29IapgDBBALSakZGENABtA3H3/8ArIPPnwOSREG4sJAX+LXDhBAJIRe0c6TQNNB5koIbbzxCE0WGDdAF2CNIQgACCASbFKZuBoYdBA2MNXZy0tCzAWmkUknrwKlgFxg+salHSCAiA09YAqGWIPpdpCtChLABAm0EuhXfw05rCYABBAT8YkbEiVrw50xgwgoAimKkMsLNAAQQKSlPWBZACwCyCu6AAKINJse4HAy0CvA4MVfyAIEELE2QUIfbiKaNcAyEGINnrQHEEDE2gSMIYhlwJINmNYhqQNoB7A4h6QFoIK5/rZ4TAAIIBJSOdD04JV7IUkDDQB9A7QGfxQCBBDJJSzQQxtvPoSEIdBooB1x+qr460AIAAggRrq1LAECiH7tCIAAop9NAAFEP5sAAoh+NgEEEP1sAggg+tkEEED0swkggOhnE0AA0c8mgAADAPJW3sAgdjPCAAAAAElFTkSuQmCC', |
---|
548 | 7 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABo0lEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAGIhSfXFF+8+/PiFX42CAI+8AA+mOEAAsZBkjfPC7cSofFMejSkIEEAk2AR0qb+GHC4/AcWBTgEy6uwNsSoACCBGqpQRQGuCV+4F2hRnoNLnbo5VDUAAUSdFJG88DLTGXkEClzVAABBAVLCp6eD5gw9e6EsIzfW3xaMMIIAotWnRhTuTTlwT4GAD+gZI4lEJEEAU2QQMMaCHIKkA6Cf8igECiCKbinaeBKYFYIIEJgSCigECiHybgIEG9BMwxHpxpwJkABBAZNoETAKQcOslFD1wABBATOTlHmC4ARnAcAMiInUBBBATeent4YcvQK/gKg6wAoAAYiI7veWZa2MtSXEBgABiIiOfQspAYtIbMgAIICZSww2YFoCMfHNtIhMCHAAEEGk2HXz4nDwPAQFAAJFmEyRigB4iIx0BBBAj3VqWAAFEv3YEQADRzyaAAKKfTQABRD+bAAKIfjYBBBD9bAIIIPrZBBBA9LMJIIDoZxNAgAEAhMxxWX0cOi4AAAAASUVORK5CYII=', |
---|
549 | 8 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACJ0lEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAGKhRPOHH78uvngHZAhwsOlLCOFXDBBAZNp08MGLSSevAkm4iLwAT7y+ap6FFi4tAAHESEbOnXTiWtPB8xC2vYIEkAT6DOg/CHdtuDNWXQABRLJNQH8Er9wLZMQZqNTZGwLDDc16oCBWnwEEEMk2JW88vPHGI6xuh0hB2HvjPdFiDiCAWMhIBaBQkpeEizz88GXhxduLLtyBSEESCNyvcAAQQCTbBHQpMACBRgNDD24HRMpfQw7oAmDSUBDgAZJoGgECiOTQA5ruvHA70PlAV0M8AUl1QIsx/YEMAAKInFQO8RbBxIYGAAKIidT0bTxzI9AaoD8gCQzIBiYEeAzhAQABRGzoAc0CJm5IiQBPx0Bu0sbDwPAE+hLoM/yhBxBATMQnbqC5QLOAyReeXYAWQFIzUApYZOA3ASCAmIjMrZCCB+hwtFwCtDvPXBvIgKdAXAAggIiyCRJoQDvwFKMEowoggJhIzbOYgpBwA6Zy/NoBAogom4BZEhhKwJiHxBY8YwGTosnMjZD4yweHIR4AEEDEpj1ggVa88yRWbwGzVJ+7OWahgAYAAoiEMgJS9gCTBsRbQKOBdviry0MqDoIAIIAY6dayBAgg+rUjAAKIfjYBBBD9bAIIIPrZBBBA9LMJIIDoZxNAANHPJoAAop9NAAFEP5sAAgwAe4HslWhrrAcAAAAASUVORK5CYII=', |
---|
550 | 9 => 'iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACJ0lEQVR42mL8//8/A10AQAAxMdALAAQQ/WwCCCD62QQQQPSzCSCA6GcTQADRzyaAAGKhRPPDD18efPgCZOhLCAlwsOFXDBBA5Nj04cevRRfuLLx4+yHYGgiwV5DIM9cGkrh0AQQQI6k59+KLd0kbD0PskBfgURDgATIOPngBkZ3rb+uvIYdVI0AAkWYT0ALnhduBfgIGV529IdwHQJGmg+eBHgWG4Zl0f6whCRBApKWIop0nIdasDXdGDiig0UCLgSRQFu4/NAAQQEwkeQhiCsRQNFmgCNAFEGVYtQMEEAk2PYAZgSvagR7Cox0ggEiwCe4PrK4GRhIwsSArQwMAAUSCTcDAkQenNGDkIzsfyJ504howCvH7GCCASEt7G288St54GJK+galZgJ39wcfPm248glsMFD+b7o9VL0AAkZZzwXnFFugnYAAC/QEXz7PQAoYe0L54fVVcegECiJG8OhfoOXjmBQYX0Bqg9XgyExAABBCZ5R5yQQBMCJNOXgX5zFwbT+kHEECUluVAnwELJ0h2BoYhHpUAAURRWQ7MyMlga4BeAZYa+BUDBBALqXEDDDdg3ADt2HjzITB6IKm/z92cYK0BEEAkpAiRzqWYgnEGKlgLJ0wAEEAk2AT0wcSTVx/Cqj5gkgOmaUheJgYABBAj3VqWAAFEv3YEQADRzyaAAKKfTQABRD+bAAKIfjYBBBD9bAIIIPrZBBBA9LMJIIDoZxNAgAEAbJjWW8gqdR8AAAAASUVORK5CYII=', |
---|
551 | ); |
---|
552 | $im = imagecreatefromstring(base64_decode($png[$char])); |
---|
553 | |
---|
554 | |
---|
555 | $string = "$char-$i"; |
---|
556 | $query = md5($string); |
---|
557 | $dossier = sous_repertoire(_DIR_VAR, 'cache-image'); |
---|
558 | $fichier = "$dossier$query.png"; |
---|
559 | |
---|
560 | //if (file_exists($fichier)){ |
---|
561 | // $image = $fichier; |
---|
562 | //} |
---|
563 | //else{ |
---|
564 | imagepng($im, $fichier); |
---|
565 | imagedestroy($im); |
---|
566 | $image = $fichier; |
---|
567 | //} |
---|
568 | |
---|
569 | if ($i == '0' ){ |
---|
570 | return "<img src='".$image."' alt='" . str_replace('"', '', ('Si vous ne voyez aucun chiffre lisible, utilisez le formulaire de contact pour signaler le problème')) . "' border='0' />"; |
---|
571 | } |
---|
572 | else{ |
---|
573 | return "<img src='".$image."' alt='' border='0' />"; |
---|
574 | } |
---|
575 | |
---|
576 | } |
---|
577 | |
---|
578 | function show_captcha_img($code = '',$i = '') |
---|
579 | { |
---|
580 | global $con; |
---|
581 | |
---|
582 | $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR'); |
---|
583 | $browser = substr($_SERVER['HTTP_USER_AGENT'], 0, 100); |
---|
584 | |
---|
585 | // 'captcha_ip_address = \'' . $con->escapeStr($ip) . '\' AND '. |
---|
586 | |
---|
587 | $strReq = "SELECT captcha_solution FROM spip_captcha WHERE captcha_code = '$code' AND captcha_user_agent = '$browser'"; |
---|
588 | $s = spip_query($strReq); |
---|
589 | $row = spip_fetch_array($s); |
---|
590 | $solution = $row['captcha_solution']; |
---|
591 | list($GLOBALS['captcha_level'], $solution) = split('-', $solution); |
---|
592 | //$i = intval($_GET['i']); |
---|
593 | $istr = $i; |
---|
594 | $i = intval($i); |
---|
595 | $number = substr($solution, $i, 1 ); |
---|
596 | |
---|
597 | if ( $GLOBALS['captcha_level'] == 1 ){ |
---|
598 | return make_png_char($number, $istr); |
---|
599 | } |
---|
600 | if ( $GLOBALS['captcha_level'] == 2 ){ |
---|
601 | return make_gd_img($solution); |
---|
602 | } |
---|
603 | |
---|
604 | } |
---|
605 | ?> |
---|