1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAVACL\PrincipalBackend; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass Mock extends AbstractBackend { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler public $groupMembers = []; 8*a1a3b679SAndreas Boehler public $principals; 9*a1a3b679SAndreas Boehler 10*a1a3b679SAndreas Boehler function __construct(array $principals = null) { 11*a1a3b679SAndreas Boehler 12*a1a3b679SAndreas Boehler $this->principals = $principals; 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler if (is_null($principals)) { 15*a1a3b679SAndreas Boehler 16*a1a3b679SAndreas Boehler $this->principals = [ 17*a1a3b679SAndreas Boehler [ 18*a1a3b679SAndreas Boehler 'uri' => 'principals/user1', 19*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'User 1', 20*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}email-address' => 'user1.sabredav@sabredav.org', 21*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}vcard-url' => 'addressbooks/user1/book1/vcard1.vcf', 22*a1a3b679SAndreas Boehler ], 23*a1a3b679SAndreas Boehler [ 24*a1a3b679SAndreas Boehler 'uri' => 'principals/admin', 25*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'Admin', 26*a1a3b679SAndreas Boehler ], 27*a1a3b679SAndreas Boehler [ 28*a1a3b679SAndreas Boehler 'uri' => 'principals/user2', 29*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'User 2', 30*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}email-address' => 'user2.sabredav@sabredav.org', 31*a1a3b679SAndreas Boehler ], 32*a1a3b679SAndreas Boehler ]; 33*a1a3b679SAndreas Boehler 34*a1a3b679SAndreas Boehler } 35*a1a3b679SAndreas Boehler 36*a1a3b679SAndreas Boehler } 37*a1a3b679SAndreas Boehler 38*a1a3b679SAndreas Boehler function getPrincipalsByPrefix($prefix) { 39*a1a3b679SAndreas Boehler 40*a1a3b679SAndreas Boehler $prefix = trim($prefix, '/'); 41*a1a3b679SAndreas Boehler if ($prefix) $prefix .= '/'; 42*a1a3b679SAndreas Boehler $return = []; 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler foreach ($this->principals as $principal) { 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler if ($prefix && strpos($principal['uri'], $prefix) !== 0) continue; 47*a1a3b679SAndreas Boehler 48*a1a3b679SAndreas Boehler $return[] = $principal; 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler } 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler return $return; 53*a1a3b679SAndreas Boehler 54*a1a3b679SAndreas Boehler } 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler function addPrincipal(array $principal) { 57*a1a3b679SAndreas Boehler 58*a1a3b679SAndreas Boehler $this->principals[] = $principal; 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler } 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler function getPrincipalByPath($path) { 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler foreach ($this->getPrincipalsByPrefix('principals') as $principal) { 65*a1a3b679SAndreas Boehler if ($principal['uri'] === $path) return $principal; 66*a1a3b679SAndreas Boehler } 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler } 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler function searchPrincipals($prefixPath, array $searchProperties, $test = 'allof') { 71*a1a3b679SAndreas Boehler 72*a1a3b679SAndreas Boehler $matches = []; 73*a1a3b679SAndreas Boehler foreach ($this->getPrincipalsByPrefix($prefixPath) as $principal) { 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler foreach ($searchProperties as $key => $value) { 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler if (!isset($principal[$key])) { 78*a1a3b679SAndreas Boehler continue 2; 79*a1a3b679SAndreas Boehler } 80*a1a3b679SAndreas Boehler if (mb_stripos($principal[$key], $value, 0, 'UTF-8') === false) { 81*a1a3b679SAndreas Boehler continue 2; 82*a1a3b679SAndreas Boehler } 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler // We have a match for this searchProperty! 85*a1a3b679SAndreas Boehler if ($test === 'allof') { 86*a1a3b679SAndreas Boehler continue; 87*a1a3b679SAndreas Boehler } else { 88*a1a3b679SAndreas Boehler break; 89*a1a3b679SAndreas Boehler } 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler } 92*a1a3b679SAndreas Boehler $matches[] = $principal['uri']; 93*a1a3b679SAndreas Boehler 94*a1a3b679SAndreas Boehler } 95*a1a3b679SAndreas Boehler return $matches; 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler } 98*a1a3b679SAndreas Boehler 99*a1a3b679SAndreas Boehler function getGroupMemberSet($path) { 100*a1a3b679SAndreas Boehler 101*a1a3b679SAndreas Boehler return isset($this->groupMembers[$path]) ? $this->groupMembers[$path] : []; 102*a1a3b679SAndreas Boehler 103*a1a3b679SAndreas Boehler } 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler function getGroupMembership($path) { 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler $membership = []; 108*a1a3b679SAndreas Boehler foreach ($this->groupMembers as $group => $members) { 109*a1a3b679SAndreas Boehler if (in_array($path, $members)) $membership[] = $group; 110*a1a3b679SAndreas Boehler } 111*a1a3b679SAndreas Boehler return $membership; 112*a1a3b679SAndreas Boehler 113*a1a3b679SAndreas Boehler } 114*a1a3b679SAndreas Boehler 115*a1a3b679SAndreas Boehler function setGroupMemberSet($path, array $members) { 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler $this->groupMembers[$path] = $members; 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler } 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler /** 122*a1a3b679SAndreas Boehler * Updates one ore more webdav properties on a principal. 123*a1a3b679SAndreas Boehler * 124*a1a3b679SAndreas Boehler * The list of mutations is stored in a Sabre\DAV\PropPatch object. 125*a1a3b679SAndreas Boehler * To do the actual updates, you must tell this object which properties 126*a1a3b679SAndreas Boehler * you're going to process with the handle() method. 127*a1a3b679SAndreas Boehler * 128*a1a3b679SAndreas Boehler * Calling the handle method is like telling the PropPatch object "I 129*a1a3b679SAndreas Boehler * promise I can handle updating this property". 130*a1a3b679SAndreas Boehler * 131*a1a3b679SAndreas Boehler * Read the PropPatch documenation for more info and examples. 132*a1a3b679SAndreas Boehler * 133*a1a3b679SAndreas Boehler * @param string $path 134*a1a3b679SAndreas Boehler * @param \Sabre\DAV\PropPatch $propPatch 135*a1a3b679SAndreas Boehler */ 136*a1a3b679SAndreas Boehler function updatePrincipal($path, \Sabre\DAV\PropPatch $propPatch) { 137*a1a3b679SAndreas Boehler 138*a1a3b679SAndreas Boehler $value = null; 139*a1a3b679SAndreas Boehler foreach ($this->principals as $principalIndex => $value) { 140*a1a3b679SAndreas Boehler if ($value['uri'] === $path) { 141*a1a3b679SAndreas Boehler $principal = $value; 142*a1a3b679SAndreas Boehler break; 143*a1a3b679SAndreas Boehler } 144*a1a3b679SAndreas Boehler } 145*a1a3b679SAndreas Boehler if (!$principal) return; 146*a1a3b679SAndreas Boehler 147*a1a3b679SAndreas Boehler $propPatch->handleRemaining(function($mutations) use ($principal, $principalIndex) { 148*a1a3b679SAndreas Boehler 149*a1a3b679SAndreas Boehler foreach ($mutations as $prop => $value) { 150*a1a3b679SAndreas Boehler 151*a1a3b679SAndreas Boehler if (is_null($value) && isset($principal[$prop])) { 152*a1a3b679SAndreas Boehler unset($principal[$prop]); 153*a1a3b679SAndreas Boehler } else { 154*a1a3b679SAndreas Boehler $principal[$prop] = $value; 155*a1a3b679SAndreas Boehler } 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler } 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler $this->principals[$principalIndex] = $principal; 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler return true; 162*a1a3b679SAndreas Boehler 163*a1a3b679SAndreas Boehler }); 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler } 166*a1a3b679SAndreas Boehler 167*a1a3b679SAndreas Boehler 168*a1a3b679SAndreas Boehler} 169