PluginProbe
Image Optimizer – Compress Images and Convert to WebP or AVIF / 1.6.2
Image Optimizer – Compress Images and Convert to WebP or AVIF v1.6.2
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 / modules / core / module.php

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

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