@@ -31,6 +31,7 @@ def __init__(self, projectFile, mapFile):
31
31
self .header = ''
32
32
self .footer = ''
33
33
self .symbolQueue = {}
34
+
34
35
35
36
# Set the options collected from the GUI
36
37
def setOptions (self , units , image , mapname , width , height , template , header , footer ):
@@ -215,15 +216,28 @@ def parsePostgisConnection( self, dataString ):
215
216
pg ['table' ] = ''
216
217
pg ['geom' ] = 'the_geom'
217
218
218
- cmp = dataString .split (" " )
219
+
220
+ whereCondition = dataString .split ("sql" )[1 ][1 :]
221
+ cmp = dataString .split ("sql" )[0 ].split (" " )
222
+
219
223
for c in cmp :
220
224
if c [:1 ] == "(" :
221
225
pg ['geom' ] = c [1 :][:- 1 ]
222
226
else :
223
227
kvp = c .split ("=" )
224
- pg [kvp [0 ]] = kvp [1 ]
225
-
226
- return pg
228
+ if (len (kvp ) >= 2 ):
229
+ pg [kvp [0 ]] = kvp [1 ]
230
+
231
+ connString = 'host=' + pg ['host' ] + " user=" + pg ['user' ]
232
+
233
+ if (len (pg ['password' ].replace ("\' " , "" )) > 0 ):
234
+ connString += " password=" + pg ['password' ].replace ("'" , "" )
235
+
236
+ connString += " dbname=" + pg ['dbname' ]
237
+
238
+ dataString = pg ['geom' ] + " FROM " + pg ['table' ].replace ("\" " , "" )
239
+ filterString = whereCondition .replace ("\" " , "" )
240
+ return (connString , dataString , filterString )
227
241
228
242
229
243
# Write the map layers
@@ -240,7 +254,7 @@ def writeMapLayers(self):
240
254
241
255
self .outFile .write (" LAYER\n " )
242
256
# write the name of the layer
243
- self .outFile .write (" NAME '" + lyr .getElementsByTagName ("layername" )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' ) + "'\n " )
257
+ self .outFile .write (" NAME '" + lyr .getElementsByTagName ("layername" )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' ). replace ( " \" " , "" ) + "'\n " )
244
258
if lyr .getAttribute ("type" ).encode ('utf-8' ) == 'vector' :
245
259
self .outFile .write (" TYPE " + lyr .getAttribute ("geometry" ).encode ('utf-8' ).upper () + "\n " )
246
260
elif lyr .getAttribute ("type" ).encode ('utf-8' ) == 'raster' :
@@ -264,11 +278,11 @@ def writeMapLayers(self):
264
278
265
279
if providerString == 'postgres' :
266
280
# it's a postgis layer
267
- pg = self .parsePostgisConnection (dataString )
281
+ ( pgConnString , sqlData , sqlFilter ) = self .parsePostgisConnection (dataString )
268
282
self .outFile .write (" CONNECTIONTYPE postgis\n " )
269
- self .outFile .write (" CONNECTION 'host= " + pg [ 'host' ] + " dbname=" + pg [ 'dbname' ]
270
- + " password=" + pg [ 'password' ] + " user=" + pg [ 'user' ] + "'\n " )
271
- self .outFile .write (" DATA '" + pg [ 'geom' ] + " FROM " + pg [ 'table' ] + "'\n " )
283
+ self .outFile .write (" CONNECTION '" + pgConnString + "' \n " )
284
+ self . outFile . write ( " DATA '" + sqlData + "'\n " )
285
+ self .outFile .write (" FILTER '" + sqlFilter + "'\n " )
272
286
273
287
elif providerString == 'wms' and lyr .getAttribute ("type" ).encode ('utf-8' ).upper () == 'RASTER' :
274
288
# it's a WMS layer
@@ -280,7 +294,7 @@ def writeMapLayers(self):
280
294
wmsNames = []
281
295
wmsStyles = []
282
296
for wmsLayer in wmsSubLayers :
283
- wmsNames .append ( wmsLayer .getElementsByTagName ('name' )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' ) )
297
+ wmsNames .append ( wmsLayer .getElementsByTagName ('name' )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' ). replace ( " \" " , "" ) )
284
298
try :
285
299
wmsStyles .append ( wmsLayer .getElementsByTagName ('style' )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' ) )
286
300
except :
@@ -305,7 +319,7 @@ def writeMapLayers(self):
305
319
# WMS settings for all layers
306
320
self .outFile .write (" METADATA\n " )
307
321
self .outFile .write (" 'wms_title' '"
308
- + lyr .getElementsByTagName ("layername" )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' ) + "'\n " )
322
+ + lyr .getElementsByTagName ("layername" )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' ). replace ( " \" " , "" ) + "'\n " )
309
323
self .outFile .write (" END\n " )
310
324
311
325
self .outFile .write (" STATUS DEFAULT\n " )
@@ -365,8 +379,7 @@ def simpleRenderer(self, layerNode, symbolNode):
365
379
self .outFile .write (" CLASS\n " )
366
380
367
381
self .outFile .write (" NAME '"
368
- + layerNode .getElementsByTagName ("layername" )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' )
369
- + "'\n " )
382
+ + layerNode .getElementsByTagName ("layername" )[0 ].childNodes [0 ].nodeValue .encode ('utf-8' ).replace ("\" " , "" ) + "' \n " )
370
383
371
384
self .outFile .write (" STYLE\n " )
372
385
# use the point symbol map to lookup the mapserver symbol type
0 commit comments