sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							243 lines
						
					
					
						
							6.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							243 lines
						
					
					
						
							6.1 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								namespace Github\Api;
							 | 
						|
								
							 | 
						|
								use Github\Client;
							 | 
						|
								use Github\HttpClient\Message\ResponseMediator;
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Abstract class for Api classes.
							 | 
						|
								 *
							 | 
						|
								 * @author Joseph Bielawski <stloyd@gmail.com>
							 | 
						|
								 */
							 | 
						|
								abstract class AbstractApi implements ApiInterface
							 | 
						|
								{
							 | 
						|
								    /**
							 | 
						|
								     * The client.
							 | 
						|
								     *
							 | 
						|
								     * @var Client
							 | 
						|
								     */
							 | 
						|
								    protected $client;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * The requested page (GitHub pagination).
							 | 
						|
								     *
							 | 
						|
								     * @var null|int
							 | 
						|
								     */
							 | 
						|
								    private $page;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Number of items per page (GitHub pagination).
							 | 
						|
								     *
							 | 
						|
								     * @var null|int
							 | 
						|
								     */
							 | 
						|
								    protected $perPage;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @param Client $client
							 | 
						|
								     */
							 | 
						|
								    public function __construct(Client $client)
							 | 
						|
								    {
							 | 
						|
								        $this->client = $client;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function configure()
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @return null|int
							 | 
						|
								     */
							 | 
						|
								    public function getPage()
							 | 
						|
								    {
							 | 
						|
								        return $this->page;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @param null|int $page
							 | 
						|
								     */
							 | 
						|
								    public function setPage($page)
							 | 
						|
								    {
							 | 
						|
								        $this->page = (null === $page ? $page : (int) $page);
							 | 
						|
								
							 | 
						|
								        return $this;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @return null|int
							 | 
						|
								     */
							 | 
						|
								    public function getPerPage()
							 | 
						|
								    {
							 | 
						|
								        return $this->perPage;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @param null|int $perPage
							 | 
						|
								     */
							 | 
						|
								    public function setPerPage($perPage)
							 | 
						|
								    {
							 | 
						|
								        $this->perPage = (null === $perPage ? $perPage : (int) $perPage);
							 | 
						|
								
							 | 
						|
								        return $this;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Send a GET request with query parameters.
							 | 
						|
								     *
							 | 
						|
								     * @param string $path           Request path.
							 | 
						|
								     * @param array  $parameters     GET parameters.
							 | 
						|
								     * @param array  $requestHeaders Request Headers.
							 | 
						|
								     *
							 | 
						|
								     * @return array|string
							 | 
						|
								     */
							 | 
						|
								    protected function get($path, array $parameters = [], array $requestHeaders = [])
							 | 
						|
								    {
							 | 
						|
								        if (null !== $this->page && !isset($parameters['page'])) {
							 | 
						|
								            $parameters['page'] = $this->page;
							 | 
						|
								        }
							 | 
						|
								        if (null !== $this->perPage && !isset($parameters['per_page'])) {
							 | 
						|
								            $parameters['per_page'] = $this->perPage;
							 | 
						|
								        }
							 | 
						|
								        if (array_key_exists('ref', $parameters) && is_null($parameters['ref'])) {
							 | 
						|
								            unset($parameters['ref']);
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        if (count($parameters) > 0) {
							 | 
						|
								            $path .= '?'.http_build_query($parameters);
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $response = $this->client->getHttpClient()->get($path, $requestHeaders);
							 | 
						|
								
							 | 
						|
								        return ResponseMediator::getContent($response);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Send a HEAD request with query parameters.
							 | 
						|
								     *
							 | 
						|
								     * @param string $path           Request path.
							 | 
						|
								     * @param array  $parameters     HEAD parameters.
							 | 
						|
								     * @param array  $requestHeaders Request headers.
							 | 
						|
								     *
							 | 
						|
								     * @return \Psr\Http\Message\ResponseInterface
							 | 
						|
								     */
							 | 
						|
								    protected function head($path, array $parameters = [], array $requestHeaders = [])
							 | 
						|
								    {
							 | 
						|
								        if (array_key_exists('ref', $parameters) && is_null($parameters['ref'])) {
							 | 
						|
								            unset($parameters['ref']);
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $response = $this->client->getHttpClient()->head($path.'?'.http_build_query($parameters), $requestHeaders);
							 | 
						|
								
							 | 
						|
								        return $response;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Send a POST request with JSON-encoded parameters.
							 | 
						|
								     *
							 | 
						|
								     * @param string $path           Request path.
							 | 
						|
								     * @param array  $parameters     POST parameters to be JSON encoded.
							 | 
						|
								     * @param array  $requestHeaders Request headers.
							 | 
						|
								     *
							 | 
						|
								     * @return array|string
							 | 
						|
								     */
							 | 
						|
								    protected function post($path, array $parameters = [], array $requestHeaders = [])
							 | 
						|
								    {
							 | 
						|
								        return $this->postRaw(
							 | 
						|
								            $path,
							 | 
						|
								            $this->createJsonBody($parameters),
							 | 
						|
								            $requestHeaders
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Send a POST request with raw data.
							 | 
						|
								     *
							 | 
						|
								     * @param string $path           Request path.
							 | 
						|
								     * @param string $body           Request body.
							 | 
						|
								     * @param array  $requestHeaders Request headers.
							 | 
						|
								     *
							 | 
						|
								     * @return array|string
							 | 
						|
								     */
							 | 
						|
								    protected function postRaw($path, $body, array $requestHeaders = [])
							 | 
						|
								    {
							 | 
						|
								        $response = $this->client->getHttpClient()->post(
							 | 
						|
								            $path,
							 | 
						|
								            $requestHeaders,
							 | 
						|
								            $body
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        return ResponseMediator::getContent($response);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Send a PATCH request with JSON-encoded parameters.
							 | 
						|
								     *
							 | 
						|
								     * @param string $path           Request path.
							 | 
						|
								     * @param array  $parameters     POST parameters to be JSON encoded.
							 | 
						|
								     * @param array  $requestHeaders Request headers.
							 | 
						|
								     *
							 | 
						|
								     * @return array|string
							 | 
						|
								     */
							 | 
						|
								    protected function patch($path, array $parameters = [], array $requestHeaders = [])
							 | 
						|
								    {
							 | 
						|
								        $response = $this->client->getHttpClient()->patch(
							 | 
						|
								            $path,
							 | 
						|
								            $requestHeaders,
							 | 
						|
								            $this->createJsonBody($parameters)
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        return ResponseMediator::getContent($response);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Send a PUT request with JSON-encoded parameters.
							 | 
						|
								     *
							 | 
						|
								     * @param string $path           Request path.
							 | 
						|
								     * @param array  $parameters     POST parameters to be JSON encoded.
							 | 
						|
								     * @param array  $requestHeaders Request headers.
							 | 
						|
								     *
							 | 
						|
								     * @return array|string
							 | 
						|
								     */
							 | 
						|
								    protected function put($path, array $parameters = [], array $requestHeaders = [])
							 | 
						|
								    {
							 | 
						|
								        $response = $this->client->getHttpClient()->put(
							 | 
						|
								            $path,
							 | 
						|
								            $requestHeaders,
							 | 
						|
								            $this->createJsonBody($parameters)
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        return ResponseMediator::getContent($response);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Send a DELETE request with JSON-encoded parameters.
							 | 
						|
								     *
							 | 
						|
								     * @param string $path           Request path.
							 | 
						|
								     * @param array  $parameters     POST parameters to be JSON encoded.
							 | 
						|
								     * @param array  $requestHeaders Request headers.
							 | 
						|
								     *
							 | 
						|
								     * @return array|string
							 | 
						|
								     */
							 | 
						|
								    protected function delete($path, array $parameters = [], array $requestHeaders = [])
							 | 
						|
								    {
							 | 
						|
								        $response = $this->client->getHttpClient()->delete(
							 | 
						|
								            $path,
							 | 
						|
								            $requestHeaders,
							 | 
						|
								            $this->createJsonBody($parameters)
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        return ResponseMediator::getContent($response);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Create a JSON encoded version of an array of parameters.
							 | 
						|
								     *
							 | 
						|
								     * @param array $parameters Request parameters
							 | 
						|
								     *
							 | 
						|
								     * @return null|string
							 | 
						|
								     */
							 | 
						|
								    protected function createJsonBody(array $parameters)
							 | 
						|
								    {
							 | 
						|
								        return (count($parameters) === 0) ? null : json_encode($parameters, empty($parameters) ? JSON_FORCE_OBJECT : 0);
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |