From f3d2f51d38f1e02be6d565ef094fa086b486d8d3 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 20 Nov 2021 17:10:10 +0100 Subject: [PATCH] todo implementations --- Admin/Install/db.json | 5 ++ Admin/Routes/Web/Backend.php | 22 +++++ .../Theme/Backend/settings-type.tpl.php | 0 Admin/Settings/Theme/Backend/settings.tpl.php | 85 +++++++++++++++++++ Controller/ApiController.php | 4 +- Controller/BackendController.php | 68 +++++++++++++++ Models/MediaType.php | 8 ++ Models/MediaTypeMapper.php | 1 + .../Api/ApiControllerMediaTrait.php | 2 + 9 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 Admin/Settings/Theme/Backend/settings-type.tpl.php create mode 100644 Admin/Settings/Theme/Backend/settings.tpl.php diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 8a89b19..12eca72 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -13,6 +13,11 @@ "name": "media_type_name", "type": "VARCHAR(255)", "null": false + }, + "media_type_isvisible": { + "name": "media_type_isvisible", + "type": "TINYINT(1)", + "null": false } } }, diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 0517e88..f694ce4 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -18,6 +18,28 @@ use phpOMS\Account\PermissionType; use phpOMS\Router\RouteVerb; return [ + '^.*/admin/module/settings\?id=Media$' => [ + [ + 'dest' => '\Modules\Media\Controller\BackendController:viewModuleSettings', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => \Modules\Admin\Models\PermissionState::MODULE, + ], + ], + ], + '^.*/admin/module/settings\?id=Media&type=.*?$' => [ + [ + 'dest' => '\Modules\Media\Controller\BackendController:viewMediaTypeSettings', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => \Modules\Admin\Models\PermissionState::MODULE, + ], + ], + ], '^.*/media/list.*$' => [ [ 'dest' => '\Modules\Media\Controller\BackendController:viewMediaList', diff --git a/Admin/Settings/Theme/Backend/settings-type.tpl.php b/Admin/Settings/Theme/Backend/settings-type.tpl.php new file mode 100644 index 0000000..e69de29 diff --git a/Admin/Settings/Theme/Backend/settings.tpl.php b/Admin/Settings/Theme/Backend/settings.tpl.php new file mode 100644 index 0000000..b88485d --- /dev/null +++ b/Admin/Settings/Theme/Backend/settings.tpl.php @@ -0,0 +1,85 @@ +getData('types') ?? []; + +echo $this->getData('nav')->render(); ?> + +
+
+
+
getHtml('Types'); ?>
+
+ + + + + $type) : ++$count; + $url = UriFactory::build('{/prefix}admin/module/settings?id=Media&type=' . $type->id); ?> + +
getHtml('ID', '0', '0'); ?> + + + + getHtml('keyword'); ?> + + + + getHtml('Name'); ?> + + + +
getId(); ?> + printHtml($type->name); ?> + printHtml($type->getL11n()); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/Controller/ApiController.php b/Controller/ApiController.php index b13862f..7124d71 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -642,7 +642,9 @@ final class ApiController extends Controller $view = new View($this->app->l11nManager, $request, $response); $view->setData('media', $media); - $response->endAllOutputBuffering(); // for large files + if (!\headers_sent()) { + $response->endAllOutputBuffering(); // for large files + } if (($type = $request->getData('type')) === null) { $view->setTemplate('/Modules/Media/Theme/Api/render'); diff --git a/Controller/BackendController.php b/Controller/BackendController.php index cfccd9b..fa0a59f 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -14,11 +14,15 @@ declare(strict_types=1); namespace Modules\Media\Controller; +use Model\NullSetting; +use Model\SettingMapper; use Modules\Admin\Models\Account; use Modules\Media\Models\Collection; use Modules\Media\Models\CollectionMapper; use Modules\Media\Models\Media; use Modules\Media\Models\MediaMapper; +use Modules\Media\Models\MediaTypeMapper; +use Modules\Media\Models\MediaTypeL11nMapper; use Modules\Media\Models\NullMedia; use Modules\Media\Theme\Backend\Components\Media\ElementView; use Modules\Media\Theme\Backend\Components\Media\ListView; @@ -262,6 +266,70 @@ final class BackendController extends Controller return $view; } + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewModuleSettings(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1000105001, $request, $response)); + + $id = $request->getData('id') ?? ''; + + $settings = SettingMapper::getFor($id, 'module'); + if (!($settings instanceof NullSetting)) { + $view->setData('settings', !\is_array($settings) ? [$settings] : $settings); + } + + $types = MediaTypeMapper::with('language', $response->getLanguage())::getAll(); + $view->setData('types', $types); + + if (\is_file(__DIR__ . '/../Admin/Settings/Theme/Backend/settings.tpl.php')) { + $view->setTemplate('/Modules/' . static::NAME . '/Admin/Settings/Theme/Backend/settings'); + } else { + $view->setTemplate('/Modules/Admin/Theme/Backend/modules-settings'); + } + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewMediaTypeSettings(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/' . static::NAME . '/Admin/Settings/Theme/Backend/settings-type'); + + $type = MediaTypeMapper::with('language', $response->getLanguage())::get((int) $request->getData('id')); + + $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1007501001, $request, $response)); + $view->addData('type', $type); + + $l11n = MediaTypeL11nMapper::with('tag', $type->getId())::getAll(); + $view->addData('l11n', $l11n); + + return $view; + } + /** * Routing end-point for application behaviour. * diff --git a/Models/MediaType.php b/Models/MediaType.php index 6541ed9..d6fdd14 100644 --- a/Models/MediaType.php +++ b/Models/MediaType.php @@ -45,6 +45,14 @@ class MediaType implements \JsonSerializable, ArrayableInterface */ public string $name = ''; + /** + * Is this media type visible in lists or only internal? + * + * @var bool + * @since 1.0.0 + */ + public bool $isVisible = true; + /** * Title. * diff --git a/Models/MediaTypeMapper.php b/Models/MediaTypeMapper.php index 01d22e8..d7154ea 100644 --- a/Models/MediaTypeMapper.php +++ b/Models/MediaTypeMapper.php @@ -35,6 +35,7 @@ final class MediaTypeMapper extends DataMapperAbstract protected static array $columns = [ 'media_type_id' => ['name' => 'media_type_id', 'type' => 'int', 'internal' => 'id'], 'media_type_name' => ['name' => 'media_type_name', 'type' => 'string', 'internal' => 'name'], + 'media_type_isvisible' => ['name' => 'media_type_isvisible', 'type' => 'bool', 'internal' => 'isVisible'], ]; /** diff --git a/tests/Controller/Api/ApiControllerMediaTrait.php b/tests/Controller/Api/ApiControllerMediaTrait.php index 51c7daa..96fe96b 100755 --- a/tests/Controller/Api/ApiControllerMediaTrait.php +++ b/tests/Controller/Api/ApiControllerMediaTrait.php @@ -272,6 +272,8 @@ trait ApiControllerMediaTrait $response = new HttpResponse(); $request = new HttpRequest(new HttpUri('')); + $response->header->lock(); + $request->header->account = 1; $request->setData('type', 'html');