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;
|
|
|
|
|
|
2026-01-22 15:30:47 +01:00
|
|
|
/**
|
|
|
|
|
* @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;
|
2025-11-18 13:52:59 +01:00
|
|
|
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;
|
2025-11-18 13:55:48 +01:00
|
|
|
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
|
|
|
}
|
|
|
|
|
}
|