| Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/ |
| Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/AppTranslationController.php |
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Http\Requests\Backend\AppTranslationRequest;
use App\Models\Backend\AppTranslation;
use App\Models\Backend\Ref;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AppTranslationController extends Controller
{
public function index(Request $request)
{
$search = $request->get('search');
$filterLang = $request->get('lang');
$languages = Ref::where('cat', 'LANGUAGE')->orderBy('sort')->pluck('descr', 'code');
if ($filterLang && isset($languages[$filterLang])) {
$items = AppTranslation::where('lang', $filterLang)
->when($search, function ($q) use ($search) {
$q->where(function ($sub) use ($search) {
$sub->where('key', 'like', "%{$search}%")
->orWhere('value', 'like', "%{$search}%");
});
})
->orderBy('key')
->paginate(10)
->onEachSide(1)
->withQueryString();
return view('backend.module.appTranslation.index', [
'items' => $items,
'languages' => $languages,
'search' => $search,
'filterLang' => $filterLang,
]);
}
$query = AppTranslation::when($search, function ($q) use ($search) {
$q->where('key', 'like', "%{$search}%")
->orWhere('value', 'like', "%{$search}%");
});
$allKeys = $query->clone()
->select('key')
->distinct()
->orderBy('key')
->get();
$langPerPage = 5;
$langPage = \Illuminate\Pagination\LengthAwarePaginator::resolveCurrentPage('lang_page');
$langCodes = $languages->keys();
$totalLangs = $langCodes->count();
$langChunk = $langCodes->slice(($langPage - 1) * $langPerPage, $langPerPage);
$translations = AppTranslation::when($search, function ($q) use ($search) {
$q->where('key', 'like', "%{$search}%")
->orWhere('value', 'like', "%{$search}%");
})
->whereIn('lang', $langChunk)
->get()
->groupBy('lang');
$grouped = collect();
foreach ($langChunk as $code) {
$descr = $languages[$code] ?? $code;
if ($translations->has($code)) {
$grouped[$code] = $translations[$code];
}
}
$langPaginator = new \Illuminate\Pagination\LengthAwarePaginator(
$grouped,
$totalLangs,
$langPerPage,
$langPage,
['path' => \Illuminate\Pagination\LengthAwarePaginator::resolveCurrentPath(), 'pageName' => 'lang_page']
);
$langPaginator->appends(request()->query());
return view('backend.module.appTranslation.index', [
'grouped' => $grouped,
'langPaginator' => $langPaginator,
'allKeys' => $allKeys,
'languages' => $languages,
'search' => $search,
'filterLang' => null,
]);
}
public function create()
{
$languages = Ref::where('cat', 'LANGUAGE')->orderBy('sort')->pluck('descr', 'code');
return view('backend.module.appTranslation.create', [
'languages' => $languages,
]);
}
public function store(AppTranslationRequest $request)
{
AppTranslation::updateOrCreate(
['key' => $request->key, 'lang' => $request->lang],
[
'value' => $request->value,
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]
);
flash()->success('Translation saved successfully!');
return redirect()->route('app-translation.index');
}
public function edit($key)
{
$items = AppTranslation::where('key', $key)->get();
if ($items->isEmpty()) {
abort(404);
}
$languages = Ref::where('cat', 'LANGUAGE')->orderBy('sort')->pluck('descr', 'code');
return view('backend.module.appTranslation.edit', [
'key' => $key,
'items' => $items->keyBy('lang'),
'languages' => $languages,
]);
}
public function update(Request $request, $key)
{
$request->validate([
'values' => 'nullable|array',
'values.*' => 'nullable|string',
]);
$languages = Ref::where('cat', 'LANGUAGE')->pluck('code');
foreach ($languages as $lang) {
$value = $request->input("values.{$lang}");
AppTranslation::updateOrCreate(
['key' => $key, 'lang' => $lang],
[
'value' => $value,
'updated_by' => auth()->id(),
]
);
}
flash()->success('Translation updated successfully!');
return redirect()->route('app-translation.index');
}
public function destroy($key)
{
AppTranslation::where('key', $key)->delete();
flash()->success('Translation deleted successfully.');
return redirect()->route('app-translation.index');
}
}