diff --git a/Admin/Install/Media.install.json b/Admin/Install/Media.install.json new file mode 100644 index 0000000..e6eca3e --- /dev/null +++ b/Admin/Install/Media.install.json @@ -0,0 +1,9 @@ +[ + { + "type": "collection", + "create_directory": true, + "name": "Surveys", + "virtualPath": "/Modules", + "user": 1 + } +] \ No newline at end of file diff --git a/Admin/Install/Media.php b/Admin/Install/Media.php new file mode 100644 index 0000000..40f698c --- /dev/null +++ b/Admin/Install/Media.php @@ -0,0 +1,43 @@ + __DIR__ . '/Media.install.json']); + } +} diff --git a/Admin/Install/db.json b/Admin/Install/db.json index dd7e17b..a4f2d18 100644 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -48,6 +48,32 @@ } } }, + "survey_template_media": { + "name": "survey_template_media", + "fields": { + "survey_template_media_id": { + "name": "survey_template_media_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "survey_template_media_src": { + "name": "survey_template_media_src", + "type": "INT", + "null": false, + "foreignTable": "survey_template", + "foreignKey": "survey_template_id" + }, + "survey_template_media_dst": { + "name": "survey_template_media_dst", + "type": "INT", + "null": false, + "foreignTable": "media", + "foreignKey": "media_id" + } + } + }, "survey_template_l11n": { "name": "survey_template_l11n", "fields": { diff --git a/Controller/ApiController.php b/Controller/ApiController.php index f3f0421..2c55abc 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -25,6 +25,7 @@ use Modules\Surveys\Models\SurveyTemplateElementMapper; use Modules\Surveys\Models\SurveyTemplateMapper; use Modules\Surveys\Models\SurveyStatus; use Modules\Surveys\Models\SurveyElementType; +use Modules\Media\Models\NullMedia; use phpOMS\Message\Http\HttpResponse; use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\NotificationLevel; @@ -135,6 +136,26 @@ final class ApiController extends Controller } } + if (!empty($uploadedFiles = $request->getFiles() ?? [])) { + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + [''], + $uploadedFiles, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files/Modules/Surveys', + '/Modules/Surveys', + ); + + foreach ($uploaded as $media) { + $template->addMedia($media); + } + } + + if (!empty($mediaFiles = $request->getDataJson('media') ?? [])) { + foreach ($mediaFiles as $media) { + $template->addMedia(new NullMedia($media)); + } + } + return $template; } diff --git a/Models/SurveyTemplate.php b/Models/SurveyTemplate.php index 11c9981..133b137 100644 --- a/Models/SurveyTemplate.php +++ b/Models/SurveyTemplate.php @@ -17,6 +17,7 @@ namespace Modules\Surveys\Models; use phpOMS\Localization\ISO639x1Enum; use Modules\Admin\Models\Account; use Modules\Tag\Models\Tag; +use Modules\Media\Models\Media; /** * Survey class. @@ -118,6 +119,14 @@ class SurveyTemplate */ private array $elements = []; + /** + * Media files + * + * @var Media[] + * @since 1.0.0 + */ + protected array $media = []; + /** * Constructor. * @@ -191,6 +200,32 @@ class SurveyTemplate $this->tags[] = $tag; } + /** + * Get all media + * + * @return Media[] + * + * @since 1.0.0 + */ + public function getMedia() : array + { + return $this->media; + } + + /** + * Add media + * + * @param Media $media Media to add + * + * @return void + * + * @since 1.0.0 + */ + public function addMedia(Media $media) : void + { + $this->media[] = $media; + } + /** * Get elements * diff --git a/Models/SurveyTemplateMapper.php b/Models/SurveyTemplateMapper.php index 18a824f..a09728c 100644 --- a/Models/SurveyTemplateMapper.php +++ b/Models/SurveyTemplateMapper.php @@ -74,6 +74,12 @@ final class SurveyTemplateMapper extends DataMapperAbstract 'self' => 'survey_template_tag_dst', 'external' => 'survey_template_tag_src', ], + 'media' => [ + 'mapper' => MediaMapper::class, + 'table' => 'survey_template_media', + 'external' => 'survey_template_media_dst', + 'self' => 'survey_template_media_src', + ], ]; /** diff --git a/Theme/Backend/surveys-list.tpl.php b/Theme/Backend/surveys-list.tpl.php index 5a0547a..7c45f91 100644 --- a/Theme/Backend/surveys-list.tpl.php +++ b/Theme/Backend/surveys-list.tpl.php @@ -127,20 +127,22 @@ echo $this->getData('nav')->render(); ?> - + - .. - + .. - $value) : ++$count; - $url = UriFactory::build('{/prefix}survey/list?path=' . \rtrim($value->getVirtualPath(), '/') . '/' . $value->name); - ?> + $value) : ++$count; + $url = UriFactory::build('{/prefix}survey/list?path=' . \rtrim($value->getVirtualPath(), '/') . '/' . $value->name); + ?>