Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/job-board.corals.io/Corals/modules/Ecommerce/Http/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/job-board.corals.io/Corals/modules/Ecommerce/Http/Controllers/SKUController.php
<?php

namespace Corals\Modules\Ecommerce\Http\Controllers;

use Corals\Foundation\Http\Controllers\BaseController;
use Corals\Foundation\Http\Requests\BulkRequest;
use Corals\Modules\Ecommerce\Classes\Ecommerce;
use Corals\Modules\Ecommerce\DataTables\SKUDataTable;
use Corals\Modules\Ecommerce\Http\Requests\SKURequest;
use Corals\Modules\Ecommerce\Models\Product;
use Corals\Modules\Ecommerce\Models\SKU;
use Corals\Modules\Ecommerce\Traits\DownloadableController;
use Corals\Modules\Payment\Common\Models\Tax;
use Illuminate\Http\Request;

class SKUController extends BaseController
{
    use DownloadableController;

    public function __construct()
    {
        $this->resource_url = route(
            config('ecommerce.models.sku.resource_route'),
            ['product' => request()->route('product') ?: '_']
        );

        $this->title = 'Ecommerce::module.sku.title';
        $this->title_singular = 'Ecommerce::module.sku.title_singular';

        parent::__construct();
    }

    /**
     * @param SKURequest $request
     * @param Product $product
     * @param SKUDataTable $dataTable
     * @return mixed
     */
    public function index(SKURequest $request, Product $product, SKUDataTable $dataTable)
    {
        $this->setViewSharedData(['title' => trans('Ecommerce::labels.sku.index_title', ['name' => $product->name, 'title' => $this->title])]);

        return $dataTable->render('Ecommerce::sku.index', compact('product'));
    }

    /**
     * @param SKURequest $request
     * @param Product $product
     * @return $this
     */
    public function create(SKURequest $request, Product $product)
    {
        $sku = new SKU();

        $this->setViewSharedData(['title_singular' => trans('Corals::labels.create_title', ['title' => $this->title_singular])]);

        return view('Ecommerce::sku.create_edit')->with(compact('sku', 'product'));
    }

    /**
     * @param SKURequest $request
     * @param Product $product
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function store(SKURequest $request, Product $product)
    {
        try {
            $data = $request->except('options', 'image', 'clear', 'downloads_enabled', 'downloads', 'cleared_downloads');

            $sku = $product->sku()->create($data);

            if ($request->hasFile('image')) {
                $sku->addMedia($request->file('image'))->withCustomProperties(['root' => 'user_' . user()->hashed_id])->toMediaCollection('ecommerce-sku-image');
            }

            $this->createOptions($request, $sku);

            $this->handleDownloads($request, $sku);
            //$this->createUpdateGatewaySKUSend(SKU::find($sku->id), true);

            flash(trans('Corals::messages.success.created', ['item' => $this->title_singular]))->success();
        } catch (\Exception $exception) {
            log_exception($exception, SKU::class, 'store');
        }

        return redirectTo($this->resource_url);
    }

    protected function createOptions($request, $sku)
    {
        $sku->options()->delete();

        $options = [];
        if (isset($request->options)) {
            foreach ($request->options as $key => $value) {
                if (is_array($value)) {
                    foreach ($value as $value_option) {
                        $options[] = [
                            'attribute_id' => $key,
                            'value' => $value_option
                        ];
                    }
                } else {
                    $options[] = [
                        'attribute_id' => $key,
                        'value' => $value
                    ];
                }
            }

            $sku->options()->createMany($options);
        }

    }

    public function getSKU(SKURequest $request, SKU $sku)
    {
        return $this->show($request, $sku->product, $sku);
    }

    /**
     * @param SKURequest $request
     * @param Product $product
     * @param SKU $sku
     * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function show(SKURequest $request, Product $product, SKU $sku)
    {
        if ($request->wantsJson()) {

            $taxClasses = $product->tax_classes()->pluck('tax_classes.id')->toArray();

            $taxClassesTaxes = Tax::query()
                ->whereIn('tax_class_id', $taxClasses)
                ->pluck('taxes.id')->toArray();

            return [
                'id' => $sku->id,
                'name' => "$product->name - ($sku->code)",
                'description' => $product->caption,
                'price' => $sku->price,
                'tax_ids' => $taxClassesTaxes
            ];
        }

        $this->setViewSharedData(['title_singular' => trans('Corals::labels.show_title', ['title' => $product->name])]);

        return view('Ecommerce::sku.show')->with(compact('sku', 'product'));
    }

    /**
     * @param SKURequest $request
     * @param Product $product
     * @param SKU $sku
     * @return $this
     */
    public function edit(SKURequest $request, Product $product, SKU $sku)
    {
        $this->setViewSharedData(['title_singular' => "Update SKU"]);

        return view('Ecommerce::sku.create_edit')->with(compact('sku', 'product'));
    }

    /**
     * @param SKURequest $request
     * @param Product $product
     * @param SKU $sku
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function update(SKURequest $request, Product $product, SKU $sku)
    {
        try {
            $data = $request->except('options', 'code', 'image', 'clear', 'downloads_enabled', 'downloads', 'cleared_downloads');

            $sku->update($data);

            if ($request->has('clear') || $request->hasFile('image')) {
                $sku->clearMediaCollection('ecommerce-sku-image');
            }

            if ($request->hasFile('image') && !$request->has('clear')) {
                $sku->addMedia($request->file('image'))->withCustomProperties(['root' => 'user_' . user()->hashed_id])->toMediaCollection('ecommerce-sku-image');
            }

            $this->createOptions($request, $sku);

            $this->handleDownloads($request, $sku);
            //$this->createUpdateGatewaySKUSend($sku);

            flash(trans('Corals::messages.success.updated', ['item' => $this->title_singular]))->success();
        } catch (\Exception $exception) {
            log_exception($exception, SKU::class, 'update');
        }

        return redirectTo($this->resource_url);
    }

    /**
     * @param SKU $sku
     * @param bool $create
     * @return bool
     * @throws \Exception
     */
    protected function createUpdateGatewaySKUSend(SKU $sku, $create = false, $gateway = null)
    {
        if ($gateway) {
            $gateways = [$gateway];
        } else {
            $gateways = \Payments::getAvailableGateways();
        }

        $exceptionMessage = '';
        foreach ($gateways as $gateway => $gateway_title) {

            try {
                $Ecommerce = new Ecommerce($gateway);


                if (!$Ecommerce->gateway->getConfig('manage_remote_sku')) {
                    continue;
                }
                if ($Ecommerce->gateway->getGatewayIntegrationId($sku)) {
                    $Ecommerce->updateSKU($sku);
                } else {
                    $Ecommerce->createSKU($sku);
                }
            } catch (\Exception $exception) {
                $exceptionMessage .= $exception->getMessage();
            }
        }
        if (!empty($exceptionMessage)) {
            throw new \Exception($exceptionMessage);
        }
    }


    /**
     * @param SKURequest $request
     * @param Product $product
     * @param SKU $sku
     * @return \Illuminate\Http\JsonResponse
     */
    public function destroy(SKURequest $request, Product $product, SKU $sku)
    {
        try {

            $gateways = \Payments::getAvailableGateways();

            foreach ($gateways as $gateway => $gateway_title) {

                $Ecommerce = new Ecommerce($gateway);
                if (!$Ecommerce->gateway->getConfig('manage_remote_sku')) {
                    continue;
                }
                $Ecommerce->deleteSKU($sku);
                $sku->setGatewayStatus($this->gateway->getName(), 'DELETED', null);

            }

            $sku->clearMediaCollection('ecommerce-sku-image');
            $sku->delete();

            $message = ['level' => 'success', 'message' => trans('Corals::messages.success.deleted', ['item' => $this->title_singular])];
        } catch (\Exception $exception) {
            log_exception($exception, SKU::class, 'destroy');
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
        }

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

    /**
     * @param Request $request
     * @param Product $product
     * @param SKU $sku
     * @return \Illuminate\Http\JsonResponse
     */
    public function createGatewaySKU(Request $request, Product $product, SKU $sku)
    {
        user()->can('Ecommerce::product.create', Product::class);

        $gateway = $request->get('gateway');
        try {
            $this->createUpdateGatewaySKUSend($sku, true, $gateway);

            $message = ['level' => 'success', 'message' => trans('Corals::messages.success.created', ['item' => $this->title_singular])];
        } catch (\Exception $exception) {
            log_exception($exception, SKU::class, 'createGatewaySKU');
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
        }

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

    /**
     * @param BulkRequest $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Illuminate\Validation\ValidationException
     */
    public function bulkAction(BulkRequest $request)
    {
        $this->validate($request, [
            'regular_price' => '',
            'inventory' => '',
            'inventory_value' => 'required_if:inventory,finite,bucket',
            'image' => 'nullable|image|max:' . maxUploadFileSize(),
        ]);

        try {
            $action = $request->input('action');

            $selections = json_decode($request->input('selection'), true);

            $successCount = 0;

            $skuRequest = new SKURequest();
            $skuRequest = $skuRequest->replace($request->all());

            if ($action == 'delete') {
                foreach ($selections as $skuHashedId) {
                    $sku = SKU::findByHash($skuHashedId);
                    $this->destroy($skuRequest, new Product, $sku);
                    $successCount++;
                }
            } elseif ($action == 'updateVariations') {
                $data = array_filter($request->only([
                    'regular_price',
                    'sale_price',
                    'status',
                    'inventory_value',
                    'inventory'
                ]));

                if (empty($data) && !$request->hasFile('image')) {
                    throw new \Exception(trans('Ecommerce::exception.sku.nothing_to_update'));
                }

                foreach ($selections as $skuHashedId) {
                    $sku = SKU::findByHash($skuHashedId);

                    if (!empty($data)) {
                        $sku->update($data);
                    }

                    if ($request->hasFile('image')) {
                        $sku->clearMediaCollection($sku->mediaCollectionName);

                        // we use preservingOriginal prevent delete the image
                        //since we need to upload same image multiple time
                        //we will delete it at the the end using unlink()
                        $image = $sku->addMedia($request->file("image"))
                            ->withCustomProperties(['root' => 'user_' . user()->hashed_id])
                            ->preservingOriginal()
                            ->toMediaCollection($sku->mediaCollectionName);
                    }

                    $successCount++;
                }
                @unlink($request->file('image'));
            }
            if (!$successCount) {
                $message = ['level' => 'warning', 'message' => trans('Ecommerce::messages.sku.no_sku_selected')];
            } else {
                $message = ['level' => 'success', 'message' => trans('Ecommerce::messages.sku.updated', ['count' => $successCount])];
            }
        } catch (\Exception $exception) {
            log_exception($exception);
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
        }

        return response()->json($message ?? ['level' => 'info', 'message' => "successfully updated!"]);
    }

    /**
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function getBulkUpdateVariationsModal(Request $request)
    {
        abort_if(!$request->ajax(), 404);

        return view("Ecommerce::sku.partials.bulk_update_variations_modal");
    }
}

Spamworldpro Mini