From 1e2ac7dac9e4e16db8dcc845b6865390e7b0ccdd Mon Sep 17 00:00:00 2001 From: Robert Resch Date: Wed, 16 Dec 2020 16:11:57 +0000 Subject: [PATCH] add reset button --- controllers/UsersApiController.php | 13 +++++ localization/strings.pot | 6 +++ public/js/grocy.js | 77 +++++++++++++++++++++++++++--- routes.php | 1 + services/UsersService.php | 5 ++ 5 files changed, 96 insertions(+), 6 deletions(-) diff --git a/controllers/UsersApiController.php b/controllers/UsersApiController.php index e09dba35..d8341c31 100644 --- a/controllers/UsersApiController.php +++ b/controllers/UsersApiController.php @@ -219,6 +219,19 @@ class UsersApiController extends BaseApiController } } + public function DeleteUserSetting(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args) + { + try + { + $value = $this->getUsersService()->DeleteUserSetting(GROCY_USER_ID, $args['settingKey']); + return $this->EmptyApiResponse($response); + } + catch (\Exception $ex) + { + return $this->GenericErrorResponse($response, $ex->getMessage()); + } + } + public function __construct(\DI\Container $container) { parent::__construct($container); diff --git a/localization/strings.pot b/localization/strings.pot index 0cbae663..c313bac4 100644 --- a/localization/strings.pot +++ b/localization/strings.pot @@ -2017,3 +2017,9 @@ msgstr "" msgid "Ingredient group" msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Are you sure, you want reset the table?" +msgstr "" diff --git a/public/js/grocy.js b/public/js/grocy.js index 2c12bdec..a4d001f9 100644 --- a/public/js/grocy.js +++ b/public/js/grocy.js @@ -433,7 +433,7 @@ Grocy.FrontendHelpers.ShowGenericError = function(message, exception) console.error(exception); } -Grocy.FrontendHelpers.SaveUserSettings = function(settingsKey, value) +Grocy.FrontendHelpers.SaveUserSetting = function(settingsKey, value) { Grocy.UserSettings[settingsKey] = value; @@ -454,6 +454,25 @@ Grocy.FrontendHelpers.SaveUserSettings = function(settingsKey, value) ); } +Grocy.FrontendHelpers.DeleteUserSetting = function(settingsKey) +{ + delete Grocy.UserSettings[settingsKey]; + + Grocy.Api.Delete('user/settings/' + settingsKey, {}, + function(result) + { + // Nothing to do... + }, + function(xhr) + { + if (!xhr.statusText.isEmpty()) + { + Grocy.FrontendHelpers.ShowGenericError('Error while deleting, please retry', xhr.response) + } + } + ); +} + $(document).on("keyup paste change", "input, textarea", function() { $(this).closest("form").addClass("is-dirty"); @@ -489,7 +508,7 @@ $(document).on("change", ".user-setting-control", function() var value = element.val(); } - Grocy.FrontendHelpers.SaveUserSettings(settingKey, value); + Grocy.FrontendHelpers.SaveUserSetting(settingKey, value); }); // Show file name Bootstrap custom file input @@ -718,8 +737,14 @@ $.extend(true, $.fn.dataTable.defaults, { 'stateSaveCallback': function(settings, data) { var settingKey = 'datatables_state_' + settings.sTableId; - var stateData = JSON.stringify(data); - Grocy.FrontendHelpers.SaveUserSettings(settingKey, stateData); + if ($.isEmptyObject(data)) + { + Grocy.FrontendHelpers.DeleteUserSetting(settingKey); + } else + { + var stateData = JSON.stringify(data); + Grocy.FrontendHelpers.SaveUserSetting(settingKey, stateData); + } }, 'stateLoadCallback': function(settings, data) { @@ -960,8 +985,48 @@ $(".change-table-columns-visibility-button").on("click", function(e) size: 'small', backdrop: true, closeButton: false, + onEscape: true, buttons: { - cancel: { + reset: { + label: __t('Reset'), + className: 'btn-danger responsive-button', + callback: function() + { + bootbox.confirm({ + swapButtonOrder: true, + message: __t("Are you sure, you want reset the table?"), + buttons: { + confirm: { + label: 'Yes', + className: 'btn-danger' + }, + cancel: { + label: 'No', + className: 'btn-primary' + } + }, + callback: function(result) + { + if (result) + { + var dataTable = $(dataTableSelector).DataTable(); + var tableId = dataTable.settings()[0].sTableId; + + //Delete rowgroup settings + Grocy.FrontendHelpers.DeleteUserSetting('datatables_rowGroup_' + tableId); + + //Delete state settings + dataTable.state.clear(); + + //Reload page as datatable is not reseting itself + location.reload(); + } + bootbox.hideAll(); + } + }); + } + }, + ok: { label: __t('OK'), className: 'btn-primary responsive-button', callback: function() @@ -1019,7 +1084,7 @@ $(document).on("click", ".change-table-columns-rowgroup-toggle", function() } var settingKey = 'datatables_rowGroup_' + dataTable.settings()[0].sTableId; - Grocy.FrontendHelpers.SaveUserSettings(settingKey, JSON.stringify(rowGroup)); + Grocy.FrontendHelpers.SaveUserSetting(settingKey, JSON.stringify(rowGroup)); dataTable.draw(); }); diff --git a/routes.php b/routes.php index e101b730..7d39a5ae 100644 --- a/routes.php +++ b/routes.php @@ -175,6 +175,7 @@ $app->group('/api', function (RouteCollectorProxy $group) { $group->get('/user/settings', '\Grocy\Controllers\UsersApiController:GetUserSettings'); $group->get('/user/settings/{settingKey}', '\Grocy\Controllers\UsersApiController:GetUserSetting'); $group->put('/user/settings/{settingKey}', '\Grocy\Controllers\UsersApiController:SetUserSetting'); + $group->delete('/user/settings/{settingKey}', '\Grocy\Controllers\UsersApiController:DeleteUserSetting'); // Stock if (GROCY_FEATURE_FLAG_STOCK) diff --git a/services/UsersService.php b/services/UsersService.php index 2dd4c4f6..3c5e822d 100644 --- a/services/UsersService.php +++ b/services/UsersService.php @@ -114,6 +114,11 @@ class UsersService extends BaseService } } + public function DeleteUserSetting($userId, $settingKey) + { + $this->getDatabase()->user_settings()->where('user_id = :1 AND key = :2', $userId, $settingKey)->delete(); + } + private function UserExists($userId) { $userRow = $this->getDatabase()->users()->where('id = :1', $userId)->fetch();