push_tokens_data_store = $push_tokens_data_store; $this->preferences_data_store = $preferences_data_store; } /** * Registers the WordPress hooks for user deletion and removal. * * `wpmu_delete_user` needs no handling of its own because it calls * `remove_user_from_blog()` for every site the user belongs to. * * @return void * * @since 11.2.0 */ public function register(): void { add_action( 'delete_user', array( $this, 'handle_delete_user' ) ); add_action( 'remove_user_from_blog', array( $this, 'handle_remove_user_from_blog' ) ); } /** * Handles the delete_user hook. * * @internal * * @param int $user_id The ID of the user being deleted. * @return void * * @since 11.2.0 */ public function handle_delete_user( int $user_id ): void { $this->delete_data_for_user( $user_id ); } /** * Handles the remove_user_from_blog hook. * * WordPress fires this inside `switch_to_blog()`, so the site-scoped reads * and writes below already target the site the user is leaving. * * @internal * * @param int $user_id The ID of the user being removed from the site. * @return void * * @since 11.2.0 */ public function handle_remove_user_from_blog( int $user_id ): void { $this->delete_data_for_user( $user_id ); } /** * Deletes both kinds of stored push notification data for a user. * * @param int $user_id The user ID. * @return void */ private function delete_data_for_user( int $user_id ): void { $this->push_tokens_data_store->delete_for_user( $user_id ); $this->preferences_data_store->delete( $user_id ); } }