From 3ead13a5a1628eb3f3db450018d4df78e812344d Mon Sep 17 00:00:00 2001 From: Vincent BRIDIER Date: Thu, 4 Sep 2025 20:39:38 +0200 Subject: [PATCH 1/3] feat: Remove useless features --- app/Http/Controllers/API/SyncController.php | 38 ------------------- .../Bo/Settings/UpdateSettingRequest.php | 7 +--- app/Models/Setting.php | 6 --- .../bo/pages/settings/index-list.blade.php | 3 +- routes/api.php | 1 - 5 files changed, 3 insertions(+), 52 deletions(-) diff --git a/app/Http/Controllers/API/SyncController.php b/app/Http/Controllers/API/SyncController.php index 985ce98..14f6d0a 100644 --- a/app/Http/Controllers/API/SyncController.php +++ b/app/Http/Controllers/API/SyncController.php @@ -150,44 +150,6 @@ class SyncController extends Controller ); } - /** - * @param \Illuminate\Http\Request $request - * @return array - */ - public function getVersion(Request $request): array - { - $app_uuid = $request->app_uuid; - $app_version = $request->app_version; - $version = Setting::query() - ->where('tenant_id', \tenant()->getKey()) - ->where('key', 'version') - ->value('value'); - $ShowIsActive = Setting::query() - ->where('tenant_id', \tenant()->getKey()) - ->where('key', 'ShowIsActive') - ->value('value'); - - try { - $client = new \GuzzleHttp\Client(); - $response = $client->request( - 'GET', - 'https://store.ldc.fr/api/get-version?token=@P$oi6or!bL2-r%3C&app_uuid=' . $app_uuid - ); - $body = $response->getBody(); - $storeVersion = json_decode($body)->version; - } catch (ClientException $e) { - $storeVersion = $app_version; - } - - if ($storeVersion > $app_version) { - $newApp = true; - } else { - $newApp = false; - } - - return ['version' => $version, 'ShowIsActive' => $ShowIsActive, 'newApp' => $newApp]; - } - /** * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection */ diff --git a/app/Http/Requests/Bo/Settings/UpdateSettingRequest.php b/app/Http/Requests/Bo/Settings/UpdateSettingRequest.php index 6e5be30..f9e39cc 100644 --- a/app/Http/Requests/Bo/Settings/UpdateSettingRequest.php +++ b/app/Http/Requests/Bo/Settings/UpdateSettingRequest.php @@ -22,8 +22,7 @@ class UpdateSettingRequest extends FormRequest if ( $this->key === "Button1" || $this->key === "Button2" || - $this->key === "Button3" || - $this->key === "ShowIsActive" + $this->key === "Button3" ) { return Gate::check('update', $this->route('setting')); } else { @@ -40,9 +39,7 @@ class UpdateSettingRequest extends FormRequest */ protected function prepareForValidation(): void { - if ($this->key === "ShowIsActive") { - $this->merge(['value' => intval($this->value) ? "true" : "false"]); - } elseif ( + if ( $this->key === "Button1" || $this->key === "Button2" || $this->key === "Button3" diff --git a/app/Models/Setting.php b/app/Models/Setting.php index 87dad92..bbebfbc 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -107,8 +107,6 @@ class Setting extends Model { // @phpcs:disable Generic.Files.LineLength.TooLong $array = [ - ['key' => 'version', 'value' => '1', 'type' => SettingTypesEnum::numeric], - ['key' => 'ShowIsActive', 'value' => '0', 'type' => SettingTypesEnum::boolean], ['key' => 'MainColor', 'value' => '#FFF', 'type' => SettingTypesEnum::color], ['key' => 'SquaredLogo', 'value' => new \SplFileInfo(\resource_path('assets/settings/SquaredLogo.png')), 'type' => SettingTypesEnum::picture], ['key' => 'RectangleLogo', 'value' => new \SplFileInfo(\resource_path('assets/settings/RectangleLogo.png')), 'type' => SettingTypesEnum::picture], @@ -117,10 +115,6 @@ class Setting extends Model ['key' => 'Button1', 'value' => null, 'type' => SettingTypesEnum::directory], ['key' => 'Button2', 'value' => null, 'type' => SettingTypesEnum::directory], ['key' => 'Button3', 'value' => null, 'type' => SettingTypesEnum::directory], - ['key' => 'AppStoreUUID', 'value' => 'c4ac09fd-3992-47bc-bdee-0b7f5505e873', 'type' => SettingTypesEnum::string], - ['key' => 'FormSelect1', 'value' => '{"title":{"fr":"Travaille avec","en":"Work with","de":"Arbeit mit"},"values":{"pole-sable":{"fr":"P\u00f4le Sabl\u00e9","en":"P\u00f4le Sabl\u00e9","de":"P\u00f4le Sabl\u00e9"},"snv":{"fr":"SNV","en":"SNV","de":"SNV"},"pole-sud-est":{"fr":"P\u00f4le Sud-Est","en":"P\u00f4le Sud-Est","de":"P\u00f4le Sud-Est"},"aquitaine":{"fr":"Aquitaine","en":"Aquitaine","de":"Aquitaine"},"sbv":{"fr":"SBV","en":"SBV","de":"SBV"},"arrive":{"fr":"Arriv\u00e9","en":"Arriv\u00e9","de":"Arriv\u00e9"},"plusieurs-filiales":{"fr":"Plusieurs filiales","en":"Several subsidiaries","de":"Mehrere Filialen"},"autre":{"fr":"Autre","en":"Other","de":"Andere"}}}', 'type' => SettingTypesEnum::json], - ['key' => 'FormSelect2', 'value' => '{"title":{"fr":"Type de commerce","en":"Type of business","de":"Art des Gesch\u00e4fts"},"values":{"commerce-de-detail":{"fr":"Commerce de d\u00e9tail","en":"Retail trade","de":"Einzelhandel"},"restauration-commerciale":{"fr":"Restauration Commerciale","en":"Commercial catering","de":"Kommerzielle Restauration"},"restauration-collective":{"fr":"Restauration Collective","en":"Collective catering","de":"Kollektiv Restauration"},"grossiste-distributeur-cash":{"fr":"Grossiste Distributeur Cash","en":"Wholesale Distributor Cash","de":"Gro\u00dfh\u00e4ndler H\u00e4ndler Cash"},"pai":{"fr":"PAI","en":"PAI","de":"PAI"},"home-freezer-center":{"fr":"Home Freezer Center","en":"Home Freezer Center","de":"Home Gefrierzentrum"},"autres":{"fr":"Autre","en":"Other","de":"Andere"}}}', 'type' => SettingTypesEnum::json], - ['key' => 'FormCheck', 'value' => '[{"fr":"Frais","en":"Fresh","de":"Frisch"},{"fr":"Surgel\u00e9s","en":"Frozen food","de":"Tiefk\u00fchlkost"},{"fr":"Volailles crues","en":"Raw poultry","de":"Rohes Gefl\u00fcgel"},{"fr":"\u00c9labor\u00e9s crus","en":"Prepared raw","de":"Roh ausgearbeitet"},{"fr":"\u00c9labor\u00e9s cuits","en":"Cooked products","de":"Gekochte Elaborate"},{"fr":"Bio et Label Rouge","en":"Bio and Label Rouge","de":"Bio und Label Rouge"},{"fr":"BBC","en":"BBC","de":"BBC"},{"fr":"Halal","en":"Halal","de":"Halal"},{"fr":"Autre","en":"Other","de":"Andere"}]', 'type' => SettingTypesEnum::json], ]; // @phpcs:enable collect($array)->map(function (array $item) use ($tenant) { diff --git a/resources/views/bo/pages/settings/index-list.blade.php b/resources/views/bo/pages/settings/index-list.blade.php index e2e6a43..96676a8 100644 --- a/resources/views/bo/pages/settings/index-list.blade.php +++ b/resources/views/bo/pages/settings/index-list.blade.php @@ -24,8 +24,7 @@ @if (Auth::user()->role->equals(\App\Enums\UserRolesEnum::admin) || $settingModel->key === 'Button1' || $settingModel->key === 'Button2' || - $settingModel->key === 'Button3' || - $settingModel->key === 'ShowIsActive') + $settingModel->key === 'Button3') {{ $settingModel->key }} diff --git a/routes/api.php b/routes/api.php index 66cdad6..5ec5d73 100644 --- a/routes/api.php +++ b/routes/api.php @@ -29,7 +29,6 @@ Route::middleware([ 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'); - Route::get('version', [SyncController::class, 'getVersion'])->name('version'); Route::get('contacts/{app_user}', [SyncController::class, 'getContacts'])->name('contacts.index'); Route::post('contacts/{app_user}', [SyncController::class, 'upsertContact'])->name('contacts.upsert'); Route::delete('contacts/{app_user}', [SyncController::class, 'destroyContacts'])->name('contacts.delete'); From 3eed68a9c366510eeea37d9eac54757d44f21182 Mon Sep 17 00:00:00 2001 From: Vincent BRIDIER Date: Fri, 5 Sep 2025 10:03:55 +0200 Subject: [PATCH 2/3] feat: Update download url signature for k8s env - Close #33 --- app/Http/Controllers/API/SyncController.php | 5 +++-- routes/web-bo.php | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/API/SyncController.php b/app/Http/Controllers/API/SyncController.php index 5ea448b..657353f 100644 --- a/app/Http/Controllers/API/SyncController.php +++ b/app/Http/Controllers/API/SyncController.php @@ -182,10 +182,11 @@ class SyncController extends Controller $exists = Storage::disk('public') ->exists(sprintf('docs/%s/%s.%s', \tenant()->getKey(), $doc['uuid'], $doc['type'])); if ($exists) { - array_push($attach, URL::temporarySignedRoute( + array_push($attach, config('app.url') . URL::temporarySignedRoute( 'docs.download', now()->addDays(30), - ['tenant' => \tenant()->getKey(), 'uuid' => $doc['uuid']] + ['tenant' => \tenant()->getKey(), 'uuid' => $doc['uuid']], + false )); array_push($filesName, $doc['title']); } else { diff --git a/routes/web-bo.php b/routes/web-bo.php index 95b09e9..c37a4ad 100644 --- a/routes/web-bo.php +++ b/routes/web-bo.php @@ -110,4 +110,4 @@ Route::middleware(['web', 'admin-secure'])->name('bo.')->group(function () { // Public files download. Route::get('/{tenant}/docs/{uuid}/download', [DocumentController::class, 'download']) ->name('docs.download') - ->middleware('signed'); + ->middleware('signed:relative'); From 941c10b6f26b4561d9a21429278e7e427d4ff669 Mon Sep 17 00:00:00 2001 From: Vincent BRIDIER Date: Fri, 5 Sep 2025 10:21:40 +0200 Subject: [PATCH 3/3] feat: remove useless 'Salon' feature --- app/Models/Directory.php | 40 +------------------ app/Models/Tenant.php | 1 - app/Policies/DirectoryPolicy.php | 14 +++---- database/factories/DirectoryFactory.php | 1 - ..._is_system_column_on_directories_table.php | 28 +++++++++++++ database/seeders/DirectorySeeder.php | 3 -- phpcs.xml | 1 - .../ts/bo/components/DirectoriesComponent.vue | 10 +---- resources/ts/index.d.ts | 1 - .../bo/pages/documents/index-list.blade.php | 16 ++++---- 10 files changed, 44 insertions(+), 71 deletions(-) create mode 100644 database/migrations/2025_09_05_101506_delete_is_system_column_on_directories_table.php diff --git a/app/Models/Directory.php b/app/Models/Directory.php index a4194e1..1012e5c 100644 --- a/app/Models/Directory.php +++ b/app/Models/Directory.php @@ -14,7 +14,6 @@ use Stancl\Tenancy\Database\Concerns\BelongsToTenant; * @property integer|null $directory_id Associated directory. * @property integer $order Directory order. * @property boolean $needAuthorization Directory authorization. - * @property boolean $is_system Directory system status. * @property-read \Carbon\Carbon $created_at Created date. * @property-read \Carbon\Carbon $updated_at Updated date. */ @@ -32,8 +31,7 @@ class Directory extends Model 'name', 'directory_id', 'order', - 'needAuthorization', - 'is_system' + 'needAuthorization' ]; /** @@ -53,7 +51,6 @@ class Directory extends Model protected static function booted(): void { static::creating(function (self $model) { - self::setIsSystem($model); self::setOrder($model); }); static::deleting(function (self $model) { @@ -79,17 +76,6 @@ class Directory extends Model ) + 1; } - /** - * Set order after the last element of the list. - * - * @param self $model - * @return void - */ - private static function setIsSystem(self $model): void - { - $model->is_system = ($model->is_system) ? $model->is_system : 0; - } - /** * Render directories. * @@ -146,30 +132,6 @@ 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 2df321a..b73e430 100644 --- a/app/Models/Tenant.php +++ b/app/Models/Tenant.php @@ -48,7 +48,6 @@ 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/app/Policies/DirectoryPolicy.php b/app/Policies/DirectoryPolicy.php index b7851b1..beb57bd 100644 --- a/app/Policies/DirectoryPolicy.php +++ b/app/Policies/DirectoryPolicy.php @@ -44,25 +44,23 @@ class DirectoryPolicy /** * Determine whether the user can update the model. * - * @param \App\Models\User $authUser - * @param \App\Models\Directory $directory + * @param \App\Models\User $authUser * @return boolean */ - public function update(User $authUser, Directory $directory): bool + public function update(User $authUser): bool { - return !$directory->is_system && UserStaticRules::restrictTenant($authUser); + return UserStaticRules::restrictTenant($authUser); } /** * Determine whether the user can delete the model. * - * @param \App\Models\User $authUser - * @param \App\Models\Directory $directory + * @param \App\Models\User $authUser * @return boolean */ - public function delete(User $authUser, Directory $directory): bool + public function delete(User $authUser): bool { - return !$directory->is_system && UserStaticRules::restrictTenant($authUser); + return UserStaticRules::restrictTenant($authUser); } /** diff --git a/database/factories/DirectoryFactory.php b/database/factories/DirectoryFactory.php index 99c5446..1cd7fe7 100644 --- a/database/factories/DirectoryFactory.php +++ b/database/factories/DirectoryFactory.php @@ -34,7 +34,6 @@ class DirectoryFactory extends Factory ], 'directory_id' => null, 'needAuthorization' => $this->faker->boolean(50), - 'is_system' => 0, 'tenant_id' => Tenant::query()->first('id'), ]; } diff --git a/database/migrations/2025_09_05_101506_delete_is_system_column_on_directories_table.php b/database/migrations/2025_09_05_101506_delete_is_system_column_on_directories_table.php new file mode 100644 index 0000000..8a03e6e --- /dev/null +++ b/database/migrations/2025_09_05_101506_delete_is_system_column_on_directories_table.php @@ -0,0 +1,28 @@ +dropColumn('is_system'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('directories', function (Blueprint $table) { + $table->boolean('is_system')->after('needAuthorization')->comment('Le dossier est-il administrable ?'); + }); + } +}; diff --git a/database/seeders/DirectorySeeder.php b/database/seeders/DirectorySeeder.php index 2b02f49..faae44a 100644 --- a/database/seeders/DirectorySeeder.php +++ b/database/seeders/DirectorySeeder.php @@ -17,10 +17,7 @@ class DirectorySeeder extends Seeder */ public function run(): void { - // Default "Salon" directory is created in the Tenant model. - Directory::factory(14)->create(); - // Seeder for directory_authorizations table. $directories = Directory::query()->where('needAuthorization', true)->get(); AppUser::each(function (AppUser $model) use ($directories) { diff --git a/phpcs.xml b/phpcs.xml index 4d2193f..86c7dbc 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -115,7 +115,6 @@ - diff --git a/resources/ts/bo/components/DirectoriesComponent.vue b/resources/ts/bo/components/DirectoriesComponent.vue index a125c74..8fa6554 100644 --- a/resources/ts/bo/components/DirectoriesComponent.vue +++ b/resources/ts/bo/components/DirectoriesComponent.vue @@ -31,8 +31,7 @@ name: string[], needAuthorization: boolean, documents_count: number, - children: number[], - is_system: boolean, + children: number[] }, }" > @@ -82,7 +81,6 @@

@@ -200,7 +198,7 @@ function recursiveDir(list: DirectoryObject[], parent: number | null = null) { return root; } -/** Check if item is a system item before the move. */ +/** Check depth before the move. */ function beforeMove({ dragItem, pathTo, @@ -208,10 +206,6 @@ function beforeMove({ dragItem: DirectoryObject; pathTo: number[]; }) { - if (dragItem.is_system) { - if (pathTo.length >= 2) return false; - else return true; - } if (pathTo.length == 4) { return false; } diff --git a/resources/ts/index.d.ts b/resources/ts/index.d.ts index 65b7e35..db6de4d 100644 --- a/resources/ts/index.d.ts +++ b/resources/ts/index.d.ts @@ -18,7 +18,6 @@ type DirectoryObj = { created_at: string; updated_at: string; children: Array | undefined; - is_system: boolean | null; }; // * Laravel Paginator diff --git a/resources/views/bo/pages/documents/index-list.blade.php b/resources/views/bo/pages/documents/index-list.blade.php index 72c79f5..d1d83ed 100644 --- a/resources/views/bo/pages/documents/index-list.blade.php +++ b/resources/views/bo/pages/documents/index-list.blade.php @@ -23,15 +23,13 @@ {{ $documentModel->title }} - @if(isset($documentModel->directory->is_system) && !$documentModel->directory->is_system) - - - - @endif + + + @if(!is_null($documentModel->document_id))