, tokens: array} */ private static function state(): array { $s = get_option( self::OPTION, array() ); $s = is_array( $s ) ? $s : array(); return array( 'clients' => (array) ( $s['clients'] ?? array() ), 'tokens' => (array) ( $s['tokens'] ?? array() ), ); } /** * Is an OAuth app or an access token paused? * * @param string $kind client|token. * @param string $id Client id or token id. */ public static function is_paused( string $kind, string $id ): bool { if ( '' === $id ) { return false; } $s = self::state(); return isset( $s[ 'client' === $kind ? 'clients' : 'tokens' ][ $id ] ); } /** * Pause or resume. * * @param string $kind client|token. * @param string $id Id. * @param bool $paused Paused. */ public static function set( string $kind, string $id, bool $paused ): void { if ( '' === $id ) { return; } $s = self::state(); $key = 'client' === $kind ? 'clients' : 'tokens'; if ( $paused ) { $s[ $key ][ $id ] = time(); } else { unset( $s[ $key ][ $id ] ); } update_option( self::OPTION, $s, true ); } /** * Forget a connection that was removed. * * @param string $kind client|token. * @param string $id Id. */ public static function forget( string $kind, string $id ): void { self::set( $kind, $id, false ); } }