diff --git a/app/Casts/AsInput.php b/app/Casts/AsInput.php index ed31c2c..cd68b4d 100644 --- a/app/Casts/AsInput.php +++ b/app/Casts/AsInput.php @@ -26,7 +26,7 @@ class AsInput implements CastsAttributes // phpcs:enable /** @var array $inputData */ $inputData = \json_decode($value, true); - $inputClass = InputTypeEnum::make($inputData['type'])->inputTypes(); + $inputClass = InputTypeEnum::make($inputData['type'])->getInputClass(); return $inputClass::from(InputData::make(...\array_values($inputData)), $inputData['required'] ?? false); } diff --git a/app/Enums/Formularies/InputTypeEnum.php b/app/Enums/Formularies/InputTypeEnum.php index ad24abb..0cae89c 100644 --- a/app/Enums/Formularies/InputTypeEnum.php +++ b/app/Enums/Formularies/InputTypeEnum.php @@ -39,11 +39,11 @@ enum InputTypeEnum: int ]; /** - * Get translation key. + * Get InputType class based on the enum value. * * @return string */ - public function inputTypes(): string + public function getInputClass(): string { return match ($this) { self::text => InputText::class, diff --git a/app/Http/Controllers/API/AppController.php b/app/Http/Controllers/API/AppController.php index f393f50..345e353 100644 --- a/app/Http/Controllers/API/AppController.php +++ b/app/Http/Controllers/API/AppController.php @@ -22,7 +22,7 @@ class AppController extends Controller $response = []; $settings = Setting::query() ->where('tenant_id', $tenantKey) - ->where('key', 'Button1') + ->orWhere('key', 'Button1') ->orWhere('key', 'Button2') ->orWhere('key', 'Button3') ->get(); diff --git a/app/Http/Controllers/API/SyncController.php b/app/Http/Controllers/API/SyncController.php index 23fe203..c7d5593 100644 --- a/app/Http/Controllers/API/SyncController.php +++ b/app/Http/Controllers/API/SyncController.php @@ -5,7 +5,6 @@ namespace App\Http\Controllers\API; use App\Http\Controllers\Controller; use App\Http\Requests\Api\Contacts\DestroyContactsRequest; use App\Http\Requests\Api\Contacts\UpsertContactsRequest; -use App\Http\Resources\ApiResponseResource; use App\Http\Resources\AppUserResource; use App\Http\Resources\ContactResource; use App\Http\Resources\DirectoryResource; @@ -32,14 +31,13 @@ use Illuminate\Support\Facades\URL; class SyncController extends Controller { /** - * @return \App\Http\Resources\ApiResponseResource + * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection */ - public function getUsers(): \App\Http\Resources\ApiResponseResource + public function getUsers(): \Illuminate\Http\Resources\Json\AnonymousResourceCollection { - $users = AppUserResource::collection( + return AppUserResource::collection( AppUser::query()->where('tenant_id', \tenant()->getKey())->where('status', 1)->get() - )->toArray(request()); - return new ApiResponseResource("OK", $users); + ); } // *** --- START CONTACTS --- diff --git a/app/Http/Requests/Api/Contacts/UpsertContactsRequest.php b/app/Http/Requests/Api/Contacts/UpsertContactsRequest.php index a5ffcfb..8170541 100644 --- a/app/Http/Requests/Api/Contacts/UpsertContactsRequest.php +++ b/app/Http/Requests/Api/Contacts/UpsertContactsRequest.php @@ -6,6 +6,7 @@ use App\Enums\Formularies\InputTypeEnum; use App\Lib\Inputs\Definition\InputData; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\ValidationException; +use Illuminate\Validation\Rules\Enum; class UpsertContactsRequest extends FormRequest { @@ -68,10 +69,7 @@ class UpsertContactsRequest extends FormRequest 'contacts.*.data.*' => 'array', 'contacts.*.data.*.title' => 'present|string|min:1|max:255', 'contacts.*.data.*.formSlug' => 'present|string|min:1|max:255', - 'contacts.*.data.*.type' => 'present|in:' . implode( - ',', - array_column(InputTypeEnum::cases(), 'name') - ), + 'contacts.*.data.*.type' => ['present', new Enum(InputTypeEnum::class)], 'contacts.*.data.*.value' => 'present', 'contacts.*.data.*.required' => 'present|boolean', 'contacts.*.data.*.send_to_app_user_id' => 'nullable|numeric', @@ -108,10 +106,15 @@ class UpsertContactsRequest extends FormRequest 'error' => "wrong formSlug on data index '{$index}'" ]); } - $type = InputTypeEnum::make($data->get('type') ? $data->get('type') : null, 'name'); + $type = InputTypeEnum::make($data->get('type') ? $data->get('type') : null); + if (\is_null($type)) { + throw ValidationException::withMessages([ + 'error' => "wrong inputType on data index '{$index}'" + ]); + } $value = $data['value'] ?? null; $required = $data->get('required') ? true : false; - $inputClass = $type->inputTypes(); + $inputClass = $type->getInputClass(); return $inputClass::from(InputData::make( $title, $formSlug, diff --git a/app/Http/Resources/DocumentResource.php b/app/Http/Resources/DocumentResource.php index a7ef613..65f8843 100644 --- a/app/Http/Resources/DocumentResource.php +++ b/app/Http/Resources/DocumentResource.php @@ -28,7 +28,7 @@ class DocumentResource extends JsonResource 'type' => $document->type, 'directory' => $document->directory_id, 'path' => $document->path, - 'lang' => $document->lang->value, + 'lang' => $document->lang->name, 'published' => ($document->status) ? 1 : 0, 'parent' => $document->document_id, 'created_at' => $document->created_at, diff --git a/app/Models/Directory.php b/app/Models/Directory.php index 25d089b..9d18458 100644 --- a/app/Models/Directory.php +++ b/app/Models/Directory.php @@ -146,6 +146,30 @@ class Directory extends Model return Directory::renderDirectories($directoriesFiltered); } + /** + * Set default settings for a specific tenant. + * + * @param \App\Models\Tenant $tenant + * @return void + */ + public function setDefaultDirectories(Tenant $tenant): void + { + // Default locked salon directory. + $directory = new self(); + $directory->name = [ + "fr" => "Salon", + "en" => "Salon", + "de" => "Wohnzimmer", + "nl" => "Tentoonstelling", + ]; + $directory->directory_id = null; + $directory->needAuthorization = (bool)0; + $directory->is_system = (bool)1; + $directory->order = 1; + $directory->tenant_id = $tenant->getKey(); + $directory->saveOrFail(); + } + // * RELATIONSHIPS /** diff --git a/app/Models/Tenant.php b/app/Models/Tenant.php index b73e430..2df321a 100644 --- a/app/Models/Tenant.php +++ b/app/Models/Tenant.php @@ -48,6 +48,7 @@ class Tenant extends BaseTenant implements TenantContract static::created(function (self $model) { (new Setting())->setDefaultSettings($model); (new Formulary())->setDefaultFormularies($model); + (new Directory())->setDefaultDirectories($model); self::resetCache(); }); static::updating(function (self $model) { diff --git a/composer.json b/composer.json index 3fb3124..939bdbb 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "stancl/tenancy": "^3.9", "usmanhalalit/laracsv": "^2.0", "uwil/admin-secure-laravel": "^4.0", + "uwil/k8s-laravel": "^2.0", "uwil/laravel-common": "^3.1" }, "require-dev": { diff --git a/composer.lock b/composer.lock index d865cd9..c63aa00 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bd1a3f6788044c02043bfc2d090ab189", + "content-hash": "0eb882c623bc540ee0defb89f0fb2380", "packages": [ { "name": "24slides/laravel-saml2", @@ -8641,6 +8641,67 @@ "issues": "https://lab.s-web.fr/ldc-web/projets/ldc-web-admin-secure-laravel/-/issues" } }, + { + "name": "uwil/k8s-laravel", + "version": "2.0.0", + "source": { + "type": "git", + "url": "git@lab.s-web.fr:ldc-web/projets/k8s-laravel.git", + "reference": "050fb59ac50ed676661cca2a44050f116ef996fb" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/90/packages/composer/archives/uwil/k8s-laravel.zip?sha=050fb59ac50ed676661cca2a44050f116ef996fb", + "reference": "050fb59ac50ed676661cca2a44050f116ef996fb", + "shasum": "" + }, + "require": { + "illuminate/support": "~8|~9|~10|~11|~12", + "laravel/framework": "~8|~9|~10|~11|~12", + "php": "~7.3|~7.4|~8" + }, + "require-dev": { + "orchestra/testbench": "^8.5", + "phpunit/php-code-coverage": "^9.2", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\K8S\\Laravel\\K8SServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Uwil\\K8S\\Laravel\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Uwil\\K8S\\Laravel\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ], + "post-autoload-dump": [ + "@php ./vendor/bin/testbench package:discover --ansi" + ] + }, + "license": [ + "MIT" + ], + "description": "Laravel requirements for k8s", + "support": { + "email": "equipe.web@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/k8s-laravel/-/issues" + } + }, { "name": "uwil/laravel-common", "version": "3.1.2", diff --git a/config/app.php b/config/app.php index b14a766..68bbb83 100644 --- a/config/app.php +++ b/config/app.php @@ -169,6 +169,7 @@ return [ * Package Service Providers... */ + Uwil\K8S\Laravel\K8SServiceProvider::class, Maatwebsite\Excel\ExcelServiceProvider::class, /* diff --git a/database/seeders/DirectorySeeder.php b/database/seeders/DirectorySeeder.php index bde2319..2b02f49 100644 --- a/database/seeders/DirectorySeeder.php +++ b/database/seeders/DirectorySeeder.php @@ -17,19 +17,7 @@ class DirectorySeeder extends Seeder */ public function run(): void { - $directory = new Directory(); - $directory->name = [ - "fr" => "Salon", - "en" => "Salon", - "de" => "Wohnzimmer", - "nl" => "Tentoonstelling", - ]; - $directory->directory_id = null; - $directory->needAuthorization = 0; - $directory->is_system = 1; - $directory->order = 1; - $directory->tenant_id = Tenant::query()->first()->getKey(); - $directory->saveOrFail(); + // Default "Salon" directory is created in the Tenant model. Directory::factory(14)->create();