require_once dirname(__FILE__) . '/helpers.php'; // Params $map = get_map_path(@$_REQUEST['map']); // Name of the layer to query $layername = @$_REQUEST['layer']; // Field name from where unique values are read $field = @$_REQUEST['field']; if (!$field) { err500('field parameter missing'); } // Get project $project = get_project($map); // Get layer $layer = get_layer($layername, $project); try { $dbh = get_connection($layer, $project, $map); $ds_parms = get_layer_info($layer, $project); $_field = preg_replace('/[^A-z0-9_-]]/', '', $field); $stmt = $dbh->prepare("SELECT DISTINCT {$_field} FROM {$ds_parms['table']} ORDER BY {$_field}"); $stmt->execute(); while ($row = $stmt->fetchColumn()) { $result[] = $row; } $json_result = json_encode($result); header('Content-type: application/json'); header('Content-length: ' . strlen($json_result)); echo $json_result; exit; } catch (PDOException $e) { err500('db error: ' . $e->getMessage()); }
/** * Get connection from layer */ function get_connection($layer, $project, $map_path) { $ds_parms = get_layer_info($layer, $project); if ($ds_parms['provider'] == 'postgres') { $PDO_DSN = "pgsql:host={$ds_parms['host']};port={$ds_parms['port']};dbname={$ds_parms['dbname']}"; } else { // Spatialite // Calculate directory $dbpath = preg_replace("/'?([^']+)'?/", '\\1', $ds_parms['dbname']); if ($dbpath[0] != DIRECTORY_SEPARATOR) { $dbpath = dirname($map_path) . DIRECTORY_SEPARATOR . $dbpath; } if (!file_exists($dbpath)) { err500('sqlite fle not found.'); } $PDO_DSN = "sqlite:{$dbpath}"; } try { $dbh = new PDO($PDO_DSN, @$ds_parms['user'], @$ds_parms['password']); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { err500('db error: ' . $e->getMessage()); } if ($ds_parms['provider'] == 'spatialite') { try { $sql = "SELECT load_extension('libspatialite.so');"; $stmt = $dbh->prepare($sql); $stmt->execute(); } catch (PDOException $e) { err500('db error loading spatialite: ' . $e->getMessage()); } } return $dbh; }