abstract-rules.php000064400000006407150732266310010224 0ustar00properties = wp_parse_args( $properties, array() ); } /** * Returns true if this rule matches the given context. * * @param array $context Context. */ public function matches( $context ) { $field = $this->get_property( 'field' ); if ( ! empty( $context['field'] ) ) { if ( $field and ! in_array( $field, (array) $context['field'], true ) ) { return false; } } return true; } /** * Validates with this rule's logic. * * @param array $context Context. */ public function validate( $context ) { return true; } /** * Converts the properties to an array. * * @return array Array of properties. */ public function to_array() { $properties = (array) $this->properties; if ( defined( 'static::rule_name' ) and static::rule_name ) { $properties = array( 'rule' => static::rule_name ) + $properties; } return $properties; } /** * Returns the property value specified by the given property name. * * @param string $name Property name. * @return mixed Property value. */ public function get_property( $name ) { if ( isset( $this->properties[$name] ) ) { return $this->properties[$name]; } } /** * Returns the default user input value from $_POST. * * @return mixed Default user input value. */ public function get_default_input() { $field = $this->get_property( 'field' ); if ( isset( $_POST[$field] ) ) { return wp_unslash( $_POST[$field] ); } return ''; } /** * Creates an error object. Returns false if the error property is omitted. */ protected function create_error() { $error_code = defined( 'static::rule_name' ) ? sprintf( 'swv_%s', static::rule_name ) : 'swv'; return new WP_Error( $error_code, (string) $this->get_property( 'error' ), $this ); } } /** * The base class of SWV composite rules. */ abstract class CompositeRule extends Rule { protected $rules = array(); /** * Adds a sub-rule to this composite rule. * * @param Rule $rule Sub-rule to be added. */ public function add_rule( $rule ) { if ( $rule instanceof Rule ) { $this->rules[] = $rule; } } /** * Returns an iterator of sub-rules. */ public function rules() { foreach ( $this->rules as $rule ) { yield $rule; } } /** * Returns true if this rule matches the given context. * * @param array $context Context. */ public function matches( $context ) { return true; } /** * Validates with this rule's logic. * * @param array $context Context. */ public function validate( $context ) { foreach ( $this->rules() as $rule ) { if ( $rule->matches( $context ) ) { $result = $rule->validate( $context ); if ( is_wp_error( $result ) ) { return $result; } } } return true; } /** * Converts the properties to an array. * * @return array Array of properties. */ public function to_array() { $rules_arrays = array_map( static function ( $rule ) { return $rule->to_array(); }, $this->rules ); return array_merge( parent::to_array(), array( 'rules' => $rules_arrays, ) ); } } rules/minlength.php000064400000001442150732266310010402 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return true; } $total = 0; foreach ( $input as $i ) { $total += wpcf7_count_code_units( $i ); } $threshold = (int) $this->get_property( 'threshold' ); if ( $threshold <= $total ) { return true; } else { return $this->create_error(); } } } rules/file.php000064400000002437150732266310007341 0ustar00get_property( 'field' ); $input = $_FILES[$field]['name'] ?? ''; $input = wpcf7_array_flatten( $input ); $input = wpcf7_exclude_blank( $input ); $acceptable_filetypes = array(); foreach ( (array) $this->get_property( 'accept' ) as $accept ) { if ( preg_match( '/^\.[a-z0-9]+$/i', $accept ) ) { $acceptable_filetypes[] = strtolower( $accept ); } else { foreach ( wpcf7_convert_mime_to_ext( $accept ) as $ext ) { $acceptable_filetypes[] = sprintf( '.%s', strtolower( trim( $ext, ' .' ) ) ); } } } $acceptable_filetypes = array_unique( $acceptable_filetypes ); foreach ( $input as $i ) { $last_period_pos = strrpos( $i, '.' ); if ( false === $last_period_pos ) { // no period return $this->create_error(); } $suffix = strtolower( substr( $i, $last_period_pos ) ); if ( ! in_array( $suffix, $acceptable_filetypes, true ) ) { return $this->create_error(); } } return true; } } rules/enum.php000064400000002132150732266310007356 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $acceptable_values = (array) $this->get_property( 'accept' ); $acceptable_values = array_map( static function ( $val ) { $val = strval( $val ); $val = wpcf7_normalize_newline( $val ); return $val; }, $acceptable_values ); $acceptable_values = array_unique( $acceptable_values ); $acceptable_values = array_filter( $acceptable_values, static function ( $val ) { return '' !== $val; } ); foreach ( $input as $i ) { $i = wpcf7_normalize_newline( $i ); if ( ! in_array( $i, $acceptable_values, true ) ) { return $this->create_error(); } } return true; } } rules/maxdate.php000064400000001366150732266310010045 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_date( $threshold ) ) { return true; } foreach ( $input as $i ) { if ( wpcf7_is_date( $i ) and $threshold < $i ) { return $this->create_error(); } } return true; } } rules/minnumber.php000064400000001416150732266310010412 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_number( $threshold ) ) { return true; } foreach ( $input as $i ) { if ( wpcf7_is_number( $i ) and (float) $i < (float) $threshold ) { return $this->create_error(); } } return true; } } rules/maxitems.php000064400000001321150732266310010240 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_number( $threshold ) ) { return true; } if ( (int) $threshold < count( $input ) ) { return $this->create_error(); } return true; } } rules/dayofweek.php000064400000002026150732266310010372 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $acceptable_values = (array) $this->get_property( 'accept' ); $acceptable_values = array_map( 'intval', $acceptable_values ); $acceptable_values = array_filter( $acceptable_values ); $acceptable_values = array_unique( $acceptable_values ); foreach ( $input as $i ) { if ( wpcf7_is_date( $i ) ) { $datetime = date_create_immutable( $i, wp_timezone() ); $dow = (int) $datetime->format( 'N' ); if ( ! in_array( $dow, $acceptable_values, true ) ) { return $this->create_error(); } } } return true; } } rules/date.php000064400000001154150732266310007332 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_date( $i ) ) { return $this->create_error(); } } return true; } } rules/all.php000064400000001114150732266310007161 0ustar00rules() as $rule ) { if ( $rule->matches( $context ) ) { $result = $rule->validate( $context ); if ( is_wp_error( $result ) ) { if ( $result->get_error_message() ) { return $result; } else { return $this->create_error(); } } } } return true; } } rules/email.php000064400000001157150732266310007507 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_email( $i ) ) { return $this->create_error(); } } return true; } } rules/tel.php000064400000001151150732266310007176 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_tel( $i ) ) { return $this->create_error(); } } return true; } } rules/stepnumber.php000064400000001671150732266310010605 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $base = floatval( $this->get_property( 'base' ) ); $interval = floatval( $this->get_property( 'interval' ) ); if ( ! ( 0 < $interval ) ) { return true; } foreach ( $input as $i ) { $remainder = fmod( floatval( $i ) - $base, $interval ); if ( 0.0 === round( abs( $remainder ), 6 ) or 0.0 === round( abs( $remainder - $interval ), 6 ) ) { continue; } return $this->create_error(); } return true; } } rules/maxlength.php000064400000001442150732266310010404 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return true; } $total = 0; foreach ( $input as $i ) { $total += wpcf7_count_code_units( $i ); } $threshold = (int) $this->get_property( 'threshold' ); if ( $total <= $threshold ) { return true; } else { return $this->create_error(); } } } rules/minfilesize.php000064400000001305150732266310010731 0ustar00get_property( 'field' ); $input = $_FILES[$field]['size'] ?? ''; $input = wpcf7_array_flatten( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return true; } $threshold = $this->get_property( 'threshold' ); if ( array_sum( $input ) < $threshold ) { return $this->create_error(); } return true; } } rules/any.php000064400000000767150732266310007215 0ustar00rules() as $rule ) { if ( $rule->matches( $context ) ) { $result = $rule->validate( $context ); if ( ! is_wp_error( $result ) ) { return true; } } } return $this->create_error(); } } rules/url.php000064400000001151150732266310007214 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_url( $i ) ) { return $this->create_error(); } } return true; } } rules/maxnumber.php000064400000001416150732266310010414 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_number( $threshold ) ) { return true; } foreach ( $input as $i ) { if ( wpcf7_is_number( $i ) and (float) $threshold < (float) $i ) { return $this->create_error(); } } return true; } } rules/time.php000064400000001154150732266310007353 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_time( $i ) ) { return $this->create_error(); } } return true; } } rules/number.php000064400000001162150732266310007704 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_number( $i ) ) { return $this->create_error(); } } return true; } } rules/minitems.php000064400000001321150732266310010236 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_number( $threshold ) ) { return true; } if ( count( $input ) < (int) $threshold ) { return $this->create_error(); } return true; } } rules/maxfilesize.php000064400000001305150732266310010733 0ustar00get_property( 'field' ); $input = $_FILES[$field]['size'] ?? ''; $input = wpcf7_array_flatten( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return true; } $threshold = $this->get_property( 'threshold' ); if ( $threshold < array_sum( $input ) ) { return $this->create_error(); } return true; } } rules/required.php000064400000001112150732266310010227 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return $this->create_error(); } return true; } } rules/requiredfile.php000064400000001126150732266310011074 0ustar00get_property( 'field' ); $input = $_FILES[$field]['tmp_name'] ?? ''; $input = wpcf7_array_flatten( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return $this->create_error(); } return true; } } rules/mindate.php000064400000001366150732266310010043 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_date( $threshold ) ) { return true; } foreach ( $input as $i ) { if ( wpcf7_is_date( $i ) and $i < $threshold ) { return $this->create_error(); } } return true; } }