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

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\CustomerEmailTemplate;
use App\Model\SystemEmailTemplate;

class CustomerEmailTemplateController extends Controller
{
    public function index(Request $request)
    {
        if (!$request->user()->can('list', new \App\Model\CustomerEmailTemplate())) {
            return $this->notAuthorized();
        }

        return view('customer_email_templates.index');
    }

    public function list(Request $request)
    {
        if (!$request->user()->can('list', new \App\Model\CustomerEmailTemplate())) {
            return $this->notAuthorized();
        }

        // view
        $view = $request->view ? $request->view : 'grid';

        $customerEmailTemplates = CustomerEmailTemplate::query();

        if (!empty($request->category_uid)) {
            $customerEmailTemplates = $customerEmailTemplates->categoryUid($request->category_uid);
        }

        $customerEmailTemplates = $customerEmailTemplates->search($request->keyword)
            ->orderBy($request->sort_order, $request->sort_direction)
            ->paginate($request->per_page ? $request->per_page : 12);

        return view('customer_email_templates._list_' . $view, [
            'customerEmailTemplates' => $customerEmailTemplates,
        ]);
    }

    public function add(Request $request)
    {
        $customerEmailTemplate = $request->user()->customer->local()->newCustomerEmailTemplate();
        $customerEmailTemplate->name = trans('messages.untitled_template');

        // authorize
        if (!$request->user()->can('create', CustomerEmailTemplate::class)) {
            return $this->notAuthorized();
        }

        // validate and save posted data
        if ($request->isMethod('post')) {
            $currentSystemEmailTemplate = SystemEmailTemplate::findByUid($request->template);

            \App\Services\TemplateService::for($customerEmailTemplate)
                ->setTemplate($currentSystemEmailTemplate->template, $request->name);

            return redirect()->action('CustomerEmailTemplateController@builder', $customerEmailTemplate->uid);
        }

        return view('customer_email_templates.add', [
            'customerEmailTemplate' => $customerEmailTemplate,
        ]);
    }

    public function templates(Request $request)
    {
        // authorize
        if (!$request->user()->can('create', CustomerEmailTemplate::class)) {
            return $this->notAuthorized();
        }

        //
        $systemEmailTemplates = SystemEmailTemplate::query();

        // filter by category
        if (!empty($request->category_uid)) {
            $systemEmailTemplates = $systemEmailTemplates->categoryUid($request->category_uid);
        }

        // sort, pagination
        $systemEmailTemplates = $systemEmailTemplates->search($request->keyword)
            ->orderBy($request->sort_order, $request->sort_direction)
            ->paginate($request->per_page);

        return view('customer_email_templates.templates', [
            'systemEmailTemplates' => $systemEmailTemplates,
        ]);
    }

    public function builder(Request $request, $uid)
    {
        // Generate info
        $customerEmailTemplate = CustomerEmailTemplate::findByUid($uid);

        // authorize
        if (!$request->user()->can('update', $customerEmailTemplate)) {
            return $this->notAuthorized();
        }

        // validate and save posted data
        if ($request->isMethod('post')) {
            //
            $validator = $customerEmailTemplate->updateContent($request->json, $request->content);

            //
            if ($validator->fails()) {
                return response()->json($validator->errors(), 400);
            }

            //
            return response()->json([
                'status' => 'success',
            ]);
        }

        return view('customer_email_templates.builder', [
            'customerEmailTemplate' => $customerEmailTemplate,
            'templates' => SystemEmailTemplate::get()->map(function ($item, $key) {
                return $item->template;
            }),
        ]);
    }

    public function changeName(Request $request)
    {
        $customerEmailTemplate = CustomerEmailTemplate::findByUid($request->uid);

        // authorize
        if (!$request->user()->can('update', $customerEmailTemplate)) {
            return $this->notAuthorized();
        }

        if ($request->isMethod('post')) {
            // change name
            $validator = $customerEmailTemplate->changeName($request->name);

            if ($validator->fails()) {
                return response()->view('customer_email_templates.changeName', [
                    'customerEmailTemplate' => $customerEmailTemplate,
                    'errors' => $validator->errors(),
                ], 400);
            }

            return response()->json([
                'status' => 'success',
                'message' => trans('messages.template.name.changed'),
            ], 201);
        }

        return view('customer_email_templates.changeName', [
            'customerEmailTemplate' => $customerEmailTemplate,
        ]);
    }

    public function preview(Request $request, $uid)
    {
        $customerEmailTemplate = CustomerEmailTemplate::findByUid($uid);

        // authorize
        if (!$request->user()->can('preview', $customerEmailTemplate)) {
            return $this->notAuthorized();
        }

        return $customerEmailTemplate->template->getPreviewContent();
    }

    public function copy(Request $request)
    {
        $customerEmailTemplate = CustomerEmailTemplate::findByUid($request->uid);

        if ($request->isMethod('post')) {
            // authorize
            if (!$request->user()->can('copy', $customerEmailTemplate)) {
                return $this->notAuthorized();
            }

            // copy
            $customerEmailTemplate->copy($request->name);

            echo trans('messages.template.copied');
            return;
        }

        return view('customer_email_templates.copy', [
            'customerEmailTemplate' => $customerEmailTemplate,
        ]);
    }

    public function delete(Request $request)
    {
        $customerEmailTemplates = CustomerEmailTemplate::whereIn('uid', is_array($request->uids) ? $request->uids : explode(',', $request->uids))->get();

        //
        foreach ($customerEmailTemplates as $customerEmailTemplate) {
            if (!$request->user()->can('delete', $customerEmailTemplate)) {
                return $this->notAuthorized();
            }

            // delete
            $customerEmailTemplate->deleteAndCleanup();
        }

        //
        echo trans('messages.template.deleted');
    }
}