diff options
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..ef7b00188fb --- /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('userid', $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; + } +} |