This commit is contained in:
djmaze 2021-04-14 16:36:46 +02:00
parent ae9bb29a47
commit b4fefc1532
3 changed files with 21 additions and 16 deletions

View file

@ -43,7 +43,7 @@ abstract class DateTimeHelper
} }
$sDateTime = \trim(\preg_replace('/ \([a-zA-Z0-9]+\)$/', '', $sDateTime)); $sDateTime = \trim(\preg_replace('/ \([a-zA-Z0-9]+\)$/', '', $sDateTime));
$oDateTime = \DateTime::createFromFormat('D, d M Y H:i:s O', $sDateTime, \MailSo\Base\DateTimeHelper::GetUtcTimeZoneObject()); $oDateTime = \DateTime::createFromFormat(\DateTime::RFC822, $sDateTime, static::GetUtcTimeZoneObject());
return $oDateTime ? $oDateTime->getTimestamp() : 0; return $oDateTime ? $oDateTime->getTimestamp() : 0;
} }
@ -61,10 +61,10 @@ abstract class DateTimeHelper
if (\preg_match('/^[a-z]{2,4}, /i', $sDateTime)) // RFC2822 ~ "Thu, 10 Jun 2010 08:58:33 -0700 (PDT)" if (\preg_match('/^[a-z]{2,4}, /i', $sDateTime)) // RFC2822 ~ "Thu, 10 Jun 2010 08:58:33 -0700 (PDT)"
{ {
return \MailSo\Base\DateTimeHelper::ParseRFC2822DateString($sDateTime); return static::ParseRFC2822DateString($sDateTime);
} }
$oDateTime = \DateTime::createFromFormat('d-M-Y H:i:s O', $sDateTime, \MailSo\Base\DateTimeHelper::GetUtcTimeZoneObject()); $oDateTime = \DateTime::createFromFormat('d-M-Y H:i:s O', $sDateTime, static::GetUtcTimeZoneObject());
return $oDateTime ? $oDateTime->getTimestamp() : 0; return $oDateTime ? $oDateTime->getTimestamp() : 0;
} }
@ -79,20 +79,21 @@ abstract class DateTimeHelper
return 0; return 0;
} }
$oDateTime = \DateTime::createFromFormat('Y-m-d H:i:s O', $sDateTime, \MailSo\Base\DateTimeHelper::GetUtcTimeZoneObject()); $oDateTime = \DateTime::createFromFormat('Y-m-d H:i:s O', $sDateTime, static::GetUtcTimeZoneObject());
return $oDateTime ? $oDateTime->getTimestamp() : 0; return $oDateTime ? $oDateTime->getTimestamp() : 0;
} }
/** /**
* Parse date string formated as "2015-05-08T14:32:18.483-07:00" * Parse date string formated as "2015-05-08T14:32:18.483-07:00"
* DateTime::RFC3339_EXTENDED
*/ */
public static function TryToParseSpecEtagFormat(string $sDateTime) : int public static function TryToParseSpecEtagFormat(string $sDateTime) : int
{ {
$sDateTime = \trim(\preg_replace('/ \([a-zA-Z0-9]+\)$/', '', \trim($sDateTime))); $sDateTime = \preg_replace('/ \([a-zA-Z0-9]+\)$/', '', \trim($sDateTime));
$sDateTime = \trim(\preg_replace('/(:[\d]{2})\.[\d]{3}/', '$1', \trim($sDateTime))); $sDateTime = \preg_replace('/(:[\d]{2})\.[\d]{3}/', '$1', \trim($sDateTime));
$sDateTime = \trim(\preg_replace('/(-[\d]{2})T([\d]{2}:)/', '$1 $2', \trim($sDateTime))); $sDateTime = \preg_replace('/(-[\d]{2})T([\d]{2}:)/', '$1 $2', \trim($sDateTime));
$sDateTime = \trim(\preg_replace('/([\-+][\d]{2}):([\d]{2})$/', ' $1$2', \trim($sDateTime))); $sDateTime = \preg_replace('/([\-+][\d]{2}):([\d]{2})$/', ' $1$2', \trim($sDateTime));
return \MailSo\Base\DateTimeHelper::ParseDateStringType1($sDateTime); return static::ParseDateStringType1($sDateTime);
} }
} }

View file

@ -27,6 +27,9 @@ trait CardDAV
$this->oLogger->WriteException($oException); $this->oLogger->WriteException($oException);
} }
/**
* find every <response><href>*.vcf</href> with empty <resourcetype/>
*/
if (\is_array($aResponse)) if (\is_array($aResponse))
{ {
$mResult = array(); $mResult = array();
@ -35,7 +38,6 @@ trait CardDAV
$sKey = \rtrim(\trim($sKey), '\\/'); $sKey = \rtrim(\trim($sKey), '\\/');
if (!empty($sKey) && is_array($aItem)) if (!empty($sKey) && is_array($aItem))
{ {
$aItem = \array_change_key_case($aItem, \CASE_LOWER);
if (isset($aItem['{DAV:}getetag'])) if (isset($aItem['{DAV:}getetag']))
{ {
$aMatch = array(); $aMatch = array();

View file

@ -143,19 +143,21 @@ class Client
throw new \InvalidArgumentException('The passed data is not valid XML'); throw new \InvalidArgumentException('The passed data is not valid XML');
} }
$ns = \array_search('urn:DAV', $responseXML->getNamespaces(true)); $ns = \array_search('urn:DAV', $responseXML->getNamespaces(true)) ?: 'd';
$ns = $ns ? "{$ns}:" : '';
// $ns_card = \array_search('urn:ietf:params:xml:ns:carddav', $responseXML->getNamespaces(true)); // $ns_card = \array_search('urn:ietf:params:xml:ns:carddav', $responseXML->getNamespaces(true));
$result = array(); $result = array();
foreach ($responseXML->xpath("{$ns}response") as $response) { $responseXML->registerXPathNamespace($ns, 'urn:DAV');
$href = $response->xpath("{$ns}href"); foreach ($responseXML->xpath("{$ns}:response") as $response) {
$response->registerXPathNamespace($ns, 'urn:DAV');
$href = $response->xpath("{$ns}:href");
$href = (string) $href[0]; $href = (string) $href[0];
$properties = array(); $properties = array();
foreach ($response->xpath("{$ns}propstat") as $propStat) { foreach ($response->xpath("{$ns}:propstat") as $propStat) {
$status = $propStat->xpath("{$ns}status"); $propStat->registerXPathNamespace($ns, 'urn:DAV');
$status = $propStat->xpath("{$ns}:status");
list($httpVersion, $statusCode, $message) = \explode(' ', (string)$status[0], 3); list($httpVersion, $statusCode, $message) = \explode(' ', (string)$status[0], 3);
$properties[$statusCode] = static::parseProperties(\dom_import_simplexml($propStat)); $properties[$statusCode] = static::parseProperties(\dom_import_simplexml($propStat));