PluginProbe
Image Optimizer – Compress Images and Convert to WebP or AVIF / 1.6.5
Image Optimizer – Compress Images and Convert to WebP or AVIF v1.6.5
1.7.7 1.7.6 1.7.5 1.7.4 trunk 1.0.0 1.0.1 1.0.2 1.1.0 1.2.0 1.2.1 1.3.0 1.4.0 1.4.1 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 All 33 releases
image-optimization / trunk / modules / core / module.php

module.php in Image Optimizer – Compress Images and Convert to WebP or AVIF 1.6.5, at trunk/modules/core/module.php

290 lines 8.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace ImageOptimization\Modules\Core;
3
4 use ImageOptimization\Modules\Optimization\{
5 Rest\Cancel_Bulk_Optimization,
6 Rest\Optimize_Bulk,
7 };
8 use ImageOptimization\Modules\Backups\Rest\{
9 Restore_All,
10 Remove_Backups,
11 };
12 use ImageOptimization\Classes\{
13 Migration\Migration_Manager,
14 Module_Base,
15 Utils
16 };
17
18 use ImageOptimization\Plugin;
19
20 if ( ! defined( 'ABSPATH' ) ) {
21 exit; // Exit if accessed directly.
22 }
23
24 class Module extends Module_Base {
25 public function get_name(): string {
26 return 'core';
27 }
28
29 public static function component_list() : array {
30 return [
31 'Pointers',
32 'Migrations',
33 'Conflicts',
34 'User_Feedback',
35 'Not_Connected',
36 'Not_Connected_Modal',
37 'Renewal_Notice',
38 ];
39 }
40
41 private function render_top_bar() {
42 ?>
43 <div id="image-optimization-top-bar"></div>
44 <?php
45 }
46
47 private function render_app() {
48 ?>
49 <div class="clear"></div>
50 <div id="image-optimization-app"></div>
51 <?php
52 }
53
54 public function maybe_add_quota_reached_notice() {
55
56 // @var ImageOptimizer/Modules/ConnectManager/Module
57 $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
58
59 if ( ! $module->connect_instance->get_connect_status() || $module->connect_instance->images_left() > 0 ) {
60 return;
61 }
62
63 ?>
64 <div class="notice notice-warning notice image-optimizer__notice image-optimizer__notice--warning">
65 <p>
66 <b>
67 <?php esc_html_e(
68 'You’ve reached your plan quota.',
69 'image-optimization'
70 ); ?>
71 </b>
72
73 <span>
74 <?php esc_html_e(
75 'You have no images left to optimize in your current plan.',
76 'image-optimization'
77 ); ?>
78
79 <a href="https://go.elementor.com/io-quota-upgrade/">
80 <?php esc_html_e(
81 'Upgrade plan now',
82 'image-optimization'
83 ); ?>
84 </a>
85 </span>
86 </p>
87 </div>
88 <?php
89 }
90
91 public function maybe_add_url_mismatch_notice() {
92 // @var ImageOptimizer/Modules/ConnectManager/Module
93 $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
94
95 if ( $module->connect_instance->is_valid_home_url() ) {
96 return;
97 }
98
99 ?>
100 <div class="notice notice-error notice image-optimizer__notice image-optimizer__notice--error">
101 <p>
102 <b>
103 <?php esc_html_e(
104 'Your license key does not match your current domain, causing a mismatch.',
105 'image-optimization'
106 ); ?>
107 </b>
108
109 <span>
110 <?php esc_html_e(
111 'This is most likely due to a change in the domain URL of your site (including HTTP/SSL migration).',
112 'image-optimization'
113 ); ?>
114
115 <button type="button" onclick="document.dispatchEvent( new Event( 'image-optimizer/auth/url-mismatch-modal/open' ) );">
116 <?php esc_html_e(
117 'Fix mismatched URL',
118 'image-optimization'
119 ); ?>
120 </button>
121 </span>
122 </p>
123 </div>
124 <?php
125 }
126
127 public function add_plugin_links( $links, $plugin_file_name ): array {
128 if ( ! str_ends_with( $plugin_file_name, '/image-optimization.php' ) ) {
129 return (array) $links;
130 }
131
132 $custom_links = [
133 'settings' => sprintf(
134 '<a href="%s">%s</a>',
135 admin_url( 'admin.php?page=' . \ImageOptimization\Modules\Settings\Module::SETTING_BASE_SLUG ),
136 esc_html__( 'Settings', 'image-optimization' )
137 ),
138 ];
139 // @var ImageOptimizer/Modules/ConnectManager/Module
140 $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
141
142 if ( $module->connect_instance->is_connected() ) {
143 $custom_links['upgrade'] = sprintf(
144 '<a href="%s" style="color: #524CFF; font-weight: 700;" target="_blank" rel="noopener noreferrer">%s</a>',
145 'https://go.elementor.com/io-plugins-upgrade/',
146 esc_html__( 'Upgrade', 'image-optimization' )
147 );
148 } else {
149 $custom_links['connect'] = sprintf(
150 '<a href="%s" style="color: #524CFF; font-weight: 700;">%s</a>',
151 admin_url( 'admin.php?page=' . \ImageOptimization\Modules\Settings\Module::SETTING_BASE_SLUG ),
152 esc_html__( 'Connect', 'image-optimization' )
153 );
154 }
155
156 return array_merge( $custom_links, $links );
157 }
158
159 public function enqueue_global_assets() {
160 wp_enqueue_style(
161 'image-optimization-admin-fonts',
162 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap',
163 [],
164 IMAGE_OPTIMIZATION_VERSION
165 );
166
167 wp_enqueue_style(
168 'image-optimization-core-style-admin',
169 $this->get_css_assets_url( 'style-admin', 'assets/build/' ),
170 [],
171 IMAGE_OPTIMIZATION_VERSION,
172 );
173 }
174
175 /**
176 * Enqueue styles and scripts
177 */
178 private function enqueue_scripts() {
179 $asset_file = require IMAGE_OPTIMIZATION_ASSETS_PATH . 'build/admin.asset.php';
180
181 foreach ( $asset_file['dependencies'] as $style ) {
182 wp_enqueue_style( $style );
183 }
184
185 wp_enqueue_script(
186 'image-optimization-admin',
187 $this->get_js_assets_url( 'admin' ),
188 array_merge( $asset_file['dependencies'], [ 'wp-util' ] ),
189 $asset_file['version'],
190 true
191 );
192
193 wp_localize_script(
194 'image-optimization-admin',
195 'imageOptimizerAppSettings',
196 [
197 'siteUrl' => wp_parse_url( get_site_url(), PHP_URL_HOST ),
198 'thumbnailSizes' => wp_get_registered_image_subsizes(),
199 'isDevelopment' => defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG,
200 ]
201 );
202
203 /**
204 * @var ImageOptimizer\Modules\ConnectManager\Module $module
205 */
206 $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
207 $is_connect_on_fly = $module->connect_instance->get_is_connect_on_fly();
208 $connect_email = $module->connect_instance->get_connect_data()['user']['email'] ?? null;
209 $show_reset = ! $module->connect_instance->is_connected()
210 && ( $module->connect_instance->get_client_id() || $module->connect_instance->get_client_secret() );
211
212 wp_localize_script(
213 'image-optimization-admin',
214 'imageOptimizerUserData',
215 [
216 'isConnectOnFly' => $is_connect_on_fly,
217 'isConnected' => $module->connect_instance->is_connected(),
218 'isActivated' => $module->connect_instance->is_activated(),
219 'isUrlMismatch' => ! $module->connect_instance->is_valid_home_url(),
220 'planData' => $module->connect_instance->is_activated() ? $module->connect_instance->get_connect_status() : null,
221 'licenseKey' => $module->connect_instance->is_activated() ? $module->connect_instance->get_activation_state() : null,
222 'imagesLeft' => $module->connect_instance->is_activated() ? $module->connect_instance->images_left() : null,
223 'isOwner' => $module->connect_instance->is_connected() ? $module->connect_instance->user_is_subscription_owner() : null,
224 'subscriptionEmail' => $connect_email ? $connect_email : null,
225 'showResetButton' => $show_reset,
226
227 'wpRestNonce' => wp_create_nonce( 'wp_rest' ),
228 'disconnect' => wp_create_nonce( 'wp_rest' ),
229 'authInitNonce' => wp_create_nonce( $module->connect_instance->connect_init_nonce() ),
230 'authDisconnectNonce' => wp_create_nonce( $module->connect_instance->disconnect_nonce() ),
231 'authDeactivateNonce' => wp_create_nonce( $module->connect_instance->deactivate_nonce() ),
232 'authGetSubscriptionsNonce' => wp_create_nonce( $module->connect_instance->get_subscriptions_nonce() ),
233 'authActivateNonce' => wp_create_nonce( $module->connect_instance->activate_nonce() ),
234 'versionNonce' => wp_create_nonce( $module->connect_instance->version_nonce() ),
235 'removeBackupsNonce' => wp_create_nonce( Remove_Backups::NONCE_NAME ),
236 'restoreAllImagesNonce' => wp_create_nonce( Restore_All::NONCE_NAME ),
237 'optimizeBulkNonce' => wp_create_nonce( Optimize_Bulk::NONCE_NAME ),
238 'cancelBulkOptimizationNonce' => wp_create_nonce( Cancel_Bulk_Optimization::NONCE_NAME ),
239 ]
240 );
241
242 wp_set_script_translations( 'image-optimization-admin', 'image-optimization' );
243 }
244
245 private function should_render(): bool {
246 return ( Utils::is_media_page() || Utils::is_plugin_page() ) && Utils::user_is_admin();
247 }
248
249 /**
250 * Module constructor.
251 */
252 public function __construct() {
253 $this->register_components();
254
255 add_action( 'action_scheduler_init', [ Migration_Manager::class, 'init' ] );
256
257 add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_global_assets' ] );
258 add_filter( 'plugin_action_links', [ $this, 'add_plugin_links' ], 10, 2 );
259
260 add_action('current_screen', function () {
261 if ( ! $this->should_render() ) {
262 return;
263 }
264
265 add_action( 'admin_notices', [ $this, 'maybe_add_quota_reached_notice' ] );
266 add_action( 'admin_notices', [ $this, 'maybe_add_url_mismatch_notice' ] );
267
268 if ( Utils::is_media_page() ) {
269 add_action('in_admin_header', function () {
270 $this->render_top_bar();
271 });
272
273 add_action('all_admin_notices', function () {
274 $this->render_app();
275 });
276 }
277
278 if ( Utils::is_plugin_page() ) {
279 add_action('in_admin_header', function () {
280 $this->render_top_bar();
281 });
282 }
283
284 add_action('admin_enqueue_scripts', function () {
285 $this->enqueue_scripts();
286 });
287 });
288 }
289 }
290