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

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

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

namespace Corals\Modules\Jobs\Jobs;


use Corals\Modules\Jobs\Http\Requests\{JobRequest};
use Corals\Modules\Jobs\Models\{Job};
use Corals\Modules\Jobs\Services\{JobService};
use Corals\Modules\Utility\Models\Category\Category;
use Corals\User\Traits\ImportTrait;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\{InteractsWithQueue, SerializesModels};
use League\Csv\{Exception as CSVException};


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

    protected $importFilePath;

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

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


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

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

        //prepare user data
        $JobData = $this->getJobData($record);

        $this->validateRecord($JobData);
        //this map job categories
        $getJobData = $this->getData($JobData);

        $JobModel = $this->gerJobsModel($getJobData['title']);

        $JobRequest = new JobRequest();

        $JobRequest->replace($getJobData);

        $JobService = new jobService();

        if ($JobModel) {
            $JobService->update($JobRequest, $JobModel);
        } else {
            $JobService->store($JobRequest, Job::class);
        }
    }

    public function getData($JobData)
    {
        $categoryToArray = explode('|', $JobData['categories']);
        $data = Category::whereIn('slug', $categoryToArray)->get('id');

        $JobData['categories'] = $data;
        $tag = explode('|', $JobData['tags']);
        $JobData['tags'] = $tag;

        $Schedule = [];
        $scheduleToArray = explode('|', $JobData['schedule']);
        foreach ($scheduleToArray as $schedule) {
            $schedules [] = explode('::', $schedule);
        }
        foreach ($schedules as $date) {
            $time = explode('.', $date[1]);
            $datetime = [];
            $datetime['date'] = $date[0];
            $datetime['times'] = $time;
            $Schedule [] = $datetime;

            $datetime['times'] [] = null;
            $datetime['date'] = null;
            $time = null;
        }
        $JobData['schedule'] = $Schedule;

        return $JobData;
    }

    protected function gerJobsModel($title)
    {
        return Job::where('title', $title)->first();
    }

    /**
     * @param $record
     * @return array
     * @throws \Exception
     */
    protected function getJobData($record)
    {
        return array_filter([
            'title' => data_get($record, 'title'),
            'description' => data_get($record, 'description'),
            'status' => data_get($record, 'status'),
            'owner_id' => data_get($record, 'owner_id'),
            'job_type'=>data_get($record, 'job_type'),
            'experience_level'=>data_get($record, 'experience_level'),
            'salary'=>data_get($record, 'salary'),
            'location_id'=>data_get($record, 'location_id'),
            'short_description'=>data_get($record, 'short_description'),
            'categories' => data_get($record, 'categories'),
            'tags' => data_get($record, 'tags'),
            'schedule' => data_get($record, 'schedule'),
            'starts_at' => data_get($record, 'starts_at'),
            'ends_at' => data_get($record, 'ends_at'),

        ]);
    }

    protected function initHandler()
    {
    }


    protected function getValidationRules($data): array
    {
        return [
            'title' => 'required',
            'description' => 'required',
            'starts_at' => 'required',
            'ends_at' => 'required|after_or_equal:starts_at',
            'categories' => [
                'required',
                function ($attribute, $value, $fail) {
                    $valueToArray = explode('|', $value);

                    $compare = Category::whereIn('slug', $valueToArray)->count();

                    if ($compare != count($valueToArray)) {
                        $fail('The ' . $attribute . ' is invalid.');
                    }
                },
            ],
            'owner_id' => 'required',
            'experience_level' => 'required',
            'salary' => 'required',
            'job_type' => 'required',
            'short_description'=>'required',
        ];
    }
}

Spamworldpro Mini