ldc-groupe/database/factories/DynamicPageFactory.php

97 lines
3.4 KiB
PHP
Raw Permalink Normal View History

2025-09-16 16:44:49 +02:00
<?php
namespace Database\Factories;
2026-01-15 16:55:01 +01:00
use Carbon\Carbon;
2025-09-16 16:44:49 +02:00
use App\Enums\DynamicFieldTypes;
use App\Enums\DynamicPages\PageStatusEnum;
2025-10-29 10:29:57 +01:00
use App\Models\DynamicPage;
2025-09-16 16:44:49 +02:00
use App\Models\PageConfig;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\DynamicPage>
*/
2025-09-16 16:44:49 +02:00
class DynamicPageFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition(): array
{
$title = fake()->unique()->word();
2026-01-15 16:55:01 +01:00
$slug = Str::slug($title);
2025-09-16 16:44:49 +02:00
$configModel = fake()->randomElement(PageConfig::all());
2025-10-29 10:29:57 +01:00
$status = fake()->randomElement(PageStatusEnum::cases());
2026-01-15 16:55:01 +01:00
$pageHome = DynamicPage::query()->where('isRoot', true)->firstOrFail();
2025-09-16 16:44:49 +02:00
2025-10-29 10:29:57 +01:00
return [
2026-01-15 16:55:01 +01:00
'id_key' => $slug,
'title' => $title,
'slug' => $slug,
'content' => self::getDataFromConfig($configModel),
'page_id' => $pageHome->getKey(),
'config_id' => $configModel->getKey(),
'status' => $status,
'isLocked' => fake()->boolean(25),
'deleted_at' => fake()->boolean(25) ? Carbon::now() : null,
2025-10-29 10:29:57 +01:00
];
}
/**
* Get values from a specific config.
*
* @param \App\Models\PageConfig $configModel
* @return array
2026-02-10 15:43:47 +01:00
* @phpcs:disable Generic.Metrics.CyclomaticComplexity
2025-10-29 10:29:57 +01:00
*/
private function getDataFromConfig(PageConfig $configModel): array
{
2026-02-10 15:43:47 +01:00
// phpcs:enable
2025-09-16 16:44:49 +02:00
foreach ($configModel->config as $field) {
switch ($field['type']) {
case DynamicFieldTypes::string->value:
$configValue[$field['key']] = fake()->words(5, true);
break;
case DynamicFieldTypes::textarea->value:
$configValue[$field['key']] = fake()->words(10, true);
break;
case DynamicFieldTypes::wysiwyg->value:
2025-09-16 16:44:49 +02:00
$configValue[$field['key']] = sprintf("<p>%s</p>", fake()->text(160));
break;
case DynamicFieldTypes::number->value:
$configValue[$field['key']] = fake()->numberBetween(0, 255);
break;
case DynamicFieldTypes::boolean->value:
$configValue[$field['key']] = fake()->boolean(50);
break;
case DynamicFieldTypes::url->value:
$configValue[$field['key']] = fake()->url();
break;
case DynamicFieldTypes::email->value:
$configValue[$field['key']] = fake()->email();
break;
case DynamicFieldTypes::image->value:
// Fake image in seeder.
$configValue[$field['key']] = null;
break;
case DynamicFieldTypes::list->value:
$configValue[$field['key']] = [
[
$field['children'][0]['key'] => fake()->unique()->word(),
'order' => 1,
],
];
break;
2025-09-16 16:44:49 +02:00
default:
$configValue = [];
break;
2026-02-10 15:43:47 +01:00
} //end switch
2025-09-16 16:44:49 +02:00
} //end foreach
2025-10-29 10:29:57 +01:00
return $configValue;
2025-09-16 16:44:49 +02:00
}
}