From e3cb5c8bcb93c6d7e0fd1d05d63cfcb3215d465e Mon Sep 17 00:00:00 2001 From: Jay George Date: Wed, 26 Aug 2026 11:13:43 +0100 Subject: [PATCH 1/3] Rename sections to more accurately reflect what the section does --- src/Http/Controllers/CP/Collections/CollectionsController.php | 2 +- src/Http/Controllers/CP/Taxonomies/TaxonomiesController.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Http/Controllers/CP/Collections/CollectionsController.php b/src/Http/Controllers/CP/Collections/CollectionsController.php index 1a89ff16f0a..93c35c4db6e 100644 --- a/src/Http/Controllers/CP/Collections/CollectionsController.php +++ b/src/Http/Controllers/CP/Collections/CollectionsController.php @@ -595,7 +595,7 @@ protected function editFormBlueprint($collection) if (Site::multiEnabled()) { $fields['sites'] = [ - 'display' => __('Sites'), + 'display' => __('Localizations'), 'fields' => [ 'sites' => [ 'type' => 'sites', diff --git a/src/Http/Controllers/CP/Taxonomies/TaxonomiesController.php b/src/Http/Controllers/CP/Taxonomies/TaxonomiesController.php index 008c64da7ad..aec48c8dba9 100644 --- a/src/Http/Controllers/CP/Taxonomies/TaxonomiesController.php +++ b/src/Http/Controllers/CP/Taxonomies/TaxonomiesController.php @@ -287,7 +287,7 @@ protected function editFormBlueprint($taxonomy) if (Site::multiEnabled()) { $fields['sites'] = [ - 'display' => __('Sites'), + 'display' => __('Localizations'), 'fields' => [ 'sites' => [ 'type' => 'sites', From 2ef6fbb08a18305a4be4858c03b659fe05c43747 Mon Sep 17 00:00:00 2001 From: Jay George Date: Wed, 26 Aug 2026 11:26:59 +0100 Subject: [PATCH 2/3] Use globals Sites UI on collection and taxonomy configure Reuse enable switches and site groups without origin chains, and keep storing a flat list of site handles. --- lang/en/validation.php | 1 + .../collections/OneOrManySitesField.vue | 15 ++++++- resources/js/components/globals/Sites.vue | 24 +++++++++--- src/Fieldtypes/GlobalSetSites.php | 39 +++++++++++++++++-- .../CP/Collections/CollectionsController.php | 25 ++++++++++-- .../CP/Taxonomies/TaxonomiesController.php | 25 ++++++++++-- .../Collections/UpdateCollectionTest.php | 34 ++++++++++++++++ .../Feature/Taxonomies/UpdateTaxonomyTest.php | 27 +++++++++++++ 8 files changed, 173 insertions(+), 17 deletions(-) diff --git a/lang/en/validation.php b/lang/en/validation.php index 9e46026ccab..9a2e37b4051 100644 --- a/lang/en/validation.php +++ b/lang/en/validation.php @@ -174,6 +174,7 @@ 'email_available' => 'A user with this email already exists.', 'fieldset_imported_recursively' => 'Fieldset :handle is being imported recursively.', 'one_site_without_origin' => 'At least one site must not have an origin.', + 'at_least_one_site_enabled' => 'At least one site must be enabled.', 'options_require_keys' => 'All options must have keys.', 'origin_cannot_be_disabled' => 'Cannot select a disabled origin.', 'parent_cannot_be_itself' => 'Cannot be its own parent.', diff --git a/resources/js/components/collections/OneOrManySitesField.vue b/resources/js/components/collections/OneOrManySitesField.vue index 97f191069cd..de8d2e518e1 100644 --- a/resources/js/components/collections/OneOrManySitesField.vue +++ b/resources/js/components/collections/OneOrManySitesField.vue @@ -60,9 +60,20 @@ export default { }, sites() { - if (!this.publishContainer.values.value.sites) return []; + const sites = this.publishContainer.values.value.sites; - return this.publishContainer.values.value.sites.map((handle, i) => { + if (!sites?.length) return []; + + if (typeof sites[0] === 'object') { + return sites + .filter((site) => site.enabled) + .map((site) => ({ + handle: site.handle, + name: site.name, + })); + } + + return sites.map((handle, i) => { return { handle, name: this.publishContainer.meta.value.sites.data[i].title, diff --git a/resources/js/components/globals/Sites.vue b/resources/js/components/globals/Sites.vue index aef75dad70b..94eac2f1d4c 100644 --- a/resources/js/components/globals/Sites.vue +++ b/resources/js/components/globals/Sites.vue @@ -1,6 +1,9 @@