lugin', TENWEB_SO_URL . '/assets/js/gutenberg/sidebar-plugin-compiled.js', [ 'wp-plugins', 'wp-edit-post' ], TENWEB_SO_VERSION); wp_localize_script('two-sidebar-plugin', 'two_speed', [ 'nonce' => wp_create_nonce('two_ajax_nonce'), 'ajax_url' => admin_url('admin-ajax.php'), 'optimize_entire_website' => self::two_reached_limit(), 'critical_pages' => \TenWebOptimizer\OptimizerUtils::getCriticalPages(), ]); wp_enqueue_style('two_speed_css', TENWEB_SO_URL . '/assets/css/speed.css', ['two-open-sans'], TENWEB_SO_VERSION); } } public function two_add_column_to_posts($columns) { if (\TenWebOptimizer\OptimizerUtils::is_paid_user()) { return $columns; } $offset = array_search('author', array_keys($columns)); return array_merge(array_slice($columns, 0, $offset), [ 'two-speed' => '' . TWO_SO_ORGANIZATION_NAME . ' Booster' . '' ], array_slice($columns, $offset, null)); } public function two_nps_cron_schedule($schedules) { $schedules['every_six_hours'] = [ 'interval' => 21600, // Every 6 hours 'display' => __('Every 6 hours'), ]; return $schedules; } public function two_check_nps_data() { \TenWebOptimizer\OptimizerNPS::update_nps_survey_data(); } public function two_admin_banners() { $banners = new \TenWebOptimizer\OptimizerBanner(); $banners->printBanners(); } public function two_page_optimized($post_id) { \TenWebSC\TWScoreChecker::twsc_check_score($post_id); if ($post_id == 'front_page') { $post_id = url_to_postid(get_home_url()); // phpcs:ignore } \TenWebWpTransients\OptimizerTransients::delete('two_optimize_inprogress_' . $post_id); /* Keeping all posts statuses which is optimized and notif popup view is not shown yet */ $two_optimization_notif_status = get_option('two_optimization_notif_status'); $two_optimization_notif_status[$post_id] = 'optimized_not_closed'; update_option('two_optimization_notif_status', $two_optimization_notif_status, 1); } public function two_page_optimized_removed($post_id) { if ($post_id == 'front_page') { delete_option('two-front-page-speed'); // If front page is a page and has ID, check and save the score also as post meta. $post_id = url_to_postid(get_home_url()); // phpcs:ignore if ($post_id) { delete_post_meta($post_id, 'two_page_speed'); } } else { delete_post_meta($post_id, 'two_page_speed'); } \TenWebWpTransients\OptimizerTransients::delete('two_optimize_inprogress_' . $post_id); } public function two_optimized_notif_closed() { $nonce = isset($_POST['nonce']) ? sanitize_text_field($_POST['nonce']) : ''; if (!wp_verify_nonce($nonce, 'two_ajax_nonce') || !OptimizerUtils::check_admin_capabilities()) { die('Permission Denied.'); } $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0; /* Keeping all posts statuses which is in progress or optimized to manage notif popup view one time for each case */ $two_optimization_notif_status = get_option('two_optimization_notif_status'); unset($two_optimization_notif_status[$post_id]); update_option('two_optimization_notif_status', $two_optimization_notif_status, 1); wp_send_json_success(['status' => 'success']); } public function two_is_page_optimized() { $nonce = isset($_POST['nonce']) ? sanitize_text_field($_POST['nonce']) : ''; if (!wp_verify_nonce($nonce, 'two_ajax_nonce') || !OptimizerUtils::check_admin_capabilities()) { die('Permission Denied.'); } $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0; $page_score = get_post_meta($post_id, 'two_page_speed', true); if (!\TenWebWpTransients\OptimizerTransients::get('two_optimize_inprogress_' . $post_id) && !empty($page_score)) { wp_send_json_success($page_score); } wp_send_json_error(['status' => 'pending']); } public function two_recount_score() { $nonce = isset($_POST['nonce']) ? sanitize_text_field($_POST['nonce']) : ''; if (!wp_verify_nonce($nonce, 'two_ajax_nonce') || !OptimizerUtils::check_admin_capabilities()) { die('Permission Denied.'); } $post_id = isset($_POST['post_id']) ? sanitize_text_field($_POST['post_id']) : 0; $reanalyze_score_for = isset($_POST['reanalyze_score_for']) ? sanitize_text_field($_POST['reanalyze_score_for']) : ''; $page_score = \TenWebSC\TWScoreChecker::twsc_recount_score($post_id, $reanalyze_score_for); wp_send_json_success($page_score); } /* Get page score info for js */ public function two_get_page_score() { $nonce = isset($_POST['nonce']) ? sanitize_text_field($_POST['nonce']) : ''; if (!wp_verify_nonce($nonce, 'two_ajax_nonce') || ! OptimizerUtils::check_admin_capabilities()) { die('Permission Denied.'); } $post_id = isset($_POST['post_id']) ? sanitize_text_field($_POST['post_id']) : 0; if ($post_id == 'front_page' || $post_id == get_option('page_on_front')) { $page_score = get_option('two-front-page-speed'); } else { $page_score = get_post_meta($post_id, 'two_page_speed', true); } wp_send_json_success($page_score); } /* Get website images total count and optimized images count from endpoint */ public function two_get_optimized_images() { $nonce = isset($_POST['nonce']) ? sanitize_text_field($_POST['nonce']) : ''; if (!wp_verify_nonce($nonce, 'two_ajax_nonce') || !OptimizerUtils::check_admin_capabilities()) { die('Permission Denied.'); } $two_images_count = \TenWebWpTransients\OptimizerTransients::get('two_images_count'); if (!empty($two_images_count)) { return; } $workspace_id = (int) get_site_option(TENWEBIO_MANAGER_PREFIX . '_workspace_id', 0); $domain_id = (int) get_option(TENWEBIO_MANAGER_PREFIX . '_domain_id', 0); $access_token = get_site_option('tenweb_access_token'); $url = TENWEBIO_API_URL . '/compress/workspaces/' . $workspace_id . '/domains/' . $domain_id . '/stat'; $args = [ 'timeout' => 15, // phpcs:ignore 'headers' => [ 'accept' => 'application/x.10weboptimizer.v3+json', 'authorization' => 'Bearer ' . $access_token, ], ]; $response = wp_remote_get($url, $args); // phpcs:ignore $images_data = []; if (!is_wp_error($response) && is_array($response)) { $body = json_decode($response['body'], 1); if (isset($body['status']) && $body['status'] == 200) { $data = $body['data']; $total_not_compressed_images_count = (int) ($data['not_compressed']['full'] + $data['not_compressed']['thumbs'] + $data['not_compressed']['other']); $total_compressed_images_count = (int) ($data['compressed']['full'] + $data['compressed']['thumbs'] + $data['compressed']['other']); $total_images_count = (int) ($total_not_compressed_images_count + $total_compressed_images_count); $pages_compressed = $data['pages_compressed']; $count = 0; foreach ($pages_compressed as $page) { $count += $page['images_count']; } $images_data = ['total_images_count' => (int) $total_images_count, 'optimized_images_count' => (int) $count]; \TenWebWpTransients\OptimizerTransients::set('two_images_count', $images_data, DAY_IN_SECONDS); } } else { $images_data = ['total_images_count' => 0, 'optimized_images_count' => 0]; \TenWebWpTransients\OptimizerTransients::set('two_images_count', $images_data, DAY_IN_SECONDS); } wp_send_json_success($images_data); } // Check if optimized pages limit reached. public static function two_reached_limit() { if (!\TenWebOptimizer\OptimizerUtils::is_paid_user() && count(\TenWebOptimizer\OptimizerUtils::getCriticalPages()) >= 6) { $domain_id = intval(get_option(TENWEBIO_MANAGER_PREFIX . '_domain_id', 0)); return TENWEB_DASHBOARD . '/websites/' . $domain_id . '/booster/pro'; } return false; } public function two_enqueue_editor_scripts() { wp_enqueue_script( 'two-elementor-editor-scripts', TENWEB_SO_URL . '/assets/js/two_elementor_editor.js', ['jquery'], TENWEB_SO_VERSION ); wp_localize_script('two-elementor-editor-scripts', 'two_elementor_vars', [ 'nonce' => wp_create_nonce('two_elementor_regenerate_ccss'), 'ajax_url' => admin_url('admin-ajax.php') ]); } public function maybeRegenerateCCSS($et_option_name, $et_option_new_value) { //set old divi_custom_css //divi_custom_css option is not set as other settings $oldCustomCSS = get_option('et_divi')['divi_custom_css']; add_option(TW_OPTIMIZE_PREFIX . '_old_divi_custom_css', $oldCustomCSS, false); $old_value = et_get_option($et_option_name, []); $diviOptionNames = [ 'divi_dynamic_css', 'divi_critical_css', 'divi_critical_threshold_height', 'divi_dynamic_js_libraries', ]; if (in_array($et_option_name, $diviOptionNames) && $et_option_new_value !== $old_value && !get_option(TW_OPTIMIZE_PREFIX . '_clear_cache_after_divi')) { //clear cache right here is causing issues with divi update_option(TW_OPTIMIZE_PREFIX . '_clear_cache_after_divi', 1, false); } } }