diff --git a/changelog/47_UNRELEASED_xxxx-xx-xx.md b/changelog/47_UNRELEASED_xxxx-xx-xx.md index 74793629..981cabcf 100644 --- a/changelog/47_UNRELEASED_xxxx-xx-xx.md +++ b/changelog/47_UNRELEASED_xxxx-xx-xx.md @@ -23,3 +23,4 @@ - Some other small fixes and improvements - The "Add as barcode to existing product" productpicker workflow failed to add the barcode to the given product - Recipes can now be filter by stock availability + - Added a feature flag (`config.php` setting) to also be able to hide all stock related UI elements and routes diff --git a/config-dist.php b/config-dist.php index 32ca33c6..0c5d281c 100644 --- a/config-dist.php +++ b/config-dist.php @@ -91,6 +91,7 @@ DefaultUserSetting('shopping_list_to_stock_workflow_auto_submit_when_prefilled', # came and still come by, because they are useful - here you can disable the parts # which you don't need to have a less cluttered UI # (set the setting to "false" to disable the corresponding part, which should be self explanatory) +Setting('FEATURE_FLAG_STOCK', true); Setting('FEATURE_FLAG_SHOPPINGLIST', true); Setting('FEATURE_FLAG_RECIPES', true); Setting('FEATURE_FLAG_CHORES', true); diff --git a/controllers/SystemController.php b/controllers/SystemController.php index 318e9b3b..b9a8d998 100644 --- a/controllers/SystemController.php +++ b/controllers/SystemController.php @@ -28,7 +28,7 @@ class SystemController extends BaseController $demoDataGeneratorService->PopulateDemoData(); } - return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/stockoverview')); + return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl($this->GetEntryPageRelative())); } public function About(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) @@ -38,4 +38,24 @@ class SystemController extends BaseController 'changelog' => $this->ApplicationService->GetChangelog() ]); } + + private function GetEntryPageRelative() + { + $entryPage = '/stockoverview'; + + if (!GROCY_FEATURE_FLAG_STOCK) + { + $entryPage = '/choresoverview'; + } + if (!GROCY_FEATURE_FLAG_CHORES) + { + $entryPage = '/batteriesoverview'; + } + if (!GROCY_FEATURE_FLAG_BATTERIES) + { + $entryPage = '/equipment'; + } + + return $entryPage; + } } diff --git a/routes.php b/routes.php index a68fd1a4..fd880561 100644 --- a/routes.php +++ b/routes.php @@ -25,20 +25,23 @@ $app->group('', function() $this->get('/user/{userId}', '\Grocy\Controllers\UsersController:UserEditForm'); // Stock routes - $this->get('/stockoverview', '\Grocy\Controllers\StockController:Overview'); - $this->get('/purchase', '\Grocy\Controllers\StockController:Purchase'); - $this->get('/consume', '\Grocy\Controllers\StockController:Consume'); - $this->get('/inventory', '\Grocy\Controllers\StockController:Inventory'); - $this->get('/products', '\Grocy\Controllers\StockController:ProductsList'); - $this->get('/product/{productId}', '\Grocy\Controllers\StockController:ProductEditForm'); - $this->get('/stocksettings', '\Grocy\Controllers\StockController:StockSettings'); - $this->get('/locations', '\Grocy\Controllers\StockController:LocationsList'); - $this->get('/location/{locationId}', '\Grocy\Controllers\StockController:LocationEditForm'); - $this->get('/quantityunits', '\Grocy\Controllers\StockController:QuantityUnitsList'); - $this->get('/quantityunit/{quantityunitId}', '\Grocy\Controllers\StockController:QuantityUnitEditForm'); - $this->get('/productgroups', '\Grocy\Controllers\StockController:ProductGroupsList'); - $this->get('/productgroup/{productGroupId}', '\Grocy\Controllers\StockController:ProductGroupEditForm'); - $this->get('/stockjournal', '\Grocy\Controllers\StockController:Journal'); + if (GROCY_FEATURE_FLAG_STOCK) + { + $this->get('/stockoverview', '\Grocy\Controllers\StockController:Overview'); + $this->get('/purchase', '\Grocy\Controllers\StockController:Purchase'); + $this->get('/consume', '\Grocy\Controllers\StockController:Consume'); + $this->get('/inventory', '\Grocy\Controllers\StockController:Inventory'); + $this->get('/products', '\Grocy\Controllers\StockController:ProductsList'); + $this->get('/product/{productId}', '\Grocy\Controllers\StockController:ProductEditForm'); + $this->get('/stocksettings', '\Grocy\Controllers\StockController:StockSettings'); + $this->get('/locations', '\Grocy\Controllers\StockController:LocationsList'); + $this->get('/location/{locationId}', '\Grocy\Controllers\StockController:LocationEditForm'); + $this->get('/quantityunits', '\Grocy\Controllers\StockController:QuantityUnitsList'); + $this->get('/quantityunit/{quantityunitId}', '\Grocy\Controllers\StockController:QuantityUnitEditForm'); + $this->get('/productgroups', '\Grocy\Controllers\StockController:ProductGroupsList'); + $this->get('/productgroup/{productGroupId}', '\Grocy\Controllers\StockController:ProductGroupEditForm'); + $this->get('/stockjournal', '\Grocy\Controllers\StockController:Journal'); + } // Shopping list routes if (GROCY_FEATURE_FLAG_SHOPPINGLIST) @@ -142,18 +145,21 @@ $app->group('/api', function() $this->put('/user/settings/{settingKey}', '\Grocy\Controllers\UsersApiController:SetUserSetting'); // Stock - $this->get('/stock', '\Grocy\Controllers\StockApiController:CurrentStock'); - $this->get('/stock/volatile', '\Grocy\Controllers\StockApiController:CurrentVolatilStock'); - $this->get('/stock/products/{productId}', '\Grocy\Controllers\StockApiController:ProductDetails'); - $this->get('/stock/products/by-barcode/{barcode}', '\Grocy\Controllers\StockApiController:ProductDetailsByBarcode'); - $this->get('/stock/products/{productId}/entries', '\Grocy\Controllers\StockApiController:ProductStockEntries'); - $this->get('/stock/products/{productId}/price-history', '\Grocy\Controllers\StockApiController:ProductPriceHistory'); - $this->post('/stock/products/{productId}/add', '\Grocy\Controllers\StockApiController:AddProduct'); - $this->post('/stock/products/{productId}/consume', '\Grocy\Controllers\StockApiController:ConsumeProduct'); - $this->post('/stock/products/{productId}/inventory', '\Grocy\Controllers\StockApiController:InventoryProduct'); - $this->post('/stock/products/{productId}/open', '\Grocy\Controllers\StockApiController:OpenProduct'); - $this->post('/stock/bookings/{bookingId}/undo', '\Grocy\Controllers\StockApiController:UndoBooking'); - $this->get('/stock/barcodes/external-lookup', '\Grocy\Controllers\StockApiController:ExternalBarcodeLookup'); + if (GROCY_FEATURE_FLAG_STOCK) + { + $this->get('/stock', '\Grocy\Controllers\StockApiController:CurrentStock'); + $this->get('/stock/volatile', '\Grocy\Controllers\StockApiController:CurrentVolatilStock'); + $this->get('/stock/products/{productId}', '\Grocy\Controllers\StockApiController:ProductDetails'); + $this->get('/stock/products/by-barcode/{barcode}', '\Grocy\Controllers\StockApiController:ProductDetailsByBarcode'); + $this->get('/stock/products/{productId}/entries', '\Grocy\Controllers\StockApiController:ProductStockEntries'); + $this->get('/stock/products/{productId}/price-history', '\Grocy\Controllers\StockApiController:ProductPriceHistory'); + $this->post('/stock/products/{productId}/add', '\Grocy\Controllers\StockApiController:AddProduct'); + $this->post('/stock/products/{productId}/consume', '\Grocy\Controllers\StockApiController:ConsumeProduct'); + $this->post('/stock/products/{productId}/inventory', '\Grocy\Controllers\StockApiController:InventoryProduct'); + $this->post('/stock/products/{productId}/open', '\Grocy\Controllers\StockApiController:OpenProduct'); + $this->post('/stock/bookings/{bookingId}/undo', '\Grocy\Controllers\StockApiController:UndoBooking'); + $this->get('/stock/barcodes/external-lookup', '\Grocy\Controllers\StockApiController:ExternalBarcodeLookup'); + } // Shopping list if (GROCY_FEATURE_FLAG_SHOPPINGLIST) diff --git a/views/layout/default.blade.php b/views/layout/default.blade.php index 0b8033e2..7b10dbd1 100644 --- a/views/layout/default.blade.php +++ b/views/layout/default.blade.php @@ -75,12 +75,14 @@