<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Editor for Geometry data types. * * @package PhpMyAdmin */ use PMA\libraries\gis\GISFactory; use PMA\libraries\gis\GISVisualization; /** * Escapes special characters if the variable is set. * Returns an empty string otherwise. * * @param string $variable variable to be escaped * * @return string escaped variable */ function escape($variable) { return isset($variable) ? htmlspecialchars($variable) : ''; } require_once 'libraries/common.inc.php'; if (! isset($_REQUEST['field'])) { PMA\libraries\Util::checkParameters(array('field')); } // Get data if any posted $gis_data = array(); if (PMA_isValid($_REQUEST['gis_data'], 'array')) { $gis_data = $_REQUEST['gis_data']; } $gis_types = array( '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($_REQUEST['type']) && $_REQUEST['type'] != '') { $gis_data['gis_type'] = mb_strtoupper($_REQUEST['type']); } if (isset($_REQUEST['value']) && trim($_REQUEST['value']) != '') { $start = (substr($_REQUEST['value'], 0, 1) == "'") ? 1 : 0; $gis_data['gis_type'] = mb_substr( $_REQUEST['value'], $start, mb_strpos($_REQUEST['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 = htmlspecialchars($gis_data['gis_type']); // Generate parameters from value passed. $gis_obj = GISFactory::factory($geom_type); if (isset($_REQUEST['value'])) { $gis_data = array_merge( $gis_data, $gis_obj->generateParams($_REQUEST['value']) ); } // Generate Well Known Text $srid = (isset($gis_data['srid']) && $gis_data['srid'] != '') ? htmlspecialchars($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 = array( 'width' => 450, 'height' => 300, 'spatialColumn' => 'wkt' ); $data = array(array('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($_REQUEST['generate']) && $_REQUEST['generate'] == true) { $extra_data = array( 'result' => $result, 'visualization' => $visualization, 'openLayers' => $open_layers, ); $response = PMA\libraries\Response::getInstance(); $response->addJSON($extra_data); exit; } ob_start(); echo '<form id="gis_data_editor_form" action="gis_data_editor.php" method="post">'; echo '<input type="hidden" id="pmaThemeImage"' , ' value="' , $GLOBALS['pmaThemeImage'] , '" />'; echo '<div id="gis_data_editor">'; echo '<h3>'; printf( __('Value for the column "%s"'), htmlspecialchars($_REQUEST['field']) ); echo '</h3>'; echo '<input type="hidden" name="field" value="' , htmlspecialchars($_REQUEST['field']) , '" />'; // The input field to which the final result should be added // and corresponding null checkbox if (isset($_REQUEST['input_name'])) { echo '<input type="hidden" name="input_name" value="' , htmlspecialchars($_REQUEST['input_name']) , '" />'; } echo PMA_URL_getHiddenInputs(); echo '<!-- Visualization section -->'; echo '<div id="placeholder" style="width:450px;height:300px;' , ($srid != 0 ? 'display:none;' : '') , '">'; echo $visualization; echo '</div>'; echo '<div id="openlayersmap" style="width:450px;height:300px;' , ($srid == 0 ? 'display:none;' : '') , '">'; echo '</div>'; echo '<div class="choice" style="float:right;clear:right;">'; echo '<input type="checkbox" id="choice" value="useBaseLayer"' , ($srid != 0 ? ' checked="checked"' : '') , '/>'; echo '<label for="choice">' , __("Use OpenStreetMaps as Base Layer") , '</label>'; echo '</div>'; echo '<script language="javascript" type="text/javascript">'; echo $open_layers; echo '</script>'; echo '<!-- End of visualization section -->'; echo '<!-- Header section - Inclueds GIS type selector and input field for SRID -->'; echo '<div id="gis_data_header">'; echo '<select name="gis_data[gis_type]" class="gis_type">'; foreach ($gis_types as $gis_type) { echo '<option value="' , $gis_type , '"'; if ($geom_type == $gis_type) { echo ' selected="selected"'; } echo '>' , $gis_type , '</option>'; } echo '</select>'; echo ' '; /* l10n: Spatial Reference System Identifier */ echo '<label for="srid">' , __('SRID:') , '</label>'; echo '<input name="gis_data[srid]" type="text" value="' , $srid , '" />'; echo '</div>'; echo '<!-- End of header section -->'; echo '<!-- Data section -->'; echo '<div id="gis_data">'; $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++; } echo '<input type="hidden" name="gis_data[GEOMETRYCOLLECTION][geom_count]"' , ' value="' , $geom_count , '" />'; } for ($a = 0; $a < $geom_count; $a++) { if (! isset($gis_data[$a])) { continue; } if ($geom_type == 'GEOMETRYCOLLECTION') { echo '<br/><br/>'; printf(__('Geometry %d:'), $a + 1); echo '<br/>'; if (isset($gis_data[$a]['gis_type'])) { $type = htmlspecialchars($gis_data[$a]['gis_type']); } else { $type = $gis_types[0]; } echo '<select name="gis_data[' , $a , '][gis_type]" class="gis_type">'; foreach (array_slice($gis_types, 0, 6) as $gis_type) { echo '<option value="' , $gis_type , '"'; if ($type == $gis_type) { echo ' selected="selected"'; } echo '>' , $gis_type , '</option>'; } echo '</select>'; } else { $type = $geom_type; } if ($type == 'POINT') { echo '<br/>'; echo __('Point:'); echo '<label for="x">' , __("X") , '</label>'; echo '<input name="gis_data[' , $a , '][POINT][x]" type="text"' , ' value="' , escape($gis_data[$a]['POINT']['x']) , '" />'; echo '<label for="y">' , __("Y") , '</label>'; echo '<input name="gis_data[' , $a , '][POINT][y]" type="text"' , ' value="' , escape($gis_data[$a]['POINT']['y']) , '" />'; } elseif ($type == 'MULTIPOINT' || $type == 'LINESTRING') { $no_of_points = isset($gis_data[$a][$type]['no_of_points']) ? intval($gis_data[$a][$type]['no_of_points']) : 1; if ($type == 'LINESTRING' && $no_of_points < 2) { $no_of_points = 2; } if ($type == 'MULTIPOINT' && $no_of_points < 1) { $no_of_points = 1; } if (isset($gis_data[$a][$type]['add_point'])) { $no_of_points++; } echo '<input type="hidden" value="' , $no_of_points , '"' , ' name="gis_data[' , $a , '][' , $type , '][no_of_points]" />'; for ($i = 0; $i < $no_of_points; $i++) { echo '<br/>'; printf(__('Point %d'), $i + 1); echo ': '; echo '<label for="x">' , __("X") , '</label>'; echo '<input type="text"' , ' name="gis_data[' , $a , '][' , $type , '][' , $i , '][x]"' , ' value="' , escape($gis_data[$a][$type][$i]['x']) , '" />'; echo '<label for="y">' , __("Y") , '</label>'; echo '<input type="text"' , ' name="gis_data[' , $a , '][' , $type , '][' , $i , '][y]"' , ' value="' , escape($gis_data[$a][$type][$i]['y']) , '" />'; } echo '<input type="submit"' , ' name="gis_data[' , $a , '][' , $type , '][add_point]"' , ' class="add addPoint" value="' , __("Add a point") , '" />'; } elseif ($type == 'MULTILINESTRING' || $type == 'POLYGON') { $no_of_lines = isset($gis_data[$a][$type]['no_of_lines']) ? intval($gis_data[$a][$type]['no_of_lines']) : 1; if ($no_of_lines < 1) { $no_of_lines = 1; } if (isset($gis_data[$a][$type]['add_line'])) { $no_of_lines++; } echo '<input type="hidden" value="' , $no_of_lines , '"' , ' name="gis_data[' , $a , '][' , $type , '][no_of_lines]" />'; for ($i = 0; $i < $no_of_lines; $i++) { echo '<br/>'; if ($type == 'MULTILINESTRING') { printf(__('Linestring %d:'), $i + 1); } else { if ($i == 0) { echo __('Outer ring:'); } else { printf(__('Inner ring %d:'), $i); } } $no_of_points = isset($gis_data[$a][$type][$i]['no_of_points']) ? intval($gis_data[$a][$type][$i]['no_of_points']) : 2; if ($type == 'MULTILINESTRING' && $no_of_points < 2) { $no_of_points = 2; } if ($type == 'POLYGON' && $no_of_points < 4) { $no_of_points = 4; } if (isset($gis_data[$a][$type][$i]['add_point'])) { $no_of_points++; } echo '<input type="hidden" value="' , $no_of_points , '"' , ' name="gis_data[' , $a , '][' , $type , '][' , $i , '][no_of_points]" />'; for ($j = 0; $j < $no_of_points; $j++) { echo('<br/>'); printf(__('Point %d'), $j + 1); echo ': '; echo '<label for="x">' , __("X") , '</label>'; echo '<input type="text" name="gis_data[' , $a , '][' , $type . '][' , $i , '][' , $j , '][x]" value="' , escape($gis_data[$a][$type][$i][$j]['x']) , '" />'; echo '<label for="y">' , __("Y") , '</label>'; echo '<input type="text" name="gis_data[' , $a , '][' , $type , '][' , $i , '][' , $j , '][y]"' , ' value="' , escape($gis_data[$a][$type][$i][$j]['y']) , '" />'; } echo '<input type="submit" name="gis_data[' , $a , '][' , $type , '][' , $i , '][add_point]"' , ' class="add addPoint" value="' , __("Add a point") , '" />'; } $caption = ($type == 'MULTILINESTRING') ? __('Add a linestring') : __('Add an inner ring'); echo '<br/>'; echo '<input type="submit"' , ' name="gis_data[' , $a , '][' , $type , '][add_line]"' , ' class="add addLine" value="' , $caption , '" />'; } elseif ($type == 'MULTIPOLYGON') { $no_of_polygons = isset($gis_data[$a][$type]['no_of_polygons']) ? intval($gis_data[$a][$type]['no_of_polygons']) : 1; if ($no_of_polygons < 1) { $no_of_polygons = 1; } if (isset($gis_data[$a][$type]['add_polygon'])) { $no_of_polygons++; } echo '<input type="hidden"' , ' name="gis_data[' , $a , '][' , $type , '][no_of_polygons]"' , ' value="' , $no_of_polygons , '" />'; for ($k = 0; $k < $no_of_polygons; $k++) { echo '<br/>'; printf(__('Polygon %d:'), $k + 1); $no_of_lines = isset($gis_data[$a][$type][$k]['no_of_lines']) ? intval($gis_data[$a][$type][$k]['no_of_lines']) : 1; if ($no_of_lines < 1) { $no_of_lines = 1; } if (isset($gis_data[$a][$type][$k]['add_line'])) { $no_of_lines++; } echo '<input type="hidden"' , ' name="gis_data[' , $a , '][' , $type , '][' , $k , '][no_of_lines]"' , ' value="' , $no_of_lines , '" />'; for ($i = 0; $i < $no_of_lines; $i++) { echo '<br/><br/>'; if ($i == 0) { echo __('Outer ring:'); } else { printf(__('Inner ring %d:'), $i); } $no_of_points = isset($gis_data[$a][$type][$k][$i]['no_of_points']) ? intval($gis_data[$a][$type][$k][$i]['no_of_points']) : 4; if ($no_of_points < 4) { $no_of_points = 4; } if (isset($gis_data[$a][$type][$k][$i]['add_point'])) { $no_of_points++; } echo '<input type="hidden"' , ' name="gis_data[' , $a , '][' , $type , '][' , $k , '][' , $i , '][no_of_points]"' , ' value="' , $no_of_points , '" />'; for ($j = 0; $j < $no_of_points; $j++) { echo '<br/>'; printf(__('Point %d'), $j + 1); echo ': '; echo '<label for="x">' , __("X") , '</label>'; echo '<input type="text"' , ' name="gis_data[' , $a , '][' , $type , '][' , $k , '][' , $i , '][' , $j , '][x]"' , ' value="' , escape($gis_data[$a][$type][$k][$i][$j]['x']) , '" />'; echo '<label for="y">' , __("Y") , '</label>'; echo '<input type="text"' , ' name="gis_data[' , $a , '][' , $type , '][' , $k , '][' , $i , '][' , $j , '][y]"' , ' value="' , escape($gis_data[$a][$type][$k][$i][$j]['y']) , '" />'; } echo '<input type="submit"' , ' name="gis_data[' , $a , '][' , $type , '][' , $k , '][' , $i , '][add_point]"' , ' class="add addPoint" value="' , __("Add a point") , '" />'; } echo '<br/>'; echo '<input type="submit"' , ' name="gis_data[' , $a , '][' , $type , '][' , $k , '][add_line]"' , ' class="add addLine" value="' , __('Add an inner ring') , '" />'; echo '<br/>'; } echo '<br/>'; echo '<input type="submit"' , ' name="gis_data[' , $a , '][' , $type , '][add_polygon]"' , ' class="add addPolygon" value="' , __('Add a polygon') , '" />'; } } if ($geom_type == 'GEOMETRYCOLLECTION') { echo '<br/><br/>'; echo '<input type="submit" name="gis_data[GEOMETRYCOLLECTION][add_geom]"' , 'class="add addGeom" value="' , __("Add geometry") , '" />'; } echo '</div>'; echo '<!-- End of data section -->'; echo '<br/>'; echo '<input type="submit" name="gis_data[save]" value="' , __('Go') , '" />'; echo '<div id="gis_data_output">'; echo '<h3>' , __('Output') , '</h3>'; echo '<p>'; echo __( 'Choose "GeomFromText" from the "Function" column and paste the' . ' string below into the "Value" field.' ); echo '</p>'; echo '<textarea id="gis_data_textarea" cols="95" rows="5">'; echo htmlspecialchars($result); echo '</textarea>'; echo '</div>'; echo '</div>'; echo '</form>'; PMA\libraries\Response::getInstance()->addJSON('gis_editor', ob_get_contents()); ob_end_clean();
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
doc | Folder | 0755 |
|
|
js | Folder | 0755 |
|
|
libraries | Folder | 0755 |
|
|
locale | Folder | 0755 |
|
|
setup | Folder | 0755 |
|
|
sql | Folder | 0755 |
|
|
templates | Folder | 0755 |
|
|
themes | Folder | 0755 |
|
|
browse_foreigners.php | File | 1.55 KB | 0644 |
|
changelog.php | File | 5.18 KB | 0644 |
|
chk_rel.php | File | 758 B | 0644 |
|
config.sample.inc.php | File | 4.45 KB | 0644 |
|
db_central_columns.php | File | 5.25 KB | 0644 |
|
db_datadict.php | File | 5.76 KB | 0644 |
|
db_designer.php | File | 5.72 KB | 0644 |
|
db_events.php | File | 356 B | 0644 |
|
db_export.php | File | 4.85 KB | 0644 |
|
db_import.php | File | 1.02 KB | 0644 |
|
db_operations.php | File | 9.68 KB | 0644 |
|
db_qbe.php | File | 4.33 KB | 0644 |
|
db_routines.php | File | 465 B | 0644 |
|
db_search.php | File | 2.03 KB | 0644 |
|
db_sql.php | File | 1.07 KB | 0644 |
|
db_sql_autocomplete.php | File | 735 B | 0644 |
|
db_sql_format.php | File | 463 B | 0644 |
|
db_structure.php | File | 1.04 KB | 0644 |
|
db_tracking.php | File | 4.32 KB | 0644 |
|
db_triggers.php | File | 360 B | 0644 |
|
error_report.php | File | 4.48 KB | 0644 |
|
export.php | File | 17.17 KB | 0644 |
|
favicon.ico | File | 21.96 KB | 0644 |
|
file_echo.php | File | 856 B | 0644 |
|
gis_data_editor.php | File | 15.46 KB | 0644 |
|
import.php | File | 28.7 KB | 0644 |
|
import_status.php | File | 3.38 KB | 0644 |
|
index.php | File | 20.32 KB | 0644 |
|
license.php | File | 852 B | 0644 |
|
lint.php | File | 1.35 KB | 0644 |
|
logout.php | File | 247 B | 0644 |
|
navigation.php | File | 2.13 KB | 0644 |
|
normalization.php | File | 3.93 KB | 0644 |
|
phpinfo.php | File | 510 B | 0644 |
|
phpmyadmin.css.php | File | 1017 B | 0644 |
|
prefs_forms.php | File | 2.68 KB | 0644 |
|
prefs_manage.php | File | 14.35 KB | 0644 |
|
print.css | File | 1.18 KB | 0644 |
|
schema_export.php | File | 1.64 KB | 0644 |
|
server_binlog.php | File | 804 B | 0644 |
|
server_collations.php | File | 837 B | 0644 |
|
server_databases.php | File | 817 B | 0644 |
|
server_engines.php | File | 803 B | 0644 |
|
server_export.php | File | 1.2 KB | 0644 |
|
server_import.php | File | 793 B | 0644 |
|
server_plugins.php | File | 808 B | 0644 |
|
server_privileges.php | File | 13.66 KB | 0644 |
|
server_replication.php | File | 2.14 KB | 0644 |
|
server_sql.php | File | 847 B | 0644 |
|
server_status.php | File | 981 B | 0644 |
|
server_status_advisor.php | File | 940 B | 0644 |
|
server_status_monitor.php | File | 3.01 KB | 0644 |
|
server_status_processes.php | File | 1.89 KB | 0644 |
|
server_status_queries.php | File | 1.35 KB | 0644 |
|
server_status_variables.php | File | 1.58 KB | 0644 |
|
server_user_groups.php | File | 1.79 KB | 0644 |
|
server_variables.php | File | 817 B | 0644 |
|
show_config_errors.php | File | 1.02 KB | 0644 |
|
sql.php | File | 6.24 KB | 0644 |
|
tbl_addfield.php | File | 3.79 KB | 0644 |
|
tbl_change.php | File | 6.6 KB | 0644 |
|
tbl_chart.php | File | 990 B | 0644 |
|
tbl_create.php | File | 3.09 KB | 0644 |
|
tbl_export.php | File | 4.27 KB | 0644 |
|
tbl_find_replace.php | File | 1.01 KB | 0644 |
|
tbl_get_field.php | File | 1.64 KB | 0644 |
|
tbl_gis_visualization.php | File | 1.23 KB | 0644 |
|
tbl_import.php | File | 910 B | 0644 |
|
tbl_indexes.php | File | 1.4 KB | 0644 |
|
tbl_operations.php | File | 14.12 KB | 0644 |
|
tbl_recent_favorite.php | File | 455 B | 0644 |
|
tbl_relation.php | File | 2.47 KB | 0644 |
|
tbl_replace.php | File | 16.27 KB | 0644 |
|
tbl_row_action.php | File | 4.95 KB | 0644 |
|
tbl_select.php | File | 1.14 KB | 0644 |
|
tbl_sql.php | File | 1.24 KB | 0644 |
|
tbl_structure.php | File | 1.72 KB | 0644 |
|
tbl_tracking.php | File | 5.82 KB | 0644 |
|
tbl_triggers.php | File | 141 B | 0644 |
|
tbl_zoom_select.php | File | 1.06 KB | 0644 |
|
themes.php | File | 894 B | 0644 |
|
transformation_overview.php | File | 1.89 KB | 0644 |
|
transformation_wrapper.php | File | 4.67 KB | 0644 |
|
url.php | File | 1.29 KB | 0644 |
|
user_password.php | File | 9.29 KB | 0644 |
|
version_check.php | File | 1.04 KB | 0644 |
|
view_create.php | File | 9.2 KB | 0644 |
|
view_operations.php | File | 3.79 KB | 0644 |
|