Skip to content

Commit 451d1a8

Browse files
authored
Configuration improvements (#18)
1 parent 03e7584 commit 451d1a8

File tree

5 files changed

+55
-22
lines changed

5 files changed

+55
-22
lines changed

resources/views/edit.blade.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
@extends('statamic::layout')
22

3-
@section('title', __('Config'))
3+
@section('title', $title)
44

55
@section('content')
66
<publish-form
7-
title='Configuration'
7+
title='{{ $title }}'
88
action={{ $route }}
99
:blueprint='@json($blueprint)'
1010
:meta='@json($meta)'

src/ConfigController.php

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Edalzell\Forma\Events\ConfigSaved;
66
use Illuminate\Http\Request;
7+
use Statamic\Extend\Addon;
78
use Statamic\Facades\Blueprint as BlueprintAPI;
89
use Statamic\Facades\Path;
910
use Statamic\Facades\YAML;
@@ -17,7 +18,9 @@ public function edit(Request $request)
1718
{
1819
$slug = $request->segment(2);
1920

20-
$blueprint = $this->getBlueprint($slug);
21+
$addon = Forma::findBySlug($slug);
22+
23+
$blueprint = $this->getBlueprint($addon);
2124

2225
$fields = $blueprint
2326
->fields()
@@ -28,6 +31,7 @@ public function edit(Request $request)
2831
'blueprint' => $blueprint->toPublishArray(),
2932
'meta' => $fields->meta(),
3033
'route' => cp_route("{$slug}.config.update", ['handle' => $slug]),
34+
'title' => $this->cpTitle($addon),
3135
'values' => $fields->values(),
3236
]);
3337
}
@@ -36,7 +40,9 @@ public function update(Request $request)
3640
{
3741
$slug = $request->segment(2);
3842

39-
$blueprint = $this->getBlueprint($slug);
43+
$addon = Forma::findBySlug($slug);
44+
45+
$blueprint = $this->getBlueprint($addon);
4046

4147
// Get a Fields object, and populate it with the submitted values.
4248
$fields = $blueprint->fields()->addValues($request->all());
@@ -47,18 +53,22 @@ public function update(Request $request)
4753

4854
$data = $this->postProcess($fields->process()->values()->toArray());
4955

50-
ConfigWriter::writeMany($slug, $data);
56+
$write = ConfigWriter::writeMany($slug, $data);
5157

52-
ConfigSaved::dispatch($data);
58+
ConfigSaved::dispatch($data, $addon);
5359
}
5460

55-
private function getBlueprint(string $slug): Blueprint
61+
private function getBlueprint(Addon $addon): Blueprint
5662
{
57-
$addon = Forma::findBySlug($slug);
58-
5963
$path = Path::assemble($addon->directory(), 'resources', 'blueprints', 'config.yaml');
6064

61-
return BlueprintAPI::makeFromFields(YAML::file($path)->parse());
65+
$yaml = YAML::file($path)->parse();
66+
67+
if ($yaml['tabs'] ?? false) {
68+
return BlueprintAPI::make()->setContents($yaml);
69+
}
70+
71+
return BlueprintAPI::makeFromFields($yaml);
6272
}
6373

6474
protected function postProcess(array $values): array
@@ -70,4 +80,19 @@ protected function preProcess(string $handle): array
7080
{
7181
return config($handle);
7282
}
83+
84+
public static function cpIcon()
85+
{
86+
return 'settings-horizontal';
87+
}
88+
89+
public static function cpSection()
90+
{
91+
return __('Settings');
92+
}
93+
94+
private function cpTitle(Addon $addon)
95+
{
96+
return __(':name Settings', ['name' => $addon->name()]);
97+
}
7398
}

src/Events/ConfigSaved.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
use Illuminate\Foundation\Events\Dispatchable;
66
use Illuminate\Queue\SerializesModels;
7+
use Statamic\Extend\Addon;
78

89
class ConfigSaved
910
{
1011
use Dispatchable, SerializesModels;
1112

12-
public function __construct(public array $config)
13+
public function __construct(public array $config, public Addon $addon)
1314
{
1415
}
1516
}

src/FormaAddon.php

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Statamic\Facades\Addon as AddonAPI;
99
use Statamic\Facades\Blink;
1010
use Statamic\Facades\CP\Nav as NavAPI;
11+
use Statamic\Facades\Permission;
1112
use Statamic\Statamic;
1213

1314
class FormaAddon
@@ -24,6 +25,7 @@ public function __construct(string $package, ?string $controller)
2425
public function boot()
2526
{
2627
$this->bootNav();
28+
$this->bootPermissions();
2729
$this->registerRoutes();
2830
}
2931

@@ -33,12 +35,25 @@ private function bootNav()
3335
return;
3436
}
3537

38+
$controllerInstance = app($this->controller);
39+
3640
NavAPI::extend(fn (Nav $nav) => $nav
3741
->content($addon->name())
38-
->section('Settings')
39-
->can('manage addon settings')
42+
->section($controllerInstance::cpSection())
43+
->can('manage '.$addon->slug().' settings')
4044
->route($addon->slug() . '.config.edit')
41-
->icon('settings-horizontal'));
45+
->icon($controllerInstance::cpIcon())
46+
);
47+
}
48+
49+
private function bootPermissions()
50+
{
51+
if (! $addon = $this->getAddon()) {
52+
return;
53+
}
54+
55+
Permission::register('manage '.$addon->slug().' settings')
56+
->label('Manage '.$addon->name().' Settings');
4257
}
4358

4459
private function getAddon(): ?Addon

src/ServiceProvider.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace Edalzell\Forma;
44

5-
use Statamic\Facades\Permission;
65
use Statamic\Providers\AddonServiceProvider;
76
use Statamic\Statamic;
87

@@ -18,14 +17,7 @@ public function boot()
1817
parent::boot();
1918

2019
Statamic::booted(function () {
21-
$this->bootPermissions();
2220
Forma::all()->each->boot();
2321
});
2422
}
25-
26-
private function bootPermissions()
27-
{
28-
Permission::register('manage addon settings')
29-
->label('Manage Addon Settings');
30-
}
3123
}

0 commit comments

Comments
 (0)