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/Admin/TutorialController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Model\Tutorial;
use App\Model\TutorialTranslation;
use Illuminate\Http\Request;

class TutorialController extends Controller
{
    public function index(Request $request)
    {
        return view('admin.tutorials.index');
    }

    public function listing(Request $request)
    {
        $items = Tutorial::search($request->keyword)
            ->sorted()
            ->paginate($request->per_page ?? 20);

        return view('admin.tutorials._list', ['items' => $items]);
    }

    public function create()
    {
        return view('admin.tutorials.create', [
            'tutorial' => new Tutorial(),
        ]);
    }

    public function store(Request $request)
    {
        $request->validate([
            'slug'     => 'required|string|unique:tutorials,slug',
            'category' => 'nullable|string',
            'status'   => 'required|in:active,inactive',
            'translations' => 'required|array',
            'translations.*.locale' => 'required|string',
            'translations.*.title'  => 'required|string',
            'translations.*.body'   => 'nullable|string',
        ]);

        $tutorial = Tutorial::create([
            'slug'       => $request->slug,
            'category'   => $request->category,
            'sort_order' => Tutorial::max('sort_order') + 1,
            'status'     => $request->status,
        ]);

        foreach ($request->translations as $t) {
            if (!empty($t['title'])) {
                $tutorial->translations()->create([
                    'locale' => $t['locale'],
                    'title'  => $t['title'],
                    'body'   => $t['body'] ?? '',
                ]);
            }
        }

        return redirect()->action([self::class, 'index'])
            ->with('alert-success', 'Tutorial created.');
    }

    public function edit(string $uid)
    {
        $tutorial = Tutorial::findByUid($uid);
        abort_if(!$tutorial, 404);

        $locales = $tutorial->translations->pluck('locale')->toArray();
        if (!in_array('en', $locales)) {
            $locales[] = 'en';
        }

        return view('admin.tutorials.edit', [
            'tutorial' => $tutorial,
            'locales'  => $locales,
        ]);
    }

    public function update(Request $request, string $uid)
    {
        $tutorial = Tutorial::findByUid($uid);
        abort_if(!$tutorial, 404);

        $request->validate([
            'slug'     => 'required|string|unique:tutorials,slug,' . $tutorial->id,
            'category' => 'nullable|string',
            'status'   => 'required|in:active,inactive',
            'translations' => 'array',
            'translations.*.locale' => 'required|string',
            'translations.*.title'  => 'required|string',
            'translations.*.body'   => 'nullable|string',
        ]);

        $tutorial->update([
            'slug'     => $request->slug,
            'category' => $request->category,
            'status'   => $request->status,
        ]);

        foreach ($request->translations ?? [] as $t) {
            if (empty($t['title'])) continue;

            TutorialTranslation::updateOrCreate(
                ['tutorial_id' => $tutorial->id, 'locale' => $t['locale']],
                ['title' => $t['title'], 'body'  => $t['body'] ?? '']
            );
        }

        return redirect()->action([self::class, 'index'])
            ->with('alert-success', 'Tutorial updated.');
    }

    public function delete(Request $request)
    {
        $uids = explode(',', $request->uids);
        Tutorial::whereIn('uid', $uids)->each(fn ($t) => $t->delete());

        return redirect()->action([self::class, 'index'])
            ->with('alert-success', 'Tutorial(s) deleted.');
    }

    public function sort(Request $request)
    {
        foreach ($request->items ?? [] as $i => $uid) {
            Tutorial::where('uid', $uid)->update(['sort_order' => $i]);
        }
        return response()->json(['status' => 'ok']);
    }
}