namespace ImageOptimization\Modules\Oauth\Classes;
use ImageOptimization\Modules\Oauth\Components\Connect;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
const CONNECT_CLIENT_DATA_OPTION_NAME = 'image_optimizer_client_data';
const CONNECT_DATA_OPTION_NAME = 'image_optimizer_connect_data';
const OPTION_CONNECT_SITE_KEY = 'image_optimizer_site_key';
const OPTION_CONNECT_STATE = 'image_optimizer_connect_state';
const OPTION_ACTIVATION_STATE = 'image_optimizer_activation_state';
const OPTION_OWNER_USER_ID = 'image_optimizer_owner_user_id';
public static function set_client_data( $client_id, $auth_secret ) {
update_option( self::CONNECT_CLIENT_DATA_OPTION_NAME, [
'client_id' => $client_id,
'auth_secret' => $auth_secret,
public static function get_client_data(): array {
return get_option( self::CONNECT_CLIENT_DATA_OPTION_NAME, [
public static function get_client_id(): string {
return self::get_client_data()['client_id'] ?? '';
public static function get_client_secret(): string {
return self::get_client_data()['auth_secret'] ?? '';
public static function get_connect_data( bool $force = false ): array {
static $connect_data = null;
if ( null === $connect_data || $force ) {
$connect_data = array_merge(
'access_token_secret' => '',
'token_type' => 'bearer',
get_option( self::CONNECT_DATA_OPTION_NAME, [] )
public static function set_connect_data( array $data = [] ): bool {
$data['last_update'] = time();
update_option( self::OPTION_OWNER_USER_ID, get_current_user_id() );
return update_option( self::CONNECT_DATA_OPTION_NAME, $data );
public static function get_access_token() {
return self::get_connect_data()['access_token'] ?? false;
* @return false|mixed|null|string
public static function get_connect_state( bool $force = false ) {
$state = get_option( static::OPTION_CONNECT_STATE );
if ( ! $state || $force ) {
$state = wp_generate_password( 12, false );
update_option( static::OPTION_CONNECT_STATE, $state, false );
* @return false|mixed|string|null
public static function get_site_key() {
$site_key = get_option( static::OPTION_CONNECT_SITE_KEY );
$site_key = md5( uniqid( wp_generate_password() ) );
update_option( static::OPTION_CONNECT_SITE_KEY, $site_key, false );
public static function delete_connect_state(): bool {
return delete_option( static::OPTION_CONNECT_STATE );
public static function get_activation_state(): string {
return get_option( self::OPTION_ACTIVATION_STATE, '' );
public static function set_activation_state( $state ): bool {
return update_option( self::OPTION_ACTIVATION_STATE, $state );
public static function delete_activation_state(): bool {
return delete_option( self::OPTION_ACTIVATION_STATE );
public static function reset(): void {
self::delete_connect_state();
self::delete_activation_state();
delete_option( self::OPTION_OWNER_USER_ID );
delete_option( static::CONNECT_DATA_OPTION_NAME );
delete_option( self::CONNECT_CLIENT_DATA_OPTION_NAME );
delete_transient( Connect::STATUS_CHECK_TRANSIENT );
public static function images_left(): int {
$plan_data = Connect::get_connect_status();
if ( empty( $plan_data ) ) {
$quota = $plan_data->quota;
$used_quota = $plan_data->used_quota;
return max( $quota - $used_quota, 0 );
public static function user_is_subscription_owner(): bool {
$owner_id = (int) get_option( self::OPTION_OWNER_USER_ID );
return get_current_user_id() === $owner_id;