get_col( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s AND %s = %s LIMIT 1", $option_name, $cache_buster, $cache_buster ) ); if ( ! empty( $option ) ) { return $option[0]; } return $default; } /** * insert_option_uniquely * used to insert option if not there already * direct query to avoid cache and race condition issues * @param $option_name * @param $option_value * * @return bool */ public static function insert_option_uniquely( $option_name, $option_value ): bool { global $wpdb; $cache_buster = wp_generate_uuid4(); $result = $wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->options (option_name, option_value, autoload) SELECT * FROM (SELECT %s, %s, 'no') AS tmp WHERE NOT EXISTS ( SELECT option_name FROM $wpdb->options WHERE option_name = %s AND option_value = %s AND %s = %s ) LIMIT 1", $option_name, $option_value, $option_name, $option_value, $cache_buster, $cache_buster ) ); if ( false === $result || 0 === $result ) { // false means query failed, 0 means no row inserted because it exists return false; } return true; } /** * User is subscription owner. * * Check if current user is subscription owner. * * @return boolean */ public static function user_is_subscription_owner(): bool { $owner_id = (int) self::get_connect_mode_data( self::OPTION_OWNER_USER_ID, false ); return get_current_user_id() === $owner_id; } public static function ensure_reset_connect() { if ( Config::CONNECT_MODE === 'site' ) { self::delete_option( self::ACCESS_TOKEN ); self::delete_option( self::REFRESH_TOKEN ); self::delete_option( self::TOKEN_ID ); self::delete_option( self::SUBSCRIPTION_ID ); self::delete_option( self::OPTION_OWNER_USER_ID ); delete_transient( 'image_optimizer_status_check '); } else { $user_id = get_current_user_id(); self::delete_user_data( $user_id, self::ACCESS_TOKEN ); self::delete_user_data( $user_id, self::REFRESH_TOKEN ); self::delete_user_data( $user_id, self::TOKEN_ID ); self::delete_user_data( $user_id, self::SUBSCRIPTION_ID ); self::delete_user_data( $user_id, self::OPTION_OWNER_USER_ID ); delete_transient( 'image_optimizer_status_check' ); } } /** * clear_session */ public static function clear_session() { if ( Config::CONNECT_MODE === 'site' ) { self::delete_option( self::CLIENT_ID ); self::delete_option( self::CLIENT_SECRET ); self::delete_option( self::ACCESS_TOKEN ); self::delete_option( self::REFRESH_TOKEN ); self::delete_option( self::TOKEN_ID ); self::delete_option( self::SUBSCRIPTION_ID ); self::delete_option( self::OPTION_OWNER_USER_ID ); delete_transient( 'image_optimizer_status_check '); } else { $user_id = get_current_user_id(); self::delete_user_data( $user_id, self::CLIENT_ID ); self::delete_user_data( $user_id, self::CLIENT_SECRET ); self::delete_user_data( $user_id, self::ACCESS_TOKEN ); self::delete_user_data( $user_id, self::REFRESH_TOKEN ); self::delete_user_data( $user_id, self::TOKEN_ID ); self::delete_user_data( $user_id, self::SUBSCRIPTION_ID ); self::delete_user_data( $user_id, self::OPTION_OWNER_USER_ID ); delete_transient( 'image_optimizer_status_check' ); } } }