'login', ) ); } /** * Called during the user register form * * @type function * @date 8/10/13 * @since 5.0.0 * * @param void * @return void */ function render_register() { // render $this->render( array( 'user_id' => 0, 'view' => 'register', 'el' => 'div', ) ); } /** * Called during the user edit form * * @type function * @date 8/10/13 * @since 5.0.0 * * @param void * @return void */ function render_edit( $user ) { // add compatibility with front-end user profile edit forms such as bbPress if ( ! is_admin() ) { acf_enqueue_scripts(); } // render $this->render( array( 'user_id' => $user->ID, 'view' => 'edit', 'el' => 'tr', ) ); } /** * description * * @type function * @date 8/10/13 * @since 5.0.0 * * @param $post_id (int) * @return $post_id (int) */ function render_new() { // Multisite uses a different 'user-new.php' form. Don't render fields here if ( is_multisite() ) { return; } // render $this->render( array( 'user_id' => 0, 'view' => 'add', 'el' => 'tr', ) ); } /** * This function will render ACF fields for a given $post_id parameter * * @type function * @since 5.0.0 * * @param $user_id (int) this can be set to 0 for a new user * @param $user_form (string) used for location rule matching. edit | add | register * @param $el (string) * @return n/a */ function render( $args = array() ) { // Allow $_POST data to persist across form submission attempts. if ( isset( $_POST['acf'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing add_filter( 'acf/pre_load_value', array( $this, 'filter_pre_load_value' ), 10, 3 ); } // defaults $args = wp_parse_args( $args, array( 'user_id' => 0, 'view' => 'edit', 'el' => 'tr', ) ); // vars $post_id = 'user_' . $args['user_id']; // New users are rendered for the form they are created with, so a list from one form isn't accepted by the other. $render_id = $args['user_id'] ? $post_id : 'user_0/' . $args['view']; // get field groups $field_groups = acf_get_field_groups( array( 'user_id' => $args['user_id'] ? $args['user_id'] : 'new', 'user_form' => $args['view'], ) ); // bail early if no field groups if ( empty( $field_groups ) ) { return; } // form data acf_form_data( array( 'screen' => 'user', 'post_id' => $post_id, 'validation' => ( $args['view'] == 'register' ) ? 0 : 1, ) ); // elements $before = ''; $after = '
'; if ( $args['el'] == 'div' ) { $before = '
'; $after = '
'; } // loop foreach ( $field_groups as $field_group ) { // vars $fields = acf_get_fields( $field_group ); // title if ( $field_group['style'] === 'default' ) { echo '

' . acf_esc_html( acf_get_field_group_title( $field_group ) ) . '

'; } // render echo $before; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- safe HTML string. acf_render_fields( $fields, $post_id, $args['el'], $field_group['instruction_placement'], array( 'render_id' => $render_id ) ); echo $after; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- safe HTML string. } // actions add_action( 'acf/input/admin_footer', array( $this, 'admin_footer' ), 10, 1 ); } /** * description * * @type function * @date 27/03/2015 * @since 5.1.5 * * @param $post_id (int) * @return $post_id (int) */ function admin_footer() { // script ?> restrict_save_input( $user_id ); if ( empty( $_POST['acf'] ) ) { return $user_id; } } // save if ( acf_validate_save_post( true ) ) { acf_save_post( "user_$user_id" ); } } /** * Restricts the submitted values to fields rendered for the user, or belonging to field groups * that apply to them in the current save context. * * On user_register the new user was created with either the public register form or the admin * Add User form, which are rendered and matched separately. On profile_update the user was * rendered with the edit form (self-edit or admin-edit-other). * * @since 6.8.11 * * @param integer $user_id The user being saved. * @return void */ private function restrict_save_input( $user_id ) { if ( current_action() === 'user_register' ) { $view = $this->is_add_user_request() ? 'add' : 'register'; $render_ids = array( 'user_0/' . $view ); $screen = array( 'user_id' => 'new', 'user_form' => $view, ); // Extensions such as ACF Extended render the admin Add User form's fields for the `user_0` post ID. if ( 'add' === $view ) { $render_ids[] = 'user_0'; } } else { $render_ids = array( 'user_' . $user_id ); $screen = array( 'user_id' => $user_id, 'user_form' => 'edit', ); } acf_restrict_save_input( array( 'context' => 'user', 'post_id' => 'user_' . $user_id, 'render_ids' => $render_ids, 'screen' => $screen, 'filter_arg' => $user_id, ) ); } /** * Returns true if the current request is the admin Add User form, rather than registration. * * @since 6.8.11 * * @return boolean */ private function is_add_user_request() { return is_admin() && 'createuser' === acf_maybe_get_POST( 'action' ); } /** * filter_registration_errors * * Validates $_POST data and appends any errors to prevent new user registration. * * @date 12/7/19 * @since 5.8.1 * * @param WP_Error $errors A WP_Error object containing any errors encountered during registration. * @param string $sanitized_user_login User's username after it has been sanitized. * @param string $user_email User's email. * @return WP_Error */ function filter_registration_errors( $errors, $sanitized_user_login, $user_email ) { if ( ! acf_validate_save_post() ) { $acf_errors = acf_get_validation_errors(); foreach ( $acf_errors as $acf_error ) { $errors->add( acf_idify( $acf_error['input'] ), acf_esc_html( acf_punctify( sprintf( __( 'Error: %s', 'acf' ), $acf_error['message'] ) ) ) ); } } return $errors; } /** * filter_pre_load_value * * Checks if a $_POST value exists for this field to allow persistent values. * * @date 12/7/19 * @since 5.8.2 * * @param null $null A null placeholder. * @param (int|string) $post_id The post id. * @param array $field The field array. * @return mixed */ function filter_pre_load_value( $null, $post_id, $field ) { $field_key = $field['key']; // phpcs:disable WordPress.Security.NonceVerification.Missing -- Verified in save_user(). if ( isset( $_POST['acf'][ $field_key ] ) ) { return $_POST['acf'][ $field_key ]; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized elsewhere. } // phpcs:enable WordPress.Security.NonceVerification.Missing return $null; } } // instantiate acf_new_instance( 'ACF_Form_User' ); endif; // class_exists check ?>