File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Refactor/Admin/LanguageController.php
<?php
namespace App\Http\Controllers\Refactor\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\Country;
use App\Model\Language;
class LanguageController extends Controller
{
/**
* ISO 639-1 codes + country list used by create/edit forms.
*/
protected function formOptions(): array
{
$languageCodes = config('languages');
asort($languageCodes);
$countries = collect(Country::countries())
->sortBy('name')
->values()
->all();
return compact('languageCodes', 'countries');
}
public function index(Request $request)
{
if (\Gate::denies('list', Language::class)) {
return $this->notAuthorized();
}
$stats = [
'total' => Language::count(),
'active' => Language::active()->count(),
];
return view('refactor.pages.admin.languages.index', compact('stats'));
}
public function listing(Request $request)
{
if (\Gate::denies('list', Language::class)) {
return $this->notAuthorized();
}
$query = Language::search($request->keyword);
if ($request->status && $request->status !== 'all') {
$query = $query->where('status', $request->status);
}
$query = $query->orderBy($request->sort_order ?? 'created_at', $request->sort_direction ?? 'desc');
$items = $query->paginate($request->per_page ?? 15);
return view('refactor.pages.admin.languages._list', compact('items'));
}
public function create(Request $request)
{
$language = Language::newDefaultLanguage();
if (\Gate::denies('create', $language)) {
return $this->notAuthorized();
}
return view('refactor.pages.admin.languages.create', array_merge(
compact('language'),
$this->formOptions()
));
}
public function store(Request $request)
{
if (\Gate::denies('create', Language::class)) {
return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
}
list($language, $validator) = Language::createFromArray($request->all());
if ($validator !== true) {
return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422);
}
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_languages.flash.created'),
]);
}
public function edit(Request $request, $uid)
{
$language = Language::findByUid($uid);
if (!$language) {
return response()->json(['status' => 'error', 'message' => 'Not found'], 404);
}
if (\Gate::denies('update', $language)) {
return $this->notAuthorized();
}
return view('refactor.pages.admin.languages.edit', array_merge(
compact('language'),
$this->formOptions()
));
}
public function update(Request $request, $uid)
{
$language = Language::findByUid($uid);
if (!$language) {
return response()->json(['status' => 'error', 'message' => 'Not found'], 404);
}
if (\Gate::denies('update', $language)) {
return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
}
$validator = $language->updateFromRequest($request);
if ($validator !== true) {
return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422);
}
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_languages.flash.updated'),
]);
}
public function enable(Request $request)
{
$items = Language::whereIn('uid', is_array($request->uids) ? $request->uids : explode(',', $request->uids));
foreach ($items->get() as $item) {
if (\Gate::allows('enable', $item)) {
$item->enable();
}
}
return response()->json(['status' => 'success', 'message' => trans('refactor/admin_languages.flash.enabled')]);
}
public function disable(Request $request)
{
$items = Language::whereIn('uid', is_array($request->uids) ? $request->uids : explode(',', $request->uids));
foreach ($items->get() as $item) {
if (\Gate::allows('disable', $item)) {
$item->disable();
}
}
return response()->json(['status' => 'success', 'message' => trans('refactor/admin_languages.flash.disabled')]);
}
public function delete(Request $request)
{
$items = Language::whereIn('uid', is_array($request->uids) ? $request->uids : explode(',', $request->uids));
foreach ($items->get() as $item) {
if (\Gate::allows('delete', $item)) {
$item->deleteAndCleanup();
}
}
return response()->json(['status' => 'success', 'message' => trans('refactor/admin_languages.flash.deleted')]);
}
// ─── Proxy methods (forward to old controller) ──────────────
public function translate(Request $request, $uid)
{
return app(\App\Http\Controllers\Admin\LanguageController::class)->translate($request, $uid);
}
public function download(Request $request, $uid)
{
return app(\App\Http\Controllers\Admin\LanguageController::class)->download($request, $uid);
}
public function upload(Request $request, $uid)
{
$language = Language::findByUid($uid);
if (!$language) {
return response()->json(['status' => 'error', 'message' => 'Not found'], 404);
}
if (\Gate::denies('update', $language)) {
return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
}
if ($request->isMethod('post')) {
$validator = $language->upload($request);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'message' => $validator->errors()->first(),
], 422);
}
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_languages.flash.uploaded'),
'report' => $language->uploadReport,
]);
}
return view('refactor.pages.admin.languages.upload', compact('language'));
}
}