commit
dbde1d5c04
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue