- Rearange formularies in Settings Controller
- formulary api output - Formulary seeder slug unique - rename Formulary visible column because the prop is hidden by Model trait Concerns\HideAttributes - mandatory input phone was not type of phone - form factory to be status default - formulary factory type
This commit is contained in:
parent
ed0e115ed0
commit
15ee6ece22
10 changed files with 92 additions and 36 deletions
|
|
@ -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']));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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é'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
36
app/Http/Resources/FormularyResource.php
Normal file
36
app/Http/Resources/FormularyResource.php
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class FormularyResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
* @phpcs:disable: Squiz.Commenting.FunctionComment.TypeHintMissing
|
||||
* @phpcs:disable: Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
/** @var \App\Models\Formulary */
|
||||
$formulary = $this;
|
||||
return [
|
||||
'id' => $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<mixed,primitive>
|
||||
return \json_encode($detail);
|
||||
})->all(),
|
||||
'is_visible' => $formulary->is_visible,
|
||||
'required' => $formulary->required,
|
||||
'status' => $formulary->status->value,
|
||||
'order' => $formulary->order,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -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<string,string> $placeholder
|
||||
* @property array<string,array<string,string>> $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.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.');
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
'type' => __('Type'),
|
||||
'name' => __('Nom'),
|
||||
'required' => __('Requis'),
|
||||
'visible' => __('Visible'),
|
||||
'is_visible' => __('Visible'),
|
||||
'order' => __('Ordre')
|
||||
];
|
||||
@endphp
|
||||
|
|
@ -33,7 +33,7 @@
|
|||
@endif
|
||||
</td>
|
||||
<td class="text-center">
|
||||
@if ($formularyModel->visible)
|
||||
@if ($formularyModel->is_visible)
|
||||
<i class="fa-solid fa-circle-check text-primary"></i>
|
||||
@else
|
||||
<i class="fa-solid fa-circle-xmark text-danger"></i>
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue