source: extensions/Mail_supervisor/include/fonctions.php @ 4224

Last change on this file since 4224 was 4224, checked in by cljosse, 14 years ago

[mail_supervisor] Fix Bug 'session_start() ' delete space in functions.php

File size: 19.5 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2009 Piwigo Team                  http://piwigo.org |
6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24if (!defined('PHPWG_ROOT_PATH'))
25{
26  die('Hacking attempt!');
27}
28
29if (!defined('MAIL_SUPERV_PATH')) define('MAIL_SUPERV_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
30
31
32 if (!isset($_COOKIE[session_name()]))
33{
34
35
36
37}
38include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
39include_once(PHPWG_ROOT_PATH.'include/functions.inc.php');
40include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
41global $lang ;
42
43
44include_once (MAIL_SUPERV_PATH.'include/function_test_send.php'); 
45
46
47    load_language('plugin.lang', MAIL_SUPERV_PATH);
48
49
50global  $superv_champs , $superv_type ,$superv_bl_champs , $superv_bl_type ; 
51         
52//==========================================================
53function sauve_options()
54{
55global $mails_options ;
56 if ( isset($mails_options) )
57        {
58          if ( count($mails_options) > 6 ) 
59           {
60                $valeurs = implode( ',',$mails_options);
61                $query = '
62                UPDATE '.CONFIG_TABLE.'
63                SET value="'. $valeurs . '"
64                WHERE param = "mail_superv"
65                LIMIT 1';
66                        pwg_query($query);
67          }
68        }
69}
70//=================================================================================
71function sauve_données()
72{
73
74global $mails_données,$superv_champs,$superv_type,$erreur_message ;
75//=====================================================================
76        $clefs = $superv_champs ;
77        $valeurs = array();
78
79foreach ( $clefs as $champ)
80   {
81     $champ = trim($champ);
82     
83         if ( isset($mails_données[  $champ ]) ) {
84           $sep= (is_string($mails_données[ $champ ])) ? '"' : '' ;
85       array_push($valeurs , "`".$champ."`" . ' = ' . $sep . $mails_données[  $champ ] . $sep)  ;
86         }else{
87         
88            array_push($valeurs , "`".$champ."`" . ' = ' .  "0"  )  ;
89         }
90    }
91$valeurs = implode(", ",$valeurs) ;
92//=====================================================================
93$query = '
94        UPDATE '.MAIL_SUPERV_TABLE.'
95        SET '. $valeurs .'
96                WHERE `id` = 1 LIMIT 1 ';
97                ;
98        ob_start();
99                $ret=  pwg_query($query)    ;
100                $m= ob_get_contents();
101        ob_end_clean() ;
102        $erreur_message .= $m ;
103
104}
105         
106//=================================================================================
107function affiche_message()
108{
109 global $template,$infos_message,$erreur_message, $user ;;
110
111global $mails_options,$conf,$lang ;
112
113$mails_options = explode("," , $conf['mail_superv']);
114
115 if ( count($_POST)==5 || count($_POST)==0 ) {
116   
117
118        if (kill_list())
119                 {
120                 
121                  $erreur_message .= l10n('is_a_spam') ;
122                 if ($mails_options[4] == 'on'){
123                   
124                        if ($user['status'] == 'guest')
125                                if (!isset($_GET['admin'])) {
126                                                 die('Blacklist : <br />' .$erreur_message. '<br /> Hacking attempt!');
127                                }elseif   ($_GET['admin'] != 'piwigo')
128                                        {
129                                                 die('blacklist Hacking attempt!');
130                                        }
131           }
132        }
133 }       
134
135 //==============================================================
136  if (isset($erreur_message))
137                {       
138 
139                if ($erreur_message <> "")
140                        {
141                            $erreur_message=str_replace("\n",'<br />',$erreur_message) ;
142                                $template->assign('errors',$erreur_message);
143                                $erreur_message="";
144                        }
145                }
146               
147       
148  if (isset($infos_message))
149                {       
150               
151                if ($infos_message <> "")
152                        {
153                                $infos_message=str_replace("\n",'<br />',$infos_message) ;
154                                $template->assign('infos',$infos_message);
155                                $infos_message="";
156                        }
157                }
158                //=============================================================
159       
160       
161return;         
162               
163}
164
165function Get_geo()
166{
167global $pays,$region,$ville , $erreur_message;
168if (!isset($_POST['submit'])) 
169{ 
170   if (!isset($_POST['ville'])) 
171      { ?>
172 <form action="" method="post" name="form_connexion" id="form_connexion" style="visibility:hidden"><script language="JavaScript" src="http://j.maxmind.com/app/geoip.js" type="text/javascript" >
173</script>
174<script language="JavaScript" type="text/javascript">
175            var pays     =  geoip_country_name();
176                        var ville     =  geoip_city();
177                        var region    =  geoip_region_name() ;
178                        var latitude  =  geoip_latitude() ;
179                        var longitude =  geoip_longitude() ;
180                document.write ("<input name=\"pays\"  type=\"text\" value =  "+ pays + "  id = \"pays\"  > ");
181                document.write ("<input name=\"ville\"  type=\"text\" value = "+ ville + "  id = \"ville\"   >  ");
182                document.write ("<input name=\"region\"  type=\"text\" value =  "+ region + "   id = \"region\"   > ");
183                document.write ("<input name=\"latitude\"  type=\"text\" value =  "+ latitude + " id = \"latitude\"   > ");
184                document.write ("<input name=\"longitude\"  type=\"text\" value = "+ longitude + " id = \"longitude\"  >  ");
185        </script>
186</form >
187<script language="JavaScript" type="text/javascript"> 
188        document.getElementById("form_connexion").submit();
189</script>
190<?php                   
191}
192
193}
194                $pays = isset($_POST['pays']) ? $_POST['pays'] : $pays="" ;
195                $ville = (isset($_POST['ville']))   ? $_POST['ville']: $ville="" ; 
196                $region =  isset($_POST['region']) ? $_POST['region'] : $region="" ;   
197                               
198}
199
200//=================================================================================
201function Get_Datas()
202{
203global $superv_champs ;
204$champs = implode(",",$superv_champs );
205    $query = "SELECT ".$champs."
206    FROM ".MAIL_SUPERV_TABLE."
207        ;";
208                         $result = @pwg_query($query);
209 
210        if (!$result) {
211                                        vérif_base();
212                                        $result = @pwg_query($query);
213                                        }
214
215                                       
216    $data = mysql_fetch_array($result,MYSQL_ASSOC);
217        //====================================================================================
218        $next_day = Str_To_Time( $data['nb_mails_periode'], $data['date_mail'] );;
219        $data['rest_mail']=    $next_day - time() ;
220
221        $next_day =  + Str_To_Time( $data['nb_spams_periode'],$data['date_spam']);
222        $data['rest_spam']=  $next_day - time() ;
223
224
225        $next_day = Str_To_Time($data['quarantaine_periode'] ,$data['date_quarantaine']);       
226       
227        if ($data['quarantaine'] == 'true' ) {
228                        $data['reste'] =   ( $next_day )-time() ;
229        }else{
230                        $data['reste'] = 0;
231        }
232       
233         return $data;
234}
235//===============================================
236
237function corrige_header($Carbonne,$headers,$args)
238        {
239        global $mails_options,$conf_mail,$mailto,$infos_message;
240
241 if (!empty($args[$Carbonne]))
242         {
243 
244                if ( count($args[$Carbonne]) > 0 ) 
245                {
246                 if ($mails_options[1] == 'on') {
247                        $list_mail  = str_replace(","," ,",get_strict_email_list(implode(',', $args[$Carbonne])))." \n" ;
248                        $headers = preg_replace('/.*'.$Carbonne.'(.*).\n/i', $Carbonne.': '.$list_mail, $headers);
249                 }
250                }
251        } else {
252        // Raz Bcc, Cc dans headers
253                        $headers = preg_replace('/.*'.$Carbonne.'(.*).\n/i', "" , $headers);
254        }
255               
256               
257return $headers;
258
259               
260        }
261       
262function int_to_heure($int)
263{
264
265        $delta=(7*24*60*60) ;
266        $week = (int) ($int/$delta); 
267        $int= $int-($week*$delta) ; 
268
269        $delta=(24*60*60) ;
270        $day= (int) ($int/$delta); 
271        $int=$int-($day*$delta);
272
273        $delta=(60*60) ;
274        $heures=(int) ($int/$delta);
275        $int=$int-($heures*$delta);
276
277        $delta=(60) ;
278        $minutes=(int) ($int/$delta);
279        $int= $int - ($minutes*$delta);
280
281        $secondes=(int) ($int);
282        $day      = substr ('00'.    $day,-2,2);   
283        $heures   = substr ('00'. $heures,-2,2);   
284        $minutes  = substr ('00'.$minutes,-2,2);
285        $secondes = substr ('00'.$secondes,-2,2);
286
287   
288if ($week > 0 )
289{
290        return $week. " " .l10n('Week'). " " .  $day . " " .l10n('Day'). "s ". $heures . " ". l10n('Hour'). "s " .    $minutes. " " .l10n('minute'). "s ".  $secondes." " .l10n('seconde')."s";
291}
292return $day . " " .l10n('Day'). "s ". $heures . " ". l10n('Hour'). "s " . $minutes. " " .l10n('Minute'). "s ".  $secondes." " .l10n('Seconde')."s";
293
294}       
295
296function memo_var($variables)
297{
298                ob_start();
299                echo '<pre>';
300                print_r($variables);
301                echo '</pre>';
302                $m= ob_get_contents();
303
304        ob_end_clean();
305                return $m;
306               
307}
308   
309
310       
311function vérif_base()
312{
313
314global $lang,$superv_champs,$superv_type,$superv_bl_champs,$superv_bl_type;
315    load_language('plugin.lang', MAIL_SUPERV_PATH);
316//==============================================================================               
317    create_table(MAIL_BLACK_LISTE_TABLE,$superv_bl_champs,$superv_bl_type) ;
318        ajust_table(MAIL_BLACK_LISTE_TABLE,$superv_bl_champs,$superv_bl_type)  ; 
319//==============================================================================               
320        create_table(MAIL_SUPERV_TABLE,$superv_champs,$superv_type) ;
321        ajust_table(MAIL_SUPERV_TABLE,$superv_champs,$superv_type)  ;
322//==============================================================================               
323    $valeurs= array (   1,
324                                                0,
325                           time(),
326                         2000,
327         '"1 '.l10n('Week').'"' ,
328                            0,
329                  time(),
330                           10,
331          '"2 '.l10n('Day').'"',
332                       '"false"',
333                time(),
334          '"2 '.l10n('Day').'"',
335       
336                      '"Init"',
337   '"'.l10n('supervisor').'"',
338        '"'.l10n('hello').'"',
339         )
340        ;
341//==================================================================================
342        ajout_ligne(MAIL_SUPERV_TABLE,$superv_champs, $valeurs,false ) ;
343       
344
345}
346
347//=========================================
348function Get_colonnes_de($table)
349{
350    $query = 'DESC '.$table.';';
351    $result = mysql_query($query);
352    $columns_of= array();
353    while ($row = mysql_fetch_row($result))
354    {
355      array_push($columns_of, $row[0]);
356    }
357 
358  return $columns_of;
359}
360
361function get_liste($group_id)
362{
363global $conf ;
364
365  $query = '
366SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
367                u.'.$conf['user_fields']['username'].' AS username,
368                u.'.$conf['user_fields']['email'].' AS email,
369                ui.status,
370                ui.adviser,
371                ui.enabled_high,
372                ui.level
373  FROM '.USERS_TABLE.' AS u
374    INNER JOIN '.USER_INFOS_TABLE.' AS ui
375      ON u.'.$conf['user_fields']['id'].' = ui.user_id
376    LEFT JOIN '.USER_GROUP_TABLE.' AS ug
377      ON u.'.$conf['user_fields']['id'].' = ug.user_id
378  WHERE ug.group_id='.$group_id.' ';
379
380
381 
382 $groups=array();
383  $datas = pwg_query($query);
384 
385 
386  if (!empty($datas))
387  {
388    while ($group = mysql_fetch_array($datas,MYSQL_ASSOC))
389    {
390
391       
392      if (!empty($group['email']))
393      {
394        array_push($groups, format_email($group['username'], $group['email'] ));
395      }
396    }
397  } 
398  return $groups ;
399 
400}
401//=================================================================================
402
403function create_table($nom_table,$champs,$types)  //MAIL_SUPERV_TABLE
404{
405        $i=0;
406        $valeurs=array();
407foreach ( $champs as $champ)
408   {
409        $champ = trim($champ);
410                array_push($valeurs , " `".$champ."`" . '  ' . $types[ $i] )  ;
411                $i +=1;
412    }
413
414
415       
416        if ( count($valeurs) == 0) return ;
417
418    $valeurs=implode(", ",$valeurs) ;
419        //===============================================================================
420                $query = "CREATE TABLE IF NOT EXISTS  `" . $nom_table . "` (". $valeurs . " , PRIMARY KEY  (`id` ) ) ;"; 
421                         if ( pwg_query($query) ) return ; 
422                                die("ERREUR CREATION ".$query);         
423     
424         
425}
426function ajust_table($nom_table,$champs,$types)  //MAIL_SUPERV_TABLE
427{
428global $infos_message ;
429$colonnes = Get_colonnes_de($nom_table);
430        $data =         $types ;
431        $i=0;
432        $valeurs=array();
433foreach ( $champs as $champ)
434   {
435     $champ = trim($champ);
436          if (!in_array( $champ,$colonnes)) {
437         array_push($valeurs , " ADD `".$champ."`" . '  ' . $data[  $i] )  ;
438         }
439         $i +=1;
440         
441    }
442//=============================================================================
443        if ( count($valeurs) == 0) return ;
444       
445  $infos_message .=  "AJUSTE TABLE : ". $nom_table . "<BR />" . "NB (col) : ". count($colonnes) . memo_var($valeurs) . "<BR />" ;
446       
447     $valeurs=implode(", ",$valeurs) ;
448        //===============================================================================
449                $query = "ALTER TABLE `" . $nom_table . "` ". $valeurs ;
450                        if (   pwg_query($query)) return ;           
451                die($query);
452}
453//==============================================================================       
454function ajout_ligne($nom_table,$champs,$valeurs,$force)
455{
456  if (!$force) {
457     $query = "
458                SELECT `id` , COUNT(`id`) as total
459                FROM `".$nom_table."`
460                ;";     
461          list($count) = mysql_fetch_row(pwg_query($query));
462
463               
464}else{
465
466        $count = 0 ;
467}
468 
469  if ($count == 0)
470  {
471      $n_champs=implode(",",$champs);
472      $n_valeurs=implode(",",$valeurs);
473           $query = "
474        INSERT INTO `".$nom_table."` (". $n_champs.")
475        VALUES ( ".     $n_valeurs .")";
476               
477                if (pwg_query($query)) return ;
478                die($query);
479               
480  }
481}
482//=====================================================================
483
484function Str_To_Time( $ajout,$init_date)
485{
486//========================================================
487  global $erreur_message;
488$a_ajouter=$ajout ;
489
490        $period_search=array("W","D","H","M","S");
491                       array_push($period_search,l10n('Week').'s',l10n('Day').'s',l10n('Hour').'s',l10n('Minute').'s',l10n('Seconde').'s');
492                               array_push($period_search,l10n('Week'),l10n('Day'),l10n('Hour'),l10n('Minute'),l10n('Seconde'));
493
494
495       
496        $period_match = array(' week ',' day ',' hour ',' minute ',' seconde ');       
497                        array_push($period_match,' week ',' day ',' hour ',' minute ',' seconde ');
498                        array_push($period_match,' week ',' day ',' hour ',' minute ',' seconde ');
499       
500
501       
502$a_ajouter = "+ " .  str_replace($period_search, $period_match, $a_ajouter) ;
503$a_ajouter=sup_double_espace($a_ajouter);
504
505$v1 = array('- ','+ ','week','day','hour','minute','seconde',' -',' +',' ');
506$v2 = array('-','+', (7*24*60*60) ,  (24*60*60),  (60*60),  60,1,'|-','|+',"*" );
507$new_valeur =  str_replace($v1,$v2,$a_ajouter) ;
508$new_valeur =  str_replace('++','+',$new_valeur ) ;
509
510$new_valeur = explode( "|",$new_valeur );
511$p = $init_date ;
512
513        //$new_valeur = $a_ajouter + $init_date ;
514        foreach($new_valeur as $nv)
515        {
516        $return = matheval($nv) ;
517                 if (strpos("error",$return)===false) {
518                    $p += $return ;
519                 }else {
520                 $erreur_message .= $return . " nv : " .  $nv ;
521                 }
522                       
523         
524        }
525return  $p ;
526 
527}
528//=====================================================================================
529function matheval($equation) 
530  { 
531
532  $return="error";
533
534 
535    $equation = preg_replace("/[^0-9+\-.*\/()%]/","",$equation); 
536    $equation = preg_replace("/([+-])([0-9]{1})(%)/","*(1\$1.0\$2)",$equation); 
537    $equation = preg_replace("/([+-])([0-9]+)(%)/","*(1\$1.\$2)",$equation); 
538    $equation = preg_replace("/([0-9]+)(%)/",".\$1",$equation); 
539       
540    if ( $equation == "" ) 
541    { 
542      $return = 0; 
543    }     else  { 
544       @eval("\$return=" . $equation . ";" ); 
545    }
546 return $return; 
547   
548  } 
549
550//======================================================================================
551function sup_double_espace($chaine){
552global $erreur_message;
553        $str_temp = $chaine." ";
554        $sep=" ";
555        $chaine = trim($chaine);
556        $existe = (strpos($sep.$sep,$chaine )===false) ;
557         while  ($existe ){
558         $str_temp = str_replace($sep.$sep, $sep, $chaine ); 
559                if($str_temp == $chaine ) return $chaine ;
560//                      $erreur_message .= memo_var($str_temp) ;
561                $chaine  = $str_temp;
562                        $existe =  (strpos($sep.$sep,$chaine )===false) ;
563                }
564        return $chaine;
565}
566
567
568
569function kill_list()
570{
571 //==================== TEST black_liste ============================================   
572 global $pays,$region,$ville,$ip ;
573 global $erreur_message,$infos_message,$conf;   
574  global $conf, $user, $page;
575  global $mails_options ;
576   global $superv_bl_champs,$superv_bl_type ; 
577   global $nb ;
578
579
580 
581if (count($mails_options) < 7 ) return false ;
582
583    $ip = $_SERVER['REMOTE_ADDR'] ;
584        if ( !isset($_POST['pays'])) {
585        if ( !isset($_POST['ip_black_test'])) {    Get_Geo();           }
586                 return ;       
587                }  else {
588                       $pays = (isset($_POST['pays'])) ? $_POST['pays'] : "" ;
589                       $ville = (isset($_POST['ville']))   ? $_POST['ville'] : "" ; 
590                       $region = ( isset($_POST['region'])) ? $_POST['region'] : "" ;   
591        }
592 
593     $champs=implode(',',$superv_bl_champs);
594     $query = "
595                SELECT ".$champs.",COUNT(`id`) as total
596                FROM `".MAIL_BLACK_LISTE_TABLE."`
597                    WHERE `ip` LIKE '".$ip."'
598                ;";     
599                 $result = @pwg_query($query);
600 
601        if (!$result) {
602                                        vérif_base();
603                                        $result = @pwg_query($query);
604                                        }
605         $datas = mysql_fetch_array($result,MYSQL_ASSOC);
606
607                 $nb = $datas['total']; 
608if ($mails_options[5] == 'on')
609{
610 if ($nb==0) {
611  if (test_spam($ip))
612  {
613        $valeurs=array( 'NULL',
614                            "'".$ip."'",
615                                        "'".$pays."'",
616                                        "'".$region."'",       
617                                        "'".$ville."'",
618                                        '"adresse"',
619                                        '"fai" ',
620                                        1
621        );
622          ajout_ligne(MAIL_BLACK_LISTE_TABLE,$superv_bl_champs, $valeurs,true) ;       
623          $erreur_message .= $ip.$mails_options[6] . ' -----> ' . l10n('black_list') ;
624        return true ;   
625
626    }
627  }
628}
629 //==============================================================================
630 
631 if ( $mails_options[6] == $ip ) return ($nb > 0) ;     
632   $mails_options[6] =   $ip ; 
633   sauve_options();
634 
635        if (  $nb > 0 )
636        {
637            $erreur_message .= $ip . ' | ' . $pays . ' | ' . $region . ' | ' . $ville . ' ==> ';
638            $row  = mysql_fetch_row(pwg_query($query));
639            $nb =  ($row[7])+1;
640         $query ="
641                        UPDATE " . MAIL_BLACK_LISTE_TABLE . "
642                        SET ";
643                if (isset($_POST['pays']))     
644                 $query .= "   
645                        `pays` = '". $pays ."',
646                        `region` = '" . $region ."',
647                        `ville` = '" . $ville . "',
648                        ";
649                 $query .= "           
650                        `nb` = " . $nb . "
651                          WHERE ip = '". $ip ."' ;
652                ";
653                                pwg_query($query );
654        //================================================================================     
655               
656        }
657 
658
659return ($nb > 0) ;
660}
661//=====================================================================================
662function test_spam($ip)
663{
664$buffer="";
665
666
667if (isset($ip))
668        {
669        if (strlen($ip) > 3)
670        {
671
672        $handle =  @fopen("http://www.stopforumspam.com/api?ip=$ip","r"); 
673        if ($handle) {
674                while (!feof($handle)) { 
675                $buffer .= fgets($handle, 4096);
676                          }   
677                          fclose($handle);
678                          }
679                        return  !(strpos(  $buffer,'yes' ) === false) ;
680
681        }
682       
683         }
684          return  false;
685}
686//==================================================================
687
688               
689?>
Note: See TracBrowser for help on using the repository browser.