mirror of
https://github.com/flextype/flextype.git
synced 2025-08-08 06:06:45 +02:00
feat(rest-api): Media Files Rest API
- add ability to send options for fetch() methods. #510 - add ability to call macroable fetch methods. #513
This commit is contained in:
@@ -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 basename;
|
||||
@@ -43,15 +44,17 @@ flextype()->get('/api/files', function (Request $request, Response $response) us
|
||||
// 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['0500']['http_status_code'])
|
||||
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
|
||||
->write(flextype('json')->encode($api_errors['0500']));
|
||||
}
|
||||
|
||||
// Set variables
|
||||
$path = $query['path'];
|
||||
$id = $query['id'];
|
||||
$token = $query['token'];
|
||||
$options = $query['options'] ?? [];
|
||||
$method = $query['method'] ?? '';
|
||||
|
||||
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
|
||||
// Validate delivery token
|
||||
@@ -73,13 +76,18 @@ flextype()->get('/api/files', function (Request $request, Response $response) us
|
||||
// Create files array
|
||||
$files = [];
|
||||
|
||||
// Get list if file or files for specific folder
|
||||
if (is_dir(PATH['project'] . '/uploads/' . $path)) {
|
||||
$files = flextype('media_files')->fetchCollection($path)->toArray();
|
||||
if (isset($method) &&
|
||||
strpos($method, 'fetch') !== false &&
|
||||
is_callable([flextype('media_files'), $method])) {
|
||||
$fetchFromCallbackMethod = $method;
|
||||
} else {
|
||||
$files = flextype('media_files')->fetchSingle($path)->toArray();
|
||||
$fetchFromCallbackMethod = 'fetch';
|
||||
}
|
||||
|
||||
// Get fetch result
|
||||
$files = flextype('media_files')->{$fetchFromCallbackMethod}($id, $options);
|
||||
$files = ($files instanceof Arrays) ? $files->toArray() : $files;
|
||||
|
||||
// Write response data
|
||||
$response_data = [];
|
||||
$response_data['data'] = $files;
|
||||
@@ -190,7 +198,7 @@ flextype()->post('/api/files', function (Request $request, Response $response) u
|
||||
$response_data['data'] = [];
|
||||
|
||||
if ($create_file) {
|
||||
$response_data['data'] = flextype('media_files')->fetchSingle($folder . '/' . basename($create_file));
|
||||
$response_data['data'] = flextype('media_files')->fetch($folder . '/' . basename($create_file));
|
||||
}
|
||||
|
||||
// Set response code
|
||||
@@ -260,7 +268,7 @@ flextype()->put('/api/files', function (Request $request, Response $response) us
|
||||
// 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.files.enabled')) {
|
||||
@@ -295,12 +303,12 @@ flextype()->put('/api/files', function (Request $request, Response $response) us
|
||||
}
|
||||
|
||||
// Rename file
|
||||
$rename_file = flextype('media_files')->move($path, $new_path);
|
||||
$rename_file = flextype('media_files')->move($id, $new_path);
|
||||
|
||||
$response_data['data'] = [];
|
||||
|
||||
if ($rename_file) {
|
||||
$response_data['data'] = flextype('media_files')->fetchSingle($new_path);
|
||||
$response_data['data'] = flextype('media_files')->fetch($new_path);
|
||||
}
|
||||
|
||||
// Set response code
|
||||
@@ -369,7 +377,7 @@ flextype()->put('/api/files/copy', 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'];
|
||||
$new_path = $post_data['new_path'];
|
||||
|
||||
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
|
||||
@@ -404,12 +412,12 @@ flextype()->put('/api/files/copy', function (Request $request, Response $respons
|
||||
}
|
||||
|
||||
// Copy file
|
||||
$copy_file = flextype('media_files')->copy($path, $new_path);
|
||||
$copy_file = flextype('media_files')->copy($id, $new_path);
|
||||
|
||||
$response_data['data'] = [];
|
||||
|
||||
if ($copy_file) {
|
||||
$response_data['data'] = flextype('media_files')->fetchSingle($new_path);
|
||||
$response_data['data'] = flextype('media_files')->fetch($new_path);
|
||||
}
|
||||
|
||||
// Set response code
|
||||
@@ -477,7 +485,7 @@ flextype()->delete('/api/files', 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.files.enabled')) {
|
||||
// Validate files and access token
|
||||
@@ -511,7 +519,7 @@ flextype()->delete('/api/files', function (Request $request, Response $response)
|
||||
}
|
||||
|
||||
// Delete file
|
||||
$delete_file = flextype('media_files')->delete($path);
|
||||
$delete_file = flextype('media_files')->delete($id);
|
||||
|
||||
// Set response code
|
||||
$response_code = $delete_file ? 204 : 404;
|
||||
@@ -580,7 +588,7 @@ flextype()->patch('/api/files/meta', 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'];
|
||||
$field = $post_data['field'];
|
||||
$value = $post_data['value'];
|
||||
|
||||
@@ -616,12 +624,12 @@ flextype()->patch('/api/files/meta', function (Request $request, Response $respo
|
||||
}
|
||||
|
||||
// Update file meta
|
||||
$update_file_meta = flextype('media_files_meta')->update($path, $field, $value);
|
||||
$update_file_meta = flextype('media_files_meta')->update($id, $field, $value);
|
||||
|
||||
$response_data['data'] = [];
|
||||
|
||||
if ($update_file_meta) {
|
||||
$response_data['data'] = flextype('media_files')->fetchSingle($path);
|
||||
$response_data['data'] = flextype('media_files')->fetch($id);
|
||||
}
|
||||
|
||||
// Set response code
|
||||
@@ -691,7 +699,7 @@ flextype()->post('/api/files/meta', function (Request $request, Response $respon
|
||||
// Set variables
|
||||
$token = $post_data['token'];
|
||||
$access_token = $post_data['access_token'];
|
||||
$path = $post_data['path'];
|
||||
$id = $post_data['path'];
|
||||
$field = $post_data['field'];
|
||||
$value = $post_data['value'];
|
||||
|
||||
@@ -727,12 +735,12 @@ flextype()->post('/api/files/meta', function (Request $request, Response $respon
|
||||
}
|
||||
|
||||
// Add file meta
|
||||
$add_file_meta = flextype('media_files_meta')->add($path, $field, $value);
|
||||
$add_file_meta = flextype('media_files_meta')->add($id, $field, $value);
|
||||
|
||||
$response_data['data'] = [];
|
||||
|
||||
if ($add_file_meta) {
|
||||
$response_data['data'] = flextype('media_files')->fetchSingle($path);
|
||||
$response_data['data'] = flextype('media_files')->fetch($id);
|
||||
}
|
||||
|
||||
// Set response code
|
||||
@@ -802,7 +810,7 @@ flextype()->delete('/api/files/meta', function (Request $request, Response $resp
|
||||
// Set variables
|
||||
$token = $post_data['token'];
|
||||
$access_token = $post_data['access_token'];
|
||||
$path = $post_data['path'];
|
||||
$id = $post_data['path'];
|
||||
$field = $post_data['field'];
|
||||
|
||||
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
|
||||
@@ -837,12 +845,12 @@ flextype()->delete('/api/files/meta', function (Request $request, Response $resp
|
||||
}
|
||||
|
||||
// Delete file meta
|
||||
$delete_file_meta = flextype('media_files_meta')->delete($path, $field);
|
||||
$delete_file_meta = flextype('media_files_meta')->delete($id, $field);
|
||||
|
||||
$response_data['data'] = [];
|
||||
|
||||
if ($delete_file_meta) {
|
||||
$response_data['data'] = flextype('media_files')->fetchSingle($path);
|
||||
$response_data['data'] = flextype('media_files')->fetch($id);
|
||||
}
|
||||
|
||||
// Set response code
|
||||
|
Reference in New Issue
Block a user