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/ledger.corals.io/Corals/core/Foundation/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/ledger.corals.io/Corals/core/Foundation/Services/BaseServiceClass.php
<?php

namespace Corals\Foundation\Services;

use Corals\Foundation\Transformers\FractalPresenter;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;

/**
 * Class BaseServiceClass
 * @package Corals\Foundation\Services
 * @method preStore($request, &$additionalData)
 * @method preStoreUpdate($request, &$additionalData)
 * @method postStore($request, &$additionalData)
 * @method postStoreUpdate($request, &$additionalData)
 * @method preUpdate($request, &$additionalData)
 * @method postUpdate($request, &$additionalData)
 * @method preDestroy($request, $model)
 * @method postDestroy($request)
 */
class BaseServiceClass
{
    protected $model;
    protected $modelClass;
    protected $presenter = null;
    protected $excludedRequestParams = [];

    /**
     * @param $model
     */
    public function setModel($model)
    {
        $this->model = $model;
    }

    /**
     * @param FractalPresenter|null $presenter
     */
    public function setPresenter(FractalPresenter $presenter = null)
    {
        $this->presenter = $presenter;
    }

    public function getRequestData($request)
    {
        if (is_array($request)) {
            return \Arr::except($request, $this->excludedRequestParams);
        } else {
            return $request->except($this->excludedRequestParams);
        }
    }

    public function index($query, $dataTable)
    {
        foreach ($dataTable->getScopes() as $scope) {
            $scope->apply($query);
        }

        $this->handleOrderBy($query);

        $perPage = request()->get('limit');

        $result = $query->paginate($perPage);

        if (!is_null($this->presenter)) {
            return $this->presenter->present($result);
        } else {
            return $result;
        }
    }

    /**
     * @param Builder $query
     * @return Builder
     */
    protected function handleOrderBy(Builder $query)
    {
        $orderBy = request()->get('orderBy');

        if (!$orderBy) {
            return $query->orderBy('id', 'desc');
        }

        $direction = intval(request()->get('ascending')) ? 'ASC' : 'DESC';

        if (strpos($orderBy, '.')) {
            list($relation, $column) = explode('.', $orderBy);

            $targetModel = $query->getModel();
            $targetModelTableName = $targetModel->getTable();
            $targetModelPrimaryKey = $targetModel->getKeyName();

            $relationQueryBuilder = $targetModel->{$relation}();

            $relationModelClass = get_class($relationQueryBuilder->getModel());
            $relationForeignKeyName = $relationQueryBuilder->getForeignKeyName();

            $relationTableName = $relationQueryBuilder->getModel()->getTable();
            
            $query->orderBy(
                $relationModelClass::query()
                    ->select($column)
                    ->whereColumn("$relationTableName.$targetModelPrimaryKey",
                        "$targetModelTableName.$relationForeignKeyName"),
                $direction
            );
        } else {
            $query->orderBy($orderBy, $direction);
        }


        return $query;
    }

    /**
     * @param $request
     * @param $modelClass
     * @param array $additionalData
     * @return mixed
     */
    public function store($request, $modelClass, $additionalData = [])
    {
        if (method_exists($this, 'preStore')) {
            $this->preStore($request, $additionalData);
        }

        if (method_exists($this, 'preStoreUpdate')) {
            $this->preStoreUpdate($request, $additionalData);
        }

        $data = array_merge($this->getRequestData($request), $additionalData);

        $this->model = $modelClass::query()->create($data);

        if (method_exists($this, 'postStore')) {
            $this->postStore($request, $additionalData);
        }

        if (method_exists($this, 'postStoreUpdate')) {
            $this->postStoreUpdate($request, $additionalData);
        }

        return $this->model;
    }

    /**
     * @param $request
     * @param $model
     * @param array $additionalData
     * @return mixed
     */
    public function update($request, $model, $additionalData = [])
    {
        $this->model = $model;

        if (method_exists($this, 'preUpdate')) {
            $this->preUpdate($request, $additionalData);
        }

        if (method_exists($this, 'preStoreUpdate')) {
            $this->preStoreUpdate($request, $additionalData);
        }

        $data = array_merge($this->getRequestData($request), $additionalData);

        $model->update($data);

        $this->model = $model;

        if (method_exists($this, 'postUpdate')) {
            $this->postUpdate($request, $additionalData);
        }

        if (method_exists($this, 'postStoreUpdate')) {
            $this->postStoreUpdate($request, $additionalData);
        }

        return $this->model;
    }

    /**
     * @param $request
     * @param $modelClass
     * @param $config
     * @return \Illuminate\Http\JsonResponse
     */

    public function import(Request $request, $modelClass, $config)
    {
        try {
            $file = $request->file('file_csv');
            $importer = (new BaseImporter($modelClass, $config))->setCsvFile($file);
            $importer->run();
            $importer->finish();
            $message = ['level' => 'success', 'message' => 'File been Created Successfully'];
        } catch (\Exception $exception) {
            log_exception($exception, $modelClass);
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
        }
        return response()->json($message);
    }

    /**
     * @param $request
     * @param $model
     */
    public function destroy($request, $model)
    {
        if (method_exists($this, 'preDestroy')) {
            $this->preDestroy($request, $model);
        }

        $model->delete();

        if (method_exists($this, 'postDestroy')) {
            $this->postDestroy($request);
        }
    }

    /**
     * @param null $model
     * @param array $extras
     * @return mixed|null
     */
    public function getModelDetails($model = null, $extras = [])
    {
        if (!is_null($model)) {
            $this->setModel($model);
        }

        if (!is_null($this->presenter)) {
            $this->model->setPresenter($this->presenter);
        }

        if (request()->filled('edit')) {
            $extras['edit'] = request()->get('edit');
        }

        if (method_exists($this->model, 'presenter')) {
            return $this->model->presenter($extras);
        }

        return $model;
    }
}

Spamworldpro Mini