Skip to content

Commit

Permalink
image record generation for ImageSlide
Browse files Browse the repository at this point in the history
  • Loading branch information
jsirish committed Feb 20, 2025
1 parent 3c39793 commit 98a26e5
Showing 1 changed file with 57 additions and 17 deletions.
74 changes: 57 additions & 17 deletions src/Extension/BaseElementDataExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -226,29 +226,36 @@ protected function createRelatedRecords(string $ownerClass, array $populateData,
$this->owner->$relationName()->add($relatedObject);
$this->logAction("Created many_many relation {$relatedClassName} for {$relationName}", 'info');

// Handle nested has_one (e.g., Image for ImageSlide)
foreach ($relatedObject->hasOne() as $subRelationName => $subRelatedClass) {
if (!isset($itemData[$subRelationName])) {
continue;
// ✅ Handle Image for ImageSlide
if ($relatedObject->ClassName === 'Dynamic\Carousel\Model\ImageSlide' && isset($itemData['Image']['Filename'])) {
$this->logAction("🔍 Processing ImageSlide: Checking image assignment...", 'debug');

$image = $this->createImageFromFile($itemData['Image']['Filename']);
if ($image) {
$relatedObject->ImageID = $image->ID;
$relatedObject->write();
$this->logAction("✅ Assigned Image ID {$image->ID} to ImageSlide (Slide ID: {$relatedObject->ID})", 'info');
} else {
$this->logAction("⚠️ Image creation failed, no Image assigned to ImageSlide", 'error');
}
}

$subRelatedData = $itemData[$subRelationName];
$subRelatedClassName = $subRelatedData['ClassName'] ?? $subRelatedClass;

if ($relatedObject->getComponent($subRelationName)->exists()) {
continue;
}
// Handle EmbedVideo for VideoSlide
if ($relatedObject->ClassName === 'Dynamic\Carousel\Model\VideoSlide' && isset($itemData['EmbedVideo']['SourceURL'])) {
$embedData = $itemData['EmbedVideo'];
$embedObject = \nathancox\EmbedField\Model\EmbedObject::create();

$subRelatedObject = $subRelatedClassName::create();
foreach ($subRelatedData as $subField => $subValue) {
if ($subField !== 'ClassName' && $subRelatedObject->hasField($subField)) {
$subRelatedObject->$subField = $subValue;
foreach ($embedData as $embedField => $embedValue) {
if ($embedObject->hasField($embedField)) {
$embedObject->$embedField = $embedValue;
}
}
$subRelatedObject->write();
$relatedObject->setField("{$subRelationName}ID", $subRelatedObject->ID);
$embedObject->write();

$relatedObject->EmbedVideoID = $embedObject->ID;
$relatedObject->write();
$this->logAction("Created has_one relation {$subRelatedClassName} for {$subRelationName} inside {$relatedClassName}", 'info');

$this->logAction("Created EmbedObject for VideoSlide with URL: {$embedData['SourceURL']}", 'info');
}

// Recurse for deeper relationships
Expand All @@ -260,6 +267,39 @@ protected function createRelatedRecords(string $ownerClass, array $populateData,
}
}

/**
* Creates an Image object from a file path and returns the Image record.
*/
protected function createImageFromFile(string $filename): ?Image
{
// First, check if path is already absolute
if (file_exists($filename)) {
$absolutePath = $filename;
} else {
// Try BASE_PATH (assuming file is inside the project root)
$absolutePath = BASE_PATH . '/' . ltrim($filename, '/');
if (!file_exists($absolutePath)) {
// Try PUBLIC_PATH for assets stored under public folder
$absolutePath = PUBLIC_PATH . '/' . ltrim($filename, '/');
}
}

$this->logAction("🔍 Checking for Image file at: {$absolutePath}", 'debug');

if (!file_exists($absolutePath)) {
$this->logAction("⚠️ Image file not found: {$absolutePath}", 'error');
return null;
}

$image = Image::create();
$image->setFromLocalFile($absolutePath, basename($filename));
$image->write();

$this->logAction("✅ Successfully created Image from file {$absolutePath} (ID: {$image->ID})", 'info');

return $image;
}

/**
* Logs messages to SilverStripe's logging system.
*/
Expand Down

0 comments on commit 98a26e5

Please sign in to comment.