From 1e2f285289a9e5c0e4aea4b51844697915be9fbc Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 13 Sep 2023 13:10:29 +0300 Subject: [PATCH 1/3] - add the ID to the blacklist of meta key --- includes/core/class-builtin.php | 41 ++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index d296ac55..d4bf45bf 100644 --- a/includes/core/class-builtin.php +++ b/includes/core/class-builtin.php @@ -33,6 +33,11 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { */ public $saved_fields = array(); + /** + * @var array + */ + public $blacklist_fields = array(); + /** * @var array */ @@ -50,6 +55,7 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { add_action( 'init', array( &$this, 'set_core_fields' ), 1 ); add_action( 'init', array( &$this, 'set_predefined_fields' ), 1 ); add_action( 'init', array( &$this, 'set_custom_fields' ), 1 ); + add_action( 'init', array( &$this, 'set_blacklist_fields' ), 1 ); $this->saved_fields = get_option( 'um_fields', array() ); } @@ -149,7 +155,7 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { * * @return int|string */ - function unique_field_err( $key ) { + public function unique_field_err( $key ) { if ( empty( $key ) ) { return __( 'Please provide a meta key', 'ultimate-member' ); } @@ -162,6 +168,9 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { if ( isset( $this->saved_fields[ $key ] ) ) { return __( 'Your meta key already exists in your fields list', 'ultimate-member' ); } + if ( in_array( $key, $this->blacklist_fields, true ) ) { + return __( 'Your meta key can not be used', 'ultimate-member' ); + } if ( ! UM()->validation()->safe_string( $key ) ) { return __( 'Your meta key contains illegal characters. Please correct it.', 'ultimate-member' ); } @@ -1355,6 +1364,36 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { } + public function set_blacklist_fields() { + + $this->blacklist_fields = array( + 'ID', + ); + + /** + * UM hook + * + * @type filter + * @title um_blacklist_fields_hook + * @description Extend Blacklist Fields + * @input_vars + * [{"var":"$blacklist_fields","type":"array","desc":"Blacklist Fields"}] + * @change_log + * ["Since: 2.0"] + * @usage add_filter( 'um_blacklist_fields_hook', 'function_name', 10, 1 ); + * @example + * + */ + $this->blacklist_fields = apply_filters( 'um_blacklist_fields_hook', $this->blacklist_fields ); + } + + /** * Custom Fields */ From 35132844c57a1f09f694115d0ff535cb9f92c3f9 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 13 Sep 2023 15:06:22 +0300 Subject: [PATCH 2/3] - change validation --- includes/admin/core/class-admin-builder.php | 5 +++ includes/core/class-builtin.php | 47 ++++++++++++--------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/includes/admin/core/class-admin-builder.php b/includes/admin/core/class-admin-builder.php index 1ed73dbc..7787114f 100644 --- a/includes/admin/core/class-admin-builder.php +++ b/includes/admin/core/class-admin-builder.php @@ -86,6 +86,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { continue; } + $blacklist_error = UM()->builtin()->blacklist_field_err( $submission_data['post']['_metakey'] ); + if ( ! empty( $blacklist_error ) ) { + $errors['_metakey'] = $blacklist_error; + } + switch ( $arr['mode'] ) { case 'numeric': if ( ! empty( $submission_data['post'][ $post_input ] ) && ! is_numeric( $submission_data['post'][ $post_input ] ) ) { diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index d4bf45bf..ad27a38c 100644 --- a/includes/core/class-builtin.php +++ b/includes/core/class-builtin.php @@ -168,9 +168,6 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { if ( isset( $this->saved_fields[ $key ] ) ) { return __( 'Your meta key already exists in your fields list', 'ultimate-member' ); } - if ( in_array( $key, $this->blacklist_fields, true ) ) { - return __( 'Your meta key can not be used', 'ultimate-member' ); - } if ( ! UM()->validation()->safe_string( $key ) ) { return __( 'Your meta key contains illegal characters. Please correct it.', 'ultimate-member' ); } @@ -179,6 +176,22 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { } + /** + * Checks for a blacklist field error + * + * @param $key + * + * @return int|string + */ + public function blacklist_field_err( $key ) { + if ( in_array( strtolower( $key ), UM()->builtin()->blacklist_fields, true ) ) { + return __( 'Your meta key can not be used', 'ultimate-member' ); + } + + return 0; + } + + /** * Check date range errors (start date) * @@ -1365,30 +1378,26 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { public function set_blacklist_fields() { - $this->blacklist_fields = array( - 'ID', + 'id', ); /** - * UM hook + * Filters change metakeys in the blacklist. * - * @type filter - * @title um_blacklist_fields_hook - * @description Extend Blacklist Fields - * @input_vars - * [{"var":"$blacklist_fields","type":"array","desc":"Blacklist Fields"}] - * @change_log - * ["Since: 2.0"] - * @usage add_filter( 'um_blacklist_fields_hook', 'function_name', 10, 1 ); - * @example - * Change array of metakeys in the blacklist. + * function my_um_blacklist_fields_hook( $blacklist_fields ) { * // your code here * return $blacklist_fields; * } - * ?> + * add_filter( 'um_blacklist_fields_hook', 'my_um_blacklist_fields_hook' ); */ $this->blacklist_fields = apply_filters( 'um_blacklist_fields_hook', $this->blacklist_fields ); } From bf7f3f06e67683b5496a6ed1b2d1b08b274f46b9 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 13 Sep 2023 15:08:52 +0300 Subject: [PATCH 3/3] - fix validation --- includes/admin/core/class-admin-builder.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/includes/admin/core/class-admin-builder.php b/includes/admin/core/class-admin-builder.php index 7787114f..0a9567eb 100644 --- a/includes/admin/core/class-admin-builder.php +++ b/includes/admin/core/class-admin-builder.php @@ -49,6 +49,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { return $errors; } + $blacklist_error = UM()->builtin()->blacklist_field_err( $submission_data['post']['_metakey'] ); + if ( ! empty( $blacklist_error ) ) { + $errors['_metakey'] = $blacklist_error; + return $errors; + } + $field_attr = UM()->builtin()->get_core_field_attrs( $submission_data['field_type'] ); if ( ! array_key_exists( 'validate', $field_attr ) ) { return $errors; @@ -86,11 +92,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { continue; } - $blacklist_error = UM()->builtin()->blacklist_field_err( $submission_data['post']['_metakey'] ); - if ( ! empty( $blacklist_error ) ) { - $errors['_metakey'] = $blacklist_error; - } - switch ( $arr['mode'] ) { case 'numeric': if ( ! empty( $submission_data['post'][ $post_input ] ) && ! is_numeric( $submission_data['post'][ $post_input ] ) ) {