From 8348b1bb87aabb2c42ae12148ba671a3b3cb9156 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 2 Feb 2020 15:51:25 +0100 Subject: [PATCH] improve media list view --- Admin/Routes/Web/Api.php | 2 +- Controller.js | 2 +- Controller/ApiController.php | 59 ++++++++++++++++---- Controller/BackendController.php | 10 +++- Models/Upload.js | 7 --- Theme/Backend/Components/Upload/BaseView.php | 2 +- Theme/Backend/media-list.tpl.php | 34 ++++++++++- Theme/Backend/media-single.tpl.php | 10 +++- 8 files changed, 99 insertions(+), 27 deletions(-) diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index 55317fb..0fe81c0 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -23,7 +23,7 @@ return [ ], [ 'dest' => '\Modules\Media\Controller\ApiController:apiMediaUpdate', - 'verb' => RouteVerb::POST, + 'verb' => RouteVerb::SET, 'permission' => [ 'module' => ApiController::MODULE_NAME, 'type' => PermissionType::CREATE, diff --git a/Controller.js b/Controller.js index e7ec6a3..7be0ecb 100644 --- a/Controller.js +++ b/Controller.js @@ -22,7 +22,7 @@ jsOMS.Modules.Media = class { length = e.length; for (let i = 0; i < length; ++i) { - this.bindElement(e[i]); + //this.bindElement(e[i]); } }; diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 8fc7e5b..1dfdc8b 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -26,6 +26,10 @@ use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; use phpOMS\System\MimeType; +use Modules\Media\Models\NullCollection; +use phpOMS\Utils\Parser\Markdown\Markdown; +use Modules\Media\Models\Collection; +use Modules\Media\Models\CollectionMapper; /** * Media class. @@ -95,20 +99,12 @@ final class ApiController extends Controller */ public function apiMediaUpload(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { - /** - * @todo Orange-Management/Modules#202 - * Consider to use FormData - * Form data is currently submitted in two steps if it contains media files. - * 1. Upload media data - * 2. Submit form data - * Consider to use `FormData` in order to submit media files and form data at the same time. - */ $uploads = $this->uploadFiles( $request->getData('name') ?? '', $request->getFiles(), $request->getHeader()->getAccount(), (string) ($request->getData('path') ?? __DIR__ . '/../../../Modules/Media/Files'), - (string) ($request->getData('virtualPath') ?? '/'), + (string) ($request->getData('virtualPath') ?? ''), (string) ($request->getData('password') ?? ''), (string) ($request->getData('encrypt') ?? '') ); @@ -136,7 +132,7 @@ final class ApiController extends Controller array $files, int $account, string $basePath = 'Modules/Media/Files', - string $virtualPath = '/', + string $virtualPath = '', string $password = '', string $encryptionKey = '' ) : array @@ -177,7 +173,7 @@ final class ApiController extends Controller * * @since 1.0.0 */ - public function createDbEntries(array $status, int $account, string $virtualPath = '/') : array + public function createDbEntries(array $status, int $account, string $virtualPath = '') : array { $mediaCreated = []; @@ -215,7 +211,7 @@ final class ApiController extends Controller * * @since 1.0.0 */ - public static function createDbEntry(array $status, int $account, string $virtualPath = '/') : ?Media + public static function createDbEntry(array $status, int $account, string $virtualPath = '') : ?Media { $media = null; @@ -306,4 +302,43 @@ final class ApiController extends Controller return $media; } + + /** + * Method to create media collection from request. + * + * @param string $name Collection name + * @param string $description Description + * @param Media[] $media Media files to create the collection from + * @param int $account Account Id + * + * @return Collection + * + * @since 1.0.0 + */ + public function createMediaCollectionFromMedia(string $name, string $description, array $media, int $account) : Collection + { + if (empty($media)) { + return new NullCollection(); + } + + // is allowed to create media file + if (!$this->app->accountManager->get($account)->hasPermission( + PermissionType::CREATE, $this->app->orgId, null, self::MODULE_NAME, PermissionState::COLLECTION, null) + ) { + return new NullCollection(); + } + + /* Create collection */ + $mediaCollection = new Collection(); + $mediaCollection->setName($name); + $mediaCollection->setDescription(Markdown::parse($description)); + $mediaCollection->setDescriptionRaw($description); + $mediaCollection->setCreatedBy($account); + $mediaCollection->setSources($media); + $mediaCollection->setVirtualPath('/Modules/Helper'); + + CollectionMapper::create($mediaCollection); + + return $mediaCollection; + } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index d9d91cb..1ceb1b9 100644 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -129,8 +129,11 @@ final class BackendController extends Controller $view->setTemplate('/Modules/Media/Theme/Backend/media-list'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1000401001, $request, $response)); - $media = MediaMapper::getByVirtualPath('/'); + $path = (string) ($request->getData('path') ?? '/'); + $media = MediaMapper::getByVirtualPath($path); + $view->addData('media', $media); + $view->addData('path', $path); return $view; } @@ -160,11 +163,16 @@ final class BackendController extends Controller $media = MediaMapper::get((int) $request->getData('id')); if ($media->getExtension() === 'collection') { + //$media = CollectionMapper::get($media->getId()); $media = MediaMapper::getByVirtualPath( $media->getVirtualPath() . ($media->getVirtualPath() !== '/' ? '/' : '') . $media->getName() ); + $collection = CollectionMapper::get((int) $request->getData('id')); + $media = \array_merge($media, $collection->getSources()); + + $view->addData('path', $collection->getVirtualPath() . '/' . $collection->getName()); $view->setTemplate('/Modules/Media/Theme/Backend/media-list'); } diff --git a/Models/Upload.js b/Models/Upload.js index 90b07a7..beef50f 100644 --- a/Models/Upload.js +++ b/Models/Upload.js @@ -146,13 +146,6 @@ export class Upload { * * @return {void} * - * @todo Orange-Management/Modules#202 - * Consider to use FormData - * Form data is currently submitted in two steps if it contains media files. - * 1. Upload media data - * 2. Submit form data - * Consider to use `FormData` in order to submit media files and form data at the same time. - * * @since 1.0.0 */ upload (formId) diff --git a/Theme/Backend/Components/Upload/BaseView.php b/Theme/Backend/Components/Upload/BaseView.php index 55eb925..8ccd028 100644 --- a/Theme/Backend/Components/Upload/BaseView.php +++ b/Theme/Backend/Components/Upload/BaseView.php @@ -52,7 +52,7 @@ class BaseView extends View { $this->form = $data[0]; $this->name = $data[1]; - $this->virtualPath = $data[2] ?? '/'; + $this->virtualPath = $data[2] ?? ''; return parent::render(); } } diff --git a/Theme/Backend/media-list.tpl.php b/Theme/Backend/media-list.tpl.php index 65e05c2..3edffbf 100644 --- a/Theme/Backend/media-list.tpl.php +++ b/Theme/Backend/media-list.tpl.php @@ -12,17 +12,49 @@ */ declare(strict_types=1); +use phpOMS\Uri\UriFactory; include __DIR__ . '/template-functions.php'; /** * @var \phpOMS\Views\View $this + * @var string $parent */ +$mediaPath = $this->getData('path') ?? '/'; +/** + * @var \Modules\Media\Models\Media[] $media + */ $media = $this->getData('media'); echo $this->getData('nav')->render(); ?> +
+
+ +
+
+
@@ -40,7 +72,7 @@ echo $this->getData('nav')->render(); ?> $value) : ++$count; - $url = \phpOMS\Uri\UriFactory::build('{/prefix}media/single?{?}&id=' . $value->getId()); + $url = UriFactory::build('{/prefix}media/single?id=' . $value->getId()); $icon = $fileIconFunction(\phpOMS\System\File\FileUtils::getExtensionType($value->getExtension())); ?> diff --git a/Theme/Backend/media-single.tpl.php b/Theme/Backend/media-single.tpl.php index 77a6bff..3b0669d 100644 --- a/Theme/Backend/media-single.tpl.php +++ b/Theme/Backend/media-single.tpl.php @@ -20,8 +20,8 @@ use \phpOMS\Uri\UriFactory; include __DIR__ . '/template-functions.php'; /** - * @var \phpOMS\Views\View $this - * @var $media \Modules\Media\Models\Media + * @var \phpOMS\Views\View $this + * @var \Modules\Media\Models\Media $media */ $media = $this->getData('media'); echo $this->getData('nav')->render(); @@ -124,7 +124,11 @@ echo $this->getData('nav')->render(); -
getFileContent($media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/')); ?>
+
printHtml(
+                            $this->getFileContent(
+                                $media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/')
+                            )
+                        ); ?>