Merge pull request #23317 from nextcloud/fix/contact-update
handle nested properties for contact updates
This commit is contained in:
commit
78da9532ba
|
@ -146,8 +146,23 @@ class AddressBookImpl implements IAddressBook {
|
|||
}
|
||||
|
||||
foreach ($properties as $key => $value) {
|
||||
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"]);
|
||||
}
|
||||
$vCard->add($property);
|
||||
}
|
||||
} elseif ($key !== 'URI') {
|
||||
$vCard->$key = $vCard->createProperty($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
if ($update) {
|
||||
$this->backend->updateCard($this->getKey(), $uri, $vCard->serialize());
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
* @author Morris Jobke <hey@morrisjobke.de>
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
* @author Thomas Müller <thomas.mueller@tmit.eu>
|
||||
* @author Matthias Heinisch <nextcloud@matthiasheinisch.de>
|
||||
*
|
||||
* @license AGPL-3.0
|
||||
*
|
||||
|
@ -35,6 +36,7 @@ use OCA\DAV\CardDAV\CardDavBackend;
|
|||
use OCP\IURLGenerator;
|
||||
use Sabre\VObject\Component\VCard;
|
||||
use Sabre\VObject\Property\Text;
|
||||
//use Sabre\VObject\Property\;
|
||||
use Test\TestCase;
|
||||
|
||||
class AddressBookImplTest extends TestCase {
|
||||
|
@ -199,7 +201,7 @@ class AddressBookImplTest extends TestCase {
|
|||
->willReturn(['carddata' => 'data']);
|
||||
$addressBookImpl->expects($this->once())->method('readCard')
|
||||
->with('data')->willReturn($this->vCard);
|
||||
$this->vCard->expects($this->exactly(count($properties)))
|
||||
$this->vCard->expects($this->exactly(count($properties)-1))
|
||||
->method('createProperty');
|
||||
$this->backend->expects($this->never())->method('createCard');
|
||||
$this->backend->expects($this->once())->method('updateCard');
|
||||
|
@ -209,6 +211,41 @@ class AddressBookImplTest extends TestCase {
|
|||
$this->assertTrue($addressBookImpl->createOrUpdate($properties));
|
||||
}
|
||||
|
||||
public function testUpdateWithTypes() {
|
||||
$uid = 'uid';
|
||||
$uri = 'bla.vcf';
|
||||
$properties = ['URI' => $uri, 'UID' => $uid, 'FN' => 'John Doe', 'ADR' => [['type' => 'HOME', 'value' => ';;street;city;;;country']]];
|
||||
$vCard = new vCard;
|
||||
$textProperty = $vCard->createProperty('KEY','value');
|
||||
|
||||
/** @var \PHPUnit\Framework\MockObject\MockObject | AddressBookImpl $addressBookImpl */
|
||||
$addressBookImpl = $this->getMockBuilder(AddressBookImpl::class)
|
||||
->setConstructorArgs(
|
||||
[
|
||||
$this->addressBook,
|
||||
$this->addressBookInfo,
|
||||
$this->backend,
|
||||
$this->urlGenerator,
|
||||
]
|
||||
)
|
||||
->setMethods(['vCard2Array', 'createUid', 'createEmptyVCard', 'readCard'])
|
||||
->getMock();
|
||||
|
||||
$this->backend->expects($this->once())->method('getCard')
|
||||
->with($this->addressBookInfo['id'], $uri)
|
||||
->willReturn(['carddata' => 'data']);
|
||||
$addressBookImpl->expects($this->once())->method('readCard')
|
||||
->with('data')->willReturn($this->vCard);
|
||||
$this->vCard->method('createProperty')->willReturn($textProperty);
|
||||
$this->vCard->expects($this->exactly(count($properties)-1))
|
||||
->method('createProperty');
|
||||
$this->vCard->expects($this->once())->method('remove')
|
||||
->with('ADR');
|
||||
$this->vCard->expects($this->once())->method('add');
|
||||
|
||||
$addressBookImpl->createOrUpdate($properties);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataTestGetPermissions
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue