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