Files
citrus/database/seeders/Concerns/SeedsSiteTranslations.php
T

73 lines
2.1 KiB
PHP

<?php
namespace Database\Seeders\Concerns;
use App\Models\Page;
use App\Models\SiteTranslation;
use Illuminate\Support\Facades\Cache;
trait SeedsSiteTranslations
{
/**
* @param array<string, array<string, string>> $siteData
*/
protected function seedSiteTranslations(array $siteData): void
{
foreach ($siteData as $key => $translations) {
$record = SiteTranslation::firstOrNew(['hash' => md5($key)]);
$existing = $record->translations ?? [];
$merged = array_merge($existing, [
'tr' => $translations['tr'] ?? $existing['tr'] ?? $key,
], array_filter(
$translations,
fn ($value, $lang) => $value !== '' && $lang !== 'tr',
ARRAY_FILTER_USE_BOTH
));
SiteTranslation::updateOrCreate(
['hash' => md5($key)],
[
'key' => $key,
'translations' => $merged,
]
);
}
}
/**
* @param array<string|int, array<string, array<string, string>>> $pagesData
*/
protected function seedPageTranslations(array $pagesData): void
{
foreach ($pagesData as $pageKey => $fields) {
$page = is_numeric($pageKey)
? Page::query()->whereKey((int) $pageKey)->first()
: Page::query()->where('slug', (string) $pageKey)->first();
if (! $page) {
continue;
}
foreach ($fields as $fieldName => $translations) {
foreach ($translations as $languageCode => $value) {
if ($value === '') {
continue;
}
$page->setTranslation($fieldName, $languageCode, $value, 'published', 1);
}
if (! isset($translations['tr'])) {
$page->setTranslation($fieldName, 'tr', $page->{$fieldName}, 'published', 1);
}
}
}
}
protected function flushTranslationCache(): void
{
Cache::flush();
}
}