PluginProbe
Autoptimize / 2.7.3
Autoptimize v2.7.3
2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 All 107 releases
autoptimize / classes / autoptimizeCriticalCSSBase.php

autoptimizeCriticalCSSBase.php in Autoptimize 2.7.3, at classes/autoptimizeCriticalCSSBase.php

194 lines 8.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Critical CSS base file (initializes all ccss files).
4 */
5
6 if ( ! defined( 'ABSPATH' ) ) {
7 exit;
8 }
9
10 class autoptimizeCriticalCSSBase {
11 /**
12 * Main plugin filepath.
13 * Used for activation/deactivation/uninstall hooks.
14 *
15 * @var string
16 */
17 protected $filepath = null;
18
19 public function __construct()
20 {
21 // define constant, but only once.
22 if ( ! defined( 'AO_CCSS_DIR' ) ) {
23 // Define plugin version.
24 define( 'AO_CCSS_VER', 'AO_' . AUTOPTIMIZE_PLUGIN_VERSION );
25
26 // Define a constant with the directory to store critical CSS in.
27 if ( is_multisite() ) {
28 $blog_id = get_current_blog_id();
29 define( 'AO_CCSS_DIR', WP_CONTENT_DIR . '/uploads/ao_ccss/' . $blog_id . '/' );
30 } else {
31 define( 'AO_CCSS_DIR', WP_CONTENT_DIR . '/uploads/ao_ccss/' );
32 }
33
34 // Define support files locations.
35 define( 'AO_CCSS_LOCK', AO_CCSS_DIR . 'queue.lock' );
36 define( 'AO_CCSS_LOG', AO_CCSS_DIR . 'queuelog.html' );
37 define( 'AO_CCSS_DEBUG', AO_CCSS_DIR . 'queue.json' );
38
39 // Define constants for criticalcss.com base path and API endpoints.
40 // fixme: AO_CCSS_URL should be read from the autoptimize availability json stored as option.
41 define( 'AO_CCSS_URL', 'https://criticalcss.com' );
42 define( 'AO_CCSS_API', AO_CCSS_URL . '/api/premium/' );
43 define( 'AO_CCSS_SLEEP', 10 );
44 }
45
46 $this->filepath = __FILE__;
47
48 $this->setup();
49 $this->load_requires();
50 }
51
52 public function setup()
53 {
54 // get all options.
55 $all_options = $this->fetch_options();
56 foreach ( $all_options as $option => $value ) {
57 ${$option} = $value;
58 }
59
60 // make sure the 10 minutes cron schedule is added.
61 add_filter( 'cron_schedules', array( $this, 'ao_ccss_interval' ) );
62
63 // check if we need to upgrade.
64 $this->check_upgrade();
65
66 // make sure ao_ccss_queue is scheduled OK if an API key is set.
67 if ( isset( $ao_ccss_key ) && ! empty( $ao_ccss_key ) && ! wp_next_scheduled( 'ao_ccss_queue' ) ) {
68 wp_schedule_event( time(), apply_filters( 'ao_ccss_queue_schedule', 'ao_ccss' ), 'ao_ccss_queue' );
69 }
70 }
71
72 public function load_requires() {
73 // Required libs, core is always needed.
74 $criticalcss_core = new autoptimizeCriticalCSSCore();
75
76 if ( defined( 'DOING_CRON' ) || is_admin() ) {
77 // TODO: also include if overridden somehow to force queue processing to be executed?
78 $criticalcss_cron = new autoptimizeCriticalCSSCron();
79 }
80
81 if ( is_admin() ) {
82 $criticalcss_settings = new autoptimizeCriticalCSSSettings();
83 } else {
84 // enqueuing only done when not wp-admin.
85 $criticalcss_enqueue = new autoptimizeCriticalCSSEnqueue();
86 }
87 }
88
89 public static function fetch_options() {
90 static $autoptimize_ccss_options = null;
91
92 if ( null === $autoptimize_ccss_options ) {
93 // not cached yet, fetching from WordPress options.
94 $autoptimize_ccss_options['ao_css_defer'] = autoptimizeOptionWrapper::get_option( 'autoptimize_css_defer' );
95 $autoptimize_ccss_options['ao_css_defer_inline'] = autoptimizeOptionWrapper::get_option( 'autoptimize_css_defer_inline' );
96 $autoptimize_ccss_options['ao_ccss_rules_raw'] = get_option( 'autoptimize_ccss_rules', false );
97 $autoptimize_ccss_options['ao_ccss_additional'] = get_option( 'autoptimize_ccss_additional' );
98 $autoptimize_ccss_options['ao_ccss_queue_raw'] = get_option( 'autoptimize_ccss_queue', false );
99 $autoptimize_ccss_options['ao_ccss_viewport'] = get_option( 'autoptimize_ccss_viewport', false );
100 $autoptimize_ccss_options['ao_ccss_finclude'] = get_option( 'autoptimize_ccss_finclude', false );
101 $autoptimize_ccss_options['ao_ccss_rlimit'] = get_option( 'autoptimize_ccss_rlimit', '5' );
102 $autoptimize_ccss_options['ao_ccss_noptimize'] = get_option( 'autoptimize_ccss_noptimize', false );
103 $autoptimize_ccss_options['ao_ccss_debug'] = get_option( 'autoptimize_ccss_debug', false );
104 $autoptimize_ccss_options['ao_ccss_key'] = get_option( 'autoptimize_ccss_key' );
105 $autoptimize_ccss_options['ao_ccss_keyst'] = get_option( 'autoptimize_ccss_keyst' );
106 $autoptimize_ccss_options['ao_ccss_loggedin'] = get_option( 'autoptimize_ccss_loggedin', '1' );
107 $autoptimize_ccss_options['ao_ccss_forcepath'] = get_option( 'autoptimize_ccss_forcepath', '1' );
108 $autoptimize_ccss_options['ao_ccss_servicestatus'] = get_option( 'autoptimize_service_availablity' );
109 $autoptimize_ccss_options['ao_ccss_deferjquery'] = get_option( 'autoptimize_ccss_deferjquery', false );
110 $autoptimize_ccss_options['ao_ccss_domain'] = get_option( 'autoptimize_ccss_domain' );
111
112 if ( strpos( $autoptimize_ccss_options['ao_ccss_domain'], 'http' ) === false && strpos( $autoptimize_ccss_options['ao_ccss_domain'], 'uggc' ) === 0 ) {
113 $autoptimize_ccss_options['ao_ccss_domain'] = str_rot13( $autoptimize_ccss_options['ao_ccss_domain'] );
114 } elseif ( strpos( $autoptimize_ccss_options['ao_ccss_domain'], 'http' ) !== false ) {
115 // not rot13'ed yet, do so now (goal; avoid migration plugins change the bound domain).
116 update_option( 'autoptimize_ccss_domain', str_rot13( $autoptimize_ccss_options['ao_ccss_domain'] ) );
117 }
118
119 // Setup the rules array.
120 if ( empty( $autoptimize_ccss_options['ao_ccss_rules_raw'] ) ) {
121 $autoptimize_ccss_options['ao_ccss_rules']['paths'] = array();
122 $autoptimize_ccss_options['ao_ccss_rules']['types'] = array();
123 } else {
124 $autoptimize_ccss_options['ao_ccss_rules'] = json_decode( $autoptimize_ccss_options['ao_ccss_rules_raw'], true );
125 }
126
127 // Setup the queue array.
128 if ( empty( $autoptimize_ccss_options['ao_ccss_queue_raw'] ) ) {
129 $autoptimize_ccss_options['ao_ccss_queue'] = array();
130 } else {
131 $autoptimize_ccss_options['ao_ccss_queue'] = json_decode( $autoptimize_ccss_options['ao_ccss_queue_raw'], true );
132 }
133
134 // Override API key if constant is defined.
135 if ( defined( 'AUTOPTIMIZE_CRITICALCSS_API_KEY' ) ) {
136 $autoptimize_ccss_options['ao_ccss_key'] = AUTOPTIMIZE_CRITICALCSS_API_KEY;
137 }
138 }
139
140 return $autoptimize_ccss_options;
141 }
142
143 public function on_upgrade() {
144 global $ao_ccss_key;
145
146 // Create the cache directory if it doesn't exist already.
147 if ( ! file_exists( AO_CCSS_DIR ) ) {
148 mkdir( AO_CCSS_DIR, 0755, true );
149 }
150
151 // Create a scheduled event for the queue.
152 if ( isset( $ao_ccss_key ) && ! empty( $ao_ccss_key ) && ! wp_next_scheduled( 'ao_ccss_queue' ) ) {
153 wp_schedule_event( time(), apply_filters( 'ao_ccss_queue_schedule', 'ao_ccss' ), 'ao_ccss_queue' );
154 }
155
156 // Create a scheduled event for log maintenance.
157 if ( isset( $ao_ccss_key ) && ! empty( $ao_ccss_key ) && ! wp_next_scheduled( 'ao_ccss_maintenance' ) ) {
158 wp_schedule_event( time(), 'twicedaily', 'ao_ccss_maintenance' );
159 }
160 }
161
162 public function check_upgrade() {
163 $db_version = get_option( 'autoptimize_ccss_version', '' );
164 if ( AO_CCSS_VER !== $db_version ) {
165 // check schedules & re-schedule if needed.
166 $this->on_upgrade();
167 // and update db_version.
168 update_option( 'autoptimize_ccss_version', AO_CCSS_VER );
169 }
170 }
171
172 public function ao_ccss_interval( $schedules ) {
173 // Let interval be configurable.
174 if ( ! defined( 'AO_CCSS_DEBUG_INTERVAL' ) ) {
175 $intsec = 600;
176 } else {
177 $intsec = AO_CCSS_DEBUG_INTERVAL;
178 if ( $intsec >= 120 ) {
179 $inttxt = $intsec / 60 . ' minutes';
180 } else {
181 $inttxt = $intsec . ' second(s)';
182 }
183 autoptimizeCriticalCSSCore::ao_ccss_log( 'Using custom WP-Cron interval of ' . $inttxt, 3 );
184 }
185
186 // Attach interval to schedule.
187 $schedules['ao_ccss'] = array(
188 'interval' => $intsec,
189 'display' => __( 'Autoptimize CriticalCSS' ),
190 );
191 return $schedules;
192 }
193 }
194