|
1 | 1 | <?php namespace AltDesign\AltRedirect; |
2 | 2 |
|
3 | | -// Facades |
4 | | -use AltDesign\AltRedirect\Console\Commands\DefaultQueryStringsCommand; |
5 | | -use AltDesign\AltRedirect\Helpers\Data; |
6 | | -use AltDesign\AltRedirect\Helpers\DefaultQueryStrings; |
| 3 | +use Statamic\Providers\AddonServiceProvider; |
7 | 4 | use Statamic\Facades\CP\Nav; |
8 | 5 | use Statamic\Facades\Permission; |
9 | 6 | use Statamic\Filesystem\Manager; |
| 7 | +use Statamic\StaticSite\SSG; |
| 8 | +use Illuminate\Support\Str; |
10 | 9 |
|
11 | | -// Providers |
12 | | -use Statamic\Providers\AddonServiceProvider; |
| 10 | +use AltDesign\AltRedirect\Console\Commands\DefaultQueryStringsCommand; |
| 11 | +use AltDesign\AltRedirect\Helpers\DefaultQueryStrings; |
| 12 | +use AltDesign\AltRedirect\Helpers\Data; |
13 | 13 |
|
14 | 14 | class ServiceProvider extends AddonServiceProvider |
15 | 15 | { |
@@ -95,12 +95,53 @@ public function installDefaultQueryStrings() : self |
95 | 95 | return $this; |
96 | 96 | } |
97 | 97 |
|
| 98 | + public function configureSSG() : self |
| 99 | + { |
| 100 | + if (!class_exists(SSG::class)) { |
| 101 | + return $this; |
| 102 | + } |
| 103 | + |
| 104 | + SSG::after(function () { |
| 105 | + $dest = config('statamic.ssg.destination'); |
| 106 | + $base = rtrim(config('statamic.ssg.base_url'), '/'); // remove trailing slash |
| 107 | + $disk = (new Manager())->disk(); |
| 108 | + |
| 109 | + $redirects = (new Data('redirects'))->all(); |
| 110 | + print("Found " . count($redirects) . " redirects\n"); |
| 111 | + |
| 112 | + $generated = $directories = 0; |
| 113 | + foreach( $redirects as $redirect ) { |
| 114 | + $fromDir = $dest . $redirect['from']; |
| 115 | + $from = sprintf('%s%sindex.html', |
| 116 | + $fromDir, |
| 117 | + (Str::endsWith($fromDir, '/') ? '' : '/') |
| 118 | + ); |
| 119 | + $to = $base . $redirect['to']; |
| 120 | + |
| 121 | + if (!$disk->exists($from)) { |
| 122 | + $contents = view('alt-redirect::ssg', ['to' => $to]); |
| 123 | + if (!$disk->isDirectory($fromDir)) { |
| 124 | + mkdir($fromDir, 0777, true); |
| 125 | + $directories++; |
| 126 | + } |
| 127 | + if ($disk->put($from, $contents)) { |
| 128 | + $generated++; |
| 129 | + } |
| 130 | + } |
| 131 | + } |
| 132 | + |
| 133 | + print("Generated $generated redirect files in $directories new directories\n"); |
| 134 | + }); |
| 135 | + return $this; |
| 136 | + } |
| 137 | + |
98 | 138 | public function bootAddon() |
99 | 139 | { |
100 | 140 | $this->addToNav() |
101 | 141 | ->registerPermissions() |
102 | 142 | ->registerCommands() |
103 | | - ->installDefaultQueryStrings(); |
| 143 | + ->installDefaultQueryStrings() |
| 144 | + ->configureSSG(); |
104 | 145 | } |
105 | 146 | } |
106 | 147 |
|
0 commit comments