diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-09 10:55:03 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-09 13:09:38 +0100 |
| commit | 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch) | |
| tree | 5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/gis_data_editor.php | |
| parent | 7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff) | |
| download | ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2 ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip | |
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/gis_data_editor.php')
| -rw-r--r-- | srcs/phpmyadmin/gis_data_editor.php | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/gis_data_editor.php b/srcs/phpmyadmin/gis_data_editor.php new file mode 100644 index 0000000..fd4988c --- /dev/null +++ b/srcs/phpmyadmin/gis_data_editor.php @@ -0,0 +1,138 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Editor for Geometry data types. + * + * @package PhpMyAdmin + */ +declare(strict_types=1); + +use PhpMyAdmin\Core; +use PhpMyAdmin\Gis\GisFactory; +use PhpMyAdmin\Gis\GisVisualization; +use PhpMyAdmin\Response; +use PhpMyAdmin\Template; +use PhpMyAdmin\Util; + +if (! defined('ROOT_PATH')) { + define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR); +} + +require_once ROOT_PATH . 'libraries/common.inc.php'; + +/** @var Template $template */ +$template = $containerBuilder->get('template'); + +if (! isset($_POST['field'])) { + Util::checkParameters(['field']); +} + +// Get data if any posted +$gis_data = []; +if (Core::isValid($_POST['gis_data'], 'array')) { + $gis_data = $_POST['gis_data']; +} + +$gis_types = [ + 'POINT', + 'MULTIPOINT', + 'LINESTRING', + 'MULTILINESTRING', + 'POLYGON', + 'MULTIPOLYGON', + 'GEOMETRYCOLLECTION', +]; + +// 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. +if (! isset($gis_data['gis_type'])) { + if (isset($_POST['type']) && $_POST['type'] != '') { + $gis_data['gis_type'] = mb_strtoupper($_POST['type']); + } + if (isset($_POST['value']) && trim($_POST['value']) != '') { + $start = (substr($_POST['value'], 0, 1) == "'") ? 1 : 0; + $gis_data['gis_type'] = mb_substr( + $_POST['value'], + $start, + mb_strpos($_POST['value'], "(") - $start + ); + } + if (! isset($gis_data['gis_type']) + || (! in_array($gis_data['gis_type'], $gis_types)) + ) { + $gis_data['gis_type'] = $gis_types[0]; + } +} +$geom_type = $gis_data['gis_type']; + +// Generate parameters from value passed. +$gis_obj = GisFactory::factory($geom_type); +if (isset($_POST['value'])) { + $gis_data = array_merge( + $gis_data, + $gis_obj->generateParams($_POST['value']) + ); +} + +// Generate Well Known Text +$srid = (isset($gis_data['srid']) && $gis_data['srid'] != '') ? $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' => $GLOBALS['dbi']->getVersion(), +]; +$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 (isset($_POST['generate']) && $_POST['generate'] == true) { + $extra_data = [ + 'result' => $result, + 'visualization' => $visualization, + 'openLayers' => $open_layers, + ]; + $response = Response::getInstance(); + $response->addJSON($extra_data); + exit; +} + +$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 = $template->render('gis_data_editor_form', [ + 'width' => $visualizationSettings['width'], + 'height' => $visualizationSettings['height'], + 'pma_theme_image' => $GLOBALS['pmaThemeImage'], + 'field' => $_POST['field'], + 'input_name' => $_POST['input_name'], + 'srid' => $srid, + 'visualization' => $visualization, + 'open_layers' => $open_layers, + 'gis_types' => $gis_types, + 'geom_type' => $geom_type, + 'geom_count' => $geom_count, + 'gis_data' => $gis_data, + 'result' => $result, +]); +Response::getInstance()->addJSON('gis_editor', $templateOutput); |
