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

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

285 lines 8.4 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
208 wp_localize_script(
209 'image-optimization-admin',
210 'imageOptimizerUserData',
211 [
212 'isConnectOnFly' => $is_connect_on_fly,
213 'isConnected' => $module->connect_instance->is_connected(),
214 'isActivated' => $module->connect_instance->is_activated(),
215 'isUrlMismatch' => ! $module->connect_instance->is_valid_home_url(),
216 'planData' => $module->connect_instance->is_activated() ? $module->connect_instance->get_connect_status() : null,
217 'licenseKey' => $module->connect_instance->is_activated() ? $module->connect_instance->get_activation_state() : null,
218 'imagesLeft' => $module->connect_instance->is_activated() ? $module->connect_instance->images_left() : null,
219 'isOwner' => $module->connect_instance->is_connected() ? $module->connect_instance->user_is_subscription_owner() : null,
220 'subscriptionEmail' => $connect_email ? $connect_email : null,
221
222 'wpRestNonce' => wp_create_nonce( 'wp_rest' ),
223 'disconnect' => wp_create_nonce( 'wp_rest' ),
224 'authInitNonce' => wp_create_nonce( $module->connect_instance->connect_init_nonce() ),
225 'authDisconnectNonce' => wp_create_nonce( $module->connect_instance->disconnect_nonce() ),
226 'authDeactivateNonce' => wp_create_nonce( $module->connect_instance->deactivate_nonce() ),
227 'authGetSubscriptionsNonce' => wp_create_nonce( $module->connect_instance->get_subscriptions_nonce() ),
228 'authActivateNonce' => wp_create_nonce( $module->connect_instance->activate_nonce() ),
229 'versionNonce' => wp_create_nonce( $module->connect_instance->version_nonce() ),
230 'removeBackupsNonce' => wp_create_nonce( Remove_Backups::NONCE_NAME ),
231 'restoreAllImagesNonce' => wp_create_nonce( Restore_All::NONCE_NAME ),
232 'optimizeBulkNonce' => wp_create_nonce( Optimize_Bulk::NONCE_NAME ),
233 'cancelBulkOptimizationNonce' => wp_create_nonce( Cancel_Bulk_Optimization::NONCE_NAME ),
234 ]
235 );
236
237 wp_set_script_translations( 'image-optimization-admin', 'image-optimization' );
238 }
239
240 private function should_render(): bool {
241 return ( Utils::is_media_page() || Utils::is_plugin_page() ) && Utils::user_is_admin();
242 }
243
244 /**
245 * Module constructor.
246 */
247 public function __construct() {
248 $this->register_components();
249
250 add_action( 'action_scheduler_init', [ Migration_Manager::class, 'init' ] );
251
252 add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_global_assets' ] );
253 add_filter( 'plugin_action_links', [ $this, 'add_plugin_links' ], 10, 2 );
254
255 add_action('current_screen', function () {
256 if ( ! $this->should_render() ) {
257 return;
258 }
259
260 add_action( 'admin_notices', [ $this, 'maybe_add_quota_reached_notice' ] );
261 add_action( 'admin_notices', [ $this, 'maybe_add_url_mismatch_notice' ] );
262
263 if ( Utils::is_media_page() ) {
264 add_action('in_admin_header', function () {
265 $this->render_top_bar();
266 });
267
268 add_action('all_admin_notices', function () {
269 $this->render_app();
270 });
271 }
272
273 if ( Utils::is_plugin_page() ) {
274 add_action('in_admin_header', function () {
275 $this->render_top_bar();
276 });
277 }
278
279 add_action('admin_enqueue_scripts', function () {
280 $this->enqueue_scripts();
281 });
282 });
283 }
284 }
285