@ -0,0 +1,3 @@ | |||||
vendor | |||||
.idea | |||||
.vscode |
@ -0,0 +1,34 @@ | |||||
# Pirectus - a small Client for Directus 9 | |||||
This Client Supports Directus 9, it is written in PHP and use Guzzle for handling requests. | |||||
In this Version | |||||
## Installation | |||||
```php | |||||
``` | |||||
## Quickstart | |||||
```php | |||||
require('vendor/autoload.php'); | |||||
use Pirectus\Pirectus; | |||||
use Pirectus\Auth\TokenAuth; | |||||
$pirectus = new Pirectus('<directus-url>', [ | |||||
'auth' => new TokenAuth('<directus-authtoken>') | |||||
]); | |||||
``` | |||||
```php | |||||
$results = $pirectus | |||||
->items('pages') | |||||
->fields(['id', 'title', 'content']) | |||||
->filter([ | |||||
'status' => ['_eq' => 'published'] | |||||
]) | |||||
->find(); | |||||
``` |
@ -0,0 +1,22 @@ | |||||
{ | |||||
"name": "tentakelfabrik/pirectus", | |||||
"version": "0.1.0", | |||||
"type": "library", | |||||
"license": "MIT", | |||||
"authors": [ | |||||
{ | |||||
"name": "Björn Hase", | |||||
"email": "me@tentakelfabrik.de", | |||||
"homepage": "https://tentakelfabrik.de" | |||||
} | |||||
], | |||||
"minimum-stability": "stable", | |||||
"autoload": { | |||||
"psr-4": { | |||||
"Pirectus\\": "src/" | |||||
} | |||||
}, | |||||
"require": { | |||||
"guzzlehttp/guzzle": "^7.0" | |||||
} | |||||
} |
@ -0,0 +1,525 @@ | |||||
{ | |||||
"_readme": [ | |||||
"This file locks the dependencies of your project to a known state", | |||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | |||||
"This file is @generated automatically" | |||||
], | |||||
"content-hash": "16a7f8e2a84fcbee8da3fa43f25eb246", | |||||
"packages": [ | |||||
{ | |||||
"name": "guzzlehttp/guzzle", | |||||
"version": "7.3.0", | |||||
"source": { | |||||
"type": "git", | |||||
"url": "https://github.com/guzzle/guzzle.git", | |||||
"reference": "7008573787b430c1c1f650e3722d9bba59967628" | |||||
}, | |||||
"dist": { | |||||
"type": "zip", | |||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", | |||||
"reference": "7008573787b430c1c1f650e3722d9bba59967628", | |||||
"shasum": "" | |||||
}, | |||||
"require": { | |||||
"ext-json": "*", | |||||
"guzzlehttp/promises": "^1.4", | |||||
"guzzlehttp/psr7": "^1.7 || ^2.0", | |||||
"php": "^7.2.5 || ^8.0", | |||||
"psr/http-client": "^1.0" | |||||
}, | |||||
"provide": { | |||||
"psr/http-client-implementation": "1.0" | |||||
}, | |||||
"require-dev": { | |||||
"bamarni/composer-bin-plugin": "^1.4.1", | |||||
"ext-curl": "*", | |||||
"php-http/client-integration-tests": "^3.0", | |||||
"phpunit/phpunit": "^8.5.5 || ^9.3.5", | |||||
"psr/log": "^1.1" | |||||
}, | |||||
"suggest": { | |||||
"ext-curl": "Required for CURL handler support", | |||||
"ext-intl": "Required for Internationalized Domain Name (IDN) support", | |||||
"psr/log": "Required for using the Log middleware" | |||||
}, | |||||
"type": "library", | |||||
"extra": { | |||||
"branch-alias": { | |||||
"dev-master": "7.3-dev" | |||||
} | |||||
}, | |||||
"autoload": { | |||||
"psr-4": { | |||||
"GuzzleHttp\\": "src/" | |||||
}, | |||||
"files": [ | |||||
"src/functions_include.php" | |||||
] | |||||
}, | |||||
"notification-url": "https://packagist.org/downloads/", | |||||
"license": [ | |||||
"MIT" | |||||
], | |||||
"authors": [ | |||||
{ | |||||
"name": "Michael Dowling", | |||||
"email": "mtdowling@gmail.com", | |||||
"homepage": "https://github.com/mtdowling" | |||||
}, | |||||
{ | |||||
"name": "Márk Sági-Kazár", | |||||
"email": "mark.sagikazar@gmail.com", | |||||
"homepage": "https://sagikazarmark.hu" | |||||
} | |||||
], | |||||
"description": "Guzzle is a PHP HTTP client library", | |||||
"homepage": "http://guzzlephp.org/", | |||||
"keywords": [ | |||||
"client", | |||||
"curl", | |||||
"framework", | |||||
"http", | |||||
"http client", | |||||
"psr-18", | |||||
"psr-7", | |||||
"rest", | |||||
"web service" | |||||
], | |||||
"support": { | |||||
"issues": "https://github.com/guzzle/guzzle/issues", | |||||
"source": "https://github.com/guzzle/guzzle/tree/7.3.0" | |||||
}, | |||||
"funding": [ | |||||
{ | |||||
"url": "https://github.com/GrahamCampbell", | |||||
"type": "github" | |||||
}, | |||||
{ | |||||
"url": "https://github.com/Nyholm", | |||||
"type": "github" | |||||
}, | |||||
{ | |||||
"url": "https://github.com/alexeyshockov", | |||||
"type": "github" | |||||
}, | |||||
{ | |||||
"url": "https://github.com/gmponos", | |||||
"type": "github" | |||||
} | |||||
], | |||||
"time": "2021-03-23T11:33:13+00:00" | |||||
}, | |||||
{ | |||||
"name": "guzzlehttp/promises", | |||||
"version": "1.5.0", | |||||
"source": { | |||||
"type": "git", | |||||
"url": "https://github.com/guzzle/promises.git", | |||||
"reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0" | |||||
}, | |||||
"dist": { | |||||
"type": "zip", | |||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/136a635e2b4a49b9d79e9c8fee267ffb257fdba0", | |||||
"reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0", | |||||
"shasum": "" | |||||
}, | |||||
"require": { | |||||
"php": ">=5.5" | |||||
}, | |||||
"require-dev": { | |||||
"symfony/phpunit-bridge": "^4.4 || ^5.1" | |||||
}, | |||||
"type": "library", | |||||
"extra": { | |||||
"branch-alias": { | |||||
"dev-master": "1.5-dev" | |||||
} | |||||
}, | |||||
"autoload": { | |||||
"psr-4": { | |||||
"GuzzleHttp\\Promise\\": "src/" | |||||
}, | |||||
"files": [ | |||||
"src/functions_include.php" | |||||
] | |||||
}, | |||||
"notification-url": "https://packagist.org/downloads/", | |||||
"license": [ | |||||
"MIT" | |||||
], | |||||
"authors": [ | |||||
{ | |||||
"name": "Graham Campbell", | |||||
"email": "hello@gjcampbell.co.uk", | |||||
"homepage": "https://github.com/GrahamCampbell" | |||||
}, | |||||
{ | |||||
"name": "Michael Dowling", | |||||
"email": "mtdowling@gmail.com", | |||||
"homepage": "https://github.com/mtdowling" | |||||
}, | |||||
{ | |||||
"name": "Tobias Nyholm", | |||||
"email": "tobias.nyholm@gmail.com", | |||||
"homepage": "https://github.com/Nyholm" | |||||
}, | |||||
{ | |||||
"name": "Tobias Schultze", | |||||
"email": "webmaster@tubo-world.de", | |||||
"homepage": "https://github.com/Tobion" | |||||
} | |||||
], | |||||
"description": "Guzzle promises library", | |||||
"keywords": [ | |||||
"promise" | |||||
], | |||||
"support": { | |||||
"issues": "https://github.com/guzzle/promises/issues", | |||||
"source": "https://github.com/guzzle/promises/tree/1.5.0" | |||||
}, | |||||
"funding": [ | |||||
{ | |||||
"url": "https://github.com/GrahamCampbell", | |||||
"type": "github" | |||||
}, | |||||
{ | |||||
"url": "https://github.com/Nyholm", | |||||
"type": "github" | |||||
}, | |||||
{ | |||||
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", | |||||
"type": "tidelift" | |||||
} | |||||
], | |||||
"time": "2021-10-07T13:05:22+00:00" | |||||
}, | |||||
{ | |||||
"name": "guzzlehttp/psr7", | |||||
"version": "2.1.0", | |||||
"source": { | |||||
"type": "git", | |||||
"url": "https://github.com/guzzle/psr7.git", | |||||
"reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" | |||||
}, | |||||
"dist": { | |||||
"type": "zip", | |||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", | |||||
"reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", | |||||
"shasum": "" | |||||
}, | |||||
"require": { | |||||
"php": "^7.2.5 || ^8.0", | |||||
"psr/http-factory": "^1.0", | |||||
"psr/http-message": "^1.0", | |||||
"ralouphie/getallheaders": "^3.0" | |||||
}, | |||||
"provide": { | |||||
"psr/http-factory-implementation": "1.0", | |||||
"psr/http-message-implementation": "1.0" | |||||
}, | |||||
"require-dev": { | |||||
"bamarni/composer-bin-plugin": "^1.4.1", | |||||
"http-interop/http-factory-tests": "^0.9", | |||||
"phpunit/phpunit": "^8.5.8 || ^9.3.10" | |||||
}, | |||||
"suggest": { | |||||
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" | |||||
}, | |||||
"type": "library", | |||||
"extra": { | |||||
"branch-alias": { | |||||
"dev-master": "2.1-dev" | |||||
} | |||||
}, | |||||
"autoload": { | |||||
"psr-4": { | |||||
"GuzzleHttp\\Psr7\\": "src/" | |||||
} | |||||
}, | |||||
"notification-url": "https://packagist.org/downloads/", | |||||
"license": [ | |||||
"MIT" | |||||
], | |||||
"authors": [ | |||||
{ | |||||
"name": "Graham Campbell", | |||||
"email": "hello@gjcampbell.co.uk", | |||||
"homepage": "https://github.com/GrahamCampbell" | |||||
}, | |||||
{ | |||||
"name": "Michael Dowling", | |||||
"email": "mtdowling@gmail.com", | |||||
"homepage": "https://github.com/mtdowling" | |||||
}, | |||||
{ | |||||
"name": "George Mponos", | |||||
"email": "gmponos@gmail.com", | |||||
"homepage": "https://github.com/gmponos" | |||||
}, | |||||
{ | |||||
"name": "Tobias Nyholm", | |||||
"email": "tobias.nyholm@gmail.com", | |||||
"homepage": "https://github.com/Nyholm" | |||||
}, | |||||
{ | |||||
"name": "Márk Sági-Kazár", | |||||
"email": "mark.sagikazar@gmail.com", | |||||
"homepage": "https://github.com/sagikazarmark" | |||||
}, | |||||
{ | |||||
"name": "Tobias Schultze", | |||||
"email": "webmaster@tubo-world.de", | |||||
"homepage": "https://github.com/Tobion" | |||||
}, | |||||
{ | |||||
"name": "Márk Sági-Kazár", | |||||
"email": "mark.sagikazar@gmail.com", | |||||
"homepage": "https://sagikazarmark.hu" | |||||
} | |||||
], | |||||
"description": "PSR-7 message implementation that also provides common utility methods", | |||||
"keywords": [ | |||||
"http", | |||||
"message", | |||||
"psr-7", | |||||
"request", | |||||
"response", | |||||
"stream", | |||||
"uri", | |||||
"url" | |||||
], | |||||
"support": { | |||||
"issues": "https://github.com/guzzle/psr7/issues", | |||||
"source": "https://github.com/guzzle/psr7/tree/2.1.0" | |||||
}, | |||||
"funding": [ | |||||
{ | |||||
"url": "https://github.com/GrahamCampbell", | |||||
"type": "github" | |||||
}, | |||||
{ | |||||
"url": "https://github.com/Nyholm", | |||||
"type": "github" | |||||
}, | |||||
{ | |||||
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", | |||||
"type": "tidelift" | |||||
} | |||||
], | |||||
"time": "2021-10-06T17:43:30+00:00" | |||||
}, | |||||
{ | |||||
"name": "psr/http-client", | |||||
"version": "1.0.1", | |||||
"source": { | |||||
"type": "git", | |||||
"url": "https://github.com/php-fig/http-client.git", | |||||
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" | |||||
}, | |||||
"dist": { | |||||
"type": "zip", | |||||
"url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", | |||||
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", | |||||
"shasum": "" | |||||
}, | |||||
"require": { | |||||
"php": "^7.0 || ^8.0", | |||||
"psr/http-message": "^1.0" | |||||
}, | |||||
"type": "library", | |||||
"extra": { | |||||
"branch-alias": { | |||||
"dev-master": "1.0.x-dev" | |||||
} | |||||
}, | |||||
"autoload": { | |||||
"psr-4": { | |||||
"Psr\\Http\\Client\\": "src/" | |||||
} | |||||
}, | |||||
"notification-url": "https://packagist.org/downloads/", | |||||
"license": [ | |||||
"MIT" | |||||
], | |||||
"authors": [ | |||||
{ | |||||
"name": "PHP-FIG", | |||||
"homepage": "http://www.php-fig.org/" | |||||
} | |||||
], | |||||
"description": "Common interface for HTTP clients", | |||||
"homepage": "https://github.com/php-fig/http-client", | |||||
"keywords": [ | |||||
"http", | |||||
"http-client", | |||||
"psr", | |||||
"psr-18" | |||||
], | |||||
"support": { | |||||
"source": "https://github.com/php-fig/http-client/tree/master" | |||||
}, | |||||
"time": "2020-06-29T06:28:15+00:00" | |||||
}, | |||||
{ | |||||
"name": "psr/http-factory", | |||||
"version": "1.0.1", | |||||
"source": { | |||||
"type": "git", | |||||
"url": "https://github.com/php-fig/http-factory.git", | |||||
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" | |||||
}, | |||||
"dist": { | |||||
"type": "zip", | |||||
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", | |||||
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", | |||||
"shasum": "" | |||||
}, | |||||
"require": { | |||||
"php": ">=7.0.0", | |||||
"psr/http-message": "^1.0" | |||||
}, | |||||
"type": "library", | |||||
"extra": { | |||||
"branch-alias": { | |||||
"dev-master": "1.0.x-dev" | |||||
} | |||||
}, | |||||
"autoload": { | |||||
"psr-4": { | |||||
"Psr\\Http\\Message\\": "src/" | |||||
} | |||||
}, | |||||
"notification-url": "https://packagist.org/downloads/", | |||||
"license": [ | |||||
"MIT" | |||||
], | |||||
"authors": [ | |||||
{ | |||||
"name": "PHP-FIG", | |||||
"homepage": "http://www.php-fig.org/" | |||||
} | |||||
], | |||||
"description": "Common interfaces for PSR-7 HTTP message factories", | |||||
"keywords": [ | |||||
"factory", | |||||
"http", | |||||
"message", | |||||
"psr", | |||||
"psr-17", | |||||
"psr-7", | |||||
"request", | |||||
"response" | |||||
], | |||||
"support": { | |||||
"source": "https://github.com/php-fig/http-factory/tree/master" | |||||
}, | |||||
"time": "2019-04-30T12:38:16+00:00" | |||||
}, | |||||
{ | |||||
"name": "psr/http-message", | |||||
"version": "1.0.1", | |||||
"source": { | |||||
"type": "git", | |||||
"url": "https://github.com/php-fig/http-message.git", | |||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" | |||||
}, | |||||
"dist": { | |||||
"type": "zip", | |||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", | |||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", | |||||
"shasum": "" | |||||
}, | |||||
"require": { | |||||
"php": ">=5.3.0" | |||||
}, | |||||
"type": "library", | |||||
"extra": { | |||||
"branch-alias": { | |||||
"dev-master": "1.0.x-dev" | |||||
} | |||||
}, | |||||
"autoload": { | |||||
"psr-4": { | |||||
"Psr\\Http\\Message\\": "src/" | |||||
} | |||||
}, | |||||
"notification-url": "https://packagist.org/downloads/", | |||||
"license": [ | |||||
"MIT" | |||||
], | |||||
"authors": [ | |||||
{ | |||||
"name": "PHP-FIG", | |||||
"homepage": "http://www.php-fig.org/" | |||||
} | |||||
], | |||||
"description": "Common interface for HTTP messages", | |||||
"homepage": "https://github.com/php-fig/http-message", | |||||
"keywords": [ | |||||
"http", | |||||
"http-message", | |||||
"psr", | |||||
"psr-7", | |||||
"request", | |||||
"response" | |||||
], | |||||
"support": { | |||||
"source": "https://github.com/php-fig/http-message/tree/master" | |||||
}, | |||||
"time": "2016-08-06T14:39:51+00:00" | |||||
}, | |||||
{ | |||||
"name": "ralouphie/getallheaders", | |||||
"version": "3.0.3", | |||||
"source": { | |||||
"type": "git", | |||||
"url": "https://github.com/ralouphie/getallheaders.git", | |||||
"reference": "120b605dfeb996808c31b6477290a714d356e822" | |||||
}, | |||||
"dist": { | |||||
"type": "zip", | |||||
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", | |||||
"reference": "120b605dfeb996808c31b6477290a714d356e822", | |||||
"shasum": "" | |||||
}, | |||||
"require": { | |||||
"php": ">=5.6" | |||||
}, | |||||
"require-dev": { | |||||
"php-coveralls/php-coveralls": "^2.1", | |||||
"phpunit/phpunit": "^5 || ^6.5" | |||||
}, | |||||
"type": "library", | |||||
"autoload": { | |||||
"files": [ | |||||
"src/getallheaders.php" | |||||
] | |||||
}, | |||||
"notification-url": "https://packagist.org/downloads/", | |||||
"license": [ | |||||
"MIT" | |||||
], | |||||
"authors": [ | |||||
{ | |||||
"name": "Ralph Khattar", | |||||
"email": "ralph.khattar@gmail.com" | |||||
} | |||||
], | |||||
"description": "A polyfill for getallheaders.", | |||||
"support": { | |||||
"issues": "https://github.com/ralouphie/getallheaders/issues", | |||||
"source": "https://github.com/ralouphie/getallheaders/tree/develop" | |||||
}, | |||||
"time": "2019-03-08T08:55:37+00:00" | |||||
} | |||||
], | |||||
"packages-dev": [], | |||||
"aliases": [], | |||||
"minimum-stability": "stable", | |||||
"stability-flags": [], | |||||
"prefer-stable": false, | |||||
"prefer-lowest": false, | |||||
"platform": [], | |||||
"platform-dev": [], | |||||
"plugin-api-version": "2.1.0" | |||||
} |
@ -0,0 +1,40 @@ | |||||
<?php | |||||
namespace Pirectus\Auth; | |||||
/** | |||||
* | |||||
* | |||||
* @author Björn Hase | |||||
* @license http://opensource.org/licenses/MIT The MIT License | |||||
* @link https://gitea.tentakelfabrik.de/tentakelfabrik/pirectus Gitea Repository | |||||
* | |||||
*/ | |||||
class TokenAuth | |||||
{ | |||||
/** */ | |||||
private $token = NULL; | |||||
/** | |||||
* setting token | |||||
* | |||||
* @param String $token | |||||
* | |||||
*/ | |||||
public function __construct(String $token) | |||||
{ | |||||
$this->token = $token; | |||||
} | |||||
/** | |||||
* getting token | |||||
* | |||||
* @return String | |||||
* | |||||
*/ | |||||
public function getToken() | |||||
{ | |||||
return $this->token; | |||||
} | |||||
} |
@ -0,0 +1,53 @@ | |||||
<?php | |||||
namespace Pirectus; | |||||
use Pirectus\QueryBuilder\ItemsQueryBuilder; | |||||
/** | |||||
* Client for Directus Api 9 | |||||
* | |||||
* @author Björn Hase, Tentakelfabrik | |||||
* @license http://opensource.org/licenses/MIT The MIT License | |||||
* @link https://gitea.tentakelfabrik.de/tentakelfabrik/pirectus | |||||
* | |||||
*/ | |||||
class Pirectus | |||||
{ | |||||
/** url of api */ | |||||
private $url; | |||||
/** options for client */ | |||||
private $options; | |||||
/** | |||||
* | |||||
* | |||||
* @param string $url | |||||
* @param Array $options | |||||
* | |||||
*/ | |||||
public function __construct(string $url, array $options = []) | |||||
{ | |||||
$this->url = $url; | |||||
$this->options = $options; | |||||
} | |||||
/** | |||||
* set name for items-collection and create ItemsQueryBuilder | |||||
* | |||||
* @param string $name | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function items(string $name) | |||||
{ | |||||
$query = [ | |||||
'endpoint' => '/items/'.$name, | |||||
'parameters' => [] | |||||
]; | |||||
return new ItemsQueryBuilder($query, $this->url, $this->options); | |||||
} | |||||
} |
@ -0,0 +1,104 @@ | |||||
<?php | |||||
namespace Pirectus\QueryBuilder; | |||||
use Pirectus\Request; | |||||
/** | |||||
* Abstract Builder for Query to Directus | |||||
* | |||||
* @author Björn Hase, Tentakelfabrik | |||||
* @license http://opensource.org/licenses/MIT The MIT License | |||||
* @link https://gitea.tentakelfabrik.de/tentakelfabrik/pirectus | |||||
* | |||||
*/ | |||||
abstract class AbstractQueryBuilder | |||||
{ | |||||
/** query ad array */ | |||||
protected $query; | |||||
/** url to directus api */ | |||||
protected $url; | |||||
/** request object with guzzle/client */ | |||||
protected $request; | |||||
/** | |||||
* | |||||
* | |||||
* @param array $query | |||||
* @param array $url | |||||
* @param array $options | |||||
* | |||||
*/ | |||||
public function __construct(array $query, string $url, array $options) | |||||
{ | |||||
$this->query = $query; | |||||
$this->url = $url; | |||||
$this->request = new Request($url, $options); | |||||
} | |||||
/** | |||||
* request get | |||||
* | |||||
* | |||||
* @return array | |||||
* | |||||
*/ | |||||
public function find() | |||||
{ | |||||
$results = $this->request->get($this->query); | |||||
return $results; | |||||
} | |||||
/** | |||||
* request get, getting first result | |||||
* | |||||
* | |||||
* @return array | |||||
* | |||||
*/ | |||||
public function findOne() | |||||
{ | |||||
$results = $this->request->get($this->query); | |||||
// if result has data, reduce to one | |||||
if (isset($results['data']) && isset($results['data'][0])) { | |||||
$results['data'] = $results['data'][0]; | |||||
} | |||||
return $result; | |||||
} | |||||
/** | |||||
* request post, send data to create | |||||
* | |||||
* | |||||
* @param array $data | |||||
* @return array | |||||
* | |||||
*/ | |||||
public function post(array $data) | |||||
{ | |||||
$response = $this->request->post($this->query, $data); | |||||
return $response; | |||||
} | |||||
/** | |||||
* request patch, send data to update | |||||
* | |||||
* | |||||
* @param string $id | |||||
* @param array $data | |||||
* @return | |||||
* | |||||
*/ | |||||
public function patch(string $id, array $data) | |||||
{ | |||||
$response = $this->request->patch($id, $this->query, $data); | |||||
return $response; | |||||
} | |||||
} |
@ -0,0 +1,242 @@ | |||||
<?php | |||||
namespace Pirectus\QueryBuilder; | |||||
use Pirectus\QueryBuilder\AbstractQueryBuilder; | |||||
/** | |||||
* Building Query for Items | |||||
* | |||||
* | |||||
* @author Björn Hase, Tentakelfabrik | |||||
* @license http://opensource.org/licenses/MIT The MIT License | |||||
* @link https://gitea.tentakelfabrik.de/tentakelfabrik/pirectus | |||||
* | |||||
*/ | |||||
class ItemsQueryBuilder extends AbstractQueryBuilder | |||||
{ | |||||
/** | |||||
* set fields | |||||
* | |||||
* @param array $fields | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function fields(array $fields) | |||||
{ | |||||
$this->query['parameters']['fields'] = $fields; | |||||
return $this; | |||||
} | |||||
/** | |||||
* adding fields and merge | |||||
* | |||||
* @param array $fields | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function addFields(array $fields) | |||||
{ | |||||
$this->fillParameter('fields'); | |||||
$this->query['parameters']['fields'] = array_merge($this->query['parameters']['fields'], $fields); | |||||
return $this; | |||||
} | |||||
/** | |||||
* set filter | |||||
* | |||||
* | |||||
* @param array $filter | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function filter(array $filter) | |||||
{ | |||||
$this->query['parameters']['filter'] = $filter; | |||||
return $this; | |||||
} | |||||
/** | |||||
* adding filter and merge | |||||
* | |||||
* | |||||
* @param array $filter | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function addFilter(array $filter) | |||||
{ | |||||
$this->fillParameter('filter'); | |||||
$this->query['parameters']['filter'] = array_merge_recursive($this->query['parameters']['filter'], $filter); | |||||
return $this; | |||||
} | |||||
/** | |||||
* set limit | |||||
* | |||||
* @param int $value | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function limit(int $value) | |||||
{ | |||||
$this->query['parameters']['limit'] = $value; | |||||
return $this; | |||||
} | |||||
/** | |||||
* add offset | |||||
* | |||||
* @param int $value | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function offset(int $value) | |||||
{ | |||||
$this->query['parameters']['offset'] = $value; | |||||
return $this; | |||||
} | |||||
/** | |||||
* set GroupBy | |||||
* | |||||
* @param array $field | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function groupBy(array $groupBy) | |||||
{ | |||||
$this->query['parameters']['groupBy'] = $groupBy; | |||||
return $this; | |||||
} | |||||
/** | |||||
* add offset | |||||
* | |||||
* @param string $field | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function addGroupBy(string $field) | |||||
{ | |||||
$this->fillParameter('groupBy'); | |||||
$this->query['parameters']['groupBy'][] = $field; | |||||
return $this; | |||||
} | |||||
/** | |||||
* set aggregate | |||||
* | |||||
* count, countDistinct, sum, sumDistinct, | |||||
* avg, avgDistinct, min, max | |||||
* | |||||
* @param string $aggregate | |||||
* @param string $field | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function aggregate(string $aggregate, string $field) | |||||
{ | |||||
$this->fillParameter('aggregate'); | |||||
$this->query['parameters']['aggregate'][$aggregate] = $field; | |||||
return $this; | |||||
} | |||||
/** | |||||
* sort | |||||
* | |||||
* [ <field-name>, -<field-name> ] | |||||
* | |||||
* @param array $field | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function sort(array $sort) | |||||
{ | |||||
$this->query['parameters']['sort'] = $sort; | |||||
return $this; | |||||
} | |||||
/** | |||||
* add sort and merge | |||||
* | |||||
* [ <field-name>, -<field-name> ] | |||||
* | |||||
* @param array $field | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function addSort(array $sort) | |||||
{ | |||||
$this->fillParameter('sort'); | |||||
$this->query['parameters']['sort'] = array_merge($this->query['parameters']['sort'], $sort); | |||||
return $this; | |||||
} | |||||
/** | |||||
* search | |||||
* | |||||
* @param string $value | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function search(string $value) | |||||
{ | |||||
$this->query['parameters']['search'] = $value; | |||||
return $this; | |||||
} | |||||
/** | |||||
* meta | |||||
* | |||||
* total_count, filter_count, * | |||||
* | |||||
* @param string $value | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function meta(string $value) | |||||
{ | |||||
$this->query['parameters']['meta'] = $value; | |||||
return $this; | |||||
} | |||||
/** | |||||
* set aliases | |||||
* | |||||
* | |||||
* @param string $value | |||||
* @return \Pirectus\ItemsQueryBuilder | |||||
* | |||||
*/ | |||||
public function aliases(string $field, string $alias) | |||||
{ | |||||
$this->query['parameters']['alias'][$field] = $alias; | |||||
return $this; | |||||
} | |||||
/** | |||||
* if fields not set, add empty array | |||||
* | |||||
* @param string $field | |||||
* | |||||
*/ | |||||
private function fill(string $field) | |||||
{ | |||||
if (!isset($this->query['parameters'][$field])) { | |||||
$this->query['parameters'][$field] = []; | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,187 @@ | |||||
<?php | |||||
namespace Pirectus; | |||||
use Pirectus\Auth\TokenAuth; | |||||
use GuzzleHttp\Client; | |||||
/** | |||||
* Crete Requests, Parse Parameters and Response with Guzzle to Api | |||||
* | |||||
* | |||||
* @author Björn Hase, Tentakelfabrik | |||||
* @license http://opensource.org/licenses/MIT The MIT License | |||||
* @link https://gitea.tentakelfabrik.de/tentakelfabrik/pirectus | |||||
* | |||||
*/ | |||||
class Request | |||||
{ | |||||
/** client guzzle */ | |||||
private $client; | |||||
/** options */ | |||||
private $options; | |||||
/** headers */ | |||||
private $headers = [ | |||||
'Accept' => 'application/json', | |||||
'Content-Type' => 'application/json' | |||||
]; | |||||
/** | |||||
* | |||||
* | |||||
* @param string $url | |||||
* @param array $options | |||||
* | |||||
*/ | |||||
public function __construct(atring $url, array $options) | |||||
{ | |||||
$this->options = $options; | |||||
// create client with base url | |||||
$this->client = new Client([ | |||||
'base_uri' => $url | |||||
]); | |||||
} | |||||
/** | |||||
* building http headers for request | |||||
* | |||||
* @return array | |||||
* | |||||
*/ | |||||
public function buildHeaders() | |||||
{ | |||||
if (isset($this->options['auth']) && $this->options['auth'] instanceof TokenAuth) { | |||||
$headers = array_merge($this->headers, [ | |||||
'Authorization' => 'Bearer '.$this->options['auth']->getToken() | |||||
]); | |||||
} | |||||
return $headers; | |||||
} | |||||
/** | |||||
* build parameters for query | |||||
* | |||||
* @param array $query | |||||
* @return string | |||||
* | |||||
*/ | |||||
public function buildParameters(Array $query) | |||||
{ | |||||
// | |||||
$parameters = []; | |||||
// | |||||
$result = ''; | |||||
if (isset($query['parameters']['filter'])) { | |||||
$parameters['filter'] = json_encode($query['parameters']['filter']); | |||||
} | |||||
if (isset($query['parameters']['fields'])) { | |||||
$parameters['fields'] = implode(',', $query['parameters']['fields']); | |||||
} | |||||
if (isset($query['parameters']['limit'])) { | |||||
$parameters['limit'] = intval($query['parameters']['limit']); | |||||
} | |||||
if (isset($query['parameters']['offset'])) { | |||||
$parameters['offset'] = intval($query['parameters']['offset']); | |||||
} | |||||
if (isset($query['parameters']['sort'])) { | |||||
$parameters['sort'] = implode(',', $query['parameters']['sort']); | |||||
} | |||||
if (isset($query['parameters']['meta'])) { | |||||
$parameters['meta'] = $query['parameters']['meta']; | |||||
} | |||||
if (isset($query['parameters']['search'])) { | |||||
$parameters['search'] = $query['parameters']['search']; | |||||
} | |||||
if (isset($query['parameters']['groupBy'])) { | |||||
$parameters['groupBy'] = intval($query['parameters']['sort']); | |||||
} | |||||
if (isset($query['parameters']['aggregate'])) { | |||||
$parameters['meta'] = $query['parameters']['aggregate']; | |||||
} | |||||
if (isset($query['parameters']['alias'])) { | |||||
$parameters['alias'] = $query['parameters']['alias']; | |||||
} | |||||
if (count($parameters) > 0) { | |||||
$result = http_build_query($parameters); | |||||
} | |||||
return $result; | |||||
} | |||||
/** | |||||
* get entites in Directus Api | |||||
* | |||||
* @param array $query | |||||
* @return mixed | |||||
* | |||||
*/ | |||||
public function get(array $query) | |||||
{ | |||||
$response = $this->client->request('get', $query['endpoint'], [ | |||||
'query' => $this->buildParameters($query), | |||||
'headers' => $this->buildHeaders() | |||||
]); | |||||
$results = json_decode($response->getBody(), true); | |||||
return $results; | |||||
} | |||||
/** | |||||
* post single entity in Directus Api | |||||
* | |||||
* @param array $query | |||||
* @param array $data | |||||
* @return mixed | |||||
* | |||||
*/ | |||||
public function post(array $query, array $data) | |||||
{ | |||||
$response = $this->client->request('post', $query['endpoint'], [ | |||||
'headers' => $this->buildHeaders(), | |||||
'body' => json_encode($data) | |||||
]); | |||||
$results = json_decode($response->getBody(), true); | |||||
return $results; | |||||
} | |||||
/** | |||||
* patch single entity in Directus Api | |||||
* | |||||
* @param string $id | |||||
* @param array $query | |||||
* @param array $data | |||||
* @return mixed | |||||
* | |||||
*/ | |||||
public function patch(string $id, array $query, array $data) | |||||
{ | |||||
$response = $this->client->request('patch', $query['endpoint'].'/'.$id, [ | |||||
'headers' => $this->buildHeaders(), | |||||
'body' => json_encode($data) | |||||
]); | |||||
$results = json_decode($response->getBody(), true); | |||||
return $results; | |||||
} | |||||
} |