$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.")"); } 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.")"); 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); ?>