Skip to content

Commit c9ba07b

Browse files
committed
Reduce settings change time, dont send template
1 parent c0ad4fb commit c9ba07b

File tree

5 files changed

+122
-88
lines changed

5 files changed

+122
-88
lines changed

Diff for: public/assets/app.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/Action/Page/SettingsDashboardAction.php

+5-65
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use App\Controller\Core\Application;
77
use App\Controller\Core\Controllers;
88
use App\DTO\Settings\Dashboard\Widget\SettingsWidgetVisibilityDTO;
9-
use App\DTO\Settings\Lock\Subsettings\SettingsModuleLockDTO;
109
use Exception;
1110
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1211
use Symfony\Component\HttpFoundation\Request;
@@ -27,22 +26,17 @@ class SettingsDashboardAction extends AbstractController {
2726
*/
2827
private Controllers $controllers;
2928

30-
/**
31-
* @var SettingsViewAction $settingsViewAction
32-
*/
33-
private SettingsViewAction $settingsViewAction;
34-
35-
public function __construct(Controllers $controllers, Application $app, SettingsViewAction $settingsViewAction) {
36-
$this->app = $app;
37-
$this->controllers = $controllers;
38-
$this->settingsViewAction = $settingsViewAction;
29+
public function __construct(Controllers $controllers, Application $app) {
30+
$this->app = $app;
31+
$this->controllers = $controllers;
3932
}
4033

4134
/**
4235
* Handles updating settings of dashboard - widgets visibility
4336
* In this case it's not single row update but entire setting string
4437
* So the data passed in is not single row but all rows in table
4538
* It's important to understand that import is done for whole setting name record
39+
*
4640
* @Route("/api/settings-dashboard/update-widgets-visibility", name="settings_dashboard_update_widgets_visibility", methods="POST")
4741
* @param Request $request
4842
* @return Response
@@ -85,62 +79,8 @@ public function updateWidgetsVisibility(Request $request): Response
8579
}
8680

8781
$this->app->settings->settingsSaver->saveSettingsForDashboardWidgetsVisibility($widgetsVisibilitiesSettingsDtos);
88-
$templateContent = $this->settingsViewAction->renderSettingsTemplate()->getContent();
89-
90-
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_OK, "", $templateContent);
91-
}
92-
93-
/**
94-
* Handles updating settings of module - lock
95-
* In this case it's not single row update but entire setting string
96-
* So the data passed in is not single row but all rows in table
97-
* It's important to understand that import is done for whole setting name record
98-
*
99-
* @Route("/api/settings-module/update-lock", name="settings_module_update_module_lock", methods="POST")
100-
* @param Request $request
101-
* @return Response
102-
* @throws Exception
103-
*/
104-
public function updateModuleLock(Request $request): Response
105-
{
106-
107-
if (!$request->request->has(self::KEY_ALL_ROWS_DATA)) {
108-
$message = $this->app->translator->translate('responses.general.missingRequiredParameter') . self::KEY_ALL_ROWS_DATA;
109-
$this->app->logger->warning($message);
110-
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_BAD_REQUEST, $message);
111-
}
112-
113-
$allRowsData = $request->request->get(self::KEY_ALL_ROWS_DATA);
114-
$settingsModuleLockDtos = [];
115-
116-
foreach($allRowsData as $rowData){
117-
118-
if( !array_key_exists(SettingsModuleLockDTO::KEY_IS_LOCKED, $rowData)){
119-
$message = $this->app->translator->translate('responses.general.arrayInResponseIsMissingParameterNamed') . SettingsModuleLockDTO::KEY_IS_LOCKED;
120-
$this->app->logger->warning($message);
121-
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_BAD_REQUEST, $message);
122-
}
123-
124-
if( !array_key_exists(SettingsModuleLockDTO::KEY_NAME, $rowData)){
125-
$message = $this->app->translator->translate('responses.general.arrayInResponseIsMissingParameterNamed') . SettingsModuleLockDTO::KEY_NAME;
126-
$this->app->logger->warning($message);
127-
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_BAD_REQUEST, $message);
128-
}
129-
130-
$isLocked = filter_var($rowData[SettingsModuleLockDTO::KEY_IS_LOCKED], FILTER_VALIDATE_BOOLEAN);;
131-
$name = trim($rowData[SettingsModuleLockDTO::KEY_NAME]);
132-
133-
$settingsModuleLockDto = new SettingsModuleLockDTO();
134-
$settingsModuleLockDto->setName($name);
135-
$settingsModuleLockDto->setLocked($isLocked);
136-
137-
$settingsModuleLockDtos[] = $settingsModuleLockDto;
138-
}
139-
140-
$this->app->settings->settingsSaver->saveSettingsForModulesLock($settingsModuleLockDtos);
141-
$templateContent = $this->settingsViewAction->renderSettingsTemplate()->getContent();
14282

143-
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_OK, "", $templateContent);
83+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_OK, "", "");
14484
}
14585

14686
}

Diff for: src/Action/Page/SettingsFinancesAction.php

+29-21
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\HttpFoundation\Request;
1616
use Symfony\Component\HttpFoundation\Response;
1717
use Symfony\Component\Routing\Annotation\Route;
18+
use TypeError;
1819

1920
class SettingsFinancesAction extends AbstractController {
2021

@@ -44,6 +45,7 @@ public function __construct(Controllers $controllers, Application $app, Settings
4445
/**
4546
* Handles updating settings of dashboard - widgets visibility
4647
* Contains special logic for handling the "default" currency change
48+
*
4749
* @Route("/api/settings-finances/update-currencies", name="settings_finances_update_currencies", methods="POST")
4850
* @param Request $request
4951
* @return Response
@@ -149,40 +151,46 @@ public function updateFinancesCurrenciesSetting(Request $request): Response
149151
* @Route("/api/settings-finances/remove-currency/{name}", name="settings_finances_remove_currency", methods="POST")
150152
* @param Request $request
151153
* @param string $name
152-
* @return string
154+
* @return JsonResponse
153155
* @throws Exception
154156
*/
155-
public function removeFinancesCurrencySetting(Request $request, string $name){
157+
public function removeFinancesCurrencySetting(Request $request, string $name): JsonResponse{
156158

157-
$currenciesSettingsDtos = $this->app->settings->settingsLoader->getCurrenciesDtosForSettingsFinances();
158-
$currencyExisted = false;
159-
$name = trim($name);
159+
try{
160+
$currenciesSettingsDtos = $this->app->settings->settingsLoader->getCurrenciesDtosForSettingsFinances();
161+
$currencyExisted = false;
162+
$name = trim($name);
160163

161-
foreach( $currenciesSettingsDtos as $index => $currencySettingDto ){
164+
foreach( $currenciesSettingsDtos as $index => $currencySettingDto ){
162165

163-
if( $currencySettingDto->getName() === $name ){
166+
if( $currencySettingDto->getName() === $name ){
164167

165-
if( $currencySettingDto->isDefault() ){
166-
$message = $this->app->translator->translate("settings.finances.type.messages.defaultCurrencyCanNotBeRemove");
167-
return new JsonResponse(["message" => $message], 500); //todo: refactor later with crud logic
168+
if( $currencySettingDto->isDefault() ){
169+
$message = $this->app->translator->translate("settings.finances.type.messages.defaultCurrencyCanNotBeRemove");
170+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_BAD_REQUEST, $message);
171+
}
172+
173+
unset($currenciesSettingsDtos[$index]);
174+
$currencyExisted = true;
175+
break;
168176
}
169177

170-
unset($currenciesSettingsDtos[$index]);
171-
$currencyExisted = true;
172-
break;
173178
}
174179

175-
}
180+
if( !$currencyExisted ){
181+
$message = $this->app->translator->translate("settings.finances.type.messages.couldNotFindCurrencyForGivenName");
182+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_BAD_REQUEST, $message);
183+
}
176184

177-
if( !$currencyExisted ){
178-
$message = $this->app->translator->translate("settings.finances.type.messages.couldNotFindCurrencyForGivenName");
179-
return new JsonResponse(["message" => $message], 500); //todo: refactor later with crud logic
180-
}
185+
$this->app->settings->settingsSaver->saveFinancesSettingsForCurrenciesSettings($currenciesSettingsDtos);
186+
}catch(Exception | TypeError $e){
187+
$this->app->logExceptionWasThrown($e);
181188

182-
$this->app->settings->settingsSaver->saveFinancesSettingsForCurrenciesSettings($currenciesSettingsDtos);
189+
$message = $this->app->translator->translate('messages.general.internalServerError');
190+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_INTERNAL_SERVER_ERROR, $message);
191+
}
183192

184-
$renderedView = $this->settingsViewAction->renderSettingsTemplate(true);
185-
return $renderedView;
193+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_OK);
186194
}
187195

188196
/**

Diff for: src/Action/Page/SettingsModuleAction.php

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
namespace App\Action\Page;
4+
5+
use App\Controller\Core\AjaxResponse;
6+
use App\Controller\Core\Application;
7+
use App\Controller\Core\Controllers;
8+
use App\DTO\Settings\Lock\Subsettings\SettingsModuleLockDTO;
9+
use Exception;
10+
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11+
use Symfony\Component\HttpFoundation\Request;
12+
use Symfony\Component\HttpFoundation\Response;
13+
use Symfony\Component\Routing\Annotation\Route;
14+
15+
class SettingsModuleAction extends AbstractController {
16+
17+
const KEY_ALL_ROWS_DATA = 'all_rows_data';
18+
19+
/**
20+
* @var Application $app
21+
*/
22+
private $app;
23+
24+
/**
25+
* @var Controllers $controllers
26+
*/
27+
private Controllers $controllers;
28+
29+
public function __construct(Controllers $controllers, Application $app) {
30+
$this->app = $app;
31+
$this->controllers = $controllers;
32+
}
33+
34+
/**
35+
* Handles updating settings of module - lock
36+
* In this case it's not single row update but entire setting string
37+
* So the data passed in is not single row but all rows in table
38+
* It's important to understand that import is done for whole setting name record
39+
*
40+
* @Route("/api/settings-module/update-lock", name="settings_module_update_module_lock", methods="POST")
41+
* @param Request $request
42+
* @return Response
43+
* @throws Exception
44+
*/
45+
public function updateModuleLock(Request $request): Response
46+
{
47+
48+
if (!$request->request->has(self::KEY_ALL_ROWS_DATA)) {
49+
$message = $this->app->translator->translate('responses.general.missingRequiredParameter') . self::KEY_ALL_ROWS_DATA;
50+
$this->app->logger->warning($message);
51+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_BAD_REQUEST, $message);
52+
}
53+
54+
$allRowsData = $request->request->get(self::KEY_ALL_ROWS_DATA);
55+
$settingsModuleLockDtos = [];
56+
57+
foreach($allRowsData as $rowData){
58+
59+
if( !array_key_exists(SettingsModuleLockDTO::KEY_IS_LOCKED, $rowData)){
60+
$message = $this->app->translator->translate('responses.general.arrayInResponseIsMissingParameterNamed') . SettingsModuleLockDTO::KEY_IS_LOCKED;
61+
$this->app->logger->warning($message);
62+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_BAD_REQUEST, $message);
63+
}
64+
65+
if( !array_key_exists(SettingsModuleLockDTO::KEY_NAME, $rowData)){
66+
$message = $this->app->translator->translate('responses.general.arrayInResponseIsMissingParameterNamed') . SettingsModuleLockDTO::KEY_NAME;
67+
$this->app->logger->warning($message);
68+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_BAD_REQUEST, $message);
69+
}
70+
71+
$isLocked = filter_var($rowData[SettingsModuleLockDTO::KEY_IS_LOCKED], FILTER_VALIDATE_BOOLEAN);;
72+
$name = trim($rowData[SettingsModuleLockDTO::KEY_NAME]);
73+
74+
$settingsModuleLockDto = new SettingsModuleLockDTO();
75+
$settingsModuleLockDto->setName($name);
76+
$settingsModuleLockDto->setLocked($isLocked);
77+
78+
$settingsModuleLockDtos[] = $settingsModuleLockDto;
79+
}
80+
81+
$this->app->settings->settingsSaver->saveSettingsForModulesLock($settingsModuleLockDtos);
82+
83+
return AjaxResponse::buildJsonResponseForAjaxCall(Response::HTTP_OK, "", "");
84+
}
85+
86+
}

Diff for: src/assets/scripts/core/ui/Actions/RemoveAction.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export default class RemoveAction extends AbstractAction {
5959
let dataProcessorDto = DataProcessorLoader.getRemoveDataProcessorDto(DataProcessorLoader.PROCESSOR_TYPE_ENTITY, paramEntityName, $baseElement);
6060

6161
if( !(dataProcessorDto instanceof DataProcessorDto) ){
62-
dataProcessorDto = DataProcessorLoader.getUpdateDataProcessorDto(DataProcessorLoader.PROCESSOR_TYPE_SPECIAL_ACTION, paramEntityName, $baseElement);
62+
dataProcessorDto = DataProcessorLoader.getRemoveDataProcessorDto(DataProcessorLoader.PROCESSOR_TYPE_SPECIAL_ACTION, paramEntityName, $baseElement);
6363
}
6464

6565
let removalMessage = ( dataProcessorDto.isConfirmMessageSet()

0 commit comments

Comments
 (0)