Add related help titles and fix umlauts
This commit is contained in:
@@ -4,6 +4,7 @@ namespace App\Services\Help;
|
||||
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
@@ -70,6 +71,8 @@ class HelpSyncService
|
||||
}
|
||||
}
|
||||
|
||||
$articles = $this->hydrateRelatedTitles($articles);
|
||||
|
||||
$disk = config('help.disk');
|
||||
$compiledPath = trim(config('help.compiled_path'), '/');
|
||||
$written = [];
|
||||
@@ -87,6 +90,58 @@ class HelpSyncService
|
||||
return $written;
|
||||
}
|
||||
|
||||
private function hydrateRelatedTitles(Collection $articles): Collection
|
||||
{
|
||||
$titleIndex = $articles->mapWithKeys(function (array $article) {
|
||||
$audience = Arr::get($article, 'audience');
|
||||
$locale = Arr::get($article, 'locale');
|
||||
$slug = Arr::get($article, 'slug');
|
||||
|
||||
if (! $audience || ! $locale || ! $slug) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [$this->articleKey((string) $audience, (string) $locale, (string) $slug) => Arr::get($article, 'title')];
|
||||
});
|
||||
|
||||
return $articles->map(function (array $article) use ($titleIndex) {
|
||||
$related = Arr::get($article, 'related', []);
|
||||
|
||||
if (empty($related)) {
|
||||
return $article;
|
||||
}
|
||||
|
||||
$audience = (string) Arr::get($article, 'audience');
|
||||
$locale = (string) Arr::get($article, 'locale');
|
||||
|
||||
$article['related'] = collect($related)
|
||||
->map(function ($item) use ($titleIndex, $audience, $locale) {
|
||||
$slug = is_array($item) ? Arr::get($item, 'slug') : (is_string($item) ? $item : null);
|
||||
|
||||
if (! $slug) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$title = $titleIndex->get($this->articleKey($audience, $locale, $slug));
|
||||
|
||||
return array_filter([
|
||||
'slug' => $slug,
|
||||
'title' => $title,
|
||||
], static fn ($value) => $value !== null && $value !== '');
|
||||
})
|
||||
->filter()
|
||||
->values()
|
||||
->all();
|
||||
|
||||
return $article;
|
||||
});
|
||||
}
|
||||
|
||||
private function articleKey(string $audience, string $locale, string $slug): string
|
||||
{
|
||||
return sprintf('%s::%s::%s', $audience, $locale, $slug);
|
||||
}
|
||||
|
||||
private function parseFile(SplFileInfo $file): array
|
||||
{
|
||||
$contents = $this->files->get($file->getPathname());
|
||||
|
||||
Reference in New Issue
Block a user