/** * @param InputInterface $input * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { $principalBackend = new Principal($this->config, $this->userManager); $this->backend = new CardDavBackend($this->dbConnection, $principalBackend); // ensure system addressbook exists $systemAddressBook = $this->ensureSystemAddressBookExists(); $converter = new Converter(); $output->writeln('Syncing users ...'); $progress = new ProgressBar($output); $progress->start(); $this->userManager->callForAllUsers(function ($user) use($systemAddressBook, $converter, $progress) { /** @var IUser $user */ $name = $user->getBackendClassName(); $userId = $user->getUID(); $cardId = "{$name}:{$userId}.vcf"; $card = $this->backend->getCard($systemAddressBook['id'], $cardId); if ($card === false) { $vCard = $converter->createCardFromUser($user); $this->backend->createCard($systemAddressBook['id'], $cardId, $vCard->serialize()); } else { $vCard = Reader::read($card['carddata']); if ($converter->updateCard($vCard, $user)) { $this->backend->updateCard($systemAddressBook['id'], $cardId, $vCard->serialize()); } } $progress->advance(); }); // remove no longer existing $allCards = $this->backend->getCards($systemAddressBook['id']); foreach ($allCards as $card) { $vCard = Reader::read($card['carddata']); $uid = $vCard->UID->getValue(); // load backend and see if user exists if (!$this->userManager->userExists($uid)) { $this->backend->deleteCard($systemAddressBook['id'], $card['uri']); } } $progress->finish(); $output->writeln(''); }
public function syncInstance(\Closure $progressCallback) { $systemAddressBook = $this->getLocalSystemAddressBook(); $this->userManager->callForAllUsers(function ($user) use($systemAddressBook, $progressCallback) { $this->updateUser($user); $progressCallback(); }); // remove no longer existing $allCards = $this->backend->getCards($systemAddressBook['id']); foreach ($allCards as $card) { $vCard = Reader::read($card['carddata']); $uid = $vCard->UID->getValue(); // load backend and see if user exists if (!$this->userManager->userExists($uid)) { $this->deleteUser($card['uri']); } } }
public function testMultiCard() { $this->backend = $this->getMockBuilder('OCA\\DAV\\CardDAV\\CardDavBackend')->setConstructorArgs([$this->db, $this->principal, null])->setMethods(['updateProperties'])->getMock(); // create a new address book $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER); $this->assertEquals(1, count($books)); $bookId = $books[0]['id']; // create a card $uri0 = $this->getUniqueID('card'); $this->backend->createCard($bookId, $uri0, ''); $uri1 = $this->getUniqueID('card'); $this->backend->createCard($bookId, $uri1, ''); $uri2 = $this->getUniqueID('card'); $this->backend->createCard($bookId, $uri2, ''); // get all the cards $cards = $this->backend->getCards($bookId); $this->assertEquals(3, count($cards)); $this->assertEquals('', $cards[0]['carddata']); $this->assertEquals('', $cards[1]['carddata']); $this->assertEquals('', $cards[2]['carddata']); // get the cards $cards = $this->backend->getMultipleCards($bookId, [$uri1, $uri2]); $this->assertEquals(2, count($cards)); foreach ($cards as $card) { $this->assertArrayHasKey('id', $card); $this->assertArrayHasKey('uri', $card); $this->assertArrayHasKey('lastmodified', $card); $this->assertArrayHasKey('etag', $card); $this->assertArrayHasKey('size', $card); $this->assertEquals('', $card['carddata']); } // delete the card $this->backend->deleteCard($bookId, $uri0); $this->backend->deleteCard($bookId, $uri1); $this->backend->deleteCard($bookId, $uri2); $cards = $this->backend->getCards($bookId); $this->assertEquals(0, count($cards)); }
public function testMultiCard() { // create a new address book $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER); $this->assertEquals(1, count($books)); $bookId = $books[0]['id']; // create a card $uri0 = $this->getUniqueID('card'); $this->backend->createCard($bookId, $uri0, ''); $uri1 = $this->getUniqueID('card'); $this->backend->createCard($bookId, $uri1, ''); $uri2 = $this->getUniqueID('card'); $this->backend->createCard($bookId, $uri2, ''); // get all the cards $cards = $this->backend->getCards($bookId); $this->assertEquals(3, count($cards)); $this->assertEquals('', $cards[0]['carddata']); $this->assertEquals('', $cards[1]['carddata']); $this->assertEquals('', $cards[2]['carddata']); // get the cards $cards = $this->backend->getMultipleCards($bookId, [$uri1, $uri2]); $this->assertEquals(2, count($cards)); foreach ($cards as $card) { $this->assertArrayHasKey('id', $card); $this->assertArrayHasKey('uri', $card); $this->assertArrayHasKey('lastmodified', $card); $this->assertArrayHasKey('etag', $card); $this->assertArrayHasKey('size', $card); $this->assertEquals('', $card['carddata']); } // delete the card $this->backend->deleteCard($bookId, $uri0); $this->backend->deleteCard($bookId, $uri1); $this->backend->deleteCard($bookId, $uri2); $cards = $this->backend->getCards($bookId); $this->assertEquals(0, count($cards)); }
public function getCards() { return $this->backend->getCards(1); }