123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- <?php
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- if ( ! class_exists( 'acf_validation' ) ) :
- class acf_validation {
-
- function __construct() {
-
- $this->errors = array();
-
- add_action( 'wp_ajax_acf/validate_save_post', array( $this, 'ajax_validate_save_post' ) );
- add_action( 'wp_ajax_nopriv_acf/validate_save_post', array( $this, 'ajax_validate_save_post' ) );
- add_action( 'acf/validate_save_post', array( $this, 'acf_validate_save_post' ), 5 );
- }
-
- function add_error( $input, $message ) {
-
- $this->errors[] = array(
- 'input' => $input,
- 'message' => $message,
- );
- }
-
- function get_error( $input ) {
-
- if ( empty( $this->errors ) ) {
- return false;
- }
-
- foreach ( $this->errors as $error ) {
- if ( $error['input'] === $input ) {
- return $error;
- }
- }
-
- return false;
- }
-
- function get_errors() {
-
- if ( empty( $this->errors ) ) {
- return false;
- }
-
- return $this->errors;
- }
-
- function reset_errors() {
- $this->errors = array();
- }
-
- function ajax_validate_save_post() {
-
- if ( ! acf_verify_ajax() ) {
- die();
- }
-
- $json = array(
- 'valid' => 1,
- 'errors' => 0,
- );
-
- if ( acf_validate_save_post() ) {
- wp_send_json_success( $json );
- }
-
- $json['valid'] = 0;
- $json['errors'] = acf_get_validation_errors();
-
- wp_send_json_success( $json );
- }
-
- function acf_validate_save_post() {
-
-
- if ( empty( $_POST['acf'] ) ) {
- return;
- }
-
- acf_validate_values( $_POST['acf'], 'acf' );
-
- }
- }
-
- acf()->validation = new acf_validation();
- endif;
- function acf_add_validation_error( $input, $message = '' ) {
- return acf()->validation->add_error( $input, $message );
- }
- function acf_get_validation_errors() {
- return acf()->validation->get_errors();
- }
- function acf_get_validation_error() {
- return acf()->validation->get_error( $input );
- }
- function acf_reset_validation_errors() {
- return acf()->validation->reset_errors();
- }
- function acf_validate_save_post( $show_errors = false ) {
-
- do_action( 'acf/validate_save_post' );
-
- $errors = acf_get_validation_errors();
-
- if ( ! $errors ) {
- return true;
- }
-
- if ( $show_errors ) {
- $message = '<h2>' . __( 'Validation failed', 'acf' ) . '</h2>';
- $message .= '<ul>';
- foreach ( $errors as $error ) {
- $message .= '<li>' . $error['message'] . '</li>';
- }
- $message .= '</ul>';
-
- wp_die( $message, __( 'Validation failed', 'acf' ) );
- }
-
- return false;
- }
- function acf_validate_values( $values, $input_prefix = '' ) {
-
- if ( empty( $values ) ) {
- return;
- }
-
- foreach ( $values as $key => $value ) {
-
- $field = acf_get_field( $key );
- $input = $input_prefix . '[' . $key . ']';
-
- if ( ! $field ) {
- continue;
- }
-
- acf_validate_value( $value, $field, $input );
- }
- }
- function acf_validate_value( $value, $field, $input ) {
-
- $valid = true;
- $message = sprintf( __( '%s value is required', 'acf' ), $field['label'] );
-
- if ( $field['required'] ) {
-
- if ( empty( $value ) && ! is_numeric( $value ) ) {
- $valid = false;
- }
- }
-
- $valid = apply_filters( "acf/validate_value/type={$field['type']}", $valid, $value, $field, $input );
- $valid = apply_filters( "acf/validate_value/name={$field['_name']}", $valid, $value, $field, $input );
- $valid = apply_filters( "acf/validate_value/key={$field['key']}", $valid, $value, $field, $input );
- $valid = apply_filters( 'acf/validate_value', $valid, $value, $field, $input );
-
- if ( ! empty( $valid ) && is_string( $valid ) ) {
- $message = $valid;
- $valid = false;
- }
- if ( ! $valid ) {
- acf_add_validation_error( $input, $message );
- return false;
- }
-
- return true;
- }
|