PluginProbe
Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization / 4.2.16
Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization v4.2.16
4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 2.5.5 2.5.6 2.5.7 3.0.0 3.0.1 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.11.0 3.11.1 3.11.2 All 137 releases
optimole-wp / inc / main.php

main.php in Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization 4.2.16, at inc/main.php

318 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Main Plugin Class
5 */
6 final class Optml_Main {
7 /**
8 * Optml_Main The single instance of Starter_Plugin.
9 *
10 * @var Optml_Main|null
11 * @access private
12 * @since 1.0.0
13 */
14 private static $_instance = null;
15
16
17 /**
18 * Holds the manager class.
19 *
20 * @access public
21 * @since 1.0.0
22 * @var Optml_Manager Manager instance.
23 */
24 public $manager;
25
26 /**
27 * Holds the media_offload class.
28 *
29 * @access public
30 * @since 1.0.0
31 * @var Optml_Media_Offload instance.
32 */
33 public $media_offload;
34
35 /**
36 * Holds the rest class.
37 *
38 * @access public
39 * @since 1.0.0
40 * @var Optml_Rest REST instance.
41 */
42 public $rest;
43
44 /**
45 * Holds the admin class.
46 *
47 * @access public
48 * @since 1.0.0
49 * @var Optml_Admin Admin instance.
50 */
51 public $admin;
52
53 /**
54 * Holds the Dam class.
55 *
56 * @access public
57 * @since 4.0
58 * @var Optml_Dam Dam instance.
59 */
60 public $dam;
61
62 /**
63 * Holds the cli class.
64 *
65 * @access public
66 * @since 1.0.0
67 * @var Optml_Cli Cli instance.
68 */
69 public $cli;
70
71 /**
72 * Holds the video player class.
73 *
74 * @access public
75 * @since 1.0.0
76 * @var Optml_Video_Player Video player instance.
77 */
78 public $video_player;
79 /**
80 * Optml_Main constructor.
81 */
82 public function __construct() {
83 register_activation_hook( OPTML_BASEFILE, [ $this, 'activate' ] );
84 register_deactivation_hook( OPTML_BASEFILE, [ $this, 'deactivate' ] );
85 }
86
87 /**
88 * Main Starter_Plugin Instance
89 *
90 * Ensures only one instance of Starter_Plugin is loaded or can be loaded.
91 *
92 * @return Optml_Main Plugin instance.
93 * @since 1.0.0
94 */
95 public static function instance() {
96 $vendor_file = OPTML_PATH . 'vendor/autoload.php';
97 if ( is_readable( $vendor_file ) ) {
98 include_once $vendor_file;
99 }
100
101 if ( null === self::$_instance ) {
102 add_filter( 'themeisle_sdk_products', [ __CLASS__, 'register_sdk' ] );
103 add_filter( 'themeisle_sdk_ran_promos', [ __CLASS__, 'sdk_hide_promo_notice' ] );
104 add_filter( 'optimole-wp_uninstall_feedback_icon', [ __CLASS__, 'change_icon' ] );
105 add_filter( 'optimole_wp_uninstall_feedback_after_css', [ __CLASS__, 'adds_uf_css' ] );
106 add_filter( 'optimole_wp_feedback_review_message', [ __CLASS__, 'change_review_message' ] );
107 add_filter( 'optimole_wp_logger_heading', [ __CLASS__, 'change_review_message' ] );
108 add_filter( 'optml_register_conflicts', [ __CLASS__, 'register_conflicts' ] );
109 add_filter( 'optimole_wp_logger_data', [ __CLASS__, 'add_settings' ] );
110 add_filter( 'optimole_wp_ai_connect_metadata', [ __CLASS__, 'add_ai_connect_metadata' ] );
111 self::$_instance = new self();
112 self::$_instance->manager = Optml_Manager::instance();
113 self::$_instance->rest = new Optml_Rest();
114 self::$_instance->admin = new Optml_Admin();
115 self::$_instance->dam = new Optml_Dam();
116 self::$_instance->media_offload = Optml_Media_Offload::instance();
117 self::$_instance->video_player = new Optml_Video_Player();
118 new Optml_Abilities();
119 if ( class_exists( 'WP_CLI' ) ) {
120 self::$_instance->cli = new Optml_Cli();
121 }
122 }
123
124 return self::$_instance;
125 }
126
127 /**
128 * Register Conflicts to watch for
129 *
130 * @param array $conflicts_to_register A list of class names of conflicts to register.
131 *
132 * @return array
133 * @since 2.0.6
134 * @access public
135 */
136 public static function register_conflicts( $conflicts_to_register = [] ) {
137 $conflicts_to_register = array_merge(
138 $conflicts_to_register,
139 [
140 'Optml_Jetpack_Photon',
141 'Optml_Wprocket',
142 'Optml_Divi',
143 'Optml_w3_total_cache_cdn',
144 'Optml_Smush',
145 'Optml_Litespeed',
146 'Optml_Autoptimize',
147 'Optml_Perfmatters',
148 ]
149 );
150
151 return $conflicts_to_register;
152 }
153
154 /**
155 * Add settings to the logger data.
156 *
157 * @param array $data Logger data.
158 *
159 * @return array
160 */
161 public static function add_settings( $data ): array {
162 $data = is_array( $data ) ? $data : [];
163
164 $saved_data = ( new Optml_Settings() )->get_raw_settings();
165 unset( $saved_data['service_data'] );
166 unset( $saved_data['api_key'] );
167
168 return array_merge( $data, $saved_data );
169 }
170 /**
171 * Change review message.
172 *
173 * @param string $message Old review message.
174 *
175 * @return string New review message.
176 */
177 public static function change_review_message( $message ) {
178 return str_replace( '{product}', 'Optimole', $message );
179 }
180
181 /**
182 * Opt in to the SDK AI Connect module.
183 *
184 * @return array<string, mixed> AI Connect metadata.
185 */
186 public static function add_ai_connect_metadata() {
187 return [
188 'name' => 'Optimole',
189 'notice_cases' => [
190 __( 'make your images load faster', 'optimole-wp' ),
191 __( 'purge cached images', 'optimole-wp' ),
192 __( 'offload media to the cloud', 'optimole-wp' ),
193 ],
194 'prompts' => [
195 __( 'Make my images load faster: turn on lazy loading and serve them at quality 80.', 'optimole-wp' ),
196 __( 'Offload my media library to the Optimole cloud to free up disk space.', 'optimole-wp' ),
197 __( 'I changed my logo. Purge the cached versions so visitors get the new one.', 'optimole-wp' ),
198 ],
199 'ability_prefix' => 'optimole',
200 ];
201 }
202
203 /**
204 * Register product into SDK.
205 *
206 * @param array $products All products.
207 *
208 * @return array Registered product.
209 */
210 public static function register_sdk( $products ) {
211 $products[] = OPTML_BASEFILE;
212
213 return $products;
214 }
215
216 /**
217 * Adds aditional CSS for uninstall feedback popup.
218 */
219 public static function adds_uf_css() {
220 ?>
221 <style type="text/css">
222 body.plugins-php .optimole_wp-container #TB_title {
223 background-position: 30px 10px;
224 background-size: 80px;
225 }
226
227 body.plugins-php .optimole_wp-container input.button:hover,
228 body.plugins-php .optimole_wp-container input.button {
229 background: #5080C1;
230 }
231 </style>
232 <?php
233 }
234
235 /**
236 * Change icon for uninstall feedback.
237 *
238 * @return string Registered product.
239 */
240 public static function change_icon( $old_icon ) {
241
242 return OPTML_URL . 'assets/img/logo.png';
243 }
244
245 /**
246 * Load the localisation file.
247 *
248 * @access public
249 * @since 1.0.0
250 */
251 public function load_plugin_textdomain() {
252 load_plugin_textdomain( 'optimole-wp', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
253 }
254
255 /**
256 * Install routine actions.
257 *
258 * @access public
259 * @since 1.0.0
260 */
261 public function activate() {
262 update_option( OPTML_NAMESPACE . '-version', OPTML_VERSION );
263
264 if ( is_multisite() ) {
265 return;
266 }
267
268 set_transient( 'optml_fresh_install', true, MINUTE_IN_SECONDS );
269 }
270
271 /**
272 * Deactivate routine actions.
273 *
274 * @access public
275 * @since 3.11.0
276 */
277 public function deactivate() {
278 // Clear registered cron events.
279 wp_clear_scheduled_hook( 'optml_daily_sync' );
280 wp_clear_scheduled_hook( 'optml_pull_image_data_init' );
281 }
282
283 /**
284 * Cloning is forbidden.
285 *
286 * @access public
287 * @since 1.0.0
288 */
289 public function __clone() {
290 _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'optimole-wp' ), '1.0.0' );
291 }
292
293 /**
294 * Unserializing instances of this class is forbidden.
295 *
296 * @access public
297 * @since 1.0.0
298 */
299 public function __wakeup() {
300 _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'optimole-wp' ), '1.0.0' );
301 }
302
303 /**
304 * Hide SDK promo notice for pro uses.
305 *
306 * @access public
307 */
308 public static function sdk_hide_promo_notice( $should_show ) {
309 if ( self::$_instance->admin->settings->is_connected() ) {
310 $service_data = self::$_instance->admin->settings->get( 'service_data' );
311 if ( isset( $service_data['plan'] ) && 'free' !== $service_data['plan'] ) {
312 return true;
313 }
314 }
315 return $should_show;
316 }
317 }
318