Skip to content

Commit 44f1257

Browse files
committed
Extract response handling from Triggers::export()
Renames the Triggers::export() method to getExportData(). Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
1 parent 3b4b4f4 commit 44f1257

4 files changed

Lines changed: 40 additions & 42 deletions

File tree

libraries/classes/Controllers/Triggers/IndexController.php

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,19 @@
99
use PhpMyAdmin\DbTableExists;
1010
use PhpMyAdmin\Http\ServerRequest;
1111
use PhpMyAdmin\Identifiers\TriggerName;
12+
use PhpMyAdmin\Message;
1213
use PhpMyAdmin\ResponseRenderer;
1314
use PhpMyAdmin\Template;
1415
use PhpMyAdmin\Triggers\Triggers;
1516
use PhpMyAdmin\Url;
1617
use PhpMyAdmin\Util;
1718

19+
use function __;
20+
use function htmlspecialchars;
1821
use function in_array;
22+
use function sprintf;
1923
use function strlen;
24+
use function trim;
2025

2126
/**
2227
* Triggers management.
@@ -75,9 +80,36 @@ public function __invoke(ServerRequest $request): void
7580
$GLOBALS['errors'] = [];
7681

7782
$this->triggers->handleEditor();
83+
84+
$message = null;
7885
$triggerName = TriggerName::tryFrom($request->getQueryParam('item_name'));
7986
if ($request->hasQueryParam('export_item') && $triggerName !== null) {
80-
$this->triggers->export($GLOBALS['db'], $GLOBALS['table'], $triggerName);
87+
$exportData = $this->triggers->getExportData($GLOBALS['db'], $GLOBALS['table'], $triggerName);
88+
if ($exportData !== null && $this->response->isAjax()) {
89+
$title = sprintf(__('Export of trigger %s'), htmlspecialchars(Util::backquote($triggerName)));
90+
$this->response->addJSON('title', $title);
91+
$this->response->addJSON('message', htmlspecialchars(trim($exportData)));
92+
93+
return;
94+
}
95+
96+
if ($exportData !== null) {
97+
$this->render('triggers/export', ['data' => $exportData, 'item_name' => $triggerName->getName()]);
98+
99+
return;
100+
}
101+
102+
$message = Message::error(sprintf(
103+
__('Error in processing request: No trigger with name %1$s found in database %2$s.'),
104+
htmlspecialchars(Util::backquote($triggerName)),
105+
htmlspecialchars(Util::backquote($GLOBALS['db'])),
106+
));
107+
if ($this->response->isAjax()) {
108+
$this->response->setRequestStatus(false);
109+
$this->response->addJSON('message', $message);
110+
111+
return;
112+
}
81113
}
82114

83115
$triggers = Triggers::getDetails($this->dbi, $GLOBALS['db'], $GLOBALS['table']);
@@ -90,6 +122,7 @@ public function __invoke(ServerRequest $request): void
90122
'triggers' => $triggers,
91123
'has_privilege' => $hasTriggerPrivilege,
92124
'is_ajax' => $isAjax,
125+
'error_message' => $message?->getDisplay() ?? '',
93126
]);
94127
}
95128
}

libraries/classes/Triggers/Triggers.php

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
use function mb_strtoupper;
2525
use function sprintf;
2626
use function str_contains;
27-
use function trim;
2827

2928
use const SORT_ASC;
3029

@@ -432,51 +431,17 @@ private function sendEditor(string $mode, array|null $item, string $title, strin
432431
echo $message->getDisplay();
433432
}
434433

435-
public function export(string $db, string $table, TriggerName $triggerName): void
434+
/** @psalm-return non-empty-string|null */
435+
public function getExportData(string $db, string $table, TriggerName $triggerName): string|null
436436
{
437437
$triggers = self::getDetails($this->dbi, $db, $table, '');
438-
$exportData = false;
439-
440438
foreach ($triggers as $trigger) {
441439
if ($trigger['name'] === $triggerName->getName()) {
442-
$exportData = $trigger['create'];
443-
break;
444-
}
445-
}
446-
447-
if ($exportData !== false) {
448-
$title = sprintf(__('Export of trigger %s'), htmlspecialchars(Util::backquote($triggerName)));
449-
450-
if ($this->response->isAjax()) {
451-
$this->response->addJSON('message', htmlspecialchars(trim($exportData)));
452-
$this->response->addJSON('title', $title);
453-
454-
$this->response->callExit();
440+
return $trigger['create'];
455441
}
456-
457-
$this->response->addHTML($this->template->render('triggers/export', [
458-
'data' => $exportData,
459-
'item_name' => $triggerName->getName(),
460-
]));
461-
462-
return;
463-
}
464-
465-
$message = sprintf(
466-
__('Error in processing request: No trigger with name %1$s found in database %2$s.'),
467-
htmlspecialchars(Util::backquote($triggerName)),
468-
htmlspecialchars(Util::backquote($db)),
469-
);
470-
$message = Message::error($message);
471-
472-
if ($this->response->isAjax()) {
473-
$this->response->setRequestStatus(false);
474-
$this->response->addJSON('message', $message);
475-
476-
$this->response->callExit();
477442
}
478443

479-
$this->response->addHTML($message->getDisplay());
444+
return null;
480445
}
481446

482447
/**

psalm-baseline.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12439,8 +12439,6 @@
1243912439
<code><![CDATA[$_POST['item_table']]]></code>
1244012440
<code><![CDATA[$_REQUEST['item_name']]]></code>
1244112441
<code><![CDATA[$_REQUEST['item_name']]]></code>
12442-
<code>$itemName</code>
12443-
<code>$itemName</code>
1244412442
</PossiblyInvalidArgument>
1244512443
<PossiblyInvalidCast>
1244612444
<code><![CDATA[$_POST['item_name']]]></code>

templates/triggers/list.twig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
</div>
3232
</div>
3333

34+
{{ error_message|raw -}}
35+
3436
<form id="rteListForm" class="ajax" action="{{ url('/triggers') }}">
3537
{{ get_hidden_inputs(db, table) }}
3638

0 commit comments

Comments
 (0)