Submit
Path:
~
/
/
opt
/
psa
/
phpMyAdmin
/
libraries
/
classes
/
Controllers
/
File Content:
GisDataEditorController.php
<?php /** * Editor for Geometry data types. */ declare(strict_types=1); namespace PhpMyAdmin\Controllers; use PhpMyAdmin\Gis\GisFactory; use PhpMyAdmin\Gis\GisVisualization; use PhpMyAdmin\Http\ServerRequest; use function array_merge; use function in_array; use function intval; use function is_array; use function mb_strtoupper; use function preg_match; use function trim; /** * Editor for Geometry data types. */ class GisDataEditorController extends AbstractController { private const GIS_TYPES = [ 'POINT', 'MULTIPOINT', 'LINESTRING', 'MULTILINESTRING', 'POLYGON', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION', ]; public function __invoke(ServerRequest $request): void { global $gis_data, $geom_type, $gis_obj, $srid, $wkt, $wkt_with_zero; global $result, $visualizationSettings, $data, $visualization, $open_layers, $geom_count, $dbi; /** @var string|null $field */ $field = $request->getParsedBodyParam('field'); /** @var array|null $gisDataParam */ $gisDataParam = $request->getParsedBodyParam('gis_data'); /** @var string $type */ $type = $request->getParsedBodyParam('type', 'GEOMETRY'); /** @var string|null $value */ $value = $request->getParsedBodyParam('value'); /** @var string|null $generate */ $generate = $request->getParsedBodyParam('generate'); /** @var string|null $inputName */ $inputName = $request->getParsedBodyParam('input_name'); if (! isset($field)) { return; } // Get data if any posted $gis_data = []; if (is_array($gisDataParam)) { $gis_data = $gisDataParam; } $gis_data = $this->validateGisData($gis_data, $type, $value); $geom_type = $gis_data['gis_type']; // Generate parameters from value passed. $gis_obj = GisFactory::factory($geom_type); if ($gis_obj === false) { return; } if (isset($value)) { $gis_data = array_merge( $gis_data, $gis_obj->generateParams($value) ); } // Generate Well Known Text $srid = isset($gis_data['srid']) && $gis_data['srid'] != '' ? (int) $gis_data['srid'] : 0; $wkt = $gis_obj->generateWkt($gis_data, 0); $wkt_with_zero = $gis_obj->generateWkt($gis_data, 0, '0'); $result = "'" . $wkt . "'," . $srid; // Generate SVG based visualization $visualizationSettings = [ 'width' => 450, 'height' => 300, 'spatialColumn' => 'wkt', 'mysqlVersion' => $dbi->getVersion(), 'isMariaDB' => $dbi->isMariaDB(), ]; $data = [ [ 'wkt' => $wkt_with_zero, 'srid' => $srid, ], ]; $visualization = GisVisualization::getByData($data, $visualizationSettings) ->toImage('svg'); $open_layers = GisVisualization::getByData($data, $visualizationSettings) ->asOl(); // If the call is to update the WKT and visualization make an AJAX response if ($generate) { $this->response->addJSON([ 'result' => $result, 'visualization' => $visualization, 'openLayers' => $open_layers, ]); return; } $geom_count = 1; if ($geom_type === 'GEOMETRYCOLLECTION') { $geom_count = isset($gis_data[$geom_type]['geom_count']) ? intval($gis_data[$geom_type]['geom_count']) : 1; if (isset($gis_data[$geom_type]['add_geom'])) { $geom_count++; } } $templateOutput = $this->template->render('gis_data_editor_form', [ 'width' => $visualizationSettings['width'], 'height' => $visualizationSettings['height'], 'field' => $field, 'input_name' => $inputName, 'srid' => $srid, 'visualization' => $visualization, 'open_layers' => $open_layers, 'column_type' => mb_strtoupper($type), 'gis_types' => self::GIS_TYPES, 'geom_type' => $geom_type, 'geom_count' => $geom_count, 'gis_data' => $gis_data, 'result' => $result, ]); $this->response->addJSON(['gis_editor' => $templateOutput]); } /** * Extract type from the initial call and make sure that it's a valid one. * Extract from field's values if available, if not use the column type passed. * * @param mixed[] $gis_data * * @return mixed[] * @psalm-return array{gis_type:value-of<self::GIS_TYPES>}&mixed[] */ private function validateGisData(array $gis_data, string $type, ?string $value): array { if (! isset($gis_data['gis_type']) || ! in_array($gis_data['gis_type'], self::GIS_TYPES, true)) { if ($type !== '') { $gis_data['gis_type'] = mb_strtoupper($type); } if (isset($value) && trim($value) !== '' && preg_match('/^\'?(\w+)\b/', $value, $matches)) { $gis_data['gis_type'] = $matches[1]; } if (! isset($gis_data['gis_type']) || (! in_array($gis_data['gis_type'], self::GIS_TYPES, true))) { $gis_data['gis_type'] = self::GIS_TYPES[0]; } } return $gis_data; } }
Edit
Rename
Chmod
Delete
FILE
FOLDER
INFO
Name
Size
Permission
Action
Config
---
0755
Database
---
0755
Export
---
0755
Import
---
0755
Preferences
---
0755
Server
---
0755
Setup
---
0755
Sql
---
0755
Table
---
0755
Transformation
---
0755
View
---
0755
AbstractController.php
2590 bytes
0644
BrowseForeignersController.php
2468 bytes
0644
ChangeLogController.php
3647 bytes
0644
CheckRelationsController.php
2301 bytes
0644
CollationConnectionController.php
809 bytes
0644
ColumnController.php
1064 bytes
0644
DatabaseController.php
275 bytes
0644
ErrorReportController.php
6198 bytes
0644
GisDataEditorController.php
5543 bytes
0644
GitInfoController.php
1220 bytes
0644
HomeController.php
17825 bytes
0644
JavaScriptMessagesController.php
37187 bytes
0644
LicenseController.php
940 bytes
0644
LintController.php
2035 bytes
0644
LogoutController.php
421 bytes
0644
NavigationController.php
3278 bytes
0644
NormalizationController.php
5669 bytes
0644
PhpInfoController.php
685 bytes
0644
RecentTablesListController.php
426 bytes
0644
SchemaExportController.php
667 bytes
0644
TableController.php
820 bytes
0644
ThemeSetController.php
1257 bytes
0644
ThemesController.php
772 bytes
0644
UserPasswordController.php
3379 bytes
0644
VersionCheckController.php
1224 bytes
0644
N4ST4R_ID | Naxtarrr