Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/astock/stock-api-libphp/src/Client/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/astock/stock-api-libphp/src/Client/LicenseHistory.php
<?php
/**
 * Copyright 2017 Adobe Systems Incorporated. All rights reserved.
 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. You may obtain a copy
 * of the License at http://www.apache.org/licenses/LICENSE-2.0
 */
namespace AdobeStock\Api\Client;

use \AdobeStock\Api\Exception\StockApi as StockApiException;
use \AdobeStock\Api\Core\Config as CoreConfig;
use \AdobeStock\Api\Client\Http\HttpInterface as HttpClientInterface;
use \AdobeStock\Api\Utils\APIUtils;
use \AdobeStock\Api\Request\LicenseHistory as LicenseHistoryRequest;
use \AdobeStock\Api\Response\LicenseHistory as LicenseHistoryResponse;

class LicenseHistory
{
    /**
     * Error code for LicenseHistory invalid state.
     * @var int
     */
    const LICENSE_HISTORY_RETURN_ERROR = -1;
    
    /**
     * Default limit for number of files in the results page.
     * @var integer
     */
    const DEFAULT_LICENSE_HISTORY_FILES_LIMIT = 100;
    
    /**
     * @var CoreConfig configuration that need to be initialized
     * before calling apis.
     */
    private $_config;
    
    /**
     * Access token string to be used with api calls.
     * @var string
     */
    private $_access_token;
    
    /**
     * Stores response from last search files api call.
     * @var LicenseHistoryResponse
     */
    private $_current_response;
    
    /**
     * Request object to be used for search files api query.
     * @var LicenseHistoryRequest
     */
    private $_current_request;
    
    /**
     * Flag to show if it initial invalid state.
     * @var boolean
     */
    private $_initial_invalid_state = true;
    
    /**
     * Checks if any search files api request is in progress.
     * @var boolean
     */
    private $_api_in_progress;
    
    /**
     * Offset Value
     * @var int
     */
    private $_offset;
    
    /**
     * @var HttpInterface custom http client object
     */
    private $_http_client;
    
    /**
     * Constructor.
     * @param CoreConfig $config config to be initialized.
     */
    public function __construct(CoreConfig $config)
    {
        $this->_config = $config;
    }
    
    /**
     * Method to do license history api call.
     * @param LicenseHistoryRequest $request
     * @throws StockApiException
     * @return LicenseHistoryResponse
     */
    private function _doApiCall(LicenseHistoryRequest $request) : LicenseHistoryResponse
    {
        if ($this->_api_in_progress) {
            throw StockApiException::withMessage('Some other search is already in progress!');
        }
        
        try {
            $this->_api_in_progress = true;
            $response = $this->_getFiles($request, $this->_access_token);
            $this->_doOnSuccess($response);
        } catch (StockApiException $e) {
            $this->_doOnError();
            throw $e;
        }
        
        return $this->_current_response;
    }
    
    /**
     * Method to do stuff on api call success.
     * @param LicenseHistoryResponse $response
     */
    private function _doOnSuccess(LicenseHistoryResponse $response)
    {
        $this->_current_response = $response;
        $this->_api_in_progress = false;
        
        if ($this->_initial_invalid_state) {
            $this->_initial_invalid_state = false;
        }
    }
    
    /**
     * Method to do stuff on api call failure.
     */
    private function _doOnError()
    {
        $this->_api_in_progress = false;
    }
    
    /**
     * Method to create and send request to the apis and parse result to response object.
     * @param LicenseHistoryRequest $license_file_request object containing license request parameters
     * @param string                $access_token         access token string to be used with api calls
     * @throws StockApiException
     * @return LicenseHistoryResponse response object from the api call
     */
    private function _getFiles(LicenseHistoryRequest $license_file_request, string $access_token = null) : LicenseHistoryResponse
    {
        $headers = APIUtils::generateCommonAPIHeaders($this->_config, $access_token);
        $end_point = $this->_config->getEndPoints()['license_history'];
        $request_url = $end_point . '?' . http_build_query($license_file_request);
        $offset_value = $this->_offset;
        $previous_offset_value = $license_file_request->getSearchParams()->getOffset();
        $find = 'search_parameters%5Boffset%5D=' . $previous_offset_value;
        $replace = 'search_parameters%5Boffset%5D=' . $offset_value;
        $request_url = str_replace($find, $replace, $request_url);
        $response_json = $this->_http_client->doGet($request_url, $headers);
        $response_array = json_decode($response_json, true);
        
        if (empty($response_array)) {
            throw StockApiException::withMessage('No more license file results available!');
        } else {
            //set offset of license request object if the api returns files
            $license_file_request->getSearchParams()->setOffset($this->_offset);
        }
        
        $license_history_response = new LicenseHistoryResponse();
        $license_history_response->initializeResponse($response_array);
        return $license_history_response;
    }
    
    /**
     * Initialize an api object
     * @param LicenseHistoryRequest $request
     * @param string                $access_token
     * @param HttpClientInterface   $http_client
     * @throws StockApiException
     * @return LicenseHistory
     */
    public function initializeLicenseHistory(LicenseHistoryRequest $request = null, string $access_token = null, HttpClientInterface $http_client) : LicenseHistory
    {
        if ($request === null) {
            throw StockApiException::withMessage('request cannot be null');
        }
        
        if ($request->getSearchParams() === null) {
            throw StockApiException::withMessage('Search parameter must be present in the request object');
        }
        
        if (empty($access_token)) {
            throw StockApiException::withMessage('Access token cannot be null or empty');
        }
        
        $this->_current_request = $request;
        $this->_current_response = new LicenseHistoryResponse();
        $this->_access_token = $access_token;
        $this->_api_in_progress = false;
        $this->_http_client = $http_client;
        $search_params = $request->getSearchParams();
        
        if ($search_params->getLimit() === null) {
            $this->_current_request->getSearchParams()->setLimit(self::DEFAULT_LICENSE_HISTORY_FILES_LIMIT);
        }
        
        $this->_offset = $search_params->getOffset();
        
        if ($this->_offset === null) {
            $this->_current_request->getSearchParams()->setOffset(0);
            $this->_offset = 0;
        }
        
        return $this;
    }
    
    /**
     * Method to get next license history response page.
     * @throws StockApiException
     * @return LicenseHistoryResponse
     */
    public function getNextLicenseHistory() : LicenseHistoryResponse
    {
        $request = $this->_current_request;
        $offset_value = $request->getSearchParams()->getOffset();
        
        if (!$this->_initial_invalid_state) {
            $limit = $request->getSearchParams()->getLimit();
            $offset_value = $limit + $offset_value;
            
            if ($this->_current_response->getNbResults() === null || $offset_value >= $this->_current_response->getNbResults()) {
                throw StockApiException::withMessage('No more search results available!');
            }
            
        }
        
        $this->_offset = $offset_value;
        $response = $this->_doApiCall($request);
        return $response;
    }
    
    /**
     * Method to get to previous search files response page.
     * @throws StockApiException
     * @return SearchFilesResponse
     */
    public function getPreviousLicenseHistory() : LicenseHistoryResponse
    {
        try {
            $request = $this->_current_request;
            $offset_value = $request->getSearchParams()->getOffset() - $request->getSearchParams()->getLimit();
            
            if ($offset_value < 0) {
                throw StockApiException::WithMessage('Offset should not be negative');
            }
            
            $this->_offset = $offset_value;
            return $this->_doApiCall($request);
        } catch (StockApiException $e) {
            throw StockApiException::withMessage('No more search results available!', $e);
        }
    }
    
    /**
     * Method to get response from last api call.
     * @return LicenseHistoryResponse
     */
    public function getLastLicenseHistory() : LicenseHistoryResponse
    {
        $user_response = new LicenseHistoryResponse();
        
        if (!$this->_initial_invalid_state) {
            $user_response = $this->_current_response;
        }
        
        return $user_response;
    }
    
    /**
     * Method to skip to a specific search files response page.
     * @param int $page_index
     * @throws StockApiException
     * @return LicenseHistoryResponse
     */
    public function getLicenseHistoryPage(int $page_index) : LicenseHistoryResponse
    {
        $request = $this->_current_request;
        $total_pages = $this->getTotalLicenseHistoryPages();
        
        if ($page_index < 0 || ($total_pages !== self::LICENSE_HISTORY_RETURN_ERROR && $page_index >= $total_pages)) {
            throw StockApiException::withMessage('Page index out of bounds');
        }
        
        $offset_value = $page_index * $request->getSearchParams()->getLimit();
        $this->_offset = $offset_value;
        return $this->_doApiCall($request);
    }
    
    /**
     * Method to get total search results pages.
     * @return int
     */
    public function getTotalLicenseHistoryPages() : int
    {
        if (!$this->_initial_invalid_state && $this->_current_response->getNbResults() !== null) {
            return (integer) ceil((double) $this->_current_response->getNbResults() / $this->_current_request->getSearchParams()->getLimit());
        }
        
        return self::LICENSE_HISTORY_RETURN_ERROR;
    }
    
    /**
     * Method to get total search files available.
     * @return int
     */
    public function getTotalLicenseHistoryFiles() : int
    {
        if (!$this->_initial_invalid_state && $this->_current_response->getNbResults() !== null) {
            return $this->_current_response->getNbResults();
        }
        
        return self::LICENSE_HISTORY_RETURN_ERROR;
    }
    
    /**
     * Method to get response from last api call.
     * @return int
     */
    public function currentLicenseHistoryPageIndex() : int
    {
        if (!$this->_initial_invalid_state && $this->_current_response->getNbResults() !== null) {
            $offset_value = $this->_current_request->getSearchParams()->getOffset();
            $result = (integer) (ceil((double) $offset_value / $this->_current_request->getSearchParams()->getLimit()));
            return $result;
        }
        
        return self::LICENSE_HISTORY_RETURN_ERROR;
    }
}

Spamworldpro Mini