File ManagerCurrent Directory: wp-content/plugins/google-site-kit/includes/Modules/Reader_Revenue_ManagerLinux appserver-0d5e4f1e-php-cc8da225320a42ba9b7d66cba40b1f03 6.6.123+ #1 SMP PREEMPT_DYNAMIC Wed Mar 11 09:04:28 UTC 2026 x86_64Edit File: Synchronize_Publication.php <?php /** * Class Google\Site_Kit\Modules\Reader_Revenue_Manager\Synchronize_Publication * * @package Google\Site_Kit\Modules\Reader_Revenue_Manager * @copyright 2025 Google LLC * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * @link https://sitekit.withgoogle.com */ namespace Google\Site_Kit\Modules\Reader_Revenue_Manager; use Google\Site_Kit\Core\Permissions\Permissions; use Google\Site_Kit\Core\Storage\User_Options; use Google\Site_Kit\Core\Util\Feature_Flags; use Google\Site_Kit\Modules\Reader_Revenue_Manager; use Google\Site_Kit_Dependencies\Google\Service\SubscribewithGoogle\Publication; use Google\Site_Kit_Dependencies\Google\Service\SubscribewithGoogle\PaymentOptions; /** * Class for synchronizing the onboarding state. * * @since 1.146.0 * @access private * @ignore */ class Synchronize_Publication { /** * Cron event name for synchronizing the publication info. */ const CRON_SYNCHRONIZE_PUBLICATION = 'googlesitekit_cron_synchronize_publication'; /** * Reader_Revenue_Manager instance. * * @var Reader_Revenue_Manager */ protected $reader_revenue_manager; /** * User_Options instance. * * @var User_Options */ protected $user_options; /** * Constructor. * * @since 1.146.0 * * @param Reader_Revenue_Manager $reader_revenue_manager Reader Revenue Manager instance. * @param User_Options $user_options User_Options instance. */ public function __construct( Reader_Revenue_Manager $reader_revenue_manager, User_Options $user_options ) { $this->reader_revenue_manager = $reader_revenue_manager; $this->user_options = $user_options; } /** * Registers functionality through WordPress hooks. * * @since 1.146.0 * * @return void */ public function register() { add_action( self::CRON_SYNCHRONIZE_PUBLICATION, function () { $this->synchronize_publication_data(); } ); } /** * Cron callback for synchronizing the publication. * * @since 1.146.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 ) ) { $connected = $this->reader_revenue_manager->is_connected(); // If not connected, return early. if ( ! $connected ) { return; } $publications = $this->reader_revenue_manager->get_data( 'publications' ); // If publications is empty, return early. if ( empty( $publications ) ) { return; } $settings = $this->reader_revenue_manager->get_settings()->get(); $publication_id = $settings['publicationID']; $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]; $onboarding_state = $settings['publicationOnboardingState']; $new_onboarding_state = $publication->getOnboardingState(); $new_settings = array( 'publicationOnboardingState' => $new_onboarding_state, ); // Let the client know if the onboarding state has changed. if ( $new_onboarding_state !== $onboarding_state ) { $new_settings['publicationOnboardingStateChanged'] = true; } if ( Feature_Flags::enabled( 'rrmModuleV2' ) ) { $new_settings['productIDs'] = $this->get_product_ids( $publication ); $new_settings['paymentOption'] = $this->get_payment_option( $publication ); } $this->reader_revenue_manager->get_settings()->merge( $new_settings ); } $restore_user(); } /** * Returns the products IDs for the given publication. * * @since 1.146.0 * * @param Publication $publication Publication object. * @return array Product IDs. */ protected function get_product_ids( Publication $publication ) { $products = $publication->getProducts(); $product_ids = array(); if ( ! empty( $products ) ) { foreach ( $products as $product ) { $name = $product->getName(); // Extract the product ID from the name, which is in // the format of `publicationID:productID`. if ( strpos( $name, ':' ) !== false ) { $product_ids[] = substr( $name, strpos( $name, ':' ) + 1 ); } } } return $product_ids; } /** * Returns the payment option for the given publication. * * @since 1.146.0 * * @param Publication $publication Publication object. * @return string Payment option. */ protected function get_payment_option( Publication $publication ) { $payment_options = $publication->getPaymentOptions(); $payment_option = ''; if ( $payment_options instanceof PaymentOptions ) { foreach ( $payment_options as $option => $value ) { if ( true === $value ) { $payment_option = $option; break; } } } return $payment_option; } /** * Maybe schedule the synchronize onboarding state cron event. * * @since 1.146.0 * * @return void */ public function maybe_schedule_synchronize_publication() { $connected = $this->reader_revenue_manager->is_connected(); $cron_already_scheduled = wp_next_scheduled( self::CRON_SYNCHRONIZE_PUBLICATION ); if ( $connected && ! $cron_already_scheduled ) { wp_schedule_single_event( time() + HOUR_IN_SECONDS, self::CRON_SYNCHRONIZE_PUBLICATION ); } } } Upload File Directory Listing NameTypeSizeActions.. (Parent Directory)DirPost_Product_ID.phpFile1.64 KB Rename | Delete | EditSettings.phpFile4.89 KB Rename | Delete | EditSynchronize_Publication.phpFile5.59 KB Rename | Delete | EditTag_Guard.phpFile886.00 B Rename | Delete | EditTag_Matchers.phpFile984.00 B Rename | Delete | EditTerm_Product_ID.phpFile1.64 KB Rename | Delete | EditWeb_Tag.phpFile3.37 KB Rename | Delete | Edit