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

namespace App\Http\Controllers\Refactor\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\Blacklist;
use App\Model\JobMonitor;
use App\Jobs\ImportBlacklistJob;

class BlacklistController extends Controller
{
    public function index(Request $request)
    {
        if (!$request->user()->admin->can('read', new Blacklist())) {
            return $this->notAuthorized();
        }

        $admin = $request->user()->admin;
        $job = $admin->importBlacklistJobs()->first();

        $stats = [
            'total' => Blacklist::count(),
        ];

        return view('refactor.pages.admin.blacklist.index', compact('stats', 'job'));
    }

    public function listing(Request $request)
    {
        if (!$request->user()->admin->can('read', new Blacklist())) {
            return $this->notAuthorized();
        }

        $items = Blacklist::search($request)->paginate($request->per_page ?? 15);

        return view('refactor.pages.admin.blacklist._list', compact('items'));
    }

    public function store(Request $request)
    {
        $admin = $request->user()->admin;

        if (!$admin->can('create', new Blacklist())) {
            return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
        }

        $validator = \Validator::make($request->all(), [
            'email' => 'required|email|unique:blacklists,email',
        ], [
            'email.unique' => trans('refactor/admin_blacklist.flash.duplicate'),
        ]);

        if ($validator->fails()) {
            return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422);
        }

        $blacklist = new Blacklist();
        $blacklist->fill($request->only(['email', 'reason']));
        $blacklist->customer_id = null;
        $blacklist->admin_id = $admin->id;
        $blacklist->save();

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/admin_blacklist.flash.added'),
        ]);
    }

    public function delete(Request $request)
    {
        $items = Blacklist::whereIn(
            'id',
            is_array($request->uids) ? $request->uids : explode(',', $request->uids)
        );

        foreach ($items->get() as $item) {
            if ($request->user()->admin->can('delete', $item)) {
                $item->delist();
                $item->delete();
            }
        }

        return response()->json(['status' => 'success', 'message' => trans('refactor/admin_blacklist.flash.deleted')]);
    }

    public function reason(Request $request, $id)
    {
        $blacklist = Blacklist::find($id);

        if (!$blacklist) {
            return response()->json(['status' => 'error', 'message' => 'Not found'], 404);
        }

        return view('refactor.pages.admin.blacklist.reason', compact('blacklist'));
    }

    public function import(Request $request)
    {
        if (!$request->user()->admin->can('import', new Blacklist())) {
            return $this->notAuthorized();
        }

        $admin = $request->user()->admin;
        $job = $admin->importBlacklistJobs()->first();

        if ($job) {
            return view('refactor.pages.admin.blacklist.import', [
                'currentJobUid' => $job->uid,
                'cancelUrl' => route('refactor.admin.blacklist.cancel-import', ['job_uid' => $job->uid]),
                'progressCheckUrl' => route('refactor.admin.blacklist.import-progress', ['job_uid' => $job->uid]),
            ]);
        }

        return view('refactor.pages.admin.blacklist.import');
    }

    public function startImport(Request $request)
    {
        $admin = $request->user()->admin;

        if (!$admin->can('import', new Blacklist())) {
            return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
        }

        if ($request->hasFile('file')) {
            $filepath = Blacklist::upload($request->file('file'));
            $job = $admin->dispatchWithMonitor(new ImportBlacklistJob($filepath, $customer = null));

            return response()->json([
                'status' => 'success',
                'message' => trans('refactor/admin_blacklist.flash.import_started'),
                'redirect' => route('refactor.admin.blacklist.import'),
            ]);
        }

        return response()->json(['status' => 'error', 'message' => 'No file uploaded'], 422);
    }

    public function importProgress(Request $request)
    {
        if (!$request->user()->admin->can('read', new Blacklist())) {
            return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
        }

        $job = JobMonitor::findByUid($request->job_uid);

        if (!$job) {
            return response()->json(['status' => 'error', 'message' => 'Job not found'], 404);
        }

        $progress = $job->getJsonData();
        $progress['status'] = $job->status;
        $progress['error'] = $job->error;

        return response()->json($progress);
    }

    public function cancelImport(Request $request)
    {
        $job = JobMonitor::findByUid($request->job_uid);

        if (!$job) {
            return response()->json(['status' => 'error', 'message' => 'Job not found'], 404);
        }

        $job->cancel();

        return response()->json(['status' => 'success', 'message' => trans('refactor/admin_blacklist.flash.import_cancelled')]);
    }
}