diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7579f74 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +vendor +composer.lock diff --git a/src/Events/DataSavedEvent.php b/src/Events/DataSavedEvent.php new file mode 100644 index 0000000..8e68d98 --- /dev/null +++ b/src/Events/DataSavedEvent.php @@ -0,0 +1,22 @@ +item = $item; + } + + public function commitMessage() + { + return $this->item->getMessage(); + } +} diff --git a/src/Events/DataSavedEventMessage.php b/src/Events/DataSavedEventMessage.php new file mode 100644 index 0000000..fde5d6c --- /dev/null +++ b/src/Events/DataSavedEventMessage.php @@ -0,0 +1,23 @@ +msg = $message; + } + + public function getMessage(): string + { + return $this->msg; + } +} diff --git a/src/Helpers/Data.php b/src/Helpers/Data.php index 531937b..155c891 100644 --- a/src/Helpers/Data.php +++ b/src/Helpers/Data.php @@ -1,4 +1,5 @@ checkOrMakeDirectories(); - if(!$onlyRegex) { + if (!$onlyRegex) { $allRedirects = []; - foreach($this->types[$this->type] as $path) { + foreach ($this->types[$this->type] as $path) { $filePath = base_path($path); $allRedirects = array_merge($allRedirects, File::files($filePath)); } @@ -62,8 +63,8 @@ public function __construct($type, $onlyRegex = false) public function checkOrMakeDirectories() { - foreach($this->types as $type) { - foreach($type as $directory) { + foreach ($this->types as $type) { + foreach ($type as $directory) { if (!$this->manager->disk()->exists($directory)) { $this->manager->disk()->makeDirectory($directory); } @@ -71,7 +72,7 @@ public function checkOrMakeDirectories() } } - public function getByKey($key, $value) : array | null + public function getByKey($key, $value): array | null { $data = collect($this->data); $result = $data->firstWhere($key, $value); diff --git a/src/Http/Controllers/AltRedirectController.php b/src/Http/Controllers/AltRedirectController.php index 109b8f7..f52d35a 100644 --- a/src/Http/Controllers/AltRedirectController.php +++ b/src/Http/Controllers/AltRedirectController.php @@ -7,6 +7,8 @@ use Statamic\Fields\Blueprint; use Statamic\Fields\BlueprintRepository; use Statamic\Filesystem\Manager; +use AltDesign\AltRedirect\Events\DataSavedEvent; +use AltDesign\AltRedirect\Events\DataSavedEventMessage; class AltRedirectController { @@ -45,7 +47,7 @@ public function index() $values = $data->all(); // Get a blueprint.So - $blueprint = with(new BlueprintRepository)->setDirectory(__DIR__.'/../../../resources/blueprints')->find($this->type); + $blueprint = with(new BlueprintRepository())->setDirectory(__DIR__.'/../../../resources/blueprints')->find($this->type); // Get a Fields object $fields = $blueprint->fields(); // Add the values to the object @@ -75,7 +77,7 @@ public function create(Request $request) $data = new Data($this->type); // Get a blueprint. - $blueprint = with(new BlueprintRepository)->setDirectory(__DIR__.'/../../../resources/blueprints')->find($this->type); + $blueprint = with(new BlueprintRepository())->setDirectory(__DIR__.'/../../../resources/blueprints')->find($this->type); // Get a Fields object $fields = $blueprint->fields(); @@ -102,6 +104,8 @@ public function create(Request $request) $data->setAll($fields->process()->values()->toArray()); + DataSavedEvent::dispatch(new DataSavedEventMessage('Created redirect')); + $data = new Data($this->type); $values = $data->all(); @@ -113,8 +117,8 @@ public function create(Request $request) public function delete(Request $request) { $disk = (new Manager())->disk(); - switch($this->type) { - case "redirects" : + switch ($this->type) { + case "redirects": $disk->delete('content/alt-redirect/' . hash('sha512', base64_encode($request->from)) . '.yaml'); $disk->delete('content/alt-redirect/' . base64_encode($request->from) . '.yaml'); $disk->delete('content/alt-redirect/alt-regex/' . hash('sha512', base64_encode($request->id)) . '.yaml'); @@ -128,6 +132,8 @@ public function delete(Request $request) $data = new Data($this->type); $values = $data->all(); + DataSavedEvent::dispatch(new DataSavedEventMessage('Deleted redirect')); + return [ 'data' => $values, ]; @@ -192,6 +198,7 @@ public function import(Request $request) $data = new Data('redirects'); $data->saveAll($currentData); + DataSavedEvent::dispatch(new DataSavedEventMessage('Imported redirects')); } // Toggle a key in a certain item and return the data afterwards @@ -213,6 +220,7 @@ public function toggle(Request $request) } $item[$toggleKey] = !$item[$toggleKey]; $data->setAll($item); + DataSavedEvent::dispatch(new DataSavedEventMessage('Updated redirect querystring')); break; default: return response('Method not implemented', 500); diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 6d4ca13..9accc48 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -1,15 +1,18 @@ -content('Alt Redirect') @@ -57,7 +60,7 @@ public function addToNav() : self * * @return self */ - public function registerPermissions() : self + public function registerPermissions(): self { Permission::register('view alt-redirect') ->label('View Alt Redirect Settings'); @@ -70,7 +73,7 @@ public function registerPermissions() : self * * @return self */ - public function registerCommands() : self + public function registerCommands(): self { $this->commands([ DefaultQueryStringsCommand::class, @@ -83,19 +86,19 @@ public function registerCommands() : self * * @return self */ - public function installDefaultQueryStrings() : self + public function installDefaultQueryStrings(): self { // create the standard if ($this->app->runningInConsole()) { $disk = (new Manager())->disk(); if (!$disk->exists('content/alt-redirect/.installed')) { - (new DefaultQueryStrings)->makeDefaultQueryStrings(); + (new DefaultQueryStrings())->makeDefaultQueryStrings(); } } return $this; } - public function configureSSG() : self + public function configureSSG(): self { if (!class_exists(SSG::class)) { return $this; @@ -110,9 +113,10 @@ public function configureSSG() : self print("Found " . count($redirects) . " redirects\n"); $generated = $directories = 0; - foreach( $redirects as $redirect ) { + foreach ($redirects as $redirect) { $fromDir = $dest . $redirect['from']; - $from = sprintf('%s%sindex.html', + $from = sprintf( + '%s%sindex.html', $fromDir, (Str::endsWith($fromDir, '/') ? '' : '/') ); @@ -135,12 +139,20 @@ public function configureSSG() : self return $this; } + public function registerEventHandler() + { + if (config('statamic.git.enabled')) { + Git::listen(DataSavedEvent::class); + } + return $this; + } + public function bootAddon() { $this->addToNav() ->registerPermissions() ->registerCommands() + ->registerEventHandler() ->configureSSG(); } } -