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

243 lines 6.9 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 // TODO: Remove imports that are not used.
5 use ImageOptimization\Modules\Oauth\{
6 Classes\Data,
7 Components\Connect,
8 Rest\Activate,
9 Rest\Connect_Init,
10 Rest\Deactivate,
11 Rest\Disconnect,
12 Rest\Get_Subscriptions,
13 };
14
15 use ImageOptimization\Modules\Optimization\{
16 Rest\Cancel_Bulk_Optimization,
17 Rest\Optimize_Bulk,
18 };
19 use ImageOptimization\Modules\Backups\Rest\{
20 Restore_All,
21 Remove_Backups,
22 };
23 use ImageOptimization\Classes\{
24 Module_Base,
25 Utils,
26 };
27
28 use ImageOptimization\Plugin;
29
30 if ( ! defined( 'ABSPATH' ) ) {
31 exit; // Exit if accessed directly.
32 }
33
34 class Module extends Module_Base {
35 public function get_name(): string {
36 return 'core';
37 }
38
39 public static function component_list() : array {
40 return [
41 'Pointers',
42 'Conflicts',
43 'User_Feedback',
44 'Not_Connected',
45 ];
46 }
47
48 private function render_top_bar() {
49 ?>
50 <div id="image-optimization-top-bar"></div>
51 <?php
52 }
53
54 private function render_app() {
55 ?>
56 <div class="clear"></div>
57 <div id="image-optimization-app"></div>
58 <?php
59 }
60
61 public function maybe_add_quota_reached_notice() {
62
63 // @var ImageOptimizer/Modules/ConnectManager/Module
64 $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
65
66 if ( ! $module->connect_instance->is_activated() || $module->connect_instance->images_left() > 0 ) {
67 return;
68 }
69
70 ?>
71 <div class="notice notice-warning notice image-optimizer__notice image-optimizer__notice--warning">
72 <p>
73 <b>
74 <?php esc_html_e(
75 'You’ve reached your plan quota.',
76 'image-optimization'
77 ); ?>
78 </b>
79
80 <span>
81 <?php esc_html_e(
82 'You have no images left to optimize in your current plan.',
83 'image-optimization'
84 ); ?>
85
86 <a href="https://go.elementor.com/io-quota-upgrade/">
87 <?php esc_html_e(
88 'Upgrade plan now',
89 'image-optimization'
90 ); ?>
91 </a>
92 </span>
93 </p>
94 </div>
95 <?php
96 }
97
98 public function add_plugin_links( $links, $plugin_file_name ): array {
99 if ( ! str_ends_with( $plugin_file_name, '/image-optimization.php' ) ) {
100 return (array) $links;
101 }
102
103 $custom_links = [
104 'settings' => sprintf(
105 '<a href="%s">%s</a>',
106 admin_url( 'admin.php?page=' . \ImageOptimization\Modules\Settings\Module::SETTING_BASE_SLUG ),
107 esc_html__( 'Settings', 'image-optimization' )
108 ),
109 'upgrade' => sprintf(
110 '<a href="%s" style="color: #524CFF; font-weight: 700;" target="_blank" rel="noopener noreferrer">%s</a>',
111 'https://go.elementor.com/io-plugins-upgrade/',
112 esc_html__( 'Upgrade', 'image-optimization' )
113 ),
114 ];
115
116 return array_merge( $custom_links, $links );
117 }
118
119 public function enqueue_global_assets() {
120 wp_enqueue_style(
121 'image-optimization-admin-fonts',
122 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap',
123 [],
124 IMAGE_OPTIMIZATION_VERSION
125 );
126
127 wp_enqueue_style(
128 'image-optimization-core-style-admin',
129 $this->get_css_assets_url( 'style-admin', 'assets/build/' ),
130 [],
131 IMAGE_OPTIMIZATION_VERSION,
132 );
133 }
134
135 /**
136 * Enqueue styles and scripts
137 */
138 private function enqueue_scripts() {
139 $asset_file = require IMAGE_OPTIMIZATION_ASSETS_PATH . 'build/admin.asset.php';
140
141 foreach ( $asset_file['dependencies'] as $style ) {
142 wp_enqueue_style( $style );
143 }
144
145 wp_enqueue_script(
146 'image-optimization-admin',
147 $this->get_js_assets_url( 'admin' ),
148 array_merge( $asset_file['dependencies'], [ 'wp-util' ] ),
149 $asset_file['version'],
150 true
151 );
152
153 wp_localize_script(
154 'image-optimization-admin',
155 'imageOptimizerAppSettings',
156 [
157 'siteUrl' => wp_parse_url( get_site_url(), PHP_URL_HOST ),
158 'thumbnailSizes' => wp_get_registered_image_subsizes(),
159 'isDevelopment' => defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG,
160 ]
161 );
162
163 /**
164 * @var ImageOptimizer\Modules\ConnectManager\Module $module
165 */
166 $module = Plugin::instance()->modules_manager->get_modules( 'connect-manager' );
167 $is_connect_on_fly = $module->connect_instance->get_is_connect_on_fly();
168 $connect_email = $module->connect_instance->get_connect_data()['user']['email'] ?? null;
169
170 wp_localize_script(
171 'image-optimization-admin',
172 'imageOptimizerUserData',
173 [
174 'isConnectOnFly' => $is_connect_on_fly,
175 'isConnected' => $module->connect_instance->is_connected(),
176 'isActivated' => $module->connect_instance->is_activated(),
177 'planData' => $module->connect_instance->is_activated() ? $module->connect_instance->get_connect_status() : null,
178 'licenseKey' => $module->connect_instance->is_activated() ? $module->connect_instance->get_activation_state() : null,
179 'imagesLeft' => $module->connect_instance->is_activated() ? $module->connect_instance->images_left() : null,
180 'isOwner' => $module->connect_instance->is_connected() ? $module->connect_instance->user_is_subscription_owner() : null,
181 'subscriptionEmail' => $connect_email ? $connect_email : null,
182
183 'wpRestNonce' => wp_create_nonce( 'wp_rest' ),
184 'disconnect' => wp_create_nonce( 'wp_rest' ),
185 'authInitNonce' => wp_create_nonce( $module->connect_instance->connect_init_nonce() ),
186 'authDisconnectNonce' => wp_create_nonce( $module->connect_instance->disconnect_nonce() ),
187 'authDeactivateNonce' => wp_create_nonce( $module->connect_instance->deactivate_nonce() ),
188 'authGetSubscriptionsNonce' => wp_create_nonce( $module->connect_instance->get_subscriptions_nonce() ),
189 'authActivateNonce' => wp_create_nonce( $module->connect_instance->activate_nonce() ),
190 'versionNonce' => wp_create_nonce( $module->connect_instance->version_nonce() ),
191 'removeBackupsNonce' => wp_create_nonce( Remove_Backups::NONCE_NAME ),
192 'restoreAllImagesNonce' => wp_create_nonce( Restore_All::NONCE_NAME ),
193 'optimizeBulkNonce' => wp_create_nonce( Optimize_Bulk::NONCE_NAME ),
194 'cancelBulkOptimizationNonce' => wp_create_nonce( Cancel_Bulk_Optimization::NONCE_NAME ),
195 ]
196 );
197
198 wp_set_script_translations( 'image-optimization-admin', 'image-optimization' );
199 }
200
201 private function should_render(): bool {
202 return ( Utils::is_media_page() || Utils::is_plugin_page() ) && Utils::user_is_admin();
203 }
204
205 /**
206 * Module constructor.
207 */
208 public function __construct() {
209 $this->register_components();
210
211 add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_global_assets' ] );
212 add_filter( 'plugin_action_links', [ $this, 'add_plugin_links' ], 10, 2 );
213
214 add_action('current_screen', function () {
215 if ( ! $this->should_render() ) {
216 return;
217 }
218
219 add_action( 'admin_notices', [ $this, 'maybe_add_quota_reached_notice' ] );
220
221 if ( Utils::is_media_page() ) {
222 add_action('in_admin_header', function () {
223 $this->render_top_bar();
224 });
225
226 add_action('all_admin_notices', function () {
227 $this->render_app();
228 });
229 }
230
231 if ( Utils::is_plugin_page() ) {
232 add_action('in_admin_header', function () {
233 $this->render_top_bar();
234 });
235 }
236
237 add_action('admin_enqueue_scripts', function () {
238 $this->enqueue_scripts();
239 });
240 });
241 }
242 }
243