-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy pathBaseSectionDefaultsController.php
More file actions
118 lines (95 loc) · 3.24 KB
/
Copy pathBaseSectionDefaultsController.php
File metadata and controls
118 lines (95 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
namespace Statamic\SeoPro\Http\Controllers\CP;
use Illuminate\Http\Request;
use Statamic\Contracts\Entries\Collection;
use Statamic\Contracts\Taxonomies\Taxonomy;
use Statamic\CP\PublishForm;
use Statamic\Facades\Blueprint;
use Statamic\Http\Controllers\CP\CpController;
use Statamic\SeoPro\Events\CollectionDefaultsSaved;
use Statamic\SeoPro\Events\TaxonomyDefaultsSaved;
use Statamic\SeoPro\Fields;
use Statamic\Support\Arr;
abstract class BaseSectionDefaultsController extends CpController
{
protected static $sectionType;
abstract protected function getSectionItem($handle);
public function edit($handle)
{
$this->authorize('edit seo section defaults');
$sectionType = static::$sectionType;
$item = $this->getSectionItem($handle);
$seo = Arr::get($item->fileData(), 'inject.seo', []);
if ($seo === false) {
$seo = ['enabled' => false];
}
return PublishForm::make($this->blueprint())
->asConfig()
->icon('folder')
->title($item->title().' SEO')
->values($seo)
->submittingTo(cp_route("seo-pro.section-defaults.{$sectionType}.update", $item));
}
public function update($handle, Request $request)
{
$this->authorize('edit seo section defaults');
$values = PublishForm::make($this->blueprint())->submit($request->all());
$this->saveSectionItem(
item: $this->getSectionItem($handle),
values: Arr::removeNullValues($values)
);
}
protected function blueprint()
{
return Blueprint::make()->setContents([
'tabs' => [
'main' => [
'sections' => Fields::new()->getConfig(),
],
],
]);
}
protected function saveSectionItem($item, $values)
{
$values = collect($values);
$cascade = $item->cascade();
if ($disabled = $values->get('enabled') === false) {
$cascade->put('seo', false);
} elseif ($values->except('enabled')->isEmpty()) {
$cascade->forget('seo');
} else {
$cascade->put('seo', $values->except('enabled')->all());
}
$item->cascade($cascade->all())->save();
if ($item instanceof Collection) {
CollectionDefaultsSaved::dispatch($item);
} elseif ($item instanceof Taxonomy) {
TaxonomyDefaultsSaved::dispatch($item);
}
if ($disabled) {
$this->removeChildSeo($item);
}
}
protected function removeChildSeo($item)
{
if ($item instanceof Collection) {
$this->removeChildEntrySeo($item);
} elseif ($item instanceof Taxonomy) {
$this->removeChildTermSeo($item);
} else {
return;
}
}
protected function removeChildEntrySeo($collection)
{
$collection->queryEntries()->get()->filter->has('seo')->each(function ($entry) {
$entry->remove('seo')->save();
});
}
protected function removeChildTermSeo($taxonomy)
{
$taxonomy->queryTerms()->get()->filter->has('seo')->each(function ($term) {
$term->data($term->data()->except('seo'))->save();
});
}
}