Skip to content

Commit 6c0f4fa

Browse files
Merge pull request #18689 from kamil-tekiela/getNumberOfFieldsFromRequest
Move getNumberOfFieldsFromRequest() to controller
2 parents 48ab9e1 + 570b167 commit 6c0f4fa

6 files changed

Lines changed: 40 additions & 63 deletions

File tree

phpstan-baseline.neon

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5625,6 +5625,11 @@ parameters:
56255625
count: 1
56265626
path: src/Controllers/Table/CreateController.php
56275627

5628+
-
5629+
message: "#^Parameter \\#1 \\$value of function intval expects array\\|bool\\|float\\|int\\|resource\\|string\\|null, mixed given\\.$#"
5630+
count: 5
5631+
path: src/Controllers/Table/CreateController.php
5632+
56285633
-
56295634
message: "#^Parameter \\#2 \\$table of method PhpMyAdmin\\\\CreateAddField\\:\\:getTableCreationQuery\\(\\) expects string, mixed given\\.$#"
56305635
count: 1
@@ -8530,11 +8535,6 @@ parameters:
85308535
count: 1
85318536
path: src/CreateAddField.php
85328537

8533-
-
8534-
message: "#^Parameter \\#1 \\$value of function intval expects array\\|bool\\|float\\|int\\|resource\\|string\\|null, mixed given\\.$#"
8535-
count: 5
8536-
path: src/CreateAddField.php
8537-
85388538
-
85398539
message: "#^Parameter \\#10 \\$comment of static method PhpMyAdmin\\\\Table\\:\\:generateFieldSpec\\(\\) expects string, mixed given\\.$#"
85408540
count: 1

psalm-baseline.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3356,6 +3356,10 @@
33563356
<code><![CDATA[$_POST['field_transformation'][$fieldindex]]]></code>
33573357
<code><![CDATA[$_POST['field_transformation_options'][$fieldindex]]]></code>
33583358
</MixedArgument>
3359+
<MixedAssignment>
3360+
<code>$numFields</code>
3361+
<code>$origNumFields</code>
3362+
</MixedAssignment>
33593363
<PossiblyInvalidArgument>
33603364
<code><![CDATA[$_POST['field_input_transformation'][$fieldindex]]]></code>
33613365
<code><![CDATA[$_POST['field_input_transformation_options'][$fieldindex]]]></code>
@@ -3379,9 +3383,6 @@
33793383
<code><![CDATA[$_POST['field_transformation_options'][$fieldindex]]]></code>
33803384
<code>$mimetype</code>
33813385
</PossiblyInvalidCast>
3382-
<PossiblyUnusedParam>
3383-
<code>$request</code>
3384-
</PossiblyUnusedParam>
33853386
</file>
33863387
<file src="src/Controllers/Table/DeleteConfirmController.php">
33873388
<DeprecatedMethod>
@@ -14341,7 +14342,6 @@
1434114342
</DeprecatedMethod>
1434214343
<PossiblyUnusedMethod>
1434314344
<code>providerGetColumnCreationQueryRequest</code>
14344-
<code>providerGetNumberOfFieldsFromRequest</code>
1434514345
<code>providerGetPartitionsDefinition</code>
1434614346
<code>providerGetTableCreationQuery</code>
1434714347
</PossiblyUnusedMethod>

src/Controllers/Table/CreateController.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919

2020
use function __;
2121
use function htmlspecialchars;
22+
use function intval;
2223
use function is_array;
2324
use function mb_strtolower;
25+
use function min;
2426
use function sprintf;
2527
use function strlen;
2628

@@ -82,7 +84,7 @@ public function __invoke(ServerRequest $request): void
8284

8385
$createAddField = new CreateAddField($this->dbi);
8486

85-
$numFields = $createAddField->getNumberOfFieldsFromRequest();
87+
$numFields = $this->getNumberOfFieldsFromRequest($request);
8688

8789
/**
8890
* The form used to define the structure of the table has been submitted
@@ -149,4 +151,26 @@ public function __invoke(ServerRequest $request): void
149151

150152
$this->render('columns_definitions/column_definitions_form', $templateData);
151153
}
154+
155+
/**
156+
* Function to get the number of fields for the table creation form
157+
*/
158+
private function getNumberOfFieldsFromRequest(ServerRequest $request): int
159+
{
160+
$origNumFields = $request->getParsedBodyParam('orig_num_fields');
161+
$numFields = $request->getParsedBodyParam('num_fields');
162+
163+
if ($request->hasBodyParam('submit_num_fields')) { // adding new fields
164+
$numberOfFields = intval($origNumFields) + intval($request->getParsedBodyParam('added_fields'));
165+
} elseif ($origNumFields !== null) { // retaining existing fields
166+
$numberOfFields = intval($origNumFields);
167+
} elseif ($numFields !== null && intval($numFields) > 0) { // new table with specified number of fields
168+
$numberOfFields = intval($numFields);
169+
} else { // new table with unspecified number of fields
170+
$numberOfFields = 4;
171+
}
172+
173+
// Limit to 4096 fields (MySQL maximal value)
174+
return min($numberOfFields, 4096);
175+
}
152176
}

src/CreateAddField.php

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
use function count;
1111
use function implode;
1212
use function in_array;
13-
use function intval;
1413
use function json_decode;
15-
use function min;
1614
use function preg_replace;
1715
use function trim;
1816

@@ -412,30 +410,6 @@ public function getTableCreationQuery(string $db, string $table): string
412410
return $sqlQuery;
413411
}
414412

415-
/**
416-
* Function to get the number of fields for the table creation form
417-
*/
418-
public function getNumberOfFieldsFromRequest(): int
419-
{
420-
// Limit to 4096 fields (MySQL maximal value)
421-
$mysqlLimit = 4096;
422-
423-
if (isset($_POST['submit_num_fields'])) { // adding new fields
424-
$numberOfFields = intval($_POST['orig_num_fields']) + intval($_POST['added_fields']);
425-
} elseif (isset($_POST['orig_num_fields'])) { // retaining existing fields
426-
$numberOfFields = intval($_POST['orig_num_fields']);
427-
} elseif (
428-
isset($_POST['num_fields'])
429-
&& intval($_POST['num_fields']) > 0
430-
) { // new table with specified number of fields
431-
$numberOfFields = intval($_POST['num_fields']);
432-
} else { // new table with unspecified number of fields
433-
$numberOfFields = 4;
434-
}
435-
436-
return min($numberOfFields, $mysqlLimit);
437-
}
438-
439413
/**
440414
* Function to get the column creation statement
441415
*

test/classes/Controllers/Table/CreateControllerTest.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use PhpMyAdmin\ConfigStorage\Relation;
99
use PhpMyAdmin\Controllers\Table\CreateController;
1010
use PhpMyAdmin\DatabaseInterface;
11-
use PhpMyAdmin\Http\ServerRequest;
11+
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
1212
use PhpMyAdmin\Table\ColumnsDefinition;
1313
use PhpMyAdmin\Template;
1414
use PhpMyAdmin\Tests\AbstractTestCase;
@@ -27,7 +27,7 @@ public function testCreateController(): void
2727
$GLOBALS['table'] = 'new_test_table';
2828
$config = Config::getInstance();
2929
$config->selectedServer = $config->getSettings()->Servers[1]->asArray();
30-
$_POST = ['db' => 'test_db', 'table' => 'new_test_table', 'num_fields' => '2'];
30+
$_POST = ['db' => 'test_db', 'table' => 'new_test_table'];
3131

3232
$dummyDbi = $this->createDbiDummy();
3333
$dummyDbi->addSelectDb('test_db');
@@ -247,6 +247,9 @@ public function testCreateController(): void
247247
'disable_is' => false,
248248
]);
249249

250+
$request = ServerRequestFactory::create()->createServerRequest('POST', 'http://example.com/')
251+
->withParsedBody(['num_fields' => '2']);
252+
250253
$transformations = new Transformations();
251254
(new CreateController(
252255
$response,
@@ -255,7 +258,7 @@ public function testCreateController(): void
255258
$this->createConfig(),
256259
$dbi,
257260
new ColumnsDefinition($dbi, $relation, $transformations),
258-
))($this->createStub(ServerRequest::class));
261+
))($request);
259262

260263
$this->assertSame($expected, $response->getHTMLResult());
261264
}

test/classes/CreateAddFieldTest.php

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -292,30 +292,6 @@ public static function providerGetTableCreationQuery(): array
292292
];
293293
}
294294

295-
/**
296-
* Test for getNumberOfFieldsFromRequest
297-
*
298-
* @param int $expected Expected result
299-
* @param mixed[] $request $_REQUEST array
300-
*/
301-
#[DataProvider('providerGetNumberOfFieldsFromRequest')]
302-
public function testGetNumberOfFieldsFromRequest(int $expected, array $request): void
303-
{
304-
$_POST = $request;
305-
$actual = $this->createAddField->getNumberOfFieldsFromRequest();
306-
$this->assertEquals($expected, $actual);
307-
}
308-
309-
/**
310-
* Data provider for testGetNumberOfFieldsFromRequest
311-
*
312-
* @return array<array{int, mixed[]}>
313-
*/
314-
public static function providerGetNumberOfFieldsFromRequest(): array
315-
{
316-
return [[4, []]];
317-
}
318-
319295
/**
320296
* Data provider for testGetColumnCreationQuery
321297
*

0 commit comments

Comments
 (0)