Skip to content

Commit 7514e75

Browse files
Merge pull request #18286 from kamil-tekiela/Add-readonly-for-DisplayParts
Add readonly and enum for DisplayParts
2 parents 57c6d82 + d698bdf commit 7514e75

File tree

6 files changed

+67
-59
lines changed

6 files changed

+67
-59
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpMyAdmin\Display;
6+
7+
enum DeleteLinkEnum
8+
{
9+
case NO_DELETE;
10+
case DELETE_ROW;
11+
case KILL_PROCESS;
12+
}

libraries/classes/Display/DisplayParts.php

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,22 @@
77
/** @psalm-immutable */
88
final class DisplayParts
99
{
10-
public const NO_DELETE = 0;
11-
public const DELETE_ROW = 1;
12-
public const KILL_PROCESS = 2;
13-
14-
/** @psalm-param self::NO_DELETE|self::DELETE_ROW|self::KILL_PROCESS $deleteLink */
1510
private function __construct(
16-
public bool $hasEditLink,
17-
public int $deleteLink,
18-
public bool $hasSortLink,
19-
public bool $hasNavigationBar,
20-
public bool $hasBookmarkForm,
21-
public bool $hasTextButton,
22-
public bool $hasPrintLink,
11+
public readonly bool $hasEditLink,
12+
public readonly DeleteLinkEnum $deleteLink,
13+
public readonly bool $hasSortLink,
14+
public readonly bool $hasNavigationBar,
15+
public readonly bool $hasBookmarkForm,
16+
public readonly bool $hasTextButton,
17+
public readonly bool $hasPrintLink,
2318
) {
2419
}
2520

2621
/**
2722
* @param array<string, bool|int> $parts
2823
* @psalm-param array{
2924
* hasEditLink?: bool,
30-
* deleteLink?: self::NO_DELETE|self::DELETE_ROW|self::KILL_PROCESS,
25+
* deleteLink?: DeleteLinkEnum,
3126
* hasSortLink?: bool,
3227
* hasNavigationBar?: bool,
3328
* hasBookmarkForm?: bool,
@@ -39,7 +34,7 @@ public static function fromArray(array $parts): self
3934
{
4035
return new self(
4136
$parts['hasEditLink'] ?? false,
42-
$parts['deleteLink'] ?? self::NO_DELETE,
37+
$parts['deleteLink'] ?? DeleteLinkEnum::NO_DELETE,
4338
$parts['hasSortLink'] ?? false,
4439
$parts['hasNavigationBar'] ?? false,
4540
$parts['hasBookmarkForm'] ?? false,
@@ -52,7 +47,7 @@ public static function fromArray(array $parts): self
5247
* @param array<string, bool|int> $parts
5348
* @psalm-param array{
5449
* hasEditLink?: bool,
55-
* deleteLink?: self::NO_DELETE|self::DELETE_ROW|self::KILL_PROCESS,
50+
* deleteLink?: DeleteLinkEnum,
5651
* hasSortLink?: bool,
5752
* hasNavigationBar?: bool,
5853
* hasBookmarkForm?: bool,

libraries/classes/Display/Results.php

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ private function setDisplayPartsForPrintView(DisplayParts $displayParts): Displa
449449
{
450450
return $displayParts->with([
451451
'hasEditLink' => false,
452-
'deleteLink' => DisplayParts::NO_DELETE,
452+
'deleteLink' => DeleteLinkEnum::NO_DELETE,
453453
'hasSortLink' => false,
454454
'hasNavigationBar' => false,
455455
'hasBookmarkForm' => false,
@@ -479,7 +479,7 @@ private function setDisplayPartsForShow(DisplayParts $displayParts): DisplayPart
479479

480480
return $displayParts->with([
481481
'hasEditLink' => false,
482-
'deleteLink' => $bIsProcessList ? DisplayParts::KILL_PROCESS : DisplayParts::NO_DELETE,
482+
'deleteLink' => $bIsProcessList ? DeleteLinkEnum::KILL_PROCESS : DeleteLinkEnum::NO_DELETE,
483483
'hasSortLink' => false,
484484
'hasNavigationBar' => false,
485485
'hasBookmarkForm' => true,
@@ -498,7 +498,7 @@ private function setDisplayPartsForNonData(DisplayParts $displayParts): DisplayP
498498
// contains a "PROC ANALYSE" part
499499
return $displayParts->with([
500500
'hasEditLink' => false,
501-
'deleteLink' => DisplayParts::NO_DELETE,
501+
'deleteLink' => DeleteLinkEnum::NO_DELETE,
502502
'hasSortLink' => false,
503503
'hasNavigationBar' => false,
504504
'hasBookmarkForm' => true,
@@ -520,7 +520,7 @@ private function setDisplayPartsForSelect(DisplayParts $displayParts): DisplayPa
520520
$hasPrintLink = $displayParts->hasPrintLink;
521521

522522
for ($i = 0; $i < $numberOfColumns; $i++) {
523-
$isLink = $hasEditLink || $deleteLink !== DisplayParts::NO_DELETE || $displayParts->hasSortLink;
523+
$isLink = $hasEditLink || $deleteLink !== DeleteLinkEnum::NO_DELETE || $displayParts->hasSortLink;
524524

525525
// Displays edit/delete/sort/insert links?
526526
if (
@@ -531,7 +531,7 @@ private function setDisplayPartsForSelect(DisplayParts $displayParts): DisplayPa
531531
) {
532532
// don't display links
533533
$hasEditLink = false;
534-
$deleteLink = DisplayParts::NO_DELETE;
534+
$deleteLink = DeleteLinkEnum::NO_DELETE;
535535
break;
536536
}
537537

@@ -547,7 +547,7 @@ private function setDisplayPartsForSelect(DisplayParts $displayParts): DisplayPa
547547
if ($previousTable == '') { // no table for any of the columns
548548
// don't display links
549549
$hasEditLink = false;
550-
$deleteLink = DisplayParts::NO_DELETE;
550+
$deleteLink = DeleteLinkEnum::NO_DELETE;
551551
}
552552

553553
return $displayParts->with([
@@ -943,7 +943,7 @@ private function getTableHeaders(
943943
// 1. Set $colspan and generate html with full/partial
944944
// text button or link
945945
$colspan = $displayParts->hasEditLink
946-
&& $displayParts->deleteLink !== DisplayParts::NO_DELETE ? ' colspan="4"' : '';
946+
&& $displayParts->deleteLink !== DeleteLinkEnum::NO_DELETE ? ' colspan="4"' : '';
947947
$buttonHtml = $this->getFieldVisibilityParams($displayParts, $fullOrPartialTextLink, $colspan);
948948

949949
// 2. Displays the fields' name
@@ -974,8 +974,8 @@ private function getTableHeaders(
974974
return [
975975
'column_order' => $columnOrder,
976976
'options' => $optionsBlock,
977-
'has_bulk_actions_form' => $displayParts->deleteLink === DisplayParts::DELETE_ROW
978-
|| $displayParts->deleteLink === DisplayParts::KILL_PROCESS,
977+
'has_bulk_actions_form' => $displayParts->deleteLink === DeleteLinkEnum::DELETE_ROW
978+
|| $displayParts->deleteLink === DeleteLinkEnum::KILL_PROCESS,
979979
'button' => $buttonHtml,
980980
'table_headers_for_columns' => $tableHeadersForColumns,
981981
'column_at_right_side' => $columnAtRightSide,
@@ -1091,15 +1091,15 @@ private function getFieldVisibilityParams(
10911091
// 1. Displays the full/partial text button (part 1)...
10921092
$buttonHtml = '<thead><tr>' . "\n";
10931093

1094-
$emptyPreCondition = $displayParts->hasEditLink && $displayParts->deleteLink !== DisplayParts::NO_DELETE;
1094+
$emptyPreCondition = $displayParts->hasEditLink && $displayParts->deleteLink !== DeleteLinkEnum::NO_DELETE;
10951095

10961096
$leftOrBoth = $GLOBALS['cfg']['RowActionLinks'] === self::POSITION_LEFT
10971097
|| $GLOBALS['cfg']['RowActionLinks'] === self::POSITION_BOTH;
10981098

10991099
// ... before the result table
11001100
if (
11011101
! $displayParts->hasEditLink
1102-
&& $displayParts->deleteLink === DisplayParts::NO_DELETE
1102+
&& $displayParts->deleteLink === DeleteLinkEnum::NO_DELETE
11031103
&& $displayParts->hasTextButton
11041104
) {
11051105
$displayParams['emptypre'] = 0;
@@ -1113,7 +1113,7 @@ private function getFieldVisibilityParams(
11131113
. '>' . $fullOrPartialTextLink . '</th>';
11141114
} elseif (
11151115
$leftOrBoth
1116-
&& ($displayParts->hasEditLink || $displayParts->deleteLink !== DisplayParts::NO_DELETE)
1116+
&& ($displayParts->hasEditLink || $displayParts->deleteLink !== DeleteLinkEnum::NO_DELETE)
11171117
) {
11181118
// ... elseif no button, displays empty(ies) col(s) if required
11191119

@@ -1765,11 +1765,11 @@ private function getColumnAtRightSide(
17651765
if (
17661766
($GLOBALS['cfg']['RowActionLinks'] === self::POSITION_RIGHT)
17671767
|| ($GLOBALS['cfg']['RowActionLinks'] === self::POSITION_BOTH)
1768-
&& ($displayParts->hasEditLink || $displayParts->deleteLink !== DisplayParts::NO_DELETE)
1768+
&& ($displayParts->hasEditLink || $displayParts->deleteLink !== DeleteLinkEnum::NO_DELETE)
17691769
&& $displayParts->hasTextButton
17701770
) {
17711771
$displayParams['emptyafter'] = $displayParts->hasEditLink
1772-
&& $displayParts->deleteLink !== DisplayParts::NO_DELETE ? 4 : 1;
1772+
&& $displayParts->deleteLink !== DeleteLinkEnum::NO_DELETE ? 4 : 1;
17731773

17741774
$rightColumnHtml .= "\n"
17751775
. '<th class="column_action d-print-none"' . $colspan . '>'
@@ -1779,14 +1779,14 @@ private function getColumnAtRightSide(
17791779
($GLOBALS['cfg']['RowActionLinks'] === self::POSITION_LEFT)
17801780
|| ($GLOBALS['cfg']['RowActionLinks'] === self::POSITION_BOTH)
17811781
&& (! $displayParts->hasEditLink
1782-
&& $displayParts->deleteLink === DisplayParts::NO_DELETE)
1782+
&& $displayParts->deleteLink === DeleteLinkEnum::NO_DELETE)
17831783
&& (! isset($GLOBALS['is_header_sent']) || ! $GLOBALS['is_header_sent'])
17841784
) {
17851785
// ... elseif no button, displays empty columns if required
17861786
// (unless coming from Browse mode print view)
17871787

17881788
$displayParams['emptyafter'] = $displayParts->hasEditLink
1789-
&& $displayParts->deleteLink !== DisplayParts::NO_DELETE ? 4 : 1;
1789+
&& $displayParts->deleteLink !== DeleteLinkEnum::NO_DELETE ? 4 : 1;
17901790

17911791
$rightColumnHtml .= "\n" . '<td class="d-print-none"' . $colspan
17921792
. '></td>';
@@ -2035,7 +2035,7 @@ private function getTableBody(
20352035

20362036
if (
20372037
$displayParts->hasEditLink
2038-
|| ($displayParts->deleteLink !== DisplayParts::NO_DELETE)
2038+
|| ($displayParts->deleteLink !== DeleteLinkEnum::NO_DELETE)
20392039
) {
20402040
$expressions = [];
20412041

@@ -2091,7 +2091,7 @@ private function getTableBody(
20912091
) {
20922092
$tableBodyHtml .= $this->template->render('display/results/checkbox_and_links', [
20932093
'position' => self::POSITION_LEFT,
2094-
'has_checkbox' => $deleteUrl && $displayParts->deleteLink !== DisplayParts::KILL_PROCESS,
2094+
'has_checkbox' => $deleteUrl && $displayParts->deleteLink !== DeleteLinkEnum::KILL_PROCESS,
20952095
'edit' => [
20962096
'url' => $editUrl,
20972097
'params' => $editCopyUrlParams + ['default_action' => 'update'],
@@ -2114,7 +2114,7 @@ private function getTableBody(
21142114
} elseif ($GLOBALS['cfg']['RowActionLinks'] === self::POSITION_NONE) {
21152115
$tableBodyHtml .= $this->template->render('display/results/checkbox_and_links', [
21162116
'position' => self::POSITION_NONE,
2117-
'has_checkbox' => $deleteUrl && $displayParts->deleteLink !== DisplayParts::KILL_PROCESS,
2117+
'has_checkbox' => $deleteUrl && $displayParts->deleteLink !== DeleteLinkEnum::KILL_PROCESS,
21182118
'edit' => [
21192119
'url' => $editUrl,
21202120
'params' => $editCopyUrlParams + ['default_action' => 'update'],
@@ -2156,13 +2156,13 @@ private function getTableBody(
21562156
// 3. Displays the modify/delete links on the right if required
21572157
if (
21582158
($displayParts->hasEditLink
2159-
|| $displayParts->deleteLink !== DisplayParts::NO_DELETE)
2159+
|| $displayParts->deleteLink !== DeleteLinkEnum::NO_DELETE)
21602160
&& ($GLOBALS['cfg']['RowActionLinks'] === self::POSITION_RIGHT
21612161
|| $GLOBALS['cfg']['RowActionLinks'] === self::POSITION_BOTH)
21622162
) {
21632163
$tableBodyHtml .= $this->template->render('display/results/checkbox_and_links', [
21642164
'position' => self::POSITION_RIGHT,
2165-
'has_checkbox' => $deleteUrl && $displayParts->deleteLink !== DisplayParts::KILL_PROCESS,
2165+
'has_checkbox' => $deleteUrl && $displayParts->deleteLink !== DeleteLinkEnum::KILL_PROCESS,
21662166
'edit' => [
21672167
'url' => $editUrl,
21682168
'params' => $editCopyUrlParams + ['default_action' => 'update'],
@@ -2776,7 +2776,6 @@ private function getModifiedLinks(
27762776
* @param bool $clauseIsUnique the unique condition of clause
27772777
* @param string $urlSqlQuery the analyzed sql query
27782778
* @param int $processId Process ID
2779-
* @psalm-param DisplayParts::NO_DELETE|DisplayParts::DELETE_ROW|DisplayParts::KILL_PROCESS $deleteLink
27802779
*
27812780
* @return array $del_url, $del_str, $js_conf
27822781
* @psalm-return array{?string, ?string, ?string}
@@ -2785,12 +2784,12 @@ private function getDeleteAndKillLinks(
27852784
string $whereClause,
27862785
bool $clauseIsUnique,
27872786
string $urlSqlQuery,
2788-
int $deleteLink,
2787+
DeleteLinkEnum $deleteLink,
27892788
int $processId,
27902789
): array {
27912790
$goto = $this->properties['goto'];
27922791

2793-
if ($deleteLink === DisplayParts::DELETE_ROW) { // delete row case
2792+
if ($deleteLink === DeleteLinkEnum::DELETE_ROW) { // delete row case
27942793
$urlParams = [
27952794
'db' => $this->properties['db'],
27962795
'table' => $this->properties['table'],
@@ -2820,7 +2819,7 @@ private function getDeleteAndKillLinks(
28202819
. ($clauseIsUnique ? '' : ' LIMIT 1');
28212820

28222821
$deleteString = $this->getActionLinkContent('b_drop', __('Delete'));
2823-
} elseif ($deleteLink === DisplayParts::KILL_PROCESS) { // kill process case
2822+
} elseif ($deleteLink === DeleteLinkEnum::KILL_PROCESS) { // kill process case
28242823
$urlParams = [
28252824
'db' => $this->properties['db'],
28262825
'table' => $this->properties['table'],
@@ -3568,7 +3567,7 @@ public function getTable(
35683567
'navigation' => $navigation,
35693568
'headers' => $headers,
35703569
'body' => $body,
3571-
'has_bulk_links' => $displayParts->deleteLink === DisplayParts::DELETE_ROW,
3570+
'has_bulk_links' => $displayParts->deleteLink === DeleteLinkEnum::DELETE_ROW,
35723571
'has_export_button' => $this->hasExportButton($statementInfo, $displayParts->deleteLink),
35733572
'clause_is_unique' => $isClauseUnique,
35743573
'operations' => $operations,
@@ -3876,14 +3875,13 @@ private function setParamForLinkForeignKeyRelatedTables(array $map): array
38763875
* @see getTable()
38773876
*
38783877
* @param ResultInterface $dtResult the link id associated to the query which results have to be displayed
3879-
* @psalm-param DisplayParts::NO_DELETE|DisplayParts::DELETE_ROW|DisplayParts::KILL_PROCESS $deleteLink
38803878
*/
38813879
private function isClauseUnique(
38823880
ResultInterface $dtResult,
38833881
StatementInfo $statementInfo,
3884-
int $deleteLink,
3882+
DeleteLinkEnum $deleteLink,
38853883
): bool {
3886-
if ($deleteLink !== DisplayParts::DELETE_ROW) {
3884+
if ($deleteLink !== DeleteLinkEnum::DELETE_ROW) {
38873885
return false;
38883886
}
38893887

@@ -3916,9 +3914,9 @@ private function isClauseUnique(
39163914
return $clauseIsUnique;
39173915
}
39183916

3919-
private function hasExportButton(StatementInfo $statementInfo, int $deleteLink): bool
3917+
private function hasExportButton(StatementInfo $statementInfo, DeleteLinkEnum $deleteLink): bool
39203918
{
3921-
return $deleteLink === DisplayParts::DELETE_ROW && $statementInfo->queryType === 'SELECT';
3919+
return $deleteLink === DeleteLinkEnum::DELETE_ROW && $statementInfo->queryType === 'SELECT';
39223920
}
39233921

39243922
/**

libraries/classes/Sql.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PhpMyAdmin\ConfigStorage\RelationCleanup;
1010
use PhpMyAdmin\Dbal\DatabaseName;
1111
use PhpMyAdmin\Dbal\ResultInterface;
12+
use PhpMyAdmin\Display\DeleteLinkEnum;
1213
use PhpMyAdmin\Display\DisplayParts;
1314
use PhpMyAdmin\Display\Results as DisplayResults;
1415
use PhpMyAdmin\Html\Generator;
@@ -1005,7 +1006,7 @@ private function getQueryResponseForNoResultsReturned(
10051006

10061007
$displayParts = DisplayParts::fromArray([
10071008
'hasEditLink' => false,
1008-
'deleteLink' => DisplayParts::NO_DELETE,
1009+
'deleteLink' => DeleteLinkEnum::NO_DELETE,
10091010
'hasSortLink' => true,
10101011
'hasNavigationBar' => false,
10111012
'hasBookmarkForm' => true,
@@ -1171,7 +1172,7 @@ private function getHtmlForSqlQueryResultsTable(
11711172

11721173
$displayParts = DisplayParts::fromArray([
11731174
'hasEditLink' => false,
1174-
'deleteLink' => DisplayParts::NO_DELETE,
1175+
'deleteLink' => DeleteLinkEnum::NO_DELETE,
11751176
'hasSortLink' => true,
11761177
'hasNavigationBar' => true,
11771178
'hasBookmarkForm' => true,
@@ -1400,7 +1401,7 @@ private function getQueryResponseForResultsReturned(
14001401

14011402
$displayParts = DisplayParts::fromArray([
14021403
'hasEditLink' => true,
1403-
'deleteLink' => DisplayParts::DELETE_ROW,
1404+
'deleteLink' => DeleteLinkEnum::DELETE_ROW,
14041405
'hasSortLink' => true,
14051406
'hasNavigationBar' => true,
14061407
'hasBookmarkForm' => true,
@@ -1411,7 +1412,7 @@ private function getQueryResponseForResultsReturned(
14111412
if (! $editable) {
14121413
$displayParts = DisplayParts::fromArray([
14131414
'hasEditLink' => false,
1414-
'deleteLink' => DisplayParts::NO_DELETE,
1415+
'deleteLink' => DeleteLinkEnum::NO_DELETE,
14151416
'hasSortLink' => true,
14161417
'hasNavigationBar' => true,
14171418
'hasBookmarkForm' => true,
@@ -1423,7 +1424,7 @@ private function getQueryResponseForResultsReturned(
14231424
if (isset($_POST['printview']) && $_POST['printview'] == '1') {
14241425
$displayParts = DisplayParts::fromArray([
14251426
'hasEditLink' => false,
1426-
'deleteLink' => DisplayParts::NO_DELETE,
1427+
'deleteLink' => DeleteLinkEnum::NO_DELETE,
14271428
'hasSortLink' => false,
14281429
'hasNavigationBar' => false,
14291430
'hasBookmarkForm' => false,

0 commit comments

Comments
 (0)