From 5cf2a0ed3978d8c67842fac09bf751ce18e48b97 Mon Sep 17 00:00:00 2001 From: dante di domenico Date: Mon, 27 Jan 2025 14:31:20 +0100 Subject: [PATCH 1/4] chore fix: avoid js error --- resources/js/app/mixins/paginated-content.js | 2 +- resources/js/app/pages/modules/index.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/js/app/mixins/paginated-content.js b/resources/js/app/mixins/paginated-content.js index 77bbe7c1c..e552bf59d 100644 --- a/resources/js/app/mixins/paginated-content.js +++ b/resources/js/app/mixins/paginated-content.js @@ -158,7 +158,7 @@ export const PaginatedContentMixin = { formattedObj.type = obj.type; // search for meta.relation using this.formatObjectsFilter - const metaRelation = obj.meta.relation; + const metaRelation = obj?.meta?.relation || {}; if (metaRelation) { let formattedMeta = {}; this.formatObjectsFilter.forEach((filter) => { diff --git a/resources/js/app/pages/modules/index.js b/resources/js/app/pages/modules/index.js index b244ea557..ebe79c095 100644 --- a/resources/js/app/pages/modules/index.js +++ b/resources/js/app/pages/modules/index.js @@ -74,6 +74,9 @@ export default { watch: { selectedRows(val) { + if (!this.$refs.checkAllCB) { + return; + } if (!val.length) { this.$refs.checkAllCB.checked = false; this.$refs.checkAllCB.indeterminate = false; From b42a94fb8c4fa80aff410fd5d25006a27f047a26 Mon Sep 17 00:00:00 2001 From: dante di domenico Date: Mon, 27 Jan 2025 14:32:49 +0100 Subject: [PATCH 2/4] feat: custom multiupload and dropupload --- resources/js/app/helpers/view.js | 11 +++++++ src/Controller/ModulesController.php | 6 +++- src/View/Helper/ElementHelper.php | 35 ++++++++++++++++++++ templates/Element/Form/dropupload.twig | 7 ++++ templates/Element/Form/multiupload.twig | 42 ++++++++++++++++++++++++ templates/Element/Form/relation.twig | 9 +----- templates/Pages/Multiupload/index.twig | 43 +------------------------ 7 files changed, 102 insertions(+), 51 deletions(-) create mode 100644 templates/Element/Form/dropupload.twig create mode 100644 templates/Element/Form/multiupload.twig diff --git a/resources/js/app/helpers/view.js b/resources/js/app/helpers/view.js index 1f3b46165..c07e419c1 100644 --- a/resources/js/app/helpers/view.js +++ b/resources/js/app/helpers/view.js @@ -224,6 +224,17 @@ export default { return false; }, + getObjectTypeFromMime(mimeType) { + const mimes = BEDITA.uploadConfig?.accepted; + for (let type in mimes) { + if (this.checkAcceptedMime(mimes[type], mimeType)) { + return type; + } + } + + return null; + }, + titleFromFileName(filename) { let title = filename; title = title.replaceAll('-', ' '); diff --git a/src/Controller/ModulesController.php b/src/Controller/ModulesController.php index 88e1d3143..af074bbb1 100644 --- a/src/Controller/ModulesController.php +++ b/src/Controller/ModulesController.php @@ -588,9 +588,13 @@ public function setObjectType(?string $objectType): void */ private function setupViewRelations(array $relations): void { + // setup relations schema + $relationsSchema = $this->Schema->getRelationsSchema(); + $this->set('relationsSchema', $relationsSchema); + // setup relations metadata $this->Modules->setupRelationsMeta( - $this->Schema->getRelationsSchema(), + $relationsSchema, $relations, $this->Properties->relationsList($this->objectType), $this->Properties->hiddenRelationsList($this->objectType), diff --git a/src/View/Helper/ElementHelper.php b/src/View/Helper/ElementHelper.php index bb46ac640..a3744d21d 100644 --- a/src/View/Helper/ElementHelper.php +++ b/src/View/Helper/ElementHelper.php @@ -47,6 +47,41 @@ public function custom(string $item, string $type = 'relation'): string return (string)Configure::read($path); } + /** + * Return dropupload element path by relation. + * This checks relation right types, and verify if there is a `Modules..dropupload._element` configuration. + * If not, return default `Form/dropupload` element. + * If there is a configuration, return it. + * + * @param array $rightTypes Right types of the relation + * @return string + */ + public function dropupload(array $rightTypes): string + { + foreach ($rightTypes as $name) { + $path = (string)Configure::read(sprintf('Modules.%s.dropupload._element', $name)); + if (!empty($path)) { + return $path; + } + } + + return 'Form/dropupload'; + } + + /** + * Return multiupload element via `Modules..multiupload._element` configuration + * + * @return string + */ + public function multiupload(): string + { + $currentModule = (array)$this->getView()->get('currentModule'); + $name = (string)Hash::get($currentModule, 'name'); + $path = sprintf('Modules.%s.multiupload._element', $name); + + return (string)Configure::read($path, 'Form/multiupload'); + } + /** * Return sidebar element via `Modules..sidebar._element` configuration * diff --git a/templates/Element/Form/dropupload.twig b/templates/Element/Form/dropupload.twig new file mode 100644 index 000000000..6743f1650 --- /dev/null +++ b/templates/Element/Form/dropupload.twig @@ -0,0 +1,7 @@ +{# :accepted-drop="[`.from-relation-${relationName}`,isRelationWithMedia && 'from-files']"> #} + + diff --git a/templates/Element/Form/multiupload.twig b/templates/Element/Form/multiupload.twig new file mode 100644 index 000000000..45f1b6856 --- /dev/null +++ b/templates/Element/Form/multiupload.twig @@ -0,0 +1,42 @@ +{% do _view.assign('title', __('Multi upload')) %} +{% if Perms.canSave() and not readonly %} + + + +{% else %} +
{{ __('You do not have the required permissions to view this page.') }}
+{% endif %} + +{# Add links to the module #} +{% do _view.append('app-module-links', + Html.link( + __('List'), + {'_name': 'modules:list', 'object_type': objectType}, + {'title': __('List'), 'class': 'icon-left-dir button button-outlined button-outlined-hover-module-' ~ objectType} + )|raw +) %} + diff --git a/templates/Element/Form/relation.twig b/templates/Element/Form/relation.twig index 02ab94701..5fd679de6 100644 --- a/templates/Element/Form/relation.twig +++ b/templates/Element/Form/relation.twig @@ -128,16 +128,9 @@

- {# DROP FILES #} {% if uploadableNum %} - {# :accepted-drop="[`.from-relation-${relationName}`,isRelationWithMedia && 'from-files']"> #} - - + {{ element(Element.dropupload(relationsSchema[relationName]['right'])) }} {% endif %} -