diff --git a/app.php b/app.php index 18966104..24d297cd 100644 --- a/app.php +++ b/app.php @@ -4,11 +4,11 @@ use \Psr\Http\Message\ServerRequestInterface as Request; use \Psr\Http\Message\ResponseInterface as Response; use \Grocy\Middleware\SessionAuthMiddleware; +use \Grocy\Helpers\UrlManager; use \Grocy\Services\ApplicationService; require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/data/config.php'; -require_once __DIR__ . '/extensions.php'; // Setup base application if (PHP_SAPI !== 'cli') @@ -21,6 +21,10 @@ if (PHP_SAPI !== 'cli') 'view' => function($container) { return new \Slim\Views\Blade(__DIR__ . '/views', __DIR__ . '/data/viewcache'); + }, + 'UrlManager' => function($container) + { + return new UrlManager(BASE_URL); } ]); diff --git a/composer.json b/composer.json index fe1bc9f7..14cde752 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,11 @@ "psr-4": { "Grocy\\Services\\": "services/", "Grocy\\Controllers\\": "controllers/", - "Grocy\\Middleware\\": "middleware/" - } + "Grocy\\Middleware\\": "middleware/", + "Grocy\\Helpers\\": "helpers/" + }, + "files": [ + "helpers/extensions.php" + ] } } diff --git a/config-dist.php b/config-dist.php index 1eed9b62..1f9dd849 100644 --- a/config-dist.php +++ b/config-dist.php @@ -1,7 +1,17 @@ AppContainer = $container; - $databaseService = new DatabaseService(); $this->Database = $databaseService->GetDbConnection(); @@ -23,6 +21,12 @@ class BaseController { return $localizationService->Localize($text, ...$placeholderValues); }); + $container->view->set('U', function($relativePath) use($container) + { + return $container->UrlManager->ConstructUrl($relativePath); + }); + + $this->AppContainer = $container; } protected $AppContainer; diff --git a/controllers/LoginController.php b/controllers/LoginController.php index 9601c730..0923feed 100644 --- a/controllers/LoginController.php +++ b/controllers/LoginController.php @@ -27,16 +27,16 @@ class LoginController extends BaseController $sessionKey = $this->SessionService->CreateSession(); setcookie('grocy_session', $sessionKey, time() + 31536000); // Cookie expires in 1 year, but session validity is up to SessionService - return $response->withRedirect('/'); + return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/')); } else { - return $response->withRedirect('/login?invalid=true'); + return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/login?invalid=true')); } } else { - return $response->withRedirect('/login?invalid=true'); + return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/login?invalid=true')); } } @@ -48,7 +48,7 @@ class LoginController extends BaseController public function Logout(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) { $this->SessionService->RemoveSession($_COOKIE['grocy_session']); - return $response->withRedirect('/'); + return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/')); } public function Root(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) @@ -64,6 +64,6 @@ class LoginController extends BaseController $demoDataGeneratorService->PopulateDemoData(); } - return $response->withRedirect('/stockoverview'); + return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/stockoverview')); } } diff --git a/helpers/UrlManager.php b/helpers/UrlManager.php new file mode 100644 index 00000000..dd6886a2 --- /dev/null +++ b/helpers/UrlManager.php @@ -0,0 +1,17 @@ +BasePath = $basePath; + } + + protected $BasePath; + + public function ConstructUrl($relativePath) + { + return rtrim($this->BasePath, '/') . $relativePath; + } +} diff --git a/extensions.php b/helpers/extensions.php similarity index 100% rename from extensions.php rename to helpers/extensions.php diff --git a/middleware/BaseMiddleware.php b/middleware/BaseMiddleware.php index 21606cf5..7be05354 100644 --- a/middleware/BaseMiddleware.php +++ b/middleware/BaseMiddleware.php @@ -5,8 +5,8 @@ namespace Grocy\Middleware; class BaseMiddleware { public function __construct(\Slim\Container $container) { - $this->container = $container; + $this->AppContainer = $container; } - protected $container; + protected $AppContainer; } diff --git a/middleware/SessionAuthMiddleware.php b/middleware/SessionAuthMiddleware.php index 07d31b93..baf9c73d 100644 --- a/middleware/SessionAuthMiddleware.php +++ b/middleware/SessionAuthMiddleware.php @@ -20,7 +20,7 @@ class SessionAuthMiddleware extends BaseMiddleware $sessionService = new SessionService(); if ((!isset($_COOKIE['grocy_session']) || !$sessionService->IsValidSession($_COOKIE['grocy_session'])) && $routeName !== 'login') { - $response = $response->withRedirect('/login'); + $response = $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/login')); } else { diff --git a/public/js/grocy.js b/public/js/grocy.js index 5869d700..e7c14c1a 100644 --- a/public/js/grocy.js +++ b/public/js/grocy.js @@ -14,6 +14,11 @@ return localizedText; } +U = function(relativePath) +{ + return Grocy.BaseUrl.replace(/\/$/, '') + relativePath; +} + if (!Grocy.ActiveNav.isEmpty()) { var menuItem = $('.nav').find("[data-nav-for-page='" + Grocy.ActiveNav + "']"); @@ -23,9 +28,11 @@ if (!Grocy.ActiveNav.isEmpty()) $.timeago.settings.allowFuture = true; $('time.timeago').timeago(); -Grocy.FetchJson = function(url, success, error) +Grocy.Api = { }; +Grocy.Api.Get = function(apiFunction, success, error) { var xhr = new XMLHttpRequest(); + var url = U('/api/' + apiFunction); xhr.onreadystatechange = function() { @@ -52,9 +59,10 @@ Grocy.FetchJson = function(url, success, error) xhr.send(); }; -Grocy.PostJson = function(url, jsonData, success, error) +Grocy.Api.Post = function(apiFunction, jsonData, success, error) { var xhr = new XMLHttpRequest(); + var url = U('/api/' + apiFunction); xhr.onreadystatechange = function() { diff --git a/public/viewjs/batteries.js b/public/viewjs/batteries.js index 51f39bc9..8ab61221 100644 --- a/public/viewjs/batteries.js +++ b/public/viewjs/batteries.js @@ -1,7 +1,7 @@ $(document).on('click', '.battery-delete-button', function(e) { bootbox.confirm({ - message: 'Delete battery ' + $(e.target).attr('data-battery-name') + '?', + message: 'Delete battery ' + $(e.currentTarget).attr('data-battery-name') + '?', buttons: { confirm: { label: 'Yes', @@ -16,10 +16,10 @@ { if (result === true) { - Grocy.FetchJson('/api/delete-object/batteries/' + $(e.target).attr('data-battery-id'), + Grocy.Api.Get('delete-object/batteries/' + $(e.currentTarget).attr('data-battery-id'), function(result) { - window.location.href = '/batteries'; + window.location.href = U('/batteries'); }, function(xhr) { diff --git a/public/viewjs/batteryform.js b/public/viewjs/batteryform.js index 8b90d287..1a65d574 100644 --- a/public/viewjs/batteryform.js +++ b/public/viewjs/batteryform.js @@ -4,10 +4,10 @@ if (Grocy.EditMode === 'create') { - Grocy.PostJson('/api/add-object/batteries', $('#battery-form').serializeJSON(), + Grocy.Api.Post('add-object/batteries', $('#battery-form').serializeJSON(), function(result) { - window.location.href = '/batteries'; + window.location.href = U('/batteries'); }, function(xhr) { @@ -17,10 +17,10 @@ } else { - Grocy.PostJson('/api/edit-object/batteries/' + Grocy.EditObjectId, $('#battery-form').serializeJSON(), + Grocy.Api.Post('edit-object/batteries/' + Grocy.EditObjectId, $('#battery-form').serializeJSON(), function(result) { - window.location.href = '/batteries'; + window.location.href = U('/batteries'); }, function(xhr) { diff --git a/public/viewjs/batterytracking.js b/public/viewjs/batterytracking.js index 6bbf2f6c..c7dba710 100644 --- a/public/viewjs/batterytracking.js +++ b/public/viewjs/batterytracking.js @@ -4,10 +4,10 @@ var jsonForm = $('#batterytracking-form').serializeJSON(); - Grocy.FetchJson('/api/batteries/get-battery-details/' + jsonForm.battery_id, + Grocy.Api.Get('batteries/get-battery-details/' + jsonForm.battery_id, function (batteryDetails) { - Grocy.FetchJson('/api/batteries/track-charge-cycle/' + jsonForm.battery_id + '?tracked_time=' + $('#tracked_time').val(), + Grocy.Api.Get('batteries/track-charge-cycle/' + jsonForm.battery_id + '?tracked_time=' + $('#tracked_time').val(), function(result) { toastr.success('Tracked charge cylce of battery ' + batteryDetails.battery.name + ' on ' + $('#tracked_time').val()); diff --git a/public/viewjs/components/batterycard.js b/public/viewjs/components/batterycard.js index 9a44ed38..a58f8731 100644 --- a/public/viewjs/components/batterycard.js +++ b/public/viewjs/components/batterycard.js @@ -2,7 +2,7 @@ Grocy.Components.BatteryCard = { }; Grocy.Components.BatteryCard.Refresh = function(batteryId) { - Grocy.FetchJson('/api/batteries/get-battery-details/' + batteryId, + Grocy.Api.Get('batteries/get-battery-details/' + batteryId, function(batteryDetails) { $('#batterycard-battery-name').text(batteryDetails.battery.name); diff --git a/public/viewjs/components/habitcard.js b/public/viewjs/components/habitcard.js index 9a4fac6b..41cbcbd2 100644 --- a/public/viewjs/components/habitcard.js +++ b/public/viewjs/components/habitcard.js @@ -2,7 +2,7 @@ Grocy.Components.HabitCard = { }; Grocy.Components.HabitCard.Refresh = function (habitId) { - Grocy.FetchJson('/api/habits/get-habit-details/' + habitId, + Grocy.Api.Get('habits/get-habit-details/' + habitId, function(habitDetails) { $('#habitcard-habit-name').text(habitDetails.habit.name); diff --git a/public/viewjs/components/productcard.js b/public/viewjs/components/productcard.js index bfa54fb9..45ad1d7e 100644 --- a/public/viewjs/components/productcard.js +++ b/public/viewjs/components/productcard.js @@ -2,7 +2,7 @@ Grocy.Components.ProductCard = { }; Grocy.Components.ProductCard.Refresh = function(productId) { - Grocy.FetchJson('/api/stock/get-product-details/' + productId, + Grocy.Api.Get('stock/get-product-details/' + productId, function(productDetails) { $('#productcard-product-name').text(productDetails.product.name); diff --git a/public/viewjs/consume.js b/public/viewjs/consume.js index 9f444c14..563b6bae 100644 --- a/public/viewjs/consume.js +++ b/public/viewjs/consume.js @@ -10,10 +10,10 @@ spoiled = 1; } - Grocy.FetchJson('/api/stock/get-product-details/' + jsonForm.product_id, + Grocy.Api.Get('stock/get-product-details/' + jsonForm.product_id, function (productDetails) { - Grocy.FetchJson('/api/stock/consume-product/' + jsonForm.product_id + '/' + jsonForm.amount + '?spoiled=' + spoiled, + Grocy.Api.Get('stock/consume-product/' + jsonForm.product_id + '/' + jsonForm.amount + '?spoiled=' + spoiled, function(result) { toastr.success('Removed ' + jsonForm.amount + ' ' + productDetails.quantity_unit_stock.name + ' of ' + productDetails.product.name + ' from stock'); @@ -46,7 +46,7 @@ $('#product_id').on('change', function(e) { Grocy.Components.ProductCard.Refresh(productId); - Grocy.FetchJson('/api/stock/get-product-details/' + productId, + Grocy.Api.Get('stock/get-product-details/' + productId, function (productDetails) { $('#amount').attr('max', productDetails.stock_amount); diff --git a/public/viewjs/habitform.js b/public/viewjs/habitform.js index b03384ea..0f0fd7a6 100644 --- a/public/viewjs/habitform.js +++ b/public/viewjs/habitform.js @@ -4,10 +4,10 @@ if (Grocy.EditMode === 'create') { - Grocy.PostJson('/api/add-object/habits', $('#habit-form').serializeJSON(), + Grocy.Api.Post('add-object/habits', $('#habit-form').serializeJSON(), function(result) { - window.location.href = '/habits'; + window.location.href = U('/habits'); }, function(xhr) { @@ -17,10 +17,10 @@ } else { - Grocy.PostJson('/api/edit-object/habits/' + Grocy.EditObjectId, $('#habit-form').serializeJSON(), + Grocy.Api.Post('edit-object/habits/' + Grocy.EditObjectId, $('#habit-form').serializeJSON(), function(result) { - window.location.href = '/habits'; + window.location.href = U('/habits'); }, function(xhr) { diff --git a/public/viewjs/habits.js b/public/viewjs/habits.js index a34d0ce4..2b52c048 100644 --- a/public/viewjs/habits.js +++ b/public/viewjs/habits.js @@ -1,7 +1,7 @@ $(document).on('click', '.habit-delete-button', function(e) { bootbox.confirm({ - message: 'Delete habit ' + $(e.target).attr('data-habit-name') + '?', + message: 'Delete habit ' + $(e.currentTarget).attr('data-habit-name') + '?', buttons: { confirm: { label: 'Yes', @@ -16,10 +16,10 @@ { if (result === true) { - Grocy.FetchJson('/api/delete-object/habits/' + $(e.target).attr('data-habit-id'), + Grocy.Api.Get('delete-object/habits/' + $(e.currentTarget).attr('data-habit-id'), function(result) { - window.location.href = '/habits'; + window.location.href = U('/habits'); }, function(xhr) { diff --git a/public/viewjs/habittracking.js b/public/viewjs/habittracking.js index 7971e21f..8c66a3ee 100644 --- a/public/viewjs/habittracking.js +++ b/public/viewjs/habittracking.js @@ -4,10 +4,10 @@ var jsonForm = $('#habittracking-form').serializeJSON(); - Grocy.FetchJson('/api/habits/get-habit-details/' + jsonForm.habit_id, + Grocy.Api.Get('habits/get-habit-details/' + jsonForm.habit_id, function (habitDetails) { - Grocy.FetchJson('/api/habits/track-habit-execution/' + jsonForm.habit_id + '?tracked_time=' + $('#tracked_time').val(), + Grocy.Api.Get('habits/track-habit-execution/' + jsonForm.habit_id + '?tracked_time=' + $('#tracked_time').val(), function(result) { toastr.success('Tracked execution of habit ' + habitDetails.habit.name + ' on ' + $('#tracked_time').val()); diff --git a/public/viewjs/inventory.js b/public/viewjs/inventory.js index f3d7704b..cf9da0ac 100644 --- a/public/viewjs/inventory.js +++ b/public/viewjs/inventory.js @@ -4,10 +4,10 @@ var jsonForm = $('#inventory-form').serializeJSON(); - Grocy.FetchJson('/api/stock/get-product-details/' + jsonForm.product_id, + Grocy.Api.Get('stock/get-product-details/' + jsonForm.product_id, function (productDetails) { - Grocy.FetchJson('/api/stock/inventory-product/' + jsonForm.product_id + '/' + jsonForm.new_amount + '?bestbeforedate=' + $('#best_before_date').val(), + Grocy.Api.Get('stock/inventory-product/' + jsonForm.product_id + '/' + jsonForm.new_amount + '?bestbeforedate=' + $('#best_before_date').val(), function(result) { var addBarcode = GetUriParam('addbarcodetoselection'); @@ -23,7 +23,7 @@ productDetails.product.barcode += ',' + addBarcode; } - Grocy.PostJson('/api/edit-object/products/' + productDetails.product.id, productDetails.product, + Grocy.Api.Get('edit-object/products/' + productDetails.product.id, productDetails.product, function (result) { }, function(xhr) { @@ -36,7 +36,7 @@ if (addBarcode !== undefined) { - window.location.href = '/inventory'; + window.location.href = U('/inventory'); } else { @@ -71,7 +71,7 @@ $('#product_id').on('change', function(e) { Grocy.Components.ProductCard.Refresh(productId); - Grocy.FetchJson('/api/stock/get-product-details/' + productId, + Grocy.Api.Get('stock/get-product-details/' + productId, function(productDetails) { $('#new_amount').attr('not-equal', productDetails.stock_amount); @@ -124,7 +124,7 @@ $('#product_id_text_input').on('change', function(e) className: 'btn-success add-new-product-dialog-button', callback: function() { - window.location.href = '/product/new?prefillname=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname); + window.location.href = U('/product/new?prefillname=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname)); } }, addbarcode: { @@ -132,7 +132,7 @@ $('#product_id_text_input').on('change', function(e) className: 'btn-info add-new-barcode-dialog-button', callback: function() { - window.location.href = '/inventory?addbarcodetoselection=' + encodeURIComponent(input); + window.location.href = U('/inventory?addbarcodetoselection=' + encodeURIComponent(input)); } }, addnewproductwithbarcode: { @@ -140,7 +140,7 @@ $('#product_id_text_input').on('change', function(e) className: 'btn-warning add-new-product-with-barcode-dialog-button', callback: function() { - window.location.href = '/product/new?prefillbarcode=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname); + window.location.href = U('/product/new?prefillbarcode=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname)); } } } @@ -283,7 +283,7 @@ $('#new_amount').on('change', function(e) if (productId) { - Grocy.FetchJson('/api/stock/get-product-details/' + productId, + Grocy.Api.Get('stock/get-product-details/' + productId, function(productDetails) { var productStockAmount = productDetails.stock_amount || '0'; diff --git a/public/viewjs/locationform.js b/public/viewjs/locationform.js index f352620b..7244a5ea 100644 --- a/public/viewjs/locationform.js +++ b/public/viewjs/locationform.js @@ -4,10 +4,10 @@ if (Grocy.EditMode === 'create') { - Grocy.PostJson('/api/add-object/locations', $('#location-form').serializeJSON(), + Grocy.Api.Post('add-object/locations', $('#location-form').serializeJSON(), function(result) { - window.location.href = '/locations'; + window.location.href = U('/locations'); }, function(xhr) { @@ -17,10 +17,10 @@ } else { - Grocy.PostJson('/api/edit-object/locations/' + Grocy.EditObjectId, $('#location-form').serializeJSON(), + Grocy.Api.Post('edit-object/locations/' + Grocy.EditObjectId, $('#location-form').serializeJSON(), function(result) { - window.location.href = '/locations'; + window.location.href = U('/locations'); }, function(xhr) { diff --git a/public/viewjs/locations.js b/public/viewjs/locations.js index 9c64b1a1..2842f0e1 100644 --- a/public/viewjs/locations.js +++ b/public/viewjs/locations.js @@ -1,7 +1,7 @@ $(document).on('click', '.location-delete-button', function(e) { bootbox.confirm({ - message: 'Delete location ' + $(e.target).attr('data-location-name') + '?', + message: 'Delete location ' + $(e.currentTarget).attr('data-location-name') + '?', buttons: { confirm: { label: 'Yes', @@ -16,10 +16,10 @@ { if (result === true) { - Grocy.FetchJson('/api/delete-object/locations/' + $(e.target).attr('data-location-id'), + Grocy.Api.Get('delete-object/locations/' + $(e.currentTarget).attr('data-location-id'), function(result) { - window.location.href = '/locations'; + window.location.href = U('/locations'); }, function(xhr) { diff --git a/public/viewjs/productform.js b/public/viewjs/productform.js index 7008db76..4d65a447 100644 --- a/public/viewjs/productform.js +++ b/public/viewjs/productform.js @@ -2,7 +2,7 @@ { e.preventDefault(); - var redirectDestination = '/products'; + var redirectDestination = U('/products'); var returnTo = GetUriParam('returnto'); if (returnTo !== undefined) { @@ -11,7 +11,7 @@ if (Grocy.EditMode === 'create') { - Grocy.PostJson('/api/add-object/products', $('#product-form').serializeJSON(), + Grocy.Api.Post('add-object/products', $('#product-form').serializeJSON(), function(result) { window.location.href = redirectDestination; @@ -24,7 +24,7 @@ } else { - Grocy.PostJson('/api/edit-object/products/' + Grocy.EditObjectId, $('#product-form').serializeJSON(), + Grocy.Api.Post('edit-object/products/' + Grocy.EditObjectId, $('#product-form').serializeJSON(), function(result) { window.location.href = redirectDestination; @@ -44,7 +44,7 @@ $('#barcode-taginput').tagsManager({ if (Grocy.EditMode === 'edit') { - Grocy.FetchJson('/api/get-object/products/' + Grocy.EditObjectId, + Grocy.Api.Get('get-object/products/' + Grocy.EditObjectId, function (product) { if (product.barcode !== null && product.barcode.length > 0) diff --git a/public/viewjs/products.js b/public/viewjs/products.js index 0cd05aa7..e6016a79 100644 --- a/public/viewjs/products.js +++ b/public/viewjs/products.js @@ -1,7 +1,7 @@ $(document).on('click', '.product-delete-button', function(e) { bootbox.confirm({ - message: 'Delete product ' + $(e.target).attr('data-product-name') + '?', + message: 'Delete product ' + $(e.currentTarget).attr('data-product-name') + '?', buttons: { confirm: { label: 'Yes', @@ -16,10 +16,10 @@ { if (result === true) { - Grocy.FetchJson('/api/delete-object/products/' + $(e.target).attr('data-product-id'), + Grocy.Api.Get('delete-object/products/' + $(e.currentTarget).attr('data-product-id'), function(result) { - window.location.href = '/products'; + window.location.href = U('/products'); }, function(xhr) { diff --git a/public/viewjs/purchase.js b/public/viewjs/purchase.js index a7a98934..e7964040 100644 --- a/public/viewjs/purchase.js +++ b/public/viewjs/purchase.js @@ -4,12 +4,12 @@ var jsonForm = $('#purchase-form').serializeJSON(); - Grocy.FetchJson('/api/stock/get-product-details/' + jsonForm.product_id, + Grocy.Api.Get('stock/get-product-details/' + jsonForm.product_id, function (productDetails) { var amount = jsonForm.amount * productDetails.product.qu_factor_purchase_to_stock; - Grocy.FetchJson('/api/stock/add-product/' + jsonForm.product_id + '/' + amount + '?bestbeforedate=' + $('#best_before_date').val(), + Grocy.Api.Get('stock/add-product/' + jsonForm.product_id + '/' + amount + '?bestbeforedate=' + $('#best_before_date').val(), function(result) { var addBarcode = GetUriParam('addbarcodetoselection'); @@ -25,7 +25,7 @@ productDetails.product.barcode += ',' + addBarcode; } - Grocy.PostJson('/api/edit-object/products/' + productDetails.product.id, productDetails.product, + Grocy.Api.Post('edit-object/products/' + productDetails.product.id, productDetails.product, function (result) { }, function(xhr) { @@ -38,7 +38,7 @@ if (addBarcode !== undefined) { - window.location.href = '/purchase'; + window.location.href = U('/purchase'); } else { @@ -72,7 +72,7 @@ $('#product_id').on('change', function(e) { Grocy.Components.ProductCard.Refresh(productId); - Grocy.FetchJson('/api/stock/get-product-details/' + productId, + Grocy.Api.Get('stock/get-product-details/' + productId, function(productDetails) { $('#amount_qu_unit').text(productDetails.quantity_unit_purchase.name); @@ -133,7 +133,7 @@ $('#product_id_text_input').on('change', function(e) className: 'btn-success add-new-product-dialog-button', callback: function() { - window.location.href = '/product/new?prefillname=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname); + window.location.href = U('/product/new?prefillname=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname)); } }, addbarcode: { @@ -141,7 +141,7 @@ $('#product_id_text_input').on('change', function(e) className: 'btn-info add-new-barcode-dialog-button', callback: function() { - window.location.href = '/purchase?addbarcodetoselection=' + encodeURIComponent(input); + window.location.href = U('/purchase?addbarcodetoselection=' + encodeURIComponent(input)); } }, addnewproductwithbarcode: { @@ -149,7 +149,7 @@ $('#product_id_text_input').on('change', function(e) className: 'btn-warning add-new-product-with-barcode-dialog-button', callback: function() { - window.location.href = '/product/new?prefillbarcode=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname); + window.location.href = U('/product/new?prefillbarcode=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname)); } } } diff --git a/public/viewjs/quantityunitform.js b/public/viewjs/quantityunitform.js index c81df2fa..677c82a9 100644 --- a/public/viewjs/quantityunitform.js +++ b/public/viewjs/quantityunitform.js @@ -4,10 +4,10 @@ if (Grocy.EditMode === 'create') { - Grocy.PostJson('/api/add-object/quantity_units', $('#quantityunit-form').serializeJSON(), + Grocy.Api.Post('add-object/quantity_units', $('#quantityunit-form').serializeJSON(), function(result) { - window.location.href = '/quantityunits'; + window.location.href = U('/quantityunits'); }, function(xhr) { @@ -17,10 +17,10 @@ } else { - Grocy.PostJson('/api/edit-object/quantity_units/' + Grocy.EditObjectId, $('#quantityunit-form').serializeJSON(), + Grocy.Api.Post('edit-object/quantity_units/' + Grocy.EditObjectId, $('#quantityunit-form').serializeJSON(), function(result) { - window.location.href = '/quantityunits'; + window.location.href = U('/quantityunits'); }, function(xhr) { diff --git a/public/viewjs/quantityunits.js b/public/viewjs/quantityunits.js index 6463bd8d..3bef837e 100644 --- a/public/viewjs/quantityunits.js +++ b/public/viewjs/quantityunits.js @@ -1,7 +1,7 @@ $(document).on('click', '.quantityunit-delete-button', function(e) { bootbox.confirm({ - message: 'Delete quantity unit ' + $(e.target).attr('data-quantityunit-name') + '?', + message: 'Delete quantity unit ' + $(e.currentTarget).attr('data-quantityunit-name') + '?', buttons: { confirm: { label: 'Yes', @@ -16,10 +16,10 @@ { if (result === true) { - Grocy.FetchJson('/api/delete-object/quantity_units/' + $(e.target).attr('data-quantityunit-id'), + Grocy.Api.Get('delete-object/quantity_units/' + $(e.currentTarget).attr('data-quantityunit-id'), function(result) { - window.location.href = '/quantityunits'; + window.location.href = U('/quantityunits'); }, function(xhr) { diff --git a/public/viewjs/shoppinglist.js b/public/viewjs/shoppinglist.js index 7ecd5549..df92e35f 100644 --- a/public/viewjs/shoppinglist.js +++ b/public/viewjs/shoppinglist.js @@ -1,9 +1,9 @@ $(document).on('click', '.shoppinglist-delete-button', function(e) { - Grocy.FetchJson('/api/delete-object/shopping_list/' + $(e.target).attr('data-shoppinglist-id'), + Grocy.Api.Get('delete-object/shopping_list/' + $(e.currentTarget).attr('data-shoppinglist-id'), function(result) { - window.location.href = '/shoppinglist'; + window.location.href = U('/shoppinglist'); }, function(xhr) { @@ -14,10 +14,10 @@ $(document).on('click', '#add-products-below-min-stock-amount', function(e) { - Grocy.FetchJson('/api/stock/add-missing-products-to-shoppinglist', + Grocy.Api.Get('stock/add-missing-products-to-shoppinglist', function(result) { - window.location.href = '/shoppinglist'; + window.location.href = U('/shoppinglist'); }, function(xhr) { diff --git a/public/viewjs/shoppinglistform.js b/public/viewjs/shoppinglistform.js index 2ba8bb7f..e3bb0b50 100644 --- a/public/viewjs/shoppinglistform.js +++ b/public/viewjs/shoppinglistform.js @@ -4,10 +4,10 @@ if (Grocy.EditMode === 'create') { - Grocy.PostJson('/api/add-object/shopping_list', $('#shoppinglist-form').serializeJSON(), + Grocy.Api.Post('add-object/shopping_list', $('#shoppinglist-form').serializeJSON(), function(result) { - window.location.href = '/shoppinglist'; + window.location.href = U('/shoppinglist'); }, function(xhr) { @@ -17,10 +17,10 @@ } else { - Grocy.PostJson('/api/edit-object/shopping_list/' + Grocy.EditObjectId, $('#shoppinglist-form').serializeJSON(), + Grocy.Api.Post('edit-object/shopping_list/' + Grocy.EditObjectId, $('#shoppinglist-form').serializeJSON(), function(result) { - window.location.href = '/shoppinglist'; + window.location.href = U('/shoppinglist'); }, function(xhr) { @@ -38,7 +38,7 @@ $('#product_id').on('change', function(e) { Grocy.Components.ProductCard.Refresh(productId); - Grocy.FetchJson('/api/stock/get-product-details/' + productId, + Grocy.Api.Get('stock/get-product-details/' + productId, function (productDetails) { $('#amount_qu_unit').text(productDetails.quantity_unit_purchase.name); @@ -49,7 +49,7 @@ $('#product_id').on('change', function(e) } else { - Grocy.FetchJson('/api/get-objects/shopping_list', + Grocy.Api.Get('get-objects/shopping_list', function (currentShoppingListItems) { if (currentShoppingListItems.filter(function (e) { return e.product_id === productId; }).length > 0) diff --git a/views/components/batterycard.blade.php b/views/components/batterycard.blade.php index 9f7e2226..89ac8b4d 100644 --- a/views/components/batterycard.blade.php +++ b/views/components/batterycard.blade.php @@ -1,5 +1,5 @@ @push('componentScripts') - + @endpush
diff --git a/views/components/datepicker.blade.php b/views/components/datepicker.blade.php index 57e90bde..f755b245 100644 --- a/views/components/datepicker.blade.php +++ b/views/components/datepicker.blade.php @@ -1,5 +1,5 @@ @push('componentScripts') - + @endpush
diff --git a/views/components/datetimepicker.blade.php b/views/components/datetimepicker.blade.php index d64cdcdd..b44198dc 100644 --- a/views/components/datetimepicker.blade.php +++ b/views/components/datetimepicker.blade.php @@ -1,5 +1,5 @@ @push('componentScripts') - + @endpush
diff --git a/views/components/habitcard.blade.php b/views/components/habitcard.blade.php index c8543e09..60289062 100644 --- a/views/components/habitcard.blade.php +++ b/views/components/habitcard.blade.php @@ -1,5 +1,5 @@ @push('componentScripts') - + @endpush
diff --git a/views/components/productcard.blade.php b/views/components/productcard.blade.php index 27c17b05..9a593563 100644 --- a/views/components/productcard.blade.php +++ b/views/components/productcard.blade.php @@ -1,5 +1,5 @@ @push('componentScripts') - + @endpush
diff --git a/views/layout/default.blade.php b/views/layout/default.blade.php index 5e1e8430..5aa710ef 100644 --- a/views/layout/default.blade.php +++ b/views/layout/default.blade.php @@ -13,21 +13,22 @@ @yield('title') | grocy - - - - - - - - - - - + + + + + + + + + + + @@ -42,13 +43,13 @@ - grocy + grocy
@@ -57,60 +58,60 @@ @@ -140,54 +141,54 @@ @@ -213,29 +214,29 @@
- - - - - - @if(!empty($L('bootstrap_datepicker_locale')))@endif - - @if(!empty($L('moment_locale')))@endif - - - - - - - - - - - + + + + + + @if(!empty($L('bootstrap_datepicker_locale')))@endif + + @if(!empty($L('moment_locale')))@endif + + + + + + + + + + + - - - + + + @stack('componentScripts') @if(file_exists(__DIR__ . '/../../data/add_before_end_body.html'))