diff --git a/app/Http/Controllers/API/SettingsController.php b/app/Http/Controllers/API/SettingsController.php index e1c9e26..47bdc42 100644 --- a/app/Http/Controllers/API/SettingsController.php +++ b/app/Http/Controllers/API/SettingsController.php @@ -6,7 +6,6 @@ use App\Enums\SettingTypesEnum; use App\Http\Controllers\Controller; use App\Models\Setting; use App\Http\Resources\ApiResponseResource; -use App\Models\Formulary; class SettingsController extends Controller { @@ -30,14 +29,4 @@ class SettingsController extends Controller return new ApiResponseResource("OK", $response); } - - /** - * Get Formulary settings. - * - * @return \Illuminate\Http\JsonResponse - */ - public function getFormulary() - { - return new ApiResponseResource("OK", Formulary::get()->makeHidden(['created_at', 'updated_at'])); - } } diff --git a/app/Http/Controllers/API/SyncController.php b/app/Http/Controllers/API/SyncController.php index 01a7452..cda8686 100644 --- a/app/Http/Controllers/API/SyncController.php +++ b/app/Http/Controllers/API/SyncController.php @@ -7,12 +7,14 @@ use App\Http\Resources\AppUserResource; use App\Http\Resources\ContactResource; use App\Http\Resources\DirectoryResource; use App\Http\Resources\DocumentResource; +use App\Http\Resources\FormularyResource; use App\Mail\SendFlyer; use App\Mail\SendFlyerFailed; use App\Models\AppUser; use App\Models\Contact; use App\Models\Directory; use App\Models\Document; +use App\Models\Formulary; use App\Models\Setting; use Google\Cloud\Vision\V1\ImageAnnotatorClient; use GuzzleHttp\Exception\ClientException; @@ -94,6 +96,14 @@ class SyncController extends Controller return ['version' => $version->version, 'ShowIsActive' => $ShowIsActive->ShowIsActive, 'newApp' => $newApp]; } + /** + * @return \App\Http\Resources\ContactsCollection + */ + public function getFormularies() + { + return FormularyResource::collection(Formulary::all()); + } + /** * @param \Illuminate\Http\Request $request * @return string diff --git a/app/Http/Requests/Bo/Formularies/StoreFormularyRequest.php b/app/Http/Requests/Bo/Formularies/StoreFormularyRequest.php index 418f25f..4c999d3 100644 --- a/app/Http/Requests/Bo/Formularies/StoreFormularyRequest.php +++ b/app/Http/Requests/Bo/Formularies/StoreFormularyRequest.php @@ -28,7 +28,7 @@ class StoreFormularyRequest extends FormRequest { $this->merge([ 'required' => $this->required ? true : false, - 'visible' => $this->visible ? true : false, + 'is_visible' => $this->visible ? true : false, ]); } @@ -50,7 +50,7 @@ class StoreFormularyRequest extends FormRequest 'details.*' => 'required|array', 'details.*.*' => 'sometimes|string|min:3|max:100', 'required' => 'required|boolean', - 'visible' => 'required|boolean', + 'is_visible' => 'required|boolean', ]; if (intval($this->status) !== InputStatusEnum::locked()->value) { $rules = array_merge($rules, ['name' => 'required|string|min:3|max:70']); @@ -77,7 +77,7 @@ class StoreFormularyRequest extends FormRequest 'details.*' => trans('détail 2'), 'details.*.value' => trans('valeur d\'un élément dans la liste des détails du contenu'), 'required' => trans('l\'état d\'obligation'), - 'visible' => trans('l\'état de visibilité'), + 'is_visible' => trans('l\'état de visibilité'), ]; } } diff --git a/app/Http/Resources/FormularyResource.php b/app/Http/Resources/FormularyResource.php new file mode 100644 index 0000000..95c2b68 --- /dev/null +++ b/app/Http/Resources/FormularyResource.php @@ -0,0 +1,36 @@ + $formulary->id, + 'type' => $formulary->type->value, + 'name' => $formulary->name, + 'placeholder' => $formulary->placeholder, + 'details' => \collect($formulary->details)->filter()->map(function (array $detail) { + // * Realm can't hold more deeper dans Map + return \json_encode($detail); + })->all(), + 'is_visible' => $formulary->is_visible, + 'required' => $formulary->required, + 'status' => $formulary->status->value, + 'order' => $formulary->order, + ]; + } +} diff --git a/app/Models/Formulary.php b/app/Models/Formulary.php index b0f079b..0e8563e 100644 --- a/app/Models/Formulary.php +++ b/app/Models/Formulary.php @@ -11,13 +11,15 @@ use Kwaadpepper\Enum\Traits\CastsEnums; /** * @property integer $id - * @property InputTypeEnum $type + * @property \App\Enums\Formularies\InputTypeEnum $type * @property string $name - * @property string $placeholder - * @property string $details - * @property boolean $visible + * @property string $slug + * @property array $placeholder + * @property array> $details + * @property boolean $is_visible * @property boolean $required - * @property InputStatusEnum $status + * @property \App\Enums\Formularies\InputStatusEnum $status + * @property integer $order */ class Formulary extends Model { @@ -34,7 +36,7 @@ class Formulary extends Model 'slug', 'placeholder', 'details', - 'visible', + 'is_visible', 'required', 'status', ]; @@ -43,6 +45,8 @@ class Formulary extends Model * @var string[] */ protected $casts = [ + 'required' => 'bool', + 'is_visible' => 'bool', 'placeholder' => 'json', 'details' => 'json', ]; @@ -68,9 +72,11 @@ class Formulary extends Model static::setSlug($model); static::setStatusField($model); static::setOrder($model); + static::makeRequiredSense($model); }); static::updating(function (self $model) { static::setSlug($model); + static::makeRequiredSense($model); }); } @@ -88,6 +94,21 @@ class Formulary extends Model $model->slug = Str::slug($model->name); } + /** + * Set required logical + * + * @param self $model + * + * @return void + */ + private static function makeRequiredSense(self $model) + { + if ($model->is_visible == false) { + $model->required = false; + \session()->flash(trans('Le champ ne peut être obligatoire si il n\'est pas visible')); + } + } + /** * Set the status field. * diff --git a/database/factories/FormularyFactory.php b/database/factories/FormularyFactory.php index 5781a34..7d40a93 100644 --- a/database/factories/FormularyFactory.php +++ b/database/factories/FormularyFactory.php @@ -17,7 +17,7 @@ class FormularyFactory extends Factory public function definition() { $mandatoryLocales = ['fr', 'en', 'de', 'nl']; - $name = $this->faker->company; + $name = $this->faker->unique()->company; $type = \collect(InputTypeEnum::toArray())->random(); $details = null; if ( @@ -29,7 +29,7 @@ class FormularyFactory extends Factory $details = $this->faker->words(\count($mandatoryLocales)); } return [ - 'type' => \collect(InputTypeEnum::toArray())->random(), + 'type' => $type, 'name' => $name, 'slug' => Str::of($name)->slug(), 'placeholder' => \collect($mandatoryLocales)->mapWithKeys(function ($locale) { @@ -39,10 +39,10 @@ class FormularyFactory extends Factory return \collect($mandatoryLocales)->mapWithKeys(function ($locale) use ($word) { return [$locale => "{$locale} {$word}"]; })->all(); - })->all() : $details, - 'visible' => $this->faker->boolean(75), + })->all() : null, + 'is_visible' => $this->faker->boolean(75), 'required' => $this->faker->boolean(75), - 'status' => \collect(InputStatusEnum::toArray())->random(), + 'status' => InputStatusEnum::default(), ]; } } diff --git a/database/migrations/2023_07_17_154420_create_formularies_table.php b/database/migrations/2023_07_17_154420_create_formularies_table.php index 8fa66ca..9d2ca9b 100644 --- a/database/migrations/2023_07_17_154420_create_formularies_table.php +++ b/database/migrations/2023_07_17_154420_create_formularies_table.php @@ -20,7 +20,7 @@ class CreateFormulariesTable extends Migration $table->string('slug')->unique()->comment('The slug of the input name.'); $table->text('placeholder')->nullable()->comment('Placeholder of the input.'); $table->text('details')->nullable()->comment('Details of the input.'); - $table->boolean('visible')->comment('The input is visible or not.'); + $table->boolean('is_visible')->comment('The input is visible or not.'); $table->boolean('required')->comment('The input is required or not.'); $table->boolean('status')->comment('The status of the input.'); $table->integer('order')->comment('Order of this specific input.'); diff --git a/database/seeders/MandatoryFormularySeeder.php b/database/seeders/MandatoryFormularySeeder.php index 78c2dd2..b46b0d4 100644 --- a/database/seeders/MandatoryFormularySeeder.php +++ b/database/seeders/MandatoryFormularySeeder.php @@ -25,7 +25,7 @@ class MandatoryFormularySeeder extends Seeder $formulary->placeholder = ["fr" => "Prénom", "en" => "Firstname", "de" => "Vorname", "nl" => "Voornaam"]; $formulary->details = null; $formulary->required = true; - $formulary->visible = true; + $formulary->is_visible = true; $formulary->status = InputStatusEnum::locked(); $formulary->order = 1; $formulary->saveOrFail(); @@ -39,7 +39,7 @@ class MandatoryFormularySeeder extends Seeder $formulary->placeholder = ["fr" => "Nom", "en" => "Lastname", "de" => "Name", "nl" => "Naam"]; $formulary->details = null; $formulary->required = true; - $formulary->visible = true; + $formulary->is_visible = true; $formulary->status = InputStatusEnum::locked(); $formulary->order = 2; $formulary->saveOrFail(); @@ -53,7 +53,7 @@ class MandatoryFormularySeeder extends Seeder $formulary->placeholder = ["fr" => "E-mail", "en" => "E-mail", "de" => "E-mail", "nl" => "E-mail"]; $formulary->details = null; $formulary->required = true; - $formulary->visible = true; + $formulary->is_visible = true; $formulary->status = InputStatusEnum::system(); $formulary->order = 3; $formulary->saveOrFail(); @@ -67,7 +67,7 @@ class MandatoryFormularySeeder extends Seeder $formulary->placeholder = ["fr" => "Société", "en" => "Society", "de" => "Unternehmen", "nl" => "Bedrijf"]; $formulary->details = null; $formulary->required = false; - $formulary->visible = true; + $formulary->is_visible = true; $formulary->status = InputStatusEnum::locked(); $formulary->order = 4; $formulary->saveOrFail(); @@ -81,7 +81,7 @@ class MandatoryFormularySeeder extends Seeder $formulary->placeholder = ["fr" => "Adresse", "en" => "Address", "de" => "Anschrift", "nl" => "Adres"]; $formulary->details = null; $formulary->required = false; - $formulary->visible = true; + $formulary->is_visible = true; $formulary->status = InputStatusEnum::locked(); $formulary->order = 5; $formulary->saveOrFail(); @@ -89,13 +89,13 @@ class MandatoryFormularySeeder extends Seeder if (!Formulary::query()->where('slug', 'phone')->exists()) { $formulary = new Formulary(); - $formulary->type = InputTypeEnum::text(); + $formulary->type = InputTypeEnum::phone(); $formulary->name = "phone"; $formulary->slug = "phone"; $formulary->placeholder = ["fr" => "Téléphone", "en" => "Phone", "de" => "Telefon", "nl" => "Telefoon"]; $formulary->details = null; $formulary->required = false; - $formulary->visible = true; + $formulary->is_visible = true; $formulary->status = InputStatusEnum::locked(); $formulary->order = 6; $formulary->saveOrFail(); diff --git a/resources/views/bo/pages/formularies/index-list.blade.php b/resources/views/bo/pages/formularies/index-list.blade.php index 0d32db7..024dd32 100644 --- a/resources/views/bo/pages/formularies/index-list.blade.php +++ b/resources/views/bo/pages/formularies/index-list.blade.php @@ -6,7 +6,7 @@ 'type' => __('Type'), 'name' => __('Nom'), 'required' => __('Requis'), - 'visible' => __('Visible'), + 'is_visible' => __('Visible'), 'order' => __('Ordre') ]; @endphp @@ -33,7 +33,7 @@ @endif - @if ($formularyModel->visible) + @if ($formularyModel->is_visible) @else diff --git a/routes/api.php b/routes/api.php index 81c6874..b13707d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -19,8 +19,8 @@ use Illuminate\Support\Facades\Route; Route::name('api.')->middleware('api.token')->group(function () { // FIXME: sur les méthodes GET le token est visible dans les logs server.. Route::get('settings', [SettingsController::class, 'get'])->name('settings.index'); - Route::get('settings/form', [SettingsController::class, 'getFormulary'])->name('formularies.index'); Route::get('app', [AppController::class, 'get'])->name('settings.app'); + Route::get('formularies', [SyncController::class, 'getFormularies'])->name('formularies.index'); Route::get('users', [SyncController::class, 'getUsers'])->name('users.index'); Route::get('directories', [SyncController::class, 'getDirectories'])->name('directories.index'); Route::get('documents', [SyncController::class, 'getDocuments'])->name('documents.index');