File: D:/HostingSpaces/SBogers10/rentman2019.komma.pro/app/Komma/Jobs/Kms/ImportOldJobs.php
<?php
namespace App\Komma\Jobs\Kms;
use App\Komma\Documents\Models\Document;
use App\Komma\Dynamic\ComponentArea\ComponentAreaServiceInterface;
use App\Komma\Dynamic\ComponentType\ComponentTypes;
use App\Komma\Jobs\Models\Job;
use App\Komma\Jobs\Models\JobTranslation;
use App\Komma\Jobs\Models\OldJob;
use App\Komma\Kms\Core\Attributes\Attribute;
use App\Komma\Kms\Core\Attributes\ComponentArea;
use App\Komma\Languages\Models\Language;
use Carbon\Carbon;
class ImportOldJobs
{
public function cleanCurrentTable()
{
// Clear table
$updates = Job::all();
foreach ($updates as $update) {
$update->delete();
}
}
public function convertOldJobTable()
{
$oldUpdates = OldJob::with('translations')
->get();
// dd($oldUpdates);
$componentAreaService = \App::make(ComponentAreaServiceInterface::class);
$created = 2;
foreach ($oldUpdates as $oldUpdateAmount => $oldUpdate) {
// Create new Update
$update = Job::firstOrNew([
'site_id' => 1,
'lft' => $created,
'rgt' => ($created + 1),
'tree' => 1,
'created_at' => $oldUpdate->created_at,
'updated_at' => $oldUpdate->updated_at,
]);
// if($update->exists || $created > 15) continue;
// else dd($oldUpdate, $update);
$update->save();
$created += 2;
// Append translations
foreach ($oldUpdate->translations as $loopKey => $translation) {
$languageId = $translation->language_id;
if ($languageId == 67) {
$languageId = 66;
}
$language = Language::find($languageId);
$updateTranslation = new JobTranslation();
$updateTranslation->language_id = $languageId;
$updateTranslation->active = $oldUpdate->active;
$updateTranslation->preview = $oldUpdate->active;
$updateTranslation->name = $translation->name;
$updateTranslation->slug = str_slug($translation->name);
$updateTranslation->meta_title = $translation->name.' | Rentman';
$updateTranslation->meta_description = strip_tags($translation->meta_description);
$updateTranslation->created_at = $translation->created_at;
$updateTranslation->updated_at = $translation->updated_at;
$update->translation()->save($updateTranslation);
// Convert old dynamic attributes to a component area
$componentAreaAttributeValue = $this->convertOldDynamicBlockToComponents(json_decode($translation->description), $language);
$componentAreaAttribute = (new ComponentArea())
->disableBackgroundOption()
->setSubFolder('job_component_data')
->setComponentTypes([
ComponentTypes::VIDEO,
ComponentTypes::IMAGE,
ComponentTypes::TEXT,
])
->mapValueFrom(Attribute::ValueFromComponents, 'job_components')
->setAssociatedLanguage($language)
->setValue(json_encode($componentAreaAttributeValue));
$componentAreaService->saveOrUpdateComponentAreaForAttribute($updateTranslation, $componentAreaAttribute);
}
}
}
private function convertOldDynamicBlockToComponents($dynamicBlockJson, Language $language)
{
$componentAreaAttributeValue = [];
$componentCounter = 0;
foreach ($dynamicBlockJson as $key => $block) {
if (! in_array($block->typeSlug, ['content-block', 'video-block', 'full-image-block'])) {
dd($block);
}
if ($block->typeSlug == 'full-image-block') {
if (isset($block->images) && count($block->images) != 0) {
$document = $this->createDocumentAndMakeArrayForComponentArea($block->images[0], 'ComponentArea|job_components|C'.($componentCounter * -1).'|image|'.$language->iso_2);
$componentAreaAttributeValue[] = (object) [
'id' => ($componentCounter * -1),
'version' => '0.9.1',
'componentTypeId' => 10,
'data' => (object) [
'ComponentArea|job_components|C'.$componentCounter.'|grey_background|'.$language->iso_2 => '0',
'ComponentArea|job_components|C'.$componentCounter.'|image|'.$language->iso_2.'-data' => json_encode($document),
],
'componentableData' => (object) [],
'sortOrder' => $componentCounter,
];
$componentCounter++;
continue;
}
}
if ($block->typeSlug == 'content-block') {
$componentAreaAttributeValue[] = (object) [
'id' => ($componentCounter * -1),
'version' => '0.9.1',
'componentTypeId' => 9,
'data' => (object) [
'ComponentArea|job_components|C'.$componentCounter.'|grey_background|'.$language->iso_2 => '0',
'ComponentArea|job_components|C'.$componentCounter.'|text|'.$language->iso_2 => $block->description,
'ComponentArea|job_components|C'.$componentCounter.'|intro|'.$language->iso_2 => '0',
],
'componentableData' => (object) [],
'sortOrder' => $componentCounter,
];
$componentCounter++;
if (isset($block->images) && count($block->images) != 0) {
$document = $this->createDocumentAndMakeArrayForComponentArea($block->images[0], 'ComponentArea|job_components|C'.($componentCounter * -1).'|image|'.$language->iso_2);
$componentAreaAttributeValue[] = (object) [
'id' => ($componentCounter * -1),
'version' => '0.9.1',
'componentTypeId' => 10,
'data' => (object) [
'ComponentArea|job_components|C'.$componentCounter.'|grey_background|'.$language->iso_2 => '0',
'ComponentArea|job_components|C'.$componentCounter.'|image|'.$language->iso_2.'-data' => json_encode($document),
],
'componentableData' => (object) [],
'sortOrder' => $componentCounter,
];
$componentCounter++;
}
continue;
}
if ($block->typeSlug == 'video-block') {
$componentAreaAttributeValue[] = (object) [
'id' => ($componentCounter * -1),
'version' => '0.9.1',
'componentTypeId' => 5,
'data' => (object) [
'ComponentArea|job_components|C'.$componentCounter.'|grey_background|'.$language->iso_2 => '0',
'ComponentArea|job_components|C'.$componentCounter.'|video|en_video_id' => $block->youtube,
'ComponentArea|job_components|C'.$componentCounter.'|video|en_autoplay' => 'on',
'ComponentArea|job_components|C'.$componentCounter.'|video|'.$language->iso_2 => '0,'.$block->youtube,
],
'componentableData' => (object) [],
'sortOrder' => $componentCounter,
];
$componentCounter++;
continue;
}
}
return $componentAreaAttributeValue;
}
private function createDocumentAndMakeArrayForComponentArea($image, $componentKey)
{
$document = new Document();
$document->key = $componentKey;
$document->sort_order = 0;
$document->documentable_id = 0;
//Append image
foreach (['original', 'large', 'medium', 'small', 'thumb'] as $size) {
$originalImagePath = $image->{$size.'_image_url'};
if (empty($originalImagePath)) {
continue;
}
$imagePath = 'https://rentman.io/'.$originalImagePath;
$fileName = basename($imagePath);
$publicPath = '/uploads/job-component-data/'.$fileName;
// Copy resource
// Will only work on local (Linux) not on windows
// copy($imagePath, public_path($publicPath));
if ($size == 'original') {
$document->name = $fileName;
$document->path = $publicPath;
$document->mime_type = 'image/'.pathinfo($imagePath, PATHINFO_EXTENSION);
}
$document->{$size.'_image_url'} = $publicPath;
}
$document->save();
// Create json for document
$documentArray = [
(object) [
'id' => $document->id,
'path' => $document->path,
'state' => 'modified',
'name' => $document->name,
'sort_order' => $document->sort_order,
'thumb_image_url' => $document->thumb_image_url,
'small_image_url' => $document->small_image_url,
'medium_image_url' => $document->medium_image_url,
'large_image_url' => $document->large_image_url,
'documentable_id' => '',
'documentable_type' => '',
'created_at' => $document->created_at->format(Carbon::DEFAULT_TO_STRING_FORMAT),
'updated_at' => $document->updated_at->format(Carbon::DEFAULT_TO_STRING_FORMAT),
],
];
return $documentArray;
}
}