Blame view
sources/3rdparty/sabre/dav/lib/Sabre/DAVACL/AbstractPrincipalCollection.php
4.31 KB
|
03e52840d
|
1 |
<?php |
|
6d9380f96
|
2 3 |
namespace Sabre\DAVACL; use Sabre\DAV; |
|
03e52840d
|
4 5 6 7 8 9 10 11 |
/** * Principals Collection * * This is a helper class that easily allows you to create a collection that * has a childnode for every principal. * * To use this class, simply implement the getChildForPrincipal method. * |
|
6d9380f96
|
12 13 14 |
* @copyright Copyright (C) 2007-2014 fruux GmbH (https://fruux.com/). * @author Evert Pot (http://evertpot.com/) * @license http://sabre.io/license/ Modified BSD License |
|
03e52840d
|
15 |
*/ |
|
6d9380f96
|
16 |
abstract class AbstractPrincipalCollection extends DAV\Collection implements IPrincipalCollection {
|
|
03e52840d
|
17 18 19 20 21 22 23 24 25 26 27 |
/**
* Node or 'directory' name.
*
* @var string
*/
protected $path;
/**
* Principal backend
*
|
|
6d9380f96
|
28 |
* @var PrincipalBackend\BackendInterface |
|
03e52840d
|
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
*/
protected $principalBackend;
/**
* If this value is set to true, it effectively disables listing of users
* it still allows user to find other users if they have an exact url.
*
* @var bool
*/
public $disableListing = false;
/**
* Creates the object
*
* This object must be passed the principal backend. This object will
* filter all principals from a specified prefix ($principalPrefix). The
* default is 'principals', if your principals are stored in a different
* collection, override $principalPrefix
*
*
|
|
6d9380f96
|
49 |
* @param PrincipalBackend\BackendInterface $principalBackend |
|
03e52840d
|
50 51 |
* @param string $principalPrefix
*/
|
|
6d9380f96
|
52 |
public function __construct(PrincipalBackend\BackendInterface $principalBackend, $principalPrefix = 'principals') {
|
|
03e52840d
|
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
$this->principalPrefix = $principalPrefix;
$this->principalBackend = $principalBackend;
}
/**
* This method returns a node for a principal.
*
* The passed array contains principal information, and is guaranteed to
* at least contain a uri item. Other properties may or may not be
* supplied by the authentication backend.
*
* @param array $principalInfo
|
|
6d9380f96
|
67 |
* @return IPrincipal |
|
03e52840d
|
68 69 70 71 72 73 74 75 76 |
*/
abstract function getChildForPrincipal(array $principalInfo);
/**
* Returns the name of this collection.
*
* @return string
*/
public function getName() {
|
|
6d9380f96
|
77 |
list(,$name) = DAV\URLUtil::splitPath($this->principalPrefix); |
|
03e52840d
|
78 79 80 81 82 83 84 85 86 87 88 89 |
return $name;
}
/**
* Return the list of users
*
* @return array
*/
public function getChildren() {
if ($this->disableListing)
|
|
6d9380f96
|
90 |
throw new DAV\Exception\MethodNotAllowed('Listing members of this collection is disabled');
|
|
03e52840d
|
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
$children = array();
foreach($this->principalBackend->getPrincipalsByPrefix($this->principalPrefix) as $principalInfo) {
$children[] = $this->getChildForPrincipal($principalInfo);
}
return $children;
}
/**
* Returns a child object, by its name.
*
* @param string $name
|
|
6d9380f96
|
107 108 |
* @throws DAV\Exception\NotFound
* @return IPrincipal
|
|
03e52840d
|
109 110 111 112 |
*/
public function getChild($name) {
$principalInfo = $this->principalBackend->getPrincipalByPath($this->principalPrefix . '/' . $name);
|
|
6d9380f96
|
113 |
if (!$principalInfo) throw new DAV\Exception\NotFound('Principal with name ' . $name . ' not found');
|
|
03e52840d
|
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
return $this->getChildForPrincipal($principalInfo);
}
/**
* This method is used to search for principals matching a set of
* properties.
*
* This search is specifically used by RFC3744's principal-property-search
* REPORT. You should at least allow searching on
* http://sabredav.org/ns}email-address.
*
* The actual search should be a unicode-non-case-sensitive search. The
* keys in searchProperties are the WebDAV property names, while the values
* are the property values to search on.
*
* If multiple properties are being searched on, the search should be
* AND'ed.
*
* This method should simply return a list of 'child names', which may be
* used to call $this->getChild in the future.
*
* @param array $searchProperties
* @return array
*/
public function searchPrincipals(array $searchProperties) {
$result = $this->principalBackend->searchPrincipals($this->principalPrefix, $searchProperties);
$r = array();
foreach($result as $row) {
|
|
6d9380f96
|
145 |
list(, $r[]) = DAV\URLUtil::splitPath($row); |
|
03e52840d
|
146 147 148 149 150 151 152 |
}
return $r;
}
}
|