PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/FSN/library/Yab/Validator/Date.php

https://gitlab.com/r.collas/site_central
PHP | 165 lines | 45 code | 56 blank | 64 comment | 1 complexity | f9ddd0e5fb37dc2e2a057d23923b5df1 MD5 | raw file
  1. <?php
  2. /**
  3. * Yab Framework
  4. *
  5. * @category Yab_Validator
  6. * @package Yab_Validator_Date
  7. * @author Yann BELLUZZI
  8. * @copyright (c) 2010 YBellu
  9. * @license http://www.ybellu.com/yab-framework/license.html
  10. * @link http://www.ybellu.com/yab-framework
  11. */
  12. class Yab_Validator_Date extends Yab_Validator_Abstract {
  13. const NOT_VALID = 'Value is not a valid date "$1"';
  14. public function _validate($value) {
  15. $format = $this->get('format');
  16. $filter = new Yab_Filter_Date();
  17. $filter->set('format', $format);
  18. $value = $filter->filter($value);
  19. $format = preg_quote($format, '#');
  20. $format = strtr($format, array(
  21. // RACCOURCI
  22. // Identique � "%m/%d/%y" Exemple : 02/05/09 pour le 5 F�vrier 2009
  23. '%D' => '%m/%d/%y',
  24. // Identique � "%Y-%m-%d" (utilis� habituellement par les bases de donn�es) Exemple : 2009-02-05 pour le 5 f�vrier 2009
  25. '%F' => '%Y-%m-%d',
  26. // Identique � "%I:%M:%S %p" Exemple : 09:34:17 PM pour 21:34:17
  27. '%r' => '%I:%M:%S',
  28. // Identique � "%H:%M" Exemple : 00:35 pour 12:35 AM, 16:44 pour 4:44 PM
  29. '%R' => '%H:%M',
  30. // Identique � "%H:%M:%S" Exemple : 21:34:17 pour 09:34:17 PM
  31. '%T' => '%H:%M:%S',
  32. // OPTIONS
  33. // Nom abr�g� du jour de la semaine De Sun � Sat
  34. '%a' => '[a-zA-Z]{3}',
  35. // Nom complet du jour de la semaine De Sunday � Saturday
  36. '%A' => '[a-zA-Z]+',
  37. // Jour du mois en num�rique, sur 2 chiffres (avec le z�ro initial) De 01 � 31
  38. '%d' => '(01|02|03|04|05|06|07|08|09|'.implode('|', range(10, 31)).')',
  39. // Jour du mois, avec un espace pr�c�dant le premier chiffre De 1 � 31
  40. '%e' => '('.implode('|', range(1, 31)).')',
  41. // Jour de l'ann�e, sur 3 chiffres avec un z�ro initial 001 � 366
  42. // '%j' => '('.implode('|', range(1, 31)).')',
  43. // Repr�sentation ISO-8601 du jour de la semaine De 1 (pour Lundi) � 7 (pour Dimanche)
  44. '%u' => '('.implode('|', range(1, 7)).')',
  45. // Repr�sentation num�rique du jour de la semaine De 0 (pour Dimanche) � 6 (pour Samedi)
  46. '%w' => '('.implode('|', range(0, 6)).')',
  47. // Num�ro de la semaine de l'ann�e donn�e, en commen�ant par le premier Lundi comme premi�re semaine 13 (pour la 13�me semaine pleine de l'ann�e)
  48. // '%U' => '',
  49. // Num�ro de la semaine de l'ann�e, suivant la norme ISO-8601:1988, en commen�ant comme premi�re semaine, la semaine de l'ann�e contenant au moins 4 jours, et o� Lundi est le d�but de la semaine De 01 � 53 (o� 53 compte comme semaine de chevauchement)
  50. // '%V' => '',
  51. // Une repr�sentation num�rique de la semaine de l'ann�e, en commen�ant par le premier Lundi de la premi�re semaine 46 (pour la 46�me semaine de la semaine commen�ant par un Lundi)
  52. // '%W' => '',
  53. // Nom du mois, abr�g�, suivant la locale De Jan � Dec
  54. '%b' => '[a-zA-Z]{3}',
  55. // Nom complet du mois, suivant la locale De January � December
  56. '%B' => '[a-zA-Z]+',
  57. // Nom du mois abr�g�, suivant la locale (alias de %b) De Jan � Dec
  58. '%h' => '[a-zA-Z]{3}',
  59. // Mois, sur 2 chiffres De 01 (pour Janvier) � 12 (pour D�cembre)
  60. '%m' => '(01|02|03|04|05|06|07|08|09|'.implode('|', range(10, 12)).')',
  61. // Repr�sentation, sur 2 chiffres, du si�cle (ann�e divis�e par 100, r�duit � un entier) 19 pour le 20�me si�cle
  62. // '%C' => '',
  63. // Repr�sentation, sur 2 chiffres, de l'ann�e, compatible avec les standards ISO-8601:1988 (voyez %V) Exemple : 09 pour la semaine du 6 janvier 2009
  64. '%g' => '[0-9]{2}',
  65. // La version compl�te � quatre chiffres de %g Exemple : 2008 pour la semaine du 3 janvier 2009
  66. // '%G' => '',
  67. // L'ann�e, sur 2 chiffres Exemple : 09 pour 2009, 79 pour 1979
  68. '%y' => '[0-9]{2}',
  69. // L'ann�e, sur 4 chiffres Exemple : 2038
  70. '%Y' => '[0-9]{4}',
  71. // L'heure, sur 2 chiffres, au format 24 heures De 00 � 23
  72. '%H' => '(00|01|02|03|04|05|06|07|08|09|'.implode('|', range(10, 23)).')',
  73. // Heure, sur 2 chiffres, au format 12 heures De 01 � 12
  74. '%I' => '(01|02|03|04|05|06|07|08|09|'.implode('|', range(10, 12)).')',
  75. // ('L' minuscule) Heure, au format 12 heures, avec un espace pr�c�dant de compl�tion pour les heures sur un chiffre De 1 � 12
  76. '%l' => '('.implode('|', range(1, 12)).')',
  77. // Minute, sur 2 chiffres De 00 � 59
  78. '%M' => '(00|01|02|03|04|05|06|07|08|09|'.implode('|', range(10, 59)).')',
  79. // 'AM' ou 'PM', en majuscule, bas� sur l'heure fournie Exemple : AM pour 00:31, PM pour 22:23
  80. '%p' => '(AM|PM)',
  81. // 'am' ou 'pm', en minuscule, bas� sur l'heure fournie Exemple : am pour 00:31, pm pour 22:23
  82. '%P' => '(am|pm)',
  83. // Seconde, sur 2 chiffres De 00 � 59
  84. '%S' => '(00|01|02|03|04|05|06|07|08|09|'.implode('|', range(10, 59)).')',
  85. // Repr�sentation de l'heure, bas�e sur la locale, sans la date Exemple : 03:59:16 ou 15:59:16
  86. // '%X' => '',
  87. // Soit le d�calage horaire depuis UTC, ou son abr�viation (suivant le syst�me d'exploitation) Exemple : -0500 ou EST pour l'heure de l'Est
  88. // '%z' => '',
  89. // Le d�calage horaire ou son abr�viation NON fournie par %z (suivant le syst�me d'exploitation) Exemple : -0500 ou EST pour l'heure de l'Est
  90. // '%Z' => '',
  91. // Date et heure pr�f�r�es, bas�es sur la locale Exemple : Tue Feb 5 00:45:10 2009 pour le 4 F�vrier 2009 � 12:45:10 AM
  92. // '%c' => '',
  93. // Timestamp de l'�poque Unix (identique � la fonction time()) Exemple : 305815200 pour le 10 Septembre 1979 08:40:00 AM
  94. '%s' => '[0-9]+',
  95. // Repr�sentation pr�f�r�e de la date, bas�e sur la locale, sans l'heure Exemple : 02/05/09 pour le 5 F�vrier 2009
  96. // '%x ' => '',
  97. // Une nouvelle ligne ("\n")
  98. '%n' => '\n
  99. ',
  100. // Une tabulation ("\t")
  101. '%t' => '\t',
  102. // Le caract�re de pourcentage ("%")
  103. '%%' => '%',
  104. ));
  105. if(!preg_match('#'.$format.'#i', $value))
  106. $this->addError('NOT_VALID', $this->getTranslatedError('NOT_DATE', array("V" => $value, "F" => $this->field)));
  107. }
  108. }
  109. // Do not clause PHP tags unless it is really necessary