PluginProbe
Image Optimization – Compress Images and Convert to WebP or AVIF / 1.6.6
Image Optimization – Compress Images and Convert to WebP or AVIF v1.6.6
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 1.6.6 All 32 releases
image-optimization / modules / connect / classes / data.php

data.php in Image Optimization – Compress Images and Convert to WebP or AVIF 1.6.6, at modules/connect/classes/data.php

352 lines 8.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ImageOptimization\Modules\Connect\Classes;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit; // Exit if accessed directly
7 }
8
9 /**
10 * Class Data
11 */
12 class Data {
13 const CLIENT_ID = '_client_id';
14 const CLIENT_SECRET = '_client_secret';
15 const ACCESS_TOKEN = '_access_token';
16 const REFRESH_TOKEN = '_refresh_token';
17 const TOKEN_ID = '_token_id';
18 const SUBSCRIPTION_ID = '_subscription_id';
19 const OPTION_OWNER_USER_ID = '_owner_user_id';
20 const HOME_URL = '_home_url';
21
22 /**
23 * get_option
24 * @param $option_name
25 * @param $default
26 *
27 * @return false|mixed|null
28 */
29 public static function get_option( $option_name, $default ) {
30 return get_option( Config::APP_PREFIX . $option_name, $default );
31 }
32
33 /**
34 * set_option
35 * @param $option_name
36 * @param $option_value
37 * @param $auto_load
38 *
39 * @return bool
40 */
41 public static function set_option( $option_name, $option_value, $auto_load = false ): bool {
42 return update_option( Config::APP_PREFIX . $option_name, $option_value, $auto_load );
43 }
44
45 /**
46 * delete_option
47 * @param $option_name
48 *
49 * @return bool
50 */
51 public static function delete_option( $option_name ) : bool {
52 return delete_option( Config::APP_PREFIX . $option_name );
53 }
54
55 /**
56 * get_user_data
57 * @param $user_id
58 * @param $data_name
59 * @param mixed|bool $default
60 *
61 * @return false|mixed
62 */
63 public static function get_user_data( $user_id, $data_name, $default = false ) {
64 $data = get_user_meta( $user_id, Config::APP_PREFIX . $data_name, true );
65
66 return empty( $data ) ? $default : $data;
67 }
68
69 /**
70 * set_user_data
71 * @param $user_id
72 * @param $data_name
73 * @param $value
74 *
75 * @return bool|int
76 */
77 public static function set_user_data( $user_id, $data_name, $value ) {
78 return update_user_meta( $user_id, Config::APP_PREFIX . $data_name, $value );
79 }
80
81 /**
82 * delete_user_data
83 * @param $user_id
84 * @param $data_name
85 *
86 * @return bool
87 */
88 public static function delete_user_data( $user_id, $data_name ): bool {
89 return delete_user_meta( $user_id, Config::APP_PREFIX . $data_name );
90 }
91
92 /**
93 * get_connect_mode_data
94 * @param ...$data
95 *
96 * @return false|mixed|null|string
97 */
98 public static function get_connect_mode_data( ...$data ) {
99 if ( Config::CONNECT_MODE === 'site' ) {
100 return self::get_option( ...$data );
101 }
102 $user_id = get_current_user_id();
103 return self::get_user_data( ...( [ $user_id, ...$data ] ) );
104 }
105
106 /**
107 * set_connect_mode_data
108 * @param ...$data
109 *
110 * @return bool|int
111 */
112 public static function set_connect_mode_data( ...$data ) {
113 if ( Config::CONNECT_MODE === 'site' ) {
114 return self::set_option( ...$data );
115 }
116 $user_id = get_current_user_id();
117 return self::set_user_data( ...( [ $user_id, ...$data ] ) );
118 }
119
120 /**
121 * get_client_id
122 *
123 * @return string|bool|mixed
124 */
125 public static function get_client_id() {
126 return self::get_connect_mode_data( self::CLIENT_ID, false );
127 }
128
129 /**
130 * get_client_secret
131 * @return false|mixed|string|null
132 */
133 public static function get_client_secret() {
134 return self::get_connect_mode_data( self::CLIENT_SECRET, false );
135 }
136
137 /**
138 * set_client_id
139 * @param $value
140 *
141 * @return bool
142 */
143 public static function set_client_id( $value ): bool {
144 return self::set_connect_mode_data( self::CLIENT_ID, $value );
145 }
146
147 public static function get_subscription_id() {
148 return self::get_connect_mode_data( self::SUBSCRIPTION_ID, false );
149 }
150
151 public static function set_subscription_id( $value ): bool {
152 return self::set_connect_mode_data( self::SUBSCRIPTION_ID, $value );
153 }
154
155 /**
156 * set_client_secret
157 * @param $value
158 *
159 * @return bool
160 */
161 public static function set_client_secret( $value ): bool {
162 return self::set_connect_mode_data( self::CLIENT_SECRET, $value );
163 }
164
165 /**
166 * get_access_token
167 * @return false|mixed|string|null
168 */
169 public static function get_access_token() {
170 return self::get_connect_mode_data( self::ACCESS_TOKEN, false );
171 }
172
173 public static function get_token_id() {
174 return self::get_connect_mode_data( self::TOKEN_ID, false );
175 }
176
177 /**
178 * get_refresh_token
179 * @return false|mixed|string|null
180 */
181 public static function get_refresh_token() {
182 return self::get_connect_mode_data( self::REFRESH_TOKEN, false );
183 }
184
185 public static function get_home_url() {
186 $raw = self::get_connect_mode_data( self::HOME_URL, false );
187 $is_base64 = base64_encode( base64_decode( $raw, true ) ) === $raw;
188 return $is_base64 ? base64_decode( $raw ) : $raw;
189 }
190
191 /**
192 * set_home_url
193 *
194 * Stores home URL as a base64 string to avoid migration/stg tools from overriding value
195 */
196 public static function set_home_url( ?string $home_url = null ): bool {
197 $home_url = $home_url ?? home_url();
198 return self::set_connect_mode_data( self::HOME_URL, base64_encode( $home_url ) );
199 }
200
201 /**
202 * set_user_is_owner_option
203 */
204 public static function set_user_is_owner_option( $value ) {
205 return self::set_connect_mode_data( self::OPTION_OWNER_USER_ID, $value );
206 }
207
208 /**
209 * get_user_is_owner_option
210 */
211 public static function get_user_is_owner_option() {
212 return self::get_connect_mode_data( self::OPTION_OWNER_USER_ID, false );
213 }
214
215 /**
216 * fetch_option
217 * direct query to avoid cache and race condition issues
218 *
219 * @param $option_name
220 * @param $default
221 *
222 * @return mixed|null
223 */
224 public static function fetch_option( $option_name, $default = null ) {
225 global $wpdb;
226 $cache_buster = wp_generate_uuid4();
227 $option = $wpdb->get_col(
228 $wpdb->prepare(
229 "SELECT option_value
230 FROM $wpdb->options
231 WHERE option_name = %s
232 AND %s = %s
233 LIMIT 1",
234 $option_name,
235 $cache_buster,
236 $cache_buster
237 )
238 );
239 if ( ! empty( $option ) ) {
240 return $option[0];
241 }
242 return $default;
243 }
244
245 /**
246 * insert_option_uniquely
247 * used to insert option if not there already
248 * direct query to avoid cache and race condition issues
249 * @param $option_name
250 * @param $option_value
251 *
252 * @return bool
253 */
254 public static function insert_option_uniquely( $option_name, $option_value ): bool {
255 global $wpdb;
256 $cache_buster = wp_generate_uuid4();
257 $result = $wpdb->query(
258 $wpdb->prepare(
259 "INSERT INTO $wpdb->options (option_name, option_value, autoload)
260 SELECT * FROM (SELECT %s, %s, 'no') AS tmp
261 WHERE NOT EXISTS (
262 SELECT option_name
263 FROM $wpdb->options
264 WHERE option_name = %s
265 AND option_value = %s
266 AND %s = %s
267 ) LIMIT 1",
268 $option_name,
269 $option_value,
270 $option_name,
271 $option_value,
272 $cache_buster,
273 $cache_buster
274 )
275 );
276
277 if ( false === $result || 0 === $result ) {
278 // false means query failed, 0 means no row inserted because it exists
279 return false;
280 }
281
282 return true;
283 }
284
285 /**
286 * User is subscription owner.
287 *
288 * Check if current user is subscription owner.
289 *
290 * @return boolean
291 */
292 public static function user_is_subscription_owner(): bool {
293 $owner_id = (int) self::get_connect_mode_data( self::OPTION_OWNER_USER_ID, false );
294
295 return get_current_user_id() === $owner_id;
296 }
297
298 public static function ensure_reset_connect() {
299 if ( Config::CONNECT_MODE === 'site' ) {
300 self::delete_option( self::ACCESS_TOKEN );
301 self::delete_option( self::REFRESH_TOKEN );
302 self::delete_option( self::TOKEN_ID );
303 self::delete_option( self::SUBSCRIPTION_ID );
304 self::delete_option( self::OPTION_OWNER_USER_ID );
305 self::delete_option( self::HOME_URL );
306
307 delete_transient( 'image_optimizer_status_check' );
308 } else {
309 $user_id = get_current_user_id();
310 self::delete_user_data( $user_id, self::ACCESS_TOKEN );
311 self::delete_user_data( $user_id, self::REFRESH_TOKEN );
312 self::delete_user_data( $user_id, self::TOKEN_ID );
313 self::delete_user_data( $user_id, self::SUBSCRIPTION_ID );
314 self::delete_user_data( $user_id, self::OPTION_OWNER_USER_ID );
315 self::delete_user_data( $user_id, self::HOME_URL );
316
317 delete_transient( 'image_optimizer_status_check' );
318 }
319 }
320
321 /**
322 * clear_session
323 */
324 public static function clear_session() {
325 if ( Config::CONNECT_MODE === 'site' ) {
326 self::delete_option( self::CLIENT_ID );
327 self::delete_option( self::CLIENT_SECRET );
328 self::delete_option( self::ACCESS_TOKEN );
329 self::delete_option( self::REFRESH_TOKEN );
330 self::delete_option( self::TOKEN_ID );
331 self::delete_option( self::SUBSCRIPTION_ID );
332 self::delete_option( self::OPTION_OWNER_USER_ID );
333 self::delete_option( self::HOME_URL );
334
335 delete_transient( 'image_optimizer_status_check' );
336 } else {
337 $user_id = get_current_user_id();
338
339 self::delete_user_data( $user_id, self::CLIENT_ID );
340 self::delete_user_data( $user_id, self::CLIENT_SECRET );
341 self::delete_user_data( $user_id, self::ACCESS_TOKEN );
342 self::delete_user_data( $user_id, self::REFRESH_TOKEN );
343 self::delete_user_data( $user_id, self::TOKEN_ID );
344 self::delete_user_data( $user_id, self::SUBSCRIPTION_ID );
345 self::delete_user_data( $user_id, self::OPTION_OWNER_USER_ID );
346 self::delete_user_data( $user_id, self::HOME_URL );
347
348 delete_transient( 'image_optimizer_status_check' );
349 }
350 }
351 }
352