1
0
mirror of https://github.com/flextype/flextype.git synced 2025-08-08 06:06:45 +02:00

feat(rest-api): Media Folders Rest API

- add ability to send options for fetch() methods. #511
- add ability to call macroable fetch methods. #512
This commit is contained in:
Awilum
2020-12-17 16:47:44 +03:00
parent e810d468ce
commit e2c5c8c2d9

View File

@@ -11,6 +11,7 @@ namespace Flextype;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Http\Response;
use Atomastic\Arrays\Arrays;
use function array_replace_recursive;
use function count;
@@ -42,25 +43,17 @@ flextype()->get('/api/folders', function (Request $request, Response $response)
// Get Query Params
$query = $request->getQueryParams();
if (! isset($query['path']) || ! isset($query['token'])) {
if (! isset($query['id']) || ! isset($query['token'])) {
return $response->withStatus($api_errors['0600']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0600']));
}
// Set variables
$path = $query['path'];
$id = $query['id'];
$token = $query['token'];
if (isset($query['collection'])) {
if ($query['collection'] === 'true') {
$collection = true;
} else {
$collection = false;
}
} else {
$collection = false;
}
$options = $query['options'] ?? [];
$method = $query['method'] ?? '';
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
// Validate delivery token
@@ -81,13 +74,18 @@ flextype()->get('/api/folders', function (Request $request, Response $response)
// Create folders array
$folders = [];
// Get list if folder or fodlers for specific folder
if ($collection) {
$folders = flextype('media_folders')->fetchCollection($path)->toArray();
if (isset($method) &&
strpos($method, 'fetch') !== false &&
is_callable([flextype('media_folders'), $method])) {
$fetchFromCallbackMethod = $method;
} else {
$folders = flextype('media_folders')->fetchSingle($path)->toArray();
$fetchFromCallbackMethod = 'fetch';
}
// Get fetch result
$folders = flextype('media_folders')->{$fetchFromCallbackMethod}($id, $options);
$folders = ($folders instanceof Arrays) ? $folders->toArray() : $folders;
// Write response data
$response_data = [];
$response_data['data'] = $folders;
@@ -158,7 +156,7 @@ flextype()->post('/api/folders', function (Request $request, Response $response)
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$path = $post_data['path'];
$id = $post_data['path'];
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
// Validate files and access token
@@ -190,12 +188,12 @@ flextype()->post('/api/folders', function (Request $request, Response $response)
}
// Create folder
$create_folder = flextype('media_folders')->create($path);
$create_folder = flextype('media_folders')->create($id);
$response_data = [];
if ($create_folder) {
$response_data['data'] = flextype('media_folders')->fetchSingle($path);
$response_data['data'] = flextype('media_folders')->fetch($id);
}
// Set response code
@@ -264,7 +262,7 @@ flextype()->put('/api/folders/copy', function (Request $request, Response $respo
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$path = $post_data['path'];
$id = $post_data['path'];
$new_path = $post_data['new_path'];
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
@@ -297,12 +295,12 @@ flextype()->put('/api/folders/copy', function (Request $request, Response $respo
}
// Copy folder
$copy_folder = flextype('media_folders')->copy($path, $new_path);
$copy_folder = flextype('media_folders')->copy($id, $new_path);
$response_data = [];
if ($copy_folder) {
$response_data['data'] = flextype('media_folders')->fetchSingle($new_path);
$response_data['data'] = flextype('media_folders')->fetch($new_path);
} else {
$response_data['data'] = $copy_folder;
}
@@ -373,7 +371,7 @@ flextype()->put('/api/folders', function (Request $request, Response $response)
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$path = $post_data['path'];
$id = $post_data['path'];
$new_path = $post_data['new_path'];
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
@@ -406,12 +404,12 @@ flextype()->put('/api/folders', function (Request $request, Response $response)
}
// Rename folder
$move_folder = flextype('media_folders')->move($path, $new_path);
$move_folder = flextype('media_folders')->move($id, $new_path);
$response_data = [];
if ($move_folder) {
$response_data['data'] = flextype('media_folders')->fetchSingle($new_path);
$response_data['data'] = flextype('media_folders')->fetch($new_path);
}
// Set response code
@@ -479,7 +477,7 @@ flextype()->delete('/api/folders', function (Request $request, Response $respons
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$path = $post_data['path'];
$id = $post_data['path'];
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
// Validate files and access token
@@ -511,7 +509,7 @@ flextype()->delete('/api/folders', function (Request $request, Response $respons
}
// Delete folder
$delete_folder = flextype('media_folders')->delete($path);
$delete_folder = flextype('media_folders')->delete($id);
// Set response code
$response_code = $delete_folder ? 204 : 404;