}
foreach ($properties as $key => $value) {
- $vCard->$key = $vCard->createProperty($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) {
* @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
*
use OCP\IURLGenerator;
use Sabre\VObject\Component\VCard;
use Sabre\VObject\Property\Text;
+//use Sabre\VObject\Property\;
use Test\TestCase;
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');
$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
*