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/ai.naniguide.com/app/Http/Controllers/SourceController.php
<?php

namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Model\MailList;
use App\Model\EmailVerificationServer;
use App\Events\MailListSubscription;
use App\Model\Setting;
use App\Model\Customer;
use App\Model\Product;
use App\Model\Source;
use App\Model\WooCommerce;
use App\Model\Lazada;

class SourceController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        return view('sources.index');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function listing(Request $request)
    {
        $sources = $request->user()->customer->local()->sources()
            ->search($request->keyword)
            ->orderBy($request->sort_order, $request->sort_direction)
            ->paginate($request->per_page);

        return view('sources._list', [
            'sources' => $sources,
        ]);
    }

    /**
     * Show source details.
     *
     * @return \Illuminate\Http\Response
     */
    public function show(Request $request, $uid)
    {
        $source = Source::findByUid($uid);
        $automation = $request->user()->customer->local()->getAbandonedEmailAutomation($source);
        // var_dump($automation);die();

        return view('sources.show', [
            'source' => $source,
            'automation' => $automation,
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        // Generate info
        $customer = $request->user()->customer;

        // Get lazada connection
        $lazadaSource = $request->user()->customer->local()->newProductSource('Lazada');

        // authorize
        if (\Gate::denies('create', Source::class)) {
            return $this->notAuthorized();
        }

        return view('sources.create', [
            'lazadaConnectLink' => $lazadaSource->service()->getConnectLink(),
        ]);
    }

    /**
     * Receive code and generate token.
     *
     * @return \Illuminate\Http\Response
     */
    public function connect(Request $request)
    {
        // connection
        $lazadaSource = $request->user()->customer->local()->newProductSource('Lazada');
        $lazadaSource->init($request->code);

        // redirect
        $request->session()->flash('success', 'Connected to Lazada!');
        return redirect()->action('SourceController@index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return \Illuminate\Http\Response
     */
    public function delete(Request $request)
    {
        $sources = \App\Model\Source::whereIn(
            'uid',
            is_array($request->uids) ? $request->uids : explode(',', $request->uids)
        );

        foreach ($sources->get() as $source) {
            // authorize
            if (!\Gate::allows('delete', $source)) {
                // Redirect to my lists page
                return response()->json([
                    'status' => 'error',
                    'message' => trans('messages.source.delete.can_not'),
                ]);
            }

            // do delete
            $source->delete();
        }

        // Redirect to my lists page
        return response()->json([
            'status' => 'success',
            'message' => trans('messages.source.deleted'),
        ]);
    }

    /**
     * Import product from source.
     *
     * @return \Illuminate\Http\Response
     */
    public function sync(Request $request, $uid)
    {
        // connection
        $source = Source::findByUid($uid);
        $source = $source->classMapping();

        // import products
        $source->sync();

        // redirect
        $request->session()->flash('alert-success', 'Products were imported!');
        return redirect()->action('SourceController@index');
    }

    /**
     * Connect to WooCommerce.
     *
     * @return \Illuminate\Http\Response
     */
    public function wooConnect(Request $request)
    {
        // saving
        if ($request->isMethod('post')) {
            list($source, $validator) = WooCommerce::init($request->connect_url, $request->user()->customer);

            // redirect if fails
            if ($validator->fails()) {
                return response()->view('sources.wooConnect', [
                    'errors' => $validator->errors(),
                ], 400);
            }

            // create default list for the source
            $source->createDefaultList();

            // success
            return response()->json([
                'status' => 'success',
                'redirect' => action('SourceController@index'),
            ]);
        }

        return view('sources.wooConnect');
    }
}