diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-01-21 14:42:05 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-01-27 12:10:06 +0100 |
commit | b2976eb72c0700fa94dbcbebf9a2afa8c5c06a86 (patch) | |
tree | ebdb3a6418ce1333bebff6265258538512536507 /apps/dav/lib/migration/addressbookadapter.php | |
parent | 07a5c2658373f310c707a184e40201685cb04622 (diff) | |
download | nextcloud-server-b2976eb72c0700fa94dbcbebf9a2afa8c5c06a86.tar.gz nextcloud-server-b2976eb72c0700fa94dbcbebf9a2afa8c5c06a86.zip |
Unit testing migration logic
Diffstat (limited to 'apps/dav/lib/migration/addressbookadapter.php')
-rw-r--r-- | apps/dav/lib/migration/addressbookadapter.php | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/apps/dav/lib/migration/addressbookadapter.php b/apps/dav/lib/migration/addressbookadapter.php new file mode 100644 index 00000000000..025aa07a550 --- /dev/null +++ b/apps/dav/lib/migration/addressbookadapter.php @@ -0,0 +1,87 @@ +<?php + +namespace OCA\Dav\Migration; + +use OCP\IDBConnection; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class AddressBookAdapter { + + /** @var \OCP\IDBConnection */ + protected $dbConnection; + + /** @var string */ + private $sourceBookTable; + + /** @var string */ + private $sourceCardsTable; + + /** + * @param IDBConnection $dbConnection + * @param string $sourceBookTable + * @param string $sourceCardsTable + */ + function __construct(IDBConnection $dbConnection, + $sourceBookTable = 'contacts_addressbooks', + $sourceCardsTable = 'contacts_cards') { + $this->dbConnection = $dbConnection; + $this->sourceBookTable = $sourceBookTable; + $this->sourceCardsTable = $sourceCardsTable; + } + + /** + * @param string $user + * @param \Closure $callBack + */ + public function foreachBook($user, \Closure $callBack) { + // get all addressbooks of that user + $query = $this->dbConnection->getQueryBuilder(); + $stmt = $query->select()->from($this->sourceBookTable) + ->where($query->expr()->eq('user', $query->createNamedParameter($user))) + ->execute(); + + while($row = $stmt->fetch()) { + $callBack($row); + } + } + + public function setup() { + if (!$this->dbConnection->tableExists($this->sourceBookTable)) { + throw new \DomainException('Contacts tables are missing. Nothing to do.'); + } + } + + /** + * @param int $addressBookId + * @param \Closure $callBack + */ + public function foreachCard($addressBookId, \Closure $callBack) { + $query = $this->dbConnection->getQueryBuilder(); + $stmt = $query->select()->from($this->sourceCardsTable) + ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) + ->execute(); + + while($row = $stmt->fetch()) { + $callBack($row); + } + } + + /** + * @param int $addressBookId + * @return array + */ + public function getShares($addressBookId) { + $query = $this->dbConnection->getQueryBuilder(); + $shares = $query->select()->from('share') + ->where($query->expr()->eq('item_source', $query->createNamedParameter($addressBookId))) + ->andWhere($query->expr()->eq('item_type', $query->expr()->literal('addressbook'))) + ->andWhere($query->expr()->in('share_type', [ $query->expr()->literal(0), $query->expr()->literal(1)])) + ->execute() + ->fetchAll(); + + return $shares; + } +} |