Skip to content

Commit 913e7d4

Browse files
Merge pull request #19068 from MauricioFauth/console-settings
Refactor Console settings handling
2 parents d0be67b + 774ec82 commit 913e7d4

12 files changed

Lines changed: 563 additions & 174 deletions

File tree

app/services_controllers.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@
9393
'class' => Console\Bookmark\RefreshController::class,
9494
'arguments' => ['$response' => '@response', '$template' => '@template', '$console' => '@console'],
9595
],
96+
Console\UpdateConfigController::class => [
97+
'class' => Console\UpdateConfigController::class,
98+
'arguments' => ['$response' => '@response', '$template' => '@template', '$config' => '@config'],
99+
],
96100
Database\CentralColumns\PopulateColumnsController::class => [
97101
'class' => Database\CentralColumns\PopulateColumnsController::class,
98102
'arguments' => [

psalm-baseline.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12449,6 +12449,12 @@
1244912449
<code><![CDATA[DatabaseInterface::getInstance()]]></code>
1245012450
</DeprecatedMethod>
1245112451
</file>
12452+
<file src="tests/unit/Controllers/Console/UpdateConfigControllerTest.php">
12453+
<PossiblyUnusedMethod>
12454+
<code><![CDATA[invalidParamsProvider]]></code>
12455+
<code><![CDATA[validParamsProvider]]></code>
12456+
</PossiblyUnusedMethod>
12457+
</file>
1245212458
<file src="tests/unit/Controllers/Database/EventsControllerTest.php">
1245312459
<DeprecatedMethod>
1245412460
<code><![CDATA[Config::getInstance()]]></code>
@@ -14482,6 +14488,7 @@
1448214488
<code><![CDATA[Config::getInstance()]]></code>
1448314489
</DeprecatedMethod>
1448414490
<MixedAssignment>
14491+
<code><![CDATA[$json['error']]]></code>
1448514492
<code><![CDATA[$value]]></code>
1448614493
</MixedAssignment>
1448714494
<PossiblyUnusedMethod>

resources/js/src/modules/ajax.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -939,7 +939,7 @@ const AJAX = {
939939
console.log('AJAX error: status=' + request.status + ', text=' + request.statusText);
940940
}
941941

942-
if (settings.url.includes('/git-revision')) {
942+
if (settings.url.includes('/git-revision') || settings.url.includes('/console/update-config')) {
943943
return;
944944
}
945945

resources/js/src/modules/console.ts

Lines changed: 95 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import { AJAX } from './ajax.ts';
44
import { Functions } from './functions.ts';
55
import { CommonParams } from './common.ts';
66
import { Navigation } from './navigation.ts';
7-
import { Config } from './console/config.ts';
8-
import { getConfigValue } from './functions/config.ts';
7+
import Config from './console/config.ts';
98
import { escapeHtml } from './functions/escape.ts';
109

10+
let config: Config;
11+
1112
/**
1213
* Console object
1314
*/
@@ -58,18 +59,13 @@ var Console = {
5859
* Used for console initialize, reinit is ok, just some variable assignment
5960
*/
6061
initialize: function (): void {
61-
if ($('#pma_console').length === 0) {
62+
const consoleElement = document.getElementById('pma_console');
63+
if (consoleElement === null) {
6264
return;
6365
}
6466

65-
getConfigValue('Console', false, (data) => {
66-
Config.init(data);
67-
Console.setupAfterInit();
68-
}, () => {
69-
Config.init({});// Avoid null pointers in setupAfterInit()
70-
// Fetching data failed, still perform the console init
71-
Console.setupAfterInit();
72-
});
67+
config = Config.createFromDataset(consoleElement.dataset);
68+
Console.setupAfterInit();
7369
},
7470

7571
/**
@@ -101,28 +97,6 @@ var Console = {
10197

10298
// Event binds shouldn't run again
10399
if (Console.isInitialized === false) {
104-
// Load config first
105-
if (Config.AlwaysExpand) {
106-
(document.getElementById('consoleOptionsAlwaysExpandCheckbox') as HTMLInputElement).checked = true;
107-
}
108-
109-
if (Config.StartHistory) {
110-
(document.getElementById('consoleOptionsStartHistoryCheckbox') as HTMLInputElement).checked = true;
111-
}
112-
113-
if (Config.CurrentQuery) {
114-
(document.getElementById('consoleOptionsCurrentQueryCheckbox') as HTMLInputElement).checked = true;
115-
}
116-
117-
if (Config.EnterExecutes) {
118-
(document.getElementById('consoleOptionsEnterExecutesCheckbox') as HTMLInputElement).checked = true;
119-
}
120-
121-
if (Config.DarkTheme) {
122-
(document.getElementById('consoleOptionsDarkThemeCheckbox') as HTMLInputElement).checked = true;
123-
$('#pma_console').find('>.content').addClass('console_dark_theme');
124-
}
125-
126100
ConsoleResizer.initialize();
127101
ConsoleInput.initialize();
128102
ConsoleMessages.initialize();
@@ -174,21 +148,65 @@ var Console = {
174148
Console.hideCard($(this).closest('.card'));
175149
});
176150

177-
$('#pma_console_options').find('input[type=checkbox]').on('change', function () {
178-
Config.update();
151+
const consoleOptionsAlwaysExpandCheckbox = document.getElementById('consoleOptionsAlwaysExpandCheckbox') as HTMLInputElement;
152+
consoleOptionsAlwaysExpandCheckbox?.addEventListener('change', function (): void {
153+
config.setAlwaysExpand(consoleOptionsAlwaysExpandCheckbox.checked);
154+
});
155+
156+
const consoleOptionsStartHistoryCheckbox = document.getElementById('consoleOptionsStartHistoryCheckbox') as HTMLInputElement;
157+
consoleOptionsStartHistoryCheckbox?.addEventListener('change', function (): void {
158+
config.setStartHistory(consoleOptionsStartHistoryCheckbox.checked);
179159
});
180160

181-
$('#pma_console_options').find('.button.default').on('click', function () {
182-
(document.getElementById('consoleOptionsAlwaysExpandCheckbox') as HTMLInputElement).checked = false;
183-
(document.getElementById('consoleOptionsStartHistoryCheckbox') as HTMLInputElement).checked = false;
184-
(document.getElementById('consoleOptionsCurrentQueryCheckbox') as HTMLInputElement).checked = true;
185-
(document.getElementById('consoleOptionsEnterExecutesCheckbox') as HTMLInputElement).checked = false;
186-
(document.getElementById('consoleOptionsDarkThemeCheckbox') as HTMLInputElement).checked = false;
187-
Config.update();
161+
const consoleOptionsCurrentQueryCheckbox = document.getElementById('consoleOptionsCurrentQueryCheckbox') as HTMLInputElement;
162+
consoleOptionsCurrentQueryCheckbox?.addEventListener('change', function (): void {
163+
config.setCurrentQuery(consoleOptionsCurrentQueryCheckbox.checked);
188164
});
189165

190-
$('#consoleOptionsEnterExecutesCheckbox').on('change', function () {
191-
ConsoleMessages.showInstructions(Config.EnterExecutes);
166+
const consoleOptionsEnterExecutesCheckbox = document.getElementById('consoleOptionsEnterExecutesCheckbox') as HTMLInputElement;
167+
consoleOptionsEnterExecutesCheckbox?.addEventListener('change', function (): void {
168+
const isEnterExecutes = consoleOptionsEnterExecutesCheckbox.checked;
169+
config.setEnterExecutes(isEnterExecutes);
170+
ConsoleMessages.showInstructions(isEnterExecutes);
171+
});
172+
173+
const consoleOptionsDarkThemeCheckbox = document.getElementById('consoleOptionsDarkThemeCheckbox') as HTMLInputElement;
174+
consoleOptionsDarkThemeCheckbox?.addEventListener('change', function (): void {
175+
const isDarkTheme = consoleOptionsDarkThemeCheckbox.checked;
176+
config.setDarkTheme(isDarkTheme);
177+
const consoleContent = document.getElementById('pma_console').querySelector('.content');
178+
consoleContent.classList.toggle('console_dark_theme', isDarkTheme);
179+
});
180+
181+
const restoreConsoleOptionsButton = document.getElementById('pma_console_options').querySelector('.button.default');
182+
restoreConsoleOptionsButton?.addEventListener('click', function (): void {
183+
if (consoleOptionsAlwaysExpandCheckbox.checked) {
184+
consoleOptionsAlwaysExpandCheckbox.checked = false;
185+
config.setAlwaysExpand(false);
186+
}
187+
188+
if (consoleOptionsStartHistoryCheckbox.checked) {
189+
consoleOptionsStartHistoryCheckbox.checked = false;
190+
config.setStartHistory(false);
191+
}
192+
193+
if (! consoleOptionsCurrentQueryCheckbox.checked) {
194+
consoleOptionsCurrentQueryCheckbox.checked = true;
195+
config.setCurrentQuery(true);
196+
}
197+
198+
if (consoleOptionsEnterExecutesCheckbox.checked) {
199+
consoleOptionsEnterExecutesCheckbox.checked = false;
200+
config.setEnterExecutes(false);
201+
ConsoleMessages.showInstructions(false);
202+
}
203+
204+
if (consoleOptionsDarkThemeCheckbox.checked) {
205+
consoleOptionsDarkThemeCheckbox.checked = false;
206+
config.setDarkTheme(false);
207+
const consoleContent = document.getElementById('pma_console').querySelector('.content');
208+
consoleContent.classList.remove('console_dark_theme');
209+
}
192210
});
193211

194212
$(document).on('ajaxComplete', function (event, xhr, ajaxOptions) {
@@ -215,7 +233,7 @@ var Console = {
215233
}
216234

217235
// Change console mode from cookie
218-
switch (Config.Mode) {
236+
switch (config.mode) {
219237
case 'collapse':
220238
Console.collapse();
221239
break;
@@ -227,7 +245,7 @@ var Console = {
227245
Console.scrollBottom();
228246
break;
229247
default:
230-
Config.set('Mode', 'info');
248+
config.setMode('info');
231249
Console.info();
232250
}
233251
},
@@ -282,16 +300,16 @@ var Console = {
282300
if (data.reloadQuerywindow.sql_query.length > 0) {
283301
ConsoleMessages.appendQuery(data.reloadQuerywindow, 'successed')
284302
// @ts-ignore
285-
.$message.addClass(Config.CurrentQuery ? '' : 'hide');
303+
.$message.addClass(config.currentQuery ? '' : 'hide');
286304
}
287305
}
288306
},
289307
/**
290308
* Change console to collapse mode
291309
*/
292310
collapse: function (): void {
293-
Config.set('Mode', 'collapse');
294-
var pmaConsoleHeight = Math.max(92, Config.Height);
311+
config.setMode('collapse');
312+
var pmaConsoleHeight = Math.max(92, config.height);
295313

296314
Console.$consoleToolbar.addClass('collapsed');
297315
Console.$consoleAllContents.height(pmaConsoleHeight);
@@ -305,11 +323,11 @@ var Console = {
305323
* @param {boolean} inputFocus If true, focus the input line after show()
306324
*/
307325
show: function (inputFocus = undefined): void {
308-
Config.set('Mode', 'show');
326+
config.setMode('show');
309327

310-
var pmaConsoleHeight = Math.max(92, Config.Height);
328+
var pmaConsoleHeight = Math.max(92, config.height);
311329
// eslint-disable-next-line compat/compat
312-
pmaConsoleHeight = Math.min(Config.Height, (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) - 25);
330+
pmaConsoleHeight = Math.min(config.height, (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) - 25);
313331
Console.$consoleContent.css({ display: 'block' });
314332
if (Console.$consoleToolbar.hasClass('collapsed')) {
315333
Console.$consoleToolbar.removeClass('collapsed');
@@ -335,7 +353,7 @@ var Console = {
335353
* Used for toggle buttons and shortcuts
336354
*/
337355
toggle: function (): void {
338-
if (Config.Mode === 'show') {
356+
if (config.mode === 'show') {
339357
Console.collapse();
340358
} else {
341359
Console.show(true);
@@ -413,7 +431,7 @@ var ConsoleResizer = {
413431
* @param {MouseEvent} event
414432
*/
415433
mouseDown: function (event): void {
416-
if (Config.Mode !== 'show') {
434+
if (config.mode !== 'show') {
417435
return;
418436
}
419437

@@ -456,7 +474,7 @@ var ConsoleResizer = {
456474
* Mouseup event handler for bind to resizer
457475
*/
458476
mouseUp: function (): void {
459-
Config.set('Height', Math.round(ConsoleResizer.resultHeight));
477+
config.setHeight(Math.round(ConsoleResizer.resultHeight));
460478
Console.show();
461479
$(document).off('mousemove');
462480
$(document).off('mouseup');
@@ -638,7 +656,7 @@ var ConsoleInput = {
638656
*/
639657
keyDown: function (event): void {
640658
// Execute command
641-
if (Config.EnterExecutes) {
659+
if (config.enterExecutes) {
642660
// Enter, but not in combination with Shift (which writes a new line).
643661
if (! event.shiftKey && event.keyCode === 13) {
644662
ConsoleInput.execute();
@@ -810,7 +828,7 @@ var ConsoleMessages = {
810828
var now = new Date();
811829
var $newMessage =
812830
$('<div class="message ' +
813-
(Config.AlwaysExpand ? 'expanded' : 'collapsed') +
831+
(config.alwaysExpand ? 'expanded' : 'collapsed') +
814832
'" msgid="' + msgId + '"><div class="action_content"></div></div>');
815833
switch (msgType) {
816834
case 'query':
@@ -1053,11 +1071,11 @@ var ConsoleMessages = {
10531071
*/
10541072
initialize: function (): void {
10551073
ConsoleMessages.messageEventBinds($('#pma_console').find('.message:not(.binded)'));
1056-
if (Config.StartHistory) {
1074+
if (config.startHistory) {
10571075
ConsoleMessages.showHistory();
10581076
}
10591077

1060-
ConsoleMessages.showInstructions(Config.EnterExecutes);
1078+
ConsoleMessages.showInstructions(config.enterExecutes);
10611079
}
10621080
};
10631081

@@ -1163,37 +1181,37 @@ var ConsoleDebug = {
11631181
}
11641182
});
11651183

1166-
if (Config.GroupQueries) {
1184+
if (config.groupQueries) {
11671185
$('#debug_console').addClass('grouped');
11681186
} else {
11691187
$('#debug_console').addClass('ungrouped');
1170-
if (Config.OrderBy === 'count') {
1188+
if (config.orderBy === 'count') {
11711189
$('#debug_console').find('.button.order_by.sort_exec').addClass('active');
11721190
}
11731191
}
11741192

1175-
var orderBy = Config.OrderBy;
1176-
var order = Config.Order;
1193+
var orderBy = config.orderBy;
1194+
var order = config.order;
11771195
$('#debug_console').find('.button.order_by.sort_' + orderBy).addClass('active');
11781196
$('#debug_console').find('.button.order.order_' + order).addClass('active');
11791197

11801198
// Initialize actions in toolbar
11811199
$('#debug_console').find('.button.group_queries').on('click', function () {
11821200
$('#debug_console').addClass('grouped');
11831201
$('#debug_console').removeClass('ungrouped');
1184-
Config.set('GroupQueries', true);
1202+
config.setGroupQueries(true);
11851203
ConsoleDebug.refresh();
1186-
if (Config.OrderBy === 'count') {
1204+
if (config.orderBy === 'count') {
11871205
$('#debug_console').find('.button.order_by.sort_exec').removeClass('active');
11881206
}
11891207
});
11901208

11911209
$('#debug_console').find('.button.ungroup_queries').on('click', function () {
11921210
$('#debug_console').addClass('ungrouped');
11931211
$('#debug_console').removeClass('grouped');
1194-
Config.set('GroupQueries', false);
1212+
config.setGroupQueries(false);
11951213
ConsoleDebug.refresh();
1196-
if (Config.OrderBy === 'count') {
1214+
if (config.orderBy === 'count') {
11971215
$('#debug_console').find('.button.order_by.sort_exec').addClass('active');
11981216
}
11991217
});
@@ -1203,11 +1221,11 @@ var ConsoleDebug = {
12031221
$('#debug_console').find('.button.order_by').removeClass('active');
12041222
$this.addClass('active');
12051223
if ($this.hasClass('sort_time')) {
1206-
Config.set('OrderBy', 'time');
1224+
config.setOrderBy('time');
12071225
} else if ($this.hasClass('sort_exec')) {
1208-
Config.set('OrderBy', 'exec');
1226+
config.setOrderBy('exec');
12091227
} else if ($this.hasClass('sort_count')) {
1210-
Config.set('OrderBy', 'count');
1228+
config.setOrderBy('count');
12111229
}
12121230

12131231
ConsoleDebug.refresh();
@@ -1218,9 +1236,9 @@ var ConsoleDebug = {
12181236
$('#debug_console').find('.button.order').removeClass('active');
12191237
$this.addClass('active');
12201238
if ($this.hasClass('order_asc')) {
1221-
Config.set('Order', 'asc');
1239+
config.setOrder('asc');
12221240
} else if ($this.hasClass('order_desc')) {
1223-
Config.set('Order', 'desc');
1241+
config.setOrder('desc');
12241242
}
12251243

12261244
ConsoleDebug.refresh();
@@ -1507,7 +1525,7 @@ var ConsoleDebug = {
15071525

15081526
// For sorting queries
15091527
function sortByTime (a, b) {
1510-
var order = Config.Order === 'asc' ? 1 : -1;
1528+
var order = config.order === 'asc' ? 1 : -1;
15111529
if (Array.isArray(a) && Array.isArray(b)) {
15121530
// It is grouped
15131531
var timeA = 0;
@@ -1528,15 +1546,15 @@ var ConsoleDebug = {
15281546
}
15291547

15301548
function sortByCount (a, b) {
1531-
var order = Config.Order === 'asc' ? 1 : -1;
1549+
var order = config.order === 'asc' ? 1 : -1;
15321550

15331551
return (a.length - b.length) * order;
15341552
}
15351553

1536-
var orderBy = Config.OrderBy;
1537-
var order = Config.Order;
1554+
var orderBy = config.orderBy;
1555+
var order = config.order;
15381556

1539-
if (Config.GroupQueries) {
1557+
if (config.groupQueries) {
15401558
// Sort queries
15411559
if (orderBy === 'time') {
15421560
uniqueQueries.sort(sortByTime);

0 commit comments

Comments
 (0)