ldc-groupe/database/factories/DynamicPageFactory.php
2026-02-11 09:15:43 +01:00

96 lines
3.4 KiB
PHP

<?php
namespace Database\Factories;
use Carbon\Carbon;
use App\Enums\DynamicFieldTypes;
use App\Enums\DynamicPages\PageStatusEnum;
use App\Models\DynamicPage;
use App\Models\PageConfig;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\DynamicPage>
*/
class DynamicPageFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition(): array
{
$title = fake()->unique()->word();
$slug = Str::slug($title);
$configModel = fake()->randomElement(PageConfig::all());
$status = fake()->randomElement(PageStatusEnum::cases());
$pageHome = DynamicPage::query()->where('isRoot', true)->firstOrFail();
return [
'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,
];
}
/**
* Get values from a specific config.
*
* @param \App\Models\PageConfig $configModel
* @return array
* @phpcs:disable Generic.Metrics.CyclomaticComplexity
*/
private function getDataFromConfig(PageConfig $configModel): array
{
// phpcs:enable
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:
$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;
default:
$configValue = [];
break;
} //end switch
} //end foreach
return $configValue;
}
}