From 9a9efe4ab03425bf4849f9645832d0153a3bcce4 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 30 Jul 2019 20:23:16 +0200 Subject: [PATCH] cleanup, media fixes, news fixes --- Admin/Routes/Web/Api.php | 11 ++++++- Controller/ApiController.php | 50 +++++++++++++++++++++++++++++- Models/Upload.js | 8 ++--- Theme/Backend/media-single.tpl.php | 28 +++++++++++------ Views/MediaView.php | 19 +++++++++++- 5 files changed, 100 insertions(+), 16 deletions(-) diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index 034ddcb..6600069 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -9,7 +9,7 @@ return [ '^.*/media(\?+.*|$)' => [ [ 'dest' => '\Modules\Media\Controller\ApiController:apiMediaUpload', - 'verb' => RouteVerb::SET, + 'verb' => RouteVerb::PUT, 'permission' => [ 'module' => ApiController::MODULE_NAME, 'type' => PermissionType::CREATE, @@ -21,6 +21,15 @@ return [ ], ], ], + [ + 'dest' => '\Modules\Media\Controller\ApiController:apiMediaUpdate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => ApiController::MODULE_NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionState::MEDIA, + ], + ], ], // todo: the order of find is bad but needed for now. '^.*/media/find.*$' => [ diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 13c23e8..1b5d3c8 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -63,7 +63,7 @@ final class ApiController extends Controller } /** - * Shows api content. + * Api method to upload media file. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -209,4 +209,52 @@ final class ApiController extends Controller ) ); } + + /** + * Api method to update media. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiMediaUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $old = clone MediaMapper::get((int) $request->getData('id')); + $new = $this->updateMediaFromRequest($request); + $this->updateModel($request, $old, $new, MediaMapper::class, 'media'); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Media', 'Media successfully updated', $new); + } + + /** + * Method to update media from request. + * + * @param RequestAbstract $request Request + * + * @return Media + * + * @since 1.0.0 + */ + private function updateMediaFromRequest(RequestAbstract $request) : Media + { + $media = MediaMapper::get((int) $request->getData('id')); + $media->setName((string) ($request->getData('name') ?? $media->getName())); + $media->setVirtualPath((string) ($request->getData('virtualpath') ?? $media->getVirtualPath())); + + if ($request->getData('content') !== null) { + \file_put_contents( + $media->isAbsolute() ? $media->getPath() : __DIR__ . '/../../../../' . \ltrim($media->getPath(), '/'), + $request->getData('content') + ); + + $media->setSize(\strlen($request->getData('content'))); + } + + return $media; + } } diff --git a/Models/Upload.js b/Models/Upload.js index b2eb8ce..0725941 100644 --- a/Models/Upload.js +++ b/Models/Upload.js @@ -1,7 +1,7 @@ -import { Request } from '../../../jsOMS/Message/Request/Request.js'; -import { RequestType } from '../../../jsOMS/Message/Request/RequestType.js'; -import { RequestMethod } from '../../../jsOMS/Message/Request/RequestMethod.js'; import { Logger } from '../../../jsOMS/Log/Logger.js'; +import { Request } from '../../../jsOMS/Message/Request/Request.js'; +import { RequestMethod } from '../../../jsOMS/Message/Request/RequestMethod.js'; +import { RequestType } from '../../../jsOMS/Message/Request/RequestType.js'; /** * Media uploader. @@ -157,7 +157,7 @@ export class Upload { request.setData(formData); request.setType(RequestType.FILE); request.setUri(this.uri); - request.setMethod(RequestMethod.POST); + request.setMethod(RequestMethod.PUT); request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest'); request.setSuccess(function (xhr) { diff --git a/Theme/Backend/media-single.tpl.php b/Theme/Backend/media-single.tpl.php index 04a6e7e..49c241a 100644 --- a/Theme/Backend/media-single.tpl.php +++ b/Theme/Backend/media-single.tpl.php @@ -93,26 +93,36 @@ echo $this->getData('nav')->render();
-
+
filePathFunction($media, $this->request->getData('sub') ?? ''); - if ($this->isImageFunction($media, $path)) : ?> + if ($this->isImageFile($media, $path)) : ?>
- - + isTextFile($media, $path)) : ?> +
+ + + +
+ isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/'))) : ?>
-
-                    lineContentFunction($media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/'));
-                    foreach ($output as $line) : ?>printHtml($line); ?>
-                    
+ + +
getFileContent($media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/')); ?>
diff --git a/Views/MediaView.php b/Views/MediaView.php index 7ffed01..0143458 100644 --- a/Views/MediaView.php +++ b/Views/MediaView.php @@ -69,6 +69,14 @@ class MediaView extends View ); } + protected function getFileContent(string $path) : string + { + $output = \file_get_contents($path); + $output = \str_replace(["\r\n", "\r"], "\n", $output); + + return $output; + } + protected function lineContentFunction(string $path) : array { $output = \file_get_contents($path); @@ -77,9 +85,18 @@ class MediaView extends View return \explode("\n", $output); } - protected function isImageFunction(Media $media, string $path) : bool + protected function isImageFile(Media $media, string $path) : bool { return FileUtils::getExtensionType($media->getExtension()) === ExtensionType::IMAGE || FileUtils::getExtensionType(File::extension($path)) === ExtensionType::IMAGE; } + + protected function isTextFile(Media $media, string $path) : bool + { + $mediaExtension = FileUtils::getExtensionType($media->getExtension()); + $pathExtension = FileUtils::getExtensionType(File::extension($path)); + + return $mediaExtension === ExtensionType::TEXT || $pathExtension === ExtensionType::TEXT + || $mediaExtension === ExtensionType::CODE || $pathExtension === ExtensionType::CODE; + } }