SetError("invalid cookie expiry value type (".serialize($expires).")"));
- $new_cookies[$secure][$domain_pattern][$path][$cookie_name]=array(
- "name"=>$cookie_name,
- "value"=>$value,
- "domain"=>$domain_pattern,
- "path"=>$path,
- "expires"=>$expires,
- "secure"=>$secure
- );
- }
- }
- }
- }
- $this->cookies=$new_cookies;
- return("");
- }
-};
-
-?>
diff --git a/includes/phpsvnclient/phpsvnclient.php b/includes/phpsvnclient/phpsvnclient.php
deleted file mode 100644
index 3322596ab7..0000000000
--- a/includes/phpsvnclient/phpsvnclient.php
+++ /dev/null
@@ -1,709 +0,0 @@
-
- * @license BSD License
- */
-class phpsvnclient {
- /**
- * SVN Repository URL
- *
- * @var string
- * @access private
- */
- private $_url;
- /**
- * Cache, for don't request the same thing in a
- * short period of time.
- *
- * @var string
- * @access private
- */
- private $_cache;
- /**
- * HTTP Client object
- *
- * @var object
- * @access private
- */
- private $_http;
- /**
- * Respository Version.
- *
- * @access private
- * @var interger
- */
- private $_repVersion;
- /**
- * Password
- *
- * @access private
- * @var string
- */
- private $pass;
- /**
- * Password
- *
- * @access private
- * @var string
- */
- private $user;
- /**
- * Last error number
- *
- * Possible values are NOT_ERROR, NOT_FOUND, AUTH_REQUIRED, UNKOWN_ERROR
- *
- * @access public
- * @var integer
- */
- public $errNro;
-
- private $storeDirectoryFiles = array();
- private $lastDirectoryFiles;
-
- public function phpsvnclient($url = 'http://fusionpbx.googlecode.com/svn/', $user = false, $pass = false) {
- $this->__construct($url, $user, $pass);
- register_shutdown_function(array(&$this, '__destruct'));
- }
-
- public function __construct($url = 'http://fusionpbx.googlecode.com/svn/trunk/fusionpbx/', $user = false, $pass = false) {
- $http = & $this->_http;
- $http = new http_class;
- $http->user_agent = "FusionPBXphpsvnclient (http://fusionpbx.com/)";
-
- $this->_url = $url;
- $this->user = $user;
- $this->pass = $pass;
- }
-
-/**
- * Public Functions
- */
-
- /**
- * checkOut
- */
- public function checkOut($folder = '/', $outPath = '.') {
- while($outPath[strlen($outPath) - 1] == '/' && strlen($outPath) > 1)
- $outPath = substr($outPath, 0, -1);
- $tree = $this->getDirectoryTree($folder);
- if(!file_exists($outPath)){
- mkdir($outPath, 0777, TRUE);
- }
- foreach($tree as $file) {
- $path = $file['path'];
- $tmp = strstr(trim($path, '/'), trim($folder, '/'));
- $createPath = $outPath . '/' . ($tmp ? substr($tmp, strlen(trim($folder, '/'))) : "");
- if(trim($path, '/') == trim($folder, '/'))
- continue;
- if($file['type'] == 'directory' && !is_dir($createPath)){
- mkdir($createPath);
- }elseif($file['type'] == 'file') {
- $contents = $this->getFile($path);
- $hOut = fopen($createPath, 'w');
- fwrite($hOut, $contents);
- fclose($hOut);
- }
- }
- }
-
- /**
- * rawDirectoryDump
- *
- * This method dumps SVN data for $folder
- * in the version $version of the repository.
- *
- * @param string $folder Folder to get data
- * @param integer $version Repository version, -1 means actual
- * @return array SVN data dump.
- */
- public function rawDirectoryDump($folder='/',$version=-1) {
- $actVersion = $this->getVersion();
- if ( $version == -1 || $version > $actVersion) {
- $version = $actVersion;
- }
- $url = $this->cleanURL($this->_url . "/!svn/bc/" . $version . "/" . $folder . "/");
- $this->initQuery($args, "PROPFIND", $url);
- $args['Body'] = PHPSVN_NORMAL_REQUEST;
- $args['Headers']['Content-Length'] = strlen(PHPSVN_NORMAL_REQUEST);
-
- if ( ! $this->Request($args, $headers, $body) ) {
- return false;
- }
- $xml2Array = new xml2Array();
- return $xml2Array->xmlParse($body);
- }
-
-//
-// use this to get node of tree by path with '/' terminator
-//
-function get_value_by_path($__xml_tree, $__tag_path)
-{
- $tmp_arr =& $__xml_tree;
- print_r($tmp_arr);
- $tag_path = explode('/', $__tag_path);
- foreach($tag_path as $tag_name)
- {
- $res = false;
- foreach($tmp_arr as $key => $node)
- {
- if(is_int($key) && $node['name'] == $tag_name)
- {
- $tmp_arr = $node;
- $res = true;
- break;
- }
- }
- if(!$res)
- return false;
- }
- return $tmp_arr;
-}
-
-
-function my_xml2array($__url)
-{
- $xml_values = array();
- $contents = $__url;//file_get_contents($__url);
- $parser = xml_parser_create('');
- if(!$parser)
- return false;
-
- xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
- xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
- xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
- xml_parse_into_struct($parser, trim($contents), $xml_values);
- xml_parser_free($parser);
- if (!$xml_values)
- return array();
-
- $xml_array = array();
- $last_tag_ar =& $xml_array;
- $parents = array();
- $last_counter_in_tag = array(1=>0);
- foreach ($xml_values as $data)
- {
- switch($data['type'])
- {
- case 'open':
- $last_counter_in_tag[$data['level']+1] = 0;
- $new_tag = array('name' => $data['tag']);
- if(isset($data['attributes']))
- $new_tag['attributes'] = $data['attributes'];
- if(isset($data['value']) && trim($data['value']))
- $new_tag['value'] = trim($data['value']);
- $last_tag_ar[$last_counter_in_tag[$data['level']]] = $new_tag;
- $parents[$data['level']] =& $last_tag_ar;
- $last_tag_ar =& $last_tag_ar[$last_counter_in_tag[$data['level']]++];
- break;
- case 'complete':
- $new_tag = array('name' => $data['tag']);
- if(isset($data['attributes']))
- $new_tag['attributes'] = $data['attributes'];
- if(isset($data['value']) && trim($data['value']))
- $new_tag['value'] = trim($data['value']);
-
- $last_count = count($last_tag_ar)-1;
- $last_tag_ar[$last_counter_in_tag[$data['level']]++] = $new_tag;
- break;
- case 'close':
- $last_tag_ar =& $parents[$data['level']];
- break;
- default:
- break;
- };
- }
- return $xml_array;
-}
-
- /**
- * getDirectoryFiles
- *
- * This method returns all the files in $folder
- * in the version $version of the repository.
- *
- * @param string $folder Folder to get files
- * @param integer $version Repository version, -1 means actual
- * @return array List of files. */
- public function getDirectoryFiles($folder='/', $version=-1) {
- if ($arrOutput = $this->rawDirectoryDump($folder, $version)) {
-// echo '';
-// print_r($arrOutput);
-// echo '
';
- $files = array();
- foreach($arrOutput['children'] as $key=>$value) {
- //echo $key . ' => ' . $value . '';
- array_walk_recursive($value, array($this, 'storeDirectoryFiles'));
- array_push($files, $this->storeDirectoryFiles);
- unset($this->storeDirectoryFiles);
- }
- return $files;
- }
- return false;
- }
-
- /**
- * getDirectoryTree
- *
- * This method returns the complete tree of files and directories
- * in $folder from the version $version of the repository. Can also be used
- * to get the info for a single file or directory
- *
- * @param string $folder Folder to get tree
- * @param integer $version Repository version, -1 means actual
- * @param boolean $recursive Whether to get the tree recursively, or just
- * the specified directory/file.
- *
- * @return array List of files and directories.
- */
- public function getDirectoryTree($folder='/',$version=-1, $recursive=true) {
- $directoryTree = array();
-
- if (!($arrOutput = $this->getDirectoryFiles($folder, $version)))
- return false;
-
- if (!$recursive)
- return $arrOutput[0];
-
- while(count($arrOutput) && is_array($arrOutput)) {
- $array = array_shift($arrOutput);
-
- array_push($directoryTree, $array);
-
- if(trim($array['path'], '/') == trim($folder, '/'))
- continue;
-
- if ($array['type'] == 'directory') {
- $walk = $this->getDirectoryFiles($array['path'], $version);
- array_shift($walk);
- //$walk = array_reverse($walk);
-
- foreach($walk as $step) {
- array_unshift($arrOutput, $step);
- }
- }
- }
- return $directoryTree;
- }
-
- /**
- * Returns file contents
- *
- * @param string $file File pathname
- * @param integer $version File Version
- * @return string File content and information, false on error, or if a
- * directory is requested
- */
- public function getFile($file,$version=-1) {
- $actVersion = $this->getVersion();
- if ( $version == -1 || $version > $actVersion) {
- $version = $actVersion;
- }
-
- // check if this is a directory... if so, return false, otherwise we
- // get the HTML output of the directory listing from the SVN server.
- // This is maybe a bit heavy since it makes another connection to the
- // SVN server. Maybe add this as an option/parameter? ES 23/06/08
- $fileInfo = $this->getDirectoryTree($file, $version, false);
- if ($fileInfo["type"] == "directory")
- return false;
-
- $url = $this->cleanURL($this->_url."/!svn/bc/".$version."/".$file."/");
- $this->initQuery($args,"GET",$url);
- if ( ! $this->Request($args, $headers, $body) )
- return false;
-
- return $body;
- }
-
- /**
- * Get changes logs of a file.
- *
- * Get repository change logs between version
- * $vini and $vend.
- *
- * @param integer $vini Initial Version
- * @param integer $vend End Version
- * @return Array Respository Logs
- */
- public function getRepositoryLogs($vini=0,$vend=-1) {
- return $this->getFileLogs("/",$vini,$vend);
- }
-
- /**
- * Get changes logs of a file.
- *
- * Get repository change of a file between version
- * $vini and $vend.
- *
- * @param
- * @param integer $vini Initial Version
- * @param integer $vend End Version
- * @return Array Respository Logs
- */
- public function getFileLogs($file, $vini=0,$vend=-1) {
- $fileLogs = array();
-
- $actVersion = $this->getVersion();
- if ( $vend == -1 || $vend > $actVersion)
- $vend = $actVersion;
-
- if ( $vini < 0) $vini=0;
- if ( $vini > $vend) $vini = $vend;
-
- $url = $this->cleanURL($this->_url."/!svn/bc/".$actVersion."/".$file."/");
- $this->initQuery($args,"REPORT",$url);
- $args['Body'] = sprintf(PHPSVN_LOGS_REQUEST,$vini,$vend);
- $args['Headers']['Content-Length'] = strlen($args['Body']);
- $args['Headers']['Depth']=1;
-
- if ( ! $this->Request($args, $headers, $body) )
- return false;
-
- $xml2Array = new xml2Array();
- $arrOutput = $xml2Array->xmlParse($body);
-// array_shift($arrOutput['children']);
-
- foreach($arrOutput['children'] as $value) {
- $array=array();
- foreach($value['children'] as $entry) {
- if ($entry['name'] == 'D:VERSION-NAME') $array['version'] = $entry['tagData'];
- if ($array['version'] == $vini) continue 2;
- if ($entry['name'] == 'D:CREATOR-DISPLAYNAME') $array['author'] = $entry['tagData'];
- if ($entry['name'] == 'S:DATE') $array['date'] = $entry['tagData'];
- if ($entry['name'] == 'D:COMMENT') $array['comment'] = $entry['tagData'];
-
- if (($entry['name'] == 'S:ADDED-PATH') ||
- ($entry['name'] == 'S:MODIFIED-PATH') ||
- ($entry['name'] == 'S:DELETED-PATH')) {
- // For backward compatability
- $array['files'][] = $entry['tagData'];
-
- if ($entry['name'] == 'S:ADDED-PATH') $array['add_files'][] = $entry['tagData'];
- if ($entry['name'] == 'S:MODIFIED-PATH') $array['mod_files'][] = $entry['tagData'];
- if ($entry['name'] == 'S:DELETED-PATH') $array['del_files'][] = $entry['tagData'];
- }
- }
- array_push($fileLogs,$array);
- }
-
- return $fileLogs;
- }
-
-
- /**
- * Get the repository version
- *
- * @return integer Repository version
- * @access public
- */
- public function getVersion() {
- if ( $this->_repVersion > 0) return $this->_repVersion;
-
- $this->_repVersion = -1; $this->initQuery($args,"PROPFIND",$this->cleanURL($this->_url."/!svn/vcc/default") );
- $args['Body'] = PHPSVN_VERSION_REQUEST;
- $args['Headers']['Content-Length'] = strlen(PHPSVN_NORMAL_REQUEST);
- $args['Headers']['Depth']=0;
-
- if ( !$this->Request($args, $tmp, $body) ) {
- return $this->_repVersion;
- }
-
- $parser=new xml_parser_class;
- $parser->Parse( $body,true);
- $enable=false;
- foreach($parser->structure as $value) {
- if ( $enable ) {
- $t = explode("/",$value);
-
- // start from the end and move backwards until we find a non-blank entry
- $index = count($t) - 1;
- while ($t[$index] == ""){
- $index--;
- }
-
- // check the last non-empty element to see if it's numeric. If so, it's the revision number
- if (is_numeric($t[$index])) {
- $this->_repVersion = $t[$index];
- break;
- }
- else {
- // If there was no number, this was the wrong D:href, so disable 'til we find the next one.
- $enable = false;
- continue;
- }
- }
- if ( is_array($value) && $value['Tag'] == 'D:href') $enable = true;
- }
- return $this->_repVersion;
- }
-
-/**
- * Deprecated functions for backward comatability
- */
-
- /**
- * Set URL
- *
- * Set the project repository URL.
- *
- * @param string $url URL of the project.
- * @access public
- */
- public function setRepository($url) {
- $this->_url = $url;
- }
- /**
- * Old method; there's a typo in the name. This is now a wrapper for setRepository
- */
- public function setRespository($url) {
- return $this->setRepository($url);
- }
- /**
- * Add Authentication settings
- *
- * @param string $user Username
- * @param string $pass Password
- */
- public function setAuth($user,$pass) {
- $this->user = $user;
- $this->pass = $pass;
- }
-
-/**
- * Private Functions
- */
- /**
- * Callback for array_walk_recursive in public function getDirectoryFiles
- *
- * @access private
- */
- private function storeDirectoryFiles($item, $key) {
- if ($key == 'name') {
- switch ($item) {
- case 'D:HREF':
- case 'LP1:GETLASTMODIFIED':
- case 'LP2:BASELINE-RELATIVE-PATH':
- case 'LP3:BASELINE-RELATIVE-PATH':
- case 'LP3:MD5-CHECKSUM':
- case 'LP1:VERSION-NAME':
- case 'LP1:GETCONTENTLENGTH':
- case 'D:STATUS':
- $this->lastDirectoryFiles = $item;
- break;
- default:
- break;
- }
- } elseif (($key == 'tagData') && ($this->lastDirectoryFiles != '')) {
-
- // Unsure if the 1st of two D:HREF's always returns the result we want, but for now...
- if (($this->lastDirectoryFiles == 'D:HREF') && (isset($this->storeDirectoryFiles['type']))) return;
-
- // Dump into the array
- $ldf = $this->lastDirectoryFiles;
- switch ($ldf) {
- case 'D:HREF':
- $var = 'type';
- break;
- case 'LP1:GETLASTMODIFIED':
- $var = 'last_mod';
-// $var = "$ldf";
- break;
- case 'LP2:BASELINE-RELATIVE-PATH':
- case 'LP3:BASELINE-RELATIVE-PATH':
- $var = 'path';
-// $var = "$ldf";
- break;
- case 'LP3:MD5-CHECKSUM':
- $var = 'md5';
-// $var = "$ldf";
- break;
-/* case 'LP1:VERSION-NAME':
- $var = 'version';
- break;
- case 'LP1:GETCONTENTLENGTH':
- $var = 'size';
- break;
-*/ case 'D:STATUS':
-// return;
- $var = 'status';
-// $var = "$ldf";
- break;
- default:
- //$var = "$ldf";
- break;
-
- }
- $this->storeDirectoryFiles[$var] = $item;
- $this->lastDirectoryFiles = '';
- // Detect 'type' as either a 'directory' or 'file'
- if ( (isset($this->storeDirectoryFiles['type'])) &&
- //(isset($this->storeDirectoryFiles['last-mod'])) &&
- (isset($this->storeDirectoryFiles['path']))
- && (isset($this->storeDirectoryFiles['status']))
- ) {
- $this->storeDirectoryFiles['path'] = str_replace(' ', '%20', $this->storeDirectoryFiles['path']); //Hack to make filenames with spaces work.
- $len = strlen($this->storeDirectoryFiles['path']);
- if ( substr($this->storeDirectoryFiles['type'],strlen($this->storeDirectoryFiles['type']) - $len) == $this->storeDirectoryFiles['path'] ) {
- $this->storeDirectoryFiles['type'] = 'file';
- } else {
- $this->storeDirectoryFiles['type'] = 'directory';
- }
- }
-
- } else {
- $this->lastDirectoryFiles = '';
- }
- }
-
- /**
- * Prepare HTTP CLIENT object
- *
- * @param array &$arguments Byreferences variable.
- * @param string $method Method for the request (GET,POST,PROPFIND, REPORT,ETC).
- * @param string $url URL for the action.
- * @access private
- */
- private function initQuery(&$arguments,$method, $url) {
- $http = & $this->_http;
- $http->GetRequestArguments($url,$arguments);
- if ( isset($this->user) && isset($this->pass)) {
- $arguments["Headers"]["Authorization"] = " Basic ".base64_encode($this->user.":".$this->pass);
- }
- $arguments["RequestMethod"]=$method;
- $arguments["Headers"]["Content-Type"] = "text/xml";
- $arguments["Headers"]["Depth"] = 1;
- }
-
- /**
- * Open a connection, send request, read header
- * and body.
- *
- * @param Array $args Connetion's argument
- * @param Array &$headers Array with the header response.
- * @param string &$body Body response.
- * @return boolean True is query success
- * @access private
- */
- private function Request($args, &$headers, &$body) {
- $args['RequestURI'] = str_replace(' ', '%20', $args['RequestURI']); //Hack to make filenames with spaces work.
- $http = & $this->_http;
- $http->Open($args);
- $http->SendRequest($args);
- $http->ReadReplyHeaders($headers);
-// echo "\n";
-// print_r($http);
-// echo "\n";
- if ($http->response_status[0] != 2) {
- switch( $http->response_status ) {
- case 404:
- $this->errNro=NOT_FOUND;
- break;
- case 401:
- $this->errNro=AUTH_REQUIRED;
- break;
- default:
- $this->errNro=UNKNOWN_ERROR;
- }
- $http->close();
- return false;
- }
- $this->errNro = NO_ERROR;
- $body='';
- $tbody='';
- for(;;) {
- $error=$http->ReadReplyBody($tbody,1000);
- if($error!="" || strlen($tbody)==0) break;
- $body.=($tbody);
- }
- $http->close();
- return true;
- }
-
- /**
- * Clean URL
- *
- * Delete "//" on URL requests.
- *
- * @param string $url URL
- * @return string New cleaned URL.
- * @access private
- */
- private function cleanURL($url) {
- return preg_replace("/((^:)\/\/)/", "//", $url);
- }
-}
-?>
-
diff --git a/includes/phpsvnclient/xml2Array.php b/includes/phpsvnclient/xml2Array.php
deleted file mode 100644
index 1c21d957b2..0000000000
--- a/includes/phpsvnclient/xml2Array.php
+++ /dev/null
@@ -1,56 +0,0 @@
-
-Usage
- Grab some XML data, either from a file, URL, etc. however you want.
- Assume storage in $strYourXML;
-
- $arrOutput = new xml2Array($strYourXML);
- print_r($arrOutput); //print it out, or do whatever!
-*/
-class xml2Array {
-
- private $arrOutput = array();
- private $resParser;
- private $strXmlData;
-
- public function xmlParse($strInputXML) {
- $this->resParser = xml_parser_create ();
- xml_set_object($this->resParser,$this);
- xml_set_element_handler($this->resParser, "tag_open", "tagClosed");
- xml_set_character_data_handler($this->resParser, "tagData");
-
- $this->strXmlData = xml_parse($this->resParser,$strInputXML );
- if(!$this->strXmlData) {
- die(sprintf("XML error: %s at line %d",
- xml_error_string(xml_get_error_code($this->resParser)),
- xml_get_current_line_number($this->resParser)));
- }
-
- xml_parser_free($this->resParser);
- // Changed by Deadpan110
- //return $this->arrOutput;
- return $this->arrOutput[0];
- }
-
- private function tag_open($parser, $name, $attrs) {
- $tag=array("name"=>$name,"attrs"=>$attrs);
- array_push($this->arrOutput,$tag);
- }
-
- private function tagData($parser, $tagData) {
- if(trim($tagData)) {
- if(isset($this->arrOutput[count($this->arrOutput)-1]['tagData'])) {
- $this->arrOutput[count($this->arrOutput)-1]['tagData'] .= $tagData;
- } else {
- $this->arrOutput[count($this->arrOutput)-1]['tagData'] = $tagData;
- }
- }
- }
-
- private function tagClosed($parser, $name) {
- $this->arrOutput[count($this->arrOutput)-2]['children'][] = $this->arrOutput[count($this->arrOutput)-1];
- array_pop($this->arrOutput);
- }
-}
-?>
\ No newline at end of file
diff --git a/includes/phpsvnclient/xml_parser.php b/includes/phpsvnclient/xml_parser.php
deleted file mode 100644
index 15e02e0f6a..0000000000
--- a/includes/phpsvnclient/xml_parser.php
+++ /dev/null
@@ -1,427 +0,0 @@
-error,""))
- $xml_parser_handlers[$parser]->StartElement($xml_parser_handlers[$parser],$name,$attrs);
-}
-
-Function xml_parser_end_element_handler($parser,$name)
-{
- global $xml_parser_handlers;
-
- if(!strcmp($xml_parser_handlers[$parser]->error,""))
- $xml_parser_handlers[$parser]->EndElement($xml_parser_handlers[$parser],$name);
-}
-
-Function xml_parser_character_data_handler($parser,$data)
-{
- global $xml_parser_handlers;
-
- if(!strcmp($xml_parser_handlers[$parser]->error,""))
- $xml_parser_handlers[$parser]->CharacterData($xml_parser_handlers[$parser],$data);
-}
-
-class xml_parser_handler_class
-{
- var $xml_parser;
- var $error_number=0;
- var $error="";
- var $error_code=0;
- var $error_line,$error_column,$error_byte_index;
- var $structure=array();
- var $positions=array();
- var $path="";
- var $store_positions=0;
- var $simplified_xml=0;
- var $fail_on_non_simplified_xml=0;
-
- Function SetError(&$object,$error_number,$error)
- {
- $object->error_number=$error_number;
- $object->error=$error;
- $object->error_line=xml_get_current_line_number($object->xml_parser);
- $object->error_column=xml_get_current_column_number($object->xml_parser);
- $object->error_byte_index=xml_get_current_byte_index($object->xml_parser);
- }
-
- Function SetElementData(&$object,$path,&$data)
- {
- $object->structure[$path]=$data;
- if($object->store_positions)
- {
- $object->positions[$path]=array(
- "Line"=>xml_get_current_line_number($object->xml_parser),
- "Column"=>xml_get_current_column_number($object->xml_parser),
- "Byte"=>xml_get_current_byte_index($object->xml_parser)
- );
- }
- }
-
- Function StartElement(&$object,$name,&$attrs)
- {
- if(strcmp($this->path,""))
- {
- $element=$object->structure[$this->path]["Elements"];
- $object->structure[$this->path]["Elements"]++;
- $this->path.=",$element";
- }
- else
- {
- $element=0;
- $this->path="0";
- }
- $data=array(
- "Tag"=>$name,
- "Elements"=>0
- );
- if($object->simplified_xml)
- {
- if($object->fail_on_non_simplified_xml
- && count($attrs)>0)
- {
- $this->SetError($object,2,"Simplified XML can not have attributes in tags");
- return;
- }
- }
- else
- $data["Attributes"]=$attrs;
- $this->SetElementData($object,$this->path,$data);
- }
-
- Function EndElement(&$object,$name)
- {
- $this->path=(($position=strrpos($this->path,",")) ? substr($this->path,0,$position) : "");
- }
-
- Function CharacterData(&$object,$data)
- {
- $element=$object->structure[$this->path]["Elements"];
- $previous=$this->path.",".strval($element-1);
- if($element>0
- && GetType($object->structure[$previous])=="string")
- $object->structure[$previous].=$data;
- else
- {
- $this->SetElementData($object,$this->path.",$element",$data);
- $object->structure[$this->path]["Elements"]++;
- }
- }
-};
-
-class xml_parser_class
-{
- var $xml_parser=0;
- var $parser_handler;
- var $error="";
- var $error_number=0;
- var $error_line=0;
- var $error_column=0;
- var $error_byte_index=0;
- var $error_code=0;
- var $stream_buffer_size=4096;
- var $structure=array();
- var $positions=array();
- var $store_positions=0;
- var $case_folding=0;
- var $target_encoding="ISO-8859-1";
- var $simplified_xml=0;
- var $fail_on_non_simplified_xml=0;
-
- Function xml_parser_start_element_handler($parser,$name,$attrs)
- {
- if(!strcmp($this->error,""))
- $this->parser_handler->StartElement($this,$name,$attrs);
- }
-
- Function xml_parser_end_element_handler($parser,$name)
- {
- if(!strcmp($this->error,""))
- $this->parser_handler->EndElement($this,$name);
- }
-
- Function xml_parser_character_data_handler($parser,$data)
- {
- if(!strcmp($this->error,""))
- $this->parser_handler->CharacterData($this,$data);
- }
-
- Function SetErrorPosition($error_number,$error,$line,$column,$byte_index)
- {
- $this->error_number=$error_number;
- $this->error=$error;
- $this->error_line=$line;
- $this->error_column=$column;
- $this->error_byte_index=$byte_index;
- }
-
- Function SetError($error_number,$error)
- {
- $this->error_number=$error_number;
- $this->error=$error;
- if($this->xml_parser)
- {
- $line=xml_get_current_line_number($this->xml_parser);
- $column=xml_get_current_column_number($this->xml_parser);
- $byte_index=xml_get_current_byte_index($this->xml_parser);
- }
- else
- {
- $line=$column=1;
- $byte_index=0;
- }
- $this->SetErrorPosition($error_number,$error,$line,$column,$byte_index);
- }
-
- Function Parse($data,$end_of_data)
- {
- global $xml_parser_handlers;
-
- if(strcmp($this->error,""))
- return($this->error);
- if(!$this->xml_parser)
- {
- if(!function_exists("xml_parser_create"))
- {
- $this->SetError(1,"XML support is not available in this PHP configuration");
- return($this->error);
- }
- if(!($this->xml_parser=xml_parser_create()))
- {
- $this->SetError(1,"Could not create the XML parser");
- return($this->error);
- }
- xml_parser_set_option($this->xml_parser,XML_OPTION_CASE_FOLDING,$this->case_folding);
- xml_parser_set_option($this->xml_parser,XML_OPTION_TARGET_ENCODING,$this->target_encoding);
- if(function_exists("xml_set_object"))
- {
- xml_set_object($this->xml_parser,$this);
- $this->parser_handler=new xml_parser_handler_class;
- $this->structure=array();
- $this->positions=array();
- }
- else
- {
- $xml_parser_handlers[$this->xml_parser]=new xml_parser_handler_class;
- $xml_parser_handlers[$this->xml_parser]->xml_parser=$this->xml_parser;
- $xml_parser_handlers[$this->xml_parser]->store_positions=$this->store_positions;
- $xml_parser_handlers[$this->xml_parser]->simplified_xml=$this->simplified_xml;
- $xml_parser_handlers[$this->xml_parser]->fail_on_non_simplified_xml=$this->fail_on_non_simplified_xml;
- }
- xml_set_element_handler($this->xml_parser,"xml_parser_start_element_handler","xml_parser_end_element_handler");
- xml_set_character_data_handler($this->xml_parser,"xml_parser_character_data_handler");
- }
- $parser_ok=xml_parse($this->xml_parser,$data,$end_of_data);
- if(!function_exists("xml_set_object"))
- $this->error=$xml_parser_handlers[$this->xml_parser]->error;
- if(!strcmp($this->error,""))
- {
- if($parser_ok)
- {
- if($end_of_data)
- {
- if(function_exists("xml_set_object"))
- Unset($this->parser_handler);
- else
- {
- $this->structure=$xml_parser_handlers[$this->xml_parser]->structure;
- $this->positions=$xml_parser_handlers[$this->xml_parser]->positions;
- Unset($xml_parser_handlers[$this->xml_parser]);
- }
- xml_parser_free($this->xml_parser);
- $this->xml_parser=0;
- }
- }
- else
- $this->SetError(2,"Could not parse data: ".xml_error_string($this->error_code=xml_get_error_code($this->xml_parser)));
- }
- else
- {
- if(!function_exists("xml_set_object"))
- {
- $this->error_number=$xml_parser_handlers[$this->xml_parser]->error_number;
- $this->error_code=$xml_parser_handlers[$this->xml_parser]->error_code;
- $this->error_line=$xml_parser_handlers[$this->xml_parser]->error_line;
- $this->error_column=$xml_parser_handlers[$this->xml_parser]->error_column;
- $this->error_byte_index=$xml_parser_handlers[$this->xml_parser]->error_byte_index;
- }
- }
- return($this->error);
- }
-
- Function VerifyWhiteSpace($path)
- {
- if($this->store_positions)
- {
- $line=$parser->positions[$path]["Line"];
- $column=$parser->positions[$path]["Column"];
- $byte_index=$parser->positions[$path]["Byte"];
- }
- else
- {
- $line=$column=1;
- $byte_index=0;
- }
- if(!IsSet($this->structure[$path]))
- {
- $this->SetErrorPosition(2,"element path does not exist",$line,$column,$byte_index);
- return($this->error);
- }
- if(GetType($this->structure[$path])!="string")
- {
- $this->SetErrorPosition(2,"element is not data",$line,$column,$byte_index);
- return($this->error);
- }
- $data=$this->structure[$path];
- for($previous_return=0,$position=0;$positionSetErrorPosition(2,"data is not white space",$line,$column,$byte_index);
- return($this->error);
- }
- }
- return("");
- }
-
- Function ParseStream($stream)
- {
- if(strcmp($this->error,""))
- return($this->error);
- do
- {
- if(!($data=@fread($stream,$this->stream_buffer_size)))
- {
- if(!feof($stream))
- {
- $this->SetError(3,"Could not read from input stream".(IsSet($php_errormsg) ? ': '.$php_errormsg : ''));
- break;
- }
- }
- if(strcmp($error=$this->Parse($data,feof($stream)),""))
- break;
- }
- while(!feof($stream));
- return($this->error);
- }
-
- Function ParseFile($file)
- {
- if(!file_exists($file))
- return("the XML file to parse ($file) does not exist");
- if(!($definition=@fopen($file,"r")))
- return("could not open the XML file ($file)".(IsSet($php_errormsg) ? ': '.$php_errormsg : ''));
- $error=$this->ParseStream($definition);
- fclose($definition);
- return($error);
- }
-};
-
-Function XMLParseFile(&$parser,$file,$store_positions,$cache="",$case_folding=0,$target_encoding="ISO-8859-1",$simplified_xml=0,$fail_on_non_simplified_xml=0)
-{
- if(!file_exists($file))
- return("the XML file to parse ($file) does not exist");
- if(strcmp($cache,""))
- {
- if(file_exists($cache)
- && filemtime($file)<=filemtime($cache))
- {
- if(($cache_file=@fopen($cache,"r")))
- {
- if(function_exists("set_file_buffer"))
- set_file_buffer($cache_file,0);
- if(!($cache_contents=@fread($cache_file,filesize($cache))))
- $error="could not read from the XML cache file $cache".(IsSet($php_errormsg) ? ': '.$php_errormsg : '');
- else
- $error="";
- fclose($cache_file);
- if(!strcmp($error,""))
- {
- if(GetType($parser=unserialize($cache_contents))=="object"
- && IsSet($parser->structure))
- {
- if(!IsSet($parser->simplified_xml))
- $parser->simplified_xml=0;
- if(($simplified_xml
- || !$parser->simplified_xml)
- && (!$store_positions
- || $parser->store_positions))
- {
- return("");
- }
- }
- else
- $error="it was not specified a valid cache object in XML file ($cache)";
- }
- }
- else
- $error="could not open cache XML file ($cache)".(IsSet($php_errormsg) ? ': '.$php_errormsg : '');
- if(strcmp($error,""))
- return($error);
- }
- }
- $parser=new xml_parser_class;
- $parser->store_positions=$store_positions;
- $parser->case_folding=$case_folding;
- $parser->target_encoding=$target_encoding;
- $parser->simplified_xml=$simplified_xml;
- $parser->fail_on_non_simplified_xml=$fail_on_non_simplified_xml;
- if(!strcmp($error=$parser->ParseFile($file),"")
- && strcmp($cache,""))
- {
- if(($cache_file=@fopen($cache,"w")))
- {
- if(function_exists("set_file_buffer"))
- set_file_buffer($cache_file,0);
- if(!@fwrite($cache_file,serialize($parser))
- || !@fclose($cache_file))
- $error="could to write to the XML cache file ($cache)".(IsSet($php_errormsg) ? ': '.$php_errormsg : '');
- if(strcmp($error,""))
- unlink($cache);
- }
- else
- $error="could not open for writing to the cache file ($cache)".(IsSet($php_errormsg) ? ': '.$php_errormsg : '');
- }
- return($error);
-}
-
-?>
\ No newline at end of file