Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2021-04-30 22:36:05 +0300
committerArthur Schiwon <blizzz@arthur-schiwon.de>2021-04-30 22:36:05 +0300
commita9f39aab29f1d08c58c6b3ef87f461c29740bf19 (patch)
treea72c34268d28cfe658ddd954327e81bf3866d9da
parent36c9441c37368ad2cd0e044dc5f2adcf036e92d8 (diff)
fix creating vcards with multiple string values
Internally it is valid to provide multiple values for a property as plain string. An exampe is given in the PhpDoc of AddressBookImpl::search(). Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r--apps/dav/lib/CardDAV/AddressBookImpl.php18
-rw-r--r--apps/dav/tests/unit/CardDAV/AddressBookImplTest.php14
2 files changed, 23 insertions, 9 deletions
diff --git a/apps/dav/lib/CardDAV/AddressBookImpl.php b/apps/dav/lib/CardDAV/AddressBookImpl.php
index a2895fed34a..e270b579e1f 100644
--- a/apps/dav/lib/CardDAV/AddressBookImpl.php
+++ b/apps/dav/lib/CardDAV/AddressBookImpl.php
@@ -150,13 +150,17 @@ class AddressBookImpl implements IAddressBook {
if (is_array($value)) {
$vCard->remove($key);
foreach ($value as $entry) {
- if (($key === "ADR" || $key === "PHOTO") && is_string($entry["value"])) {
- $entry["value"] = stripslashes($entry["value"]);
- $entry["value"] = explode(';', $entry["value"]);
- }
- $property = $vCard->createProperty($key, $entry["value"]);
- if (isset($entry["type"])) {
- $property->add('TYPE', $entry["type"]);
+ if (is_string($entry)) {
+ $property = $vCard->createProperty($key, $entry);
+ } else {
+ if (($key === "ADR" || $key === "PHOTO") && is_string($entry["value"])) {
+ $entry["value"] = stripslashes($entry["value"]);
+ $entry["value"] = explode(';', $entry["value"]);
+ }
+ $property = $vCard->createProperty($key, $entry["value"]);
+ if (isset($entry["type"])) {
+ $property->add('TYPE', $entry["type"]);
+ }
}
$vCard->add($property);
}
diff --git a/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php b/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php
index 85be3a4bfb5..38d560b9539 100644
--- a/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php
+++ b/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php
@@ -154,11 +154,20 @@ class AddressBookImplTest extends TestCase {
->setMethods(['vCard2Array', 'createUid', 'createEmptyVCard'])
->getMock();
+ $expectedProperties = 0;
+ foreach ($properties as $data) {
+ if (is_string($data)) {
+ $expectedProperties++;
+ } else {
+ $expectedProperties += count($data);
+ }
+ }
+
$addressBookImpl->expects($this->once())->method('createUid')
->willReturn($uid);
$addressBookImpl->expects($this->once())->method('createEmptyVCard')
->with($uid)->willReturn($this->vCard);
- $this->vCard->expects($this->exactly(count($properties)))
+ $this->vCard->expects($this->exactly($expectedProperties))
->method('createProperty');
$this->backend->expects($this->once())->method('createCard');
$this->backend->expects($this->never())->method('updateCard');
@@ -172,7 +181,8 @@ class AddressBookImplTest extends TestCase {
public function dataTestCreate() {
return [
[[]],
- [['FN' => 'John Doe']]
+ [['FN' => 'John Doe']],
+ [['FN' => 'John Doe', 'EMAIL' => ['john@doe.cloud', 'john.doe@example.org']]],
];
}