value => 5, Roles::Member->value => 2, Roles::Verified->value => 6, Roles::Moderator->value => 4, Roles::Administrator->value => 3, Roles::Bot->value => 7 ]; protected function extend(): void { $this->add_action( 'show_user_profile', [ $this, 'xf_user_id_field'] ); $this->add_action( 'edit_user_profile', [ $this, 'xf_user_id_field'] ); $this->add_action('personal_options_update', [ $this, 'update_xf_user_id_from_profile'] ); $this->add_action('edit_user_profile_update', [ $this, 'update_xf_user_id_from_profile'] ); $this->add_action( 'profile_update', [ $this, 'sync_user_profile' ], 20, 2 ); } public function xf_user_id_field( \WP_User $user ): void { global $_romhackplaza; if( !$_romhackplaza->user_roles->current_is_staff() ) return; $field_value = absint( get_the_author_meta( XenForo::XF_USER_ID, $user->ID ) ?? 0 ); ?>

user_roles->current_is_staff() ) // Can't update this field if not staff member. return; if( isset( $_POST[ XenForo::XF_USER_ID ] ) ){ $field_value = absint( $_POST[ XenForo::XF_USER_ID ] ) ?? 0; if( $field_value != 0 ) update_user_meta( $user_id, XenForo::XF_USER_ID, $field_value ); } } private function prepare_sync_user_role( string $role_name, int $user_id ): array{ global $_romhackplaza; return [ 'user_group_id' => self::USER_ROLE_SYNC[$role_name], 'is_staff' => $_romhackplaza->user_roles->user_is_staff( $user_id ) ]; } public function sync_user_role( int $user_id ){ global $_romhackplaza; $role = $_romhackplaza->user_roles->user_upper( $user_id ); if( $role == null ) return; $xf_user_id = absint( get_the_author_meta( XenForo::XF_USER_ID, $user_id ) ); if( $xf_user_id == 0 ) return; API::post__users_id( $xf_user_id, self::prepare_sync_user_role( $role->value, $user_id ) ); } public function create_xenforo_account_from_wp_user( int $user_id ){ global $_romhackplaza; if( $_romhackplaza->settings->get( 'xf_auto_create_user' ) != '1' ) return; $wp_user = get_user_by( 'id', $user_id ); if( !$wp_user ) return; $create_user_array = []; $create_user_array['username'] = $wp_user->display_name; $role = $_romhackplaza->user_roles->user_upper( $user_id ); if( $role != null ) $create_user_array = array_merge( $create_user_array, self::prepare_sync_user_role( $role->value, $user_id ) ); $create_user_array['email'] = sanitize_email( $wp_user->user_email ); $create_user_array['password'] = wp_generate_password(); $create_user_array['custom_fields']['wp_user_id'] = $user_id; $create_user_array['custom_fields']['wp_entries_number'] = 0; $response = API::post__users( $create_user_array ); if( $response != null && $response['success'] === true && isset( $response['user']['user_id'] ) ){ update_user_meta( $user_id, XenForo::XF_USER_ID, $response['user']['user_id'] ); } } public function sync_user_profile( int $user_id, \WP_User $old_values ): void { $xf_user_id = absint( get_the_author_meta( XenForo::XF_USER_ID, $user_id ) ); if( $xf_user_id == 0 ) { $this->create_xenforo_account_from_wp_user($user_id); return; } $update_user_array = []; // Username change if( !empty( $_POST['display_name'] ) && $_POST['display_name'] !== $old_values->display_name ){ $update_user_array['username'] = sanitize_text_field( $_POST['display_name'] ); $update_user_array['username_change_visible'] = true; } // Role change if( !empty( $_POST['role'] ) && !in_array( $_POST['role'], $old_values->roles ) ) $update_user_array = array_merge( $update_user_array, self::prepare_sync_user_role( sanitize_text_field( $_POST['role'] ), $user_id ) ); // E-Mail change if( !empty( $_POST['email'] ) && $_POST['email'] !== $old_values->user_email ) $update_user_array['email'] = sanitize_email( $_POST['email'] ); // Password change if( !empty( $_POST['pass1'] ) && !empty( $_POST['pass2'] ) && $_POST['pass1'] === $_POST['pass2'] ) $update_user_array['password'] = esc_attr( $_POST['pass1'] ); $update_user_array['custom_fields']['wp_user_id'] = $user_id; // ... $response = null; if( $update_user_array != [] ) $response = API::post__users_id( $xf_user_id, $update_user_array ); } public function get_number_of_unviewed_alerts( int $user_id ): int { $xf_user_id = absint( get_user_meta( $user_id, XenForo::XF_USER_ID, true ) ?? 0 ); if( $xf_user_id == 0 ) return 0; $response = API::get__plaza_alerts_id( $xf_user_id ); if( $response != null ) return count( $response['alerts'] ?? [] ); return 0; } }