PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.18.6
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.18.6
1.19.8 1.19.7 1.19.6 1.19.5 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.12.0 1.13.0 1.14.0 1.15.0 1.15.1 1.15.2 1.15.3 1.16.0 1.16.1 1.16.2 1.16.3 1.16.4 1.16.5 1.16.6 1.16.7 1.16.8 1.17.0 1.17.6 1.17.7 1.17.8 1.17.9 1.18.0 1.18.1 1.18.2 1.18.3 1.18.4 1.18.5 1.18.6 1.18.7 1.18.8 1.18.9 1.19.0 1.19.1 1.19.2 1.19.3 1.19.4 1.3.19 1.3.20 1.4.0 1.4.1 1.5.0 1.5.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.16 1.5.17 1.5.18 1.5.19 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.8.0 1.8.1 1.8.3 1.9.0 1.9.1 1.9.2
nitropack / classes / WordPress / Settings / OptimizationLevel.php
nitropack / classes / WordPress / Settings Last commit date
CacheWarmup.php 7 months ago Components.php 1 year ago GeneratePreview.php 7 months ago Logger.php 7 months ago OptimizationLevel.php 7 months ago Shortcodes.php 1 year ago TestMode.php 10 months ago
OptimizationLevel.php
285 lines
1 <?php
2 namespace NitroPack\WordPress\Settings;
3
4 use NitroPack\HttpClient\HttpClient;
5
6 class OptimizationLevel {
7 private static $instance = NULL;
8 private $levels = [
9 1 => "standard",
10 2 => "medium",
11 3 => "strong",
12 4 => "ludicrous",
13 5 => "custom"
14 ];
15 public $level_name = '';
16 public function __construct() {
17 add_action( 'wp_ajax_nitropack_set_optimization_mode', [ $this, 'nitropack_set_optimization_mode' ] );
18 }
19 public static function getInstance() {
20 if ( null === self::$instance ) {
21 self::$instance = new self();
22 }
23 return self::$instance;
24 }
25 /* Ajax handler to set optimization mode. Use our HTTPClient to send data.
26 * @return void
27 */
28 public function nitropack_set_optimization_mode() {
29 nitropack_verify_ajax_nonce( $_REQUEST );
30
31 $mode_name = ! empty( $_POST["mode_name"] ) ? sanitize_text_field( $_POST["mode_name"] ) : null;
32
33 $quickSetupSave = get_nitropack_integration_url( "optimization_preset" );
34 $quickSetupHTTP = new HttpClient( $quickSetupSave );
35 $quickSetupHTTP->setHeader( "Content-Type", "application/x-www-form-urlencoded" );
36 $quickSetupHTTP->setPostData( "optimization_preset=" . $mode_name );
37 $quickSetupHTTP->fetch( true, "POST" );
38 switch ( $quickSetupHTTP->getStatusCode() ) {
39 case 200:
40 \NitroPack\WordPress\NitroPack::getInstance()->getLogger()->notice( '[Preview] Optimization mode set to: ' . $mode_name );
41 nitropack_json_and_exit( array( "type" => "success", "message" => nitropack_admin_toast_msgs( 'success' ), "mode" => $mode_name ) );
42 break;
43 case 400:
44 \NitroPack\WordPress\NitroPack::getInstance()->getLogger()->error( '[Preview] Tried to set optimization mode to: ' . $mode_name );
45 nitropack_json_and_exit( array( "type" => "error", 'message' => json_decode( $quickSetupHTTP->getBody(), true )['error_message'] ) );
46 break;
47 case 503:
48 \NitroPack\WordPress\NitroPack::getInstance()->getLogger()->error( '[Preview] Tried to set optimization mode to: ' . $mode_name );
49 nitropack_json_and_exit( array( "type" => "error", "message" => json_decode( $quickSetupHTTP->getBody(), true )['error_message'] ) );
50 break;
51 default:
52 \NitroPack\WordPress\NitroPack::getInstance()->getLogger()->error( '[Preview] Tried to set optimization mode to: ' . $mode_name );
53 nitropack_json_and_exit( array( "type" => "error", "message" => "An unexpected error occurred. Please try again later." ) );
54 break;
55 }
56 }
57 /**
58 * Fetch user plan from NitroPack App
59 * @return string Plan name - Free, etc.
60 */
61 public function fetch_plan() {
62 $planDetailsUrl = get_nitropack_integration_url( "plan_details_json" );
63 $quickSetupHTTP = new HttpClient( $planDetailsUrl );
64 $quickSetupHTTP->timeout = 30;
65 $quickSetupHTTP->fetch();
66 $resp = $quickSetupHTTP->getStatusCode() == 200 ? json_decode( $quickSetupHTTP->getBody(), true ) : false;
67 $plan = $resp && isset( $resp['plan_title'] ) ? $resp['plan_title'] : null;
68 return $plan;
69 }
70 /**
71 * Fetch optimization modes data from NitroPack App
72 * @return array
73 */
74 public function optimization_modes() {
75 $quickSetupUrl = get_nitropack_integration_url( "optimization_preset" );
76 $quickSetupHTTP = new HttpClient( $quickSetupUrl );
77
78 $quickSetupHTTP->timeout = 30;
79 $quickSetupHTTP->fetch();
80 $resp = $quickSetupHTTP->getStatusCode() == 200 ? json_decode( $quickSetupHTTP->getBody(), true ) : false;
81 $modes = null;
82 if ( $resp && ! empty( $resp['optimization_options'] ) ) {
83 $modes = $resp;
84 }
85 return $modes;
86 }
87 /**
88 * Fetch optimization name from NitroPack App
89 * @return array Optimization name (standard, medium, etc.)
90 */
91 public function fetch_optimization_name() {
92 if ( ! empty( $this->optimization_modes() ) ) {
93 $optimization_name = $this->optimization_modes()['optimization_selected'];
94 }
95
96 return $optimization_name;
97 }
98 /**
99 * Render optimization level setting HTML
100 */
101 public function render() {
102 $modes = $this->optimization_modes(); ?>
103 <div class="card card-optimization-mode">
104 <div class="card-header no-border mb-0">
105 <div class="flex items-center">
106 <h3 class="mb-0"><?php esc_html_e( 'Optimization mode', 'nitropack' ); ?></h3>
107 <span class="tooltip-icon" data-tooltip-target="tooltip-optimization">
108 <img src="<?php echo plugin_dir_url( NITROPACK_FILE ) . 'view/images/info.svg'; ?>">
109 </span>
110 <div id="tooltip-optimization" role="tooltip" class="tooltip-container hidden">
111 <?php esc_html_e( 'Select from our range of predefined optimization modes to boost your site\'s performance.', 'nitropack' );
112 ?>
113 <div class="tooltip-arrow" data-popper-arrow></div>
114 </div>
115 </div>
116 </div>
117 <?php ?>
118 <div class="tabs-wrapper">
119 <div class="tabs" id="optimization-modes">
120 <?php
121 $upgrade_msg = false;
122 $optimization_level_name = $modes['optimization_selected'];
123 foreach ( $modes['optimization_options'] as $mode_id => $mode ) :
124 $active = $optimization_level_name === $mode_id;
125 $css = [];
126 $css[] = $active ? 'active btn-primary' : 'btn-link';
127 $css[] = "mode-{$mode_id}";
128 if ( ! $mode['is_available'] ) {
129 $css[] = 'disabled';
130 }
131 if ( ! $mode['is_available'] && $mode_id === 'ludicrous' ) {
132 $upgrade_msg = true;
133 }
134 $css = implode( ' ', $css );
135 ?>
136 <a class="btn tab-link <?php echo $css; ?>" data-mode="<?php echo $mode_id; ?>"
137 data-modal-target="modal-optimization-mode"
138 data-modal-toggle="modal-optimization-mode"><?php echo $mode['human_readable_name']; ?>
139 <?php if ( ! $mode['is_available'] && $mode['human_readable_name'] === 'Ludicrous' ) { ?>
140 <img src="<?php echo plugin_dir_url( NITROPACK_FILE ) . 'view/images/lock.svg'; ?>" />
141 <?php } ?>
142 </a>
143 <?php endforeach; ?>
144 </div>
145
146 <?php if ( $upgrade_msg ) : ?>
147 <div class="upgrade-message bg-success">
148 <p class="">
149 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
150 <g clip-path="url(#clip0_1039_2988)">
151 <path
152 d="M10 18.3334C14.6024 18.3334 18.3333 14.6024 18.3333 10C18.3333 5.39765 14.6024 1.66669 10 1.66669C5.39763 1.66669 1.66667 5.39765 1.66667 10C1.66667 14.6024 5.39763 18.3334 10 18.3334Z"
153 stroke="#33D2B5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
154 <path d="M13.3333 10L10 6.66669L6.66667 10" stroke="#33D2B5" stroke-width="1.5"
155 stroke-linecap="round" stroke-linejoin="round" />
156 <path d="M10 13.3334V6.66669" stroke="#33D2B5" stroke-width="1.5" stroke-linecap="round"
157 stroke-linejoin="round" />
158 </g>
159 <defs>
160 <clipPath id="clip0_1039_2988">
161 <rect width="20" height="20" fill="white" />
162 </clipPath>
163 </defs>
164 </svg>
165 <?php _e( 'Ludicrous mode available on <b>Starter</b> Plan.', 'nitropack' ); ?> <a
166 href="https://app.nitropack.io/subscription/buy" class="upgrade-here"
167 target="_blank"><?php esc_html_e( 'Upgrade here', 'nitropack' ); ?></a>
168 </p>
169 </div>
170 <?php endif; ?>
171
172 <p><?php esc_html_e( 'Active Mode', 'nitropack' ); ?>: <span
173 class="active-mode"><?php echo esc_html( $optimization_level_name ); ?></span></p>
174
175 <div class="tab-content-wrapper">
176 <?php foreach ( $modes['optimization_options'] as $mode_id => $mode ) :
177 $active = ( $optimization_level_name === $mode_id ? true : false );
178 $css = [];
179 $css[] = ( $active ? '' : 'hidden' );
180 $css = implode( ' ', array_filter( $css ) );
181 ?>
182 <div class="tab-content <?php echo esc_attr( $css ); ?>" role="tabpanel"
183 data-tab="<?php echo $mode_id; ?>-tab">
184 <p class="text-secondary mt-2">
185 <?php esc_html_e( $mode['description'], 'nitropack' ); ?>
186 </p>
187 </div>
188 <?php endforeach; ?>
189
190 <div class="hidden tab-content" role="tabpanel" data-tab="custom-tab">
191 <p class="text-secondary mt-2">
192 <?php esc_html_e( 'Activated when manual setups are made. Ideal for advanced NitroPack optimizations.', 'nitropack' ); ?>
193 </p>
194 </div>
195 </div>
196 </div>
197 <div class="card-footer">
198 <div class="flex flex-row">
199 <p class=""><?php esc_html_e( 'Which optimization mode to choose?', 'nitropack' ); ?></p>
200 <a class="text-primary btn-link ml-auto see-modes" data-modal-target="modes-modal"
201 data-modal-toggle="modes-modal"><?php esc_html_e( 'See modes comparison', 'nitropack' ); ?></a>
202 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-modes.php'; ?>
203 </div>
204 </div>
205 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-optimization-mode.php'; ?>
206 </div>
207 <?php }
208 public function preview_render() {
209 $optimization_modes = $this->optimization_modes();
210 unset( $optimization_modes['optimization_options']['custom'] );
211 ?>
212 <div class="optimization-modes">
213 <div class="flex flex-row">
214 <h2><?php esc_html_e( 'Optimization modes', 'nitropack' ); ?></h2>
215 <a class="text-primary btn-link ml-auto see-modes" data-modal-target="modes-modal"
216 data-modal-toggle="modes-modal"><?php esc_html_e( 'See modes comparison', 'nitropack' ); ?></a>
217 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-modes.php'; ?>
218 </div>
219 <div class="modes-container">
220 <?php $chevrons = 1;
221 $active_mode_name = $optimization_modes['optimization_selected'];
222 foreach ( $optimization_modes['optimization_options'] as $key => $mode ) :
223 $active = ( $active_mode_name === $key ? true : false );
224 $css = [];
225 $css[] = $active ? 'active' : '';
226 $css[] = "mode-{$key}";
227 $css = implode( ' ', $css );
228 ?>
229 <div class="mode <?php echo $css; ?>" data-mode="<?php echo esc_attr( $key ); ?>">
230 <div class="header-text">
231 <div class="mode-header">
232 <div class="chevron-wrapper">
233 <?php if ( $mode['human_readable_name'] === 'Ludicrous' ) : ?>
234 <svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
235 <path
236 d="M9.63151 2.12634L2.96484 10.1263H8.96484L8.29818 15.4597L14.9648 7.45968H8.96484L9.63151 2.12634Z"
237 stroke="#776795" stroke-linecap="round" stroke-linejoin="round" />
238 </svg>
239 <?php else :
240 for ( $i = 0; $i < $chevrons; $i++ ) : ?>
241 <svg xmlns="http://www.w3.org/2000/svg" width="10" height="6" viewBox="0 0 10 6" fill="none">
242 <path d="M9.29688 4.79297L5.29688 0.792969L1.29688 4.79297" stroke="#776795"
243 stroke-linecap="round" stroke-linejoin="round" />
244 </svg>
245 <?php endfor;
246 endif; ?>
247 </div>
248 <h3><?php esc_html_e( $mode['human_readable_name'], 'nitropack' ); ?></h3>
249 <?php if ( ! $mode['is_available'] && $mode['human_readable_name'] === 'Ludicrous' ) : ?>
250 <div class="ml-auto">
251 <?php echo '<span class="badge badge-success">' . esc_html__( 'Available on Starter', 'nitropack' ) . '</span>' ?>
252 </div>
253 <?php endif; ?>
254 </div>
255 <p><?php esc_html_e( $mode['description_onboarding'], 'nitropack' ); ?></p>
256 </div>
257 <?php if ( $active ) : ?>
258
259 <a class="btn btn-secondary select-mode selected">
260 <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="12" height="9" viewBox="0 0 12 9"
261 fill="none">
262 <path d="M11.4674 0.792969L4.13411 8.1263L0.800781 4.79297" stroke="#4600CC" stroke-linecap="round"
263 stroke-linejoin="round" />
264 </svg><?php esc_html_e( 'Active Mode', 'nitropack' ); ?></a>
265 <?php else :
266 if ( ! $mode['is_available'] ) {
267 ?>
268 <a class="btn btn-secondary text-center <?php echo esc_attr( $css ); ?>"
269 href="https://app.nitropack.io/subscription/buy" target="_blank"><img
270 src="<?php echo plugin_dir_url( NITROPACK_FILE ) . 'view/images/lock.svg'; ?>" />
271 <?php esc_html_e( 'Upgrade plan', 'nitropack' ); ?></a>
272 <?php } else { ?>
273 <a
274 class="btn btn-secondary select-mode <?php echo esc_attr( $css ); ?>"><?php esc_html_e( 'Select Mode', 'nitropack' ); ?></a>
275 <?php }
276 endif; ?>
277 </div>
278 <?php
279 $chevrons++;
280 endforeach; ?>
281
282 </div>
283 </div>
284 <?php }
285 }