$v) {
$key_arr = explode(':', $k);
if($key_arr[0] == 'feature') {
$attr = $key_arr[1];
if($operation != 'create' || $key_arr[1] != $primaryKeyColumn) {
$feature_info[$attr] = $v;
}
if($v != null && $v != '') {
$requiredForUpdate[$attr] = true;
$requiredForCreate[$attr] = true;
}
}
}
$sql = '';
if($operation == 'create') {
# Check for required fields
foreach($requiredForCreate as $k=>$v) {
if(!$v) {
print "Missing required field: $k";
die;
}
}
$columnNames = implode(',', array_keys($feature_info));
$columnValues = array();
$value_arr = array();
$paramCount = 1;
# Add an id
# Get an ID value for the new item.
$pk_sql = sprintf("select nextval('%s') as new_id", $primaryKeySequence);
$result = pg_query($pk_sql);
$line = pg_fetch_array($result, null, PGSQL_ASSOC);
$newId = $line['new_id'];
# Add a primary key to the insert statement
$columnNames = $primaryKeyColumn.','.$columnNames;
array_push($columnValues, $newId);
foreach($feature_info as $k=>$v) {
if($k == $geometryColumn) {
array_push($columnValues, "geomfromtext($".$paramCount.", " . $srid .")");
} else {
array_push($columnValues, "$".$paramCount);
}
array_push($value_arr, $v);
$paramCount++;
}
# Prepare the statement
$sql = 'insert into %s (%s) values (%s)';
$columnValues = implode(',', $columnValues);
pg_prepare($connection, 'insert_sql', sprintf($sql, $tableName, $columnNames, $columnValues));
$result = pg_execute($connection, 'insert_sql', $value_arr);
$message = sprintf("Feature Inserted (Created ID: %d).
", $newId);
} else if($operation == 'update') {
# Check for required fields
foreach($requiredForUpdate as $k=>$v) {
if(!$v) {
print "Missing required field: $k";
die;
}
}
# Die if there is no ID available for doing an update.
$id = (int)$feature_info[$primaryKeyColumn];
print $id < 1;
if($feature_info[$primaryKeyColumn] < 1) {
print 'No Feature ID available for update.';
die;
}
$paramCount = 1;
$bindValues = array();
$updateParts = array();
foreach($feature_info as $k=>$v) {
if($k == $geometryColumn) {
array_push($updateParts, $k." = geomfromtext($".$paramCount.", " . $srid .")");
array_push($bindValues, $v);
$paramCount++;
} else if($k != $primaryKeyColumn) {
array_push($updateParts, $k." = $".$paramCount);
array_push($bindValues, $v);
$paramCount++;
}
}
array_push($bindValues, $feature_info[$primaryKeyColumn]);
$sql = sprintf('update %s set %s where %s = $%d', $tableName, implode(',',$updateParts), $primaryKeyColumn, $paramCount);
pg_prepare($connection, 'update_sql', sprintf($sql, $tableName));
$result = pg_execute($connection, 'update_sql', $bindValues);
$message = sprintf('Feature Updated (%s=%d)', $primaryKeyColumn, $feature_info[$primaryKeyColumn]);
} else if($operation == 'delete') {
# Die if there is no ID available for deleting.
if($feature_info[$primaryKeyColumn] < 1) {
print 'No Feature ID specified to delete.
';
die;
}
$sql = 'delete from %s where %s = $1';
# Prepare the ole delete statement
pg_prepare($connection, 'delete_sql', sprintf($sql, $tableName, $primaryKeyColumn));
$result = pg_execute($connection, 'delete_sql', array($feature_info[$primaryKeyColumn]));
$message = sprintf("Feature Removed (%s=%d)", $primaryKeyColumn, $feature_info[$primaryKeyColumn]);
} else {
printf("Unknown operation: %s", $operation);
die;
}
header('Content-type: text/xml');
print "";
print "";
# Print a little header information
//print "GeoMOOSE Feature Editor";
//print "
";
//print $message;
//print "
";
//print "";
//print "Back to Layers List";
//print "";
//print "]]>";
print "";
pg_close($connection);
?>