Make enhancing entries with type property optional
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
parent
192324e4de
commit
61af607525
5 changed files with 69 additions and 24 deletions
|
@ -95,9 +95,11 @@ class AddressBookImpl implements IAddressBook {
|
|||
public function search($pattern, $searchProperties, $options) {
|
||||
$results = $this->backend->search($this->getKey(), $pattern, $searchProperties);
|
||||
|
||||
$withTypes = \array_key_exists('types', $options) && $options['types'] === true;
|
||||
|
||||
$vCards = [];
|
||||
foreach ($results as $result) {
|
||||
$vCards[] = $this->vCard2Array($result['uri'], $this->readCard($result['carddata']));
|
||||
$vCards[] = $this->vCard2Array($result['uri'], $this->readCard($result['carddata']), $withTypes);
|
||||
}
|
||||
|
||||
return $vCards;
|
||||
|
@ -220,7 +222,7 @@ class AddressBookImpl implements IAddressBook {
|
|||
* @param VCard $vCard
|
||||
* @return array
|
||||
*/
|
||||
protected function vCard2Array($uri, VCard $vCard) {
|
||||
protected function vCard2Array($uri, VCard $vCard, $withTypes = false) {
|
||||
$result = [
|
||||
'URI' => $uri,
|
||||
];
|
||||
|
@ -256,8 +258,11 @@ class AddressBookImpl implements IAddressBook {
|
|||
}
|
||||
|
||||
$type = $this->getTypeFromProperty($property);
|
||||
if ($type !== null) {
|
||||
$result[$property->name][$type] = $property->getValue();
|
||||
if ($withTypes) {
|
||||
$result[$property->name][] = [
|
||||
'type' => $type,
|
||||
'value' => $property->getValue()
|
||||
];
|
||||
} else {
|
||||
$result[$property->name][] = $property->getValue();
|
||||
}
|
||||
|
|
|
@ -84,11 +84,16 @@ class MailPlugin implements ISearchPlugin {
|
|||
foreach ($addressBookContacts as $contact) {
|
||||
if (isset($contact['EMAIL'])) {
|
||||
$emailAddresses = $contact['EMAIL'];
|
||||
if (!is_array($emailAddresses)) {
|
||||
if (\is_string($emailAddresses)) {
|
||||
$emailAddresses = [$emailAddresses];
|
||||
}
|
||||
foreach ($emailAddresses as $type => $emailAddress) {
|
||||
$displayName = $emailAddress;
|
||||
if (\is_array($emailAddress)) {
|
||||
$emailAddressData = $emailAddress;
|
||||
$emailAddress = $emailAddressData['value'];
|
||||
$emailAddressType = $emailAddressData['type'];
|
||||
}
|
||||
if (isset($contact['FN'])) {
|
||||
$displayName = $contact['FN'] . ' (' . $emailAddress . ')';
|
||||
}
|
||||
|
@ -163,7 +168,7 @@ class MailPlugin implements ISearchPlugin {
|
|||
$result['exact'][] = [
|
||||
'label' => $displayName,
|
||||
'uuid' => $contact['UID'],
|
||||
'type' => $type,
|
||||
'type' => $emailAddressType,
|
||||
'value' => [
|
||||
'shareType' => Share::SHARE_TYPE_EMAIL,
|
||||
'shareWith' => $emailAddress,
|
||||
|
@ -173,7 +178,7 @@ class MailPlugin implements ISearchPlugin {
|
|||
$result['wide'][] = [
|
||||
'label' => $displayName,
|
||||
'uuid' => $contact['UID'],
|
||||
'type' => $type,
|
||||
'type' => $emailAddressType,
|
||||
'value' => [
|
||||
'shareType' => Share::SHARE_TYPE_EMAIL,
|
||||
'shareWith' => $emailAddress,
|
||||
|
|
|
@ -44,12 +44,15 @@ class RemotePlugin implements ISearchPlugin {
|
|||
private $config;
|
||||
/** @var IUserManager */
|
||||
private $userManager;
|
||||
/** @var string */
|
||||
private $userId;
|
||||
|
||||
public function __construct(IManager $contactsManager, ICloudIdManager $cloudIdManager, IConfig $config, IUserManager $userManager) {
|
||||
public function __construct(IManager $contactsManager, ICloudIdManager $cloudIdManager, IConfig $config, IUserManager $userManager, $userId) {
|
||||
$this->contactsManager = $contactsManager;
|
||||
$this->cloudIdManager = $cloudIdManager;
|
||||
$this->config = $config;
|
||||
$this->userManager = $userManager;
|
||||
$this->userId = $userId;
|
||||
|
||||
$this->shareeEnumeration = $this->config->getAppValue('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes') === 'yes';
|
||||
}
|
||||
|
@ -67,11 +70,17 @@ class RemotePlugin implements ISearchPlugin {
|
|||
}
|
||||
if (isset($contact['CLOUD'])) {
|
||||
$cloudIds = $contact['CLOUD'];
|
||||
if (!is_array($cloudIds)) {
|
||||
if (is_string($cloudIds)) {
|
||||
$cloudIds = [$cloudIds];
|
||||
}
|
||||
$lowerSearch = strtolower($search);
|
||||
foreach ($cloudIds as $type => $cloudId) {
|
||||
foreach ($cloudIds as $cloudId) {
|
||||
$cloudIdType = '';
|
||||
if (\is_array($cloudId)) {
|
||||
$cloudIdData = $cloudId;
|
||||
$cloudId = $cloudIdData['value'];
|
||||
$cloudIdType = $cloudIdData['type'];
|
||||
}
|
||||
try {
|
||||
list($remoteUser, $serverUrl) = $this->splitUserRemote($cloudId);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
|
@ -90,7 +99,7 @@ class RemotePlugin implements ISearchPlugin {
|
|||
$result['exact'][] = [
|
||||
'label' => $contact['FN'] . " ($cloudId)",
|
||||
'uuid' => $contact['UID'],
|
||||
'type' => $type,
|
||||
'type' => $cloudIdType,
|
||||
'value' => [
|
||||
'shareType' => Share::SHARE_TYPE_REMOTE,
|
||||
'shareWith' => $cloudId,
|
||||
|
@ -101,7 +110,7 @@ class RemotePlugin implements ISearchPlugin {
|
|||
$result['wide'][] = [
|
||||
'label' => $contact['FN'] . " ($cloudId)",
|
||||
'uuid' => $contact['UID'],
|
||||
'type' => $type,
|
||||
'type' => $cloudIdType,
|
||||
'value' => [
|
||||
'shareType' => Share::SHARE_TYPE_REMOTE,
|
||||
'shareWith' => $cloudId,
|
||||
|
|
|
@ -55,16 +55,18 @@ namespace OCP {
|
|||
/**
|
||||
* @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!
|
||||
* @param array $options Options to define the output format
|
||||
* - types boolean (since 15.0.0) If set to true, fields that come with a TYPE property will be an array
|
||||
* example: ['id' => 5, 'FN' => 'Thomas Tanghus', 'EMAIL' => ['type => 'HOME', 'value' => 'g@h.i']]
|
||||
* @return array an array of contacts which are arrays of key-value-pairs
|
||||
* example result:
|
||||
* [
|
||||
* ['id' => 0, 'FN' => 'Thomas Müller', 'EMAIL' => 'a@b.c', 'GEO' => '37.386013;-122.082932'],
|
||||
* ['id' => 5, 'FN' => 'Thomas Tanghus', 'EMAIL' => ['d@e.f', 'g@h.i']]
|
||||
* ]
|
||||
* @since 5.0.0
|
||||
*/
|
||||
public function search($pattern, $searchProperties, $options);
|
||||
// // dummy results
|
||||
// return array(
|
||||
// array('id' => 0, 'FN' => 'Thomas Müller', 'EMAIL' => 'a@b.c', 'GEO' => '37.386013;-122.082932'),
|
||||
// array('id' => 5, 'FN' => 'Thomas Tanghus', 'EMAIL' => array('d@e.f', 'g@h.i')),
|
||||
// );
|
||||
|
||||
/**
|
||||
* @param array $properties this array if key-value-pairs defines a contact
|
||||
|
|
|
@ -66,7 +66,7 @@ class RemotePluginTest extends TestCase {
|
|||
}
|
||||
|
||||
public function instantiatePlugin() {
|
||||
$this->plugin = new RemotePlugin($this->contactsManager, $this->cloudIdManager, $this->config, $this->userManager);
|
||||
$this->plugin = new RemotePlugin($this->contactsManager, $this->cloudIdManager, $this->config, $this->userManager, 'admin');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -158,14 +158,17 @@ class RemotePluginTest extends TestCase {
|
|||
'test',
|
||||
[
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User3 @ Localhost',
|
||||
],
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User2 @ Localhost',
|
||||
'CLOUD' => [
|
||||
],
|
||||
],
|
||||
[
|
||||
'UID' => 'uid1',
|
||||
'FN' => 'User @ Localhost',
|
||||
'CLOUD' => [
|
||||
'username@localhost',
|
||||
|
@ -173,7 +176,7 @@ class RemotePluginTest extends TestCase {
|
|||
],
|
||||
],
|
||||
true,
|
||||
['remotes' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]], 'exact' => ['remotes' => []]],
|
||||
['remotes' => [['label' => 'User @ Localhost (username@localhost)', 'uuid' => 'uid1', 'type' => '', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]], 'exact' => ['remotes' => []]],
|
||||
false,
|
||||
true,
|
||||
],
|
||||
|
@ -181,14 +184,17 @@ class RemotePluginTest extends TestCase {
|
|||
'test',
|
||||
[
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User3 @ Localhost',
|
||||
],
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User2 @ Localhost',
|
||||
'CLOUD' => [
|
||||
],
|
||||
],
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User @ Localhost',
|
||||
'CLOUD' => [
|
||||
'username@localhost',
|
||||
|
@ -204,14 +210,17 @@ class RemotePluginTest extends TestCase {
|
|||
'test@remote',
|
||||
[
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User3 @ Localhost',
|
||||
],
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User2 @ Localhost',
|
||||
'CLOUD' => [
|
||||
],
|
||||
],
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User @ Localhost',
|
||||
'CLOUD' => [
|
||||
'username@localhost',
|
||||
|
@ -219,7 +228,7 @@ class RemotePluginTest extends TestCase {
|
|||
],
|
||||
],
|
||||
true,
|
||||
['remotes' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]], 'exact' => ['remotes' => [['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']]]]],
|
||||
['remotes' => [['label' => 'User @ Localhost (username@localhost)', 'uuid' => 'uid', 'type' => '', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]], 'exact' => ['remotes' => [['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']]]]],
|
||||
false,
|
||||
true,
|
||||
],
|
||||
|
@ -227,14 +236,17 @@ class RemotePluginTest extends TestCase {
|
|||
'test@remote',
|
||||
[
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User3 @ Localhost',
|
||||
],
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User2 @ Localhost',
|
||||
'CLOUD' => [
|
||||
],
|
||||
],
|
||||
[
|
||||
'UID' => 'uid',
|
||||
'FN' => 'User @ Localhost',
|
||||
'CLOUD' => [
|
||||
'username@localhost',
|
||||
|
@ -250,14 +262,17 @@ class RemotePluginTest extends TestCase {
|
|||
'username@localhost',
|
||||
[
|
||||
[
|
||||
'UID' => 'uid3',
|
||||
'FN' => 'User3 @ Localhost',
|
||||
],
|
||||
[
|
||||
'UID' => '2',
|
||||
'FN' => 'User2 @ Localhost',
|
||||
'CLOUD' => [
|
||||
],
|
||||
],
|
||||
[
|
||||
'UID' => 'uid1',
|
||||
'FN' => 'User @ Localhost',
|
||||
'CLOUD' => [
|
||||
'username@localhost',
|
||||
|
@ -265,7 +280,7 @@ class RemotePluginTest extends TestCase {
|
|||
],
|
||||
],
|
||||
true,
|
||||
['remotes' => [], 'exact' => ['remotes' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]]]],
|
||||
['remotes' => [], 'exact' => ['remotes' => [['label' => 'User @ Localhost (username@localhost)', 'uuid' => 'uid1', 'type' => '', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]]]],
|
||||
true,
|
||||
true,
|
||||
],
|
||||
|
@ -273,14 +288,17 @@ class RemotePluginTest extends TestCase {
|
|||
'username@localhost',
|
||||
[
|
||||
[
|
||||
'UID' => 'uid3',
|
||||
'FN' => 'User3 @ Localhost',
|
||||
],
|
||||
[
|
||||
'UID' => 'uid2',
|
||||
'FN' => 'User2 @ Localhost',
|
||||
'CLOUD' => [
|
||||
],
|
||||
],
|
||||
[
|
||||
'UID' => 'uid1',
|
||||
'FN' => 'User @ Localhost',
|
||||
'CLOUD' => [
|
||||
'username@localhost',
|
||||
|
@ -288,7 +306,7 @@ class RemotePluginTest extends TestCase {
|
|||
],
|
||||
],
|
||||
false,
|
||||
['remotes' => [], 'exact' => ['remotes' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]]]],
|
||||
['remotes' => [], 'exact' => ['remotes' => [['label' => 'User @ Localhost (username@localhost)', 'uuid' => 'uid1', 'type' => '', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]]]],
|
||||
true,
|
||||
true,
|
||||
],
|
||||
|
@ -297,14 +315,17 @@ class RemotePluginTest extends TestCase {
|
|||
'user name@localhost',
|
||||
[
|
||||
[
|
||||
'UID' => 'uid1',
|
||||
'FN' => 'User3 @ Localhost',
|
||||
],
|
||||
[
|
||||
'UID' => 'uid2',
|
||||
'FN' => 'User2 @ Localhost',
|
||||
'CLOUD' => [
|
||||
],
|
||||
],
|
||||
[
|
||||
'UID' => 'uid3',
|
||||
'FN' => 'User Name @ Localhost',
|
||||
'CLOUD' => [
|
||||
'user name@localhost',
|
||||
|
@ -312,7 +333,7 @@ class RemotePluginTest extends TestCase {
|
|||
],
|
||||
],
|
||||
false,
|
||||
['remotes' => [], 'exact' => ['remotes' => [['label' => 'User Name @ Localhost (user name@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'user name@localhost', 'server' => 'localhost']]]]],
|
||||
['remotes' => [], 'exact' => ['remotes' => [['label' => 'User Name @ Localhost (user name@localhost)', 'uuid' => 'uid3', 'type' => '', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'user name@localhost', 'server' => 'localhost']]]]],
|
||||
true,
|
||||
true,
|
||||
],
|
||||
|
@ -321,14 +342,17 @@ class RemotePluginTest extends TestCase {
|
|||
'user space@remote',
|
||||
[
|
||||
[
|
||||
'UID' => 'uid3',
|
||||
'FN' => 'User3 @ Localhost',
|
||||
],
|
||||
[
|
||||
'UID' => 'uid2',
|
||||
'FN' => 'User2 @ Localhost',
|
||||
'CLOUD' => [
|
||||
],
|
||||
],
|
||||
[
|
||||
'UID' => 'uid1',
|
||||
'FN' => 'User @ Localhost',
|
||||
'CLOUD' => [
|
||||
'username@localhost',
|
||||
|
|
Loading…
Reference in a new issue