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) && 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) && 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); | |
|     } | |
| }
 | |
| 
 |