HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/biblioteka/wp-content/plugins/gallery-by-supsystic/src/GridGallery/Insta/Client.php
<?php

/**
 * Client for working with Instagram API.
 */
class GridGallery_Insta_Client
{

    /** Authorization URL */
    const AUTH_URL = 'https://api.instagram.com/oauth';

    /** Base API URL */
    const API_URL = 'https://graph.instagram.com/';

    /**
     * @var string
     */
    private $clientId;

    /**
     * @var string
     */
    private $clientSecret;

    /**
     * @var string
     */
    private $redirectUri;

    /**
     * @var string
     */
    private $accessToken;

    /**
     * @var string
     */
    private $state;

    /**
     * @var integer
     */
    private $user;

    /**
     * @var integer
     */

    /**
     * Constructor.
     *
     * @param string $accessToken OAuth2 Access token.
     */
    public function __construct($accessToken = null)
    {
        $this->accessToken = $accessToken;
    }

    /**
     * Returns authorization URL.
     *
     * @see http://instagram.com/developer/authentication/
     * @return string Authorization URL.
     * @throws Exception If client id or redirect uri is not specified.
     */
    public function getAuthorizationUrl()
    {
        if (!$this->clientId) {
            throw new Exception('Client ID is not specified.');
        }

        if (!$this->redirectUri) {
            throw new Exception('Redirect URI is not specified.');
        }

        return self::AUTH_URL . '/authorize/?' . http_build_query(
            array(
                'client_id' => $this->getClientId(),
                'redirect_uri' => $this->getRedirectUri(),
                'state' => $this->getState(),
		'scope' => 'user_profile,user_media',
                'response_type' => 'code',
            )
        );
    }

    /**
     * Sends request to generate access token.
     *
     * @param string $code Authorization code.
     * @throws Exception If client secret or redirect uri is not specified.
     * @throws RuntimeException If failed to get access token.
     * @return string
     */
    public function requestAccessToken($code)
    {


        if (!$this->getClientSecret()) {
            throw new Exception('Client secret is not specified.');
        }

        if (!$this->getRedirectUri()) {
            throw new Exception('Redirect URI is not specified.');
        }

        $code = trim($code);

        $response = wp_remote_post(
            self::AUTH_URL . '/access_token',
            array(
                'body' => array(
                    'client_id' => $this->getClientId(),
                    'client_secret' => $this->getClientSecret(),
                    'redirect_uri' => $this->getRedirectUri(),
                    'code' => $code,
                    'grant_type' => 'authorization_code'
                )
            )
        );

        if (is_wp_error($response)) {
            throw new RuntimeException($response->get_error_message());
        }

        if (200 !== $this->getResponseCode($response)) {
            throw new RuntimeException($this->getResponseMessage($response));
        }

        $data = $this->getResponseBody($response);


        if (!isset($data['access_token'])) {
            throw new RuntimeException('Failed to get access token.');
        }

        return $data;
    }

    //added to get images from any user
    // public function getUserData()
    // {
    //     if ($this->accessToken && $this->userName) {
    //         $response = wp_remote_get(
    //             self::API_URL . "/users/search?q={$this->userName}&access_token={$this->accessToken}"
    //         );
    //         $data = $this->getResponseBody($response);
    //         $this->user = $data;
    //         $this->userId = $data['data'][0]['id'];
    //     } else {
    //         //error mesage
    //     }
    //     return false;
    // }

    public function getUserThumbnails()
    {
        if (!$this->accessToken && !$this->user) {
            $this->accessToken = get_option('insta_token');
            $this->user = get_option('insta_user');
        }
        return $this->getAllInstagramImages(self::API_URL . "/me/media?fields=id,caption&access_token={$this->accessToken}");
    }

    public function getAllInstagramImages($url) {
        $imagesUrls = array();
        $response = wp_remote_get($url);
        $result = $this->getResponseBody($response);
        if (!empty($result['data'])) {
          foreach ($result['data'] as $post) {
              $imageUrl = self::API_URL . $post['id'] . "?fields=id,media_type,media_url,username,timestamp&access_token={$this->accessToken}";
              $imageUrlResponse = wp_remote_get($imageUrl);
              $imageUrlRes = $this->getResponseBody($imageUrlResponse);
              if ($imageUrlRes['media_type'] == 'CAROUSEL_ALBUM') {
                $childrenUrl = self::API_URL . $imageUrlRes['id'] . "/children?access_token={$this->accessToken}";
                $childrenUrlResponse = wp_remote_get($childrenUrl);
                $childrenUrlRes = $this->getResponseBody($childrenUrlResponse);
                if (!empty($childrenUrlRes['data'])) {
                  foreach ($childrenUrlRes['data'] as $carousel_children)  {
                    $carousel_childrenUrl = self::API_URL . $carousel_children['id'] . "?fields=id,media_type,media_url,username,timestamp&access_token={$this->accessToken}";
                    $carousel_childrenUrlResponse = wp_remote_get($carousel_childrenUrl);
                    $carousel_childrenUrlRes = $this->getResponseBody($carousel_childrenUrlResponse);
                    if (!empty($carousel_childrenUrlRes['media_url'])) {
                      $imagesUrls[] = $carousel_childrenUrlRes['media_url'];
                    }
                  }
                }
              }
              if (!empty($imageUrlRes['media_url'])) {
                $imagesUrls[] = $imageUrlRes['media_url'];
              }
          }
        }
        if (!empty($result['paging']['next'])) {
            array_splice($imagesUrls, -1, 0,
                $this->getAllInstagramImages($result['paging']['next']));
        }
        return $imagesUrls;
    }

    // public function getUserImages()
    // {
    //     $user = get_option('insta_user');
    //     $token = get_option('insta_token');
    //     $response = wp_remote_get(
    //         self::API_URL . "/users/{$user['id']}/media/recent/?access_token={$token}"
    //     );
    //     $result = $this->getResponseBody($response);
    //     $imagesUrls = array();
    //     foreach ($result['data'] as $post) {
    //         $imagesUrls[] = $post['images'];
    //     }
    //     return $imagesUrls;
    // }

    /**
     * @param string $accessToken
     */
    public function setAccessToken($accessToken)
    {
        $this->accessToken = $accessToken;
    }

    /**
     * @return string
     */
    public function getAccessToken()
    {
        return $this->accessToken;
    }

    /**
     * @param string $clientId
     */
    public function setClientId($clientId)
    {
        $this->clientId = $clientId;
    }

    /**
     * @return string
     */
    public function getClientId()
    {
        return $this->clientId;
    }

    /**
     * @param string $clientSecret
     */
    public function setClientSecret($clientSecret)
    {
        $this->clientSecret = $clientSecret;
    }

    /**
     * @return string
     */
    public function getClientSecret()
    {
        return $this->clientSecret;
    }

    /**
     * @param string $redirectUri
     */
    public function setRedirectUri($redirectUri)
    {
        $this->redirectUri = $redirectUri;
    }

    /**
     * @return string
     */
    public function getRedirectUri()
    {
        return $this->redirectUri;
    }

    /**
     * @param string $state
     */
    public function setState($state)
    {
        $this->state = $state;
    }

    /**
     * @return string
     */
    public function getState()
    {
        return $this->state;
    }

    /**
     * @param array $user
     */
    public function setUser($user)
    {
        $this->user = $user;
    }

    /**
     * @return array
     */
    public function getUser()
    {
        return $this->user;
    }

    protected function getResponseCode($response)
    {
        return (int)wp_remote_retrieve_response_code($response);
    }

    protected function getResponseMessage($response)
    {
        return wp_remote_retrieve_response_message($response);
    }

    protected function getResponseBody($response)
    {
        return json_decode(wp_remote_retrieve_body($response), true);
    }
}