Skip to content

Commit b883d54

Browse files
fix: do not ignore move command object target uri
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
1 parent db8e570 commit b883d54

File tree

3 files changed

+21
-15
lines changed

3 files changed

+21
-15
lines changed

apps/dav/lib/CardDAV/AddressBook.php

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

252252
try {
253-
return $this->carddavBackend->moveCard($sourceNode->getAddressbookId(), (int)$this->addressBookInfo['id'], $sourceNode->getUri(), $sourceNode->getOwner());
253+
return $this->carddavBackend->moveCard(
254+
$sourceNode->getAddressbookId(),
255+
$sourceNode->getUri(),
256+
$this->getResourceId(),
257+
$targetName,
258+
);
254259
} catch (Exception $e) {
255260
// Avoid injecting LoggerInterface everywhere
256261
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
@@ -474,7 +474,7 @@ public function deleteAddressBook($addressBookId) {
474474
*/
475475
public function getCards($addressbookId) {
476476
$query = $this->db->getQueryBuilder();
477-
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
477+
$query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
478478
->from($this->dbCardsTable)
479479
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressbookId)));
480480

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

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

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

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

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

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

apps/dav/tests/unit/CardDAV/AddressBookTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function testMove(): void {
3333

3434
$card = new Card($backend, $addressBookInfo, ['id' => 5, 'carddata' => 'RANDOM VCF DATA', 'uri' => 'something', 'addressbookid' => 23]);
3535

36-
$backend->expects($this->once())->method('moveCard')->with(23, 666, 'something', 'user1')->willReturn(true);
36+
$backend->expects($this->once())->method('moveCard')->with(23, 'something', 666, 'new')->willReturn(true);
3737

3838
$addressBook->moveInto('new', 'old', $card);
3939
}

0 commit comments

Comments
 (0)