mivita/app/Http/Controllers/TranslationController.php
2025-10-20 17:42:08 +02:00

259 lines
7.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Category;
use Request;
use App\Models\Product;
use App\Models\Ingredient;
use App\Models\Shipping;
use App\Models\TransCategory;
use App\Models\TransProduct;
use App\Models\TransIngredient;
use App\Models\TransShipping;
use App\Models\TransUserLevel;
use App\Models\UserLevel;
use Illuminate\Support\Collection;
use JoeDixon\Translation\Language;
class TranslationController extends Controller
{
protected $sourceLanguage;
protected $selectLanguage;
protected $selectKey;
protected $keys;
protected $model;
/**
*/
public function __construct()
{
$this->sourceLanguage = 'de';
$this->selectLanguage = 'en';
$this->keys = [];
$this->model = "";
}
/**
*/
public function index($model, $lang=null)
{
//Request::get('key')
//Request::get('language')
$this->initByModel($model);
$languages = $this->allLanguages();
$languages->forget('de');
$translations = $this->getTranslationsFormModel();
$data = [
'keys' => $this->keys,
'languages' => $languages,
'model' => $this->model,
'select_language' => $this->selectLanguage,
'source_language' => $this->sourceLanguage,
'translations' => $translations,
'select_key' => $this->selectKey
];
return view('translation::languages.translations.custom', $data);
}
/**
*/
public function initByModel($model)
{
if($model === 'products'){
$this->model = $model;
$this->keys = [
'name'=>'Produktname',
'copy'=>'Produktbeschreibung',
'description'=>'Beschreibung',
'usage'=>'Anwendung',
'ingredients'=>'Hinweise',
];
$this->selectKey = 'name';
}
if($model === 'ingredients'){
$this->model = $model;
$this->keys = [
'name'=>'Name',
'inci'=>'INCI',
'effect'=>'Wirkung',
];
$this->selectKey = 'name';
}
if($model === 'user_levels'){
$this->model = $model;
$this->keys = [
'name'=>'Name',
];
$this->selectKey = 'name';
}
if($model === 'shippings'){
$this->model = $model;
$this->keys = [
'name'=>'Name',
];
$this->selectKey = 'name';
}
if($model === 'categories'){
$this->model = $model;
$this->keys = [
'name'=>'Name',
'headline'=>'Headline',
];
$this->selectKey = 'name';
}
if(Request::get('key')){
$this->selectKey = Request::get('key');
}
if(Request::get('language')){
$this->selectLanguage = Request::get('language');
}
//Request::get('language')
}
public function getTranslationsFormModel(){
if($this->model === 'products'){
return Product::all()->mapWithKeys(function ($value) {
return [$value->id => [
'master' => $value->name,
'source' => $value->{$this->selectKey},
'trans' => $value->getTrans($this->selectKey, $this->selectLanguage),
]
];
});
}
if($this->model === 'ingredients'){
return Ingredient::all()->mapWithKeys(function ($value) {
return [$value->id => [
'master' => $value->name,
'source' => $value->{$this->selectKey},
'trans' => $value->getTrans($this->selectKey, $this->selectLanguage),
]
];
});
}
if($this->model === 'user_levels'){
return UserLevel::all()->mapWithKeys(function ($value) {
return [$value->id => [
'master' => $value->name,
'source' => $value->{$this->selectKey},
'trans' => $value->getTrans($this->selectKey, $this->selectLanguage),
]
];
});
}
if($this->model === 'shippings'){
return Shipping::all()->mapWithKeys(function ($value) {
return [$value->id => [
'master' => $value->name,
'source' => $value->{$this->selectKey},
'trans' => $value->getTrans($this->selectKey, $this->selectLanguage),
]
];
});
}
if($this->model === 'categories'){
return Category::all()->mapWithKeys(function ($value) {
return [$value->id => [
'master' => $value->name,
'source' => $value->{$this->selectKey},
'trans' => $value->getTrans($this->selectKey, $this->selectLanguage),
]
];
});
}
}
public function update($model)
{
$id = Request::get('key'); //id
$key = Request::get('group'); //key colum
$language = Request::get('language'); //selectLanguage
$value = Request::get('value') ?: ''; //value
if($model === 'products'){
TransProduct::updateOrCreate([
'language' => $language,
'product_id' => $id,
'key' => $key,
], [
'key' => $key,
'value' => $value,
]);
}
if($model === 'ingredients'){
TransIngredient::updateOrCreate([
'language' => $language,
'ingredient_id' => $id,
'key' => $key,
], [
'key' => $key,
'value' => $value,
]);
}
if($model === 'user_levels'){
TransUserLevel::updateOrCreate([
'language' => $language,
'user_level_id' => $id,
'key' => $key,
], [
'key' => $key,
'value' => $value,
]);
}
if($model === 'shippings'){
TransShipping::updateOrCreate([
'language' => $language,
'shipping_id' => $id,
'key' => $key,
], [
'key' => $key,
'value' => $value,
]);
}
if($model === 'categories'){
TransCategory::updateOrCreate([
'language' => $language,
'categorie_id' => $id,
'key' => $key,
], [
'key' => $key,
'value' => $value,
]);
}
return ['success' => true];
}
/**
* Get all languages from the application.
*
* @return Collection
*/
public function allLanguages()
{
return Language::all()->mapWithKeys(function ($language) {
return [$language->language => $language->name ?: $language->language];
});
}
}