Index: http/classes/class_bbox.php =================================================================== --- http/classes/class_bbox.php (revision 0) +++ http/classes/class_bbox.php (revision 0) @@ -0,0 +1,285 @@ +x = $x; + $this->y = $y; + $this->epsg = $epsg; + } + + /** + * computes a new point with the minimal coordinates of this point and $point + */ + static function min ($point1, $point2) { + if ($point1->epsg == $point2->epsg) { + if ($point1->isWestOf($point2)) { + $minx = $point1->x; + } + else { + $minx = $point2->x; + } + if ($point1->isSouthOf($point2)) { + $miny = $point1->y; + } + else { + $miny = $point2->y; + } + return new Mapbender_point($minx, $miny, $point1->epsg); + } + else { + $e = new mb_exception("Mapbender_point: cannot process min with different EPSG codes"); + } + } + + /** + * computes a new point with the maximal coordinates of this point and $point + */ + static function max ($point1, $point2) { + if ($point1->epsg == $point2->epsg) { + if ($point1->isWestOf($point2)) { + $maxx = $point2->x; + } + else { + $maxx = $point1->x; + } + if ($point1->isSouthOf($point2)) { + $maxy = $point2->y; + } + else { + $maxy = $point1->y; + } + return new Mapbender_point($maxx, $maxy, $point1->epsg); + } + else { + $e = new mb_exception("Mapbender_point: cannot process min with different EPSG codes"); + } + } + + function isWestOf($point) { + if ($this->x < $point->x) { + return true; + } + } + + function isSouthOf($point) { + if ($this->y < $point->y) { + return true; + } + } + + /** + * Addition + * + * @param anotherPoint another Mapbender_point + */ + function plus ($anotherPoint) { + return new Mapbender_point($this->x + $anotherPoint->x, $this->y + $anotherPoint->y, $this->epsg); + } + + /** + * Subtraction + * + * @param anotherPoint another Mapbender_point + */ + function minus ($anotherPoint) { + return $this->plus($anotherPoint->times(-1)); + } + + /** + * Scalar multiplication + * + * @param aFloat a floating point number + */ + function times ($aFloat) { + return new Mapbender_point($this->x * $aFloat, $this->y * $aFloat, $this->epsg); + } + + /** + * transforms this point to another EPSG + */ + function transform($toEpsg) { + if(SYS_DBTYPE=='pgsql'){ + $currentEpsg = preg_replace("/EPSG:/", "", $this->epsg); + $targetEpsg = preg_replace("/EPSG:/", "", $toEpsg); + $sql = "SELECT X(transform(GeometryFromText('POINT(".$this->x." ".$this->y.")',".$currentEpsg."),".$targetEpsg.")) as x, "; + $sql .= "Y(transform(GeometryFromText('POINT(".$this->x." ".$this->y.")',".$currentEpsg."),".$targetEpsg.")) as y"; + $res = db_query($sql); + $point = new Mapbender_point(db_result($res,0,"x"), db_result($res,0,"y"), $toEpsg); + $this->x = $point->x; + $this->y = $point->y; + $this->epsg = $point->epsg; + } + else { + $e = new mb_exception("transformCoordinates needs PostgreSQL"); + } + } + + function __toString() { + return (string) "(" . $this->x . "," . $this->y . "," . $this->epsg . ")"; + } +} + +/** + * A bounding box consisting of an lower left and an upper right point, and an EPSG. + */ +class Mapbender_bbox { + var $min; + var $max; + var $epsg; + + /** + * @constructor + */ + function __construct($param0, $param1, $param2, $param3, $param4) { + // params are point, point, epsg + if (is_a($param0, "Mapbender_point") && is_a($param1, "Mapbender_point") && !$param3 && !$param4) { + $e = new mb_notice("Mapbender_bbox: constructor: point1, point2, epsg"); + $min = $param0; // is a Mapbender_point + $max = $param1; // is a Mapbender_point + $epsg = $param2; // is an EPSG code like "EPSG:4326" + + if ($min->isWestOf($max) && $min->isSouthOf($max)) { + if ($min->epsg == $max->epsg && $min->epsg == $epsg) { + $this->min = $min; + $this->max = $max; + $this->epsg = $epsg; + } + else { + $e = new mb_exception("Mapbender_bbox: constructor: EPSG mismatch!"); + } + } + else { + $e = new mb_exception("Mapbender_bbox: constructor: min (".$this->min.") is not southwest of max (".$this->max.")!"); + } + } + // params are x1, y1, x2, xy, epsg + else { + $e = new mb_notice("Mapbender_bbox: constructor: x1, y1, x2, y2, epsg"); + $min = new Mapbender_point($param0, $param1, $param4); + $max = new Mapbender_point($param2, $param3, $param4); + $epsg = $param4; // is an EPSG code like "EPSG:4326" + + if ($min->isWestOf($max) && $min->isSouthOf($max)) { + if ($min->epsg == $max->epsg && $min->epsg == $epsg) { + $this->min = $min; + $this->max = $max; + $this->epsg = $epsg; + } + else { + $e = new mb_exception("Mapbender_bbox: constructor: EPSG mismatch!"); + } + } + else { + $e = new mb_exception("Mapbender_bbox: constructor: min (".$this->min.") is not southwest of max (".$this->max.")!"); + } + + } + } + + /** + * Computes a new bounding box, bbox1 UNION bbox2 + */ + static function union ($bboxArray) { + if (count($bboxArray) == 1) { + return array_pop($bboxArray); + } + elseif (count($bboxArray) >= 2) { + + $bbox1 = array_pop($bboxArray); + $bbox2 = Mapbender_bbox::union($bboxArray); + + if (!($bbox1 != null && $bbox1->isValid()) && !($bbox2 != null && $bbox2->isValid())) { + $e = new mb_exception("Mapbender_bbox: union: both parameters invalid!"); + return null; + } + elseif (!($bbox1 != null && $bbox1->isValid()) && ($bbox2 != null && $bbox2->isValid())) { + $e = new mb_exception("Mapbender_bbox: union: first parameter invalid!"); + return $bbox2; + } + elseif (($bbox1 != null && $bbox1->isValid()) && !($bbox2 != null && $bbox2->isValid())) { + $e = new mb_exception("Mapbender_bbox: union: second parameter invalid!"); + return $bbox1; + } + else { + if ($bbox1->epsg == $bbox2->epsg) { + $e = new mb_notice("Mapbender_bbox: union: bbox1 is: " . $bbox1); + $e = new mb_notice("Mapbender_bbox: union: bbox2 is: " . $bbox2); + $e = new mb_notice("Mapbender_bbox: union: merging bbox1 and bbox2..."); + return new Mapbender_bbox(Mapbender_point::min($bbox1->min, $bbox2->min), Mapbender_point::max($bbox1->max, $bbox2->max), $bbox1->epsg); + } + else { + $e = new mb_exception("Mapbender_bbox: cannot process union with different EPSG codes"); + } + } + } + else { + $e = new mb_exception("Mapbender_bbox: Invalid parameter (Not an array)!"); + } + return null; + } + + /** + * transforms this bbox in another EPSG + * @param toEpsg transform the bbox to this EPSG code, example: "EPSG:4326" + */ + function transform($toEpsg) { + if ($this->isValid()) { + $this->epsg = $toEpsg; + $this->min->transform($toEpsg); + $this->max->transform($toEpsg); + return true; + } + return false; + } + + /** + * checks if lower left and upper right coordinate are set, as well as EPSG + */ + function isValid() { + if ($this->min != null && $this->max != null && $this->epsg != null) { + return true; + } + $e = new mb_exception("Mapbender_bbox: this is not a valid bbox!"); + return false; + } + + function __toString() { + return (string) "[" . $this->min . $this->max . " " . $this->epsg . "]"; + } +} +?> \ No newline at end of file Index: http/classes/class_wmc.php =================================================================== --- http/classes/class_wmc.php (revision 1939) +++ http/classes/class_wmc.php (working copy) @@ -1,5 +1,5 @@ 0)return substr($s,$c+1); @@ -29,218 +40,744 @@ } class wmc { - var $wmc_id; - var $wmc_version; - var $wmc_windowWidth; - var $wmc_windowHeight; - var $wmc_bBox_SRS; - var $wmc_bBox_minx; - var $wmc_bBox_maxx; - var $wmc_bBox_miny; - var $wmc_bBox_maxy; - var $wmc_name; - var $wmc_title; - var $wmc_abstract; - var $wmc_logourl; - var $wmc_logourl_format; - var $wmc_logourl_type; - var $wmc_logourl_width; - var $wmc_logourl_height; - var $wmc_descriptionurl; - var $wmc_descriptionurl_format; - var $wmc_descriptionurl_type; - var $wmc_keyword = array(); - var $wmc_contactposition; - var $wmc_contactvoicetelephone; - var $wmc_contactemail; - var $wmc_contactfacsimiletelephone; - var $wmc_contactperson; - var $wmc_contactorganization; - var $wmc_contactaddresstype; - var $wmc_contactaddress; - var $wmc_contactcity; - var $wmc_contactstateorprovince; - var $wmc_contactpostcode; - var $wmc_contactcountry; - - var $wmc_wms_title = array(); - var $wmc_layer_queryable = array(); - var $wmc_layer_querylayer = array(); - var $wmc_layer_hidden = array(); - var $wmc_wms_id = array(); - var $wmc_wms_service = array(); - var $wmc_wms_version = array(); - var $wmc_layer_id = array(); - var $wmc_layer_title = array(); - var $wmc_layer_name = array(); - var $wmc_layer_abstract = array(); - var $wmc_layer_srs = array(); - var $wmc_wms_serviceURL = array(); - var $wmc_layer_format_current = array(); - var $wmc_layer_dataurl = array(); - var $wmc_layer_metadataurl = array(); - var $wmc_layer_minscale = array(); - var $wmc_layer_maxscale = array(); - var $wmc_layer_format = array(); - var $wmc_layer_style_current = array(); - var $wmc_layer_style_name = array(); - var $wmc_layer_style_title = array(); - var $wmc_layer_style_legendurl = array(); - var $wmc_layer_style_legendurl_width = array(); - var $wmc_layer_style_legendurl_height = array(); - var $wmc_layer_style_legendurl_format = array(); - var $wmc_layer_style_legendurl_type = array(); - var $wmc_layer_style_sld_url = array(); - var $wmc_layer_style_sld_type = array(); - var $wmc_layer_style_sld_title = array(); - var $wmc_wms_count = 0; + var $xml; + + var $wmc_id; + var $wmc_version; + var $wmc_windowWidth; + var $wmc_windowHeight; + var $wmc_bBox_SRS; + var $wmc_bBox_minx; + var $wmc_bBox_maxx; + var $wmc_bBox_miny; + var $wmc_bBox_maxy; + var $wmc_name; + var $wmc_title; + var $wmc_abstract; + var $wmc_general_extension = array(); + var $wmc_logourl; + var $wmc_logourl_format; + var $wmc_logourl_type; + var $wmc_logourl_width; + var $wmc_logourl_height; + var $wmc_descriptionurl; + var $wmc_descriptionurl_format; + var $wmc_descriptionurl_type; + var $wmc_keyword = array(); + var $wmc_contactposition; + var $wmc_contactvoicetelephone; + var $wmc_contactemail; + var $wmc_contactfacsimiletelephone; + var $wmc_contactperson; + var $wmc_contactorganization; + var $wmc_contactaddresstype; + var $wmc_contactaddress; + var $wmc_contactcity; + var $wmc_contactstateorprovince; + var $wmc_contactpostcode; + var $wmc_contactcountry; + + + var $wmc_wms_title = array(); + var $wmc_layer_queryable = array(); + var $wmc_layer_hidden = array(); + var $wmc_wms_id = array(); + var $wmc_wms_service = array(); + var $wmc_wms_version = array(); + var $wmc_wms_layer_id = array(); + var $wmc_layer_wfs_featuretype = array(); + var $wmc_layer_id = array(); + var $wmc_layer_pos = array(); + var $wmc_layer_parent = array(); + var $wmc_layer_querylayer = array(); + var $wmc_layer_title = array(); + var $wmc_layer_name = array(); + var $wmc_layer_abstract = array(); + var $wmc_layer_srs = array(); + var $wmc_wms_serviceURL = array(); + var $wmc_layer_format_current = array(); + var $wmc_layer_dataurl = array(); + var $wmc_layer_metadataurl = array(); + var $wmc_layer_minscale = array(); + var $wmc_layer_maxscale = array(); + var $wmc_gui_layer_minscale = array(); + var $wmc_gui_layer_maxscale = array(); + var $wmc_layer_format = array(); + var $wmc_layer_style_current = array(); + var $wmc_layer_style_name = array(); + var $wmc_layer_style_title = array(); + var $wmc_layer_style_legendurl = array(); + var $wmc_layer_style_legendurl_width = array(); + var $wmc_layer_style_legendurl_height = array(); + var $wmc_layer_style_legendurl_format = array(); + var $wmc_layer_style_legendurl_type = array(); + var $wmc_layer_style_sld_url = array(); + var $wmc_layer_style_sld_type = array(); + var $wmc_layer_style_sld_title = array(); + + var $wmc_wms_count = 0; - function wmc() { - } + /* + var $data_type = array(); + var $data_format = array(); + + var $objLayer = array(); + + var $gui_wms_mapformat; + var $gui_wms_featureinfoformat; + var $gui_wms_exceptionformat; + var $gui_wms_epsg; + + var $default_epsg = 0; + */ + var $monitoringIsOn = false; + +function wmc() { +} + +function saveAsFile() { + $filename = "wmc_" . date("Y_m_d_H_i_s") . ".log"; + $logfile = "../../log/" . $filename; - function getTitle() { - return $this->wmc_title; + if($h = fopen($logfile,"a")){ + $content = $this->xml; + if(!fwrite($h,$content)){ + $e = new mb_exception("class_wmc.php: failed to write wmc."); + return false; + } + fclose($h); } + return $filename; +} + +function getTitle() { + return $this->wmc_title; +} + +function getNumberOfWms () { + return $this->wmc_wms_count; +} + +function createWMCFromObj($mapObject, $user_id, $generalTitle, $extensionData) { + $this->wmc_id = $user_id . '_' . time(); - function getNumberOfWms () { - return $this->wmc_wms_count; - } - - function createObjFromWMC_id($wmc_id){ - - $con = db_connect(DBSERVER,OWNER,PW); - db_select_db(DB, $con); + $generalWidth = $mapObject->width; + $generalHeight = $mapObject->height; + $generalBboxSrs = $mapObject->epsg; + + $arrayBBox = explode(",", $mapObject->extent); + $generalBboxMinx = floatval($arrayBBox[0]); + $generalBboxMiny = floatval($arrayBBox[1]); + $generalBboxMaxx = floatval($arrayBBox[2]); + $generalBboxMaxy = floatval($arrayBBox[3]); + + $generalName = "Mapbender WMC"; // TO do : insert proper data + $generalKeywords = array("Mapbender", "WMC"); // TO do : insert proper data + $generalAbstract = ""; // TO do : insert proper data + $generalLogoUrl = ""; // TO do : insert proper data + $generalLogoUrlWidth = ""; // TO do : insert proper data + $generalLogoUrlHeight = ""; // TO do : insert proper data + $generalLogoUrlFormat = ""; // TO do : insert proper data + $generalDescriptionUrl = ""; // TO do : insert proper data + $generalContactPerson = ""; + $generalContactOrganization = ""; + $generalContactPosition = ""; + $generalContactAddressType = ""; + $generalContactAddress = ""; + $generalContactCity = ""; + $generalContactStateOrProvince = ""; + $generalContactPostCode = ""; + $generalContactCountry = ""; + $generalContactVoiceTelephone = ""; + $generalContactFacsimileTelephone = ""; + $generalContactElectronicMailAddress = ""; + + $extension_namespace = "mapbender"; + + // LayerList variables + $layerHidden = ""; + $layerQueryable = ""; + $layerAbstract = ""; + $layerName = ""; + $layerSrs = ""; + $layerDataUrl = ""; + $layerMetadataUrl = ""; + $layerFormat = ""; + $layerFormat_current = ""; + $layerStyle_current = ""; + $layerStyle_name = ""; + $layerStyle_title = ""; + $layerStyle_legendURL = ""; + $layerStyle_legendURL_width = ""; + $layerStyle_legendURL_height = ""; + $layerStyle_legendURL_format = ""; + + // generate XML + $doc = new DOMDocument("1.0", CHARSET); + $doc->preserveWhiteSpace = false; + + // ViewContext + $e_view_context = $doc->createElementNS("http://www.opengis.net/context", "ViewContext"); + + + $e_view_context->setAttribute("version", "1.0.0"); + $e_view_context->setAttribute("id", $this->wmc_id); + $e_view_context->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + $e_view_context->setAttribute("xmlns:mapbender", "http://www.mapbender.org"); + $e_view_context->setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); + $e_view_context->setAttribute("xsi:SchemaLocation", "http://schemas.opengis.net/context/1.0.0/context.xsd"); + + // General + $e_general = $doc->createElement("General"); + + $e_window = $doc->createElement("Window"); + if (!empty($generalWidth) && !empty($generalHeight)) { + $e_window->setAttribute("width", $generalWidth); + $e_window->setAttribute("height", $generalHeight); + } + $e_general->appendChild($e_window); + + $e_bbox = $doc->createElement("BoundingBox"); + $e_bbox->setAttribute("SRS", $generalBboxSrs); + $e_bbox->setAttribute("minx", $generalBboxMinx); + $e_bbox->setAttribute("miny", $generalBboxMiny); + $e_bbox->setAttribute("maxx", $generalBboxMaxx); + $e_bbox->setAttribute("maxy", $generalBboxMaxy); + $e_general->appendChild($e_bbox); + + $e_name = $doc->createElement("Name", $generalName); + $e_general->appendChild($e_name); + + $e_title = $doc->createElement("Title", $generalTitle); + $e_general->appendChild($e_title); + + $e_keyword_list = $doc->createElement("KeywordList"); + for ($i=0; $i < count($generalKeywords); $i++) { + $e_keyword = $doc->createElement("Keyword", $generalKeywords[$i]); + $e_keyword_list->appendChild($e_keyword); + } + $e_general->appendChild($e_keyword_list); + + if ($generalAbstract){ + $e_abstract = $doc->createElement("Abstract", $generalAbstract); + $e_general->appendChild($e_abstract); + } + + if ($generalLogoUrlWidth && $generalLogoUrlHeight && $generalLogoUrlFormat && $generalLogoUrl){ + $e_logo_url = $doc->createElement("LogoURL"); + $e_logo_url->setAttribute("width", $generalLogoUrlWidth); + $e_logo_url->setAttribute("height", $generalLogoUrlHeight); + $e_logo_url->setAttribute("format", $generalLogoUrlFormat); + + $e_logo_url_or = $doc->createElement("OnlineResource"); + $e_logo_url_or->setAttributeNS("http://www.opengis.net/context", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + $e_logo_url_or->setAttribute("xlink:type", "simple"); + $e_logo_url_or->setAttribute("xlink:href", $generalLogoUrl); + $e_logo_url->appendChild($e_logo_url_or); + + $e_general->appendChild($e_logo_url); + } + + if ($generalDescriptionUrl){ + $e_description_url = $doc->createElement("DescriptionURL"); + + $e_description_url_or = $doc->createElement("OnlineResource"); + $e_description_url_or->setAttributeNS("http://www.opengis.net/context", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + $e_description_url_or->setAttribute("xlink:type", "simple"); + $e_description_url_or->setAttribute("xlink:href", $generalDescriptionUrl); + $e_description_url->appendChild($e_description_url_or); + + $e_general->appendChild($e_description_url); + } + + if ($generalContactElectronicMailAddress || $generalContactOrganization || + $generalContactPerson || $generalContactPosition || $generalContactAddressType || + $generalContactAddress || $generalContactCity || $generalContactStateOrProvince || + $generalContactPostCode || $generalContactCountry || $generalContactVoiceTelephone || + $generalContactFacsimileTelephone || $generalContactElectronicMailAddress) { + + $e_contact = $doc->createElement("ContactInformation"); + + if ($generalContactPerson || $generalContactOrganization){ + $e_contact_person_primary = $doc->createElement("ContactPersonPrimary"); + + if ($generalContactPerson){ + $e_contact_person = $doc->createElement("ContactPerson", $generalContactPerson); + $e_contact_person_primary->appendChild($e_contact_person); + } + if ($generalContactOrganization){ + $e_contact_organization = $doc->createElement("ContactOrganization", $generalContactOrganization); + $e_contact_person_primary->appendChild($e_contact_organization); + } + $e_contact->appendChild($e_contact_person_primary); + } + + if ($generalContactPosition){ + $e_contact_position = $doc->createElement("ContactPosition", $generalContactPosition); + $e_contact->appendChild($e_contact_position); + } + + if ($generalContactAddressType || $generalContactAddress || + $generalContactCity || $generalContactStateOrProvince || + $generalContactPostCode || $generalContactCountry) { + + $e_contact_address = $doc->createElement("ContactAddress"); + + if ($generalContactAddressType){ + $e_address_type = $doc->createElement("AddressType", $generalContactAddressType); + $e_contact_address->appendChild($e_address_type); + } + if ($generalContactAddress){ + $e_address = $doc->createElement("Address", $generalContactAddress); + $e_contact_address->appendChild($e_address); + } + if ($generalContactCity){ + $e_city = $doc->createElement("City", $generalContactCity); + $e_contact_address->appendChild($e_city); + } + if ($generalContactStateOrProvince){ + $e_state = $doc->createElement("StateOrProvince", $generalContactStateOrProvince); + $e_contact_address->appendChild($e_state); + } + if ($generalContactPostCode){ + $e_postcode = $doc->createElement("PostCode", $generalContactPostCode); + $e_contact_address->appendChild($e_postcode); + } + if ($generalContactCountry){ + $e_country = $doc->createElement("Country", $generalContactCountry); + $e_contact_address->appendChild($e_country); + } + $e_contact->appendChild($e_contact_address); + } + + if ($generalContactVoiceTelephone){ + $e_voice_telephone = $doc->createElement("ContactVoiceTelephone", $generalContactVoiceTelephone); + $e_contact->appendChild($e_voice_telephone); + } + if ($generalContactFacsimileTelephone){ + $e_facsimile_telephone = $doc->createElement("ContactFacsimileTelephone", $generalContactFacsimileTelephone); + $e_contact->appendChild($e_facsimile_telephone); + } + if ($generalContactElectronicMailAddress){ + $e_email = $doc->createElement("ContactElectronicMailAddress", $generalContactElectronicMailAddress); + $e_contact->appendChild($e_email); + } + $e_general->appendChild($e_contact); + } + + + if (count($extensionData) > 0) { + //$e = new mb_exception("writing wmc..."); + $e_extensionGeneral = $doc->createElement("Extension"); + + foreach ($extensionData as $keyExtensionData => $valueExtensionData) { + $e_currentExtensionTag = $doc->createElement($extension_namespace.":".$keyExtensionData, $valueExtensionData); + $e_extensionGeneral->appendChild($e_currentExtensionTag); + } + $e_general->appendChild($e_extensionGeneral); + } + $e_view_context->appendChild($e_general); + + + // LayerList + $e_layer_list = $doc->createElement("LayerList"); + + for ($i=0; $i < count($mapObject->wms); $i++){ + $wmsId = $mapObject->wms[$i]->wms_id; + $wms_epsg = array(); + $wms_epsg[0] = $mapObject->epsg; - $sql = "SELECT wmc FROM mb_user_wmc WHERE wmc_id = $1"; - $v = array($wmc_id); - $t = array("s"); - $res = db_prep_query($sql, $v, $t); - $wmc = db_fetch_array($res); - $this->createObjFromWMC_xml($wmc[0]); + if ($mapObject->wms[$i]->gui_wms_epsg != $mapObject->epsg){ + $wms_epsg[1] = $mapObject->wms[$i]->gui_wms_epsg; + } - } + for ($q = 0; $q < count($mapObject->wms[$i]->gui_epsg); $q++){ + $isInArray = false; + + for ($r=0 ; $r < count($wms_epsg); $r++){ + if ($wms_epsg[$r] == $mapObject->wms[$i]->gui_epsg[$q]){ + $isInArray = true; + } + } + if ($isInArray == false){ + array_push($wms_epsg, $mapObject->wms[$i]->gui_epsg[$q]); + } + } + for ($j = 0; $j < count($mapObject->wms[$i]->objLayer); $j++){ + if ($mapObject->wms[$i]->objLayer[$j]->layer_parent != ''){ + if ($mapObject->wms[$i]->objLayer[$j]->gui_layer_visible == "1"){ + $layerHidden = 0; + } + else{ + $layerHidden = 1; + } + $layerQueryable = $mapObject->wms[$i]->objLayer[$j]->layer_queryable; + $layerQuerylayer = $mapObject->wms[$i]->objLayer[$j]->gui_layer_querylayer; + $layerId = $mapObject->wms[$i]->objLayer[$j]->layer_uid; + $layerName = $mapObject->wms[$i]->objLayer[$j]->layer_name; + $layerTitle = $mapObject->wms[$i]->objLayer[$j]->layer_title; + $layerAbstract = $mapObject->wms[$i]->wms_abstract; //To Do: insert actual abstract + $layerDataUrl = $mapObject->wms[$i]->objLayer[$j]->layer_dataurl_href; + $layerMetadataUrl = $mapObject->wms[$i]->objLayer[$j]->layer_metadataurl; + $layerMinscale = $mapObject->wms[$i]->objLayer[$j]->layer_minscale; + $layerMaxscale = $mapObject->wms[$i]->objLayer[$j]->layer_maxscale; + $guiLayerMinscale = $mapObject->wms[$i]->objLayer[$j]->gui_layer_minscale; + $guiLayerMaxscale = $mapObject->wms[$i]->objLayer[$j]->gui_layer_maxscale; + $wmsVersion = $mapObject->wms[$i]->wms_version; + $wmsTitle = $mapObject->wms[$i]->wms_title; + $wmsLayerId = $mapObject->wms[$i]->objLayer[0]->layer_uid; + $wmsOnlineResource = $mapObject->wms[$i]->wms_getmap; + $layerPos = $mapObject->wms[$i]->objLayer[$j]->layer_pos; + $layerParent = $mapObject->wms[$i]->objLayer[$j]->layer_parent; + $queryLayer = $mapObject->wms[$i]->objLayer[$j]->gui_layer_querylayer; + $wfsFeatureType = $mapObject->wms[$i]->objLayer[$j]->gui_layer_wfs_featuretype; + + $e_layer = $doc->createElement("Layer"); + $e_layer->setAttribute("queryable", $layerQueryable); + $e_layer->setAttribute("hidden", $layerHidden); + + $e_service = $doc->createElement("Server"); + $e_service->setAttribute("service", "OGC:WMS"); + $e_service->setAttribute("version", $wmsVersion); + $e_service->setAttribute("title", $wmsTitle); + + $e_service_or = $doc->createElement("OnlineResource"); + $e_service_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + $e_service_or->setAttribute("xlink:type", "simple"); + $e_service_or->setAttribute("xlink:href", $wmsOnlineResource); + + $e_service->appendChild($e_service_or); + $e_layer->appendChild($e_service); + + $e_layer_name = $doc->createElement("Name", $layerName); + $e_layer->appendChild($e_layer_name); + + $e_layer_title = $doc->createElement("Title", $layerTitle); + $e_layer->appendChild($e_layer_title); + + if ($layerAbstract){ + $e_layer_abstract = $doc->createElement("Abstract", $layerAbstract); + $e_layer->appendChild($e_layer_abstract); + } + + $e_layer_srs = $doc->createElement("SRS", implode(" ", $wms_epsg)); + $e_layer->appendChild($e_layer_name); + + if ($layerDataUrl){ + $e_layer_data_url = $doc->createElement("DataURL"); + + $e_layer_data_url_or = $doc->createElement("OnlineResource"); + $e_layer_data_url_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + $e_layer_data_url_or->setAttribute("xlink:type", "simple"); + $e_layer_data_url_or->setAttribute("xlink:href", $layerDataUrl); + + $e_layer_data_url->appendChild($e_layer_data_url_or); + $e_layer->appendChild($e_layer_data_url); + } + + if ($layerMetadataUrl){ + $e_layer_metadata_url = $doc->createElement("MetadataURL"); + + $e_layer_metadata_url_or = $doc->createElement("OnlineResource"); + $e_layer_metadata_url_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + $e_layer_metadata_url_or->setAttribute("xlink:type", "simple"); + $e_layer_metadata_url_or->setAttribute("xlink:href", $layerMetadataUrl); + + $e_layer_metadata_url->appendChild($e_layer_metadata_url_or); + $e_layer->appendChild($e_layer_metadata_url); + } + + $e_extension = $doc->createElement("Extension"); + + $e_scalehint = $doc->createElement($extension_namespace.":ScaleHint"); + $e_scalehint->setAttribute("min", $layerMinscale); + $e_scalehint->setAttribute("max", $layerMaxscale); + $e_extension->appendChild($e_scalehint); + + $e_gui_scalehint = $doc->createElement($extension_namespace.":guiScaleHint"); + $e_gui_scalehint->setAttribute("min", $guiLayerMinscale); + $e_gui_scalehint->setAttribute("max", $guiLayerMaxscale); + $e_extension->appendChild($e_gui_scalehint); + + $e_layer_id = $doc->createElement($extension_namespace.":layer_id", $layerId); + $e_extension->appendChild($e_layer_id); + + $e_wms_layer_id = $doc->createElement($extension_namespace.":wms_layer_id", $wmsLayerId); + $e_extension->appendChild($e_wms_layer_id); + + $e_layer_pos = $doc->createElement($extension_namespace.":layer_pos", $layerPos); + $e_extension->appendChild($e_layer_pos); + + $e_layer_parent = $doc->createElement($extension_namespace.":layer_parent", $layerParent); + $e_extension->appendChild($e_layer_parent); + + $e_wms_id = $doc->createElement($extension_namespace.":wms_id", $wmsId); + $e_extension->appendChild($e_wms_id); + + $e_querylayer = $doc->createElement($extension_namespace.":querylayer", $layerQuerylayer); + $e_extension->appendChild($e_querylayer); + + if ($wfsFeatureType) { + $e_wfsFeatureType = $doc->createElement($extension_namespace.":wfsFeatureType", $wfsFeatureType); + $e_extension->appendChild($e_wfsFeatureType); + } - function createObjFromWMC_xml($data){ - $values = NULL; - $tags = NULL; - $parser = xml_parser_create(CHARSET); - xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); - xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); - xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,CHARSET); - xml_parse_into_struct($parser,$data,$values,$tags); - $code = xml_get_error_code ($parser); - if ($code) { - $line = xml_get_current_line_number($parser); - $mb_exception = new mb_exception(xml_error_string($code) . " in line " . $line); - return false; - } - xml_parser_free($parser); + $e_layer->appendChild($e_extension); + + //layerFormat + $e_layer_format = $doc->createElement("FormatList"); + + $data_format_current = false; + + for ($k = 0; $k < count($mapObject->wms[$i]->data_format); $k++){ + + if ($mapObject->wms[$i]->data_type[$k] == "map") { + $layerFormat = $mapObject->wms[$i]->data_format[$k]; + + $e_format = $doc->createElement("Format", $layerFormat); + + if ($data_format_current == false && ( + ($mapObject->wms[$i]->data_format[$k] == $mapObject->wms[$i]->gui_wms_mapformat) || + ($k == (count($mapObject->wms[$i]->data_format)-1)) + )){ + + $e_format->setAttribute("current", "1"); + $data_format_current = true; + } + $e_layer_format->appendChild($e_format); + } + } + $e_layer->appendChild($e_layer_format); + + + // LayerStyle + $e_layer_stylelist = $doc->createElement("StyleList"); + + for ($k = 0; $k < count($mapObject->wms[$i]->objLayer[$j]->layer_style); $k++){ + + if ($k == 0){ + $layerStyle_current = 1; // To do: insert proper data + } + else{ + $layerStyle_current = 0; // To do: insert proper data + } - $section = NULL; - $format = NULL; - $cnt_format = 0; - $parent = array(); - $myParent = array(); - $cnt_layer = -1; - $request = NULL; - $layer_style = array(); - $cnt_style = -1; - $extension = false; + $e_layer_style = $doc->createElement("Style"); - $general = false; - $layerlist = false; - $layer = false; - $formatlist = false; - $metadataurl = false; - $dataurl = false; - $stylelist = false; + $layerStyleSLD = ""; - foreach ($values as $element) { - if(strtoupper($element[tag]) == "VIEWCONTEXT" && $element[type] == "open"){ - $this->wmc_id = $element[attributes]["id"]; - $this->wmc_version = $element[attributes]["version"]; + if ($layerStyleSLD){ + $layerStyleSLDUrl = ""; // To Do: Insert Proper Data + + $e_layer_style_or = $doc->createElement("OnlineResource"); + $e_layer_style_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + $e_layer_style_or->setAttribute("xlink:type", "simple"); + $e_layer_style_or->setAttribute("xlink:href", $layerStyleSLDUrl); + $e_layer_style->appendChild($e_layer_style_or); + } + else{ + //TODO: determine correct layer style entries + $layerStyle_name = $mapObject->wms[$i]->objLayer[$j]->layer_style[$k]->name; + $layerStyle_title = $mapObject->wms[$i]->objLayer[$j]->layer_style[$k]->title; + $layerStyle_legendUrl = $mapObject->wms[$i]->objLayer[$j]->layer_style[$k]->legendurl; + $layerStyle_legendUrl_width = ""; // To Do: add proper data + $layerStyle_legendUrl_height = ""; // To Do: add proper data + $layerStyle_legendUrl_format = ""; // To Do: add proper data + + if ($layerStyle_current == 1){ + $e_layer_style->setAttribute("current", "1"); + } + + $e_layer_style_name = $doc->createElement("Name", $layerStyle_name); + $e_layer_style->appendChild($e_layer_style_name); + + $e_layer_style_title = $doc->createElement("Title", $layerStyle_title); + $e_layer_style->appendChild($e_layer_style_title); + + + $e_layer_style_legendurl = $doc->createElement("LegendUrl"); + $e_layer_style_legendurl->setAttribute("width", $layerStyle_legendUrl_width); + $e_layer_style_legendurl->setAttribute("height", $layerStyle_legendUrl_height); + $e_layer_style_legendurl->setAttribute("format", $layerStyle_legendUrl_format); + + $e_layer_style_legendurl_or = $doc->createElement("OnlineResource"); + $e_layer_style_legendurl_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + $e_layer_style_legendurl_or->setAttribute("xlink:type", "simple"); + $e_layer_style_legendurl_or->setAttribute("xlink:href", $layerStyle_legendUrl); + $e_layer_style_legendurl->appendChild($e_layer_style_legendurl_or); + $e_layer_style->appendChild($e_layer_style_legendurl); + } + $e_layer_stylelist->appendChild($e_layer_style); + } + $e_layer->appendChild($e_layer_stylelist); + + $e_layer_list->appendChild($e_layer); + } } - if(strtoupper($element[tag]) == "GENERAL" && $element[type] == "open"){ - $general = true; - } - if(strtoupper($element[tag]) == "LAYERLIST" && $element[type] == "open"){ - $layerlist = true; - } - if ($general) { + } + $e_view_context->appendChild($e_layer_list); + + + $doc->appendChild($e_view_context); + $this->xml = $doc->saveXML(); + + // for debugging: saving WMC as file + // (comment when no longer needed) + $filename = $this->saveAsFile(); + if ($filename) { + $e = new mb_notice("class_wmc: saving WMC as file " . $filename); + } +} + +function createObjFromWMC_id($wmc_id){ + + global $DBSERVER,$DB,$OWNER,$PW; + $con = db_connect($DBSERVER,$OWNER,$PW); + db_select_db(DB, $con); + + $sql = "SELECT wmc FROM mb_user_wmc WHERE wmc_id = '" . $wmc_id . "'"; + $res = db_query($sql); + $wmc = db_fetch_row($res); + $this->createObjFromWMC_xml($wmc[0]); + $this->monitoringIsOn = true; + +} +function createObjFromWMC_xml($data){ +# $data = str_replace("&", "&", $data); + + // store xml + $this->xml = $data; + + // for debugging: saving WMC as file + // (comment when no longer needed) + $filename = $this->saveAsFile(); + if ($filename) { + $e = new mb_notice("class_wmc: saving WMC as file " . $filename); + } + + + + $values = NULL; + $tags = NULL; + $parser = xml_parser_create(CHARSET); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); + xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,CHARSET); + xml_parse_into_struct($parser,$data,$values,$tags); + $code = xml_get_error_code ($parser); + if ($code) { + $line = xml_get_current_line_number($parser); + $mb_exception = new mb_exception(xml_error_string($code) . " in line " . $line); + return false; + } + xml_parser_free($parser); + + $section = NULL; + $format = NULL; + $cnt_format = 0; + $parent = array(); + $myParent = array(); + $cnt_layer = -1; + $request = NULL; + $layer_style = array(); + $extension = false; + + $general = false; + $layerlist = false; + $layer = false; + $formatlist = false; + $dataurl = false; + $metadataurl = false; + $stylelist = false; + $cnt_style = -1; + + foreach ($values as $element) { + $verbose .= "."; + if(strtoupper($element[tag]) == "VIEWCONTEXT" && $element[type] == "open"){ + $this->wmc_id = $element[attributes]["id"]; + $this->wmc_version = $element[attributes]["version"]; + } + if(strtoupper($element[tag]) == "GENERAL" && $element[type] == "open"){ + $general = true; + } + if(strtoupper($element[tag]) == "LAYERLIST" && $element[type] == "open"){ + $layerlist = true; + } + if ($general) { if(strtoupper($element[tag]) == "WINDOW"){ - $this->wmc_windowWidth = $element[attributes]["width"]; - $this->wmc_windowHeight = $element[attributes]["height"]; + $this->wmc_windowWidth = $element[attributes]["width"]; + $this->wmc_windowHeight = $element[attributes]["height"]; } if(strtoupper($element[tag]) == "BOUNDINGBOX"){ - $this->wmc_bBox_SRS = $element[attributes]["SRS"]; - $this->wmc_bBox_minx = $element[attributes]["minx"]; - $this->wmc_bBox_miny = $element[attributes]["miny"]; - $this->wmc_bBox_maxx = $element[attributes]["maxx"]; - $this->wmc_bBox_maxy = $element[attributes]["maxy"]; + $this->wmc_bBox_SRS = $element[attributes]["SRS"]; + $this->wmc_bBox_minx = $element[attributes]["minx"]; + $this->wmc_bBox_miny = $element[attributes]["miny"]; + $this->wmc_bBox_maxx = $element[attributes]["maxx"]; + $this->wmc_bBox_maxy = $element[attributes]["maxy"]; } if(strtoupper($element[tag]) == "NAME"){ - $this->wmc_name = $element[value]; + $this->wmc_name = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "TITLE"){ - $this->wmc_title = $element[value]; + $this->wmc_title = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "ABSTRACT"){ - $this->wmc_abstract = $element[value]; + $this->wmc_abstract = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "CONTACTINFORMATION" && $element['type'] == "open"){ - $contactinformation = true; + $contactinformation = true; } if ($contactinformation) { if(strtoupper($element[tag]) == "CONTACTPOSITION"){ - $this->wmc_contactposition = $element[value]; + $this->wmc_contactposition = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "CONTACTVOICETELEPHONE"){ - $this->wmc_contactvoicetelephone = $element[value]; + $this->wmc_contactvoicetelephone = $element[value]; } if(strtoupper($element[tag]) == "CONTACTFACSIMILETELEPHONE"){ - $this->wmc_contactfacsimiletelephone = $element[value]; + $this->wmc_contactfacsimiletelephone = $element[value]; } if(strtoupper($element[tag]) == "CONTACTELECTRONICMAILADDRESS"){ - $this->wmc_contactemail = $element[value]; + $this->wmc_contactemail = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "CONTACTPERSONPRIMARY" && $element['type'] == "open"){ - $contactpersonprimary = true; + $contactpersonprimary = true; } if ($contactpersonprimary) { if(strtoupper($element[tag]) == "CONTACTPERSON"){ - $this->wmc_contactperson = $element[value]; + $this->wmc_contactperson = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "CONTACTORGANIZATION"){ - $this->wmc_contactorganization = $element[value]; + $this->wmc_contactorganization = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "CONTACTPERSONPRIMARY" && $element['type'] == "close"){ - $contactpersonprimary = false; + $contactpersonprimary = false; } } if(strtoupper($element[tag]) == "CONTACTADDRESS" && $element['type'] == "open"){ - $contactaddress = true; + $contactaddress = true; } if ($contactaddress) { if(strtoupper($element[tag]) == "ADDRESSTYPE"){ - $this->wmc_contactaddresstype = $element[value]; + $this->wmc_contactaddresstype = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "ADDRESS"){ - $this->wmc_contactaddress = $element[value]; + $this->wmc_contactaddress = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "CITY"){ - $this->wmc_contactcity = $element[value]; + $this->wmc_contactcity = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "STATEORPROVINCE"){ - $this->wmc_contactstateorprovince = $element[value]; + $this->wmc_contactstateorprovince = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "POSTCODE"){ - $this->wmc_contactpostcode = $element[value]; + $this->wmc_contactpostcode = $element[value]; } if(strtoupper($element[tag]) == "COUNTRY"){ - $this->wmc_contactcountry = $element[value]; + $this->wmc_contactcountry = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "CONTACTADDRESS" && $element['type'] == "close"){ - $contactaddress = false; + $contactaddress = false; } } } @@ -245,14 +782,14 @@ } } if(strtoupper($element[tag]) == "LOGOURL" && $element['type'] == "open"){ - $logourl = true; - $this->wmc_logourl_width = $element[attributes]["width"]; - $this->wmc_logourl_height = $element[attributes]["height"]; - $this->wmc_logourl_format = $element[attributes]["format"]; + $logourl = true; + $this->wmc_logourl_width = $element[attributes]["width"]; + $this->wmc_logourl_height = $element[attributes]["height"]; + $this->wmc_logourl_format = $element[attributes]["format"]; } if ($logourl) { if(strtoupper($element[tag]) == "LOGOURL" && $element['type'] == "close"){ - $logourl = false; + $logourl = false; } if(strtoupper($element[tag]) == "ONLINERESOURCE"){ $this->wmc_logourl_type = $element[attributes]["xlink:type"]; @@ -260,12 +797,12 @@ } } if(strtoupper($element[tag]) == "DESCRIPTIONURL" && $element['type'] == "open"){ - $descriptionurl = true; - $this->wmc_descriptionurl_format = $element[attributes]["format"]; + $descriptionurl = true; + $this->wmc_descriptionurl_format = $element[attributes]["format"]; } if ($descriptionurl) { if(strtoupper($element[tag]) == "DESCRIPTIONURL" && $element['type'] == "close"){ - $descriptionurl = false; + $descriptionurl = false; } if(strtoupper($element[tag]) == "ONLINERESOURCE"){ $this->wmc_descriptionurl_type = $element[attributes]["xlink:type"]; @@ -273,24 +810,35 @@ } } if(strtoupper($element[tag]) == "KEYWORDLIST" && $element['type'] == "open"){ - $keywordlist = true; + $keywordlist = true; } if ($keywordlist) { if(strtoupper($element[tag]) == "KEYWORDLIST" && $element['type'] == "close"){ - $keywordlist = false; - $cnt_keyword = -1; + $keywordlist = false; + $cnt_keyword = -1; } if(strtoupper($element[tag]) == "KEYWORD"){ $cnt_keyword++; - $this->wmc_keyword[$cnt_keyword] = $element[value]; + $this->wmc_keyword[$cnt_keyword] = mb_utf8_decode(html_entity_decode($element[value])); } } + if(strtoupper($element[tag]) == "EXTENSION" && $element['type'] == "close"){ + $generalExtension = false; + } + if ($generalExtension) { + $this->wmc_general_extension[sepNameSpace($element[tag])] = $element[value]; +// $e = new mb_exception("WMC: " . $element[tag] . ": " . $element[value]); + } + if(strtoupper($element[tag]) == "EXTENSION" && $element['type'] == "open"){ + $generalExtension = true; + } + if(strtoupper($element[tag]) == "GENERAL" && $element['type'] == "close"){ $general = false; } - } - if ($layerlist) { + } + if ($layerlist) { if(strtoupper($element[tag]) == "LAYERLIST" && $element['type'] == "close"){ $layerlist = false; } @@ -302,9 +850,9 @@ $cnt_epsg = 0; } if ($layer) { - if(strtoupper($element[tag]) == "LAYER" && $element[type] == "close"){ - $layer = false; - } + if(strtoupper($element[tag]) == "LAYER" && $element[type] == "close"){ + $layer = false; + } if ($formatlist) { if(strtoupper($element[tag]) == "FORMAT"){ $cnt_format++; @@ -317,10 +865,10 @@ } elseif ($metadataurl) { if(strtoupper($element[tag]) == "ONLINERESOURCE"){ - $this->wmc_layer_metadataurl[$cnt_layer] = $element[attributes]["xlink:href"]; + $this->wmc_layer_metadataurl[$cnt_layer] = $element[attributes]["xlink:href"]; } if(strtoupper($element[tag]) == "METADATAURL" && $element[type] == "close"){ - $metadataurl = false; + $metadataurl = false; } } elseif ($dataurl) { @@ -353,7 +901,7 @@ $this->wmc_layer_style_sld_url[$cnt_layer][$cnt_style] = $element[attributes]["xlink:href"]; } if(strtoupper($element[tag]) == "TITLE"){ - $this->wmc_layer_style_sld_title[$cnt_layer][$cnt_style] = $element[value]; + $this->wmc_layer_style_sld_title[$cnt_layer][$cnt_style] = mb_utf8_decode(html_entity_decode($element[value])); } } else { @@ -358,7 +906,7 @@ } else { if(strtoupper($element[tag]) == "NAME"){ - $this->wmc_layer_style_name[$cnt_layer][$cnt_style] = $element[value]; + $this->wmc_layer_style_name[$cnt_layer][$cnt_style] = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "TITLE"){ $this->wmc_layer_style_title[$cnt_layer][$cnt_style] = $element[value]; @@ -389,7 +937,7 @@ $server = true; $this->wmc_wms_service[$cnt_layer] = $element[attributes]["service"]; $this->wmc_wms_version[$cnt_layer] = $element[attributes]["version"]; - $this->wmc_wms_title[$cnt_layer] = $element[attributes]["title"]; + $this->wmc_wms_title[$cnt_layer] = mb_utf8_decode(html_entity_decode($element[attributes]["title"])); } if ($server) { if(strtoupper($element[tag]) == "SERVER" && $element[type] == "close"){ @@ -400,13 +948,13 @@ } } if(strtoupper($element[tag]) == "NAME"){ - $this->wmc_layer_name[$cnt_layer] = $element[value]; + $this->wmc_layer_name[$cnt_layer] = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "TITLE"){ - $this->wmc_layer_title[$cnt_layer] = $element[value]; + $this->wmc_layer_title[$cnt_layer] = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "ABSTRACT"){ - $this->wmc_layer_abstract[$cnt_layer] = $element[value]; + $this->wmc_layer_abstract[$cnt_layer] = mb_utf8_decode(html_entity_decode($element[value])); } if(strtoupper($element[tag]) == "SRS"){ $epsgArray = explode(" ", $element[value]); @@ -426,11 +974,21 @@ $this->wmc_layer_minscale[$cnt_layer] = $element[attributes]["min"]; $this->wmc_layer_maxscale[$cnt_layer] = $element[attributes]["max"]; } + if($extension == true && strtoupper(sepNameSpace($element[tag])) == "GUISCALEHINT"){ + $this->wmc_gui_layer_minscale[$cnt_layer] = $element[attributes]["min"]; + $this->wmc_gui_layer_maxscale[$cnt_layer] = $element[attributes]["max"]; + } if($extension == true && strtoupper(sepNameSpace($element[tag])) == "LAYER_ID"){ $this->wmc_layer_id[$cnt_layer] = $element[value]; } - if($extension == true && strtoupper(sepNameSpace($element[tag])) == "WMS_ID"){ - $this->wmc_wms_id[$cnt_layer] = $element[value]; + if($extension == true && strtoupper(sepNameSpace($element[tag])) == "WMS_LAYER_ID"){ + $this->wmc_wms_layer_id[$cnt_layer] = $element[value]; + } + if($extension == true && strtoupper(sepNameSpace($element[tag])) == "LAYER_POS"){ + $this->wmc_layer_pos[$cnt_layer] = $element[value]; + } + if($extension == true && strtoupper(sepNameSpace($element[tag])) == "LAYER_PARENT"){ + $this->wmc_layer_parent[$cnt_layer] = $element[value]; } if($extension == true && strtoupper(sepNameSpace($element[tag])) == "QUERYLAYER"){ $this->wmc_layer_querylayer[$cnt_layer] = $element[value]; @@ -435,17 +993,23 @@ if($extension == true && strtoupper(sepNameSpace($element[tag])) == "QUERYLAYER"){ $this->wmc_layer_querylayer[$cnt_layer] = $element[value]; } - if(strtoupper(sepNameSpace($element[tag])) == "METADATAURL" && $element[type] == "open"){ + if($extension == true && strtoupper(sepNameSpace($element[tag])) == "WMS_ID"){ + $this->wmc_wms_id[$cnt_layer] = $element[value]; + } + if($extension == true && strtoupper(sepNameSpace($element[tag])) == "WFSFEATURETYPE"){ + $this->wmc_layer_wfs_featuretype[$cnt_layer] = $element[value]; + } + if(strtoupper($element[tag]) == "METADATAURL" && $element[type] == "open"){ $metadataurl = true; } - if(strtoupper(sepNameSpace($element[tag])) == "DATAURL" && $element[type] == "open"){ + if(strtoupper($element[tag]) == "DATAURL" && $element[type] == "open"){ $dataurl = true; } - if(strtoupper(sepNameSpace($element[tag])) == "FORMATLIST" && $element[type] == "open"){ + if(strtoupper($element[tag]) == "FORMATLIST" && $element[type] == "open"){ $formatlist = true; $cnt_format = -1; } - if(strtoupper(sepNameSpace($element[tag])) == "STYLELIST" && $element[type] == "open"){ + if(strtoupper($element[tag]) == "STYLELIST" && $element[type] == "open"){ $stylelist = true; $cnt_style = -1; } @@ -454,9 +1018,22 @@ } } return true; + //return $verbose; } function createJsObjFromWMC($target, $mapObj, $action){ + + /* + * counts how often a layer has been loaded + */ + /* + if ($this->monitoringIsOn) { + $monitor = new Layer_load_count(); + for ($i = 0; $i < count($this->wmc_layer_id); $i++) { + $monitor->increment($this->wmc_layer_id[$i]); + } + } + */ $wmc_string = ""; $validActions = array("load", "merge", "append"); if (!in_array($action, $validActions)) { @@ -463,6 +1040,13 @@ $wmc_string .= "alert('invalid action: ".$action."');"; } else { + + // general extension + if (count($this->wmc_general_extension) > 0) { + $json = new Services_JSON(); + $wmc_string .= $target . "restoredWmcExtensionData = " . $json->encode($this->wmc_general_extension) . ";\n"; + } + $wmc_string .= "var index = " . $target . "getMapObjIndexByName('" . $mapObj . "');\n"; if ($action == "load") { // delete all previous wms @@ -513,7 +1097,8 @@ } } // add wms - $wmc_string .= "\t" . $target . "add_wms('','". + $wmc_string .= "\t" . $target . "add_wms('". + $this->wmc_wms_id[$i]."','". $this->wmc_wms_version[$i] ."','". $this->wmc_wms_title[$i] ."','". $this->wmc_layer_abstract[$i] ."','". @@ -557,7 +1142,10 @@ $wmc_string .= "if (!wms_exists) {\n\t"; } // add parent layer - $wmc_string .= $target . "wms_add_layer('','".$this->wmc_layer_id[$i]."','','". $this->wmc_wms_title[$i] ."','','0','0','0','0','','".$this->wmc_wms_id[$i]."','1','1','1','0','0','0','0');\n"; + $wmc_string .= $target . "wms_add_layer('','". + $this->wmc_wms_layer_id[$i]."','','". + $this->wmc_wms_title[$i] ."','','0','0','0','0','','". + $this->wmc_wms_id[$i]."','1','', '1','1','0','0','0','0','');\n"; if ($action == "merge") { $wmc_string .= "}\n"; } @@ -577,15 +1165,21 @@ $wmc_string .= "\t\t\tcurrent_layer_index = m;\n"; $wmc_string .= "\t\t}\n"; $wmc_string .= "\t}\n"; - + + if ($this->wmc_layer_querylayer[$ii]!="") { + $querylayer_yn = $this->wmc_layer_querylayer[$ii]; + } + else { + $querylayer_yn = $this->wmc_layer_queryable[$ii]; + } $wmc_string .= "\tif (layer_exists) {\n"; // check if the visibility or the queryability are different to the existing layer $wmc_string .= "\t\tif (" . $target . "mb_mapObj[index].wms[current_wms_index].objLayer[current_layer_index].gui_layer_visible != '" . intval(!$this->wmc_layer_hidden[$ii]) . "'"; - $wmc_string .= " || " . $target . "mb_mapObj[index].wms[current_wms_index].objLayer[current_layer_index].gui_layer_querylayer != '" . $this->wmc_layer_queryable[$ii] . "') {\n"; + $wmc_string .= " || " . $target . "mb_mapObj[index].wms[current_wms_index].objLayer[current_layer_index].gui_layer_querylayer != '" . $querylayer_yn . "') {\n"; // if yes, update the visibility and queryability $wmc_string .= "\t\t\t" . $target . "mb_mapObj[index].wms[current_wms_index].objLayer[current_layer_index].gui_layer_visible = " . intval(!$this->wmc_layer_hidden[$ii]) . ";\n"; - $wmc_string .= "\t\t\t" . $target . "mb_mapObj[index].wms[current_wms_index].objLayer[current_layer_index].gui_layer_querylayer = " . $this->wmc_layer_queryable[$ii] . ";\n"; + $wmc_string .= "\t\t\t" . $target . "mb_mapObj[index].wms[current_wms_index].objLayer[current_layer_index].gui_layer_querylayer = " . $querylayer_yn . ";\n"; $wmc_string .= "\t\t}\n"; $wmc_string .= "\t}\n"; $wmc_string .= "}\n"; @@ -593,7 +1187,8 @@ } // add layer - $wmc_string .= "\t" . $target . "wms_add_layer('0','". + $wmc_string .= "\t" . $target . "wms_add_layer('". + ($this->wmc_layer_parent[$ii]!=""?$this->wmc_layer_parent[$ii]:"0") . "','". $this->wmc_layer_id[$ii] . "','". $this->wmc_layer_name[$ii] . "','". $this->wmc_layer_title[$ii] ."','". @@ -598,7 +1193,7 @@ $this->wmc_layer_name[$ii] . "','". $this->wmc_layer_title[$ii] ."','". $this->wmc_layer_dataurl[$ii] . "','". - intval($cnt_layers) ."','". + ($this->wmc_layer_pos[$ii]!=""?$this->wmc_layer_pos[$ii]:intval($cnt_layers)) ."','". $this->wmc_layer_queryable[$ii] ."','". $this->wmc_layer_minscale[$ii] ."','". $this->wmc_layer_maxscale[$ii] ."','". @@ -603,12 +1198,13 @@ $this->wmc_layer_minscale[$ii] ."','". $this->wmc_layer_maxscale[$ii] ."','". $this->wmc_layer_metadataurl[$ii] ."','". - $this->wmc_wms_id[$ii] ."','1','1','". + $this->wmc_wms_id[$i] ."','1','', '1','". intval(!$this->wmc_layer_hidden[$ii]) ."','". $this->wmc_layer_queryable[$ii] ."','". - $this->wmc_layer_querylayer[$ii] ."','". - $this->wmc_layer_minscale[$ii] ."','". - $this->wmc_layer_maxscale[$ii] ."');\n"; + ($this->wmc_layer_querylayer[$ii]!=""?$this->wmc_layer_querylayer[$ii]:$this->wmc_layer_queryable[$ii]) ."','". + ($this->wmc_gui_layer_minscale[$ii]!=""?$this->wmc_gui_layer_minscale[$ii]:$this->wmc_layer_minscale[$ii]) ."','". + ($this->wmc_gui_layer_maxscale[$ii]!=""?$this->wmc_gui_layer_maxscale[$ii]:$this->wmc_layer_maxscale[$ii]) ."','". + $this->wmc_layer_wfs_featuretype[$ii] . "');\n"; if ($action == "merge") { $wmc_string .= "\t}\n"; @@ -615,7 +1211,7 @@ } // if layer is queryable, add it to querylayerlist - if ($this->wmc_layer_queryable[$ii]) { + if (($this->wmc_layer_querylayer[$ii]!=""?$this->wmc_layer_querylayer[$ii]:$this->wmc_layer_queryable[$ii])) { $cnt_query_layers++; if (!in_array($this->wmc_layer_name[$ii], explode(",",$querylayerlist))) { if ($querylayerlist == "") {$querylayerlist = $this->wmc_layer_name[$ii];} else {$querylayerlist .= "," . $this->wmc_layer_name[$ii];} @@ -658,7 +1254,7 @@ $wmc_string .= "\t\tvar found = false;\n"; $wmc_string .= "\t\tfor (var j=0; j < " . $target . "wms.length && found == false; j++) {\n"; $wmc_string .= "\t\t\tif (" . $target . "wms[j].wms_getmap == old_mapObj[i].wms[0].wms_getmap) {\n"; - $wmc_string .= "\t\t\t\t" . $target . "mb_registerMapObj('overview', old_mapObj[i].elementName, j, old_mapObj[i].width, old_mapObj[i].height);\n"; + $wmc_string .= "\t\t\t\t" . $target . "mb_registerMapObj('overview', old_mapObj[i].elementName, j, old_mapObj[i].width, old_mapObj[i].width);\n"; $wmc_string .= "\t\t\t\tfound = true;\n"; $wmc_string .= "\t\t\t}\n"; $wmc_string .= "\t\t}\n"; @@ -663,7 +1259,7 @@ $wmc_string .= "\t\t\t}\n"; $wmc_string .= "\t\t}\n"; $wmc_string .= "\t\tif (!found) {\n"; - $wmc_string .= "\t\t\t" . $target . "mb_registerMapObj('overview', old_mapObj[i].elementName, 0, old_mapObj[i].width, old_mapObj[i].height);\n"; + $wmc_string .= "\t\t\t" . $target . "mb_registerMapObj('overview', old_mapObj[i].elementName, 0, old_mapObj[i].width, old_mapObj[i].width);\n"; $wmc_string .= "\t\t}\n"; $wmc_string .= "\t}\n"; $wmc_string .= "}\n"; @@ -668,20 +1264,47 @@ $wmc_string .= "\t}\n"; $wmc_string .= "}\n"; - $sql = "SELECT minx, miny, maxx, maxy FROM layer_epsg WHERE fkey_layer_id = $1 AND epsg = $2 LIMIT 1"; - $v = array($this->wmc_layer_id[0], $this->wmc_bBox_SRS); - $t = array('i', 's'); - $res = db_prep_query($sql, $v, $t); - $row = db_fetch_array($res); - if ($row["minx"] && $row["miny"] && $row["maxx"] && $row["maxy"]) { - $ov_bbox = array($row["minx"],$row["miny"],$row["maxx"],$row["maxy"]); - } - else if ($this->wmc_layer_id[0] && $this->wmc_bBox_SRS){ - $ov_bbox = array($this->wmc_bBox_minx, $this->wmc_bBox_miny, $this->wmc_bBox_maxx, $this->wmc_bBox_maxy); + $ov_bbox = array(); + // compute the union of the overview and the mapframe bbox for the new overview bbox + if ($this->wmc_general_extension["ov_minx"] && $this->wmc_general_extension["ov_miny"] && + $this->wmc_general_extension["ov_maxx"] && $this->wmc_general_extension["ov_maxy"]) { + + // box for overview + $ov_min = new Mapbender_point($this->wmc_general_extension["ov_minx"], $this->wmc_general_extension["ov_miny"], $this->wmc_bBox_SRS); + $ov_max = new Mapbender_point($this->wmc_general_extension["ov_maxx"], $this->wmc_general_extension["ov_maxy"], $this->wmc_bBox_SRS); + $ov_box = new Mapbender_bbox($ov_min, $ov_max, $this->wmc_bBox_SRS); + + // box for mapframe + $mf_min = new Mapbender_point($this->wmc_bBox_minx, $this->wmc_bBox_miny, $this->wmc_bBox_SRS); + $mf_max = new Mapbender_point($this->wmc_bBox_maxx, $this->wmc_bBox_maxy, $this->wmc_bBox_SRS); + $mf_box = new Mapbender_bbox($mf_min, $mf_max, $this->wmc_bBox_SRS); + + $unionBox = Mapbender_bbox::union(array($ov_box, $mf_box)); + + array_push($ov_bbox, $unionBox->min->x); + array_push($ov_bbox, $unionBox->min->y); + array_push($ov_bbox, $unionBox->max->x); + array_push($ov_bbox, $unionBox->max->y); } else { - $ov_bbox = array(); +/* + $sql = "SELECT minx, miny, maxx, maxy FROM layer_epsg WHERE fkey_layer_id = $1 AND epsg = $2 LIMIT 1"; + $v = array($this->wmc_layer_id[0], $this->wmc_bBox_SRS); + $t = array('i', 's'); + $res = db_prep_query($sql, $v, $t); + $row = db_fetch_array($res); + if ($row["minx"] && $row["miny"] && $row["maxx"] && $row["maxy"]) { + $ov_bbox = array($row["minx"],$row["miny"],$row["maxx"],$row["maxy"]); + } + else if ($this->wmc_layer_id[0] && $this->wmc_bBox_SRS){ + $ov_bbox = array($this->wmc_bBox_minx, $this->wmc_bBox_miny, $this->wmc_bBox_maxx, $this->wmc_bBox_maxy); + } + else { +*/ + $ov_bbox = array(2412139.175257732, 5365000, 2767860.824742268, 5700000); +// } } + $wmc_string .= "for (var i=0; iwmc_bBox_maxx .",".$this->wmc_bBox_maxy.");\n"; $wmc_string .= "\t}\n"; $wmc_string .= "\telse {\n"; - if (count($ov_bbox)>0) { -// $wmc_string .= "alert('found bbox for ov: ".implode(',',$ov_bbox)."');"; - $wmc_string .= "\t\t".$target."mb_calculateExtent(old_mapObj[i].frameName, "; - $wmc_string .= $ov_bbox[0] .",".$ov_bbox[1] .","; - $wmc_string .= $ov_bbox[2] .",".$ov_bbox[3] .");\n"; - } - else { -// $wmc_string .= "alert('no bbox found for ov: old bbox ".$this->wmc_bBox_minx." etc');"; - $wmc_string .= "\t\t".$target."mb_calculateExtent(old_mapObj[i].frameName, "; - $wmc_string .= $this->wmc_bBox_minx .",".$this->wmc_bBox_miny .","; - $wmc_string .= $this->wmc_bBox_maxx .",".$this->wmc_bBox_maxy.");\n"; -// $wmc_string .= "\t\tvar ov_index = " . $target . "getMapObjIndexByName('overview');\n"; -// $wmc_string .= "\t\t" . $target . "mb_mapObj[ov_index].extent = old_mapObj[i].extent;\n"; - } + $wmc_string .= "\t\t".$target."mb_calculateExtent(old_mapObj[i].frameName, "; + $wmc_string .= $ov_bbox[0] .",".$ov_bbox[1] .","; + $wmc_string .= $ov_bbox[2] .",".$ov_bbox[3] .");\n"; $wmc_string .= "\t}\n"; $wmc_string .= "\t". $target . "setMapRequest(old_mapObj[i].frameName);\n"; $wmc_string .= "}\n"; @@ -707,7 +1319,9 @@ $wmc_string .= "\t". $target . "setMapRequest(old_mapObj[i].frameName);\n"; $wmc_string .= "}\n"; $wmc_string .= $target . "mb_execloadWmsSubFunctions();\n"; + $wmc_string .= $target . "mb_execloadWmcSubFunctions();\n"; } +// $e = new mb_exception("js code: " . $wmc_string); return $wmc_string; } } @@ -712,4 +1326,4 @@ } } // end class -?> +?> \ No newline at end of file Index: http/php/mod_insertWmcIntoDb.php =================================================================== --- http/php/mod_insertWmcIntoDb.php (revision 1935) +++ http/php/mod_insertWmcIntoDb.php (working copy) @@ -1,5 +1,5 @@ decode($_REQUEST["mapObject"]); +$mapObject = $json->decode(stripslashes($_POST["mapObject"])); $user_id = $_SESSION["mb_user_id"]; $save_in_session = $_POST["saveInSession"]; $generalTitle = $_POST["generalTitle"]; @@ -34,439 +33,21 @@ $save_in_session = $_POST["saveInSession"]; $generalTitle = $_POST["generalTitle"]; -$wmc_id = $user_id . '_' . time(); - -$generalWidth = $mapObject->width; -$generalHeight = $mapObject->height; -$generalBboxSrs = $mapObject->epsg; - -$arrayBBox = explode(",", $mapObject->extent); -$generalBboxMinx = floatval($arrayBBox[0]); -$generalBboxMiny = floatval($arrayBBox[1]); -$generalBboxMaxx = floatval($arrayBBox[2]); -$generalBboxMaxy = floatval($arrayBBox[3]); - -$generalName = "Mapbender WMC"; // TO do : insert proper data -$generalKeywords = array("Mapbender", "WMC"); // TO do : insert proper data -$generalAbstract = ""; // TO do : insert proper data -$generalLogoUrl = ""; // TO do : insert proper data -$generalLogoUrlWidth = ""; // TO do : insert proper data -$generalLogoUrlHeight = ""; // TO do : insert proper data -$generalLogoUrlFormat = ""; // TO do : insert proper data -$generalDescriptionUrl = ""; // TO do : insert proper data -$generalContactPerson = ""; -$generalContactOrganization = ""; -$generalContactPosition = ""; -$generalContactAddressType = ""; -$generalContactAddress = ""; -$generalContactCity = ""; -$generalContactStateOrProvince = ""; -$generalContactPostCode = ""; -$generalContactCountry = ""; -$generalContactVoiceTelephone = ""; -$generalContactFacsimileTelephone = ""; -$generalContactElectronicMailAddress = ""; - -$extension_namespace = "mapbender"; - -// LayerList variables -$layerHidden = ""; -$layerQueryable = ""; -$layerAbstract = ""; -$layerName = ""; -$layerSrs = ""; -$layerDataUrl = ""; -$layerMetadataUrl = ""; -$layerFormat = ""; -$layerFormat_current = ""; -$layerStyle_current = ""; -$layerStyle_name = ""; -$layerStyle_title = ""; -$layerStyle_legendURL = ""; -$layerStyle_legendURL_width = ""; -$layerStyle_legendURL_height = ""; -$layerStyle_legendURL_format = ""; - -// generate XML -$doc = new DOMDocument("1.0", CHARSET); -$doc->preserveWhiteSpace = false; - -// ViewContext -$e_view_context = $doc->createElementNS("http://www.opengis.net/context", "ViewContext"); - - -$e_view_context->setAttribute("version", "1.0.0"); -$e_view_context->setAttribute("id", $wmc_id); -$e_view_context->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); -$e_view_context->setAttribute("xmlns:mapbender", "http://www.mapbender.org"); -$e_view_context->setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); -$e_view_context->setAttribute("xsi:SchemaLocation", "http://schemas.opengis.net/context/1.0.0/context.xsd"); - - // General - $e_general = $doc->createElement("General"); - - $e_window = $doc->createElement("Window"); - if (!empty($generalWidth) && !empty($generalHeight)) { - $e_window->setAttribute("width", $generalWidth); - $e_window->setAttribute("height", $generalHeight); - } - $e_general->appendChild($e_window); - - $e_bbox = $doc->createElement("BoundingBox"); - $e_bbox->setAttribute("SRS", $generalBboxSrs); - $e_bbox->setAttribute("minx", $generalBboxMinx); - $e_bbox->setAttribute("miny", $generalBboxMiny); - $e_bbox->setAttribute("maxx", $generalBboxMaxx); - $e_bbox->setAttribute("maxy", $generalBboxMaxy); - $e_general->appendChild($e_bbox); - - $e_name = $doc->createElement("Name", $generalName); - $e_general->appendChild($e_name); - - $e_title = $doc->createElement("Title", $generalTitle); - $e_general->appendChild($e_title); - - $e_keyword_list = $doc->createElement("KeywordList"); - for ($i=0; $i < count($generalKeywords); $i++) { - $e_keyword = $doc->createElement("Keyword", $generalKeywords[$i]); - $e_keyword_list->appendChild($e_keyword); - } - $e_general->appendChild($e_keyword_list); - - if ($generalAbstract){ - $e_abstract = $doc->createElement("Abstract", $generalAbstract); - $e_general->appendChild($e_abstract); - } - - if ($generalLogoUrlWidth && $generalLogoUrlHeight && $generalLogoUrlFormat && $generalLogoUrl){ - $e_logo_url = $doc->createElement("LogoURL"); - $e_logo_url->setAttribute("width", $generalLogoUrlWidth); - $e_logo_url->setAttribute("height", $generalLogoUrlHeight); - $e_logo_url->setAttribute("format", $generalLogoUrlFormat); - - $e_logo_url_or = $doc->createElement("OnlineResource"); - $e_logo_url_or->setAttributeNS("http://www.opengis.net/context", "xmlns:xlink", "http://www.w3.org/1999/xlink"); - $e_logo_url_or->setAttribute("xlink:type", "simple"); - $e_logo_url_or->setAttribute("xlink:href", $generalLogoUrl); - $e_logo_url->appendChild($e_logo_url_or); - - $e_general->appendChild($e_logo_url); - } - - if ($generalDescriptionUrl){ - $e_description_url = $doc->createElement("DescriptionURL"); - - $e_description_url_or = $doc->createElement("OnlineResource"); - $e_description_url_or->setAttributeNS("http://www.opengis.net/context", "xmlns:xlink", "http://www.w3.org/1999/xlink"); - $e_description_url_or->setAttribute("xlink:type", "simple"); - $e_description_url_or->setAttribute("xlink:href", $generalDescriptionUrl); - $e_description_url->appendChild($e_description_url_or); - - $e_general->appendChild($e_description_url); - } - - if ($generalContactElectronicMailAddress || $generalContactOrganization || - $generalContactPerson || $generalContactPosition || $generalContactAddressType || - $generalContactAddress || $generalContactCity || $generalContactStateOrProvince || - $generalContactPostCode || $generalContactCountry || $generalContactVoiceTelephone || - $generalContactFacsimileTelephone || $generalContactElectronicMailAddress) { - - $e_contact = $doc->createElement("ContactInformation"); - - if ($generalContactPerson || $generalContactOrganization){ - $e_contact_person_primary = $doc->createElement("ContactPersonPrimary"); - - if ($generalContactPerson){ - $e_contact_person = $doc->createElement("ContactPerson", $generalContactPerson); - $e_contact_person_primary->appendChild($e_contact_person); - } - if ($generalContactOrganization){ - $e_contact_organization = $doc->createElement("ContactOrganization", $generalContactOrganization); - $e_contact_person_primary->appendChild($e_contact_organization); - } - $e_contact->appendChild($e_contact_person_primary); - } - - if ($generalContactPosition){ - $e_contact_position = $doc->createElement("ContactPosition", $generalContactPosition); - $e_contact->appendChild($e_contact_position); - } - - if ($generalContactAddressType || $arrayBBoxgeneralContactAddress || - $generalContactCity || $generalContactStateOrProvince || - $generalContactPostCode || $generalContactCountry) { - - $e_contact_address = $doc->createElement("ContactAddress"); - - if ($generalContactAddressType){ - $e_address_type = $doc->createElement("AddressType", $generalContactAddressType); - $e_contact_address->appendChild($e_address_type); - } - if ($generalContactAddress){ - $e_address = $doc->createElement("Address", $generalContactAddress); - $e_contact_address->appendChild($e_address); - } - if ($generalContactCity){ - $e_city = $doc->createElement("City", $generalContactCity); - $e_contact_address->appendChild($e_city); - } - if ($generalContactStateOrProvince){ - $e_state = $doc->createElement("StateOrProvince", $generalContactStateOrProvince); - $e_contact_address->appendChild($e_state); - } - if ($generalContactPostCode){ - $e_postcode = $doc->createElement("PostCode", $generalContactPostCode); - $e_contact_address->appendChild($e_postcode); - } - if ($generalContactCountry){ - $e_country = $doc->createElement("Country", $generalContactCountry); - $e_contact_address->appendChild($e_country); - } - $e_contact->appendChild($e_contact_address); - } - - if ($generalContactVoiceTelephone){ - $e_voice_telephone = $doc->createElement("ContactVoiceTelephone", $generalContactVoiceTelephone); - $e_contact->appendChild($e_voice_telephone); - } - if ($generalContactFacsimileTelephone){ - $e_facsimile_telephone = $doc->createElement("ContactFacsimileTelephone", $generalContactFacsimileTelephone); - $e_contact->appendChild($e_facsimile_telephone); - } - if ($generalContactElectronicMailAddress){ - $e_email = $doc->createElement("ContactElectronicMailAddress", $generalContactElectronicMailAddress); - $e_contact->appendChild($e_email); - } - $e_general->appendChild($e_contact); - } - $e_view_context->appendChild($e_general); - +$extensionData = $json->decode(stripslashes($_POST["extensionData"])); - // LayerList - $e_layer_list = $doc->createElement("LayerList"); - - for ($i=0; $i < count($mapObject->wms); $i++){ - $wmsId = $mapObject->wms[$i]->wms_id; - $wms_epsg = array(); - $wms_epsg[0] = $mapObject->epsg; - - if ($mapObject->wms[$i]->gui_wms_epsg != $mapObject->epsg){ - $wms_epsg[1] = $mapObject->wms[$i]->gui_wms_epsg; - } - - for ($q = 0; $q < count($mapObject->wms[$i]->gui_epsg); $q++){ - $isInArray = false; - - for ($r=0 ; $r < count($wms_epsg); $r++){ - if ($wms_epsg[$r] == $mapObject->wms[$i]->gui_epsg[$q]){ - $isInArray = true; - } - } - if ($isInArray == false){ - array_push($wms_epsg, $mapObject->wms[$i]->gui_epsg[$q]); - } - } - for ($j = 0; $j < count($mapObject->wms[$i]->objLayer); $j++){ - if ($mapObject->wms[$i]->objLayer[$j]->layer_parent != ''){ - if ($mapObject->wms[$i]->objLayer[$j]->gui_layer_visible == "1"){ - $layerHidden = 0; - } - else{ - $layerHidden = 1; - } - $layerQueryable = $mapObject->wms[$i]->objLayer[$j]->layer_queryable; - $layerQuerylayer = $mapObject->wms[$i]->objLayer[$j]->gui_layer_querylayer; - $layerId = $mapObject->wms[$i]->objLayer[$j]->layer_uid; - $layerName = $mapObject->wms[$i]->objLayer[$j]->layer_name; - $layerTitle = $mapObject->wms[$i]->objLayer[$j]->layer_title; - $layerAbstract = $mapObject->wms[$i]->wms_abstract; //To Do: insert actual abstract - $layerDataUrl = $mapObject->wms[$i]->objLayer[$j]->layer_dataurl_href; - $layerMetadataUrl = $mapObject->wms[$i]->objLayer[$j]->layer_metadataurl; - $layerMinscale = $mapObject->wms[$i]->objLayer[$j]->layer_minscale; - $layerMaxscale = $mapObject->wms[$i]->objLayer[$j]->layer_maxscale; - $wmsVersion = $mapObject->wms[$i]->wms_version; - $wmsTitle = $mapObject->wms[$i]->wms_title; - $wmsOnlineResource = $mapObject->wms[$i]->wms_getmap; - - $e_layer = $doc->createElement("Layer"); - $e_layer->setAttribute("queryable", $layerQueryable); - $e_layer->setAttribute("hidden", $layerHidden); - - $e_service = $doc->createElement("Server"); - $e_service->setAttribute("service", "OGC:WMS"); - $e_service->setAttribute("version", $wmsVersion); - $e_service->setAttribute("title", $wmsTitle); - - $e_service_or = $doc->createElement("OnlineResource"); - $e_service_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - $e_service_or->setAttribute("xlink:type", "simple"); - $e_service_or->setAttribute("xlink:href", $wmsOnlineResource); - - $e_service->appendChild($e_service_or); - $e_layer->appendChild($e_service); - - $e_layer_name = $doc->createElement("Name", $layerName); - $e_layer->appendChild($e_layer_name); - - $e_layer_title = $doc->createElement("Title", $layerTitle); - $e_layer->appendChild($e_layer_title); - - if ($layerAbstract){ - $e_layer_abstract = $doc->createElement("Abstract", $layerAbstract); - $e_layer->appendChild($e_layer_abstract); - } - - $e_layer_srs = $doc->createElement("SRS", implode(" ", $wms_epsg)); - $e_layer->appendChild($e_layer_name); - - if ($layerDataUrl){ - $e_layer_data_url = $doc->createElement("DataURL"); - - $e_layer_data_url_or = $doc->createElement("OnlineResource"); - $e_layer_data_url_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - $e_layer_data_url_or->setAttribute("xlink:type", "simple"); - $e_layer_data_url_or->setAttribute("xlink:href", $layerDataUrl); - - $e_layer_data_url->appendChild($e_layer_data_url_or); - $e_layer->appendChild($e_layer_data_url); - } - - if ($layerMetadataUrl){ - $e_layer_metadata_url = $doc->createElement("MetadataURL"); - - $e_layer_metadata_url_or = $doc->createElement("OnlineResource"); - $e_layer_metadata_url_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - $e_layer_metadata_url_or->setAttribute("xlink:type", "simple"); - $e_layer_metadata_url_or->setAttribute("xlink:href", $layerMetadataUrl); - - $e_layer_metadata_url->appendChild($e_layer_metadata_url_or); - $e_layer->appendChild($e_layer_metadata_url); - } - - $e_extension = $doc->createElement("Extension"); - - $e_scalehint = $doc->createElement($extension_namespace.":ScaleHint"); - $e_scalehint->setAttribute("min", $layerMinscale); - $e_scalehint->setAttribute("max", $layerMaxscale); - $e_extension->appendChild($e_scalehint); - - $e_layer_id = $doc->createElement($extension_namespace.":layer_id", $layerId); - $e_extension->appendChild($e_layer_id); - - $e_wms_id = $doc->createElement($extension_namespace.":wms_id", $wmsId); - $e_extension->appendChild($e_wms_id); - - $e_querylayer = $doc->createElement($extension_namespace.":querylayer", $layerQuerylayer); - $e_extension->appendChild($e_querylayer); - - $e_layer->appendChild($e_extension); - - //layerFormat - $e_layer_format = $doc->createElement("FormatList"); - - $data_format_current = false; - - for ($k = 0; $k < count($mapObject->wms[$i]->data_format); $k++){ - - if ($mapObject->wms[$i]->data_type[$k] == "map") { - $layerFormat = $mapObject->wms[$i]->data_format[$k]; - - $e_format = $doc->createElement("Format", $layerFormat); - - if ($data_format_current == false && ( - ($mapObject->wms[$i]->data_format[$k] == $mapObject->wms[$i]->gui_wms_mapformat) || - ($k == (count($mapObject->wms[$i]->data_format)-1)) - )){ - - $e_format->setAttribute("current", "1"); - $data_format_current = true; - } - $e_layer_format->appendChild($e_format); - } - } - $e_layer->appendChild($e_layer_format); - - - // LayerStyle - $e_layer_stylelist = $doc->createElement("StyleList"); - - for ($k = 0; $k < count($mapObject->wms[$i]->objLayer[$j]->layer_style); $k++){ - - if ($k == 0){ - $layerStyle_current = 1; // To do: insert proper data - } - else{ - $layerStyle_current = 0; // To do: insert proper data - } - - $e_layer_style = $doc->createElement("Style"); - - $layerStyleSLD = ""; - - if ($layerStyleSLD){ - $layerStyleSLDUrl = ""; // To Do: Insert Proper Data - - $e_layer_style_or = $doc->createElement("OnlineResource"); - $e_layer_style_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - $e_layer_style_or->setAttribute("xlink:type", "simple"); - $e_layer_style_or->setAttribute("xlink:href", $layerStyleSLDUrl); - $e_layer_style->appendChild($e_layer_style_or); - } - else{ - //TODO: determine correct layer style entries - $layerStyle_name = $mapObject->wms[$i]->objLayer[$j]->layer_style[$k]->name; - $layerStyle_title = $mapObject->wms[$i]->objLayer[$j]->layer_style[$k]->title; - $layerStyle_legendUrl = $mapObject->wms[$i]->objLayer[$j]->layer_style[$k]->legendurl; - $layerStyle_legendUrl_width = ""; // To Do: add proper data - $layerStyle_legendUrl_height = ""; // To Do: add proper data - $layerStyle_legendUrl_format = ""; // To Do: add proper data - - if ($layerStyle_current == 1){ - $e_layer_style->setAttribute("current", "1"); - } - - $e_layer_style_name = $doc->createElement("Name", $layerStyle_name); - $e_layer_style->appendChild($e_layer_style_name); - - $e_layer_style_title = $doc->createElement("Title", $layerStyle_title); - $e_layer_style->appendChild($e_layer_style_title); - - - $e_layer_style_legendurl = $doc->createElement("LegendUrl"); - $e_layer_style_legendurl->setAttribute("width", $layerStyle_legendUrl_width); - $e_layer_style_legendurl->setAttribute("height", $layerStyle_legendUrl_height); - $e_layer_style_legendurl->setAttribute("format", $layerStyle_legendUrl_format); - - $e_layer_style_legendurl_or = $doc->createElement("OnlineResource"); - $e_layer_style_legendurl_or->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - $e_layer_style_legendurl_or->setAttribute("xlink:type", "simple"); - $e_layer_style_legendurl_or->setAttribute("xlink:href", $layerStyle_legendUrl); - $e_layer_style_legendurl->appendChild($e_layer_style_legendurl_or); - $e_layer_style->appendChild($e_layer_style_legendurl); - } - $e_layer_stylelist->appendChild($e_layer_style); - } - $e_layer->appendChild($e_layer_stylelist); - - $e_layer_list->appendChild($e_layer); - } - } - } - $e_view_context->appendChild($e_layer_list); - - -$doc->appendChild($e_view_context); -$xml = $doc->saveXML(); +$wmc = new wmc(); +$wmc->createWMCFromObj($mapObject, $user_id, $generalTitle, $extensionData); if ($save_in_session) { - if (isset($_SESSION["mb_wmc"])) { - $_SESSION["mb_wmc"] = $xml; - } + $_SESSION["mb_wmc"] = $wmc->xml; + $_SESSION["epsg"] = $mapObject->epsg; + $_SESSION["previous_gui"] = $_SESSION["mb_user_gui"]; + $e = new mb_notice("mod_insertWMCIntoDB: save WMC in session succeeded."); } else { - if ($user_id && $wmc_id) { + if ($user_id && $wmc->wmc_id) { $sql = "INSERT INTO mb_user_wmc VALUES ($1, $2, $3, $4, $5)"; - $v = array($wmc_id, $user_id, $xml, $generalTitle, time()); + $v = array($wmc->wmc_id, $user_id, $wmc->xml, $generalTitle, time()); $t = array("s", "i", "s", "s", "s"); $res = db_prep_query($sql, $v, $t); @@ -471,11 +52,17 @@ $res = db_prep_query($sql, $v, $t); if (db_error()) { - echo "Error while saving WMC document '" . $generalTitle . "': " . db_error(); + $errMsg = "Error while saving WMC document '" . $generalTitle . "': " . db_error(); + echo $errMsg; + $e = new mb_exception("mod_insertWMCIntoDB: " . $errMsg); } else { - echo "WMC document '" . $generalTitle . "' has been saved."; + echo "WMC document '" . $generalTitle . "' has been saved."; + $e = new mb_notice("mod_insertWMCIntoDB: WMC '" . $generalTitle . "' saved successfully."); } } + else { + $e = new mb_exception("mod_insertWMCIntoDB: missing parameters (user_id: ".$user_id.", wmc_id: ".$wmc->wmc_id."))"); + } } ?> \ No newline at end of file