oont-contents/plugins/wp-rocket/inc/deprecated/Engine/Addon/GoogleTracking/Subscriber.php
2025-02-08 15:10:23 +01:00

187 lines
4.1 KiB
PHP

<?php
namespace WP_Rocket\Addon\GoogleTracking;
use WP_Rocket\deprecated\DeprecatedClassTrait;
use WP_Rocket\Event_Management\Subscriber_Interface;
use WP_Rocket\Addon\Busting\BustingFactory;
use WP_Rocket\Admin\Options_Data as Options;
/**
* Event subscriber for Google tracking cache busting
*
* @since 3.9 deprecated.
* @since 3.1
*/
class Subscriber implements Subscriber_Interface {
use DeprecatedClassTrait;
/**
* Instance of the Busting Factory class
*
* @var BustingFactory
*/
private $busting_factory;
/**
* Instance of the Option_Data class
*
* @var Options
*/
private $options;
/**
* Constructor
*
* @param BustingFactory $busting_factory Instance of the Busting Factory class.
* @param Options $options Instance of the Option_Data class.
*/
public function __construct( BustingFactory $busting_factory, Options $options ) {
self::deprecated_class( '3.9' );
$this->busting_factory = $busting_factory;
$this->options = $options;
}
/**
* Return an array of events that this subscriber wants to listen to.
*
* @since 3.1
*
* @return array
*/
public static function get_subscribed_events() {
$events = [
'cron_schedules' => 'add_schedule',
'init' => 'schedule_tracking_cache_update',
'rocket_google_tracking_cache_update' => 'update_tracking_cache',
'rocket_purge_cache' => 'delete_tracking_cache',
'rocket_buffer' => 'cache_busting_google_tracking',
];
return $events;
}
/**
* Processes the cache busting on the HTML content
*
* Google Analytics replacement is performed first, and if no replacement occured, Google Tag Manager replacement is performed.
*
* @since 3.1
*
* @param string $html HTML content.
* @return string
*/
public function cache_busting_google_tracking( $html ) {
if ( ! $this->is_allowed() ) {
return $html;
}
$processor = $this->busting_factory->type( 'ga' );
$html = $processor->replace_url( $html );
$processor = $this->busting_factory->type( 'gtm' );
$html = $processor->replace_url( $html );
return $html;
}
/**
* Schedules the auto-update of Google Analytics cache busting file
*
* @since 3.1
*
* @return void
*/
public function schedule_tracking_cache_update() {
if ( ! $this->is_busting_active() ) {
return;
}
if ( ! wp_next_scheduled( 'rocket_google_tracking_cache_update' ) ) {
wp_schedule_event( time(), 'weekly', 'rocket_google_tracking_cache_update' );
}
}
/**
* Updates Google Analytics cache busting file
*
* @since 3.1
*
* @return bool
*/
public function update_tracking_cache() {
if ( ! $this->is_busting_active() ) {
return false;
}
$processor = $this->busting_factory->type( 'ga' );
return $processor->refresh_save( $processor->get_url() );
}
/**
* Adds weekly interval to cron schedules
*
* @since 3.1
*
* @param Array $schedules An array of intervals used by cron jobs.
* @return Array
*/
public function add_schedule( $schedules ) {
if ( ! $this->is_busting_active() ) {
return $schedules;
}
$schedules['weekly'] = [
'interval' => 604800,
'display' => __( 'weekly', 'rocket' ),
];
return $schedules;
}
/**
* Deletes the GA busting file.
*
* @since 3.1
* @since 3.6 Argument replacement.
*
* @param string $type Type of cache clearance: 'all', 'post', 'term', 'user', 'url'.
* @return bool
*/
public function delete_tracking_cache( $type ) {
if ( 'all' !== $type || ! $this->is_busting_active() ) {
return false;
}
$this->busting_factory->type( 'gtm' )->delete();
return $this->busting_factory->type( 'ga' )->delete();
}
/**
* Checks if the cache busting should happen
*
* @since 3.1
*
* @return boolean
*/
private function is_allowed() {
if ( rocket_get_constant( 'DONOTROCKETOPTIMIZE' ) ) {
return false;
}
return $this->is_busting_active();
}
/**
* Tell if the cache busting option is active.
*
* @since 3.6
*
* @return bool
*/
private function is_busting_active() {
return (bool) $this->options->get( 'google_analytics_cache', 0 );
}
}