summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/migration/addressbookadapter.php
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-01-21 14:42:05 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-01-27 12:10:06 +0100
commitb2976eb72c0700fa94dbcbebf9a2afa8c5c06a86 (patch)
treeebdb3a6418ce1333bebff6265258538512536507 /apps/dav/lib/migration/addressbookadapter.php
parent07a5c2658373f310c707a184e40201685cb04622 (diff)
downloadnextcloud-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.php87
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;
+ }
+}