diff --git a/includes/admin/core/class-admin-builder.php b/includes/admin/core/class-admin-builder.php
index a2eca841..bdfd994f 100644
--- a/includes/admin/core/class-admin-builder.php
+++ b/includes/admin/core/class-admin-builder.php
@@ -37,78 +37,96 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) {
}
/**
- * Apply a filter to handle errors for field updating in backend
+ * Apply a filter to handle errors for field updating in backend.
*
- * @param $errors
- * @param $array
+ * @param null|array $errors
+ * @param array $submission_data
*
* @return mixed
*/
- function um_admin_field_update_error_handling( $errors, $array ) {
- /**
- * @var $field_type
- */
- extract( $array );
+ public function um_admin_field_update_error_handling( $errors, $submission_data ) {
+ if ( ! array_key_exists( 'field_type', $submission_data ) ) {
+ return $errors;
+ }
- $field_attr = UM()->builtin()->get_core_field_attrs( $field_type );
-
- if ( isset( $field_attr['validate'] ) ) {
-
- $validate = $field_attr['validate'];
- foreach ( $validate as $post_input => $arr ) {
-
- $skip = apply_filters( 'um_admin_builder_skip_field_validation', false, $post_input, $array );
- if ( $skip ) {
- continue;
- }
-
- $mode = $arr['mode'];
-
- switch ( $mode ) {
-
- case 'numeric':
- if ( ! empty( $array['post'][ $post_input ] ) && ! is_numeric( $array['post'][ $post_input ] ) ){
- $errors[ $post_input ] = $validate[ $post_input ]['error'];
- }
- break;
-
- case 'unique':
- if ( ! isset( $array['post']['edit_mode'] ) ) {
- if ( UM()->builtin()->unique_field_err( $array['post'][ $post_input ] ) ) {
- $errors[ $post_input ] = UM()->builtin()->unique_field_err( $array['post'][ $post_input ] );
- }
- }
- break;
-
- case 'required':
- if ( $array['post'][ $post_input ] == '' ) {
- $errors[ $post_input ] = $validate[ $post_input ]['error'];
- }
- break;
-
- case 'range-start':
- if ( UM()->builtin()->date_range_start_err( $array['post'][ $post_input ] ) && $array['post']['_range'] == 'date_range' ) {
- $errors[ $post_input ] = UM()->builtin()->date_range_start_err( $array['post'][ $post_input ] );
- }
- break;
-
- case 'range-end':
- if ( UM()->builtin()->date_range_end_err( $array['post'][ $post_input ], $array['post']['_range_start'] ) && $array['post']['_range'] == 'date_range' ) {
- $errors[ $post_input ] = UM()->builtin()->date_range_end_err( $array['post'][ $post_input ], $array['post']['_range_start'] );
- }
- break;
-
- }
+ $field_attr = UM()->builtin()->get_core_field_attrs( $submission_data['field_type'] );
+ if ( ! array_key_exists( 'validate', $field_attr ) ) {
+ return $errors;
+ }
+ $validate = $field_attr['validate'];
+ foreach ( $validate as $post_input => $arr ) {
+ /**
+ * Filters the marker for skipping field validation.
+ *
+ * @param {bool} $skip Errors list. It's null by default.
+ * @param {string} $post_input Field key for validation.
+ * @param {array} $submission_data Update field handler data.
+ *
+ * @return {bool} True for skipping validation.
+ *
+ * @since 2.1.0
+ * @hook um_admin_builder_skip_field_validation
+ *
+ * @example
Skipping validation for the `_options` setting field for `billing_country` and `shipping_country` form fields.
+ * function my_custom_um_admin_builder_skip_field_validation( $skip, $post_input, $submission_data ) {
+ * if ( $post_input === '_options' && isset( $submission_data['post']['_metakey'] ) && in_array( $submission_data['post']['_metakey'], array( 'billing_country', 'shipping_country' ), true ) ) {
+ * $skip = true;
+ * }
+ * return $skip;
+ * }
+ * add_filter( 'um_admin_builder_skip_field_validation', 'my_custom_um_admin_builder_skip_field_validation', 10, 3 );
+ */
+ $skip = apply_filters( 'um_admin_builder_skip_field_validation', false, $post_input, $submission_data );
+ if ( $skip ) {
+ continue;
}
+ if ( ! array_key_exists( 'mode', $arr ) ) {
+ continue;
+ }
+
+ switch ( $arr['mode'] ) {
+ case 'numeric':
+ if ( ! empty( $submission_data['post'][ $post_input ] ) && ! is_numeric( $submission_data['post'][ $post_input ] ) ) {
+ $errors[ $post_input ] = $validate[ $post_input ]['error'];
+ }
+ break;
+ case 'unique':
+ if ( ! isset( $submission_data['post']['edit_mode'] ) ) {
+ $mode_error = UM()->builtin()->unique_field_err( $submission_data['post'][ $post_input ] );
+ if ( ! empty( $mode_error ) ) {
+ $errors[ $post_input ] = $mode_error;
+ }
+ }
+ break;
+ case 'required':
+ if ( '' === $submission_data['post'][ $post_input ] ) {
+ $errors[ $post_input ] = $validate[ $post_input ]['error'];
+ }
+ break;
+ case 'range-start':
+ if ( 'date_range' === $submission_data['post']['_range'] ) {
+ $mode_error = UM()->builtin()->date_range_start_err( $submission_data['post'][ $post_input ] );
+ if ( ! empty( $mode_error ) ) {
+ $errors[ $post_input ] = $mode_error;
+ }
+ }
+ break;
+ case 'range-end':
+ if ( 'date_range' === $submission_data['post']['_range'] ) {
+ $mode_error = UM()->builtin()->date_range_end_err( $submission_data['post'][ $post_input ], $submission_data['post']['_range_start'] );
+ if ( ! empty( $mode_error ) ) {
+ $errors[ $post_input ] = $mode_error;
+ }
+ }
+ break;
+ }
}
return $errors;
-
}
-
/**
* Some fields may require extra fields before saving
*
@@ -646,25 +664,22 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) {
$array = apply_filters( 'um_admin_pre_save_fields_hook', $array );
/**
- * UM hook
+ * Filters the validation errors on the update field in Form Builder.
*
- * @type filter
- * @title um_admin_field_update_error_handling
- * @description Change error string on save field
- * @input_vars
- * [{"var":"$error","type":"string","desc":"Error String"},
- * {"var":"$array","type":"array","desc":"Save Field data"}]
- * @change_log
- * ["Since: 2.0"]
- * @usage add_filter( 'um_admin_field_update_error_handling', 'function_name', 10, 2 );
- * @example
- * Added error with Error text to the field by the field key.
+ * function my_custom_um_admin_field_update_error_handling( $errors, $submission_data ) {
+ * $errors['{field_key}'] = {Error text};
+ * return $errors;
* }
- * ?>
+ * add_filter( 'um_admin_field_update_error_handling', 'my_custom_um_admin_field_update_error_handling', 10, 2 );
*/
$output['error'] = apply_filters( 'um_admin_field_update_error_handling', $output['error'], $array );
diff --git a/includes/admin/core/class-admin-metabox.php b/includes/admin/core/class-admin-metabox.php
index e226068d..2b4a9c96 100644
--- a/includes/admin/core/class-admin-metabox.php
+++ b/includes/admin/core/class-admin-metabox.php
@@ -61,6 +61,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
*/
public $is_loaded = false;
+ public $set_field_type;
+
/**
* Admin_Metabox constructor.
*/
@@ -1820,7 +1822,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
?>
-
+
-
+
-
+
-
+
@@ -2283,7 +2285,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
?>
-
+
-
+
-
+