From f7804cd2b5835cf875474da26538daf132207e04 Mon Sep 17 00:00:00 2001 From: vnmedeiros Date: Wed, 1 Sep 2021 14:47:20 -0300 Subject: [PATCH] feat: update validate with cardinality for multiples metadatas #568 --- .../class-tainacan-item-metadata-entity.php | 5 ++++ .../edition/metadatum-edition-form.vue | 3 ++- .../metadata-types/compound/Compound.vue | 11 +++++--- .../metadata-types/tainacan-form-item.vue | 2 +- tests/test-item-metadata.php | 26 +++++++++++++++++++ 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/classes/entities/class-tainacan-item-metadata-entity.php b/src/classes/entities/class-tainacan-item-metadata-entity.php index 83b3b89df..a7e489062 100644 --- a/src/classes/entities/class-tainacan-item-metadata-entity.php +++ b/src/classes/entities/class-tainacan-item-metadata-entity.php @@ -486,6 +486,11 @@ class Item_Metadata_Entity extends Entity { if ($this->is_multiple()) { if (is_array($value)) { + $cardinality = $metadatum->get_cardinality(); + if ( !empty($cardinality) && $cardinality > 0 && count($value) > $cardinality ) { + $this->add_error( 'invalid', sprintf( __('Metadatum %s is set to accept a maximum of %s values.', 'tainacan'), $metadatum->get_name(), $cardinality ) ); + return false; + } // if its required, at least one must be filled $one_filled = false; $valid = true; diff --git a/src/views/admin/components/edition/metadatum-edition-form.vue b/src/views/admin/components/edition/metadatum-edition-form.vue index 2f356c16d..57d50c697 100644 --- a/src/views/admin/components/edition/metadatum-edition-form.vue +++ b/src/views/admin/components/edition/metadatum-edition-form.vue @@ -208,7 +208,8 @@ :disabled="editForm.multiple != 'yes'" name="cardinality" type="number" - step="1" /> + step="1" + v-model="editForm.cardinality"/> diff --git a/src/views/admin/components/metadata-types/compound/Compound.vue b/src/views/admin/components/metadata-types/compound/Compound.vue index 0c3068eda..8c51b2412 100644 --- a/src/views/admin/components/metadata-types/compound/Compound.vue +++ b/src/views/admin/components/metadata-types/compound/Compound.vue @@ -85,15 +85,15 @@ class="empty-label"> {{ $i18n.get('info_no_value_compound_metadata') }}

- -  {{ $i18n.get('label_add_value') }} +  {{ $i18n.get('label_add_value') }} @@ -124,7 +124,10 @@ }, someValueOnLastInput() { return this.childItemMetadataGroups && this.childItemMetadataGroups[this.childItemMetadataGroups.length - 1] && this.childItemMetadataGroups[this.childItemMetadataGroups.length - 1].findIndex((childItemMetadatum) => childItemMetadatum.value) >= 0; - } + }, + maxMultipleValues() { + return (this.itemMetadatum && this.itemMetadatum.metadatum && this.itemMetadatum.metadatum.cardinality && !isNaN(this.itemMetadatum.metadatum.cardinality)) ? this.itemMetadatum.metadatum.cardinality : undefined; + }, }, watch: { /* This will create the input object structure for diff --git a/src/views/admin/components/metadata-types/tainacan-form-item.vue b/src/views/admin/components/metadata-types/tainacan-form-item.vue index 82f18fd4c..d14baa678 100644 --- a/src/views/admin/components/metadata-types/tainacan-form-item.vue +++ b/src/views/admin/components/metadata-types/tainacan-form-item.vue @@ -83,7 +83,7 @@ -