Upgraded phpmyadmin to 4.0.4 (All Languages) - No modifications yet
[openemr.git] / phpmyadmin / libraries / gis_visualization.lib.php
blob63ad18814dbc2f19fae085d519617d86a4e61601
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 /**
4 * Functions used to generate GIS visualizations.
6 * @package PhpMyAdmin
7 */
11 /**
12 * Returns a modified sql query with only the label column
13 * and spatial column(wrapped with 'ASTEXT()' function).
15 * @param string $sql_query original sql query
16 * @param array $visualizationSettings settings for the visualization
18 * @return the modified sql query.
20 function PMA_GIS_modifyQuery($sql_query, $visualizationSettings)
22 $modified_query = 'SELECT ';
24 $analyzed_query = PMA_SQP_analyze(PMA_SQP_parse($sql_query));
25 // If select clause is not *
26 if (trim($analyzed_query[0]['select_expr_clause']) != '*') {
27 // If label column is chosen add it to the query
28 if (isset($visualizationSettings['labelColumn'])
29 && $visualizationSettings['labelColumn'] != ''
30 ) {
31 // Check to see whether an alias has been used on the label column
32 $is_label_alias = false;
33 foreach ($analyzed_query[0]['select_expr'] as $select) {
34 if ($select['alias'] == $visualizationSettings['labelColumn']) {
35 $modified_query .= sanitize($select) . ' AS `'
36 . $select['alias'] . '`, ';
37 $is_label_alias = true;
38 break;
41 // If no alias have been used on the label column
42 if (! $is_label_alias) {
43 foreach ($analyzed_query[0]['select_expr'] as $select) {
44 if ($select['column'] == $visualizationSettings['labelColumn']) {
45 $modified_query .= sanitize($select) . ', ';
51 // Check to see whether an alias has been used on the spatial column
52 $is_spatial_alias = false;
53 foreach ($analyzed_query[0]['select_expr'] as $select) {
54 if ($select['alias'] == $visualizationSettings['spatialColumn']) {
55 $sanitized = sanitize($select);
56 $modified_query .= 'ASTEXT(' . $sanitized . ') AS `'
57 . $select['alias'] . '`, ';
58 // Get the SRID
59 $modified_query .= 'SRID(' . $sanitized . ') AS `srid` ';
60 $is_spatial_alias = true;
61 break;
64 // If no alias have been used on the spatial column
65 if (! $is_spatial_alias) {
66 foreach ($analyzed_query[0]['select_expr'] as $select) {
67 if ($select['column'] == $visualizationSettings['spatialColumn']) {
68 $sanitized = sanitize($select);
69 $modified_query .= 'ASTEXT(' . $sanitized
70 . ') AS `' . $select['column'] . '`, ';
71 // Get the SRID
72 $modified_query .= 'SRID(' . $sanitized . ') AS `srid` ';
76 // If select clause is *
77 } else {
78 // If label column is chosen add it to the query
79 if (isset($visualizationSettings['labelColumn'])
80 && $visualizationSettings['labelColumn'] != ''
81 ) {
82 $modified_query .= '`' . $visualizationSettings['labelColumn'] .'`, ';
85 // Wrap the spatial column with 'ASTEXT()' function and add it
86 $modified_query .= 'ASTEXT(`' . $visualizationSettings['spatialColumn']
87 . '`) AS `' . $visualizationSettings['spatialColumn'] . '`, ';
89 // Get the SRID
90 $modified_query .= 'SRID(`' . $visualizationSettings['spatialColumn']
91 . '`) AS `srid` ';
94 // Append the rest of the query
95 $from_pos = stripos($sql_query, 'FROM');
96 $modified_query .= substr($sql_query, $from_pos);
97 return $modified_query;
100 // Local function to sanitize the expression taken
101 // from the results of PMA_SQP_analyze function.
102 function sanitize($select)
104 $table_col = $select['table_name'] . "." . $select['column'];
105 $db_table_col = $select['db'] . "." . $select['table_name']
106 . "." . $select['column'];
108 if ($select['expr'] == $select['column']) {
109 return "`" . $select['column'] . "`";
110 } elseif ($select['expr'] == $table_col) {
111 return "`" . $select['table_name'] . "`.`" . $select['column'] . "`";
112 } elseif ($select['expr'] == $db_table_col) {
113 return "`" . $select['db'] . "`.`" . $select['table_name']
114 . "`.`" . $select['column'] . "`";
116 return $select['expr'];
120 * Formats a visualization for the GIS query results.
122 * @param array $data Data for the status chart
123 * @param array &$visualizationSettings Settings used to generate the chart
124 * @param string $format Format of the visulaization
126 * @return string HTML and JS code for the GIS visualization
128 function PMA_GIS_visualizationResults($data, &$visualizationSettings, $format)
130 include_once './libraries/gis/pma_gis_visualization.php';
131 include_once './libraries/gis/pma_gis_factory.php';
133 if (! isset($data[0])) {
134 // empty data
135 return __('No data found for GIS visualization.');
136 } else {
137 $visualization = new PMA_GIS_Visualization($data, $visualizationSettings);
138 if ($visualizationSettings != null) {
139 foreach ($visualization->getSettings() as $setting => $val) {
140 if (! isset($visualizationSettings[$setting])) {
141 $visualizationSettings[$setting] = $val;
145 if ($format == 'svg') {
146 return $visualization->asSvg();
147 } elseif ($format == 'png') {
148 return $visualization->asPng();
149 } elseif ($format == 'ol') {
150 return $visualization->asOl();
156 * Generate visualization for the GIS query results and save it to a file.
158 * @param array $data data for the status chart
159 * @param array $visualizationSettings settings used to generate the chart
160 * @param string $format format of the visulaization
161 * @param string $fileName file name
163 * @return file File containing the visualization
165 function PMA_GIS_saveToFile($data, $visualizationSettings, $format, $fileName)
167 include_once './libraries/gis/pma_gis_visualization.php';
168 include_once './libraries/gis/pma_gis_factory.php';
170 if (isset($data[0])) {
171 $visualization = new PMA_GIS_Visualization($data, $visualizationSettings);
173 if ($format == 'svg') {
174 $visualization->toFileAsSvg($fileName);
175 } elseif ($format == 'png') {
176 $visualization->toFileAsPng($fileName);
177 } elseif ($format == 'pdf') {
178 $visualization->toFileAsPdf($fileName);