![]() 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/ |
<?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', ]; } }