reader_revenue_manager = $reader_revenue_manager; $this->user_options = $user_options; } /** * Registers functionality through WordPress hooks. * * @since 1.141.0 * * @return void */ public function register() { add_action( self::CRON_SYNCHRONIZE_ONBOARDING_STATE, function () { $this->synchronize_publication_data(); } ); } /** * Cron callback for synchronizing the publication. * * @since 1.141.0 * * @return void */ protected function synchronize_publication_data() { $owner_id = $this->reader_revenue_manager->get_owner_id(); $restore_user = $this->user_options->switch_user( $owner_id ); if ( user_can( $owner_id, Permissions::VIEW_AUTHENTICATED_DASHBOARD ) ) { $this->synchronize_onboarding_state(); } $restore_user(); } /** * Synchronizes the onboarding state. * * @since 1.141.0 * * @return void */ protected function synchronize_onboarding_state() { $connected = $this->reader_revenue_manager->is_connected(); // If not connected, return early. if ( ! $connected ) { return; } $settings = $this->reader_revenue_manager->get_settings()->get(); $publication_id = $settings['publicationID']; $onboarding_state = $settings['publicationOnboardingState']; if ( 'ONBOARDING_COMPLETE' !== $onboarding_state ) { $publications = $this->reader_revenue_manager->get_data( 'publications' ); // If publications is empty, return early. if ( empty( $publications ) ) { return; } $filtered_publications = array_filter( $publications, function ( $pub ) use ( $publication_id ) { return $pub->getPublicationId() === $publication_id; } ); // If there are no filtered publications, return early. if ( empty( $filtered_publications ) ) { return; } // Re-index the filtered array to ensure sequential keys. $filtered_publications = array_values( $filtered_publications ); $publication = $filtered_publications[0]; if ( $publication->getOnboardingState() !== $onboarding_state ) { $this->reader_revenue_manager->get_settings()->merge( array( 'publicationOnboardingState' => $publication->getOnboardingState(), 'publicationOnboardingStateChanged' => true, ) ); } } } /** * Maybe schedule the synchronize onboarding state cron event. * * @since 1.141.0 * * @return void */ public function maybe_schedule_synchronize_onboarding_state() { $connected = $this->reader_revenue_manager->is_connected(); $cron_already_scheduled = wp_next_scheduled( self::CRON_SYNCHRONIZE_ONBOARDING_STATE ); if ( $connected && ! $cron_already_scheduled ) { wp_schedule_single_event( time() + HOUR_IN_SECONDS, self::CRON_SYNCHRONIZE_ONBOARDING_STATE ); } } }