1 | <?php |
||
14 | class Filter implements FilterContract { |
||
15 | /** |
||
16 | * Filter rules. |
||
17 | * |
||
18 | * @var array |
||
19 | */ |
||
20 | protected $rules; |
||
21 | |||
22 | /** |
||
23 | * Instantiates a new filter with the provided rules array. |
||
24 | * |
||
25 | * @param array $rules |
||
26 | */ |
||
27 | 36 | public function __construct( $rules = array() ) { |
|
30 | |||
31 | /** |
||
32 | * Generates argument rules. |
||
33 | * |
||
34 | * Returns an array matching the WP-API format for argument rules, |
||
35 | * including sanitization, validation, required, or defaults. |
||
36 | * |
||
37 | * @return array |
||
38 | */ |
||
39 | 21 | public function rules() { |
|
52 | |||
53 | /** |
||
54 | * Parses a validation string into a WP-API compatible rule. |
||
55 | * |
||
56 | * @param string $validation |
||
57 | * |
||
58 | * @return array |
||
59 | * |
||
60 | * @todo The next rule added needs to refactor this process. |
||
61 | */ |
||
62 | 18 | protected function parse_validation( $validation ) { |
|
63 | 18 | $validation = explode( '|', $validation ); |
|
64 | |||
65 | 18 | $rules = array(); |
|
66 | |||
67 | 18 | foreach ( $validation as $rule ) { |
|
68 | 18 | if ( 0 === strpos( $rule, 'default' ) ) { |
|
69 | 9 | $rule_arr = explode( ':', $rule ); |
|
70 | |||
71 | 9 | $rules['default'] = count( $rule_arr ) === 2 ? array_pop( $rule_arr ) : ''; |
|
72 | 6 | } |
|
73 | |||
74 | 18 | if ( 0 === strpos( $rule, 'oneof' ) ) { |
|
75 | 3 | list( $rule, $values ) = explode( ':', $rule ); |
|
76 | |||
77 | 3 | $values = explode( ',', $values ); |
|
78 | 1 | $callback = function ( $value ) use ( $values ) { |
|
79 | 3 | if ( in_array( $value, $values, true ) ) { |
|
80 | 3 | return true; |
|
81 | } |
||
82 | |||
83 | 3 | return false; |
|
84 | 3 | }; |
|
85 | |||
86 | 3 | $rules['validate_callback'] = isset( $rules['validate_callback'] ) ? $this->add_callback( $rules['validate_callback'], $callback ) : $callback; |
|
87 | 2 | } |
|
88 | |||
89 | 6 | switch ( $rule ) { |
|
90 | 18 | case 'required': |
|
91 | 3 | $rules['required'] = true; |
|
92 | 3 | break; |
|
93 | 15 | case 'integer': |
|
94 | 6 | $callback = array( $this, 'validate_integer' ); |
|
95 | 6 | $rules['validate_callback'] = isset( $rules['validate_callback'] ) ? $this->add_callback( $rules['validate_callback'], $callback ) : $callback; |
|
96 | |||
97 | 6 | $callback = array( $this, 'make_integer' ); |
|
98 | 6 | $rules['sanitize_callback'] = isset( $rules['sanitize_callback'] ) ? $this->add_callback( $rules['sanitize_callback'], $callback ) : $callback; |
|
99 | 6 | break; |
|
100 | } |
||
101 | 12 | } |
|
102 | |||
103 | 18 | return $rules; |
|
104 | } |
||
105 | |||
106 | /** |
||
107 | * Validate that provided value is an integer. |
||
108 | * |
||
109 | * @param mixed $value |
||
110 | * |
||
111 | * @return bool |
||
112 | */ |
||
113 | 9 | public function validate_integer( $value ) { |
|
116 | |||
117 | /** |
||
118 | * Casts a provided value to an integer. |
||
119 | * |
||
120 | * @param mixed $value |
||
121 | * |
||
122 | * @return int |
||
123 | */ |
||
124 | 6 | public function make_integer( $value ) { |
|
127 | |||
128 | /** |
||
129 | * Creates a new callback that connects the previous and next callback. |
||
130 | * |
||
131 | * @param callable $previous |
||
132 | * @param callable $next |
||
133 | * |
||
134 | * @return \Closure; |
||
|
|||
135 | */ |
||
136 | private function add_callback( $previous, $next ) { |
||
145 | } |
||
146 |
This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.