Artifact d25c56997fbd39509c0f4023f78980d242416c24:


0000: 3c 3f 70 68 70 0a 0a 6e 61 6d 65 73 70 61 63 65  <?php..namespace
0010: 20 47 61 72 72 61 64 69 6e 3b 0a 0a 63 6c 61 73   Garradin;..clas
0020: 73 20 75 74 69 6c 73 0a 7b 0a 20 20 20 20 73 74  s utils.{.    st
0030: 61 74 69 63 20 70 72 6f 74 65 63 74 65 64 20 24  atic protected $
0040: 63 6f 75 6e 74 72 79 5f 6c 69 73 74 20 3d 20 6e  country_list = n
0050: 75 6c 6c 3b 0a 0a 20 20 20 20 73 74 61 74 69 63  ull;..    static
0060: 20 70 72 6f 74 65 63 74 65 64 20 24 67 32 78 20   protected $g2x 
0070: 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 73 74 61  = null;..    sta
0080: 74 69 63 20 70 72 69 76 61 74 65 20 24 66 72 65  tic private $fre
0090: 6e 63 68 5f 64 61 74 65 5f 6e 61 6d 65 73 20 3d  nch_date_names =
00a0: 20 5b 0a 20 20 20 20 20 20 20 20 27 4a 61 6e 75   [.        'Janu
00b0: 61 72 79 27 3d 3e 27 4a 61 6e 76 69 65 72 27 2c  ary'=>'Janvier',
00c0: 20 27 46 65 62 72 75 61 72 79 27 3d 3e 27 46 c3   'February'=>'F.
00d0: a9 76 72 69 65 72 27 2c 20 27 4d 61 72 63 68 27  .vrier', 'March'
00e0: 3d 3e 27 4d 61 72 73 27 2c 20 27 41 70 72 69 6c  =>'Mars', 'April
00f0: 27 3d 3e 27 41 76 72 69 6c 27 2c 20 27 4d 61 79  '=>'Avril', 'May
0100: 27 3d 3e 27 4d 61 69 27 2c 0a 20 20 20 20 20 20  '=>'Mai',.      
0110: 20 20 27 4a 75 6e 65 27 3d 3e 27 4a 75 69 6e 27    'June'=>'Juin'
0120: 2c 20 27 4a 75 6c 79 27 3d 3e 27 4a 75 69 6c 6c  , 'July'=>'Juill
0130: 65 74 27 2c 20 27 41 75 67 75 73 74 27 3d 3e 27  et', 'August'=>'
0140: 41 6f c3 bb 74 27 2c 20 27 53 65 70 74 65 6d 62  Ao..t', 'Septemb
0150: 65 72 27 3d 3e 27 53 65 70 74 65 6d 62 72 65 27  er'=>'Septembre'
0160: 2c 20 27 4f 63 74 6f 62 65 72 27 3d 3e 27 4f 63  , 'October'=>'Oc
0170: 74 6f 62 72 65 27 2c 0a 20 20 20 20 20 20 20 20  tobre',.        
0180: 27 4e 6f 76 65 6d 62 65 72 27 3d 3e 27 4e 6f 76  'November'=>'Nov
0190: 65 6d 62 72 65 27 2c 20 27 44 65 63 65 6d 62 65  embre', 'Decembe
01a0: 72 27 3d 3e 27 44 c3 a9 63 65 6d 62 72 65 27 2c  r'=>'D..cembre',
01b0: 20 27 4d 6f 6e 64 61 79 27 3d 3e 27 4c 75 6e 64   'Monday'=>'Lund
01c0: 69 27 2c 20 27 54 75 65 73 64 61 79 27 3d 3e 27  i', 'Tuesday'=>'
01d0: 4d 61 72 64 69 27 2c 20 27 57 65 64 6e 65 73 64  Mardi', 'Wednesd
01e0: 61 79 27 3d 3e 27 4d 65 72 63 72 65 64 69 27 2c  ay'=>'Mercredi',
01f0: 0a 20 20 20 20 20 20 20 20 27 54 68 75 72 73 64  .        'Thursd
0200: 61 79 27 3d 3e 27 4a 65 75 64 69 27 2c 27 46 72  ay'=>'Jeudi','Fr
0210: 69 64 61 79 27 3d 3e 27 56 65 6e 64 72 65 64 69  iday'=>'Vendredi
0220: 27 2c 27 53 61 74 75 72 64 61 79 27 3d 3e 27 53  ','Saturday'=>'S
0230: 61 6d 65 64 69 27 2c 27 53 75 6e 64 61 79 27 3d  amedi','Sunday'=
0240: 3e 27 44 69 6d 61 6e 63 68 65 27 2c 0a 20 20 20  >'Dimanche',.   
0250: 20 20 20 20 20 27 46 65 62 27 3d 3e 27 46 c3 a9       'Feb'=>'F..
0260: 76 27 2c 27 41 70 72 27 3d 3e 27 41 76 72 27 2c  v','Apr'=>'Avr',
0270: 27 4d 61 79 27 3d 3e 27 4d 61 69 27 2c 27 4a 75  'May'=>'Mai','Ju
0280: 6e 27 3d 3e 27 4a 75 69 6e 27 2c 20 27 4a 75 6c  n'=>'Juin', 'Jul
0290: 27 3d 3e 27 4a 75 69 6c 27 2c 27 41 75 67 27 3d  '=>'Juil','Aug'=
02a0: 3e 27 41 6f 75 74 27 2c 27 44 65 63 27 3d 3e 27  >'Aout','Dec'=>'
02b0: 44 c3 a9 63 27 2c 0a 20 20 20 20 20 20 20 20 27  D..c',.        '
02c0: 4d 6f 6e 27 3d 3e 27 4c 75 6e 27 2c 27 54 75 65  Mon'=>'Lun','Tue
02d0: 27 3d 3e 27 4d 61 72 27 2c 27 57 65 64 27 3d 3e  '=>'Mar','Wed'=>
02e0: 27 4d 65 72 27 2c 27 54 68 75 27 3d 3e 27 4a 65  'Mer','Thu'=>'Je
02f0: 75 27 2c 27 46 72 69 27 3d 3e 27 56 65 6e 27 2c  u','Fri'=>'Ven',
0300: 27 53 61 74 27 3d 3e 27 53 61 6d 27 2c 27 53 75  'Sat'=>'Sam','Su
0310: 6e 27 3d 3e 27 44 69 6d 27 5d 3b 0a 0a 20 20 20  n'=>'Dim'];..   
0320: 20 73 74 61 74 69 63 20 70 75 62 6c 69 63 20 66   static public f
0330: 75 6e 63 74 69 6f 6e 20 73 74 72 66 74 69 6d 65  unction strftime
0340: 5f 66 72 28 24 66 6f 72 6d 61 74 3d 6e 75 6c 6c  _fr($format=null
0350: 2c 20 24 74 73 3d 6e 75 6c 6c 29 0a 20 20 20 20  , $ts=null).    
0360: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73  {.        if (is
0370: 5f 6e 75 6c 6c 28 24 66 6f 72 6d 61 74 29 29 0a  _null($format)).
0380: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
0390: 20 20 20 20 20 20 24 66 6f 72 6d 61 74 20 3d 20        $format = 
03a0: 27 25 64 2f 25 6d 2f 25 59 20 c3 a0 20 25 48 3a  '%d/%m/%Y .. %H:
03b0: 25 4d 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  %M';.        }..
03c0: 20 20 20 20 20 20 20 20 24 64 61 74 65 20 3d 20          $date = 
03d0: 73 74 72 66 74 69 6d 65 28 24 66 6f 72 6d 61 74  strftime($format
03e0: 2c 20 24 74 73 29 3b 0a 20 20 20 20 20 20 20 20  , $ts);.        
03f0: 24 64 61 74 65 20 3d 20 73 74 72 74 72 28 24 64  $date = strtr($d
0400: 61 74 65 2c 20 73 65 6c 66 3a 3a 24 66 72 65 6e  ate, self::$fren
0410: 63 68 5f 64 61 74 65 5f 6e 61 6d 65 73 29 3b 0a  ch_date_names);.
0420: 20 20 20 20 20 20 20 20 24 64 61 74 65 20 3d 20          $date = 
0430: 73 74 72 74 6f 6c 6f 77 65 72 28 24 64 61 74 65  strtolower($date
0440: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
0450: 6e 20 24 64 61 74 65 3b 0a 20 20 20 20 7d 0a 0a  n $date;.    }..
0460: 20 20 20 20 73 74 61 74 69 63 20 70 75 62 6c 69      static publi
0470: 63 20 66 75 6e 63 74 69 6f 6e 20 64 61 74 65 5f  c function date_
0480: 66 72 28 24 66 6f 72 6d 61 74 3d 6e 75 6c 6c 2c  fr($format=null,
0490: 20 24 74 73 3d 6e 75 6c 6c 29 0a 20 20 20 20 7b   $ts=null).    {
04a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 5f  .        if (is_
04b0: 6e 75 6c 6c 28 24 66 6f 72 6d 61 74 29 29 0a 20  null($format)). 
04c0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
04d0: 20 20 20 20 20 24 66 6f 72 6d 61 74 20 3d 20 27       $format = '
04e0: 64 2f 6d 2f 59 20 c3 a0 20 48 3a 69 27 3b 0a 20  d/m/Y .. H:i';. 
04f0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
0500: 20 20 24 64 61 74 65 20 3d 20 64 61 74 65 28 24    $date = date($
0510: 66 6f 72 6d 61 74 2c 20 24 74 73 29 3b 0a 20 20  format, $ts);.  
0520: 20 20 20 20 20 20 24 64 61 74 65 20 3d 20 73 74        $date = st
0530: 72 74 72 28 24 64 61 74 65 2c 20 73 65 6c 66 3a  rtr($date, self:
0540: 3a 24 66 72 65 6e 63 68 5f 64 61 74 65 5f 6e 61  :$french_date_na
0550: 6d 65 73 29 3b 0a 20 20 20 20 20 20 20 20 24 64  mes);.        $d
0560: 61 74 65 20 3d 20 73 74 72 74 6f 6c 6f 77 65 72  ate = strtolower
0570: 28 24 64 61 74 65 29 3b 0a 20 20 20 20 20 20 20  ($date);.       
0580: 20 72 65 74 75 72 6e 20 24 64 61 74 65 3b 0a 20   return $date;. 
0590: 20 20 20 7d 0a 0a 20 20 20 20 73 74 61 74 69 63     }..    static
05a0: 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e   public function
05b0: 20 73 71 6c 69 74 65 44 61 74 65 54 6f 46 72 65   sqliteDateToFre
05c0: 6e 63 68 28 24 64 2c 20 24 73 68 6f 72 74 20 3d  nch($d, $short =
05d0: 20 66 61 6c 73 65 29 0a 20 20 20 20 7b 0a 20 20   false).    {.  
05e0: 20 20 20 20 20 20 69 66 20 28 73 74 72 6c 65 6e        if (strlen
05f0: 28 24 64 29 20 3d 3d 20 31 30 20 7c 7c 20 24 73  ($d) == 10 || $s
0600: 68 6f 72 74 29 0a 20 20 20 20 20 20 20 20 20 20  hort).          
0610: 20 20 72 65 74 75 72 6e 20 5c 44 61 74 65 54 69    return \DateTi
0620: 6d 65 3a 3a 63 72 65 61 74 65 46 72 6f 6d 46 6f  me::createFromFo
0630: 72 6d 61 74 28 27 59 2d 6d 2d 64 27 2c 20 73 75  rmat('Y-m-d', su
0640: 62 73 74 72 28 24 64 2c 20 30 2c 20 31 30 29 29  bstr($d, 0, 10))
0650: 2d 3e 66 6f 72 6d 61 74 28 27 64 2f 6d 2f 59 27  ->format('d/m/Y'
0660: 29 3b 0a 20 20 20 20 20 20 20 20 65 6c 73 65 69  );.        elsei
0670: 66 20 28 73 74 72 6c 65 6e 28 24 64 29 20 3d 3d  f (strlen($d) ==
0680: 20 31 36 29 0a 20 20 20 20 20 20 20 20 20 20 20   16).           
0690: 20 72 65 74 75 72 6e 20 5c 44 61 74 65 54 69 6d   return \DateTim
06a0: 65 3a 3a 63 72 65 61 74 65 46 72 6f 6d 46 6f 72  e::createFromFor
06b0: 6d 61 74 28 27 59 2d 6d 2d 64 20 48 3a 69 27 2c  mat('Y-m-d H:i',
06c0: 20 24 64 29 2d 3e 66 6f 72 6d 61 74 28 27 64 2f   $d)->format('d/
06d0: 6d 2f 59 20 48 3a 69 27 29 3b 0a 20 20 20 20 20  m/Y H:i');.     
06e0: 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20     else.        
06f0: 20 20 20 20 72 65 74 75 72 6e 20 5c 44 61 74 65      return \Date
0700: 54 69 6d 65 3a 3a 63 72 65 61 74 65 46 72 6f 6d  Time::createFrom
0710: 46 6f 72 6d 61 74 28 27 59 2d 6d 2d 64 20 48 3a  Format('Y-m-d H:
0720: 69 3a 73 27 2c 20 24 64 29 2d 3e 66 6f 72 6d 61  i:s', $d)->forma
0730: 74 28 27 64 2f 6d 2f 59 20 48 3a 69 27 29 3b 0a  t('d/m/Y H:i');.
0740: 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 61 74 69      }..    stati
0750: 63 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f  c public functio
0760: 6e 20 6d 61 6b 65 54 69 6d 65 73 74 61 6d 70 46  n makeTimestampF
0770: 72 6f 6d 46 6f 72 6d 28 24 64 29 0a 20 20 20 20  romForm($d).    
0780: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
0790: 20 6d 6b 74 69 6d 65 28 24 64 5b 27 68 27 5d 2c   mktime($d['h'],
07a0: 20 24 64 5b 27 6d 69 6e 27 5d 2c 20 30 2c 20 24   $d['min'], 0, $
07b0: 64 5b 27 6d 27 5d 2c 20 24 64 5b 27 64 27 5d 2c  d['m'], $d['d'],
07c0: 20 24 64 5b 27 79 27 5d 29 3b 0a 20 20 20 20 7d   $d['y']);.    }
07d0: 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70 75 62  ..    static pub
07e0: 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 6d 6f 64  lic function mod
07f0: 69 66 79 44 61 74 65 28 24 73 74 72 2c 20 24 63  ifyDate($str, $c
0800: 68 61 6e 67 65 29 0a 20 20 20 20 7b 0a 20 20 20  hange).    {.   
0810: 20 20 20 20 20 24 64 61 74 65 20 3d 20 5c 44 61       $date = \Da
0820: 74 65 54 69 6d 65 3a 3a 63 72 65 61 74 65 46 72  teTime::createFr
0830: 6f 6d 46 6f 72 6d 61 74 28 27 59 2d 6d 2d 64 27  omFormat('Y-m-d'
0840: 2c 20 24 73 74 72 29 3b 0a 20 20 20 20 20 20 20  , $str);.       
0850: 20 24 64 61 74 65 2d 3e 6d 6f 64 69 66 79 28 24   $date->modify($
0860: 63 68 61 6e 67 65 29 3b 0a 20 20 20 20 20 20 20  change);.       
0870: 20 72 65 74 75 72 6e 20 24 64 61 74 65 2d 3e 66   return $date->f
0880: 6f 72 6d 61 74 28 27 59 2d 6d 2d 64 27 29 3b 0a  ormat('Y-m-d');.
0890: 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 61 74 69      }..    stati
08a0: 63 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f  c public functio
08b0: 6e 20 63 68 65 63 6b 44 61 74 65 28 24 73 74 72  n checkDate($str
08c0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  ).    {.        
08d0: 69 66 20 28 21 70 72 65 67 5f 6d 61 74 63 68 28  if (!preg_match(
08e0: 27 21 5e 28 5c 64 7b 34 7d 29 2d 28 5c 64 7b 32  '!^(\d{4})-(\d{2
08f0: 7d 29 2d 28 5c 64 7b 32 7d 29 24 21 27 2c 20 24  })-(\d{2})$!', $
0900: 73 74 72 2c 20 24 6d 61 74 63 68 29 29 0a 20 20  str, $match)).  
0910: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0920: 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20   false;..       
0930: 20 69 66 20 28 21 63 68 65 63 6b 64 61 74 65 28   if (!checkdate(
0940: 24 6d 61 74 63 68 5b 32 5d 2c 20 24 6d 61 74 63  $match[2], $matc
0950: 68 5b 33 5d 2c 20 24 6d 61 74 63 68 5b 31 5d 29  h[3], $match[1])
0960: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ).            re
0970: 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 20 20 20  turn false;..   
0980: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
0990: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 61  ;.    }..    sta
09a0: 74 69 63 20 70 75 62 6c 69 63 20 66 75 6e 63 74  tic public funct
09b0: 69 6f 6e 20 63 68 65 63 6b 44 61 74 65 54 69 6d  ion checkDateTim
09c0: 65 28 24 73 74 72 29 0a 20 20 20 20 7b 0a 20 20  e($str).    {.  
09d0: 20 20 20 20 20 20 69 66 20 28 21 70 72 65 67 5f        if (!preg_
09e0: 6d 61 74 63 68 28 27 21 5e 28 5c 64 7b 34 7d 2d  match('!^(\d{4}-
09f0: 5c 64 7b 32 7d 2d 5c 64 7b 32 7d 29 20 28 5c 64  \d{2}-\d{2}) (\d
0a00: 7b 32 7d 29 3a 28 5c 64 7b 32 7d 29 28 3f 3a 3a  {2}):(\d{2})(?::
0a10: 28 5c 64 7b 32 7d 29 29 3f 24 21 27 2c 20 24 73  (\d{2}))?$!', $s
0a20: 74 72 2c 20 24 6d 61 74 63 68 29 29 0a 20 20 20  tr, $match)).   
0a30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
0a40: 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20 20  false;..        
0a50: 69 66 20 28 21 73 65 6c 66 3a 3a 63 68 65 63 6b  if (!self::check
0a60: 44 61 74 65 28 24 6d 61 74 63 68 5b 31 5d 29 29  Date($match[1]))
0a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0a80: 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20  urn false;..    
0a90: 20 20 20 20 69 66 20 28 28 69 6e 74 29 20 24 6d      if ((int) $m
0aa0: 61 74 63 68 5b 32 5d 20 3c 20 30 20 7c 7c 20 28  atch[2] < 0 || (
0ab0: 69 6e 74 29 20 24 6d 61 74 63 68 5b 32 5d 20 3e  int) $match[2] >
0ac0: 20 32 33 29 0a 20 20 20 20 20 20 20 20 20 20 20   23).           
0ad0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a   return false;..
0ae0: 20 20 20 20 20 20 20 20 69 66 20 28 28 69 6e 74          if ((int
0af0: 29 20 24 6d 61 74 63 68 5b 33 5d 20 3c 20 30 20  ) $match[3] < 0 
0b00: 7c 7c 20 28 69 6e 74 29 20 24 6d 61 74 63 68 5b  || (int) $match[
0b10: 33 5d 20 3e 20 35 39 29 0a 20 20 20 20 20 20 20  3] > 59).       
0b20: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
0b30: 65 3b 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20  e;.        .    
0b40: 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 6d      if (isset($m
0b50: 61 74 63 68 5b 34 5d 29 20 26 26 20 28 28 69 6e  atch[4]) && ((in
0b60: 74 29 20 24 6d 61 74 63 68 5b 34 5d 20 3c 20 30  t) $match[4] < 0
0b70: 20 7c 7c 20 28 69 6e 74 29 20 24 6d 61 74 63 68   || (int) $match
0b80: 5b 34 5d 20 3e 20 35 39 29 29 0a 20 20 20 20 20  [4] > 59)).     
0b90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
0ba0: 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 72 65  lse;..        re
0bb0: 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d  turn true;.    }
0bc0: 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70 75 62  ..    static pub
0bd0: 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 67 65 74  lic function get
0be0: 52 65 71 75 65 73 74 55 52 49 28 29 0a 20 20 20  RequestURI().   
0bf0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21   {.        if (!
0c00: 65 6d 70 74 79 28 24 5f 53 45 52 56 45 52 5b 27  empty($_SERVER['
0c10: 52 45 51 55 45 53 54 5f 55 52 49 27 5d 29 29 0a  REQUEST_URI'])).
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
0c30: 72 6e 20 24 5f 53 45 52 56 45 52 5b 27 52 45 51  rn $_SERVER['REQ
0c40: 55 45 53 54 5f 55 52 49 27 5d 3b 0a 20 20 20 20  UEST_URI'];.    
0c50: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
0c60: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
0c70: 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74  e;.    }..    st
0c80: 61 74 69 63 20 70 75 62 6c 69 63 20 66 75 6e 63  atic public func
0c90: 74 69 6f 6e 20 67 65 74 53 65 6c 66 55 52 4c 28  tion getSelfURL(
0ca0: 24 6e 6f 5f 71 73 20 3d 20 66 61 6c 73 65 29 0a  $no_qs = false).
0cb0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 75      {.        $u
0cc0: 72 69 20 3d 20 73 65 6c 66 3a 3a 67 65 74 52 65  ri = self::getRe
0cd0: 71 75 65 73 74 55 72 69 28 29 3b 0a 0a 20 20 20  questUri();..   
0ce0: 20 20 20 20 20 69 66 20 28 73 74 72 70 6f 73 28       if (strpos(
0cf0: 24 75 72 69 2c 20 57 57 57 5f 55 52 49 29 20 3d  $uri, WWW_URI) =
0d00: 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 7b 0a  == 0).        {.
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 24 75 72 69              $uri
0d20: 20 3d 20 73 75 62 73 74 72 28 24 75 72 69 2c 20   = substr($uri, 
0d30: 73 74 72 6c 65 6e 28 57 57 57 5f 55 52 49 29 29  strlen(WWW_URI))
0d40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
0d50: 20 20 20 20 20 69 66 20 28 24 6e 6f 5f 71 73 20       if ($no_qs 
0d60: 26 26 20 28 73 74 72 70 6f 73 28 24 75 72 69 2c  && (strpos($uri,
0d70: 20 27 3f 27 29 20 21 3d 3d 20 66 61 6c 73 65 29   '?') !== false)
0d80: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
0d90: 20 20 20 20 20 20 20 20 24 75 72 69 20 3d 20 73          $uri = s
0da0: 75 62 73 74 72 28 24 75 72 69 2c 20 30 2c 20 73  ubstr($uri, 0, s
0db0: 74 72 70 6f 73 28 24 75 72 69 2c 20 27 3f 27 29  trpos($uri, '?')
0dc0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  );.        }..  
0dd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 57 57 57        return WWW
0de0: 5f 55 52 4c 20 2e 20 24 75 72 69 3b 0a 20 20 20  _URL . $uri;.   
0df0: 20 7d 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70   }..    static p
0e00: 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 64  ublic function d
0e10: 69 73 61 62 6c 65 48 74 74 70 43 61 63 68 69 6e  isableHttpCachin
0e20: 67 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  g().    {.      
0e30: 20 20 68 65 61 64 65 72 28 22 43 61 63 68 65 2d    header("Cache-
0e40: 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68  Control: no-cach
0e50: 65 2c 20 6d 75 73 74 2d 72 65 76 61 6c 69 64 61  e, must-revalida
0e60: 74 65 22 29 3b 0a 20 20 20 20 20 20 20 20 68 65  te");.        he
0e70: 61 64 65 72 28 22 45 78 70 69 72 65 73 3a 20 4d  ader("Expires: M
0e80: 6f 6e 2c 20 32 36 20 4a 75 6c 20 31 39 39 37 20  on, 26 Jul 1997 
0e90: 30 35 3a 30 30 3a 30 30 20 47 4d 54 22 29 3b 0a  05:00:00 GMT");.
0ea0: 20 20 20 20 20 20 20 20 68 65 61 64 65 72 28 27          header('
0eb0: 50 72 61 67 6d 61 3a 20 6e 6f 2d 63 61 63 68 65  Pragma: no-cache
0ec0: 27 29 3b 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20  ');.    }...    
0ed0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 66 75  public static fu
0ee0: 6e 63 74 69 6f 6e 20 72 65 64 69 72 65 63 74 28  nction redirect(
0ef0: 24 64 65 73 74 69 6e 61 74 69 6f 6e 3d 66 61 6c  $destination=fal
0f00: 73 65 2c 20 24 65 78 69 74 3d 74 72 75 65 29 0a  se, $exit=true).
0f10: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66      {.        if
0f20: 20 28 65 6d 70 74 79 28 24 64 65 73 74 69 6e 61   (empty($destina
0f30: 74 69 6f 6e 29 20 7c 7c 20 21 70 72 65 67 5f 6d  tion) || !preg_m
0f40: 61 74 63 68 28 27 2f 5e 68 74 74 70 73 3f 3a 5c  atch('/^https?:\
0f50: 2f 5c 2f 2f 27 2c 20 24 64 65 73 74 69 6e 61 74  /\//', $destinat
0f60: 69 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 7b 0a  ion)).        {.
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
0f80: 65 6d 70 74 79 28 24 64 65 73 74 69 6e 61 74 69  empty($destinati
0f90: 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  on)).           
0fa0: 20 20 20 20 20 24 64 65 73 74 69 6e 61 74 69 6f       $destinatio
0fb0: 6e 20 3d 20 57 57 57 5f 55 52 4c 3b 0a 20 20 20  n = WWW_URL;.   
0fc0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20           else.  
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64                $d
0fe0: 65 73 74 69 6e 61 74 69 6f 6e 20 3d 20 57 57 57  estination = WWW
0ff0: 5f 55 52 4c 20 2e 20 70 72 65 67 5f 72 65 70 6c  _URL . preg_repl
1000: 61 63 65 28 27 2f 5e 5c 2f 2f 27 2c 20 27 27 2c  ace('/^\//', '',
1010: 20 24 64 65 73 74 69 6e 61 74 69 6f 6e 29 3b 0a   $destination);.
1020: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
1030: 20 20 20 69 66 20 28 68 65 61 64 65 72 73 5f 73     if (headers_s
1040: 65 6e 74 28 29 29 0a 20 20 20 20 20 20 20 20 7b  ent()).        {
1050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68  .            ech
1060: 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
1070: 27 3c 68 74 6d 6c 3e 27 2e 0a 20 20 20 20 20 20  '<html>'..      
1080: 20 20 20 20 20 20 20 20 27 20 3c 68 65 61 64 3e          ' <head>
1090: 27 20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ' ..            
10a0: 20 20 27 20 20 3c 73 63 72 69 70 74 20 74 79 70    '  <script typ
10b0: 65 3d 22 74 65 78 74 2f 6a 61 76 61 73 63 72 69  e="text/javascri
10c0: 70 74 22 3e 27 20 2e 0a 20 20 20 20 20 20 20 20  pt">' ..        
10d0: 20 20 20 20 20 20 27 20 20 20 20 64 6f 63 75 6d        '    docum
10e0: 65 6e 74 2e 6c 6f 63 61 74 69 6f 6e 20 3d 20 22  ent.location = "
10f0: 27 20 2e 20 68 74 6d 6c 73 70 65 63 69 61 6c 63  ' . htmlspecialc
1100: 68 61 72 73 28 24 64 65 73 74 69 6e 61 74 69 6f  hars($destinatio
1110: 6e 2c 20 45 4e 54 5f 51 55 4f 54 45 53 2c 20 27  n, ENT_QUOTES, '
1120: 55 54 46 2d 38 27 2c 20 66 61 6c 73 65 29 20 2e  UTF-8', false) .
1130: 20 27 22 3b 27 20 2e 0a 20 20 20 20 20 20 20 20   '";' ..        
1140: 20 20 20 20 20 20 27 20 20 3c 2f 73 63 72 69 70        '  </scrip
1150: 74 3e 27 20 2e 0a 20 20 20 20 20 20 20 20 20 20  t>' ..          
1160: 20 20 20 20 27 20 3c 2f 68 65 61 64 3e 27 2e 0a      ' </head>'..
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 20                ' 
1180: 3c 62 6f 64 79 3e 27 2e 0a 20 20 20 20 20 20 20  <body>'..       
1190: 20 20 20 20 20 20 20 27 20 20 20 3c 64 69 76 3e         '   <div>
11a0: 27 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '..             
11b0: 20 27 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22   '     <a href="
11c0: 27 20 2e 20 68 74 6d 6c 73 70 65 63 69 61 6c 63  ' . htmlspecialc
11d0: 68 61 72 73 28 24 64 65 73 74 69 6e 61 74 69 6f  hars($destinatio
11e0: 6e 2c 20 45 4e 54 5f 51 55 4f 54 45 53 2c 20 27  n, ENT_QUOTES, '
11f0: 55 54 46 2d 38 27 2c 20 66 61 6c 73 65 29 20 2e  UTF-8', false) .
1200: 20 27 22 3e 43 6c 69 71 75 65 7a 20 69 63 69 20   '">Cliquez ici 
1210: 70 6f 75 72 20 63 6f 6e 74 69 6e 75 65 72 2e 2e  pour continuer..
1220: 2e 3c 2f 61 3e 27 2e 0a 20 20 20 20 20 20 20 20  .</a>'..        
1230: 20 20 20 20 20 20 27 20 20 20 3c 2f 64 69 76 3e        '   </div>
1240: 27 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '..             
1250: 20 27 20 3c 2f 62 6f 64 79 3e 27 2e 0a 20 20 20   ' </body>'..   
1260: 20 20 20 20 20 20 20 20 20 20 20 27 3c 2f 68 74             '</ht
1270: 6d 6c 3e 27 3b 0a 0a 20 20 20 20 20 20 20 20 20  ml>';..         
1280: 20 20 20 69 66 20 28 24 65 78 69 74 29 0a 20 20     if ($exit).  
1290: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 69 74              exit
12a0: 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
12b0: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20   return true;.  
12c0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
12d0: 20 68 65 61 64 65 72 28 22 4c 6f 63 61 74 69 6f   header("Locatio
12e0: 6e 3a 20 22 20 2e 20 24 64 65 73 74 69 6e 61 74  n: " . $destinat
12f0: 69 6f 6e 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  ion);..        i
1300: 66 20 28 24 65 78 69 74 29 0a 20 20 20 20 20 20  f ($exit).      
1310: 20 20 20 20 65 78 69 74 28 29 3b 0a 20 20 20 20      exit();.    
1320: 7d 0a 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70  }...    static p
1330: 72 6f 74 65 63 74 65 64 20 66 75 6e 63 74 69 6f  rotected functio
1340: 6e 20 5f 73 65 73 73 69 6f 6e 53 74 61 72 74 28  n _sessionStart(
1350: 24 66 6f 72 63 65 20 3d 20 66 61 6c 73 65 29 0a  $force = false).
1360: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66      {.        if
1370: 20 28 21 69 73 73 65 74 28 24 5f 53 45 53 53 49   (!isset($_SESSI
1380: 4f 4e 29 20 26 26 20 28 24 66 6f 72 63 65 20 7c  ON) && ($force |
1390: 7c 20 69 73 73 65 74 28 24 5f 43 4f 4f 4b 49 45  | isset($_COOKIE
13a0: 5b 73 65 73 73 69 6f 6e 5f 6e 61 6d 65 28 29 5d  [session_name()]
13b0: 29 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ))).        {.  
13c0: 20 20 20 20 20 20 20 20 20 20 73 65 73 73 69 6f            sessio
13d0: 6e 5f 73 74 61 72 74 28 29 3b 0a 20 20 20 20 20  n_start();.     
13e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
13f0: 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a  urn true;.    }.
1400: 0a 20 20 20 20 73 74 61 74 69 63 20 70 75 62 6c  .    static publ
1410: 69 63 20 66 75 6e 63 74 69 6f 6e 20 43 53 52 46  ic function CSRF
1420: 5f 63 72 65 61 74 65 28 24 6b 65 79 29 0a 20 20  _create($key).  
1430: 20 20 7b 0a 20 20 20 20 20 20 20 20 73 65 6c 66    {.        self
1440: 3a 3a 5f 73 65 73 73 69 6f 6e 53 74 61 72 74 28  ::_sessionStart(
1450: 74 72 75 65 29 3b 0a 0a 20 20 20 20 20 20 20 20  true);..        
1460: 69 66 20 28 21 69 73 73 65 74 28 24 5f 53 45 53  if (!isset($_SES
1470: 53 49 4f 4e 5b 27 63 73 72 66 27 5d 29 29 0a 20  SION['csrf'])). 
1480: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1490: 20 20 20 20 20 24 5f 53 45 53 53 49 4f 4e 5b 27       $_SESSION['
14a0: 63 73 72 66 27 5d 20 3d 20 5b 5d 3b 0a 20 20 20  csrf'] = [];.   
14b0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
14c0: 24 5f 53 45 53 53 49 4f 4e 5b 27 63 73 72 66 27  $_SESSION['csrf'
14d0: 5d 5b 24 6b 65 79 5d 20 3d 20 73 68 61 31 28 24  ][$key] = sha1($
14e0: 6b 65 79 20 2e 20 75 6e 69 71 69 64 28 24 6b 65  key . uniqid($ke
14f0: 79 2c 20 74 72 75 65 29 20 2e 20 74 69 6d 65 28  y, true) . time(
1500: 29 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  ));.        retu
1510: 72 6e 20 24 5f 53 45 53 53 49 4f 4e 5b 27 63 73  rn $_SESSION['cs
1520: 72 66 27 5d 5b 24 6b 65 79 5d 3b 0a 20 20 20 20  rf'][$key];.    
1530: 7d 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70 75  }..    static pu
1540: 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 43 53  blic function CS
1550: 52 46 5f 63 68 65 63 6b 28 24 6b 65 79 2c 20 24  RF_check($key, $
1560: 68 61 73 68 3d 6e 75 6c 6c 29 0a 20 20 20 20 7b  hash=null).    {
1570: 0a 20 20 20 20 20 20 20 20 73 65 6c 66 3a 3a 5f  .        self::_
1580: 73 65 73 73 69 6f 6e 53 74 61 72 74 28 29 3b 0a  sessionStart();.
1590: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 5f  .        if (is_
15a0: 6e 75 6c 6c 28 24 68 61 73 68 29 29 0a 20 20 20  null($hash)).   
15b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
15c0: 20 20 20 24 6e 61 6d 65 20 3d 20 73 65 6c 66 3a     $name = self:
15d0: 3a 43 53 52 46 5f 66 69 65 6c 64 5f 6e 61 6d 65  :CSRF_field_name
15e0: 28 24 6b 65 79 29 3b 0a 0a 20 20 20 20 20 20 20  ($key);..       
15f0: 20 20 20 20 20 69 66 20 28 21 69 73 73 65 74 28       if (!isset(
1600: 24 5f 50 4f 53 54 5b 24 6e 61 6d 65 5d 29 29 0a  $_POST[$name])).
1610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1620: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 20  return false;.. 
1630: 20 20 20 20 20 20 20 20 20 20 20 24 68 61 73 68             $hash
1640: 20 3d 20 24 5f 50 4f 53 54 5b 24 6e 61 6d 65 5d   = $_POST[$name]
1650: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
1660: 20 20 20 20 20 69 66 20 28 65 6d 70 74 79 28 24       if (empty($
1670: 5f 53 45 53 53 49 4f 4e 5b 27 63 73 72 66 27 5d  _SESSION['csrf']
1680: 5b 24 6b 65 79 5d 29 29 0a 20 20 20 20 20 20 20  [$key])).       
1690: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
16a0: 65 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
16b0: 24 5f 53 45 53 53 49 4f 4e 5b 27 63 73 72 66 27  $_SESSION['csrf'
16c0: 5d 5b 24 6b 65 79 5d 20 21 3d 20 24 68 61 73 68  ][$key] != $hash
16d0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ).            re
16e0: 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 20 20 20  turn false;..   
16f0: 20 20 20 20 20 75 6e 73 65 74 28 24 5f 53 45 53       unset($_SES
1700: 53 49 4f 4e 5b 27 63 73 72 66 27 5d 5b 24 6b 65  SION['csrf'][$ke
1710: 79 5d 29 3b 0a 0a 20 20 20 20 20 20 20 20 72 65  y]);..        re
1720: 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d  turn true;.    }
1730: 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70 75 62  ..    static pub
1740: 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 43 53 52  lic function CSR
1750: 46 5f 66 69 65 6c 64 5f 6e 61 6d 65 28 24 6b 65  F_field_name($ke
1760: 79 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20  y).    {.       
1770: 20 72 65 74 75 72 6e 20 27 67 65 63 6b 6f 2f 27   return 'gecko/'
1780: 2e 62 61 73 65 36 34 5f 65 6e 63 6f 64 65 28 73  .base64_encode(s
1790: 68 61 31 28 24 6b 65 79 2c 20 74 72 75 65 29 29  ha1($key, true))
17a0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 61  ;.    }..    sta
17b0: 74 69 63 20 70 75 62 6c 69 63 20 66 75 6e 63 74  tic public funct
17c0: 69 6f 6e 20 67 65 6e 65 72 61 74 65 50 61 73 73  ion generatePass
17d0: 77 6f 72 64 28 24 6c 65 6e 67 74 68 2c 20 24 63  word($length, $c
17e0: 68 61 72 73 3d 27 61 62 63 64 65 66 67 68 69 6a  hars='abcdefghij
17f0: 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a  klmnopqrstuvwxyz
1800: 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50  ABCDEFGHIJKLMNOP
1810: 51 52 53 54 55 56 57 58 59 5a 31 32 33 34 35 36  QRSTUVWXYZ123456
1820: 37 38 39 30 27 29 0a 20 20 20 20 7b 0a 20 20 20  7890').    {.   
1830: 20 20 20 20 20 24 73 74 72 69 6e 67 20 3d 20 27       $string = '
1840: 27 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28  ';.        for (
1850: 24 69 20 3d 20 30 3b 20 24 69 20 3c 20 24 6c 65  $i = 0; $i < $le
1860: 6e 67 74 68 3b 20 24 69 2b 2b 29 0a 20 20 20 20  ngth; $i++).    
1870: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1880: 20 20 24 70 6f 73 20 3d 20 72 61 6e 64 28 30 2c    $pos = rand(0,
1890: 20 73 74 72 6c 65 6e 28 24 63 68 61 72 73 29 2d   strlen($chars)-
18a0: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  1);.            
18b0: 24 73 74 72 69 6e 67 20 2e 3d 20 24 63 68 61 72  $string .= $char
18c0: 73 5b 24 70 6f 73 5d 3b 0a 20 20 20 20 20 20 20  s[$pos];.       
18d0: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
18e0: 6e 20 24 73 74 72 69 6e 67 3b 0a 20 20 20 20 7d  n $string;.    }
18f0: 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70 75 62  ..    static pub
1900: 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 70 6f 73  lic function pos
1910: 74 28 24 6b 65 79 29 0a 20 20 20 20 7b 0a 20 20  t($key).    {.  
1920: 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 73 73        return iss
1930: 65 74 28 24 5f 50 4f 53 54 5b 24 6b 65 79 5d 29  et($_POST[$key])
1940: 20 3f 20 24 5f 50 4f 53 54 5b 24 6b 65 79 5d 20   ? $_POST[$key] 
1950: 3a 20 27 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  : '';.    }..   
1960: 20 73 74 61 74 69 63 20 70 75 62 6c 69 63 20 66   static public f
1970: 75 6e 63 74 69 6f 6e 20 67 65 74 28 24 6b 65 79  unction get($key
1980: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  ).    {.        
1990: 72 65 74 75 72 6e 20 69 73 73 65 74 28 24 5f 47  return isset($_G
19a0: 45 54 5b 24 6b 65 79 5d 29 20 3f 20 24 5f 47 45  ET[$key]) ? $_GE
19b0: 54 5b 24 6b 65 79 5d 20 3a 20 27 27 3b 0a 20 20  T[$key] : '';.  
19c0: 20 20 7d 0a 0a 20 20 20 20 73 74 61 74 69 63 20    }..    static 
19d0: 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20  public function 
19e0: 67 65 74 49 50 28 29 0a 20 20 20 20 7b 0a 20 20  getIP().    {.  
19f0: 20 20 20 20 20 20 69 66 20 28 21 65 6d 70 74 79        if (!empty
1a00: 28 24 5f 53 45 52 56 45 52 5b 27 52 45 4d 4f 54  ($_SERVER['REMOT
1a10: 45 5f 41 44 44 52 27 5d 29 29 0a 20 20 20 20 20  E_ADDR'])).     
1a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 5f         return $_
1a30: 53 45 52 56 45 52 5b 27 52 45 4d 4f 54 45 5f 41  SERVER['REMOTE_A
1a40: 44 44 52 27 5d 3b 0a 20 20 20 20 20 20 20 20 72  DDR'];.        r
1a50: 65 74 75 72 6e 20 27 27 3b 0a 20 20 20 20 7d 0a  eturn '';.    }.
1a60: 0a 20 20 20 20 73 74 61 74 69 63 20 70 75 62 6c  .    static publ
1a70: 69 63 20 66 75 6e 63 74 69 6f 6e 20 26 67 65 74  ic function &get
1a80: 43 6f 75 6e 74 72 79 4c 69 73 74 28 29 0a 20 20  CountryList().  
1a90: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
1aa0: 69 73 5f 6e 75 6c 6c 28 73 65 6c 66 3a 3a 24 63  is_null(self::$c
1ab0: 6f 75 6e 74 72 79 5f 6c 69 73 74 29 29 0a 20 20  ountry_list)).  
1ac0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1ad0: 20 20 20 20 72 65 71 75 69 72 65 5f 6f 6e 63 65      require_once
1ae0: 20 52 4f 4f 54 20 2e 20 27 2f 69 6e 63 6c 75 64   ROOT . '/includ
1af0: 65 2f 6c 69 62 73 2f 63 6f 75 6e 74 72 69 65 73  e/libs/countries
1b00: 2f 63 6f 75 6e 74 72 69 65 73 5f 66 72 2e 70 68  /countries_fr.ph
1b10: 70 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  p';.            
1b20: 73 65 6c 66 3a 3a 24 63 6f 75 6e 74 72 79 5f 6c  self::$country_l
1b30: 69 73 74 20 3d 20 24 63 6f 75 6e 74 72 69 65 73  ist = $countries
1b40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
1b50: 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 6c 66       return self
1b60: 3a 3a 24 63 6f 75 6e 74 72 79 5f 6c 69 73 74 3b  ::$country_list;
1b70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 61 74  .    }..    stat
1b80: 69 63 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69  ic public functi
1b90: 6f 6e 20 67 65 74 43 6f 75 6e 74 72 79 4e 61 6d  on getCountryNam
1ba0: 65 28 24 63 6f 64 65 29 0a 20 20 20 20 7b 0a 20  e($code).    {. 
1bb0: 20 20 20 20 20 20 20 24 6c 69 73 74 20 3d 20 73         $list = s
1bc0: 65 6c 66 3a 3a 67 65 74 43 6f 75 6e 74 72 79 4c  elf::getCountryL
1bd0: 69 73 74 28 29 3b 0a 0a 20 20 20 20 20 20 20 20  ist();..        
1be0: 69 66 20 28 21 69 73 73 65 74 28 24 6c 69 73 74  if (!isset($list
1bf0: 5b 24 63 6f 64 65 5d 29 29 0a 20 20 20 20 20 20  [$code])).      
1c00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1c10: 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 72 65 74  se;..        ret
1c20: 75 72 6e 20 24 6c 69 73 74 5b 24 63 6f 64 65 5d  urn $list[$code]
1c30: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a  ;.    }..    /**
1c40: 0a 20 20 20 20 20 2a 20 47 c3 a9 6e c3 a9 72 61  .     * G..n..ra
1c50: 74 69 6f 6e 20 70 61 67 69 6e 61 74 69 6f 6e 20  tion pagination 
1c60: c3 a0 20 70 61 72 74 69 72 20 64 65 20 6c 61 20  .. partir de la 
1c70: 70 61 67 65 20 63 6f 75 72 61 6e 74 65 20 28 24  page courante ($
1c80: 63 75 72 72 65 6e 74 29 2c 0a 20 20 20 20 20 2a  current),.     *
1c90: 20 64 75 20 6e 6f 6d 62 72 65 20 64 27 69 74 65   du nombre d'ite
1ca0: 6d 73 20 74 6f 74 61 6c 20 28 24 74 6f 74 61 6c  ms total ($total
1cb0: 29 2c 20 65 74 20 64 75 20 6e 6f 6d 62 72 65 20  ), et du nombre 
1cc0: 64 27 69 74 65 6d 73 20 70 61 72 20 70 61 67 65  d'items par page
1cd0: 20 28 24 62 79 70 61 67 65 29 2e 0a 20 20 20 20   ($bypage)..    
1ce0: 20 2a 20 24 6c 69 73 74 4c 65 6e 67 74 68 20 72   * $listLength r
1cf0: 65 70 72 c3 a9 73 65 6e 74 65 20 6c 61 20 6c 6f  epr..sente la lo
1d00: 6e 67 75 65 75 72 20 64 27 69 74 65 6d 73 20 64  ngueur d'items d
1d10: 65 20 6c 61 20 70 61 67 69 6e 61 74 69 6f 6e 20  e la pagination 
1d20: c3 a0 20 67 c3 a9 6e 65 72 65 72 0a 20 20 20 20  .. g..nerer.    
1d30: 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d   *.     * @param
1d40: 20 69 6e 74 20 24 63 75 72 72 65 6e 74 0a 20 20   int $current.  
1d50: 20 20 20 2a 20 40 70 61 72 61 6d 20 69 6e 74 20     * @param int 
1d60: 24 74 6f 74 61 6c 0a 20 20 20 20 20 2a 20 40 70  $total.     * @p
1d70: 61 72 61 6d 20 69 6e 74 20 24 62 79 70 61 67 65  aram int $bypage
1d80: 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 69  .     * @param i
1d90: 6e 74 20 24 6c 69 73 74 4c 65 6e 67 74 68 0a 20  nt $listLength. 
1da0: 20 20 20 20 2a 20 40 70 61 72 61 6d 20 62 6f 6f      * @param boo
1db0: 6c 20 24 73 68 6f 77 4c 61 73 74 20 54 6f 67 67  l $showLast Togg
1dc0: 6c 65 20 6c 27 61 66 66 69 63 68 61 67 65 20 64  le l'affichage d
1dd0: 75 20 64 65 72 6e 69 65 72 20 c3 a9 6c c3 a9 6d  u dernier ..l..m
1de0: 65 6e 74 20 64 65 20 6c 61 20 70 61 67 69 6e 61  ent de la pagina
1df0: 74 69 6f 6e 0a 20 20 20 20 20 2a 20 40 72 65 74  tion.     * @ret
1e00: 75 72 6e 20 61 72 72 61 79 0a 20 20 20 20 20 2a  urn array.     *
1e10: 2f 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61  /.    public sta
1e20: 74 69 63 20 66 75 6e 63 74 69 6f 6e 20 67 65 74  tic function get
1e30: 47 65 6e 65 72 69 63 50 61 67 69 6e 61 74 69 6f  GenericPaginatio
1e40: 6e 28 24 63 75 72 72 65 6e 74 2c 20 24 74 6f 74  n($current, $tot
1e50: 61 6c 2c 20 24 62 79 70 61 67 65 2c 20 24 6c 69  al, $bypage, $li
1e60: 73 74 4c 65 6e 67 74 68 3d 31 31 2c 20 24 73 68  stLength=11, $sh
1e70: 6f 77 4c 61 73 74 20 3d 20 74 72 75 65 29 0a 20  owLast = true). 
1e80: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20     {.        if 
1e90: 28 24 74 6f 74 61 6c 20 3c 3d 20 24 62 79 70 61  ($total <= $bypa
1ea0: 67 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge).            
1eb0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 20  return false;.. 
1ec0: 20 20 20 20 20 20 20 24 74 6f 74 61 6c 20 3d 20         $total = 
1ed0: 63 65 69 6c 28 24 74 6f 74 61 6c 20 2f 20 24 62  ceil($total / $b
1ee0: 79 70 61 67 65 29 3b 0a 0a 20 20 20 20 20 20 20  ypage);..       
1ef0: 20 69 66 20 28 24 74 6f 74 61 6c 20 3c 20 24 63   if ($total < $c
1f00: 75 72 72 65 6e 74 29 0a 20 20 20 20 20 20 20 20  urrent).        
1f10: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1f20: 3b 0a 0a 20 20 20 20 20 20 20 20 24 6c 65 6e 67  ;..        $leng
1f30: 74 68 20 3d 20 28 24 6c 69 73 74 4c 65 6e 67 74  th = ($listLengt
1f40: 68 20 2f 20 32 29 3b 0a 0a 20 20 20 20 20 20 20  h / 2);..       
1f50: 20 24 62 65 67 69 6e 20 3d 20 24 63 75 72 72 65   $begin = $curre
1f60: 6e 74 20 2d 20 63 65 69 6c 28 24 6c 65 6e 67 74  nt - ceil($lengt
1f70: 68 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  h);.        if (
1f80: 24 62 65 67 69 6e 20 3c 20 31 29 0a 20 20 20 20  $begin < 1).    
1f90: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1fa0: 20 20 24 62 65 67 69 6e 20 3d 20 31 3b 0a 20 20    $begin = 1;.  
1fb0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
1fc0: 20 24 65 6e 64 20 3d 20 24 62 65 67 69 6e 20 2b   $end = $begin +
1fd0: 20 24 6c 69 73 74 4c 65 6e 67 74 68 3b 0a 20 20   $listLength;.  
1fe0: 20 20 20 20 20 20 69 66 28 24 65 6e 64 20 3e 20        if($end > 
1ff0: 24 74 6f 74 61 6c 29 0a 20 20 20 20 20 20 20 20  $total).        
2000: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 62  {.            $b
2010: 65 67 69 6e 20 2d 3d 20 28 24 65 6e 64 20 2d 20  egin -= ($end - 
2020: 24 74 6f 74 61 6c 29 3b 0a 20 20 20 20 20 20 20  $total);.       
2030: 20 20 20 20 20 24 65 6e 64 20 3d 20 24 74 6f 74       $end = $tot
2040: 61 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  al;.        }.  
2050: 20 20 20 20 20 20 69 66 20 28 24 62 65 67 69 6e        if ($begin
2060: 20 3c 20 31 29 0a 20 20 20 20 20 20 20 20 7b 0a   < 1).        {.
2070: 20 20 20 20 20 20 20 20 20 20 20 20 24 62 65 67              $beg
2080: 69 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  in = 1;.        
2090: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 24 65 6e  }.        if($en
20a0: 64 3d 3d 28 24 74 6f 74 61 6c 2d 31 29 29 20 7b  d==($total-1)) {
20b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 6e  .            $en
20c0: 64 20 3d 20 24 74 6f 74 61 6c 3b 0a 20 20 20 20  d = $total;.    
20d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
20e0: 28 24 62 65 67 69 6e 20 3d 3d 20 32 29 20 7b 0a  ($begin == 2) {.
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 24 62 65 67              $beg
2100: 69 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  in = 1;.        
2110: 7d 0a 20 20 20 20 20 20 20 20 24 6f 75 74 20 3d  }.        $out =
2120: 20 5b 5d 3b 0a 0a 20 20 20 20 20 20 20 20 69 66   [];..        if
2130: 20 28 24 63 75 72 72 65 6e 74 20 3e 20 31 29 20   ($current > 1) 
2140: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f  {.            $o
2150: 75 74 5b 5d 20 3d 20 5b 27 69 64 27 20 3d 3e 20  ut[] = ['id' => 
2160: 24 63 75 72 72 65 6e 74 20 2d 20 31 2c 20 27 6c  $current - 1, 'l
2170: 61 62 65 6c 27 20 3d 3e 20 20 27 c2 ab 20 27 20  abel' =>  '.. ' 
2180: 2e 20 27 50 61 67 65 20 70 72 c3 a9 63 c3 a9 64  . 'Page pr..c..d
2190: 65 6e 74 65 27 2c 20 27 63 6c 61 73 73 27 20 3d  ente', 'class' =
21a0: 3e 20 27 70 72 65 76 27 2c 20 27 61 63 63 65 73  > 'prev', 'acces
21b0: 73 6b 65 79 27 20 3d 3e 20 27 61 27 5d 3b 0a 20  skey' => 'a'];. 
21c0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
21d0: 20 20 69 66 20 28 24 62 65 67 69 6e 20 3e 20 31    if ($begin > 1
21e0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
21f0: 24 6f 75 74 5b 5d 20 3d 20 5b 27 69 64 27 20 3d  $out[] = ['id' =
2200: 3e 20 31 2c 20 27 6c 61 62 65 6c 27 20 3d 3e 20  > 1, 'label' => 
2210: 27 31 20 2e 2e 2e 27 2c 20 27 63 6c 61 73 73 27  '1 ...', 'class'
2220: 20 3d 3e 20 27 66 69 72 73 74 27 5d 3b 0a 20 20   => 'first'];.  
2230: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
2240: 20 66 6f 72 20 28 24 69 20 3d 20 24 62 65 67 69   for ($i = $begi
2250: 6e 3b 20 24 69 20 3c 3d 20 24 65 6e 64 3b 20 24  n; $i <= $end; $
2260: 69 2b 2b 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  i++).        {. 
2270: 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 5b             $out[
2280: 5d 20 3d 20 5b 27 69 64 27 20 3d 3e 20 24 69 2c  ] = ['id' => $i,
2290: 20 27 6c 61 62 65 6c 27 20 3d 3e 20 24 69 2c 20   'label' => $i, 
22a0: 27 63 6c 61 73 73 27 20 3d 3e 20 28 24 69 20 3d  'class' => ($i =
22b0: 3d 20 24 63 75 72 72 65 6e 74 29 20 3f 20 27 63  = $current) ? 'c
22c0: 75 72 72 65 6e 74 27 20 3a 20 27 27 5d 3b 0a 20  urrent' : ''];. 
22d0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
22e0: 20 20 69 66 20 28 24 73 68 6f 77 4c 61 73 74 20    if ($showLast 
22f0: 26 26 20 24 65 6e 64 20 3c 20 24 74 6f 74 61 6c  && $end < $total
2300: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
2310: 24 6f 75 74 5b 5d 20 3d 20 5b 27 69 64 27 20 3d  $out[] = ['id' =
2320: 3e 20 24 74 6f 74 61 6c 2c 20 27 6c 61 62 65 6c  > $total, 'label
2330: 27 20 3d 3e 20 27 2e 2e 2e 20 27 20 2e 20 24 74  ' => '... ' . $t
2340: 6f 74 61 6c 2c 20 27 63 6c 61 73 73 27 20 3d 3e  otal, 'class' =>
2350: 20 27 6c 61 73 74 27 5d 3b 0a 20 20 20 20 20 20   'last'];.      
2360: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20    }..        if 
2370: 28 24 63 75 72 72 65 6e 74 20 3c 20 24 74 6f 74  ($current < $tot
2380: 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  al) {.          
2390: 20 20 24 6f 75 74 5b 5d 20 3d 20 5b 27 69 64 27    $out[] = ['id'
23a0: 20 3d 3e 20 24 63 75 72 72 65 6e 74 20 2b 20 31   => $current + 1
23b0: 2c 20 27 6c 61 62 65 6c 27 20 3d 3e 20 27 50 61  , 'label' => 'Pa
23c0: 67 65 20 73 75 69 76 61 6e 74 65 27 20 2e 20 27  ge suivante' . '
23d0: 20 c2 bb 27 2c 20 27 63 6c 61 73 73 27 20 3d 3e   ..', 'class' =>
23e0: 20 27 6e 65 78 74 27 2c 20 27 61 63 63 65 73 73   'next', 'access
23f0: 6b 65 79 27 20 3d 3e 20 27 7a 27 5d 3b 0a 20 20  key' => 'z'];.  
2400: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
2410: 20 72 65 74 75 72 6e 20 24 6f 75 74 3b 0a 20 20   return $out;.  
2420: 20 20 7d 0a 0a 20 20 20 20 73 74 61 74 69 63 20    }..    static 
2430: 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20  public function 
2440: 74 72 61 6e 73 6c 69 74 65 72 61 74 65 54 6f 41  transliterateToA
2450: 73 63 69 69 28 24 73 74 72 2c 20 24 63 68 61 72  scii($str, $char
2460: 73 65 74 3d 27 55 54 46 2d 38 27 29 0a 20 20 20  set='UTF-8').   
2470: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 44 6f   {.        // Do
2480: 6e 27 74 20 70 72 6f 63 65 73 73 20 65 6d 70 74  n't process empt
2490: 79 20 73 74 72 69 6e 67 73 0a 20 20 20 20 20 20  y strings.      
24a0: 20 20 69 66 20 28 21 74 72 69 6d 28 24 73 74 72    if (!trim($str
24b0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )).            r
24c0: 65 74 75 72 6e 20 24 73 74 72 3b 0a 0a 20 20 20  eturn $str;..   
24d0: 20 20 20 20 20 2f 2f 20 57 65 20 6f 6e 6c 79 20       // We only 
24e0: 70 72 6f 63 65 73 73 20 6e 6f 6e 2d 61 73 63 69  process non-asci
24f0: 69 20 73 74 72 69 6e 67 73 0a 20 20 20 20 20 20  i strings.      
2500: 20 20 69 66 20 28 70 72 65 67 5f 6d 61 74 63 68    if (preg_match
2510: 28 27 21 5e 5b 5b 3a 61 73 63 69 69 3a 5d 5d 2b  ('!^[[:ascii:]]+
2520: 24 21 27 2c 20 24 73 74 72 29 29 0a 20 20 20 20  $!', $str)).    
2530: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $
2540: 73 74 72 3b 0a 0a 20 20 20 20 20 20 20 20 24 73  str;..        $s
2550: 74 72 20 3d 20 68 74 6d 6c 65 6e 74 69 74 69 65  tr = htmlentitie
2560: 73 28 24 73 74 72 2c 20 45 4e 54 5f 4e 4f 51 55  s($str, ENT_NOQU
2570: 4f 54 45 53 2c 20 24 63 68 61 72 73 65 74 29 3b  OTES, $charset);
2580: 0a 0a 20 20 20 20 20 20 20 20 24 73 74 72 20 3d  ..        $str =
2590: 20 70 72 65 67 5f 72 65 70 6c 61 63 65 28 27 23   preg_replace('#
25a0: 26 28 5b 41 2d 7a 61 2d 7a 5d 29 28 3f 3a 61 63  &([A-za-z])(?:ac
25b0: 75 74 65 7c 63 65 64 69 6c 7c 63 69 72 63 7c 67  ute|cedil|circ|g
25c0: 72 61 76 65 7c 6f 72 6e 7c 72 69 6e 67 7c 73 6c  rave|orn|ring|sl
25d0: 61 73 68 7c 74 68 7c 74 69 6c 64 65 7c 75 6d 6c  ash|th|tilde|uml
25e0: 29 3b 23 27 2c 20 27 5c 31 27 2c 20 24 73 74 72  );#', '\1', $str
25f0: 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 72 20  );.        $str 
2600: 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65 28 27  = preg_replace('
2610: 23 26 28 5b 41 2d 7a 61 2d 7a 5d 7b 32 7d 29 28  #&([A-za-z]{2})(
2620: 3f 3a 6c 69 67 29 3b 23 27 2c 20 27 5c 31 27 2c  ?:lig);#', '\1',
2630: 20 24 73 74 72 29 3b 20 2f 2f 20 70 6f 75 72 20   $str); // pour 
2640: 6c 65 73 20 6c 69 67 61 74 75 72 65 73 20 65 2e  les ligatures e.
2650: 67 2e 20 27 26 6f 65 6c 69 67 3b 27 0a 0a 20 20  g. '&oelig;'..  
2660: 20 20 20 20 20 20 24 73 74 72 20 3d 20 70 72 65        $str = pre
2670: 67 5f 72 65 70 6c 61 63 65 28 27 23 26 5b 5e 3b  g_replace('#&[^;
2680: 5d 2b 3b 23 27 2c 20 27 27 2c 20 24 73 74 72 29  ]+;#', '', $str)
2690: 3b 20 2f 2f 20 73 75 70 70 72 69 6d 65 20 6c 65  ; // supprime le
26a0: 73 20 61 75 74 72 65 73 20 63 61 72 61 63 74 c3  s autres caract.
26b0: a8 72 65 73 0a 20 20 20 20 20 20 20 20 24 73 74  .res.        $st
26c0: 72 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65  r = preg_replace
26d0: 28 27 21 5b 5e 5b 3a 61 73 63 69 69 3a 5d 5d 2b  ('![^[:ascii:]]+
26e0: 21 27 2c 20 27 27 2c 20 24 73 74 72 29 3b 0a 0a  !', '', $str);..
26f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $
2700: 73 74 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  str;.    }..    
2710: 73 74 61 74 69 63 20 70 75 62 6c 69 63 20 66 75  static public fu
2720: 6e 63 74 69 6f 6e 20 68 74 6d 6c 4c 69 6e 6b 73  nction htmlLinks
2730: 4f 6e 55 72 6c 73 28 24 73 74 72 29 0a 20 20 20  OnUrls($str).   
2740: 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   {.        retur
2750: 6e 20 70 72 65 67 5f 72 65 70 6c 61 63 65 5f 63  n preg_replace_c
2760: 61 6c 6c 62 61 63 6b 28 27 21 28 3f 3c 3d 5c 73  allback('!(?<=\s
2770: 7c 5e 29 28 28 3f 3a 28 66 74 70 7c 68 74 74 70  |^)((?:(ftp|http
2780: 73 3f 7c 66 69 6c 65 7c 65 64 32 6b 7c 69 72 63  s?|file|ed2k|irc
2790: 73 3f 29 3a 2f 2f 7c 28 6d 61 67 6e 65 74 7c 6d  s?)://|(magnet|m
27a0: 61 69 6c 74 6f 7c 64 61 74 61 7c 74 65 6c 7c 66  ailto|data|tel|f
27b0: 61 78 7c 67 65 6f 7c 73 69 70 73 3f 7c 78 6d 70  ax|geo|sips?|xmp
27c0: 70 29 3a 29 28 5b 5e 5c 73 3c 5d 2b 29 29 21 27  p):)([^\s<]+))!'
27d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 75  ,.            fu
27e0: 6e 63 74 69 6f 6e 20 28 24 6d 61 74 63 68 29 20  nction ($match) 
27f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2800: 20 20 24 70 72 6f 74 6f 20 3d 20 24 6d 61 74 63    $proto = $matc
2810: 68 5b 32 5d 20 3f 3a 20 24 6d 61 74 63 68 5b 33  h[2] ?: $match[3
2820: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
2830: 20 20 20 24 74 65 78 74 20 3d 20 28 24 70 72 6f     $text = ($pro
2840: 74 6f 20 3d 3d 20 27 68 74 74 70 27 20 7c 7c 20  to == 'http' || 
2850: 24 70 72 6f 74 6f 20 3d 3d 20 27 6d 61 69 6c 74  $proto == 'mailt
2860: 6f 27 29 20 3f 20 24 6d 61 74 63 68 5b 34 5d 20  o') ? $match[4] 
2870: 3a 20 24 6d 61 74 63 68 5b 31 5d 3b 0a 20 20 20  : $match[1];.   
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2890: 75 72 6e 20 27 3c 61 20 63 6c 61 73 73 3d 22 27  urn '<a class="'
28a0: 2e 24 70 72 6f 74 6f 2e 27 22 20 68 72 65 66 3d  .$proto.'" href=
28b0: 22 27 2e 68 74 6d 6c 73 70 65 63 69 61 6c 63 68  "'.htmlspecialch
28c0: 61 72 73 28 24 6d 61 74 63 68 5b 31 5d 2c 20 45  ars($match[1], E
28d0: 4e 54 5f 51 55 4f 54 45 53 2c 20 27 55 54 46 2d  NT_QUOTES, 'UTF-
28e0: 38 27 29 2e 27 22 3e 27 2e 68 74 6d 6c 73 70 65  8').'">'.htmlspe
28f0: 63 69 61 6c 63 68 61 72 73 28 24 74 65 78 74 2c  cialchars($text,
2900: 20 45 4e 54 5f 51 55 4f 54 45 53 2c 20 27 55 54   ENT_QUOTES, 'UT
2910: 46 2d 38 27 29 2e 27 3c 2f 61 3e 27 3b 0a 20 20  F-8').'</a>';.  
2920: 20 20 20 20 20 20 20 20 20 20 7d 2c 20 24 73 74            }, $st
2930: 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  r);.    }..    s
2940: 74 61 74 69 63 20 70 75 62 6c 69 63 20 66 75 6e  tatic public fun
2950: 63 74 69 6f 6e 20 68 74 6d 6c 47 61 72 62 61 67  ction htmlGarbag
2960: 65 32 78 68 74 6d 6c 28 24 73 74 72 29 0a 20 20  e2xhtml($str).  
2970: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
2980: 21 73 65 6c 66 3a 3a 24 67 32 78 29 0a 20 20 20  !self::$g2x).   
2990: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
29a0: 20 20 20 72 65 71 75 69 72 65 5f 6f 6e 63 65 20     require_once 
29b0: 52 4f 4f 54 20 2e 20 27 2f 69 6e 63 6c 75 64 65  ROOT . '/include
29c0: 2f 6c 69 62 73 2f 67 61 72 62 61 67 65 32 78 68  /libs/garbage2xh
29d0: 74 6d 6c 2f 6c 69 62 2e 67 61 72 62 61 67 65 32  tml/lib.garbage2
29e0: 78 68 74 6d 6c 2e 70 68 70 27 3b 0a 20 20 20 20  xhtml.php';.    
29f0: 20 20 20 20 20 20 20 20 73 65 6c 66 3a 3a 24 67          self::$g
2a00: 32 78 20 3d 20 6e 65 77 20 5c 67 61 72 62 61 67  2x = new \garbag
2a10: 65 32 78 68 74 6d 6c 3b 0a 20 20 20 20 20 20 20  e2xhtml;.       
2a20: 20 20 20 20 20 73 65 6c 66 3a 3a 24 67 32 78 2d       self::$g2x-
2a30: 3e 63 6f 72 65 5f 61 74 74 72 69 62 75 74 65 73  >core_attributes
2a40: 20 3d 20 5b 27 63 6c 61 73 73 27 2c 20 27 69 64   = ['class', 'id
2a50: 27 2c 20 27 74 69 74 6c 65 27 5d 3b 0a 20 20 20  ', 'title'];.   
2a60: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
2a70: 72 65 74 75 72 6e 20 73 65 6c 66 3a 3a 24 67 32  return self::$g2
2a80: 78 2d 3e 70 72 6f 63 65 73 73 28 24 73 74 72 29  x->process($str)
2a90: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 61  ;.    }..    sta
2aa0: 74 69 63 20 70 75 62 6c 69 63 20 66 75 6e 63 74  tic public funct
2ab0: 69 6f 6e 20 68 74 6d 6c 53 70 69 70 28 24 73 74  ion htmlSpip($st
2ac0: 72 2c 20 24 70 72 65 66 69 78 20 3d 20 27 27 29  r, $prefix = '')
2ad0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 2f  .    {.        /
2ae0: 2f 20 49 6e 74 65 72 74 69 74 72 65 73 0a 20 20  / Intertitres.  
2af0: 20 20 20 20 20 20 24 73 74 72 20 3d 20 70 72 65        $str = pre
2b00: 67 5f 72 65 70 6c 61 63 65 28 27 2f 28 3f 3c 21  g_replace('/(?<!
2b10: 5c 5c 5c 5c 29 5c 7b 7b 33 7d 28 5c 56 2a 29 5c  \\\\)\{{3}(\V*)\
2b20: 7d 7b 33 7d 2f 27 2c 20 27 3c 68 33 3e 24 31 3c  }{3}/', '<h3>$1<
2b30: 2f 68 33 3e 27 2c 20 24 73 74 72 29 3b 0a 0a 20  /h3>', $str);.. 
2b40: 20 20 20 20 20 20 20 2f 2f 20 47 72 61 73 0a 20         // Gras. 
2b50: 20 20 20 20 20 20 20 24 73 74 72 20 3d 20 70 72         $str = pr
2b60: 65 67 5f 72 65 70 6c 61 63 65 28 27 2f 28 3f 3c  eg_replace('/(?<
2b70: 21 5c 5c 5c 5c 29 5c 7b 7b 32 7d 28 5c 56 2a 29  !\\\\)\{{2}(\V*)
2b80: 5c 7d 7b 32 7d 2f 27 2c 20 27 3c 73 74 72 6f 6e  \}{2}/', '<stron
2b90: 67 3e 24 31 3c 2f 73 74 72 6f 6e 67 3e 27 2c 20  g>$1</strong>', 
2ba0: 24 73 74 72 29 3b 0a 0a 20 20 20 20 20 20 20 20  $str);..        
2bb0: 2f 2f 20 49 74 61 6c 69 71 75 65 0a 20 20 20 20  // Italique.    
2bc0: 20 20 20 20 24 73 74 72 20 3d 20 70 72 65 67 5f      $str = preg_
2bd0: 72 65 70 6c 61 63 65 28 27 2f 28 3f 3c 21 5c 5c  replace('/(?<!\\
2be0: 5c 5c 29 5c 7b 28 5c 56 2a 29 5c 7d 2f 27 2c 20  \\)\{(\V*)\}/', 
2bf0: 27 3c 65 6d 3e 24 31 3c 2f 65 6d 3e 27 2c 20 24  '<em>$1</em>', $
2c00: 73 74 72 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f  str);..        /
2c10: 2f 20 45 73 70 61 63 65 73 20 74 79 70 6f 67 72  / Espaces typogr
2c20: 61 68 69 71 75 65 73 0a 20 20 20 20 20 20 20 20  ahiques.        
2c30: 24 73 74 72 20 3d 20 70 72 65 67 5f 72 65 70 6c  $str = preg_repl
2c40: 61 63 65 28 27 2f 5c 68 2a 28 5b 3f 21 3b 3a c2  ace('/\h*([?!;:.
2c50: bb 5d 29 28 5c 73 2b 7c 24 29 2f 75 27 2c 20 27  .])(\s+|$)/u', '
2c60: 26 6e 62 73 70 3b 24 31 24 32 27 2c 20 24 73 74  &nbsp;$1$2', $st
2c70: 72 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 72  r);.        $str
2c80: 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65 28   = preg_replace(
2c90: 27 2f 28 5e 7c 5c 73 2b 29 28 5b c2 ab 5d 29 5c  '/(^|\s+)([..])\
2ca0: 68 2a 2f 75 27 2c 20 27 24 31 24 32 26 6e 62 73  h*/u', '$1$2&nbs
2cb0: 70 3b 27 2c 20 24 73 74 72 29 3b 0a 0a 20 20 20  p;', $str);..   
2cc0: 20 20 20 20 20 2f 2f 20 4c 69 65 6e 73 0a 20 20       // Liens.  
2cd0: 20 20 20 20 20 20 24 73 74 72 20 3d 20 70 72 65        $str = pre
2ce0: 67 5f 72 65 70 6c 61 63 65 28 27 2f 28 3f 3c 21  g_replace('/(?<!
2cf0: 5c 5c 5c 5c 29 5c 5b 28 2e 2b 3f 29 2d 3e 28 2e  \\\\)\[(.+?)->(.
2d00: 2b 3f 29 5c 5d 2f 27 2c 20 27 3c 61 20 68 72 65  +?)\]/', '<a hre
2d10: 66 3d 22 24 32 22 3e 24 31 3c 2f 61 3e 27 2c 20  f="$2">$1</a>', 
2d20: 24 73 74 72 29 3b 0a 20 20 20 20 20 20 20 20 24  $str);.        $
2d30: 73 74 72 20 3d 20 70 72 65 67 5f 72 65 70 6c 61  str = preg_repla
2d40: 63 65 28 27 2f 28 3f 3c 21 5c 5c 5c 5c 29 5c 5b  ce('/(?<!\\\\)\[
2d50: 28 2e 2b 3f 29 5c 5d 2f 27 2c 20 27 3c 61 20 68  (.+?)\]/', '<a h
2d60: 72 65 66 3d 22 24 31 22 3e 24 31 3c 2f 61 3e 27  ref="$1">$1</a>'
2d70: 2c 20 24 73 74 72 29 3b 0a 0a 20 20 20 20 20 20  , $str);..      
2d80: 20 20 2f 2f 20 41 64 72 65 73 73 65 73 20 65 6d    // Adresses em
2d90: 61 69 6c 0a 20 20 20 20 20 20 20 20 24 73 74 72  ail.        $str
2da0: 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65 28   = preg_replace(
2db0: 27 2f 3c 61 20 68 72 65 66 3d 22 28 28 3f 21 68  '/<a href="((?!h
2dc0: 74 74 70 29 2e 2a 40 2e 2a 29 22 3e 2f 69 55 27  ttp).*@.*)">/iU'
2dd0: 2c 20 27 3c 61 20 68 72 65 66 3d 22 6d 61 69 6c  , '<a href="mail
2de0: 74 6f 3a 24 31 22 3e 27 2c 20 24 73 74 72 29 3b  to:$1">', $str);
2df0: 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2e00: 20 24 73 74 72 3b 0a 20 20 20 20 7d 0a 0a 20 20   $str;.    }..  
2e10: 20 20 73 74 61 74 69 63 20 70 75 62 6c 69 63 20    static public 
2e20: 66 75 6e 63 74 69 6f 6e 20 6d 61 69 6c 28 24 74  function mail($t
2e30: 6f 2c 20 24 73 75 62 6a 65 63 74 2c 20 24 63 6f  o, $subject, $co
2e40: 6e 74 65 6e 74 2c 20 24 61 64 64 69 74 69 6f 6e  ntent, $addition
2e50: 61 6c 5f 68 65 61 64 65 72 73 20 3d 20 5b 5d 29  al_headers = [])
2e60: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 2f  .    {.        /
2e70: 2f 20 43 72 c3 a9 61 74 69 6f 6e 20 64 75 20 63  / Cr..ation du c
2e80: 6f 6e 74 65 6e 75 20 64 75 20 6d 65 73 73 61 67  ontenu du messag
2e90: 65 0a 20 20 20 20 20 20 20 20 24 63 6f 6e 74 65  e.        $conte
2ea0: 6e 74 20 3d 20 77 6f 72 64 77 72 61 70 28 24 63  nt = wordwrap($c
2eb0: 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  ontent);.       
2ec0: 20 24 63 6f 6e 74 65 6e 74 20 3d 20 74 72 69 6d   $content = trim
2ed0: 28 24 63 6f 6e 74 65 6e 74 29 3b 0a 0a 20 20 20  ($content);..   
2ee0: 20 20 20 20 20 24 63 6f 6e 74 65 6e 74 20 3d 20       $content = 
2ef0: 70 72 65 67 5f 72 65 70 6c 61 63 65 28 22 23 28  preg_replace("#(
2f00: 3f 3c 21 5c 72 29 5c 6e 23 73 69 22 2c 20 22 5c  ?<!\r)\n#si", "\
2f10: 72 5c 6e 22 2c 20 24 63 6f 6e 74 65 6e 74 29 3b  r\n", $content);
2f20: 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 43 6f 6e  ..        // Con
2f30: 73 74 72 75 63 74 69 6f 6e 20 64 65 73 20 65 6e  struction des en
2f40: 74 c3 aa 74 65 73 0a 20 20 20 20 20 20 20 20 24  t..tes.        $
2f50: 68 65 61 64 65 72 73 20 3d 20 27 27 3b 0a 0a 20  headers = '';.. 
2f60: 20 20 20 20 20 20 20 24 63 6f 6e 66 69 67 20 3d         $config =
2f70: 20 43 6f 6e 66 69 67 3a 3a 67 65 74 49 6e 73 74   Config::getInst
2f80: 61 6e 63 65 28 29 3b 0a 0a 20 20 20 20 20 20 20  ance();..       
2f90: 20 69 66 20 28 65 6d 70 74 79 28 24 61 64 64 69   if (empty($addi
2fa0: 74 69 6f 6e 61 6c 5f 68 65 61 64 65 72 73 5b 27  tional_headers['
2fb0: 46 72 6f 6d 27 5d 29 29 0a 20 20 20 20 20 20 20  From'])).       
2fc0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24   {.            $
2fd0: 61 64 64 69 74 69 6f 6e 61 6c 5f 68 65 61 64 65  additional_heade
2fe0: 72 73 5b 27 46 72 6f 6d 27 5d 20 3d 20 27 22 4e  rs['From'] = '"N
2ff0: 45 20 50 41 53 20 52 45 50 4f 4e 44 52 45 22 20  E PAS REPONDRE" 
3000: 3c 27 2e 24 63 6f 6e 66 69 67 2d 3e 67 65 74 28  <'.$config->get(
3010: 27 65 6d 61 69 6c 5f 65 6e 76 6f 69 5f 61 75 74  'email_envoi_aut
3020: 6f 6d 61 74 69 71 75 65 27 29 2e 27 3e 27 3b 0a  omatique').'>';.
3030: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
3040: 20 20 20 24 61 64 64 69 74 69 6f 6e 61 6c 5f 68     $additional_h
3050: 65 61 64 65 72 73 5b 27 4d 49 4d 45 2d 56 65 72  eaders['MIME-Ver
3060: 73 69 6f 6e 27 5d 20 3d 20 27 31 2e 30 27 3b 0a  sion'] = '1.0';.
3070: 20 20 20 20 20 20 20 20 24 61 64 64 69 74 69 6f          $additio
3080: 6e 61 6c 5f 68 65 61 64 65 72 73 5b 27 43 6f 6e  nal_headers['Con
3090: 74 65 6e 74 2d 74 79 70 65 27 5d 20 3d 20 27 74  tent-type'] = 't
30a0: 65 78 74 2f 70 6c 61 69 6e 3b 20 63 68 61 72 73  ext/plain; chars
30b0: 65 74 3d 55 54 46 2d 38 27 3b 0a 20 20 20 20 20  et=UTF-8';.     
30c0: 20 20 20 24 61 64 64 69 74 69 6f 6e 61 6c 5f 68     $additional_h
30d0: 65 61 64 65 72 73 5b 27 52 65 74 75 72 6e 2d 50  eaders['Return-P
30e0: 61 74 68 27 5d 20 3d 20 24 63 6f 6e 66 69 67 2d  ath'] = $config-
30f0: 3e 67 65 74 28 27 65 6d 61 69 6c 5f 65 6e 76 6f  >get('email_envo
3100: 69 5f 61 75 74 6f 6d 61 74 69 71 75 65 27 29 3b  i_automatique');
3110: 0a 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
3120: 68 20 28 24 61 64 64 69 74 69 6f 6e 61 6c 5f 68  h ($additional_h
3130: 65 61 64 65 72 73 20 61 73 20 24 6e 61 6d 65 3d  eaders as $name=
3140: 3e 24 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20  >$value).       
3150: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24   {.            $
3160: 68 65 61 64 65 72 73 20 2e 3d 20 24 6e 61 6d 65  headers .= $name
3170: 20 2e 20 27 3a 20 27 2e 24 76 61 6c 75 65 2e 22   . ': '.$value."
3180: 5c 72 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 7d  \r\n";.        }
3190: 0a 0a 20 20 20 20 20 20 20 20 24 68 65 61 64 65  ..        $heade
31a0: 72 73 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63  rs = preg_replac
31b0: 65 28 22 23 28 3f 3c 21 5c 72 29 5c 6e 23 73 69  e("#(?<!\r)\n#si
31c0: 22 2c 20 22 5c 72 5c 6e 22 2c 20 24 68 65 61 64  ", "\r\n", $head
31d0: 65 72 73 29 3b 0a 0a 20 20 20 20 20 20 20 20 24  ers);..        $
31e0: 73 75 62 6a 65 63 74 20 3d 20 27 3d 3f 55 54 46  subject = '=?UTF
31f0: 2d 38 3f 42 3f 27 2e 62 61 73 65 36 34 5f 65 6e  -8?B?'.base64_en
3200: 63 6f 64 65 28 24 73 75 62 6a 65 63 74 29 2e 27  code($subject).'
3210: 3f 3d 27 3b 0a 0a 20 20 20 20 20 20 20 20 69 66  ?=';..        if
3220: 20 28 69 73 5f 61 72 72 61 79 28 24 74 6f 29 29   (is_array($to))
3230: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
3240: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
3250: 24 74 6f 20 61 73 20 24 74 29 0a 20 20 20 20 20  $to as $t).     
3260: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
3270: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3280: 6d 61 69 6c 28 24 74 2c 20 24 73 75 6a 65 63 74  mail($t, $suject
3290: 2c 20 24 63 6f 6e 74 65 6e 74 2c 20 24 68 65 61  , $content, $hea
32a0: 64 65 72 73 29 3b 0a 20 20 20 20 20 20 20 20 20  ders);.         
32b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
32c0: 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20         else.    
32d0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
32e0: 20 20 72 65 74 75 72 6e 20 6d 61 69 6c 28 24 74    return mail($t
32f0: 6f 2c 20 24 73 75 62 6a 65 63 74 2c 20 24 63 6f  o, $subject, $co
3300: 6e 74 65 6e 74 2c 20 24 68 65 61 64 65 72 73 29  ntent, $headers)
3310: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
3320: 7d 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70 75  }..    static pu
3330: 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 63 6c  blic function cl
3340: 65 61 72 43 61 63 68 65 73 28 29 0a 20 20 20 20  earCaches().    
3350: 7b 0a 20 20 20 20 20 20 20 20 24 70 61 74 68 20  {.        $path 
3360: 3d 20 44 41 54 41 5f 52 4f 4f 54 20 2e 20 27 2f  = DATA_ROOT . '/
3370: 63 61 63 68 65 2f 63 6f 6d 70 69 6c 65 64 27 3b  cache/compiled';
3380: 0a 20 20 20 20 20 20 20 20 24 64 69 72 20 3d 20  .        $dir = 
3390: 64 69 72 28 24 70 61 74 68 29 3b 0a 0a 20 20 20  dir($path);..   
33a0: 20 20 20 20 20 77 68 69 6c 65 20 28 24 66 69 6c       while ($fil
33b0: 65 20 3d 20 24 64 69 72 2d 3e 72 65 61 64 28 29  e = $dir->read()
33c0: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
33d0: 20 20 20 20 20 20 20 20 69 66 20 28 24 66 69 6c          if ($fil
33e0: 65 5b 30 5d 20 21 3d 20 27 2e 27 29 0a 20 20 20  e[0] != '.').   
33f0: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
3400: 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c 69 6e             unlin
3410: 6b 28 24 70 61 74 68 20 2e 20 27 2f 27 20 2e 20  k($path . '/' . 
3420: 24 66 69 6c 65 29 3b 0a 20 20 20 20 20 20 20 20  $file);.        
3430: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
3440: 0a 20 20 20 20 20 20 20 20 24 64 69 72 2d 3e 63  .        $dir->c
3450: 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20  lose();.        
3460: 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20  return true;.   
3470: 20 7d 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70   }..    static p
3480: 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 73  ublic function s
3490: 75 67 67 65 73 74 50 61 73 73 77 6f 72 64 28 29  uggestPassword()
34a0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72  .    {.        r
34b0: 65 71 75 69 72 65 5f 6f 6e 63 65 20 52 4f 4f 54  equire_once ROOT
34c0: 20 2e 20 27 2f 69 6e 63 6c 75 64 65 2f 6c 69 62   . '/include/lib
34d0: 73 2f 70 61 73 73 70 68 72 61 73 65 2f 6c 69 62  s/passphrase/lib
34e0: 2e 70 61 73 73 70 68 72 61 73 65 2e 66 72 65 6e  .passphrase.fren
34f0: 63 68 2e 70 68 70 27 3b 0a 20 20 20 20 20 20 20  ch.php';.       
3500: 20 72 65 74 75 72 6e 20 5c 50 61 73 73 70 68 72   return \Passphr
3510: 61 73 65 3a 3a 67 65 6e 65 72 61 74 65 28 29 3b  ase::generate();
3520: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 61 74  .    }..    stat
3530: 69 63 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69  ic public functi
3540: 6f 6e 20 63 68 65 63 6b 49 42 41 4e 28 24 69 62  on checkIBAN($ib
3550: 61 6e 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  an).    {.      
3560: 20 20 24 69 62 61 6e 20 3d 20 73 75 62 73 74 72    $iban = substr
3570: 28 24 69 62 61 6e 2c 20 34 29 20 2e 20 73 75 62  ($iban, 4) . sub
3580: 73 74 72 28 24 69 62 61 6e 2c 20 30 2c 20 34 29  str($iban, 0, 4)
3590: 3b 0a 20 20 20 20 20 20 20 20 24 69 62 61 6e 20  ;.        $iban 
35a0: 3d 20 73 74 72 5f 72 65 70 6c 61 63 65 28 72 61  = str_replace(ra
35b0: 6e 67 65 28 27 41 27 2c 20 27 5a 27 29 2c 20 72  nge('A', 'Z'), r
35c0: 61 6e 67 65 28 31 30 2c 20 33 35 29 2c 20 24 69  ange(10, 35), $i
35d0: 62 61 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 65  ban);.        re
35e0: 74 75 72 6e 20 28 62 63 6d 6f 64 28 24 69 62 61  turn (bcmod($iba
35f0: 6e 2c 20 39 37 29 20 3d 3d 20 31 29 3b 0a 20 20  n, 97) == 1);.  
3600: 20 20 7d 0a 0a 20 20 20 20 73 74 61 74 69 63 20    }..    static 
3610: 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20  public function 
3620: 49 42 41 4e 5f 52 49 42 28 24 69 62 61 6e 29 0a  IBAN_RIB($iban).
3630: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66      {.        if
3640: 20 28 73 75 62 73 74 72 28 24 69 62 61 6e 2c 20   (substr($iban, 
3650: 30 2c 20 32 29 20 21 3d 20 27 46 52 27 29 0a 20  0, 2) != 'FR'). 
3660: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
3670: 20 20 20 20 20 72 65 74 75 72 6e 20 27 27 3b 0a       return '';.
3680: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
3690: 20 20 20 72 65 74 75 72 6e 20 73 75 62 73 74 72     return substr
36a0: 28 24 69 62 61 6e 2c 20 34 2c 20 35 29 20 2f 2f  ($iban, 4, 5) //
36b0: 20 43 6f 64 65 20 62 61 6e 71 75 65 0a 20 20 20   Code banque.   
36c0: 20 20 20 20 20 20 20 20 20 2e 20 27 20 27 20 2e           . ' ' .
36d0: 20 73 75 62 73 74 72 28 24 69 62 61 6e 2c 20 34   substr($iban, 4
36e0: 2b 35 2c 20 35 29 20 2f 2f 20 43 6f 64 65 20 67  +5, 5) // Code g
36f0: 75 69 63 68 65 74 0a 20 20 20 20 20 20 20 20 20  uichet.         
3700: 20 20 20 2e 20 27 20 27 20 2e 20 73 75 62 73 74     . ' ' . subst
3710: 72 28 24 69 62 61 6e 2c 20 34 2b 35 2b 35 2c 20  r($iban, 4+5+5, 
3720: 2d 32 29 20 2f 2f 20 4e 75 6d c3 a9 72 6f 20 64  -2) // Num..ro d
3730: 65 20 63 6f 6d 70 74 65 0a 20 20 20 20 20 20 20  e compte.       
3740: 20 20 20 20 20 2e 20 27 20 27 20 2e 20 73 75 62       . ' ' . sub
3750: 73 74 72 28 24 69 62 61 6e 2c 20 2d 32 29 3b 20  str($iban, -2); 
3760: 2f 2f 20 43 6c c3 a9 20 52 49 42 0a 20 20 20 20  // Cl.. RIB.    
3770: 7d 0a 0a 20 20 20 20 73 74 61 74 69 63 20 70 75  }..    static pu
3780: 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 63 68  blic function ch
3790: 65 63 6b 42 49 43 28 24 62 69 63 29 0a 20 20 20  eckBIC($bic).   
37a0: 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   {.        retur
37b0: 6e 20 70 72 65 67 5f 6d 61 74 63 68 28 27 21 5e  n preg_match('!^
37c0: 5b 41 2d 5a 5d 7b 34 7d 5b 41 2d 5a 5d 7b 32 7d  [A-Z]{4}[A-Z]{2}
37d0: 5b 31 2d 39 41 2d 5a 5d 7b 32 7d 28 3f 3a 5b 41  [1-9A-Z]{2}(?:[A
37e0: 2d 5a 5c 64 5d 7b 33 7d 29 3f 24 21 27 2c 20 24  -Z\d]{3})?$!', $
37f0: 62 69 63 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  bic);.    }..   
3800: 20 73 74 61 74 69 63 20 70 75 62 6c 69 63 20 66   static public f
3810: 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 69 7a  unction normaliz
3820: 65 50 68 6f 6e 65 4e 75 6d 62 65 72 28 24 6e 29  ePhoneNumber($n)
3830: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24  .    {.        $
3840: 6e 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65  n = preg_replace
3850: 28 27 21 5b 5e 5c 64 5c 2b 5d 21 27 2c 20 27 27  ('![^\d\+]!', ''
3860: 2c 20 24 6e 29 3b 0a 20 20 20 20 20 20 20 20 72  , $n);.        r
3870: 65 74 75 72 6e 20 24 6e 3b 0a 20 20 20 20 7d 0a  eturn $n;.    }.
3880: 0a 20 20 20 20 73 74 61 74 69 63 20 70 75 62 6c  .    static publ
3890: 69 63 20 66 75 6e 63 74 69 6f 6e 20 77 72 69 74  ic function writ
38a0: 65 5f 69 6e 69 5f 73 74 72 69 6e 67 28 24 69 6e  e_ini_string($in
38b0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  ).    {.        
38c0: 24 6f 75 74 20 3d 20 27 27 3b 0a 20 20 20 20 20  $out = '';.     
38d0: 20 20 20 24 67 65 74 5f 69 6e 69 5f 6c 69 6e 65     $get_ini_line
38e0: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 24 6b 65   = function ($ke
38f0: 79 2c 20 24 76 61 6c 75 65 29 20 75 73 65 20 28  y, $value) use (
3900: 26 24 67 65 74 5f 69 6e 69 5f 6c 69 6e 65 29 0a  &$get_ini_line).
3910: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
3920: 20 20 20 20 20 20 69 66 20 28 69 73 5f 62 6f 6f        if (is_boo
3930: 6c 28 24 76 61 6c 75 65 29 29 0a 20 20 20 20 20  l($value)).     
3940: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
3950: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3960: 24 6b 65 79 20 2e 20 27 20 3d 20 27 20 2e 20 28  $key . ' = ' . (
3970: 24 76 61 6c 75 65 20 3f 20 27 74 72 75 65 27 20  $value ? 'true' 
3980: 3a 20 27 66 61 6c 73 65 27 29 3b 0a 20 20 20 20  : 'false');.    
3990: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
39a0: 20 20 20 20 20 20 65 6c 73 65 69 66 20 28 69 73        elseif (is
39b0: 5f 6e 75 6d 65 72 69 63 28 24 76 61 6c 75 65 29  _numeric($value)
39c0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  ).            {.
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39e0: 72 65 74 75 72 6e 20 24 6b 65 79 20 2e 20 27 20  return $key . ' 
39f0: 3d 20 27 20 2e 20 24 76 61 6c 75 65 3b 0a 20 20  = ' . $value;.  
3a00: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
3a10: 20 20 20 20 20 20 20 20 65 6c 73 65 69 66 20 28          elseif (
3a20: 69 73 5f 61 72 72 61 79 28 24 76 61 6c 75 65 29  is_array($value)
3a30: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  ).            {.
3a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a50: 24 6f 75 74 20 3d 20 27 27 3b 0a 20 20 20 20 20  $out = '';.     
3a60: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
3a70: 63 68 20 28 24 76 61 6c 75 65 20 61 73 20 24 72  ch ($value as $r
3a80: 6f 77 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ow).            
3a90: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
3aa0: 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 20 2e            $out .
3ab0: 3d 20 24 67 65 74 5f 69 6e 69 5f 6c 69 6e 65 28  = $get_ini_line(
3ac0: 24 6b 65 79 20 2e 20 27 5b 5d 27 2c 20 24 72 6f  $key . '[]', $ro
3ad0: 77 29 20 2e 20 22 5c 6e 22 3b 0a 20 20 20 20 20  w) . "\n";.     
3ae0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20             }..  
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3b00: 74 75 72 6e 20 73 75 62 73 74 72 28 24 6f 75 74  turn substr($out
3b10: 2c 20 30 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20  , 0, -1);.      
3b20: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3b30: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
3b40: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
3b50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 6b         return $k
3b60: 65 79 20 2e 20 27 20 3d 20 22 27 20 2e 20 73 74  ey . ' = "' . st
3b70: 72 5f 72 65 70 6c 61 63 65 28 27 22 27 2c 20 27  r_replace('"', '
3b80: 5c 5c 22 27 2c 20 24 76 61 6c 75 65 29 20 2e 20  \\"', $value) . 
3b90: 27 22 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20  '"';.           
3ba0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 3b 0a 0a 20   }.        };.. 
3bb0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
3bc0: 24 69 6e 20 61 73 20 24 6b 65 79 3d 3e 24 76 61  $in as $key=>$va
3bd0: 6c 75 65 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  lue).        {. 
3be0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
3bf0: 73 5f 61 72 72 61 79 28 24 76 61 6c 75 65 29 20  s_array($value) 
3c00: 26 26 20 69 73 5f 73 74 72 69 6e 67 28 24 6b 65  && is_string($ke
3c10: 79 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)).            
3c20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
3c30: 20 20 24 6f 75 74 20 2e 3d 20 27 5b 27 20 2e 20    $out .= '[' . 
3c40: 24 6b 65 79 20 2e 20 22 5d 5c 6e 22 3b 0a 0a 20  $key . "]\n";.. 
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
3c60: 6f 72 65 61 63 68 20 28 24 76 61 6c 75 65 20 61  oreach ($value a
3c70: 73 20 24 72 6f 77 5f 6b 65 79 3d 3e 24 72 6f 77  s $row_key=>$row
3c80: 5f 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20  _value).        
3c90: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f                $o
3cb0: 75 74 20 2e 3d 20 24 67 65 74 5f 69 6e 69 5f 6c  ut .= $get_ini_l
3cc0: 69 6e 65 28 24 72 6f 77 5f 6b 65 79 2c 20 24 72  ine($row_key, $r
3cd0: 6f 77 5f 76 61 6c 75 65 29 20 2e 20 22 5c 6e 22  ow_value) . "\n"
3ce0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
3cf0: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3d00: 20 20 20 20 20 24 6f 75 74 20 2e 3d 20 22 5c 6e       $out .= "\n
3d10: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ";.            }
3d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
3d30: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  e.            {.
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 24 6f 75 74 20 2e 3d 20 24 67 65 74 5f 69 6e 69  $out .= $get_ini
3d60: 5f 6c 69 6e 65 28 24 6b 65 79 2c 20 24 76 61 6c  _line($key, $val
3d70: 75 65 29 20 2e 20 22 5c 6e 22 3b 0a 20 20 20 20  ue) . "\n";.    
3d80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
3d90: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
3da0: 75 72 6e 20 24 6f 75 74 3b 0a 20 20 20 20 7d 0a  urn $out;.    }.
3db0: 0a 20 20 20 20 73 74 61 74 69 63 20 70 75 62 6c  .    static publ
3dc0: 69 63 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 4d  ic function getM
3dd0: 61 78 55 70 6c 6f 61 64 53 69 7a 65 28 29 0a 20  axUploadSize(). 
3de0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74     {.        ret
3df0: 75 72 6e 20 6d 69 6e 28 5b 0a 20 20 20 20 20 20  urn min([.      
3e00: 20 20 20 20 20 20 73 65 6c 66 3a 3a 72 65 74 75        self::retu
3e10: 72 6e 5f 62 79 74 65 73 28 69 6e 69 5f 67 65 74  rn_bytes(ini_get
3e20: 28 27 75 70 6c 6f 61 64 5f 6d 61 78 5f 66 69 6c  ('upload_max_fil
3e30: 65 73 69 7a 65 27 29 29 2c 0a 20 20 20 20 20 20  esize')),.      
3e40: 20 20 20 20 20 20 73 65 6c 66 3a 3a 72 65 74 75        self::retu
3e50: 72 6e 5f 62 79 74 65 73 28 69 6e 69 5f 67 65 74  rn_bytes(ini_get
3e60: 28 27 70 6f 73 74 5f 6d 61 78 5f 73 69 7a 65 27  ('post_max_size'
3e70: 29 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  )),.            
3e80: 73 65 6c 66 3a 3a 72 65 74 75 72 6e 5f 62 79 74  self::return_byt
3e90: 65 73 28 69 6e 69 5f 67 65 74 28 27 6d 65 6d 6f  es(ini_get('memo
3ea0: 72 79 5f 6c 69 6d 69 74 27 29 29 0a 20 20 20 20  ry_limit')).    
3eb0: 20 20 20 20 5d 29 3b 0a 20 20 20 20 7d 0a 0a 0a      ]);.    }...
3ec0: 20 20 20 20 73 74 61 74 69 63 20 70 75 62 6c 69      static publi
3ed0: 63 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  c function retur
3ee0: 6e 5f 62 79 74 65 73 20 28 24 73 69 7a 65 5f 73  n_bytes ($size_s
3ef0: 74 72 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  tr).    {.      
3f00: 20 20 73 77 69 74 63 68 20 28 73 75 62 73 74 72    switch (substr
3f10: 28 24 73 69 7a 65 5f 73 74 72 2c 20 2d 31 29 29  ($size_str, -1))
3f20: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
3f30: 20 20 20 20 20 20 20 63 61 73 65 20 27 47 27 3a         case 'G':
3f40: 20 63 61 73 65 20 27 67 27 3a 20 72 65 74 75 72   case 'g': retur
3f50: 6e 20 28 69 6e 74 29 24 73 69 7a 65 5f 73 74 72  n (int)$size_str
3f60: 20 2a 20 70 6f 77 28 31 30 32 34 2c 20 33 29 3b   * pow(1024, 3);
3f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
3f80: 65 20 27 4d 27 3a 20 63 61 73 65 20 27 6d 27 3a  e 'M': case 'm':
3f90: 20 72 65 74 75 72 6e 20 28 69 6e 74 29 24 73 69   return (int)$si
3fa0: 7a 65 5f 73 74 72 20 2a 20 70 6f 77 28 31 30 32  ze_str * pow(102
3fb0: 34 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 20  4, 2);.         
3fc0: 20 20 20 63 61 73 65 20 27 4b 27 3a 20 63 61 73     case 'K': cas
3fd0: 65 20 27 6b 27 3a 20 72 65 74 75 72 6e 20 28 69  e 'k': return (i
3fe0: 6e 74 29 24 73 69 7a 65 5f 73 74 72 20 2a 20 31  nt)$size_str * 1
3ff0: 30 32 34 3b 0a 20 20 20 20 20 20 20 20 20 20 20  024;.           
4000: 20 64 65 66 61 75 6c 74 3a 20 72 65 74 75 72 6e   default: return
4010: 20 24 73 69 7a 65 5f 73 74 72 3b 0a 20 20 20 20   $size_str;.    
4020: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
4030: 20 73 74 61 74 69 63 20 70 75 62 6c 69 63 20 66   static public f
4040: 75 6e 63 74 69 6f 6e 20 64 65 6c 65 74 65 52 65  unction deleteRe
4050: 63 75 72 73 69 76 65 28 24 70 61 74 68 2c 20 24  cursive($path, $
4060: 64 65 6c 65 74 65 5f 74 61 72 67 65 74 20 3d 20  delete_target = 
4070: 66 61 6c 73 65 29 0a 20 20 20 20 7b 0a 20 20 20  false).    {.   
4080: 20 20 20 20 20 69 66 20 28 21 66 69 6c 65 5f 65       if (!file_e
4090: 78 69 73 74 73 28 24 70 61 74 68 29 29 0a 20 20  xists($path)).  
40a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
40b0: 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20   false;..       
40c0: 20 24 64 69 72 20 3d 20 64 69 72 28 24 70 61 74   $dir = dir($pat
40d0: 68 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  h);.        if (
40e0: 21 24 64 69 72 29 20 72 65 74 75 72 6e 20 66 61  !$dir) return fa
40f0: 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 77 68  lse;..        wh
4100: 69 6c 65 20 28 24 66 69 6c 65 20 3d 20 24 64 69  ile ($file = $di
4110: 72 2d 3e 72 65 61 64 28 29 29 0a 20 20 20 20 20  r->read()).     
4120: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
4130: 20 69 66 20 28 24 66 69 6c 65 20 3d 3d 20 27 2e   if ($file == '.
4140: 27 20 7c 7c 20 24 66 69 6c 65 20 3d 3d 20 27 2e  ' || $file == '.
4150: 2e 27 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  .').            
4160: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20      continue;.. 
4170: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
4180: 73 5f 64 69 72 28 24 70 61 74 68 20 2e 20 27 2f  s_dir($path . '/
4190: 27 20 2e 20 24 66 69 6c 65 29 29 0a 20 20 20 20  ' . $file)).    
41a0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
41b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73            if (!s
41c0: 65 6c 66 3a 3a 64 65 6c 65 74 65 52 65 63 75 72  elf::deleteRecur
41d0: 73 69 76 65 28 24 70 61 74 68 20 2e 20 27 2f 27  sive($path . '/'
41e0: 20 2e 20 24 66 69 6c 65 2c 20 74 72 75 65 29 29   . $file, true))
41f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4200: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
4210: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e;.            }
4220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
4230: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  e.            {.
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4250: 75 6e 6c 69 6e 6b 28 24 70 61 74 68 20 2e 20 27  unlink($path . '
4260: 2f 27 20 2e 20 24 66 69 6c 65 29 3b 0a 20 20 20  /' . $file);.   
4270: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
4280: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 64     }..        $d
4290: 69 72 2d 3e 63 6c 6f 73 65 28 29 3b 0a 20 20 20  ir->close();.   
42a0: 20 20 20 20 20 72 6d 64 69 72 28 24 70 61 74 68       rmdir($path
42b0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
42c0: 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a  rn true;.    }..
42d0: 20 20 20 20 73 74 61 74 69 63 20 70 75 62 6c 69      static publi
42e0: 63 20 66 75 6e 63 74 69 6f 6e 20 70 6c 75 67 69  c function plugi
42f0: 6e 5f 75 72 6c 28 24 70 61 72 61 6d 73 20 3d 20  n_url($params = 
4300: 5b 5d 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  []).    {.      
4310: 20 20 69 66 20 28 21 64 65 66 69 6e 65 64 28 27    if (!defined('
4320: 47 61 72 72 61 64 69 6e 5c 50 4c 55 47 49 4e 5f  Garradin\PLUGIN_
4330: 55 52 4c 27 29 29 0a 20 20 20 20 20 20 20 20 7b  URL')).        {
4340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 75 72  .            $ur
4350: 6c 20 3d 20 57 57 57 5f 55 52 4c 20 2e 20 27 61  l = WWW_URL . 'a
4360: 64 6d 69 6e 2f 70 6c 75 67 69 6e 2f 27 20 2e 20  dmin/plugin/' . 
4370: 24 70 61 72 61 6d 73 5b 27 69 64 27 5d 20 2e 20  $params['id'] . 
4380: 27 2f 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  '/';.        }. 
4390: 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20         else.    
43a0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
43b0: 20 20 24 75 72 6c 20 3d 20 50 4c 55 47 49 4e 5f    $url = PLUGIN_
43c0: 55 52 4c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  URL;.        }..
43d0: 20 20 20 20 20 20 20 20 69 66 20 28 21 65 6d 70          if (!emp
43e0: 74 79 28 24 70 61 72 61 6d 73 5b 27 66 69 6c 65  ty($params['file
43f0: 27 5d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  '])).           
4400: 20 24 75 72 6c 20 2e 3d 20 24 70 61 72 61 6d 73   $url .= $params
4410: 5b 27 66 69 6c 65 27 5d 3b 0a 0a 20 20 20 20 20  ['file'];..     
4420: 20 20 20 69 66 20 28 21 65 6d 70 74 79 28 24 70     if (!empty($p
4430: 61 72 61 6d 73 5b 27 71 75 65 72 79 27 5d 29 29  arams['query']))
4440: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
4450: 20 20 20 20 20 20 20 24 75 72 6c 20 2e 3d 20 27         $url .= '
4460: 3f 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ?';.            
4470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4480: 28 21 28 69 73 5f 6e 75 6d 65 72 69 63 28 24 70  (!(is_numeric($p
4490: 61 72 61 6d 73 5b 27 71 75 65 72 79 27 5d 29 20  arams['query']) 
44a0: 26 26 20 28 69 6e 74 29 24 70 61 72 61 6d 73 5b  && (int)$params[
44b0: 27 71 75 65 72 79 27 5d 20 3d 3d 3d 20 31 29 20  'query'] === 1) 
44c0: 26 26 20 24 70 61 72 61 6d 73 5b 27 71 75 65 72  && $params['quer
44d0: 79 27 5d 20 21 3d 3d 20 74 72 75 65 29 0a 20 20  y'] !== true).  
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75                $u
44f0: 72 6c 20 2e 3d 20 24 70 61 72 61 6d 73 5b 27 71  rl .= $params['q
4500: 75 65 72 79 27 5d 3b 0a 20 20 20 20 20 20 20 20  uery'];.        
4510: 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
4520: 6e 20 24 75 72 6c 3b 0a 20 20 20 20 7d 0a 0a 20  n $url;.    }.. 
4530: 20 20 20 73 74 61 74 69 63 20 70 75 62 6c 69 63     static public
4540: 20 66 75 6e 63 74 69 6f 6e 20 66 69 6e 64 5f 63   function find_c
4550: 73 76 5f 64 65 6c 69 6d 28 24 66 70 29 0a 20 20  sv_delim($fp).  
4560: 20 20 7b 0a 20 20 20 20 20 20 20 20 24 6c 69 6e    {.        $lin
4570: 65 20 3d 20 27 27 3b 0a 0a 20 20 20 20 20 20 20  e = '';..       
4580: 20 77 68 69 6c 65 20 28 24 6c 69 6e 65 20 3d 3d   while ($line ==
4590: 3d 20 27 27 20 26 26 20 21 66 65 6f 66 28 24 66  = '' && !feof($f
45a0: 70 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  p)).        {.  
45b0: 20 20 20 20 20 20 20 20 20 20 24 6c 69 6e 65 20            $line 
45c0: 3d 20 74 72 69 6d 28 66 67 65 74 73 28 24 66 70  = trim(fgets($fp
45d0: 2c 20 34 30 39 36 29 29 3b 0a 20 20 20 20 20 20  , 4096));.      
45e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 0a 20 20 20    }.        .   
45f0: 20 20 20 20 20 2f 2f 20 44 65 6c 65 74 65 20 74       // Delete t
4600: 68 65 20 63 6f 6c 75 6d 6e 73 20 63 6f 6e 74 65  he columns conte
4610: 6e 74 0a 20 20 20 20 20 20 20 20 24 6c 69 6e 65  nt.        $line
4620: 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65 28   = preg_replace(
4630: 27 2f 22 2e 2a 3f 22 2f 27 2c 20 27 27 2c 20 24  '/".*?"/', '', $
4640: 6c 69 6e 65 29 3b 0a 0a 20 20 20 20 20 20 20 20  line);..        
4650: 24 64 65 6c 69 6d 73 20 3d 20 5b 0a 20 20 20 20  $delims = [.    
4660: 20 20 20 20 20 20 20 20 27 3b 27 20 3d 3e 20 73          ';' => s
4670: 75 62 73 74 72 5f 63 6f 75 6e 74 28 24 6c 69 6e  ubstr_count($lin
4680: 65 2c 20 27 3b 27 29 2c 0a 20 20 20 20 20 20 20  e, ';'),.       
4690: 20 20 20 20 20 27 2c 27 20 3d 3e 20 73 75 62 73       ',' => subs
46a0: 74 72 5f 63 6f 75 6e 74 28 24 6c 69 6e 65 2c 20  tr_count($line, 
46b0: 27 2c 27 29 2c 0a 20 20 20 20 20 20 20 20 20 20  ','),.          
46c0: 20 20 22 5c 74 22 3d 3e 20 73 75 62 73 74 72 5f    "\t"=> substr_
46d0: 63 6f 75 6e 74 28 24 6c 69 6e 65 2c 20 22 5c 74  count($line, "\t
46e0: 22 29 0a 20 20 20 20 20 20 20 20 5d 3b 0a 0a 20  ").        ];.. 
46f0: 20 20 20 20 20 20 20 61 72 73 6f 72 74 28 24 64         arsort($d
4700: 65 6c 69 6d 73 29 3b 0a 20 20 20 20 20 20 20 20  elims);.        
4710: 72 65 73 65 74 28 24 64 65 6c 69 6d 73 29 3b 0a  reset($delims);.
4720: 0a 20 20 20 20 20 20 20 20 72 65 77 69 6e 64 28  .        rewind(
4730: 24 66 70 29 3b 0a 20 20 20 20 20 20 20 20 72 65  $fp);.        re
4740: 74 75 72 6e 20 6b 65 79 28 24 64 65 6c 69 6d 73  turn key($delims
4750: 29 3b 0a 20 20 20 20 7d 0a 0a 7d 0a              );.    }..}.