Blame view
sources/apps/contacts/lib/app.php
4.71 KB
|
d1bafeea1
|
1 2 |
<?php /** |
|
6d9380f96
|
3 4 5 |
* @author Thomas Tanghus * @copyright 2013-2014 Thomas Tanghus (thomas@tanghus.net) * |
|
d1bafeea1
|
6 7 8 9 10 11 12 13 14 15 |
* This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. */ namespace OCA\Contacts; use Sabre\VObject, OCP\AppFramework, OCA\Contacts\Controller\AddressBookController, |
|
6d9380f96
|
16 |
OCA\Contacts\Controller\BackendController, |
|
d1bafeea1
|
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
OCA\Contacts\Controller\GroupController,
OCA\Contacts\Controller\ContactController,
OCA\Contacts\Controller\ContactPhotoController,
OCA\Contacts\Controller\SettingsController,
OCA\Contacts\Controller\ImportController;
/**
* This class manages our app actions
*
* TODO: Merge in Dispatcher
*/
App::$l10n = \OC_L10N::get('contacts');
class App {
/**
* @brief Categories of the user
* @var OC_VCategories
*/
public static $categories = null;
/**
* @brief language object for calendar app
*
* @var OC_L10N
*/
public static $l10n;
/**
* An array holding the current users address books.
* @var array
*/
protected static $addressBooks = array();
/**
* If backends are added to this map, they will be automatically mapped
* to their respective classes, if constructed with the 'getBackend' method.
*
* @var array
*/
public static $backendClasses = array(
|
|
d1bafeea1
|
57 58 |
'local' => 'OCA\Contacts\Backend\Database', 'shared' => 'OCA\Contacts\Backend\Shared', |
|
6d9380f96
|
59 |
// 'localusers' => 'OC\Contacts\Backend\LocalUsers', |
|
d1bafeea1
|
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
);
public function __construct(
$user = null,
$addressBooksTableName = '*PREFIX*addressbook',
$backendsTableName = '*PREFIX*addressbooks_backend',
$dbBackend = null
) {
$this->user = $user ? $user : \OCP\User::getUser();
$this->addressBooksTableName = $addressBooksTableName;
$this->backendsTableName = $backendsTableName;
$this->dbBackend = $dbBackend
? $dbBackend
: new Backend\Database($user);
|
|
6d9380f96
|
74 75 76 |
if (\OCP\Config::getAppValue('contacts', 'backend_ldap', "false") === "true") {
self::$backendClasses['ldap'] = 'OCA\Contacts\Backend\Ldap';
}
|
|
d1bafeea1
|
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
}
/**
* Gets backend by name.
*
* @param string $name
* @return \Backend\AbstractBackend
*/
public function getBackend($name) {
$name = $name ? $name : 'local';
if (isset(self::$backendClasses[$name])) {
return new self::$backendClasses[$name]($this->user);
} else {
throw new \Exception('No backend for: ' . $name, '404');
}
}
/**
* Return all registered address books for current user.
* For now this is hard-coded to using the Database and
* Shared backends, but eventually admins will be able to
* register additional backends, and users will be able to
* subscribe to address books using those backends.
*
* @return AddressBook[]
*/
public function getAddressBooksForUser() {
|
|
6d9380f96
|
104 105 |
if (!self::$addressBooks) {
foreach (array_keys(self::$backendClasses) as $backendName) {
|
|
d1bafeea1
|
106 107 |
$backend = self::getBackend($backendName, $this->user); $addressBooks = $backend->getAddressBooksForUser(); |
|
6d9380f96
|
108 |
if ($backendName === 'local' && count($addressBooks) === 0) {
|
|
d1bafeea1
|
109 |
$id = $backend->createAddressBook(array('displayname' => self::$l10n->t('Contacts')));
|
|
6d9380f96
|
110 |
if ($id !== false) {
|
|
d1bafeea1
|
111 112 113 114 115 116 117 118 119 |
$addressBook = $backend->getAddressBook($id);
$addressBooks = array($addressBook);
} else {
\OCP\Util::writeLog(
'contacts',
__METHOD__ . ', Error creating default address book',
\OCP\Util::ERROR
);
}
|
|
6d9380f96
|
120 |
|
|
d1bafeea1
|
121 |
} |
|
6d9380f96
|
122 123 |
foreach ($addressBooks as $addressBook) {
|
|
d1bafeea1
|
124 125 126 |
$addressBook['backend'] = $backendName; self::$addressBooks[] = new AddressBook($backend, $addressBook); } |
|
6d9380f96
|
127 |
|
|
d1bafeea1
|
128 |
} |
|
6d9380f96
|
129 |
|
|
d1bafeea1
|
130 |
} |
|
6d9380f96
|
131 |
|
|
d1bafeea1
|
132 133 134 135 136 137 138 139 140 141 142 143 |
return self::$addressBooks;
}
/**
* Get an address book from a specific backend.
*
* @param string $backendName
* @param string $addressbookid
* @return AddressBook|null
*/
public function getAddressBook($backendName, $addressbookid) {
//\OCP\Util::writeLog('contacts', __METHOD__ . ': '. $backendName . ', ' . $addressbookid, \OCP\Util::DEBUG);
|
|
6d9380f96
|
144 145 |
foreach (self::$addressBooks as $addressBook) {
if ($addressBook->getBackend()->name === $backendName
|
|
d1bafeea1
|
146 147 148 149 150 151 152 153 |
&& $addressBook->getId() === $addressbookid
) {
return $addressBook;
}
}
$backend = self::getBackend($backendName, $this->user);
$info = $backend->getAddressBook($addressbookid);
|
|
6d9380f96
|
154 155 |
if (!$info) {
|
|
d1bafeea1
|
156 157 |
throw new \Exception(self::$l10n->t('Address book not found'), 404);
}
|
|
6d9380f96
|
158 |
|
|
d1bafeea1
|
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
$addressBook = new AddressBook($backend, $info);
self::$addressBooks[] = $addressBook;
return $addressBook;
}
/**
* Get a Contact from an address book from a specific backend.
*
* @param string $backendName
* @param string $addressbookid
* @param string $id - Contact id
* @return Contact|null
*
*/
public function getContact($backendName, $addressbookid, $id) {
$addressBook = $this->getAddressBook($backendName, $addressbookid);
return $addressBook->getChild($id);
}
}
|