[Chameleon] Help on Widget Development...

Nolte, Tim Tim.Nolte at ipcswirelessinc.com
Wed Sep 5 08:15:15 EDT 2007


Well, I was well aware that the unexpected end error was generally due
to something missing. But if anyone else looked through the code they
would have found no errors in the PHP code, as I did. What I did find
was an issue with using <<<EOT and just putting the raw HTML code in
there. I ended up needing to put it all in an actual string and escape
the double quotes. I was able also to trim down some extras that I found
I didn't need. Everything is working pretty great now. I'm still pretty
foggy on the whole widget creation process but I think I'm a little bit
closer.

The other thing I'd like to do is to use an native Chameleon button as
my submit button rather than a plain old form submit button. I'm not
quite sure how I do this. Would it be best to use an existing widget
like the UpdateMap widget and extend it for my widget or is there
something else? I want to make use of the Chameleon icons for my button.
Thanks for everyone's help.

----
Timothy J Nolte - tnolte at ilpcs.com
Associate Network Planning Engineer

iPCS Wireless, Inc.
4717 Broadmoor Ave, Suite G
Kentwood, MI 49512

Office: 616-656-5163
PCS:    616-706-2438
Fax:    616-554-6484
Web: www.ipcswirelessinc.com


-----Original Message-----
From: Julien-Samuel Lacroix [mailto:jlacroix at mapgears.com] 
Sent: Tuesday, September 04, 2007 2:03 PM
To: Nolte, Tim
Cc: chameleon at lists.maptools.org
Subject: Re: [Chameleon] Help on Widget Development...

Hi,

This kind of error happens if a curly bracket ('}') is missing or if you

have a comment line that is not commented correctly.

Julien

Nolte, Tim wrote:
> Norm,
> 
> Thanks for the help. I think I'm pretty close to getting there however
> when I try to include this widget the whole thing breaks with the
> following error:
> 
> 	Parse error: syntax error, unexpected $end in
>
/usr/local/chameleon-2.4.1/htdocs/widgets/ZoomToPoint/ZoomToPoint.widget
> .php on line 231
> 
> I've went through the code and I can't seem to find where the problem
> lies. Perhaps someone can see the error?
> 
> Here's my code:
> 
> /**
>  * ZoomToPoint Widget class
>  *
>  * @project     CWC2
>  * @revision    $Id: ZoomToPoint.widget.php,v 1.0 2007/09/04 12:00:00
> tnolte Exp $
>  * @purpose     Zoom To Point Widget class
>  * @author      Tim Nolte (tnolte at ilpcs.com) / Normand Savard
> (nsavard at ...)
>  * @copyright
>  * <b>Copyright (c) 2007, iPCS Wireless Inc.</b>
>  */
> include_once(dirname(__FILE__)."/../Widget.php");
> include_once(dirname(__FILE__)."/../Button.php");
> include_once(dirname(__FILE__)."/../Label.php");
> 
> /**
>  * ZoomToPoint
>  *
>  * @desc ZoomToPoint widget.
>  */
> class ZoomToPoint extends CWCWidget {
> 	var $mnImageWidth=400;
> 	var $mnImageHeight=300;
> 	var $mnScaleZoom=2;
> 	var $mszLabelClass = '';
> 	var $mszWidgetClass = '';
> 	
> 	function ZoomToPoint() {
> 		parent::CWCWidget();
> 		
> 		$this->szWidgetDescription = <<<EOT
> The Zoom To Point widget plots a know lat/long coordinate or a
geocoded
> address.
> EOT;
> 		
> 		//Create your require attributes
> 		$this->maAttributes["SCALEZOOM"] = new
> StringAttribute("SCALEZOOM", false);
> 		$this->maAttributes["IMAGEWIDTH"] = new
> StringAttribute("IMAGEWIDTH", false);
> 		$this->maAttributes["IMAGEHEIGHT"] = new
> StringAttribute("IMAGEHEIGHT", false);
> 		$this->maAttributes["LABELCLASS"] = new
> StringAttribute("LABELCLASS", false);
> 		$this->maAttributes["WIDGETCLASS"] = new
> StringAttribute("WIDGETCLASS", false);
> 	}
> 	
> 	function InitDefaults() {
> 		parent::InitDefaults();
> 		
> 		//Initialize your parameters here
> 		if (isset($this->maParams["LABELCLASS"]) &&
> $this->maParams["LABELCLASS"] != "") {
> 			$this->mszLabelClass =
> $this->maParams["LABELCLASS"];
> 		}
> 		
> 		if (isset($this->maParams["WIDGETCLASS"]) &&
> $this->maParams["WIDGETCLASS"] != "") {
> 			$this->mszWidgetClass =
> $this->maParams["WIDGETCLASS"];
> 		}
> 	}
> 	
> 	function GetHTMLHiddenVariables() {
> 		//Create your html variables to pass on your form
> variables
> 		$szVariable = "str_addr";
> 		$szValue = "<INPUT TYPE=HIDDEN NAME=$szVariable
> VALUE=\"\">";
> 		$aReturn[$szVariable] = $szValue;
> 		
> 		$szVariable = "city";
> 		$szValue = " <INPUT TYPE=HIDDEN NAME=$szVariable
> VALUE=\"\">";
> 		$aReturn[$szVariable] = $szValue;
> 		
> 		$szVariable = "state_cd";
> 		$szValue = " <INPUT TYPE=HIDDEN NAME=$szVariable
> VALUE=\"\">";
> 		$aReturn[$szVariable] = $szValue;
> 		
> 		$szVariable = "zip_cd";
> 		$szValue = " <INPUT TYPE=HIDDEN NAME=$szVariable
> VALUE=\"\">";
> 		$aReturn[$szVariable] = $szValue;
> 		
> 		$szVariable = "plot_lat";
> 		$szValue = " <INPUT TYPE=HIDDEN NAME=$szVariable
> VALUE=\"\">";
> 		$aReturn[$szVariable] = $szValue;
> 		
> 		$szVariable = "plot_long";
> 		$szValue = " <INPUT TYPE=HIDDEN NAME=$szVariable
> VALUE=\"\">";
> 		$aReturn[$szVariable] = $szValue;
> 		
> 		return $aReturn;
> 	}
> 
> 	function ParseURL() {
> 		//Your processing should be placed here
> 		if ($this->isVarSet('plot_lat') &&
> $this->getVar('plot_lat') != "" &&
> 		    $this->isVarSet('plot_long') &&
> $this->getVar('plot_long') != "") {
> 			$nPointX = $this->getVar('plot_long');
> 			$nPointY = $this->getVar('plot_lat');
> 			
> 			// new geocoded point layer name
> 			$layer_name = "Lat/Long Point";
> 		} elseif ( ( ($this->isVarSet('city') &&
> $this->getVar('city') != "") &&
> 				($this->isVarSet('state_cd') &&
> $this->getVar('state_cd') != "") ) ||
> 			($this->isVarSet('zip_cd') &&
> $this->getVar('zip_cd') != "") ) {
> 			
> 			// geocode address information
> 			$googleAPIKey = "...";
> 			$googleAPIUrl =
> "http://maps.google.com/maps/geo?output=xml&key=".$googleAPIKey;
> 			
> 			# Instantiate a new SOAP object, pointing to the
> Perl Web service
> 			$client = new SoapClient(null,
> 				array('location' =>
> "http://mapserver.ilpcs.com/cgi-bin/geocode.pl",
> 				'uri' =>
> "http://mapserver.ilpcs.co/geocode"));
> 			
> 			# address to geocode
> 			$data =
>
explode(",",$this->getVar('str_addr').",".$this->getVar('city').",".$thi
> s->getVar('state_cd').",".$this->getVar('zip_cd'));
> 			foreach ($data as $element) {
> 				if ($element != NULL && $element != '')
> {
> 					$address .= $element.", ";
> 				}
> 			}
> 			
> 			# Execute the remote call
> 			$result = $client->geocode($address);
> 			
> 			# Remove the latitudinal value from the returned
> array
> 			$lat = array_shift($result);
> 			
> 			# Remove the longitudinal value from the
> returned array
> 			$long = array_shift($result);
> 			
> 			if ($lat == '' || $long == '') {
> 				$address = "q=".str_replace('
> ','+',$address);
> 				$url = $googleAPIUrl."&".$address;
> 				
> 				// Retrieve the URL contents
> 				$page = file_get_contents($url);
> 				
> 				// Parse the returned XML file
> 				$xml = new SimpleXMLElement($page);
> 				
> 				// Parse the coordinate string
> 				list($long, $lat, $altitude) =
> explode(",", $xml->Response->Placemark->Point->coordinates);
> 			}
> 
> 			$nPointX = $long;
> 			$nPointY = $lat;
> 			
> 			// new geocoded point layer name
> 			$layer_name = "Address";
> 		} else {
> 			return;
> 		}
> 		
> 		$oMap = $this->moMapObject->oMap;
> 		$margin = .025;
> 	
>
$oMap->setExtent($long-$margin,$lat-$margin,$long+$margin,$lat+$margin);
> 		
> 		//create your layer (add your php script code to create
> a layer)
> 		$line = ms_newLineObj();
> 		$line->addXY($long,$lat);
> 		
> 		$shape = ms_newShapeObj(MS_SHAPE_POINT);
> 		$shape->add($line);
> 		
> 		//plot address lat/lon
> 		$gpoint_layer = $oMap->getLayerByName("Geocoded Point");
> 		$point_layer = ms_newLayerObj($oMap, $gpoint_layer);
> 		$point_layer->addFeature($shape);
> 		$point_layer->set("group", "Geocoded Points");
> 		$point_layer->set("name", $layer_name);
> 		$point_layer->set("status",MS_ON);
> 		
> 		$oPixelPos = ms_newPointObj();
> 		$oPixelPos->setXY($nPointX, $nPointY);
> 		
> 		$oMap->zoomscale($this->mnScaleZoom, $oPixelPos,
> $this->mnImageWidth, $this->mnImageHeight);
> 	}
> 	
> 	function GetJavascriptFunctions() {
> 		parent::GetJavascriptFunctions();
> 		
> 		$aReturn = array();
> 		$szJsFunctionName = "ZoomToPointQuery";
> 		$szFunction = <<<EOT
> 		/**
> 		* {$szJsFunctionName}
> 		* called to submit the form when a user click the go
> button.
> 		*/
> 		function {$szJsFunctionName}(obj) {
> 			{$this->mszHTMLForm}.submit();
> 			return;
> 		}
> 		EOT;
> 		$aReturn[$szJsFunctionName] = $szFunction;
> 		return $aReturn;
> 	}
> 	
> 	function DrawPublish() {
> 		//This function will create and display your text fields
> 		if (!$this->mbVisible)
> 			return;
> 		
> 		$szLabelClass = '';
> 		$szWidgetClass = '';
> 		if ($this->mszLabelClass != '') {
> 			$szLabelClass = "
> class='".$this->mszLabelClass."'";
> 		}
> 		
> 		if ($this->mszWidgetClass != '') {
> 			$szWidgetClass = "
> class='".$this->mszWidgetClass."'";
> 		}
> 		
> 		$szResult = <<<EOT
> <div style="margin-bottom:8px;padding-bottom:8px;border-bottom:1px
solid
> #CCCCCC;">
> 	<span{$szLabelClass}>Address:</span><br>
> 	<input{$szWidgetClass} type="text" name="str_addr"><br>
> 	<span{$szLabelClass}>City</span><br>
> 	<input{$szWidgetClass} type="text" name="city"><br>
> 	<span{$szLabelClass}>State:</span><br>
> 	<input{$szWidgetClass} type="text" name="state_cd" size="2"
> maxlength="2"><br>
> 	<span{$szLabelClass}>Zip:</span><br>
> 	<input{$szWidgetClass} type="text" name="zip_cd" maxlength="5">
> </div>
> <div style="margin-bottom:8px;">
> 	<span{$szLabelClass}>Lat:</span><br>
> 	<input{$szWidgetClass} type="text" name="plot_lat"><br>
> 	<span{$szLabelClass}>Long:</span><br>
> 	<input{$szWidgetClass} type="text" name="plot_long">
> </div>
> <input type="button" name="ZoomToPointQuery" value="Submit Query"
> onClick="ZoomToPointQuery();">
> 		EOT;
> 		
> 		return $szResult;
> 	}
> }
> 
> 
> ----
> Timothy J Nolte - tnolte at ilpcs.com
> Associate Network Planning Engineer
> 
> iPCS Wireless, Inc.
> 4717 Broadmoor Ave, Suite G
> Kentwood, MI 49512
> 
> Office: 616-656-5163
> PCS:    616-706-2438
> Fax:    616-554-6484
> Web: www.ipcswirelessinc.com
> 
> _______________________________________________
> Chameleon mailing list
> Chameleon at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/chameleon
> 

-- 
Julien-Samuel Lacroix
Mapgears
http://www.mapgears.com/




More information about the Chameleon mailing list