first commit

This commit is contained in:
Roman Pyrih
2026-04-21 15:48:41 +02:00
commit 7483681901
10216 changed files with 3236626 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
<?php
// helper class for parsing LOCK request bodies
class HTTP_WebDAV_Client_parse_lock_response
{
var $locktoken = "";
var $collect_locktoken = false;
public function __construct($response)
{
$xml_parser = xml_parser_create_ns("UTF-8", " ");
xml_set_element_handler($xml_parser,
array($this, "_startElement"),
array($this, "_endElement"));
xml_set_character_data_handler($xml_parser,
array($this, "_data"));
xml_parser_set_option($xml_parser,
XML_OPTION_CASE_FOLDING, false);
$this->success = xml_parse($xml_parser, $response, true);
xml_parser_free($xml_parser);
}
private function _startElement($parser, $name, $attrs)
{
if (strstr($name, " ")) {
list($ns, $tag) = explode(" ", $name);
} else {
$ns = "";
$tag = $name;
}
if ($ns == "DAV:") {
switch ($tag) {
case "locktoken":
$this->collect_locktoken = true;
break;
}
}
}
private function _data($parser, $data)
{
if ($this->collect_locktoken) {
$this->locktoken .= $data;
}
}
private function _endElement($parser, $name)
{
if (strstr($name, " ")) {
list($ns, $tag) = explode(" ", $name);
} else {
$ns = "";
$tag = $name;
}
switch ($tag) {
case "locktoken":
$this->collect_locktoken = false;
$this->locktoken = trim($this->locktoken);
break;
}
}
}
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* indent-tabs-mode:nil
* End:
*/

View File

@@ -0,0 +1,157 @@
<?php
// helper class for parsing PROPFIND response bodies
class HTTP_WebDAV_Client_parse_propfind_response
{
public $urls;
public $success;
private $_depth;
private $_tmpprop;
private $_tmphref;
private $_tmpvals;
private $_tmpdata;
private $_tmpstat;
// get requested properties as array containing name/namespace pairs
public function __construct($response)
{
$this->urls = array();
$this->_depth = 0;
$xml_parser = xml_parser_create_ns("UTF-8", " ");
xml_set_element_handler($xml_parser,
array($this, "_startElement"),
array($this, "_endElement"));
xml_set_character_data_handler($xml_parser,
array($this, "_data"));
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING,
false);
$this->success = xml_parse($xml_parser, $response, true);
xml_parser_free($xml_parser);
unset($this->_depth);
}
private function _startElement($parser, $name, $attrs)
{
if (strstr($name, " ")) {
list($ns, $tag) = explode(" ", $name);
if ($ns == "")
$this->success = false;
} else {
$ns = "";
$tag = $name;
}
switch ($this->_depth) {
case '2':
switch ($tag) {
case 'propstat':
// TODO check is_executable, lockinfo ...
$this->_tmpprop = array("mode" => 0100666 /* all may read and write (for now) */);
break;
}
}
$this->_depth++;
}
private function _endElement($parser, $name)
{
if (strstr($name, " ")) {
list($ns, $tag) = explode(" ", $name);
if ($ns == "")
$this->success = false;
} else {
$ns = "";
$tag = $name;
}
$this->_depth--;
switch ($this->_depth) {
case '1':
switch ($tag) {
case 'response':
$this->urls[$this->_tmphref] = $this->_tmpvals;
unset($this->_tmphref);
unset($this->_tmpvals);
break;
}
break;
case '2':
switch ($tag) {
case 'href':
$this->_tmphref = $this->_tmpdata;
break;
}
case 'propstat':
if (isset($this->_tmpstat) && strstr($this->_tmpstat, " 200 ")) {
$this->_tmpvals = $this->_tmpprop;
}
unset($this->_tmpstat);
unset($this->_tmpprop);
break;
case '3':
switch ($tag) {
case 'status':
$this->_tmpstat = $this->_tmpdata;
break;
}
case '4':
if (!isset($this->_tmpdata)) {
return;
}
switch ($tag) {
case 'getlastmodified':
$this->_tmpprop['atime'] = strtotime($this->_tmpdata);
$this->_tmpprop['mtime'] = strtotime($this->_tmpdata);
break;
case 'creationdate':
$t = preg_split("/[^[:digit:]]/", $this->_tmpdata);
$this->_tmpprop['ctime'] = mktime((int) $t[3], (int) $t[4], (int) $t[5], (int) $t[1], (int) $t[2], (int) $t[0]);
unset($t);
break;
case 'getcontentlength':
$this->_tmpprop['size'] = $this->_tmpdata;
break;
}
case '5':
switch ($tag) {
case 'collection':
$this->_tmpprop['mode'] &= ~0100000; // clear S_IFREG
$this->_tmpprop['mode'] |= 040000; // set S_IFDIR
break;
}
}
unset($this->_tmpdata);
}
private function _data($parser, $data)
{
$this->_tmpdata = $data;
}
public function stat($href = false)
{
if ($href) {
// TODO
} else {
reset($this->urls);
return current($this->urls);
}
}
}
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* indent-tabs-mode:nil
* End:
*/