Skip to content

Commit 6876bb8

Browse files
jaygeorgejasonvarga
authored andcommitted
Accept legacy site handle arrays when updating collections and taxonomies
GlobalSetSites with origins disabled now processes both UI rows and the old flat handle list so existing payloads keep working.
1 parent ff6542e commit 6876bb8

5 files changed

Lines changed: 66 additions & 17 deletions

File tree

src/Fieldtypes/GlobalSetSites.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ protected function configFieldItems(): array
2222
];
2323
}
2424

25+
public function process($data)
26+
{
27+
if ($this->config('origins', true)) {
28+
return $data;
29+
}
30+
31+
return collect($data ?? [])
32+
->filter(fn ($site) => is_string($site) ? filled($site) : ($site['enabled'] ?? false))
33+
->map(fn ($site) => is_string($site) ? $site : $site['handle'])
34+
->filter()
35+
->values()
36+
->all();
37+
}
38+
2539
public function rules(): array
2640
{
2741
$rules = [
@@ -42,7 +56,9 @@ private function atLeastOneSiteEnabledRule()
4256
{
4357
public function passes($attribute, $value)
4458
{
45-
return collect($value)->filter->enabled->isNotEmpty();
59+
return collect($value)->contains(function ($site) {
60+
return is_string($site) ? filled($site) : ($site['enabled'] ?? false);
61+
});
4662
}
4763

4864
public function message()

src/Http/Controllers/CP/Collections/CollectionsController.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -354,14 +354,6 @@ public function update(Request $request, $collection)
354354
->previewTargets($values['preview_targets']);
355355

356356
if ($sites = Arr::get($values, 'sites')) {
357-
if (Site::multiEnabled()) {
358-
$sites = collect($sites)
359-
->filter(fn ($site) => $site['enabled'] ?? false)
360-
->map(fn ($site) => $site['handle'])
361-
->values()
362-
->all();
363-
}
364-
365357
$collection
366358
->sites($sites)
367359
->originBehavior($values['origin_behavior']);

src/Http/Controllers/CP/Taxonomies/TaxonomiesController.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -201,14 +201,6 @@ public function update(Request $request, $taxonomy)
201201
->layout($values['layout'] ?? null);
202202

203203
if ($sites = Arr::get($values, 'sites')) {
204-
if (Site::multiEnabled()) {
205-
$sites = collect($sites)
206-
->filter(fn ($site) => $site['enabled'] ?? false)
207-
->map(fn ($site) => $site['handle'])
208-
->values()
209-
->all();
210-
}
211-
212204
$taxonomy->sites($sites);
213205
}
214206

tests/Feature/Collections/UpdateCollectionTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,32 @@ public function it_updates_collection_sites_from_enabled_rows_and_ignores_origin
187187
$this->assertTrue($updated->propagate());
188188
}
189189

190+
#[Test]
191+
public function it_updates_collection_sites_from_legacy_handle_array()
192+
{
193+
$this->setSites([
194+
'en' => ['name' => 'English', 'locale' => 'en_US', 'url' => 'http://test.com/'],
195+
'fr' => ['name' => 'French', 'locale' => 'fr_FR', 'url' => 'http://fr.test.com/'],
196+
'de' => ['name' => 'German', 'locale' => 'de_DE', 'url' => 'http://de.test.com/'],
197+
]);
198+
199+
$collection = Collection::make('test')->sites(['en', 'fr'])->save();
200+
201+
$this
202+
->actingAs($this->userWithPermission())
203+
->update($collection, [
204+
'sites' => ['en', 'de'],
205+
'origin_behavior' => 'root',
206+
'propagate' => false,
207+
'structured' => false,
208+
'require_slugs' => true,
209+
'preview_targets' => [],
210+
])
211+
->assertOk();
212+
213+
$this->assertEquals(['en', 'de'], Collection::findByHandle('test')->sites()->all());
214+
}
215+
190216
private function userWithoutPermission()
191217
{
192218
$this->setTestRoles(['test' => ['access cp']]);

tests/Feature/Taxonomies/UpdateTaxonomyTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,29 @@ public function it_updates_taxonomy_sites_from_enabled_rows_and_ignores_origins(
102102
$this->assertEquals(['en', 'de'], Taxonomy::findByHandle('test')->sites()->all());
103103
}
104104

105+
#[Test]
106+
public function it_updates_taxonomy_sites_from_legacy_handle_array()
107+
{
108+
$this->setSites([
109+
'en' => ['name' => 'English', 'locale' => 'en_US', 'url' => 'http://test.com/'],
110+
'fr' => ['name' => 'French', 'locale' => 'fr_FR', 'url' => 'http://fr.test.com/'],
111+
'de' => ['name' => 'German', 'locale' => 'de_DE', 'url' => 'http://de.test.com/'],
112+
]);
113+
114+
$taxonomy = tap(Taxonomy::make('test')->sites(['en', 'fr']))->save();
115+
116+
$this
117+
->actingAs($this->userWithPermission())
118+
->update($taxonomy, [
119+
'sites' => ['en', 'de'],
120+
'preview_targets' => [],
121+
'collections' => [],
122+
])
123+
->assertOk();
124+
125+
$this->assertEquals(['en', 'de'], Taxonomy::findByHandle('test')->sites()->all());
126+
}
127+
105128
private function userWithoutPermission()
106129
{
107130
$this->setTestRoles(['test' => ['access cp']]);

0 commit comments

Comments
 (0)