diff --git a/includes/admin/core/class-admin-metabox.php b/includes/admin/core/class-admin-metabox.php index d1dc81b8..776e25a8 100644 --- a/includes/admin/core/class-admin-metabox.php +++ b/includes/admin/core/class-admin-metabox.php @@ -2383,6 +2383,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { $this->edit_mode_value = true; } + // Set to true if `editable` doesn't exist (legacy case). It will be saved to DB as `true` after the first field update. + if ( null === $this->edit_mode_value ) { + $this->edit_mode_value = true; + } + if ( empty( $this->edit_mode_value ) ) { $this->edit_mode_value = false; } diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 298a617e..026f6322 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -2186,7 +2186,8 @@ if ( ! class_exists( 'um\core\Fields' ) ) { if ( true === $this->editing && 'profile' === $this->set_mode ) { if ( ! UM()->roles()->um_user_can( 'can_edit_everyone' ) ) { - if ( empty( $data['editable'] ) ) { + // It's for a legacy case `array_key_exists( 'editable', $data )`. + if ( array_key_exists( 'editable', $data ) && empty( $data['editable'] ) ) { $disabled = ' disabled="disabled" '; } } @@ -3635,7 +3636,8 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $class = 'um-icon-android-radio-button-off'; } - if ( empty( $data['editable'] ) ) { + // It's for a legacy case `array_key_exists( 'editable', $data )`. + if ( array_key_exists( 'editable', $data ) && empty( $data['editable'] ) ) { $col_class .= ' um-field-radio-state-disabled'; } @@ -3754,7 +3756,8 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $class = 'um-icon-android-checkbox-outline-blank'; } - if ( empty( $data['editable'] ) ) { + // It's for a legacy case `array_key_exists( 'editable', $data )`. + if ( array_key_exists( 'editable', $data ) && empty( $data['editable'] ) ) { $col_class .= ' um-field-radio-state-disabled'; } diff --git a/includes/core/class-form.php b/includes/core/class-form.php index aa4bbdfd..6a3b74d4 100644 --- a/includes/core/class-form.php +++ b/includes/core/class-form.php @@ -1065,7 +1065,8 @@ if ( ! class_exists( 'um\core\Form' ) ) { if ( strstr( $field_key, 'role_' ) && array_key_exists( 'options', $field_settings ) && is_array( $field_settings['options'] ) ) { if ( isset( $this->post_form['mode'] ) && 'profile' === $this->post_form['mode'] ) { - if ( empty( $field_settings['editable'] ) || ! um_can_edit_field( $field_settings ) ) { + // It's for a legacy case `array_key_exists( 'editable', $field_settings )`. + if ( ( array_key_exists( 'editable', $field_settings ) && empty( $field_settings['editable'] ) ) || ! um_can_edit_field( $field_settings ) ) { continue; } } diff --git a/includes/core/um-actions-profile.php b/includes/core/um-actions-profile.php index b62a4954..50851661 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -386,10 +386,11 @@ function um_user_edit_profile( $args, $form_data ) { } } - // Secure selected role - if ( ( isset( $fields['role'] ) && ! empty( $fields['role']['editable'] ) && um_can_view_field( $fields['role'] ) ) || - ( isset( $fields['role_select'] ) && ! empty( $fields['role_select']['editable'] ) && um_can_view_field( $fields['role_select'] ) ) || - ( isset( $fields['role_radio'] ) && ! empty( $fields['role_radio']['editable'] ) && um_can_view_field( $fields['role_radio'] ) ) ) { + // Secure selected role. + // It's for a legacy case `array_key_exists( 'editable', $fields['role'] )` and similar. + if ( ( isset( $fields['role'] ) && ( ! array_key_exists( 'editable', $fields['role'] ) || ! empty( $fields['role']['editable'] ) ) && um_can_view_field( $fields['role'] ) ) || + ( isset( $fields['role_select'] ) && ( ! array_key_exists( 'editable', $fields['role_select'] ) || ! empty( $fields['role_select']['editable'] ) ) && um_can_view_field( $fields['role_select'] ) ) || + ( isset( $fields['role_radio'] ) && ( ! array_key_exists( 'editable', $fields['role_radio'] ) || ! empty( $fields['role_radio']['editable'] ) ) && um_can_view_field( $fields['role_radio'] ) ) ) { if ( ! empty( $args['submitted']['role'] ) ) { global $wp_roles; diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index 13b8e7fc..8fedfccd 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -1667,7 +1667,8 @@ function um_can_edit_field( $data ) { $can_edit = false; } else { if ( ! UM()->roles()->um_user_can( 'can_edit_everyone' ) ) { - if ( empty( $data['editable'] ) ) { + // It's for a legacy case `array_key_exists( 'editable', $data )`. + if ( array_key_exists( 'editable', $data ) && empty( $data['editable'] ) ) { $can_edit = false; } else { if ( ! um_is_user_himself() ) {