From 0b02a6d123b2014705998c94ddf3d460948d3eac Mon Sep 17 00:00:00 2001 From: redmatrix Date: Tue, 10 May 2016 17:26:44 -0700 Subject: initial sabre upgrade (needs lots of work - to wit: authentication, redo the browser interface, and rework event export/import) --- .../tests/Sabre/DAVACL/PrincipalBackend/Mock.php | 144 +++++++++------------ 1 file changed, 64 insertions(+), 80 deletions(-) (limited to 'vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php') diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php index 354446e34..afb094a39 100644 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php +++ b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php @@ -4,40 +4,46 @@ namespace Sabre\DAVACL\PrincipalBackend; class Mock extends AbstractBackend { - public $groupMembers = array(); + public $groupMembers = []; public $principals; - function __construct() { + function __construct(array $principals = null) { - $this->principals = array( - array( - 'uri' => 'principals/user1', - '{DAV:}displayname' => 'User 1', + $this->principals = $principals; + + if (is_null($principals)) { + + $this->principals = [ + [ + 'uri' => 'principals/user1', + '{DAV:}displayname' => 'User 1', '{http://sabredav.org/ns}email-address' => 'user1.sabredav@sabredav.org', - '{http://sabredav.org/ns}vcard-url' => 'addressbooks/user1/book1/vcard1.vcf', - ), - array( - 'uri' => 'principals/admin', + '{http://sabredav.org/ns}vcard-url' => 'addressbooks/user1/book1/vcard1.vcf', + ], + [ + 'uri' => 'principals/admin', '{DAV:}displayname' => 'Admin', - ), - array( - 'uri' => 'principals/user2', - '{DAV:}displayname' => 'User 2', + ], + [ + 'uri' => 'principals/user2', + '{DAV:}displayname' => 'User 2', '{http://sabredav.org/ns}email-address' => 'user2.sabredav@sabredav.org', - ), - ); + ], + ]; + } } function getPrincipalsByPrefix($prefix) { - $prefix = trim($prefix,'/') . '/'; - $return = array(); + $prefix = trim($prefix, '/'); + if ($prefix) $prefix .= '/'; + $return = []; - foreach($this->principals as $principal) { + foreach ($this->principals as $principal) { - if (strpos($principal['uri'], $prefix)!==0) continue; + if ($prefix && strpos($principal['uri'], $prefix) !== 0) continue; $return[] = $principal; @@ -55,26 +61,33 @@ class Mock extends AbstractBackend { function getPrincipalByPath($path) { - foreach($this->getPrincipalsByPrefix('principals') as $principal) { + foreach ($this->getPrincipalsByPrefix('principals') as $principal) { if ($principal['uri'] === $path) return $principal; } } - function searchPrincipals($prefixPath, array $searchProperties) { + function searchPrincipals($prefixPath, array $searchProperties, $test = 'allof') { - $matches = array(); - foreach($this->getPrincipalsByPrefix($prefixPath) as $principal) { + $matches = []; + foreach ($this->getPrincipalsByPrefix($prefixPath) as $principal) { - foreach($searchProperties as $key=>$value) { + foreach ($searchProperties as $key => $value) { if (!isset($principal[$key])) { continue 2; } - if (mb_stripos($principal[$key],$value, 0, 'UTF-8')===false) { + if (mb_stripos($principal[$key], $value, 0, 'UTF-8') === false) { continue 2; } + // We have a match for this searchProperty! + if ($test === 'allof') { + continue; + } else { + break; + } + } $matches[] = $principal['uri']; @@ -85,14 +98,14 @@ class Mock extends AbstractBackend { function getGroupMemberSet($path) { - return isset($this->groupMembers[$path]) ? $this->groupMembers[$path] : array(); + return isset($this->groupMembers[$path]) ? $this->groupMembers[$path] : []; } function getGroupMembership($path) { - $membership = array(); - foreach($this->groupMembers as $group=>$members) { + $membership = []; + foreach ($this->groupMembers as $group => $members) { if (in_array($path, $members)) $membership[] = $group; } return $membership; @@ -108,75 +121,46 @@ class Mock extends AbstractBackend { /** * Updates one ore more webdav properties on a principal. * - * The list of mutations is supplied as an array. Each key in the array is - * a propertyname, such as {DAV:}displayname. - * - * Each value is the actual value to be updated. If a value is null, it - * must be deleted. - * - * This method should be atomic. It must either completely succeed, or - * completely fail. Success and failure can simply be returned as 'true' or - * 'false'. - * - * It is also possible to return detailed failure information. In that case - * an array such as this should be returned: + * The list of mutations is stored in a Sabre\DAV\PropPatch object. + * To do the actual updates, you must tell this object which properties + * you're going to process with the handle() method. * - * array( - * 200 => array( - * '{DAV:}prop1' => null, - * ), - * 201 => array( - * '{DAV:}prop2' => null, - * ), - * 403 => array( - * '{DAV:}prop3' => null, - * ), - * 424 => array( - * '{DAV:}prop4' => null, - * ), - * ); + * Calling the handle method is like telling the PropPatch object "I + * promise I can handle updating this property". * - * In this previous example prop1 was successfully updated or deleted, and - * prop2 was succesfully created. - * - * prop3 failed to update due to '403 Forbidden' and because of this prop4 - * also could not be updated with '424 Failed dependency'. - * - * This last example was actually incorrect. While 200 and 201 could appear - * in 1 response, if there's any error (403) the other properties should - * always fail with 423 (failed dependency). - * - * But anyway, if you don't want to scratch your head over this, just - * return true or false. + * Read the PropPatch documenation for more info and examples. * * @param string $path - * @param array $mutations - * @return array|bool + * @param \Sabre\DAV\PropPatch $propPatch */ - public function updatePrincipal($path, $mutations) { + function updatePrincipal($path, \Sabre\DAV\PropPatch $propPatch) { $value = null; - foreach($this->principals as $principalIndex=>$value) { + foreach ($this->principals as $principalIndex => $value) { if ($value['uri'] === $path) { $principal = $value; break; } } - if (!$principal) return false; + if (!$principal) return; + + $propPatch->handleRemaining(function($mutations) use ($principal, $principalIndex) { - foreach($mutations as $prop=>$value) { + foreach ($mutations as $prop => $value) { + + if (is_null($value) && isset($principal[$prop])) { + unset($principal[$prop]); + } else { + $principal[$prop] = $value; + } - if (is_null($value) && isset($principal[$prop])) { - unset($principal[$prop]); - } else { - $principal[$prop] = $value; } - } + $this->principals[$principalIndex] = $principal; - $this->principals[$principalIndex] = $principal; + return true; - return true; + }); } -- cgit v1.2.3