Skip to content

Commit 8efa2e9

Browse files
fix: do not ignore move command object target uri
Signed-off-by: SebastianKrupinski <[email protected]> [skip ci]
1 parent 3cc15e3 commit 8efa2e9

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

apps/dav/lib/CardDAV/AddressBook.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,12 @@ public function moveInto($targetName, $sourcePath, INode $sourceNode) {
246246
}
247247

248248
try {
249-
return $this->carddavBackend->moveCard($sourceNode->getAddressbookId(), (int)$this->addressBookInfo['id'], $sourceNode->getUri(), $sourceNode->getOwner());
249+
return $this->carddavBackend->moveCard(
250+
$sourceNode->getAddressbookId(),
251+
$sourceNode->getUri(),
252+
$this->getResourceId(),
253+
$targetName,
254+
);
250255
} catch (Exception $e) {
251256
// Avoid injecting LoggerInterface everywhere
252257
Server::get(LoggerInterface::class)->error('Could not move calendar object: ' . $e->getMessage(), ['exception' => $e]);

apps/dav/lib/CardDAV/CardDavBackend.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ public function deleteAddressBook($addressBookId) {
475475
*/
476476
public function getCards($addressbookId) {
477477
$query = $this->db->getQueryBuilder();
478-
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
478+
$query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
479479
->from($this->dbCardsTable)
480480
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressbookId)));
481481

@@ -512,7 +512,7 @@ public function getCards($addressbookId) {
512512
*/
513513
public function getCard($addressBookId, $cardUri) {
514514
$query = $this->db->getQueryBuilder();
515-
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
515+
$query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
516516
->from($this->dbCardsTable)
517517
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
518518
->andWhere($query->expr()->eq('uri', $query->createNamedParameter($cardUri)))
@@ -555,7 +555,7 @@ public function getMultipleCards($addressBookId, array $uris) {
555555
$cards = [];
556556

557557
$query = $this->db->getQueryBuilder();
558-
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
558+
$query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
559559
->from($this->dbCardsTable)
560560
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
561561
->andWhere($query->expr()->in('uri', $query->createParameter('uri')));
@@ -717,32 +717,33 @@ public function updateCard($addressBookId, $cardUri, $cardData) {
717717
/**
718718
* @throws Exception
719719
*/
720-
public function moveCard(int $sourceAddressBookId, int $targetAddressBookId, string $cardUri, string $oldPrincipalUri): bool {
721-
return $this->atomic(function () use ($sourceAddressBookId, $targetAddressBookId, $cardUri, $oldPrincipalUri) {
722-
$card = $this->getCard($sourceAddressBookId, $cardUri);
720+
public function moveCard(int $sourceAddressBookId, string $sourceObjectUri, int $targetAddressBookId, string $tragetObjectUri): bool {
721+
return $this->atomic(function () use ($sourceAddressBookId, $sourceObjectUri, $targetAddressBookId, $tragetObjectUri) {
722+
$card = $this->getCard($sourceAddressBookId, $sourceObjectUri);
723723
if (empty($card)) {
724724
return false;
725725
}
726+
$sourceObjectId = (int)$card['id'];
726727

727728
$query = $this->db->getQueryBuilder();
728729
$query->update('cards')
729730
->set('addressbookid', $query->createNamedParameter($targetAddressBookId, IQueryBuilder::PARAM_INT))
730-
->where($query->expr()->eq('uri', $query->createNamedParameter($cardUri, IQueryBuilder::PARAM_STR), IQueryBuilder::PARAM_STR))
731+
->set('uri', $query->createNamedParameter($tragetObjectUri, IQueryBuilder::PARAM_STR))
732+
->where($query->expr()->eq('uri', $query->createNamedParameter($sourceObjectUri, IQueryBuilder::PARAM_STR), IQueryBuilder::PARAM_STR))
731733
->andWhere($query->expr()->eq('addressbookid', $query->createNamedParameter($sourceAddressBookId, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT))
732734
->executeStatement();
733735

734-
$this->purgeProperties($sourceAddressBookId, (int)$card['id']);
735-
$this->updateProperties($sourceAddressBookId, $card['uri'], $card['carddata']);
736+
$this->purgeProperties($sourceAddressBookId, $sourceObjectId);
737+
$this->updateProperties($targetAddressBookId, $tragetObjectUri, $card['carddata']);
736738

737-
$this->addChange($sourceAddressBookId, $card['uri'], 3);
738-
$this->addChange($targetAddressBookId, $card['uri'], 1);
739+
$this->addChange($sourceAddressBookId, $sourceObjectUri, 3);
740+
$this->addChange($targetAddressBookId, $tragetObjectUri, 1);
739741

740-
$card = $this->getCard($targetAddressBookId, $cardUri);
742+
$card = $this->getCard($targetAddressBookId, $tragetObjectUri);
741743
// Card wasn't found - possibly because it was deleted in the meantime by a different client
742744
if (empty($card)) {
743745
return false;
744746
}
745-
746747
$targetAddressBookRow = $this->getAddressBookById($targetAddressBookId);
747748
// the address book this card is being moved to does not exist any longer
748749
if (empty($targetAddressBookRow)) {

0 commit comments

Comments
 (0)