This allows to just UPDATE the card row instead of deleting it and reinsert it. It's very similar to https://github.com/nextcloud/server/pull/30120 for calendars. As we need the addressbookid exposed, this introduces OCA\DAV\CardDAV\Card that extends Sabre's. I chose specifically NOT to auto-inject LoggerInterface in Addressbook like in #30120 because the chain of DI is huge just for ONE simple call and it would break an existing dirty call (OCA\Contacts calling OCA\DAV) of ContactsManager in Contacts: https://github.com/nextcloud/contacts/pull/1722 (in SocialApiService), but this is debatable. Signed-off-by: Thomas Citharel <tcit@tcit.fr>pull/37326/head
parent
25dd264965
commit
13a3ebd4cc
@ -0,0 +1,59 @@ |
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @copyright Copyright (c) 2023, Thomas Citharel <nextcloud@tcit.fr> |
||||
* |
||||
* @author Thomas Citharel <nextcloud@tcit.fr> |
||||
* |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
namespace OCA\DAV\CardDAV; |
||||
|
||||
class Card extends \Sabre\CardDAV\Card |
||||
{ |
||||
public function getId(): int { |
||||
return (int) $this->cardData['id']; |
||||
} |
||||
|
||||
public function getUri(): string { |
||||
return $this->cardData['uri']; |
||||
} |
||||
|
||||
protected function isShared(): bool { |
||||
if (!isset($this->cardData['{http://owncloud.org/ns}owner-principal'])) { |
||||
return false; |
||||
} |
||||
|
||||
return $this->cardData['{http://owncloud.org/ns}owner-principal'] !== $this->cardData['principaluri']; |
||||
} |
||||
|
||||
public function getAddressbookId(): int { |
||||
return (int)$this->cardData['addressbookid']; |
||||
} |
||||
|
||||
public function getPrincipalUri(): string { |
||||
return $this->addressBookInfo['principaluri']; |
||||
} |
||||
|
||||
public function getOwner(): ?string { |
||||
if (isset($this->addressBookInfo['{http://owncloud.org/ns}owner-principal'])) { |
||||
return $this->addressBookInfo['{http://owncloud.org/ns}owner-principal']; |
||||
} |
||||
return parent::getOwner(); |
||||
} |
||||
} |
@ -0,0 +1,120 @@ |
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @copyright Copyright (c) 2023, Thomas Citharel <nextcloud@tcit.fr> |
||||
* |
||||
* @author Thomas Citharel <nextcloud@tcit.fr> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
namespace OCA\DAV\Events; |
||||
|
||||
use OCP\EventDispatcher\Event; |
||||
|
||||
/** |
||||
* Class CardMovedEvent |
||||
* |
||||
* @package OCA\DAV\Events |
||||
* @since 27.0.0 |
||||
*/ |
||||
class CardMovedEvent extends Event { |
||||
private int $sourceAddressBookId; |
||||
private array $sourceAddressBookData; |
||||
private int $targetAddressBookId; |
||||
private array $targetAddressBookData; |
||||
private array $sourceShares; |
||||
private array $targetShares; |
||||
private array $objectData; |
||||
|
||||
/** |
||||
* @since 27.0.0 |
||||
*/ |
||||
public function __construct(int $sourceAddressBookId, |
||||
array $sourceAddressBookData, |
||||
int $targetAddressBookId, |
||||
array $targetAddressBookData, |
||||
array $sourceShares, |
||||
array $targetShares, |
||||
array $objectData) { |
||||
parent::__construct(); |
||||
$this->sourceAddressBookId = $sourceAddressBookId; |
||||
$this->sourceAddressBookData = $sourceAddressBookData; |
||||
$this->targetAddressBookId = $targetAddressBookId; |
||||
$this->targetAddressBookData = $targetAddressBookData; |
||||
$this->sourceShares = $sourceShares; |
||||
$this->targetShares = $targetShares; |
||||
$this->objectData = $objectData; |
||||
} |
||||
|
||||
/** |
||||
* @return int |
||||
* @since 27.0.0 |
||||
*/ |
||||
public function getSourceAddressBookId(): int { |
||||
return $this->sourceAddressBookId; |
||||
} |
||||
|
||||
/** |
||||
* @return array |
||||
* @since 27.0.0 |
||||
*/ |
||||
public function getSourceAddressBookData(): array { |
||||
return $this->sourceAddressBookData; |
||||
} |
||||
|
||||
/** |
||||
* @return int |
||||
* @since 27.0.0 |
||||
*/ |
||||
public function getTargetAddressBookId(): int { |
||||
return $this->targetAddressBookId; |
||||
} |
||||
|
||||
/** |
||||
* @return array |
||||
* @since 27.0.0 |
||||
*/ |
||||
public function getTargetAddressBookData(): array { |
||||
return $this->targetAddressBookData; |
||||
} |
||||
|
||||
/** |
||||
* @return array |
||||
* @since 27.0.0 |
||||
*/ |
||||
public function getSourceShares(): array { |
||||
return $this->sourceShares; |
||||
} |
||||
|
||||
/** |
||||
* @return array |
||||
* @since 27.0.0 |
||||
*/ |
||||
public function getTargetShares(): array { |
||||
return $this->targetShares; |
||||
} |
||||
|
||||
/** |
||||
* @return array |
||||
* @since 27.0.0 |
||||
*/ |
||||
public function getObjectData(): array { |
||||
return $this->objectData; |
||||
} |
||||
} |
Loading…
Reference in new issue