[Chameleon] Help on Widget Development...
Nolte, Tim
Tim.Nolte at ipcswirelessinc.com
Tue Sep 4 13:09:20 EDT 2007
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
More information about the Chameleon
mailing list