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_after_cdn_sections' => 'display_manage_subscription',
'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;
}
/**
* Displays the button to open the subscription modal
*
* @since 3.5
*
* @return void
*/
public function display_manage_subscription() {
if ( $this->is_white_label_account() ) {
return;
}
if ( ! rocket_is_live_site() ) {
return;
}
$subscription_data = $this->api_client->get_subscription_data();
if ( 'running' !== $subscription_data['subscription_status'] ) {
return;
}
?>
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' ); } }