function BuildLayerDefinitionData($layerData, $layerVarName, &$output) { global $intermediateVar; $xmldoc = new DOMDocument(); $xmldoc->loadXML($layerData); $type = 0; $scaleRanges = $xmldoc->getElementsByTagName('VectorScaleRange'); if ($scaleRanges->length == 0) { $scaleRanges = $xmldoc->getElementsByTagName('GridScaleRange'); if ($scaleRanges->length == 0) { $scaleRanges = $xmldoc->getElementsByTagName('DrawingLayerDefinition'); if ($scaleRanges->length == 0) { return; } $type = 2; } else { $type = 1; } } $typeStyles = array("PointTypeStyle", "LineTypeStyle", "AreaTypeStyle", "CompositeTypeStyle"); $ruleNames = array("PointRule", "LineRule", "AreaRule", "CompositeRule"); for ($sc = 0; $sc < $scaleRanges->length; $sc++) { $scaleRange = $scaleRanges->item($sc); $minElt = $scaleRange->getElementsByTagName('MinScale'); $maxElt = $scaleRange->getElementsByTagName('MaxScale'); $minScale = "0"; $maxScale = "1000000000000.0"; // as MDF's VectorScaleRange::MAX_MAP_SCALE if ($minElt->length > 0) { $minScale = $minElt->item(0)->nodeValue; } if ($maxElt->length > 0) { $maxScale = $maxElt->item(0)->nodeValue; } $scaleRangeVarName = "sc" . $intermediateVar++; $output = $output . sprintf("var %s = new ScaleRangeItem(%s, %s, %s);\n", $scaleRangeVarName, $minScale, $maxScale, $layerVarName); $output = $output . sprintf("%s.children[%d] = %s;\n", $layerVarName, $sc, $scaleRangeVarName); if ($type != 0) { break; } $styleIndex = 0; for ($ts = 0, $count = count($typeStyles); $ts < $count; $ts++) { $typeStyle = $scaleRange->getElementsByTagName($typeStyles[$ts]); $catIndex = 0; for ($st = 0; $st < $typeStyle->length; $st++) { // We will check if this typestyle is going to be shown in the legend $showInLegend = $typeStyle->item($st)->getElementsByTagName("ShowInLegend"); if ($showInLegend->length > 0) { if ($showInLegend->item(0)->nodeValue == "false") { continue; } } // This typestyle does not need to be shown in the legend $rules = $typeStyle->item($st)->getElementsByTagName($ruleNames[$ts]); for ($r = 0; $r < $rules->length; $r++) { $rule = $rules->item($r); $label = $rule->getElementsByTagName("LegendLabel"); $filter = $rule->getElementsByTagName("Filter"); $labelText = $label->length == 1 ? $label->item(0)->nodeValue : ""; $filterText = $filter->length == 1 ? $filter->item(0)->nodeValue : ""; $output = $output . sprintf("%s.children[%d] = new StyleItem(\"%s\", \"%s\", %d, %d);\n", $scaleRangeVarName, $styleIndex++, StrEscape(trim($labelText)), StrEscape(trim($filterText)), $ts + 1, $catIndex++); } } } } $output = $output . sprintf("%s.lyrtype = %d;\n", $layerVarName, $type); }
function DeclareUiItems($coll, $varname) { global $cmds, $curFlyout; $def = ""; if ($coll != null) { for ($i = 0, $j = 0; $i < $coll->GetCount(); $i++) { $item = $coll->GetWidget($i); $it = $item->GetType(); if ($it == MgWebWidgetType::Separator) { $def = $def . sprintf("%s[%d] = new UiItem('');\n", $varname, $j++); } else { if ($it == MgWebWidgetType::Command) { $cmd = $item->GetCommand(); if (!isset($cmds[$cmd->GetName()])) { continue; } $cmdIndex = $cmds[$cmd->GetName()]; $def = $def . sprintf("%s[%d] = new CommandItem(\"%s\", %d);\n", $varname, $j++, StrEscape($cmd->GetLabel()), $cmdIndex); } else { $curFlyout++; $subVarname = "flyoutDef" . $curFlyout; $htmlName = "FlyoutDiv" . $curFlyout; $def = $def . sprintf("var %s = new Array()\n", $subVarname); $def = $def . DeclareUiItems($item->GetSubItems(), $subVarname); $def = $def . sprintf("%s[%d] = new FlyoutItem(\"%s\", %s, \"%s\", \"%s\");\n", $varname, $j++, StrEscape($item->GetLabel()), $subVarname, StrEscape($htmlName), $item->GetIconUrl()); } } } } return $def; }