/**
  * Prepares incoming data from the json or $_REQUEST parameters for the models'
  * "$query_params". 
  * @param EE_Model_Field_Base $field_obj
  * @param mixed $original_value
  * @param string $requested_version
  * @return mixed
  */
 public static function prepare_field_value_from_json($field_obj, $original_value, $requested_version)
 {
     $new_value = null;
     if ($field_obj instanceof \EE_Infinite_Integer_Field && in_array($original_value, array(null, ''), true)) {
         $new_value = EE_INF;
     } elseif ($field_obj instanceof \EE_Datetime_Field) {
         $new_value = rest_parse_date($original_value);
     } else {
         $new_value = $original_value;
     }
     return $new_value;
 }
 /**
  * Validate a request argument based on details registered to the route.
  *
  * @param  mixed            $value
  * @param  WP_REST_Request  $request
  * @param  string           $param
  * @return WP_Error|boolean
  */
 function rest_validate_request_arg($value, $request, $param)
 {
     $attributes = $request->get_attributes();
     if (!isset($attributes['args'][$param]) || !is_array($attributes['args'][$param])) {
         return true;
     }
     $args = $attributes['args'][$param];
     if (!empty($args['enum'])) {
         if (!in_array($value, $args['enum'])) {
             /* translators: 1: parameter 2: arguments */
             return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not one of %2$s', 'woocommerce'), $param, implode(', ', $args['enum'])));
         }
     }
     if ('integer' === $args['type'] && !is_numeric($value)) {
         /* translators: 1: parameter 2: integer type */
         return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not of type %2$s', 'woocommerce'), $param, 'integer'));
     }
     if ('boolean' === $args['type'] && !rest_is_boolean($value)) {
         /* translators: 1: parameter 2: boolean type */
         return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not of type %2$s', 'woocommerce'), $value, 'boolean'));
     }
     if ('string' === $args['type'] && !is_string($value)) {
         /* translators: 1: parameter 2: string type */
         return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not of type %2$s', 'woocommerce'), $param, 'string'));
     }
     if (isset($args['format'])) {
         switch ($args['format']) {
             case 'date-time':
                 if (!rest_parse_date($value)) {
                     return new WP_Error('rest_invalid_date', __('The date you provided is invalid.', 'woocommerce'));
                 }
                 break;
             case 'email':
                 if (!is_email($value)) {
                     return new WP_Error('rest_invalid_email', __('The email address you provided is invalid.', 'woocommerce'));
                 }
                 break;
             case 'ipv4':
                 if (!rest_is_ip_address($value)) {
                     /* translators: %s: IP address */
                     return new WP_Error('rest_invalid_param', sprintf(__('%s is not a valid IP address.', 'woocommerce'), $value));
                 }
                 break;
         }
     }
     if (in_array($args['type'], array('numeric', 'integer')) && (isset($args['minimum']) || isset($args['maximum']))) {
         if (isset($args['minimum']) && !isset($args['maximum'])) {
             if (!empty($args['exclusiveMinimum']) && $value <= $args['minimum']) {
                 return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be greater than %2$d (exclusive)', 'woocommerce'), $param, $args['minimum']));
             } elseif (empty($args['exclusiveMinimum']) && $value < $args['minimum']) {
                 return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be greater than %2$d (inclusive)', 'woocommerce'), $param, $args['minimum']));
             }
         } elseif (isset($args['maximum']) && !isset($args['minimum'])) {
             if (!empty($args['exclusiveMaximum']) && $value >= $args['maximum']) {
                 return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be less than %2$d (exclusive)', 'woocommerce'), $param, $args['maximum']));
             } elseif (empty($args['exclusiveMaximum']) && $value > $args['maximum']) {
                 return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be less than %2$d (inclusive)', 'woocommerce'), $param, $args['maximum']));
             }
         } elseif (isset($args['maximum']) && isset($args['minimum'])) {
             if (!empty($args['exclusiveMinimum']) && !empty($args['exclusiveMaximum'])) {
                 if ($value >= $args['maximum'] || $value <= $args['minimum']) {
                     return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be between %2$d (exclusive) and %3$d (exclusive)', 'woocommerce'), $param, $args['minimum'], $args['maximum']));
                 }
             } elseif (empty($args['exclusiveMinimum']) && !empty($args['exclusiveMaximum'])) {
                 if ($value >= $args['maximum'] || $value < $args['minimum']) {
                     return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be between %2$d (inclusive) and %3$d (exclusive)', 'woocommerce'), $param, $args['minimum'], $args['maximum']));
                 }
             } elseif (!empty($args['exclusiveMinimum']) && empty($args['exclusiveMaximum'])) {
                 if ($value > $args['maximum'] || $value <= $args['minimum']) {
                     return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be between %2$d (exclusive) and %3$d (inclusive)', 'woocommerce'), $param, $args['minimum'], $args['maximum']));
                 }
             } elseif (empty($args['exclusiveMinimum']) && empty($args['exclusiveMaximum'])) {
                 if ($value > $args['maximum'] || $value < $args['minimum']) {
                     return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be between %2$d (inclusive) and %3$d (inclusive)', 'woocommerce'), $param, $args['minimum'], $args['maximum']));
                 }
             }
         }
     }
     return true;
 }
 /**
  * Validate an parameter value that's based on a property from the item schema.
  *
  * @param  mixed $value
  * @param  WP_REST_Request $request
  * @param  string $parameter
  * @return WP_Error|bool
  */
 public function validate_schema_property($value, $request, $parameter)
 {
     /**
      * We don't currently validate against empty values, as lots of checks
      * can unintentionally fail, as the callback will often handle an empty
      * value it's self.
      */
     if (!$value) {
         return true;
     }
     $schema = $this->get_item_schema();
     if (!isset($schema['properties'][$parameter])) {
         return true;
     }
     $property = $schema['properties'][$parameter];
     if (!empty($property['enum'])) {
         if (!in_array($value, $property['enum'])) {
             return new WP_Error('rest_invalid_param', sprintf(__('%s is not one of %s'), $parameter, implode(', ', $property['enum'])));
         }
     }
     if ('integer' === $property['type'] && !is_numeric($value)) {
         return new WP_Error('rest_invalid_param', sprintf(__('%s is not of type %s'), $parameter, 'integer'));
     }
     if ('string' === $property['type'] && !is_string($value)) {
         return new WP_Error('rest_invalid_param', sprintf(__('%s is not of type %s'), $parameter, 'string'));
     }
     if (isset($property['format'])) {
         switch ($property['format']) {
             case 'date-time':
                 if (!rest_parse_date($value)) {
                     return new WP_Error('rest_invalid_date', __('The date you provided is invalid.'));
                 }
                 break;
             case 'email':
                 if (!is_email($value)) {
                     return new WP_Error('rest_invalid_email', __('The email address you provided is invalid.'));
                 }
                 break;
         }
     }
     return true;
 }
Example #4
0
/**
 * Validate a value based on a schema.
 *
 * @param mixed  $value The value to validate.
 * @param array  $args  Schema array to use for validation.
 * @param string $param The parameter name, used in error messages.
 * @return true|WP_Error
 */
function rest_validate_value_from_schema($value, $args, $param = '')
{
    if ('array' === $args['type']) {
        if (!is_array($value)) {
            $value = preg_split('/[\\s,]+/', $value);
        }
        foreach ($value as $index => $v) {
            $is_valid = rest_validate_value_from_schema($v, $args['items'], $param . '[' . $index . ']');
            if (is_wp_error($is_valid)) {
                return $is_valid;
            }
        }
    }
    if (!empty($args['enum'])) {
        if (!in_array($value, $args['enum'], true)) {
            return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not one of %2$s.'), $param, implode(', ', $args['enum'])));
        }
    }
    if (in_array($args['type'], array('integer', 'number')) && !is_numeric($value)) {
        return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not of type %2$s.'), $param, $args['type']));
    }
    if ('integer' === $args['type'] && round(floatval($value)) !== floatval($value)) {
        return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not of type %2$s.'), $param, 'integer'));
    }
    if ('boolean' === $args['type'] && !rest_is_boolean($value)) {
        return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not of type %2$s.'), $value, 'boolean'));
    }
    if ('string' === $args['type'] && !is_string($value)) {
        return new WP_Error('rest_invalid_param', sprintf(__('%1$s is not of type %2$s.'), $param, 'string'));
    }
    if (isset($args['format'])) {
        switch ($args['format']) {
            case 'date-time':
                if (!rest_parse_date($value)) {
                    return new WP_Error('rest_invalid_date', __('The date you provided is invalid.'));
                }
                break;
            case 'email':
                // is_email() checks for 3 characters (a@b), but
                // wp_handle_comment_submission() requires 6 characters (a@b.co)
                //
                // https://core.trac.wordpress.org/ticket/38506
                if (!is_email($value) || strlen($value) < 6) {
                    return new WP_Error('rest_invalid_email', __('The email address you provided is invalid.'));
                }
                break;
            case 'ipv4':
                if (!rest_is_ip_address($value)) {
                    return new WP_Error('rest_invalid_param', sprintf(__('%s is not a valid IP address.'), $value));
                }
                break;
        }
    }
    if (in_array($args['type'], array('number', 'integer'), true) && (isset($args['minimum']) || isset($args['maximum']))) {
        if (isset($args['minimum']) && !isset($args['maximum'])) {
            if (!empty($args['exclusiveMinimum']) && $value <= $args['minimum']) {
                return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be greater than %2$d (exclusive)'), $param, $args['minimum']));
            } elseif (empty($args['exclusiveMinimum']) && $value < $args['minimum']) {
                return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be greater than %2$d (inclusive)'), $param, $args['minimum']));
            }
        } elseif (isset($args['maximum']) && !isset($args['minimum'])) {
            if (!empty($args['exclusiveMaximum']) && $value >= $args['maximum']) {
                return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be less than %2$d (exclusive)'), $param, $args['maximum']));
            } elseif (empty($args['exclusiveMaximum']) && $value > $args['maximum']) {
                return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be less than %2$d (inclusive)'), $param, $args['maximum']));
            }
        } elseif (isset($args['maximum']) && isset($args['minimum'])) {
            if (!empty($args['exclusiveMinimum']) && !empty($args['exclusiveMaximum'])) {
                if ($value >= $args['maximum'] || $value <= $args['minimum']) {
                    return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be between %2$d (exclusive) and %3$d (exclusive)'), $param, $args['minimum'], $args['maximum']));
                }
            } elseif (empty($args['exclusiveMinimum']) && !empty($args['exclusiveMaximum'])) {
                if ($value >= $args['maximum'] || $value < $args['minimum']) {
                    return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be between %2$d (inclusive) and %3$d (exclusive)'), $param, $args['minimum'], $args['maximum']));
                }
            } elseif (!empty($args['exclusiveMinimum']) && empty($args['exclusiveMaximum'])) {
                if ($value > $args['maximum'] || $value <= $args['minimum']) {
                    return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be between %2$d (exclusive) and %3$d (inclusive)'), $param, $args['minimum'], $args['maximum']));
                }
            } elseif (empty($args['exclusiveMinimum']) && empty($args['exclusiveMaximum'])) {
                if ($value > $args['maximum'] || $value < $args['minimum']) {
                    return new WP_Error('rest_invalid_param', sprintf(__('%1$s must be between %2$d (inclusive) and %3$d (inclusive)'), $param, $args['minimum'], $args['maximum']));
                }
            }
        }
    }
    return true;
}
Example #5
0
/**
 * Retrieves a local date with its GMT equivalent, in MySQL datetime format.
 *
 * @since 4.4.0
 *
 * @see rest_parse_date()
 *
 * @param string $date      RFC3339 timestamp.
 * @param bool   $force_utc Whether a UTC timestamp should be forced. Default false.
 * @return array|null Local and UTC datetime strings, in MySQL datetime format (Y-m-d H:i:s),
 *                    null on failure.
 */
function rest_get_date_with_gmt($date, $force_utc = false)
{
    $date = rest_parse_date($date, $force_utc);
    if (empty($date)) {
        return null;
    }
    $utc = date('Y-m-d H:i:s', $date);
    $local = get_date_from_gmt($utc);
    return array($local, $utc);
}
Example #6
0
 /**
  * Validate a request argument based on details registered to the route.
  *
  * @param  mixed            $value
  * @param  WP_REST_Request  $request
  * @param  string           $param
  * @return WP_Error|boolean
  */
 function rest_validate_request_arg($value, $request, $param)
 {
     $attributes = $request->get_attributes();
     if (!isset($attributes['args'][$param]) || !is_array($attributes['args'][$param])) {
         return true;
     }
     $args = $attributes['args'][$param];
     if (!empty($args['enum'])) {
         if (!in_array($value, $args['enum'])) {
             return new WP_Error('rest_invalid_param', sprintf(__('%s is not one of %s'), $param, implode(', ', $args['enum'])));
         }
     }
     if ('integer' === $args['type'] && !is_numeric($value)) {
         return new WP_Error('rest_invalid_param', sprintf(__('%s is not of type %s'), $param, 'integer'));
     }
     if ('string' === $args['type'] && !is_string($value)) {
         return new WP_Error('rest_invalid_param', sprintf(__('%s is not of type %s'), $param, 'string'));
     }
     if (isset($args['format'])) {
         switch ($args['format']) {
             case 'date-time':
                 if (!rest_parse_date($value)) {
                     return new WP_Error('rest_invalid_date', __('The date you provided is invalid.'));
                 }
                 break;
             case 'email':
                 if (!is_email($value)) {
                     return new WP_Error('rest_invalid_email', __('The email address you provided is invalid.'));
                 }
                 break;
         }
     }
     if (in_array($args['type'], array('numeric', 'integer')) && (isset($args['minimum']) || isset($args['maximum']))) {
         if (isset($args['minimum']) && !isset($args['maximum'])) {
             if (!empty($args['exclusiveMinimum']) && $value <= $args['minimum']) {
                 return new WP_Error('rest_invalid_param', sprintf(__('%s must be greater than %d (exclusive)'), $param, $args['minimum']));
             } else {
                 if (empty($args['exclusiveMinimum']) && $value < $args['minimum']) {
                     return new WP_Error('rest_invalid_param', sprintf(__('%s must be greater than %d (inclusive)'), $param, $args['minimum']));
                 }
             }
         } else {
             if (isset($args['maximum']) && !isset($args['minimum'])) {
                 if (!empty($args['exclusiveMaximum']) && $value >= $args['maximum']) {
                     return new WP_Error('rest_invalid_param', sprintf(__('%s must be less than %d (exclusive)'), $param, $args['maximum']));
                 } else {
                     if (empty($args['exclusiveMaximum']) && $value > $args['maximum']) {
                         return new WP_Error('rest_invalid_param', sprintf(__('%s must be less than %d (inclusive)'), $param, $args['maximum']));
                     }
                 }
             } else {
                 if (isset($args['maximum']) && isset($args['minimum'])) {
                     if (!empty($args['exclusiveMinimum']) && !empty($args['exclusiveMaximum'])) {
                         if ($value >= $args['maximum'] || $value <= $args['minimum']) {
                             return new WP_Error('rest_invalid_param', sprintf(__('%s must be between %d (exclusive) and %d (exclusive)'), $param, $args['minimum'], $args['maximum']));
                         }
                     } else {
                         if (empty($args['exclusiveMinimum']) && !empty($args['exclusiveMaximum'])) {
                             if ($value >= $args['maximum'] || $value < $args['minimum']) {
                                 return new WP_Error('rest_invalid_param', sprintf(__('%s must be between %d (inclusive) and %d (exclusive)'), $param, $args['minimum'], $args['maximum']));
                             }
                         } else {
                             if (!empty($args['exclusiveMinimum']) && empty($args['exclusiveMaximum'])) {
                                 if ($value > $args['maximum'] || $value <= $args['minimum']) {
                                     return new WP_Error('rest_invalid_param', sprintf(__('%s must be between %d (exclusive) and %d (inclusive)'), $param, $args['minimum'], $args['maximum']));
                                 }
                             } else {
                                 if (empty($args['exclusiveMinimum']) && empty($args['exclusiveMaximum'])) {
                                     if ($value > $args['maximum'] || $value < $args['minimum']) {
                                         return new WP_Error('rest_invalid_param', sprintf(__('%s must be between %d (inclusive) and %d (inclusive)'), $param, $args['minimum'], $args['maximum']));
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     return true;
 }