Blame view

vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Integer.php 2.49 KB
abf1649b   andryeyev   Чистая установка ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  <?php
  
  /**
   * Validates an integer.
   * @note While this class was modeled off the CSS definition, no currently
   *       allowed CSS uses this type.  The properties that do are: widows,
   *       orphans, z-index, counter-increment, counter-reset.  Some of the
   *       HTML attributes, however, find use for a non-negative version of this.
   */
  class HTMLPurifier_AttrDef_Integer extends HTMLPurifier_AttrDef
  {
  
      /**
       * Whether or not negative values are allowed.
       * @type bool
       */
      protected $negative = true;
  
      /**
       * Whether or not zero is allowed.
       * @type bool
       */
      protected $zero = true;
  
      /**
       * Whether or not positive values are allowed.
       * @type bool
       */
      protected $positive = true;
  
      /**
       * @param $negative Bool indicating whether or not negative values are allowed
       * @param $zero Bool indicating whether or not zero is allowed
       * @param $positive Bool indicating whether or not positive values are allowed
       */
      public function __construct($negative = true, $zero = true, $positive = true)
      {
          $this->negative = $negative;
          $this->zero = $zero;
          $this->positive = $positive;
      }
  
      /**
       * @param string $integer
       * @param HTMLPurifier_Config $config
       * @param HTMLPurifier_Context $context
       * @return bool|string
       */
      public function validate($integer, $config, $context)
      {
          $integer = $this->parseCDATA($integer);
          if ($integer === '') {
              return false;
          }
  
          // we could possibly simply typecast it to integer, but there are
          // certain fringe cases that must not return an integer.
  
          // clip leading sign
          if ($this->negative && $integer[0] === '-') {
              $digits = substr($integer, 1);
              if ($digits === '0') {
                  $integer = '0';
              } // rm minus sign for zero
          } elseif ($this->positive && $integer[0] === '+') {
              $digits = $integer = substr($integer, 1); // rm unnecessary plus
          } else {
              $digits = $integer;
          }
  
          // test if it's numeric
          if (!ctype_digit($digits)) {
              return false;
          }
  
          // perform scope tests
          if (!$this->zero && $integer == 0) {
              return false;
          }
          if (!$this->positive && $integer > 0) {
              return false;
          }
          if (!$this->negative && $integer < 0) {
              return false;
          }
  
          return $integer;
      }
  }
  
  // vim: et sw=4 sts=4