/** * Index * * @return void */ public function indexAction() { // Throw error if no sql query is set if (!isset($this->sql_query) || $this->sql_query == '') { $this->response->setRequestStatus(false); $this->response->addHTML(Message::error(__('No SQL query was set to fetch data.'))); return; } // Execute the query and return the result $result = $this->dbi->tryQuery($this->sql_query); // Get the meta data of results $meta = $this->dbi->getFieldsMeta($result); // Find the candidate fields for label column and spatial column $labelCandidates = array(); $spatialCandidates = array(); foreach ($meta as $column_meta) { if ($column_meta->type == 'geometry') { $spatialCandidates[] = $column_meta->name; } else { $labelCandidates[] = $column_meta->name; } } // Get settings if any posted if (PMA_isValid($_REQUEST['visualizationSettings'], 'array')) { $this->visualizationSettings = $_REQUEST['visualizationSettings']; } if (!isset($this->visualizationSettings['labelColumn']) && isset($labelCandidates[0])) { $this->visualizationSettings['labelColumn'] = ''; } // If spatial column is not set, use first geometric column as spatial column if (!isset($this->visualizationSettings['spatialColumn'])) { $this->visualizationSettings['spatialColumn'] = $spatialCandidates[0]; } // Convert geometric columns from bytes to text. $pos = isset($_REQUEST['pos']) ? $_REQUEST['pos'] : $_SESSION['tmpval']['pos']; if (isset($_REQUEST['session_max_rows'])) { $rows = $_REQUEST['session_max_rows']; } else { if ($_SESSION['tmpval']['max_rows'] != 'all') { $rows = $_SESSION['tmpval']['max_rows']; } else { $rows = $GLOBALS['cfg']['MaxRows']; } } $this->visualization = GISVisualization::get($this->sql_query, $this->visualizationSettings, $rows, $pos); if (isset($_REQUEST['saveToFile'])) { $this->saveToFileAction(); return; } $this->response->getHeader()->getScripts()->addFiles(array('openlayers/OpenLayers.js', 'jquery/jquery.svg.js', 'tbl_gis_visualization.js')); // If all the rows contain SRID, use OpenStreetMaps on the initial loading. if (!isset($_REQUEST['displayVisualization'])) { if ($this->visualization->hasSrid()) { $this->visualizationSettings['choice'] = 'useBaseLayer'; } else { unset($this->visualizationSettings['choice']); } } $this->visualization->setUserSpecifiedSettings($this->visualizationSettings); if ($this->visualizationSettings != null) { foreach ($this->visualization->getSettings() as $setting => $val) { if (!isset($this->visualizationSettings[$setting])) { $this->visualizationSettings[$setting] = $val; } } } /** * Displays the page */ $this->url_params['sql_query'] = $this->sql_query; $downloadUrl = 'tbl_gis_visualization.php' . PMA_URL_getCommon(array_merge($this->url_params, array('saveToFile' => true, 'session_max_rows' => $rows, 'pos' => $pos))); $html = Template::get('table/gis_visualization/gis_visualization')->render(array('url_params' => $this->url_params, 'downloadUrl' => $downloadUrl, 'labelCandidates' => $labelCandidates, 'spatialCandidates' => $spatialCandidates, 'visualizationSettings' => $this->visualizationSettings, 'sql_query' => $this->sql_query, 'visualization' => $this->visualization->toImage('svg'), 'drawOl' => $this->visualization->asOl())); $this->response->addHTML($html); }
$geom_type = $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']) . '" />';