source: spip-zone/_plugins_/_dev_/forms_et_tables_captcha/inc/ftcaptcha_functions.php @ 15242

Last change on this file since 15242 was 15242, checked in by ventrea@…, 14 years ago

suite de 15241 faut tout sélectionner pour commiter dans svnx ...

File size: 24.6 KB
Line 
1<?php
2
3
4function maxi(){return 50;}
5
6function encode($str)
7{
8                return (dc_encoding == 'UTF-8') ? utf8_encode($str) : htmlentities($str);
9}
10
11function nombres($i)
12        {
13                $arr = array(
14                        0 =>'z&eacute;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
69function 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&egrave;me'; break;
76                        case 2  : $res = 'le troisi&egrave;me'; break;
77                        case 3  : $res = 'le quatri&egrave;me'; break;
78                        case 4  : $res = 'le cinqui&egrave;me'; break;
79                        case 5  : $res = 'le sixi&egrave;me'; break;
80                        case 6  : $res = 'le septi&egrave;me'; break;
81                        case 7  : $res = 'le huiti&egrave;me'; break;
82                        case 8  : $res = 'le neuvi&egrave;me'; break;
83                        case 9 : $res = 'le dixi&egrave;me'; break;
84                        case 10 : $res = 'le onzi&egrave;me'; break;
85                        case 11 : $res = 'le douzi&egrave;me'; break;
86                        case 12 : $res = 'le treizi&egrave;me'; break;
87                        case 13 : $res = 'le quatorzi&egrave;me'; break;
88                        case 14 : $res = 'le quinzi&egrave;me'; break;
89                        case 15 : $res = 'le seizi&egrave;me'; break;
90                        case 16 : $res = 'le dix-septi&egrave;me'; break;
91                        case 17 : $res = 'le dix-huiti&egrave;me'; break;
92                        case 18 : $res = 'le dix-neuvi&egrave;me'; break;
93                        case 19 : $res = 'le vingti&egrave;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
104function 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
120function 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
128function 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
136function 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
143function 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&egrave;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&eacute;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
208function 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&egrave;s '. nombres($str[$nbr]). '&nbsp;? (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]). '&nbsp;? (chiffres) ') , $str[$nbr-1]);
227                }
228        }
229
230
231
232function 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&egrave;re du mot "%s" ?'), ($nbr), encode($str)) , $str[$nbr]);
247        }
248
249
250
251function 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
266function captcha_level($l = 0)
267        {
268                $l = intval($l);
269                $GLOBALS['captcha_level'] = ( ($l < 0) || ($l > 2) ) ? 0 : $l;
270        }
271
272
273
274function 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&egrave;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&egrave;me')) . '" title="' . str_replace('"', '', ('Si vous ne voyez aucun chiffre lisible, utilisez le formulaire de contact pour signaler le probl&egrave;me')) . '" border="0" />';
336                                }
337                                //echo '<br /><strong>' . ('Captcha anti-spam') . '&nbsp;: </strong>';
338                                $result .= '<br /><span class="spip_form_label">recopiez le code num&eacute;rique indiqu&eacute; ci-dessus</span>';
339                        }
340
341                return $result;
342        }
343
344
345
346function 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
377function 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
390function 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
407function 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
447function 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
537function 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&egrave;me')) . "' border='0' />";
571                }
572                else{
573                        return "<img src='".$image."' alt='' border='0' />";
574                }
575               
576        }
577
578function 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?>
Note: See TracBrowser for help on using the repository browser.