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

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