[Mapbender-commits] r4515 - branches/mifan_dev/mapbender/http/classes

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Thu Aug 13 16:08:36 EDT 2009


Author: mifan
Date: 2009-08-13 16:08:36 -0400 (Thu, 13 Aug 2009)
New Revision: 4515

Added:
   branches/mifan_dev/mapbender/http/classes/class_cswrecord.php
Log:
class to hold csw records

Added: branches/mifan_dev/mapbender/http/classes/class_cswrecord.php
===================================================================
--- branches/mifan_dev/mapbender/http/classes/class_cswrecord.php	                        (rev 0)
+++ branches/mifan_dev/mapbender/http/classes/class_cswrecord.php	2009-08-13 20:08:36 UTC (rev 4515)
@@ -0,0 +1,281 @@
+<?php
+# $Id$
+# http://www.mapbender.org/index.php/class_cat_record
+# Copyright (C) 2002 CCGIS 
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+require_once(dirname(__FILE__)."/../../core/globalSettings.php");
+require_once(dirname(__FILE__)."/class_connector.php");
+require_once(dirname(__FILE__)."/class_user.php");
+require_once(dirname(__FILE__)."/class_administration.php");
+
+/**
+ * CSW main class to hold catalog object
+ * @author nazgul
+ *
+ */
+class cswrecord{
+	
+	var $getrecords_status;
+	var $elementSet;
+	var $numberOfRecordsMatched;
+	
+	//Store GetRecords response XML for future caching needs
+	var $getRecordsDoc;
+	
+	//Array of cswSummaryRecord Objects
+	var $SummaryRecordsArray = array();
+	
+	//Constructor
+	function cswrecord(){
+		
+	}
+	
+	// Public Methods
+	
+	/**
+	 * Create cswrecord object from GetRecords XML response
+	 * @return unknown_type
+	 * @param $url URL of getrecords
+	 * @param $xml Post, SOAP XML
+	 * @todo handle XML for POST,SOAP
+	 */
+	public function createCSWRecordFromXML($url,$xml=null)
+	{
+		//create connector
+		$data=null;
+		//@todo handle post,soap
+		if($xml != null){
+			$connection = new connector();
+        	$connection->set("httpType", "post");
+        	$connection->set("httpContentType", "xml");
+        	$connection->set("httpPostData", $xml);
+        	$data = $connection->load($url);
+		}
+		else{
+			$x = new connector($url);
+			$data = $x->file;
+		}
+        
+		if(!$data){
+			$this->getrecords_status=false;
+			$e = new mb_exception("CAT getrecords returned no result: " . $url . "\n" . $postData);
+			return false;
+		}
+		else {
+			$this->getrecords_status=true;
+		}
+		
+		//arrays to hold xml struct values and index
+		$value_array = null;
+		$index_array = null;
+		
+		//operational vars
+		$op_type=null; //get-capabilities, getrecords ...
+		$op_sub_type=null; //get,post,....
+		$op_constraint=false;
+		
+		//Store XML response
+		//@todo cache this
+		$this->getRecordsDoc = $data;
+		
+		$parser = xml_parser_create("");
+		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,$value_array,$index_array);
+		
+		//echo "values:".print_r($value_array);
+		//echo "index:".print_r($vindex_array);
+		
+		$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);
+		}
+		
+		xml_parser_free($parser);
+		
+		foreach($value_array as $element){
+			//Version 2.0.2
+			//@todo: handle other profiles
+			
+			if((mb_strtoupper($element[tag]) == "CSW:SEARCHRESULTS" OR mb_strtoupper($element[tag]) == "SEARCHRESULTS") && $element[type] == "open"){
+				$this->elementSet = $element[attributes][elementSet];
+				$this->numberOfRecordsMatched = $element[attributes][numberOfRecordsMatched];
+			}
+			
+			if((mb_strtoupper($element[tag]) == "CSW:SUMMARYRECORD" OR mb_strtoupper($element[tag]) == "SUMMARYRECORD") && $element[type] == "open"){
+				//Create SummaryRecords Object
+				$summaryObj = new cswSummaryRecord();
+			}
+			
+			//SummaryRecord elements
+			
+			//ID
+			if((mb_strtoupper($element[tag]) == "DC:IDENTIFIER" OR mb_strtoupper($element[tag]) == "IDENTIFIER")){
+				$summaryObj->identifier = $element[value];
+			}
+			//Title
+			if((mb_strtoupper($element[tag]) == "DC:TITLE" OR mb_strtoupper($element[tag]) == "TITLE")){
+				$summaryObj->title = $element[value];
+			}
+			
+			//@todo handle multiple subject elements
+			//Subject
+			if((mb_strtoupper($element[tag]) == "DC:SUBJECT" OR mb_strtoupper($element[tag]) == "SUBJECT")){
+				$summaryObj->subject = $element[value];
+			}
+			
+			//Abstract
+			if((mb_strtoupper($element[tag]) == "DC:ABSTRACT" OR mb_strtoupper($element[tag]) == "ABSTRACT")){
+				$summaryObj->abstract = $element[value];
+			}
+			
+			//Modified
+			if((mb_strtoupper($element[tag]) == "DC:MODIFIED" OR mb_strtoupper($element[tag]) == "MODIFIED")){
+				$summaryObj->modified = $element[value];
+			}
+			
+			//Type
+			if((mb_strtoupper($element[tag]) == "DC:TYPE" OR mb_strtoupper($element[tag]) == "TYPE")){
+				$summaryObj->type = $element[value];
+			}
+			
+			//Format
+			if((mb_strtoupper($element[tag]) == "DC:FORMAT" OR mb_strtoupper($element[tag]) == "FORMAT")){
+				$summaryObj->format = $element[value];
+			}
+			
+			if((mb_strtoupper($element[tag]) == "CSW:SUMMARYRECORD" OR mb_strtoupper($element[tag]) == "SUMMARYRECORD") && $element[type] == "close"){
+				//{ush SummaryRecords Object to Array
+				array_push($this->SummaryRecordsArray,$summaryObj);
+			}
+		}
+		
+		//Success/Failure
+		if($this->numberOfRecordsMatched==0){
+			$this->getrecords_status=false;
+			$e = new mb_exception("There are no records that match your criteria");
+			return false;
+		}
+		else{
+			$this->getrecords_status = true;
+			$e = new mb_notice("GetRecords Results Returned");
+			return true;
+		}	
+		
+	}
+			
+	/**
+	 * Function to handle whitespace and carriage returns
+	 * Inspired by WMS code
+	 * @param $string
+	 * @return unknown_type
+	 */
+	function stripEndlineAndCarriageReturn($string) {
+	  	return preg_replace("/\n/", "", preg_replace("/\r/", " ", $string));
+	}
+	
+}
+
+/**
+ * cswSummaryRecord to hold SummaryRecord Objects
+ * GetRecord(1)-SummaryRecord(n) 
+ * @author nazgul
+ *
+ */
+class cswSummaryRecord{
+	
+	//Vars
+	var $identifier;
+	var $title;
+	var $subject;
+	var $abstract;
+	var $modified;
+	var $type;
+	var $format;
+	
+	//Constructor
+	function cswSummaryRecord(){
+		
+	}
+	
+	//Getters
+	
+	public function getIdentifier(){
+		return $this->identifier;
+	}
+	
+	public function getTitle(){
+		return $this->title;
+	}
+	
+	public function getSubject(){
+		return $this->subject;
+	}
+	
+	public function getAbstract(){
+		return $this->abstract;
+	}
+	
+	public function getModified(){
+		return $this->modified;
+	}
+	
+	public function getType(){
+		return $this->type;
+	}
+	
+	public function getFormat(){
+		return $this->format;
+	}
+	
+	//Setters
+	
+	public function setIdentifier($identifier){
+		return $this->identifier = $identifier;
+	}
+	
+	public function setTitle($title){
+		return $this->title = $title;
+	}
+	
+	public function setSubject($subject){
+		return $this->subject = $subject;
+	}
+	
+	public function setAbstract($abstract){
+		return $this->abstract = $abstract;
+	}
+	
+	public function setModified($modified){
+		return $this->modified = $modified;
+	}
+	
+	public function setType($type){
+		return $this->type = $type;
+	}
+	
+	public function setFormat($format){
+		return $this->format = $format;
+	}
+	
+}
+
+
+
+?>
\ No newline at end of file



More information about the Mapbender_commits mailing list