73 lines
2.1 KiB
PHP
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();
|
|
}
|
|
}
|