| @ -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; | |||
| } | |||
| } | |||