map = $map; $this->allGroups = $allGroups; $this->gLanguage = $gLanguage; $this->map2unicode = $map2unicode; $initGroups = $this->_defineLists(); $this->_createGroups($initGroups); } function _defineLists() { $groupOrder = $this->allGroups; $mapGroupsNames = $this->map->getAllGroupNames(); $mapLayers = $this->map->getAllLayerNames(); // Create array for groups in map file foreach ($mapGroupsNames as $mgn) { $mapGroups[$mgn] = $this->map->getLayersIndexByGroup($mgn); } //Add layers as groups if not assigned to any group foreach($mapLayers as $l) { $layer = $this->map->getLayerByName($l); $layIdx = $layer->index; $layGrp = $layer->group; if ($layGrp == "") { $mapGroups[$l] = array($layIdx); } } // Sort group array according to order of $groupOrder foreach($groupOrder as $g) { if (count($mapGroups[$g]) > 0) { $initGroups[$g] = $mapGroups[$g]; } else { error_log("Could not create group '$g' defined in groupOrder in 'config.ini'. Check if name is correct.", 0); } } return $initGroups; } /** * Initialize GROUPS * set group and layer properties * */ function _createGroups($initGroups) { foreach ($initGroups as $gn=>$layerList) { $group = new GROUP($gn); $i = 1; // Loop through LAYERS of current group foreach ($layerList as $layIdx) { // Get layer info from map file $mapLay = $this->map->getLayer($layIdx); $mapLayName = $mapLay->name; $mapLayType = $mapLay->type; // Write layer properties to glayer object $glayer = new GLAYER($mapLayName); $glayer->setLayerIdx($layIdx); $glayer->setLayerType($mapLayType); // Add result field list if ($mapLayType <= 3 || $mapLayType == 5) { // result fields only for queryable layers point (0), line (1), polygon (2), annotation (5) $selFields0 = $this->_initResultFields($this->map, $mapLay, $mapLayType); // Trim spaces if (count($selFields0) > 0) { $selFields = array(); foreach ($selFields0 as $sf0) { // If field name starts with '&' then translate $sf = (substr(trim($sf0), 0, 1) == '&' ? _p(trim($sf0)) : trim($sf0)); $selFields[] = $sf; } $glayer->setResFields($selFields); } } // Add hyperlink fields if ($this->_getHyperFieldList($mapLay)) { $glayer->setHyperFields($this->_getHyperFieldList($mapLay)); } // Add JOIN properties if defined if ($this->_getJoinProperties($mapLay)) { $glayer->setTableJoin($this->_getJoinProperties($mapLay)); } // Add classes $numclasses = $mapLay->numclasses; $classes = array(); for ($cl=0; $cl < $numclasses; $cl++) { $class = $mapLay->getClass($cl); $className = $class->name; if ($this->map2unicode) $className = utf8_encode($className); $classname = _p(trim($className)); $classes[] = $classname; //str_replace("'", "\\'", $classname); } $glayer->setClasses($classes); // Check/Set labelitems if defined if ($mapLay->labelitem) { $labelItem = _p($mapLay->labelitem); $glayer->setLabelItem($labelItem); } // Check/Set layer transparency (opacity) $glayer->setTransparency($mapLay->transparency); // Check if layer is XY layer $XYLayerPropStr = $this->_returnMetaData($mapLay, "XYLAYER_PROPERTIES"); if ($XYLayerPropStr != "") { $glayer->setXYLayerAttribute(); $XYLayerPropList = $this->_getXYLayerPropList($XYLayerPropStr); $glayer->setXYLayerProperties($XYLayerPropList); // Set in sessionid that XYLayer exists $_SESSION["existsXYLayer"] = 1; } //Check for skipLegend // 1: only for TOC_TREE, 2: always skip legend $skipLegend = $this->_returnMetaData($mapLay, "SKIP_LEGEND"); $skipLegend = ($skipLegend == "" ? 0 : $skipLegend); $glayer->setSkipLegend($skipLegend); // Layer Encoding $glayer->setLayerEncoding($this->_returnMetaData($mapLay, "LAYER_ENCODING")); // now add layer to group $group->addLayer($glayer); // set group description and result headers, process only for 1st layer of group if ($i == 1) { // Set group description $description = $this->_initDescription($mapLay); $group->setDescription($description); // Set result group headers if ($mapLayType <= 3 || $mapLayType == 5) { $selHeaders = $this->_initResultHeaders($this->map, $mapLay, $mapLayType, $this->gLanguage); $group->setResHeaders($selHeaders); } $i = 0; } } $grouplist[$gn] = $group; } // Save everything in session $_SESSION["grouplist"] = $grouplist; } /** * Get layer description, result fields and headers from map file * or take default values if there's no definition in map file */ function _returnMetaData($layer, $metaTag) { $metaString = $layer->getMetaData($metaTag); return $metaString; } function _initResultFields($map, $mapLay, $mapLayType) { $metaString = $this->_returnMetaData($mapLay, "RESULT_FIELDS"); if ($metaString != "") { $metaList = split(",", $metaString); } else { if ($mapLayType != 3) { $mapLay->open(); $metaList = $mapLay->getItems(); } else { $metaList = array(); } } return $metaList; } function _initResultHeaders($map, $mapLay, $mapLayType) { $metaString = $this->_returnMetaData($mapLay, "RESULT_HEADERS"); if ($metaString != "") { $metaList0 = split(",", $metaString); foreach ($metaList0 as $m) { if ($this->map2unicode) $m = utf8_encode($m); $metaList[] = _p(trim($m)); } } else { if ($mapLayType != 3) { $mapLay->open(); $metaList = $mapLay->getItems(); } else { $metaList = array(); } } return $metaList; } function _initDescription($mapLay) { $metaString = $this->_returnMetaData($mapLay, "DESCRIPTION"); if ($metaString != "") { if ($this->map2unicode) $metaString = utf8_encode($metaString); $descriptionTag = _p($metaString); } else { $descriptionTag = $mapLay->name; } return preg_replace(array("/\\\/", "/\|/"), array("", ""), trim($descriptionTag)); // ESCAPE APOSTROPHES (SINGLE QUOTES) IN NAME WITH BACKSLASH } /** * CHECK FOR HYPERLINK FIELDS * Check if hyperlink fields have been declared in map file */ function _getHyperFieldList($glayer) { // First split string into field arrays, then the chunks into field name and alias for link if ($hyperMeta = $glayer->getMetaData("RESULT_HYPERLINK")) { $hyperStr = preg_split('/,/', $hyperMeta); foreach ($hyperStr as $hs) { if (preg_match ('/\|\|/', $hs)) { $hfa = preg_split('/\|\|/', $hs); $hyperAliasStr = trim($hfa[1]); if ($this->map2unicode) $hyperAliasStr = utf8_encode($hyperAliasStr); $hyperFieldsAlias[trim($hfa[0])] = _p($hyperAliasStr); $hyperFieldsValues[] = trim($hfa[0]); } else { $hyperFieldsValues[] = trim($hs); } } return array($hyperFieldsValues, $hyperFieldsAlias); } else { return NULL; } } /** * CHECK FOR DB JOINS * Check if DB joins have been declared in map file */ function _getXYLayerPropList($XLLayerMetaStr) { $XYLayerList = preg_split("/\|\|/", $XLLayerMetaStr); $XYLayerProperties["dsn"] = $XYLayerList[0]; $XYLayerProperties["xyTable"] = $XYLayerList[1]; $XYLayerFldList = preg_split("/,/", $XYLayerList[2]); $XYLayerProperties["x_fld"] = $XYLayerFldList[0]; $XYLayerProperties["y_fld"] = $XYLayerFldList[1]; $XYLayerProperties["classidx_fld"] = $XYLayerFldList[2]; return $XYLayerProperties; } /** * CHECK FOR DB JOINS * Check if DB joins have been declared in map file */ function _getJoinProperties($qLayer) { if ($qLayer->getMetaData("RESULT_JOIN") != "") { $joinStrMeta = $qLayer->getMetaData("RESULT_JOIN"); $joinList = preg_split("/\|\|/", $joinStrMeta); $joinPropList["dsn"] = $joinList[0]; // Join table properties $tableProp = preg_split("/\@/", $joinList[1]); $joinPropList["fromTable"] = $tableProp[0]; $joinPropList["fromField"] = $tableProp[1]; $joinPropList["fromFieldType"] = $tableProp[2]; $joinFieldStr = $tableProp[3]; $joinPropList["joinFields"] = $joinFieldStr; // Field in Shapefile to join to $joinPropList["toField"] = $joinList[2]; // Join type: one-to-one (0) or one-to-many (1) $joinPropList["one2many"] = $joinList[3]; return $joinPropList; } else { return NULL; } } } // class ?>