HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
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'));
    }
}