diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index ddf2310..e5e3344 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -26,6 +26,17 @@ return [ ], ], ], + '^.*/media/file(\?+.*|$)' => [ + [ + 'dest' => '\Modules\Media\Controller\ApiController:apiMediaCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => ApiController::MODULE_NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionState::MEDIA, + ], + ], + ], '^.*/media/find.*$' => [ [ 'dest' => '\Modules\Media\Controller\ApiController:apiMediaFind', diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 0aaaecb..17ebd33 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -362,4 +362,53 @@ final class ApiController extends Controller return $mediaCollection; } + + /** + * Api method to create media file. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiMediaCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $virtualPath = (string) ($request->getData('path') ?? ''); + $fileName = (string) ($request->getData('fileName') ?? ''); + $pathSettings = (int) ($request->getData('pathsettings') ?? PathSettings::RANDOM_PATH); + + $outputDir = ''; + if ($pathSettings === PathSettings::RANDOM_PATH) { + $outputDir = self::createMediaPath(__DIR__ . '/../../../Modules/Media/Files'); + } elseif ($pathSettings === PathSettings::FILE_PATH) { + $outputDir = __DIR__ . '/../../../Modules/Media/Files/' . \ltrim($virtualPath, '\\/'); + } + + \file_put_contents($outputDir . '/' . $fileName, (string) ($request->getData('content') ?? '')); + + $status = [ + [ + 'status' => UploadStatus::OK, + 'path' => $outputDir . '/' . $fileName, + 'filename' => $fileName, + 'name' => $request->getData('name') ?? '', + 'size' => \strlen((string) ($request->getData('content') ?? '')), + 'extension' => \substr($fileName, \strripos($fileName, '.')), + ], + ]; + + $created = $this->createDbEntries($status, $request->getHeader()->getAccount(), $virtualPath); + + $ids = []; + foreach ($created as $file) { + $ids[] = $file->getId(); + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Media', 'Media successfully created.', $ids); + } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index b469b55..aaed283 100644 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -246,6 +246,9 @@ final class BackendController extends Controller $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Media/Theme/Backend/media-file-create'); + $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); + $view->addData('editor', $editor); + return $view; } diff --git a/Theme/Backend/media-file-create.tpl.php b/Theme/Backend/media-file-create.tpl.php index e69de29..a7f1d27 100644 --- a/Theme/Backend/media-file-create.tpl.php +++ b/Theme/Backend/media-file-create.tpl.php @@ -0,0 +1,53 @@ + +
+
+
+ Back +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ getData('editor')->render('editor'); ?> +
+
+ +
+ getData('editor')->getData('text')->render('editor', 'plain', 'fEditor'); ?> +
+
+
diff --git a/Theme/Backend/media-upload.tpl.php b/Theme/Backend/media-upload.tpl.php index 81efc0e..3159a59 100644 --- a/Theme/Backend/media-upload.tpl.php +++ b/Theme/Backend/media-upload.tpl.php @@ -35,10 +35,10 @@ use phpOMS\Uri\UriFactory;
-
-

getHtml('Upload') ?>

-
-
+ +
+
getHtml('Upload') ?>
+
@@ -52,10 +52,12 @@ use phpOMS\Uri\UriFactory;
-
- -
-
+
+
+ +
+ +
\ No newline at end of file