PluginProbe ʕ •ᴥ•ʔ
10Web Booster – Website speed optimization, Cache & Page Speed optimizer / trunk
10Web Booster – Website speed optimization, Cache & Page Speed optimizer vtrunk
2.33.0 2.30.5 2.30.7 2.30.9 2.31.10 2.31.8 2.32.11 2.32.21 2.32.3 2.32.4 2.32.7 2.6.31 2.6.40 2.6.42 2.6.7 2.7.37 2.7.44 2.7.47 2.8.18 2.8.19 2.8.32 2.8.34 2.8.35 2.9.23 2.9.24 2.9.25 2.9.27 v2.27.4 trunk 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.17 2.0.18 2.0.21 2.0.22 2.0.25 2.0.26 2.0.27 2.0.3 2.0.7 2.0.9 2.10.46 2.10.65 2.10.66 2.10.68 2.11.41 2.11.42 2.11.43 2.12.15 2.12.21 2.12.22 2.12.23 2.12.26 2.13.37 2.13.40 2.13.41 2.13.42 2.13.44 2.13.45 2.13.47 2.14.49 2.14.50 2.15.18 2.17.21 2.17.23 2.18.17 2.19.44 2.19.45 2.19.46 2.19.49 2.2.12 2.2.15 2.2.16 2.2.18 2.2.8 2.20.31 2.20.32 2.20.33 2.21.11 2.21.12 2.21.16 2.21.25 2.22.32 2.23.13 2.23.15 2.23.16 2.23.18 2.24.12 2.24.14 2.24.18 2.25.14 2.26.6 2.28.10 2.28.13 2.28.14 2.28.7 2.29.1 2.29.2 2.29.3 2.3.0 2.3.1 2.3.2 2.3.3 2.30.18
tenweb-speed-optimizer / includes / OptimizerCriticalCss.php
tenweb-speed-optimizer / includes Last commit date
WebPageCache 7 months ago external 2 months ago ExcludeJsFromDelay.php 2 years ago OptimizerBanner.php 11 months ago OptimizerBase.php 2 years ago OptimizerCSSMin.php 2 years ago OptimizerCache.php 1 year ago OptimizerCacheStructure.php 2 years ago OptimizerCriticalCss.php 1 year ago OptimizerElementor.php 2 years ago OptimizerFonts.php 2 years ago OptimizerImages.php 1 year ago OptimizerLogger.php 1 year ago OptimizerMain.php 2 months ago OptimizerOnInit.php 11 months ago OptimizerScripts.php 2 years ago OptimizerSettings.php 2 months ago OptimizerStyles.php 2 years ago OptimizerUrl.php 1 year ago OptimizerUtils.php 2 months ago OptimizerWhiteLabel.php 2 years ago
OptimizerCriticalCss.php
651 lines
1 <?php
2
3 namespace TenWebOptimizer;
4
5 use Exception;
6 use TenwebServices;
7
8 class OptimizerCriticalCss
9 {
10 public $critical_enabled = false;
11
12 public $critical_font_enabled = false;
13
14 public $uncritical_load_type = null;
15
16 public $critical_data = null;
17
18 public $critical_css = null;
19
20 public $uncritical_css = null;
21
22 public $critical_bg = null;
23
24 public $critical_fonts = null;
25
26 public $images_in_viewport = null;
27
28 public $status = false;
29
30 public $use_uncritical = false;
31
32 public $two_critical_pages = null;
33
34 public $page_id = null;
35
36 public function __construct($id = null)
37 {
38 global $TwoSettings;
39 $critical_status = $TwoSettings->get_settings('two_critical_status');
40
41 if ($critical_status === 'true') {
42 $this->critical_enabled = true;
43 }
44
45 if ($TwoSettings->get_settings('two_critical_font_status') === 'true') {
46 $this->critical_font_enabled = true;
47 }
48 $this->two_critical_pages = OptimizerUtils::getCriticalPages();
49
50 if ($id === null) {
51 global $post;
52
53 if (is_front_page()) {
54 $id = '';
55
56 if (!empty($this->two_critical_pages) && !empty($post)) {
57 if (!empty($this->two_critical_pages[$post->ID])) {
58 $id = $post->ID; // translated home page
59 } elseif (isset($this->two_critical_pages['front_page'])) {
60 $id = OptimizerUtils::get_post_id($this->two_critical_pages['front_page']['url']);
61 }
62 }
63 }
64
65 if (!isset($id) || $id === 0 || empty($id)) {
66 $id = OptimizerUtils::get_post_id();
67 }
68 }
69 $this->page_id = $id;
70 OptimizerUtils::two_critical_status($id);
71 $this->getCriticalCssData($id);
72 }
73
74 public static function getCriticalCssApi($request_data)
75 {
76 global $TwoSettings;
77 $newly_connected_website = $request_data['newly_connected_website'] ?? false;
78 $two_flow_critical_start = get_option('two_flow_critical_start');
79
80 if (!TENWEB_SO_HOSTED_ON_10WEB && !$newly_connected_website && $two_flow_critical_start !== '1' && !\Tenweb_Authorization\Login::get_instance()->check_logged_in()) {
81 return;
82 }
83
84 if (empty($request_data['page_id'])) {
85 return;
86 }
87 $critical_key = 'two_critical_' . $request_data['page_id'];
88 $critical_key_transient = \TenWebWpTransients\OptimizerTransients::get($critical_key);
89
90 if (!$newly_connected_website && $critical_key_transient === '1') {
91 return;
92 }
93 \TenWebWpTransients\OptimizerTransients::set($critical_key, '1', MINUTE_IN_SECONDS * 15);
94
95 try {
96 $response_data = null;
97
98 if (filter_var($request_data['url'], FILTER_VALIDATE_URL) === false) {
99 $page_data = OptimizerUtils::get_permalink_name_by_id($request_data['page_id']);
100 $request_data['url'] = $page_data[ 'url' ];
101 }
102
103 if (empty($request_data['url'])) {
104 return;
105 }
106 $check_redirect = OptimizerUtils::check_page_has_no_redirects($request_data['url'], true);
107
108 if (!$check_redirect) {
109 return;
110 }
111
112 if (empty($request_data['url_query'])) {
113 $request_data['url_query'] = 'two_version=' . TENWEB_SO_VERSION;
114 } else {
115 $request_data['url_query'] .= '&two_version=' . TENWEB_SO_VERSION;
116 }
117 $url = wp_parse_url($request_data['url'], PHP_URL_QUERY) ? $request_data['url'] . '&' . $request_data['url_query'] : $request_data['url'] . '?' . $request_data['url_query'];
118 $request_data['url'] = $url;
119 $critical_flag = \TenWebWpTransients\OptimizerTransients::get('two_critical_flag');
120 $critical_flag = (int) $critical_flag;
121
122 if ($critical_flag > 0) {
123 $critical_flag++;
124 \TenWebWpTransients\OptimizerTransients::set('two_critical_flag', $critical_flag, 24 * HOUR_IN_SECONDS);
125 } else {
126 \TenWebWpTransients\OptimizerTransients::set('two_critical_flag', 1, 24 * HOUR_IN_SECONDS);
127 }
128 $page_id = sanitize_text_field($request_data['page_id']);
129
130 if (strpos($page_id, 'no_critical') === 0) {
131 return;
132 }
133 $critical_in_progress_key = 'two_critical_in_progress_' . $page_id;
134 \TenWebWpTransients\OptimizerTransients::set($critical_in_progress_key, '1', 30 * MINUTE_IN_SECONDS);
135
136 if (!TENWEB_SO_HOSTED_ON_10WEB || is_multisite()) {
137 $domain_id = get_site_option('tenweb_domain_id');
138 $access_token = get_site_option(TENWEB_PREFIX . '_access_token');
139 $critical_token = get_option('two_critical' . $page_id);
140
141 if (!$critical_token || empty($critical_token)) {
142 $critical_token = wp_generate_uuid4() . bin2hex(random_bytes(12));
143 }
144
145 if ($access_token && $domain_id) {
146 $home_url = trailingslashit(home_url());
147 $callback_url = add_query_arg([ 'rest_route' => '/tenweb_so/v1/set_critical'], $home_url);
148 $request_data['callback_url'] = $callback_url;
149 $request_data['action'] = 'two_set_critical';
150 $request_data['token'] = $critical_token;
151
152 /*for flow*/
153 $notification_id = get_site_option(TENWEB_PREFIX . '_notification_id', false);
154 $flow_id = get_site_option(TENWEB_PREFIX . '_flow_id', false);
155
156 if ($newly_connected_website && $request_data['page_id'] == 'front_page') {
157 $request_data['flow_id'] = $flow_id;
158 $request_data['notification_id'] = $notification_id;
159 $request_data['initiator'] = 'automatic_during_onboarding_flow';
160 update_option('two_flow_critical_start', '1');
161 }
162
163 /*-----------End Flow-------------*/
164 if (TENWEB_SO_HOSTED_ON_10WEB && is_multisite()) {
165 $request_data['newly_connected_website'] = false;
166 $request_data['flow_id'] = false;
167 $request_data['notification_id'] = false;
168 }
169 $request_data_to_send = ['critical_data' => $request_data];
170
171 $res = wp_remote_post(TENWEB_SO_CRITICAL_URL . '/v1/critical/' . $domain_id . '/create', [
172 'timeout' => 5, // phpcs:ignore
173 'redirection' => 5,
174 'httpversion' => '1.0',
175 'blocking' => true,
176 'headers' => [
177 'accept' => 'application/x.10webperformance.v1+json',
178 'authorization' => 'Bearer ' . $access_token,
179 ],
180 'body' => $request_data_to_send,
181 'cookies' => []
182 ]);
183
184 if (wp_remote_retrieve_response_code($res) !== 200) {
185 $critical_key = 'two_critical_' . $page_id;
186 \TenWebWpTransients\OptimizerTransients::delete($critical_key);
187 \TenWebWpTransients\OptimizerTransients::delete($critical_in_progress_key);
188
189 if (OptimizerUrl::isCriticalSavedInSettings($page_id)) {
190 $two_critical_pages = $TwoSettings->get_settings('two_critical_pages');
191 unset($two_critical_pages[$page_id]);
192 unset($two_critical_pages['']);
193 $TwoSettings->update_setting('two_critical_pages', $two_critical_pages);
194 } else {
195 delete_post_meta($page_id, 'two_critical_pages');
196 }
197 /* unset optimize_inprogress */
198 \TenWebWpTransients\OptimizerTransients::delete('two_optimize_inprogress_' . $page_id);
199 /* Keeping all posts statuses which is in progress or optimized to manage notif popup view one time for each case */
200 $two_optimization_notif_status = get_option('two_optimization_notif_status');
201 unset($two_optimization_notif_status[$page_id]);
202 update_option('two_optimization_notif_status', $two_optimization_notif_status, 1);
203
204 if ($newly_connected_website && $request_data['page_id'] == 'front_page') {
205 $debug_data = [
206 'response' => wp_remote_retrieve_body($res),
207 'request' => $request_data_to_send,
208 'response_status_code' => wp_remote_retrieve_response_code($res),
209 ];
210 OptimizerUtils::update_connection_flow_progress('running', 'ccss_generation_queue_rejected', $debug_data);
211 }
212 }
213 OptimizerLogger::add_critical_css_log($request_data, $newly_connected_website, $flow_id, wp_remote_retrieve_response_code($res), wp_remote_retrieve_body($res));
214 }
215 update_option('two_critical' . $page_id, $critical_token, false);
216 } elseif (true === TenwebServices::manager_ready()) {
217 $response = TenwebServices::do_request(TENWEB_API_URL . '/domains/critical-css', [
218 'body' => [
219 'critical_data' => $request_data
220 ],
221 'method' => 'POST',
222 'blocking' => false
223 ]);
224
225 OptimizerLogger::add_critical_css_log($request_data, $newly_connected_website, get_site_option(TENWEB_PREFIX . '_flow_id'), wp_remote_retrieve_response_code($response));
226
227 if (!is_wp_error($response)) {
228 $response_data = [
229 'status' => 'success',
230 ];
231 }
232 } else {
233 $response_data = [
234 'status' => 'error',
235 'error' => 'Tenweb Manager not ready'
236 ];
237 }
238 } catch (Exception $e) {
239 $response_data = [
240 'status' => 'error',
241 'error' => $e->getMessage()
242 ];
243 }
244
245 return $response_data;
246 }
247
248 public static function getDefaultSettings()
249 {
250 return [
251 'desktop_width' => 1280,
252 'desktop_height' => 800,
253 'mobile_width' => 360,
254 'mobile_height' => 640,
255 'url_query' => 'PageSpeed=off&two_nooptimize=1'
256 ];
257 }
258
259 public static function checkManagerIsActive()
260 {
261 if (!defined('TENWEB_INCLUDES_DIR')) {
262 return false;
263 }
264 include_once TENWEB_INCLUDES_DIR . '/class-tenweb-services.php';
265
266 if (!defined('TENWEB_API_URL')) {
267 return false;
268 }
269
270 return true;
271 }
272
273 public static function setCritical($data)
274 {
275 global $TwoSettings;
276 $tenweb_domain_id = get_option('tenweb_domain_id');
277 $url = $data['page_url'];
278 $page_id = $data['page_id'];
279 $initiator = 'auto';
280
281 if (isset($data['initiator']) && !empty($data['initiator'])) {
282 $initiator = $data['initiator'];
283 }
284 $url_query = $data['url_query'];
285 $wait_until = 'load';
286
287 if (isset($data['wait_until'])) {
288 $wait_until = $data['wait_until'];
289 }
290
291 if (isset($data['url_query'])) {
292 $url_query = $data['url_query'];
293 }
294
295 if (is_array($data['page_sizes']) && isset($tenweb_domain_id)) {
296 if (empty($data['page_sizes'])) {
297 $data['page_sizes'] = $TwoSettings->default_settings['two_critical_sizes'];
298 }
299
300 $request_data = [
301 'url' => $url,
302 'page_id' => $page_id,
303 'initiator' => $initiator,
304 'sizes' => array_values($data['page_sizes']),
305 'url_query' => $url_query,
306 'wait_until' => $wait_until,
307 'tenweb_domain_id' => $tenweb_domain_id,
308 'newly_connected_website' => $data['newly_connected_website'] ?? false
309 ];
310 $two_img_in_viewport_lazyload = $TwoSettings->get_settings('two_img_in_viewport_lazyload');
311
312 if ($two_img_in_viewport_lazyload == 'on') {
313 $request_data['two_img_in_viewport'] = 'on';
314 } else {
315 $request_data['two_img_in_viewport'] = 'off';
316 }
317 self::getCriticalCssApi($request_data);
318 }
319 }
320
321 public function getCriticalCssData($id)
322 {
323 if (is_array($this->two_critical_pages) && isset($this->two_critical_pages[$id])) {
324 $critical_page = $this->two_critical_pages[$id];
325
326 if (isset($this->two_critical_pages[$id]['critical_css']) && !empty($this->two_critical_pages[$id]['critical_css'])) {
327 $this->critical_css = $this->two_critical_pages[$id]['critical_css'];
328 $file_dir = TWO_CACHE_DIR . 'critical/' . $this->critical_css;
329
330 if (!file_exists($file_dir)) {
331 if (isset($critical_page['status']) && $critical_page['status'] === 'success') {
332 global $TwoSettings;
333 $this->two_critical_pages[$id]['status'] = 'not_started';
334 $TwoSettings->update_setting('two_critical_pages', $this->two_critical_pages);
335 }
336
337 return;
338 }
339 } else {
340 return;
341 }
342
343 if (isset($critical_page['load_type'])) {
344 $this->uncritical_load_type = $critical_page['load_type'];
345 } else {
346 $this->uncritical_load_type = 'async';
347 }
348
349 if (isset($critical_page['status'])) {
350 $this->status = $critical_page['status'];
351 } else {
352 $this->status = 'not_started';
353 }
354
355 if (isset($this->two_critical_pages[$id]['uncritical_css']) && !empty($this->two_critical_pages[$id]['uncritical_css'])) {
356 $this->uncritical_css = $this->two_critical_pages[$id]['uncritical_css'];
357 }
358
359 if (isset($this->two_critical_pages[$id]['critical_bg']) && !empty($this->two_critical_pages[$id]['critical_bg'])) {
360 $this->critical_bg = $this->two_critical_pages[$id]['critical_bg'];
361 }
362
363 if (isset($this->two_critical_pages[$id]['images_in_viewport']) && !empty($this->two_critical_pages[$id]['images_in_viewport'])) {
364 if (file_exists(TWO_CACHE_DIR . 'critical/' . $this->two_critical_pages[$id]['images_in_viewport'])) {
365 $this->images_in_viewport = json_decode(file_get_contents(TWO_CACHE_DIR . 'critical/' . $this->two_critical_pages[$id]['images_in_viewport']));
366 }
367 }
368
369 if (isset($this->two_critical_pages[$id]['critical_fonts']) && !empty($this->two_critical_pages[$id]['critical_fonts'])) {
370 if (file_exists(TWO_CACHE_DIR . 'critical/' . $this->two_critical_pages[$id]['critical_fonts'])) {
371 $this->critical_fonts = json_decode(file_get_contents(TWO_CACHE_DIR . 'critical/' . $this->two_critical_pages[$id]['critical_fonts']));
372 }
373 }
374
375 if (isset($this->two_critical_pages[$id]['use_uncritical']) && $this->two_critical_pages[$id]['use_uncritical'] == 'true') {
376 $this->use_uncritical = true;
377 }
378 }
379 }
380
381 /**
382 * Generate Critical CSS for a single post.
383 */
384 public static function generate_critical_css_by_id($post_id, $rightAfterConnect = false, $initiator = '')
385 {
386 $tenweb_subscription_id = \TenWebWpTransients\OptimizerTransients::get(TENWEB_PREFIX . '_subscription_id');
387 $is_free = (in_array((int) $tenweb_subscription_id, TENWEB_SO_FREE_SUBSCRIPTION_IDS) && !TENWEB_SO_HOSTED_ON_10WEB);
388 global $TwoSettings;
389
390 if ($TwoSettings->get_settings('two_critical_status') === 'true' || $is_free) {
391 $post_data = OptimizerUtils::get_permalink_name_by_id($post_id);
392 $post_url = $post_data[ 'url' ];
393 $post_title = $post_data[ 'title' ];
394
395 $waitUntil = 'load';
396 $load_type = 'load_type';
397 $use_uncritical = 'off';
398 $two_critical_default_settings = get_option('two_critical_default_settings');
399
400 if (isset($two_critical_default_settings['wait_until'])) {
401 $waitUntil = $two_critical_default_settings['wait_until'];
402 }
403
404 if (isset($two_critical_default_settings['load_type'])) {
405 $load_type = $two_critical_default_settings['load_type'];
406 }
407
408 if (isset($two_critical_default_settings['use_uncritical'])) {
409 $use_uncritical = $two_critical_default_settings['use_uncritical'];
410 }
411 $page_sizes = OptimizerUtils::get_critical_default_sizes($two_critical_default_settings);
412
413 $data = [
414 'action' => 'two_critical',
415 'two_critical_sizes' => $TwoSettings->get_settings('two_critical_sizes'),
416 'data' => [
417 'page_url' => $post_url,
418 'page_id' => $post_id,
419 'newly_connected_website' => $rightAfterConnect,
420 'page_sizes' => $page_sizes,
421 'wait_until' => $waitUntil,
422 'url_query' => $TwoSettings->get_settings('two_critical_url_args'),
423 'task' => 'generate',
424 'initiator' => $initiator,
425 'clear_cache' => true
426 ],
427 ];
428 $two_critical_pages = [];
429 $two_critical_pages[$post_id] = [
430 'title' => $post_title,
431 'url' => $post_url,
432 'id' => $post_id,
433 'sizes' => $page_sizes,
434 'load_type' => $load_type,
435 'wait_until' => $waitUntil,
436 'use_uncritical' => $use_uncritical,
437 'status' => 'in_progress'
438 ];
439 $data['two_critical_pages'] = $two_critical_pages;
440 $response = self::generateCriticalCSS($data);
441 }
442 }
443
444 public static function generateCriticalCSS($data)
445 {
446 do_action('two_before_generate_critical_css', debug_backtrace()); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
447 global $TwoSettings;
448 $return_data = [
449 'success' => false,
450 ];
451 $two_critical_pages = OptimizerUtils::getCriticalPages();
452 OptimizerUtils::init_defines();
453
454 if (!defined('TWO_CACHE_DIR')) {
455 define('TWO_CACHE_DIR', OptimizerCache::get_path());
456 }
457
458 if (isset($data['two_critical_pages']) && is_array($data['two_critical_pages'])) {
459 foreach ($data['two_critical_pages'] as $key => $critical_page_data) {
460 if (isset($two_critical_pages[$key])) {
461 if (isset($two_critical_pages[$key]['critical_css'])) {
462 $data['two_critical_pages'][$key]['critical_css'] = $two_critical_pages[$key]['critical_css'];
463 }
464
465 if (isset($two_critical_pages[$key]['uncritical_css'])) {
466 $data['two_critical_pages'][$key]['uncritical_css'] = $two_critical_pages[$key]['uncritical_css'];
467 }
468
469 if (isset($two_critical_pages[$key]['critical_fonts'])) {
470 $data['two_critical_pages'][$key]['critical_fonts'] = $two_critical_pages[$key]['critical_fonts'];
471 }
472
473 if (isset($two_critical_pages[$key]['critical_bg'])) {
474 $data['two_critical_pages'][$key]['critical_bg'] = $two_critical_pages[$key]['critical_bg'];
475 }
476 }
477 }
478
479 // Restore front_page when regenerating criticals for other pages.
480 foreach ($two_critical_pages as $key => $critical_page_data) {
481 if (!isset($data[ 'two_critical_pages' ][ $key ]) && OptimizerUrl::isCriticalSavedInSettings($key)) {
482 $data[ 'two_critical_pages' ][ $key ] = $critical_page_data;
483 }
484 }
485 $TwoSettings->update_setting('two_critical_pages', $data['two_critical_pages']);
486 }
487
488 if (isset($data['two_critical_sizes'])) {
489 $TwoSettings->update_setting('two_critical_sizes', $data['two_critical_sizes']);
490 }
491
492 if (isset($data['data']) && is_array($data['data']) && isset($data['data']['page_id']) && isset($data['data']['page_url']) && isset($data['data']['page_sizes'])) {
493 $critical_in_progress_key = 'two_critical_in_progress_' . $data['data']['page_id'];
494 \TenWebWpTransients\OptimizerTransients::set($critical_in_progress_key, '1', 30 * MINUTE_IN_SECONDS);
495 OptimizerCriticalCss::setCritical($data['data']);
496 $return_data['success'] = true;
497 }
498 //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace, PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.Changed
499 do_action('two_after_generate_critical_css', debug_backtrace());
500
501 return $return_data;
502 }
503
504 public static function createCriticalCSS($file_path, $firstImportOfCss = false, $file_content = '', $css_import_no_rest = false)
505 {
506 do_action('two_before_create_critical_css', debug_backtrace()); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
507 OptimizerUtils::init_defines();
508
509 if (!defined('TWO_CACHE_DIR')) {
510 define('TWO_CACHE_DIR', OptimizerCache::get_path());
511 }
512 global $TwoSettings;
513
514 if (!empty($file_content) || (file_exists($file_path) && is_readable($file_path))) {
515 try {
516 if (empty($file_content)) {
517 $critical_data_json = file_get_contents($file_path); // phpcs:ignore
518 } else {
519 $critical_data_json = $file_content;
520 }
521 $two_critical_pages = OptimizerUtils::getCriticalPages();
522
523 if (!empty($critical_data_json)) {
524 $critical_data = json_decode($critical_data_json, true);
525
526 if (isset($critical_data['page_data']['page_id'])) {
527 if (isset($critical_data['subscription_id']) && (int) $critical_data['subscription_id'] > 0) {
528 \TenWebWpTransients\OptimizerTransients::set(TENWEB_PREFIX . '_subscription_id', (int) $critical_data['subscription_id'], 12 * HOUR_IN_SECONDS);
529 }
530 $page_id = $critical_data['page_data']['page_id'];
531 $critical_key = 'two_critical_' . $page_id;
532 \TenWebWpTransients\OptimizerTransients::delete($critical_key);
533
534 if (isset($two_critical_pages[$page_id])) {
535 $critical_page = $two_critical_pages[$page_id];
536
537 if (isset($critical_data['critical_css']) && !empty($critical_data['critical_css'])) {
538 $cssMinifier = new OptimizerCSSMin();
539 $critical_css = $cssMinifier->run($critical_data['critical_css'], true);
540 $cache = new OptimizerCache($page_id, 'critical', 'all', 'critical');
541 $critical_page['critical_css'] = basename($cache->getname(true));
542 $cache->cache($critical_css, 'text/critical');
543 }
544
545 if (isset($critical_data['uncritical_css']) && !empty($critical_data['uncritical_css'])) {
546 $cssMinifier = new OptimizerCSSMin();
547 $uncritical_css = $cssMinifier->run($critical_data['uncritical_css'], true);
548 $cache = new OptimizerCache($page_id, 'critical', 'all', 'uncritical');
549 $critical_page['uncritical_css'] = basename($cache->getname(true));
550 $uncritical_css = "/* 10Web Booster Uncritical CSS */\n" . $critical_data['uncritical_css'];
551 $cache->cache($uncritical_css, 'text/critical');
552 }
553
554 if (isset($critical_data['critical_fonts'])) {
555 $critical_fonts = $critical_data['critical_fonts'];
556 $critical_fonts_json = json_encode($critical_fonts); // phpcs:ignore
557 $cache = new OptimizerCache($page_id, 'font', 'all', 'critical_font');
558 $critical_page['critical_fonts'] = basename($cache->getname(true));
559 $cache->cache($critical_fonts_json, 'text/json');
560 }
561
562 if (isset($critical_data['critical_bg'])) {
563 $critical_bg = $critical_data['critical_bg'];
564
565 // Regenerate missing image sizes.
566 foreach ($critical_bg as $bg) {
567 $id = OptimizerUtils::getImageIdByUrl($bg['bg_url']);
568
569 if ($id) {
570 $attachment = get_post($id);
571 OptimizerUtils::wp_maybe_generate_attachment_metadata($attachment);
572 }
573 }
574 $critical_bg_json = json_encode($critical_bg); // phpcs:ignore
575
576 $cache = new OptimizerCache($page_id, 'font', 'all', 'critical_bg');
577 $critical_page['critical_bg'] = basename($cache->getname(true));
578 $cache->cache($critical_bg_json, 'text/json');
579 }
580
581 if (isset($critical_data['images_in_viewport'])) {
582 $images_in_viewport = json_encode($critical_data['images_in_viewport']); // phpcs:ignore
583 $cache = new OptimizerCache($page_id, 'font', 'all', 'images_in_viewport');
584 $critical_page['images_in_viewport'] = basename($cache->getname(true));
585 $cache->cache($images_in_viewport, 'text/json');
586 }
587
588 if (!empty($critical_page['critical_css'])) {
589 $date = time();
590 delete_option('two_critical_blocked');
591 $critical_page['status'] = 'success';
592 $critical_page['critical_date'] = $date;
593 $two_critical_pages[$page_id] = $critical_page;
594 $TwoSettings->update_setting('two_critical_pages', $two_critical_pages);
595 $regenerate_data = \TenWebWpTransients\OptimizerTransients::get('two_regenerate_critical_data');
596
597 if (is_array($regenerate_data) && !empty($regenerate_data)) {
598 OptimizerUtils::regenerate_critical();
599 } else {
600 \TenWebOptimizer\OptimizerAdmin::clear_cache(false, true);
601
602 if ($page_id !== 'front_page') {
603 OptimizerUtils::update_post($page_id);
604 } else {
605 OptimizerUtils::update_post();
606 }
607 }
608 } else {
609 update_option('two_critical_blocked', true);
610 $critical_page['status'] = 'error';
611 $two_critical_pages[$page_id] = $critical_page;
612 $TwoSettings->update_setting('two_critical_pages', $two_critical_pages);
613 $regenerate_data = \TenWebWpTransients\OptimizerTransients::get('two_regenerate_critical_data');
614
615 if (is_array($regenerate_data) && !empty($regenerate_data)) {
616 OptimizerUtils::regenerate_critical();
617 }
618 }
619 }
620
621 if (has_action('two_page_optimized')) {
622 do_action('two_page_optimized', $page_id);
623 }
624
625 if ($page_id === 'front_page' && has_action('bwg_hompage_optimized')) {
626 do_action('bwg_hompage_optimized');
627 }
628 }
629 }
630 //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace,PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection
631 do_action('two_after_create_critical_css', debug_backtrace());
632
633 if (empty($file_content) && file_exists($file_path)) {
634 unlink($file_path); // phpcs:ignore
635 }
636 } catch (Exception $exception) {
637 update_option('two_critical_data_import_exception_' . time(), $exception->getMessage() . ' on ' . $exception->getLine() . ' in ' . $exception->getFile(), false);
638 }
639 }
640
641 if ($firstImportOfCss) {
642 if ($css_import_no_rest) {
643 OptimizerUtils::update_connection_flow_progress('running', 'css_import_no_rest');
644 }
645 update_option('two_triggerPostOptimizationTasks', '1', false);
646 // phpcs:ignore Squiz.PHP.CommentedOutCode.Found
647 //OptimizerUtils::triggerPostOptimizationTasks();
648 }
649 }
650 }
651