Blame view
sources/lib/private/contactsmanager.php
5.22 KB
|
31b7f2792
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php
/**
* ownCloud
*
* @author Thomas Müller
* @copyright 2013 Thomas Müller thomas.mueller@tmit.eu
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OC {
class ContactsManager implements \OCP\Contacts\IManager {
/**
* This function is used to search and find contacts within the users address books.
* In case $pattern is empty all contacts will be returned.
*
* @param string $pattern which should match within the $searchProperties
* @param array $searchProperties defines the properties within the query pattern should match
* @param array $options - for future use. One should always have options!
|
|
6d9380f96
|
34 |
* @return array an array of contacts which are arrays of key-value-pairs |
|
31b7f2792
|
35 36 |
*/
public function search($pattern, $searchProperties = array(), $options = array()) {
|
|
6d9380f96
|
37 |
$this->loadAddressBooks(); |
|
31b7f2792
|
38 |
$result = array(); |
|
6d9380f96
|
39 40 41 42 43 44 45 46 |
foreach($this->addressBooks as $addressBook) {
$r = $addressBook->search($pattern, $searchProperties, $options);
$contacts = array();
foreach($r as $c){
$c['addressbook-key'] = $addressBook->getKey();
$contacts[] = $c;
}
$result = array_merge($result, $contacts);
|
|
31b7f2792
|
47 48 49 50 51 52 53 54 55 |
} return $result; } /** * This function can be used to delete the contact identified by the given id * * @param object $id the unique identifier to a contact |
|
6d9380f96
|
56 |
* @param string $addressBookKey identifier of the address book in which the contact shall be deleted |
|
31b7f2792
|
57 58 |
* @return bool successful or not */ |
|
6d9380f96
|
59 60 61 |
public function delete($id, $addressBookKey) {
$addressBook = $this->getAddressBook($addressBookKey);
if (!$addressBook) {
|
|
31b7f2792
|
62 |
return null; |
|
6d9380f96
|
63 |
} |
|
31b7f2792
|
64 |
|
|
6d9380f96
|
65 |
if ($addressBook->getPermissions() & \OCP\PERMISSION_DELETE) {
|
|
31b7f2792
|
66 |
return null; |
|
6d9380f96
|
67 |
} |
|
31b7f2792
|
68 |
|
|
6d9380f96
|
69 |
return $addressBook->delete($id); |
|
31b7f2792
|
70 71 72 73 74 75 76 |
} /** * This function is used to create a new contact if 'id' is not given or not present. * Otherwise the contact will be updated by replacing the entire data set. * * @param array $properties this array if key-value-pairs defines a contact |
|
6d9380f96
|
77 |
* @param string $addressBookKey identifier of the address book in which the contact shall be created or updated |
|
31b7f2792
|
78 79 |
* @return array representing the contact just created or updated */ |
|
6d9380f96
|
80 81 82 |
public function createOrUpdate($properties, $addressBookKey) {
$addressBook = $this->getAddressBook($addressBookKey);
if (!$addressBook) {
|
|
31b7f2792
|
83 |
return null; |
|
6d9380f96
|
84 |
} |
|
31b7f2792
|
85 |
|
|
6d9380f96
|
86 |
if ($addressBook->getPermissions() & \OCP\PERMISSION_CREATE) {
|
|
31b7f2792
|
87 |
return null; |
|
6d9380f96
|
88 |
} |
|
31b7f2792
|
89 |
|
|
6d9380f96
|
90 |
return $addressBook->createOrUpdate($properties); |
|
31b7f2792
|
91 92 93 94 95 96 97 98 |
}
/**
* Check if contacts are available (e.g. contacts app enabled)
*
* @return bool true if enabled, false if not
*/
public function isEnabled() {
|
|
6d9380f96
|
99 |
return !empty($this->addressBooks) || !empty($this->addressBookLoaders); |
|
31b7f2792
|
100 101 102 |
} /** |
|
6d9380f96
|
103 |
* @param \OCP\IAddressBook $addressBook |
|
31b7f2792
|
104 |
*/ |
|
6d9380f96
|
105 106 |
public function registerAddressBook(\OCP\IAddressBook $addressBook) {
$this->addressBooks[$addressBook->getKey()] = $addressBook;
|
|
31b7f2792
|
107 108 109 |
} /** |
|
6d9380f96
|
110 |
* @param \OCP\IAddressBook $addressBook |
|
31b7f2792
|
111 |
*/ |
|
6d9380f96
|
112 113 |
public function unregisterAddressBook(\OCP\IAddressBook $addressBook) {
unset($this->addressBooks[$addressBook->getKey()]);
|
|
31b7f2792
|
114 115 116 117 118 119 |
}
/**
* @return array
*/
public function getAddressBooks() {
|
|
6d9380f96
|
120 |
$this->loadAddressBooks(); |
|
31b7f2792
|
121 |
$result = array(); |
|
6d9380f96
|
122 123 |
foreach($this->addressBooks as $addressBook) {
$result[$addressBook->getKey()] = $addressBook->getDisplayName();
|
|
31b7f2792
|
124 125 126 127 128 129 130 131 132 |
}
return $result;
}
/**
* removes all registered address book instances
*/
public function clear() {
|
|
6d9380f96
|
133 134 |
$this->addressBooks = array(); $this->addressBookLoaders = array(); |
|
31b7f2792
|
135 136 137 138 139 |
} /** * @var \OCP\IAddressBook[] which holds all registered address books */ |
|
6d9380f96
|
140 141 142 143 144 145 |
private $addressBooks = array(); /** * @var \Closure[] to call to load/register address books */ private $addressBookLoaders = array(); |
|
31b7f2792
|
146 147 148 149 150 |
/** * In order to improve lazy loading a closure can be registered which will be called in case * address books are actually requested * |
|
31b7f2792
|
151 152 |
* @param \Closure $callable */ |
|
6d9380f96
|
153 |
public function register(\Closure $callable) |
|
31b7f2792
|
154 |
{
|
|
6d9380f96
|
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
$this->addressBookLoaders[] = $callable;
}
/**
* Get (and load when needed) the address book for $key
*
* @param string $addressBookKey
* @return \OCP\IAddressBook
*/
protected function getAddressBook($addressBookKey)
{
$this->loadAddressBooks();
if (!array_key_exists($addressBookKey, $this->addressBooks)) {
return null;
}
return $this->addressBooks[$addressBookKey];
}
/**
* Load all address books registered with 'register'
*/
protected function loadAddressBooks()
{
foreach($this->addressBookLoaders as $callable) {
$callable($this);
}
$this->addressBookLoaders = array();
|
|
31b7f2792
|
183 184 185 |
} } } |