api_client = $api_client; $this->options = $options; $this->beacon = $beacon; } /** * {@inheritdoc} */ public static function get_subscribed_events() { return [ 'rocket_dashboard_after_account_data' => 'display_rocketcdn_status', 'rocket_cdn_settings_fields' => 'rocketcdn_field', 'admin_post_rocket_purge_rocketcdn' => 'purge_cdn_cache', 'rocket_settings_page_footer' => 'add_subscription_modal', 'http_request_args' => [ 'preserve_authorization_token', PHP_INT_MAX, 2 ], ]; } /** * Displays the RocketCDN section on the dashboard tab * * @since 3.5 * * @return void */ public function display_rocketcdn_status() { if ( $this->is_white_label_account() ) { return; } $subscription_data = $this->api_client->get_subscription_data(); if ( 'running' === $subscription_data['subscription_status'] ) { $label = __( 'Next Billing Date', 'rocket' ); $status_class = ' wpr-isValid'; $container_class = ''; $status_text = date_i18n( get_option( 'date_format' ), strtotime( $subscription_data['subscription_next_date_update'] ) ); $is_active = true; } elseif ( 'cancelled' === $subscription_data['subscription_status'] ) { $label = ''; $status_class = ' wpr-isInvalid'; $container_class = ' wpr-flex--egal'; $status_text = __( 'No Subscription', 'rocket' ); $is_active = false; } $data = [ 'is_live_site' => rocket_is_live_site(), 'container_class' => $container_class, 'label' => $label, 'status_class' => $status_class, 'status_text' => $status_text, 'is_active' => $is_active, ]; echo $this->generate( 'dashboard-status', $data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. } /** * Adds the RocketCDN fields to the CDN section * * @since 3.5 * * @param array $fields CDN settings fields. * * @return array */ public function rocketcdn_field( $fields ) { if ( $this->is_white_label_account() ) { return $fields; } $subscription_data = $this->api_client->get_subscription_data(); if ( 'running' !== $subscription_data['subscription_status'] ) { return $fields; } $helper_text = __( 'Your RocketCDN subscription is currently active.', 'rocket' ); $cdn_cnames = $this->options->get( 'cdn_cnames', [] ); if ( empty( $cdn_cnames ) || $cdn_cnames[0] !== $subscription_data['cdn_url'] ) { $helper_text = sprintf( // translators: %1$s = opening tag, %2$s = CDN URL, %3$s = closing tag. __( 'To use RocketCDN, replace your CNAME with %1$s%2$s%3$s.', 'rocket' ), '', $subscription_data['cdn_url'], '' ); } $beacon = $this->beacon->get_suggest( 'rocketcdn' ); $more_info = sprintf( // translators: %1$is = opening link tag, %2$s = closing link tag. __( '%1$sMore Info%2$s', 'rocket' ), '', '' ); $fields['cdn_cnames'] = [ 'type' => 'rocket_cdn', 'label' => __( 'CDN CNAME(s)', 'rocket' ), 'description' => __( 'Specify the CNAME(s) below', 'rocket' ), 'helper' => $helper_text . ' ' . $more_info, 'default' => '', 'section' => 'cnames_section', 'page' => 'page_cdn', 'beacon' => [ 'url' => $beacon['url'], 'id' => $beacon['id'], ], ]; return $fields; } /** * Purges the CDN cache and store the response in a transient. * * @since 3.5 * * @return void */ public function purge_cdn_cache() { if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], 'rocket_purge_rocketcdn' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash wp_nonce_ays( '' ); } if ( ! current_user_can( 'rocket_manage_options' ) ) { wp_die(); } set_transient( 'rocketcdn_purge_cache_response', $this->api_client->purge_cache_request(), HOUR_IN_SECONDS ); wp_safe_redirect( esc_url_raw( wp_get_referer() ) ); rocket_get_constant( 'WP_ROCKET_IS_TESTING', false ) ? wp_die() : exit; } /** * Adds the subscription modal on the WP Rocket settings page * * @since 3.5 * * @return void */ public function add_subscription_modal() { if ( $this->is_white_label_account() ) { return; } if ( ! rocket_is_live_site() ) { return; } $iframe_src = add_query_arg( [ 'website' => home_url(), 'callback' => rest_url( 'wp-rocket/v1/rocketcdn/' ), ], rocket_get_constant( 'WP_ROCKET_WEB_MAIN' ) . 'cdn/iframe' ); ?> api_client->preserve_authorization_token( $args, $url ); } /** * Checks if white label is enabled * * @since 3.6 * * @return bool */ private function is_white_label_account() { return (bool) rocket_get_constant( 'WP_ROCKET_WHITE_LABEL_ACCOUNT' ); } }