function makeTileCacheFile($user, $extentLayer = NULL) { //return; global $basePath; global $postgisdb; global $postgishost; global $postgispw; global $hostName; global $postgisschema; $postgisdb = $user; $table = $extentLayer; $postgisObject = new postgis(); $srs = "900913"; $geomField = $postgisObject->getGeometryColumns($table, "f_geometry_column"); if ($extentLayer) { $sql = "SELECT xmin(EXTENT(transform(" . $geomField . ",{$srs}))) AS TXMin,xmax(EXTENT(transform(" . $geomField . ",{$srs}))) AS TXMax, ymin(EXTENT(transform(" . $geomField . ",{$srs}))) AS TYMin,ymax(EXTENT(transform(" . $geomField . ",{$srs}))) AS TYMax FROM " . $table; $result = $postgisObject->execQuery($sql); //print_r($postgisObject->PDOerror); $row = $postgisObject->fetchRow($result); } ob_start(); echo "[cache]\n"; echo "type=Disk\n"; echo "base={$basePath}/tmp/{$user}\n\n"; //echo "type=AWSS3\n"; //echo "access_key=AKIAIZUYE3I462NPVANQ\n"; //echo "secret_access_key=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\n"; $sql = "SELECT * FROM settings.geometry_columns_view"; //echo $sql; $result = $postgisObject->execQuery($sql); if ($postgisObject->PDOerror) { makeExceptionReport($postgisObject->PDOerror); } while ($row = $postgisObject->fetchRow($result)) { echo "[{$row['f_table_schema']}.{$row['f_table_name']}]\n"; echo "type=WMS\n"; echo "url=http://127.0.0.1/cgi-bin/mapserv?map={$basePath}/wms/mapfiles/{$user}_{$row['f_table_schema']}.map\n"; echo "extension=png\n"; echo "bbox=-20037508.3427892,-20037508.3427892,20037508.3427892,20037508.3427892\n"; echo "maxResolution=156543.0339\n"; echo "metaTile=yes\n"; echo "metaSize=5,5\n"; echo "srs=EPSG:900913\n\n"; } $data = ob_get_clean(); @unlink("{$basePath}wms/cfgfiles/{$user}.tilecache.cfg"); $newFile = "{$basePath}wms/cfgfiles/{$user}.tilecache.cfg"; $fh = fopen($newFile, 'w'); fwrite($fh, $data); fclose($fh); }
$tables[] = $row['f_table_name']; } } foreach ($tables as $table) { $tableObj = new \app\models\table($postgisschema . "." . $table); $primeryKey = $tableObj->primeryKey; foreach ($tableObj->metaData as $key => $value) { if ($key != $primeryKey['attname']) { $fieldsArr[$table][] = $key; } } $fields = implode(",", $fieldsArr[$table]); $sql = "SELECT '{$fields}' FROM " . $postgisschema . "." . $table . " LIMIT 1"; $result = $postgisObject->execQuery($sql); if ($postgisObject->PDOerror) { makeExceptionReport($postgisObject->PDOerror); } $atts["name"] = $table . "_Type"; writeTag("open", "xsd", "complexType", $atts, True, True); $atts = null; $depth++; writeTag("open", "xsd", "complexContent", Null, True, True); $depth++; $atts["base"] = "gml:AbstractFeatureType"; writeTag("open", "xsd", "extension", $atts, True, True); $depth++; writeTag("open", "xsd", "sequence", NULL, True, True); $atts = null; $depth++; $sql = "SELECT * FROM settings.getColumns('geometry_columns.f_table_name=''{$table}'' AND geometry_columns.f_table_schema=''{$postgisschema}''',\n 'raster_columns.r_table_name=''{$table}'' AND raster_columns.r_table_schema=''{$postgisschema}''')"; $fieldConfRow = $postgisObject->fetchRow($postgisObject->execQuery($sql));
function doParse($arr) { global $postgisObject; global $user; global $version; global $postgisschema; global $parts; $serializer_options = array('indent' => ' '); $Serializer =& new XML_Serializer($serializer_options); foreach ($arr as $key => $featureMember) { if ($key == "Insert") { if (!is_array($featureMember[0]) && isset($featureMember)) { $featureMember = array(0 => $featureMember); } foreach ($featureMember as $hey) { foreach ($hey as $typeName => $feature) { if (is_array($feature)) { // Skip handles foreach ($feature as $field => $value) { $fields[] = $field; if (is_array($value)) { // Must be geom if array // We serialize the geometry back to XML for parsing $status = $Serializer->serialize($value); logfile::write("GML " . $Serializer->getSerializedData() . "\n\n"); $gmlCon = new gmlConverter(); $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array()); $values[] = array("{$field}" => $wktArr[0][0], "srid" => $wktArr[1][0]); unset($gmlCon); unset($wktArr); //logfile::write($Serializer->getSerializedData()."\n\n"); } else { $values[] = pg_escape_string($value); } } $forSql['tables'][] = $typeName; $forSql['fields'][] = $fields; $forSql['values'][] = $values; $fields = array(); $values = array(); $field = ""; $value = ""; // Start HTTP basic authentication //if(!$_SESSION["oauth_token"]) { $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $typeName, "authentication"); if ($auth == "Write" or $auth == "Read/write") { include '../inc/http_basic_authen.php'; } // } // End HTTP basic authentication } } } } if ($key == "Update") { if (!is_array($featureMember[0]) && isset($featureMember)) { $featureMember = array(0 => $featureMember); } $fid = 0; foreach ($featureMember as $hey) { $the_geom = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "f_geometry_column"); if (!is_array($hey['Property'][0]) && isset($hey['Property'])) { $hey['Property'] = array(0 => $hey['Property']); } foreach ($hey['Property'] as $pair) { $fields[$fid][] = $pair['Name']; if ($pair['Name'] == $the_geom) { // We serialize the geometry back to XML for parsing $status = $Serializer->serialize($pair['Value']); logfile::write($Serializer->getSerializedData() . "\n\n"); $gmlCon = new gmlConverter(); $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array()); $values[$fid][] = array("{$pair['Name']}" => current($wktArr[0]), "srid" => current($wktArr[1])); unset($gmlCon); unset($wktArr); } else { $values[$fid][] = $pair['Value']; } } $forSql2['tables'][$fid] = $hey['typeName']; $forSql2['fields'] = $fields; $forSql2['values'] = $values; $forSql2['wheres'][$fid] = parseFilter($hey['Filter'], $hey['typeName']); $fid++; // Start HTTP basic authentication //if(!$_SESSION["oauth_token"]) { $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "authentication"); if ($auth == "Write" or $auth == "Read/write") { include '../inc/http_basic_authen.php'; } // } // End HTTP basic authentication } $pair = array(); $values = array(); $fields = array(); } if ($key == "Delete") { if (!is_array($featureMember[0]) && isset($featureMember)) { $featureMember = array(0 => $featureMember); } foreach ($featureMember as $hey) { $forSql3['tables'][] = $hey['typeName']; $forSql3['wheres'][] = parseFilter($hey['Filter'], $hey['typeName']); // Start HTTP basic authentication //if(!$_SESSION["oauth_token"]) { $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "authentication"); if ($auth == "Write" or $auth == "Read/write") { include '../inc/http_basic_authen.php'; } // } // End HTTP basic authentication } } } echo '<wfs:WFS_TransactionResponse version="1.0.0" service="WFS" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc">'; // First we loop through inserts if (sizeof($forSql['tables']) > 0) { for ($i = 0; $i < sizeof($forSql['tables']); $i++) { if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "editable")) { $the_geom = $postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "f_geometry_column"); $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql['tables'][$i]); //$metaData = $postgisObject -> getMetaData($forSql['tables'][$i]); $sql = "INSERT into {$postgisschema}.{$forSql['tables'][$i]} ("; foreach ($forSql['fields'][$i] as $field) { $fields[] = "\"" . $field . "\""; } $sql .= implode(",", $fields); unset($fields); $sql .= ") VALUES("; foreach ($forSql['values'][$i] as $key => $value) { if (is_array($value)) { fb($forSql['fields'][$i][$key]); $values[] = "public.ST_Transform(public.ST_GeometryFromText('" . current($value) . "'," . next($value) . ")," . $postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "srid") . ")"; } elseif (!$value) { $values[] = "NULL"; } else { $values[] = $postgisObject->quote($value); } } $sql .= implode(",", $values); unset($values); $sql .= ") RETURNING {$primeryKey['attname']} as gid,public.ST_AsText(public.ST_Centroid({$the_geom})) as {$the_geom};"; // The query will return the new key $sqls['insert'][] = $sql; } else { $notEditable[$forSql['tables'][0]] = true; } } } // Second we loop through updates if (sizeof($forSql2['tables']) > 0) { for ($i = 0; $i < sizeof($forSql2['tables']); $i++) { //$metaData = $postgisObject -> getMetaData($forSql2['tables'][$i]); if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "editable")) { $the_geom = $postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "f_geometry_column"); $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql2['tables'][$i]); $sql = "UPDATE {$postgisschema}.{$forSql2['tables'][$i]} SET "; foreach ($forSql2['fields'][$i] as $key => $field) { if (is_array($forSql2['values'][$i][$key])) { // is geometry fb($forSql2['fields'][$i][$key]); $value = "public.ST_Transform(public.ST_GeometryFromText('" . current($forSql2['values'][$i][$key]) . "'," . next($forSql2['values'][$i][$key]) . ")," . $postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "srid") . ")"; } elseif (!$forSql2['values'][$i][$key]) { $value = "NULL"; } else { $value = $postgisObject->quote($forSql2['values'][$i][$key]); // We need to escape the string } if (!is_array($forSql2['values'][$i][$key])) { // is not geometry. Adding "" around field names $pairs[] = "\"" . $field . "\"=" . $value; } else { $pairs[] = $field . "=" . $value; } } $sql .= implode(",", $pairs); $sql .= " WHERE {$forSql2['wheres'][$i]} RETURNING {$primeryKey['attname']} as gid,public.ST_AsText(public.ST_Centroid({$the_geom})) as {$the_geom};"; unset($pairs); $sqls['update'][] = $sql; } else { $notEditable[$forSql2['tables'][0]] = true; } } } // Third we loop through deletes if (sizeof($forSql3['tables']) > 0) { for ($i = 0; $i < sizeof($forSql3['tables']); $i++) { if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql3['tables'][$i], "editable")) { $sqls['delete'][] = "DELETE FROM {$postgisschema}.{$forSql3['tables'][$i]} WHERE {$forSql3['wheres'][$i]};\n\n"; } else { $notEditable[$forSql3['tables'][0]] = true; } } } // We start sql BEGIN block $postgisObject->connect("PDO"); $postgisObject->begin(); // We fire the sqls if (isset($sqls)) { foreach ($sqls as $operation => $sql) { foreach ($sql as $singleSql) { if ($operation == "insert" || $operation == "update") { $results[$operation][] = $postgisObject->execQuery($singleSql, "PDO", "select"); // Returning PDOStatement object } else { $results[$operation] += $postgisObject->execQuery($singleSql, "PDO", "transaction"); // Returning interger } logfile::write("Sqls fired\n"); logfile::write("{$singleSql}\n"); } } } // If a layer is not editable, PDOerror is set. if (sizeof($notEditable) > 0) { $postgisObject->PDOerror[0] = "Layer not editable"; } // WFS message echo '<wfs:Message>'; echo '</wfs:Message>'; // TransactionResult if (sizeof($postgisObject->PDOerror) == 0) { echo '<wfs:TransactionResult><wfs:Status><wfs:SUCCESS/></wfs:Status></wfs:TransactionResult>'; $postgisObject->commit(); } else { echo '<wfs:TransactionResult><wfs:Status><wfs:FAILURE/></wfs:Status></wfs:TransactionResult>'; logfile::write("Error in\n"); foreach ($postgisObject->PDOerror as $str) { logfile::write("{$str}\n"); } logfile::write("ROLLBACK\n"); $postgisObject->rollback(); $results['insert'] = NULL; // Was object $results['update'] = NULL; // Was object $results['delete'] = 0; makeExceptionReport($postgisObject->PDOerror); // This output a exception and kills the script } // InsertResult if (sizeof($results['insert']) > 0) { reset($forSql['tables']); echo '<wfs:InsertResults handle="mygeocloud-WFS-default-handle">'; foreach ($results['insert'] as $res) { echo '<ogc:FeatureId fid="'; echo current($forSql['tables']) . "."; $row = $postgisObject->fetchRow($res); echo $row['gid']; echo '"/>'; //$version->set(current($forSql['tables']),"insert",$row[$postgisObject->getGeometryColumns(current($forSql['tables']), "f_geometry_column")]); next($forSql['tables']); } echo '</wfs:InsertResults>'; } // UpdateResult if (sizeof($results['update']) > 0) { reset($forSql2['tables']); echo '<wfs:UpdateResult>'; foreach ($results['update'] as $res) { echo '<ogc:FeatureId fid="'; echo current($forSql2['tables']) . "."; $row = $postgisObject->fetchRow($res); echo $row['gid']; echo '" />'; //$version->set(current($forSql2['tables']),"update",$row[$postgisObject->getGeometryColumns(current($forSql['tables']), "f_geometry_column")]); next($forSql2['tables']); } echo '</wfs:UpdateResult>'; } // TransactionSummary echo '<wfs:TransactionSummary>'; if (isset($results)) { foreach ($results as $operation => $result) { if ($operation == "insert") { echo "<wfs:totalInserted>" . sizeof($result) . "</wfs:totalInserted>"; } if ($operation == "update") { echo "<wfs:totalUpdated>" . sizeof($result) . "</wfs:totalUpdated>"; } if ($operation == "delete") { echo "<wfs:totalDeleted>" . $result . "</wfs:totalDeleted>"; } } } echo '</wfs:TransactionSummary>'; echo '</wfs:WFS_TransactionResponse>'; $postgisObject->free($result); }
function doParse($arr) { global $postgisObject; global $user; global $postgisschema; global $layerObj; global $parentUser; global $transaction; global $db; $serializer_options = array('indent' => ' '); // We start sql BEGIN block $postgisObject->connect("PDO"); $postgisObject->begin(); $Serializer = new XML_Serializer($serializer_options); $workflowData = array(); foreach ($arr as $key => $featureMember) { if ($key == "Insert") { if (!is_array($featureMember[0]) && isset($featureMember)) { $featureMember = array(0 => $featureMember); } foreach ($featureMember as $hey) { foreach ($hey as $typeName => $feature) { $typeName = dropAllNameSpaces($typeName); if (is_array($feature)) { // Skip handles // Remove ns from properties foreach ($feature as $field => $value) { $split = explode(":", $field); if ($split[1]) { $feature[dropAllNameSpaces($field)] = $value; unset($feature[$field]); } } // Check if table is versioned or has workflow. Add fields when clients doesn't send unaltered fields. $tableObj = new table($postgisschema . "." . $typeName); if (!array_key_exists("gc2_version_user", $feature) && $tableObj->versioning) { $feature["gc2_version_user"] = null; } if (!array_key_exists("gc2_status", $feature) && $tableObj->workflow) { $feature["gc2_status"] = null; } if (!array_key_exists("gc2_workflow", $feature) && $tableObj->workflow) { $feature["gc2_workflow"] = null; } foreach ($feature as $field => $value) { $fields[] = $field; $roleObj = $layerObj->getRole($postgisschema, $typeName, $user); $role = $roleObj["data"][$user]; if ($tableObj->workflow && ($role == "none" && $parentUser == false)) { makeExceptionReport("You don't have a role in the workflow of '{$typeName}'"); } if (is_array($value)) { // Must be geom if array // We serialize the geometry back to XML for parsing $Serializer->serialize($value); $gmlCon = new gmlConverter(); $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array()); $values[] = array("{$field}" => $wktArr[0][0], "srid" => $wktArr[1][0]); unset($gmlCon); unset($wktArr); //Log::write($Serializer->getSerializedData()."\n\n"); } elseif ($field == "gc2_version_user") { $values[] = $user; } elseif ($field == "gc2_status") { switch ($role) { case "author": $values[] = 1; break; case "reviewer": $values[] = 2; break; case "publisher": $values[] = 3; break; default: $values[] = 3; break; } } elseif ($field == "gc2_workflow") { switch ($role) { case "author": $values[] = "hstore('author', '{$user}')"; break; case "reviewer": $values[] = "hstore('reviewer', '{$user}')"; break; case "publisher": $values[] = "hstore('publisher', '{$user}')"; break; default: $values[] = "''"; break; } } else { $values[] = pg_escape_string($value); } } $forSql['tables'][] = $typeName; $forSql['fields'][] = $fields; $forSql['values'][] = $values; $fields = array(); $values = array(); //TODO check //$field = ""; //$value = ""; // Start HTTP basic authentication $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $typeName, "authentication"); if ($auth == "Write" or $auth == "Read/write") { $HTTP_FORM_VARS["TYPENAME"] = $typeName; include 'inc/http_basic_authen.php'; } // End HTTP basic authentication } } } } if ($key == "Update") { if (!is_array($featureMember[0]) && isset($featureMember)) { $featureMember = array(0 => $featureMember); } $fid = 0; foreach ($featureMember as $hey) { $hey["typeName"] = dropAllNameSpaces($hey["typeName"]); if (!is_array($hey['Property'][0]) && isset($hey['Property'])) { $hey['Property'] = array(0 => $hey['Property']); } // Check if table is versioned or has workflow. Add fields when clients doesn't send unaltered fields. $tableObj = new table($postgisschema . "." . $hey["typeName"]); foreach ($hey["Property"] as $v) { if ($v["Name"] == "gc2_version_user") { $gc2_version_user_flag = true; } if ($v["Name"] == "gc2_version_start_date") { $gc2_version_start_date_flag = true; } if ($v["Name"] == "gc2_status") { $gc2_status_flag = true; } if ($v["Name"] == "gc2_workflow") { $gc2_workflow_flag = true; } } if (!$gc2_version_user_flag && $tableObj->versioning) { $hey["Property"][] = array("Name" => "gc2_version_user", "Value" => null); } if (!$gc2_version_start_date_flag && $tableObj->versioning) { $hey["Property"][] = array("Name" => "gc2_version_start_date", "Value" => null); } if (!$gc2_status_flag && $tableObj->workflow) { $hey["Property"][] = array("Name" => "gc2_status", "Value" => null); } if (!$gc2_workflow_flag && $tableObj->workflow) { $hey["Property"][] = array("Name" => "gc2_workflow", "Value" => null); } //makeExceptionReport(print_r($hey, true)); foreach ($hey['Property'] as $pair) { $fields[$fid][] = $pair['Name']; $roleObj = $layerObj->getRole($postgisschema, $hey['typeName'], $user); $role = $roleObj["data"][$user]; if ($tableObj->workflow && ($role == "none" && $parentUser == false)) { makeExceptionReport("You don't have a role in the workflow of '{$hey['typeName']}'"); } if (is_array($pair['Value'])) { // Must be geom if array // We serialize the geometry back to XML for parsing $Serializer->serialize($pair['Value']); Log::write($Serializer->getSerializedData() . "\n\n"); $gmlCon = new gmlConverter(); $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array()); $values[$fid][] = array("{$pair['Name']}" => current($wktArr[0]), "srid" => current($wktArr[1])); unset($gmlCon); unset($wktArr); } else { $values[$fid][] = $pair['Value']; } } $forSql2['tables'][$fid] = $hey['typeName']; $forSql2['fields'] = $fields; $forSql2['values'] = $values; $forSql2['wheres'][$fid] = parseFilter($hey['Filter'], $hey['typeName']); $fid++; // Start HTTP basic authentication $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "authentication"); if ($auth == "Write" or $auth == "Read/write") { $HTTP_FORM_VARS["TYPENAME"] = $hey['typeName']; include 'inc/http_basic_authen.php'; } // End HTTP basic authentication } $pair = array(); $values = array(); $fields = array(); } if ($key == "Delete") { if (!is_array($featureMember[0]) && isset($featureMember)) { $featureMember = array(0 => $featureMember); } foreach ($featureMember as $hey) { $hey['typeName'] = dropAllNameSpaces($hey['typeName']); $forSql3['tables'][] = $hey['typeName']; $forSql3['wheres'][] = parseFilter($hey['Filter'], $hey['typeName']); $roleObj = $layerObj->getRole($postgisschema, $hey['typeName'], $user); $role = $roleObj["data"][$user]; $tableObj = new table($postgisschema . "." . $hey["typeName"]); if ($tableObj->workflow && ($role == "none" && $parentUser == false)) { makeExceptionReport("You don't have a role in the workflow of '{$hey['typeName']}'"); } // Start HTTP basic authentication $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "authentication"); if ($auth == "Write" or $auth == "Read/write") { $HTTP_FORM_VARS["TYPENAME"] = $hey['typeName']; include 'inc/http_basic_authen.php'; } // End HTTP basic authentication } } } echo '<wfs:WFS_TransactionResponse version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd">'; // First we loop through inserts if (sizeof($forSql['tables']) > 0) { for ($i = 0; $i < sizeof($forSql['tables']); $i++) { if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "editable")) { \app\controllers\Tilecache::bust($postgisschema . "." . $forSql['tables'][$i]); $gc2_workflow_flag = false; $roleObj = $layerObj->getRole($postgisschema, $forSql['tables'][$i], $user); $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql['tables'][$i]); $sql = "INSERT INTO {$postgisschema}.{$forSql['tables'][$i]} ("; foreach ($forSql['fields'][$i] as $key => $field) { if ($field != "gc2_version_uuid" && $field != "gc2_version_start_date" && $field != "gc2_version_gid") { $fields[] = "\"" . $field . "\""; } } $sql .= implode(",", $fields); unset($fields); $sql .= ") VALUES("; foreach ($forSql['values'][$i] as $key => $value) { if ($forSql['fields'][$i][$key] != "gc2_version_uuid" && $forSql['fields'][$i][$key] != "gc2_version_start_date" && $forSql['fields'][$i][$key] != "gc2_version_gid") { if (is_array($value)) { $values[] = "public.ST_Transform(public.ST_GeometryFromText('" . current($value) . "'," . next($value) . ")," . $postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "srid") . ")"; } elseif (!$value) { $values[] = "NULL"; } elseif ($forSql['fields'][$i][$key] == "gc2_workflow") { // Don't quote a hstore $values[] = $value; $gc2_workflow_flag = true; } else { $values[] = $postgisObject->quote($value); } } } $sql .= implode(",", $values); unset($values); $sql .= ") RETURNING {$primeryKey['attname']} as gid"; // The query will return the new key if ($gc2_workflow_flag) { $sql .= ",gc2_version_gid,gc2_status,gc2_workflow," . \app\inc\PgHStore::toPg($roleObj["data"]) . " as roles"; $gc2_workflow_flag = false; } $sqls['insert'][] = $sql; } else { $notEditable[$forSql['tables'][0]] = true; } } } // Second we loop through updates if (sizeof($forSql2['tables']) > 0) { for ($i = 0; $i < sizeof($forSql2['tables']); $i++) { if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "editable")) { \app\controllers\Tilecache::bust($postgisschema . "." . $forSql2['tables'][$i]); $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql2['tables'][$i]); $tableObj = new table($postgisschema . "." . $forSql2['tables'][$i]); if ($tableObj->versioning) { // Get original feature $query = "SELECT * FROM {$postgisschema}.{$forSql2['tables'][$i]} WHERE {$forSql2['wheres'][$i]}"; $res = $postgisObject->execQuery($query); $originalFeature = $postgisObject->fetchRow($res); // Check if feature is ended if ($originalFeature["gc2_version_end_date"]) { makeExceptionReport("You can't change the history!"); } // Clone original feature for ended version $intoArr = array(); $selectArr = array(); foreach ($originalFeature as $k => $v) { if ($k != $primeryKey['attname']) { if ($k == "gc2_version_end_date") { $intoArr[] = $k; $selectArr[] = "now()"; } else { $intoArr[] = $selectArr[] = $k; } } } $sql = "INSERT INTO {$postgisschema}.{$forSql2['tables'][$i]}("; $sql .= implode(",", $intoArr); $sql .= ")"; $sql .= " SELECT "; $sql .= implode(",", $selectArr); $sql .= " FROM {$postgisschema}.{$forSql2['tables'][$i]}"; $sql .= " WHERE {$forSql2['wheres'][$i]}"; //makeExceptionReport($sql); $postgisObject->execQuery($sql); } $sql = "UPDATE {$postgisschema}.{$forSql2['tables'][$i]} SET "; $roleObj = $layerObj->getRole($postgisschema, $forSql2['tables'][$i], $user); $role = $roleObj["data"][$user]; foreach ($forSql2['fields'][$i] as $key => $field) { if (is_array($forSql2['values'][$i][$key])) { // is geometry $value = "public.ST_Transform(public.ST_GeometryFromText('" . current($forSql2['values'][$i][$key]) . "'," . next($forSql2['values'][$i][$key]) . ")," . $postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "srid") . ")"; } elseif ($field == "gc2_version_user") { $value = $postgisObject->quote($user); } elseif ($field == "gc2_status") { switch ($role) { case "author": if ($originalFeature[$field] > 1) { makeExceptionReport("This feature has been " . ($originalFeature[$field] == 2 ? "reviewed" : "published") . ", so an author can't edit it."); } $value = 1; break; case "reviewer": if ($originalFeature[$field] > 2) { makeExceptionReport("This feature has been published, so a reviewer can't edit it."); } $value = 2; break; case "publisher": $value = 3; break; default: $value = $originalFeature[$field]; break; } } elseif ($field == "gc2_workflow") { switch ($role) { case "author": $value = "'{$originalFeature[$field]}'::hstore || hstore('author', '{$user}')"; break; case "reviewer": $value = "'{$originalFeature[$field]}'::hstore || hstore('reviewer', '{$user}')"; break; case "publisher": $value = "'{$originalFeature[$field]}'::hstore || hstore('publisher', '{$user}')"; break; default: $value = "'{$originalFeature[$field]}'::hstore"; break; } } elseif ($field == "gc2_version_start_date") { $value = "now()"; } elseif (!$forSql2['values'][$i][$key]) { $value = "NULL"; } else { $value = $postgisObject->quote($forSql2['values'][$i][$key]); // We need to escape the string } $pairs[] = "\"" . $field . "\" =" . $value; } $sql .= implode(",", $pairs); $sql .= " WHERE {$forSql2['wheres'][$i]} RETURNING {$primeryKey['attname']} as gid"; if ($tableObj->workflow) { $sql .= ",gc2_version_gid,gc2_status,gc2_workflow," . \app\inc\PgHStore::toPg($roleObj["data"]) . " as roles"; } //makeExceptionReport($sql); unset($pairs); $sqls['update'][] = $sql; } else { $notEditable[$forSql2['tables'][0]] = true; } } } // Third we loop through deletes if (sizeof($forSql3['tables']) > 0) { for ($i = 0; $i < sizeof($forSql3['tables']); $i++) { if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql3['tables'][$i], "editable")) { \app\controllers\Tilecache::bust($postgisschema . "." . $forSql3['tables'][$i]); $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql3['tables'][$i]); $tableObj = new table($postgisschema . "." . $forSql3['tables'][$i]); if ($tableObj->versioning) { // Check if its history $res = $postgisObject->execQuery("SELECT gc2_version_end_date FROM {$postgisschema}.{$forSql3['tables'][$i]} WHERE {$forSql3['wheres'][$i]}", "PDO", "select"); $checkRow = $postgisObject->fetchRow($res); if ($checkRow["gc2_version_end_date"]) { makeExceptionReport("You can't change the history!"); } // Update old record start $sql = "UPDATE {$postgisschema}.{$forSql3['tables'][$i]} SET gc2_version_end_date = now(), gc2_version_user='******'"; if ($tableObj->workflow) { // get original feature from feature $query = "SELECT * FROM {$postgisschema}.{$forSql3['tables'][$i]} WHERE {$forSql3['wheres'][$i]}"; $resStatus = $postgisObject->execQuery($query); $originalFeature = $postgisObject->fetchRow($resStatus); $status = $originalFeature["gc2_status"]; // Get role $roleObj = $layerObj->getRole($postgisschema, $forSql3['tables'][$i], $user); $role = $roleObj["data"][$user]; switch ($role) { case "author": if ($status > 1) { makeExceptionReport("This feature has been " . ($status == 2 ? "reviewed" : "published") . ", so an author can't delete it."); } $value = 1; break; case "reviewer": if ($status > 2) { makeExceptionReport("This feature has been published so a reviewer can't delete it."); } $value = 2; break; case "publisher": $value = 3; break; default: $value = $status; break; } $sql .= ", gc2_status = {$value}"; } // Update workflow if ($tableObj->workflow) { $workflow = $originalFeature["gc2_workflow"]; switch ($role) { case "author": $value = "'{$workflow}'::hstore || hstore('author', '{$user}')"; break; case "reviewer": $value = "'{$workflow}'::hstore || hstore('reviewer', '{$user}')"; break; case "publisher": $value = "'{$workflow}'::hstore || hstore('publisher', '{$user}')"; break; default: $value = "'{$workflow}'::hstore"; break; } $sql .= ", gc2_workflow = {$value}"; } $sql .= " WHERE {$forSql3['wheres'][$i]} RETURNING {$primeryKey['attname']} as gid"; if ($tableObj->workflow) { $sql .= ",gc2_version_gid,gc2_status,gc2_workflow," . \app\inc\PgHStore::toPg($roleObj["data"]) . " as roles"; } $sqls['delete'][] = $sql; // Update old record end } else { $sqls['delete'][] = "DELETE FROM {$postgisschema}.{$forSql3['tables'][$i]} WHERE {$forSql3['wheres'][$i]} RETURNING {$primeryKey['attname']} as gid"; } } else { $notEditable[$forSql3['tables'][0]] = true; } } } // We fire the sqls if (isset($sqls)) { foreach ($sqls as $operation => $sql) { foreach ($sql as $singleSql) { $results[$operation][] = $postgisObject->execQuery($singleSql, "PDO", "select"); // Returning PDOStatement object Log::write("Sqls fired\n"); Log::write("{$singleSql}\n"); } } } // If a layer is not editable, PDOerror is set. if (sizeof($notEditable) > 0) { $postgisObject->PDOerror[0] = "Layer not editable"; } // WFS message echo '<wfs:Message>'; echo '</wfs:Message>'; // TransactionResult if (sizeof($postgisObject->PDOerror) == 0) { echo '<wfs:TransactionResult handle="mygeocloud-WFS-default-handle"><wfs:Status><wfs:SUCCESS/></wfs:Status></wfs:TransactionResult>'; } else { echo '<wfs:TransactionResult handle="mygeocloud-WFS-default-handle"><wfs:Status><wfs:FAILURE/></wfs:Status></wfs:TransactionResult>'; Log::write("Error in\n"); foreach ($postgisObject->PDOerror as $str) { Log::write("{$str}\n"); } Log::write("ROLLBACK\n"); $postgisObject->rollback(); $results['insert'] = NULL; // Was object $results['update'] = NULL; // Was object $results['delete'] = 0; makeExceptionReport($postgisObject->PDOerror); // This output a exception and kills the script } // InsertResult if (sizeof($results['insert']) > 0) { if (isset($forSql['tables'])) { reset($forSql['tables']); } echo '<wfs:InsertResult>'; foreach ($results['insert'] as $res) { echo '<ogc:FeatureId fid="'; if (isset($forSql['tables'])) { echo current($forSql['tables']) . "."; } $row = $postgisObject->fetchRow($res); echo $row['gid']; echo '"/>'; if (isset($row["gc2_workflow"])) { $workflowData[] = array("schema" => $postgisschema, "table" => current($forSql['tables']), "gid" => $row['gid'], "user" => $user, "status" => $row['gc2_status'], "workflow" => $row['gc2_workflow'], "roles" => $row['roles'], "version_gid" => $row['gc2_version_gid'], "operation" => "insert"); } if (isset($forSql['tables'])) { next($forSql['tables']); } } echo '</wfs:InsertResult>'; } // UpdateResult if (sizeof($results['update']) > 0) { if (isset($forSql2['tables'])) { reset($forSql2['tables']); } echo '<wfs:UpdateResult>'; foreach ($results['update'] as $res) { echo '<ogc:FeatureId fid="'; if (isset($forSql2['tables'])) { echo current($forSql2['tables']) . "."; } $row = $postgisObject->fetchRow($res); echo $row['gid']; echo '" />'; if (isset($row["gc2_workflow"])) { $workflowData[] = array("schema" => $postgisschema, "table" => current($forSql2['tables']), "gid" => $row['gid'], "user" => $user, "status" => $row['gc2_status'], "workflow" => $row['gc2_workflow'], "roles" => $row['roles'], "version_gid" => $row['gc2_version_gid'], "operation" => "update"); } if (isset($forSql2['tables'])) { next($forSql2['tables']); } } echo '</wfs:UpdateResult>'; } // deleteResult if (sizeof($results['delete']) > 0) { if (isset($forSql3['tables'])) { reset($forSql3['tables']); } foreach ($results['delete'] as $res) { $row = $postgisObject->fetchRow($res); if (isset($row["gc2_workflow"])) { $workflowData[] = array("schema" => $postgisschema, "table" => current($forSql3['tables']), "gid" => $row['gid'], "user" => $user, "status" => $row['gc2_status'], "workflow" => $row['gc2_workflow'], "roles" => $row['roles'], "version_gid" => $row['gc2_version_gid'], "operation" => "delete"); } if (isset($forSql2['tables'])) { next($forSql2['tables']); } } } // TransactionSummary echo '<wfs:TransactionSummary>'; if (isset($results)) { foreach ($results as $operation => $result) { if ($operation == "insert") { echo "<wfs:totalInserted>" . sizeof($result) . "</wfs:totalInserted>"; } if ($operation == "update") { echo "<wfs:totalUpdated>" . sizeof($result) . "</wfs:totalUpdated>"; } if ($operation == "delete") { echo "<wfs:totalDeleted>" . sizeof($result) . "</wfs:totalDeleted>"; } } } echo '</wfs:TransactionSummary>'; echo '</wfs:WFS_TransactionResponse>'; if (sizeof($workflowData) > 0) { $sqls = array(); foreach ($workflowData as $w) { $sql = "INSERT INTO settings.workflow (f_schema_name,f_table_name,gid,status,gc2_user,roles,workflow,version_gid,operation)"; $sql .= " VALUES('{$w["schema"]}','{$w["table"]}',{$w["gid"]},{$w["status"]},'{$w["user"]}','{$w["roles"]}'::hstore,'{$w["workflow"]}'::hstore,{$w["version_gid"]},'{$w["operation"]}')"; $sqls[] = $sql; } // We fire the sqls foreach ($sqls as $sql) { $postgisObject->execQuery($sql, "PDO", "transaction"); } if (sizeof($postgisObject->PDOerror) > 0) { makeExceptionReport($postgisObject->PDOerror); // This output a exception and kills the script } } //makeExceptionReport(print_r($sqls, true)); $postgisObject->commit(); $postgisObject->free($result); }
function wfs_server() { // Manually tested this piece of code in order to check the requests. // Code based on a similar idea but build in Java header('Content-Type:text/xml; charset=UTF-8', TRUE); header('Connection:close', TRUE); //$userFromUri = "mhoegh"; // for testing logfile::write($userFromUri . "\n\n"); // We connect to the users db $postgisdb = $userFromUri; $srs = $srsFromUri; $postgisschema = $schemaFromUri; $postgisObject = new postgis(); //$user = new users($userFromUri); //$version = new version($user); $geometryColumnsObj = new GeometryColumns(); function microtime_float() { list($utime, $time) = explode(" ", microtime()); return (double) $utime + (double) $time; } $startTime = microtime_float(); //ini_set("display_errors", "On"); $thePath = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REDIRECT_URL']; //$thePath= "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; $server = "http://" . $_SERVER['SERVER_NAME']; $BBox = null; //end added $currentTable = null; $currentTag = null; $gen = array(); $gen[0] = ""; $level = 0; $depth = 0; $tables = array(); $fields = array(); $wheres = array(); $limits = array(); logfile::write("\nRequest\n\n"); logfile::write($HTTP_RAW_POST_DATA . "\n\n"); $unserializer_options = array('parseAttributes' => TRUE, 'typeHints' => FALSE); $unserializer = new XML_Unserializer($unserializer_options); /*$HTTP_RAW_POST_DATA = '<?xml version="1.0" encoding="utf-8"?><wfs:Transaction service="WFS" version="1.0.0" xmlns="http://www.opengis.net/wfs" xmlns:mrhg="http://twitter/mrhg" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><wfs:Insert idgen="GenerateNew"><mrhg:hej><the_geom><gml:MultiPolygon srsName="urn:x-ogc:def:crs:EPSG:6.9:4326"><gml:polygonMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:coordinates>5.0657329559,-41.1107215881 8.4824724197,-39.3435783386 4.3241734505,-34.6001853943 5.0657329559,-41.1107215881 </gml:coordinates></gml:LinearRing></gml:exterior></gml:Polygon></gml:polygonMember></gml:MultiPolygon></the_geom></mrhg:hej></wfs:Insert></wfs:Transaction>';*/ /*$HTTP_RAW_POST_DATA = '<?xml version="1.0"?><DescribeFeatureType version="1.1.0" service="WFS" xmlns="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"> <TypeName>california_coastline</TypeName></DescribeFeatureType>'; */ // Post method is used if ($HTTP_RAW_POST_DATA) { //$forUseInSpatialFilter = $HTTP_RAW_POST_DATA; // We store a unaltered version of the raw request $HTTP_RAW_POST_DATA = dropNameSpace($HTTP_RAW_POST_DATA); logfile::write($HTTP_RAW_POST_DATA . "\n\n"); $status = $unserializer->unserialize($HTTP_RAW_POST_DATA); $arr = $unserializer->getUnserializedData(); $request = $unserializer->getRootName(); //print_r($arr); switch ($request) { case "GetFeature": if (!is_array($arr['Query'][0])) { $arr['Query'] = array(0 => $arr['Query']); } for ($i = 0; $i < sizeof($arr['Query']); $i++) { if (!is_array($arr['Query'][$i]['PropertyName'])) { $arr['Query'][$i]['PropertyName'] = array(0 => $arr['Query'][$i]['PropertyName']); } } $HTTP_FORM_VARS["REQUEST"] = "GetFeature"; foreach ($arr['Query'] as $queries) { $HTTP_FORM_VARS["TYPENAME"] .= $queries['typeName'] . ","; if ($queries['PropertyName'][0]) { foreach ($queries['PropertyName'] as $PropertyNames) { // We check if typeName is prefix and add it if its not if (strpos($PropertyNames, ".")) { $HTTP_FORM_VARS["PROPERTYNAME"] .= $PropertyNames . ","; } else { $HTTP_FORM_VARS["PROPERTYNAME"] .= $queries['typeName'] . "." . $PropertyNames . ","; } } } if (is_array($queries['Filter']) && $arr['version'] == "1.0.0") { @($checkXml = simplexml_load_string($queries['Filter'])); if ($checkXml === FALSE) { makeExceptionReport("Filter is not valid"); } $wheres[$queries['typeName']] = parseFilter($queries['Filter'], $queries['typeName']); } } $HTTP_FORM_VARS["TYPENAME"] = dropLastChrs($HTTP_FORM_VARS["TYPENAME"], 1); $HTTP_FORM_VARS["PROPERTYNAME"] = dropLastChrs($HTTP_FORM_VARS["PROPERTYNAME"], 1); break; case "DescribeFeatureType": $HTTP_FORM_VARS["REQUEST"] = "DescribeFeatureType"; $HTTP_FORM_VARS["TYPENAME"] = $arr['TypeName']; //if (!$HTTP_FORM_VARS["TYPENAME"]) $HTTP_FORM_VARS["TYPENAME"] = $arr['typeName']; break; case "GetCapabilities": $HTTP_FORM_VARS["REQUEST"] = "GetCapabilities"; break; case "Transaction": $HTTP_FORM_VARS["REQUEST"] = "Transaction"; if (isset($arr["Insert"])) { $transactionType = "Insert"; } if ($arr["Update"]) { $transactionType = "update"; } if ($arr["Delete"]) { $transactionType = "Delete"; } break; } } else { if (sizeof($_GET) > 0) { logfile::write($_SERVER['QUERY_STRING'] . "\n\n"); $HTTP_FORM_VARS = $_GET; $HTTP_FORM_VARS = array_change_key_case($HTTP_FORM_VARS, CASE_UPPER); // Make keys case insensative $HTTP_FORM_VARS["TYPENAME"] = dropNameSpace($HTTP_FORM_VARS["TYPENAME"]); // We remove name space, so $where will get key without it. if ($HTTP_FORM_VARS['FILTER']) { @($checkXml = simplexml_load_string($HTTP_FORM_VARS['FILTER'])); if ($checkXml === FALSE) { makeExceptionReport("Filter is not valid"); } //$forUseInSpatialFilter = $HTTP_FORM_VARS['FILTER']; $status = $unserializer->unserialize(dropNameSpace($HTTP_FORM_VARS['FILTER'])); $arr = $unserializer->getUnserializedData(); $wheres[$HTTP_FORM_VARS['TYPENAME']] = parseFilter($arr, $HTTP_FORM_VARS['TYPENAME']); } } else { $HTTP_FORM_VARS = array(""); } } //HTTP_FORM_VARS is set in script if POST is used $HTTP_FORM_VARS = array_change_key_case($HTTP_FORM_VARS, CASE_UPPER); // Make keys case $HTTP_FORM_VARS["TYPENAME"] = dropNameSpace($HTTP_FORM_VARS["TYPENAME"]); $tables = explode(",", $HTTP_FORM_VARS["TYPENAME"]); $properties = explode(",", dropNameSpace($HTTP_FORM_VARS["PROPERTYNAME"])); $featureids = explode(",", $HTTP_FORM_VARS["FEATUREID"]); $bbox = explode(",", $HTTP_FORM_VARS["BBOX"]); // Start HTTP basic authentication //if(!$_SESSION["oauth_token"]) { $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $HTTP_FORM_VARS["TYPENAME"], "authentication"); //} // End HTTP basic authentication print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; ob_start(); if (!empty($properties[0])) { foreach ($properties as $property) { $__u = explode(".", $property); // Is it "/" for get method? // We first check if typeName is namespace if ($__u[1]) { foreach ($tables as $table) { if ($table == $__u[0]) { $fields[$table] .= $__u[1] . ","; } } } else { foreach ($tables as $table) { $fields[$table] .= $property . ","; } } } } if (!empty($featureids[0])) { foreach ($featureids as $featureid) { $__u = explode(".", $featureid); foreach ($tables as $table) { $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $table); if ($table == $__u[0]) { $wheresArr[$table][] = "{$primeryKey['attname']}={$__u[1]}"; } $wheres[$table] = implode(" OR ", $wheresArr[$table]); } } } //get the request switch (strtoupper($HTTP_FORM_VARS["REQUEST"])) { case "GETCAPABILITIES": getCapabilities($postgisObject); break; case "GETFEATURE": if (!$gmlFeatureCollection) { $gmlFeatureCollection = "wfs:FeatureCollection"; } print "<" . $gmlFeatureCollection . "\n"; print "xmlns=\"http://www.opengis.net/wfs\"\n"; print "xmlns:wfs=\"http://www.opengis.net/wfs\"\n"; print "xmlns:gml=\"http://www.opengis.net/gml\"\n"; print "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"; print "xmlns:{$gmlNameSpace}=\"{$gmlNameSpaceUri}\"\n"; if ($gmlSchemaLocation) { print "xsi:schemaLocation=\"{$gmlSchemaLocation}\""; } else { //print "xsi:schemaLocation=\"{$gmlNameSpaceUri} {$thePath}?REQUEST=DescribeFeatureType&TYPENAME=".$HTTP_FORM_VARS["TYPENAME"]." http://www.opengis.net/wfs ".str_replace("server.php","",$thePath)."schemas/wfs/1.0.0/WFS-basic.xsd\""; print "xsi:schemaLocation=\"{$gmlNameSpaceUri} {$thePath}?REQUEST=DescribeFeatureType&TYPENAME=" . $HTTP_FORM_VARS["TYPENAME"] . " http://www.opengis.net/wfs http://wfs.plansystem.dk:80/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd\""; } print ">\n"; doQuery("Select"); print "</" . $gmlFeatureCollection . ">"; break; case "DESCRIBEFEATURETYPE": getXSD($postgisObject); break; case "TRANSACTION": doParse($arr); break; default: makeExceptionReport("Don't know that request"); break; } }
$settings_viewer = new \app\models\Setting(); $response = $settings_viewer->get(); $userGroup = $response["data"]["userGroups"]->{$subUser}; if ($dbSplit[0] != $postgisschema) { $sql = "SELECT * FROM settings.geometry_columns_view WHERE _key_ LIKE :schema"; $res = $postgisObject->prepare($sql); try { $res->execute(array("schema" => $postgisschema . "." . $HTTP_FORM_VARS["TYPENAME"] . ".%")); } catch (\PDOException $e) { $response['success'] = false; $response['message'] = $e->getMessage(); $response['code'] = 401; makeExceptionReport($response); } while ($row = $postgisObject->fetchRow($res, "assoc")) { $privileges = (array) json_decode($row["privileges"]); switch ($transaction) { case false: if ($privileges[$userGroup ?: $subUser] == false || $privileges[$userGroup ?: $subUser] == "none") { makeExceptionReport(array("You don't have privileges to see this layer. Please contact the database owner, which can grant you privileges.")); } break; case true: if ($privileges[$userGroup ?: $subUser] == false || $privileges[$userGroup ?: $subUser] == "none" || $privileges[$userGroup ?: $subUser] == "read") { makeExceptionReport(array("You don't have privileges to edit this layer. Please contact the database owner, which can grant you privileges.")); } break; } } } }
function get_index() { $postgisObject = new Model(); ob_start(); ?> <tinyows online_resource="<?php echo App::$param['protocol'] ?: "http"; ?> ://<?php echo $_SERVER['HTTP_HOST']; ?> /cgi/tinyows.cgi" schema_dir="/usr/tinyows/schema/"> <pg user="******" dbname="<?php echo Connection::$param['postgisdb']; ?> " <?php if (Connection::$param['postgishost']) { echo " host=\"" . Connection::$param['postgishost'] . "\""; } if (Connection::$param['postgisport']) { echo " port=\"" . Connection::$param['postgisport'] . "\""; } if (Connection::$param['postgispw']) { echo " password=\"" . Connection::$param['postgispw'] . "\""; } ?> /> <metadata name="TinyOWS Server" title="TinyOWS Server - Demo Service"/> <?php $sql = "SELECT * FROM settings.geometry_columns_view WHERE f_table_schema='" . Connection::$param['postgisschema'] . "'"; $result = $postgisObject->execQuery($sql); if ($postgisObject->PDOerror) { makeExceptionReport($postgisObject->PDOerror); } while ($row = $postgisObject->fetchRow($result)) { if ($row['f_table_schema'] != "sqlapi") { ?> <layer retrievable="1" writable="1" ns_prefix="<?php echo $_SESSION["screen_name"]; ?> " ns_uri="http://www.twitter.com" name="<?php echo $row["f_table_name"]; ?> " schema="<?php echo $row["f_table_schema"]; ?> " srid="4326,3857,900913" title="<?php echo $row['f_table_title'] ?: $row['f_table_name']; ?> "/> <?php } } echo "</tinyows>"; $data = ob_get_clean(); $path = App::$param['path'] . "/app/wms/mapfiles/"; $name = Connection::$param['postgisdb'] . "_" . Connection::$param['postgisschema'] . ".xml"; @unlink($path . $name); $fh = fopen($path . $name, 'w'); fwrite($fh, $data); fclose($fh); return array("success" => true, "message" => "Tinyows file written"); }
function makeTileCacheFile($user, $extentLayer = NULL) { //return; global $basePath; global $postgisdb; global $postgishost; global $postgispw; global $hostName; global $postgisschema; $postgisdb = $user; $table = $extentLayer; $postgisObject = new postgis(); $srs = "900913"; $geomField = $postgisObject->getGeometryColumns($table, "f_geometry_column"); if ($extentLayer) { $sql = "SELECT xmin(EXTENT(transform(" . $geomField . ",{$srs}))) AS TXMin,xmax(EXTENT(transform(" . $geomField . ",{$srs}))) AS TXMax, ymin(EXTENT(transform(" . $geomField . ",{$srs}))) AS TYMin,ymax(EXTENT(transform(" . $geomField . ",{$srs}))) AS TYMax FROM " . $table; $result = $postgisObject->execQuery($sql); //print_r($postgisObject->PDOerror); $row = $postgisObject->fetchRow($result); } ob_start(); echo "[cache]\n"; echo "type=Disk\n"; echo "base={$basePath}/tmp/{$user}\n\n"; //echo "type=AWSS3\n"; //echo "access_key=AKIAIZUYE3I462NPVANQ\n"; //echo "secret_access_key=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\n"; //echo "db={$user}\n"; $sql = "SELECT * FROM settings.geometry_columns_view"; $result = $postgisObject->execQuery($sql); if ($postgisObject->PDOerror) { makeExceptionReport($postgisObject->PDOerror); } while ($row = $postgisObject->fetchRow($result)) { $layerArr[] = $row['f_table_schema'] . "." . $row['f_table_name']; $def = json_decode($row['def']); $def->meta_tiles == true ? $meta_tiles = "yes" : ($meta_tiles = "no"); $def->ttl < 120 ? $expire = 120 : ($expire = $def->ttl); echo "[{$row['f_table_schema']}.{$row['f_table_name']}]\n"; echo "type=WMS\n"; echo "url={$hostName}/wms/{$user}/{$row['f_table_schema']}/?"; echo "extension=png\n"; echo "bbox=-20037508.3427892,-20037508.3427892,20037508.3427892,20037508.3427892\n"; echo "maxResolution=156543.0339\n"; echo "metaBuffer=20\n"; echo "metaTile={$meta_tiles}\n"; echo "metaSize=3,3\n"; echo "srs=EPSG:900913\n"; echo "expire={$expire}\n\n"; } echo "[{$postgisschema}]\n"; echo "layers=" . implode(",", $layerArr) . "\n"; echo "type=WMS\n"; echo "url={$hostName}/wms/{$user}/{$postgisschema}/?TRANSPARENT=FALSE&"; echo "extension=png\n"; echo "bbox=-20037508.3427892,-20037508.3427892,20037508.3427892,20037508.3427892\n"; echo "maxResolution=156543.0339\n"; echo "metaBuffer=20\n"; echo "metaTile={$meta_tiles}\n"; echo "metaSize=3,3\n"; echo "srs=EPSG:900913\n"; echo "expire={$expire}\n\n"; $data = ob_get_clean(); @unlink("{$basePath}wms/cfgfiles/{$user}.tilecache.cfg"); $newFile = "{$basePath}wms/cfgfiles/{$user}.tilecache.cfg"; $fh = fopen($newFile, 'w'); fwrite($fh, $data); fclose($fh); }