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

namespace App\Http\Controllers\Refactor\Ads;

use App\Http\Controllers\Controller;
use App\Http\Requests\Refactor\Ads\StoreAdLeadFormRequest;
use App\Model\AdLeadFormConfig;
use App\Services\Ads\AdLeadFormService;
use Illuminate\Http\Request;

class AdLeadFormController extends Controller
{
    protected AdLeadFormService $service;

    public function __construct(AdLeadFormService $service)
    {
        $this->service = $service;
    }

    public function index(Request $request)
    {
        $customer = $request->user()->customer;
        $customerId = $customer->local()->id;

        $counts = [
            'total' => AdLeadFormConfig::ofCustomer($customerId)->count(),
            'active' => AdLeadFormConfig::ofCustomer($customerId)->where('status', AdLeadFormConfig::STATUS_ACTIVE)->count(),
            'leads' => (int) AdLeadFormConfig::ofCustomer($customerId)->sum('leads_count'),
            'paused' => AdLeadFormConfig::ofCustomer($customerId)->where('status', AdLeadFormConfig::STATUS_PAUSED)->count(),
        ];

        return view('refactor.pages.ads.lead_forms.index', [
            'counts' => $counts,
        ]);
    }

    public function listing(Request $request)
    {
        $customer = $request->user()->customer;
        $customerId = $customer->local()->id;

        $configs = AdLeadFormConfig::ofCustomer($customerId)
            ->search($request->keyword)
            ->orderBy('created_at', 'desc')
            ->paginate($request->per_page ?? 15);

        return view('refactor.pages.ads.lead_forms._list', [
            'configs' => $configs,
        ]);
    }

    public function create(Request $request)
    {
        $customer = $request->user()->customer;
        $mailLists = $customer->local()->mailLists()->orderBy('name')->get();

        return view('refactor.pages.ads.lead_forms.create', [
            'mailLists' => $mailLists,
        ]);
    }

    public function store(StoreAdLeadFormRequest $request)
    {
        $customer = $request->user()->customer;

        $config = $this->service->create($customer->local(), $request->validated());

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/ads_lead_forms.form_created'),
            'redirect' => route('refactor.ads.lead_forms.index'),
        ]);
    }

    public function sync(Request $request, string $uid)
    {
        $customer = $request->user()->customer;
        $config = AdLeadFormConfig::ofCustomer($customer->local()->id)->where('uid', $uid)->firstOrFail();

        $created = $this->service->syncLeads($config);

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/ads_lead_forms.synced', ['count' => $created]),
        ]);
    }

    public function delete(Request $request)
    {
        $customer = $request->user()->customer;
        $uids = is_array($request->uids) ? $request->uids : explode(',', $request->uids);

        $configs = AdLeadFormConfig::ofCustomer($customer->local()->id)->whereIn('uid', $uids)->get();

        foreach ($configs as $config) {
            $this->service->delete($config);
        }

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/ads_lead_forms.forms_deleted', ['count' => $configs->count()]),
        ]);
    }
}