/**
 * Generate visualization for the GIS query results and save it to a file.
 *
 * @param array  $data                  data for the status chart
 * @param array  $visualizationSettings settings used to generate the chart
 * @param string $format                format of the visulaization
 * @param string $fileName              file name
 *
 * @return file File containing the visualization
 */
function PMA_GIS_saveToFile($data, $visualizationSettings, $format, $fileName)
{
    include_once './libraries/gis/GIS_Visualization.class.php';
    include_once './libraries/gis/GIS_Factory.class.php';
    if (isset($data[0])) {
        $visualization = new PMA_GIS_Visualization($data, $visualizationSettings);
        if ($format == 'svg') {
            $visualization->toFileAsSvg($fileName);
        } elseif ($format == 'png') {
            $visualization->toFileAsPng($fileName);
        } elseif ($format == 'pdf') {
            $visualization->toFileAsPdf($fileName);
        }
    }
}
// Generate parameters from value passed.
$gis_obj = PMA_GIS_Factory::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 PNG or SVG based visualization
$format = PMA_USR_BROWSER_AGENT == 'IE' && PMA_USR_BROWSER_VER <= 8 ? 'png' : 'svg';
$visualizationSettings = array('width' => 450, 'height' => 300, 'spatialColumn' => 'wkt');
$data = array(array('wkt' => $wkt_with_zero, 'srid' => $srid));
$visualization = PMA_GIS_Visualization::getByData($data, $visualizationSettings)->toImage($format);
$open_layers = PMA_GIS_Visualization::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_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']) . '" />';
$scripts = $header->getScripts();
$scripts->addFile('openlayers/OpenLayers.js');
$scripts->addFile('jquery/jquery.svg.js');
$scripts->addFile('tbl_gis_visualization.js');
$scripts->addFile('OpenStreetMap.js');
// If all the rows contain SRID, use OpenStreetMaps on the initial loading.
if (!isset($_REQUEST['displayVisualization'])) {
    $visualization = PMA_GIS_Visualization::get($sql_query, $visualizationSettings, $rows, $pos);
    if ($visualization->hasSrid()) {
        unset($visualizationSettings['choice']);
    }
    $visualizationSettings['choice'] = 'useBaseLayer';
}
$svgSupport = PMA_USR_BROWSER_AGENT == 'IE' && PMA_USR_BROWSER_VER <= 8 ? false : true;
$format = $svgSupport ? 'svg' : 'png';
$visualization = PMA_GIS_Visualization::get($sql_query, $visualizationSettings, $rows, $pos);
if ($visualizationSettings != null) {
    foreach ($visualization->getSettings() as $setting => $val) {
        if (!isset($visualizationSettings[$setting])) {
            $visualizationSettings[$setting] = $val;
        }
    }
}
$result = $visualization->toImage($format);
/**
 * Displays the page
 */
$url_params['sql_query'] = $sql_query;
$downloadUrl = 'tbl_gis_visualization.php' . PMA_URL_getCommon($url_params) . '&saveToFile=true';
$html = PMA\Template::get('gis_visualization/gis_visualization')->render(array('url_params' => $url_params, 'downloadUrl' => $downloadUrl, 'labelCandidates' => $labelCandidates, 'spatialCandidates' => $spatialCandidates, 'visualizationSettings' => $visualizationSettings, 'sql_query' => $sql_query, 'visualization' => $result, 'svgSupport' => $svgSupport, 'drawOl' => $visualization->asOl()));
$response->addHTML($html);