From: <ja...@us...> - 2006-04-14 02:50:14
|
Update of /cvsroot/phpicalendar/phpicalendar/lib/HTTP/WebDAV/Tools In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4581/lib/HTTP/WebDAV/Tools Modified Files: _parse_lockinfo.php _parse_propfind.php _parse_proppatch.php Log Message: * Depth: header support * Committing current WebDAV library Index: _parse_propfind.php =================================================================== RCS file: /cvsroot/phpicalendar/phpicalendar/lib/HTTP/WebDAV/Tools/_parse_propfind.php,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** _parse_propfind.php 9 Apr 2006 19:27:12 -0000 1.1.1.1 --- _parse_propfind.php 14 Apr 2006 02:50:10 -0000 1.2 *************** *** 1,4 **** <?php - // // +----------------------------------------------------------------------+ // | PHP Version 4 | --- 1,3 ---- *************** *** 19,23 **** // // $Id$ - // /** --- 18,21 ---- *************** *** 30,173 **** class _parse_propfind { ! /** ! * success state flag ! * ! * @var bool ! * @access public ! */ ! var $success = false; ! ! /** ! * found properties are collected here ! * ! * @var array ! * @access public ! */ ! var $props = false; ! /** ! * internal tag nesting depth counter ! * ! * @var int ! * @access private ! */ ! var $depth = 0; ! /** ! * constructor ! * ! * @access public ! */ ! function _parse_propfind($path) ! { ! // success state flag ! $this->success = true; ! // property storage array ! $this->props = array(); ! // internal tag depth counter ! $this->depth = 0; ! // remember if any input was parsed ! $had_input = false; ! // open input stream ! $f_in = fopen($path, 'r'); ! if (!$f_in) { ! $this->success = false; ! return; ! } ! // create XML parser ! $xml_parser = xml_parser_create_ns('UTF-8', ' '); ! // set tag and data handlers ! xml_set_element_handler($xml_parser, ! array(&$this, '_startElement'), ! array(&$this, '_endElement')); ! // we want a case sensitive parser ! xml_parser_set_option($xml_parser, ! XML_OPTION_CASE_FOLDING, false); ! // parse input ! while($this->success && !feof($f_in)) { ! $line = fgets($f_in); ! if (is_string($line)) { ! $had_input = true; ! $this->success &= xml_parse($xml_parser, $line, false); ! } ! } ! // finish parsing ! if($had_input) { ! $this->success &= xml_parse($xml_parser, '', true); ! } ! // free parser ! xml_parser_free($xml_parser); ! // close input stream ! fclose($f_in); ! // if no input was parsed it was a request ! if(!count($this->props)) $this->props = 'all'; // default ! } ! /** ! * start tag handler ! * ! * @access private ! * @param resource parser ! * @param string tag name ! * @param array tag attributes ! */ ! function _startElement($parser, $name, $attrs) ! { ! // name space handling ! if (strstr($name, ' ')) { ! list($ns, $tag) = explode(' ', $name); ! if ($ns == '') ! $this->success = false; ! } else { ! $ns = ''; ! $tag = $name; ! } ! // special tags at level 1: <allprop> and <propname> ! if ($this->depth == 1) { ! if ($tag == 'allprop') ! $this->props = 'all'; ! if ($tag == 'propname') ! $this->props = 'names'; ! } ! // requested properties are found at level 2 ! if ($this->depth == 2) { ! $prop = array('name' => $tag); ! if ($ns) ! $prop['xmlns'] = $ns; ! $this->props[] = $prop; ! } ! // increment depth count ! $this->depth++; ! } ! /** ! * end tag handler ! * ! * @access private ! * @param resource parser ! * @param string tag name ! */ ! function _endElement($parser, $name) ! { ! // here we only need to decrement the depth count ! $this->depth--; ! } } - ?> --- 28,167 ---- class _parse_propfind { ! /** ! * success state flag ! * ! * @var bool ! * @access public ! */ ! var $success = false; ! /** ! * found properties are collected here ! * ! * @var array ! * @access public ! */ ! var $props = false; ! /** ! * internal tag nesting depth counter ! * ! * @var int ! * @access private ! */ ! var $depth = 0; ! /** ! * constructor ! * ! * @access public ! */ ! function _parse_propfind($input) ! { ! // success state flag ! $this->success = true; ! // property storage array ! $this->props = array(); ! // internal tag depth counter ! $this->depth = 0; ! // remember if any input was parsed ! $had_input = false; ! // open input stream ! $handle = fopen($input, 'r'); ! if (!$handle) { ! $this->success = false; ! return; ! } ! // create XML parser ! $parser = xml_parser_create_ns('UTF-8', ' '); ! // set tag and data handlers ! xml_set_element_handler($parser, array(&$this, '_startElement'), ! array(&$this, '_endElement')); ! // we want a case sensitive parser ! xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false); ! // parse input ! while ($this->success && !feof($handle)) { ! $line = fgets($handle); ! if (is_string($line)) { ! $had_input = true; ! $this->success &= xml_parse($parser, $line, false); ! } ! } ! // finish parsing ! if ($had_input) { ! $this->success &= xml_parse($parser, '', true); ! } ! // free parser ! xml_parser_free($parser); ! // close input stream ! fclose($handle); ! // if no input was parsed it was a request ! if (empty($this->props)) { ! $this->props = 'allprop'; ! } ! } ! /** ! * start tag handler ! * ! * @access private ! * @param resource parser ! * @param string tag name ! * @param array tag attributes ! */ ! function _startElement($parser, $name, $attrs) ! { ! // name space handling ! if (strstr($name, ' ')) { ! list ($ns, $name) = explode(' ', $name); ! if (!$ns) { ! $this->success = false; ! } ! } ! // special tags at level 1: <allprop> and <propname> ! if ($this->depth == 1) { ! if ($name == 'allprop' || $name == 'propname') { ! $this->props = $name; ! } ! } ! // requested properties are found at level 2 ! if ($this->depth == 2) { ! $prop = array('name' => $name); ! if ($ns) { ! $prop['ns'] = $ns; ! } ! $this->props[] = $prop; ! } ! // increment depth count ! $this->depth++; ! } ! /** ! * end tag handler ! * ! * @access private ! * @param resource parser ! * @param string tag name ! */ ! function _endElement($parser, $name) ! { ! // here we only need to decrement the depth count ! $this->depth--; ! } } ?> |