@@ -33,64 +33,64 @@ |
||
| 33 | 33 | |
| 34 | 34 | class CardSearchDao { |
| 35 | 35 | |
| 36 | - /** @var IDBConnection */ |
|
| 37 | - private $db; |
|
| 36 | + /** @var IDBConnection */ |
|
| 37 | + private $db; |
|
| 38 | 38 | |
| 39 | - public function __construct(IDBConnection $db) { |
|
| 40 | - $this->db = $db; |
|
| 41 | - } |
|
| 39 | + public function __construct(IDBConnection $db) { |
|
| 40 | + $this->db = $db; |
|
| 41 | + } |
|
| 42 | 42 | |
| 43 | - public function findExisting(IUser $user, |
|
| 44 | - ?string $uid, |
|
| 45 | - ?string $email, |
|
| 46 | - ?string $cloudId): ?string { |
|
| 47 | - $addressbooksQuery = $this->db->getQueryBuilder(); |
|
| 48 | - $cardQuery = $this->db->getQueryBuilder(); |
|
| 49 | - $propQuery = $this->db->getQueryBuilder(); |
|
| 43 | + public function findExisting(IUser $user, |
|
| 44 | + ?string $uid, |
|
| 45 | + ?string $email, |
|
| 46 | + ?string $cloudId): ?string { |
|
| 47 | + $addressbooksQuery = $this->db->getQueryBuilder(); |
|
| 48 | + $cardQuery = $this->db->getQueryBuilder(); |
|
| 49 | + $propQuery = $this->db->getQueryBuilder(); |
|
| 50 | 50 | |
| 51 | - $propOr = $propQuery->expr()->orX(); |
|
| 52 | - if ($uid !== null) { |
|
| 53 | - $propOr->add($propQuery->expr()->andX( |
|
| 54 | - $propQuery->expr()->eq('name', $cardQuery->createNamedParameter('UID')), |
|
| 55 | - $propQuery->expr()->eq('value', $cardQuery->createNamedParameter($uid)) |
|
| 56 | - )); |
|
| 57 | - } |
|
| 58 | - if ($email !== null) { |
|
| 59 | - $propOr->add($propQuery->expr()->andX( |
|
| 60 | - $propQuery->expr()->eq('name', $cardQuery->createNamedParameter('EMAIL')), |
|
| 61 | - $propQuery->expr()->eq('value', $cardQuery->createNamedParameter($email)) |
|
| 62 | - )); |
|
| 63 | - } |
|
| 64 | - if ($cloudId !== null) { |
|
| 65 | - $propOr->add($propQuery->expr()->andX( |
|
| 66 | - $propQuery->expr()->eq('name', $cardQuery->createNamedParameter('CLOUD')), |
|
| 67 | - $propQuery->expr()->eq('value', $cardQuery->createNamedParameter($cloudId)) |
|
| 68 | - )); |
|
| 69 | - } |
|
| 70 | - $addressbooksQuery->selectDistinct('id') |
|
| 71 | - ->from('addressbooks') |
|
| 72 | - ->where($addressbooksQuery->expr()->eq('principaluri', $cardQuery->createNamedParameter("principals/users/" . $user->getUID()))); |
|
| 73 | - $propQuery->selectDistinct('cardid') |
|
| 74 | - ->from('cards_properties') |
|
| 75 | - ->where($propQuery->expr()->in('addressbookid', $propQuery->createFunction($addressbooksQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY)) |
|
| 76 | - ->andWhere($propOr) |
|
| 77 | - ->groupBy('cardid'); |
|
| 78 | - $cardQuery->select('carddata') |
|
| 79 | - ->from('cards') |
|
| 80 | - ->where($cardQuery->expr()->in('id', $cardQuery->createFunction($propQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY)) |
|
| 81 | - ->andWhere($cardQuery->expr()->in('addressbookid', $cardQuery->createFunction($addressbooksQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY)) |
|
| 82 | - ->setMaxResults(1); |
|
| 83 | - $result = $cardQuery->execute(); |
|
| 84 | - /** @var string|resource|false $card */ |
|
| 85 | - $card = $result->fetchColumn(0); |
|
| 51 | + $propOr = $propQuery->expr()->orX(); |
|
| 52 | + if ($uid !== null) { |
|
| 53 | + $propOr->add($propQuery->expr()->andX( |
|
| 54 | + $propQuery->expr()->eq('name', $cardQuery->createNamedParameter('UID')), |
|
| 55 | + $propQuery->expr()->eq('value', $cardQuery->createNamedParameter($uid)) |
|
| 56 | + )); |
|
| 57 | + } |
|
| 58 | + if ($email !== null) { |
|
| 59 | + $propOr->add($propQuery->expr()->andX( |
|
| 60 | + $propQuery->expr()->eq('name', $cardQuery->createNamedParameter('EMAIL')), |
|
| 61 | + $propQuery->expr()->eq('value', $cardQuery->createNamedParameter($email)) |
|
| 62 | + )); |
|
| 63 | + } |
|
| 64 | + if ($cloudId !== null) { |
|
| 65 | + $propOr->add($propQuery->expr()->andX( |
|
| 66 | + $propQuery->expr()->eq('name', $cardQuery->createNamedParameter('CLOUD')), |
|
| 67 | + $propQuery->expr()->eq('value', $cardQuery->createNamedParameter($cloudId)) |
|
| 68 | + )); |
|
| 69 | + } |
|
| 70 | + $addressbooksQuery->selectDistinct('id') |
|
| 71 | + ->from('addressbooks') |
|
| 72 | + ->where($addressbooksQuery->expr()->eq('principaluri', $cardQuery->createNamedParameter("principals/users/" . $user->getUID()))); |
|
| 73 | + $propQuery->selectDistinct('cardid') |
|
| 74 | + ->from('cards_properties') |
|
| 75 | + ->where($propQuery->expr()->in('addressbookid', $propQuery->createFunction($addressbooksQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY)) |
|
| 76 | + ->andWhere($propOr) |
|
| 77 | + ->groupBy('cardid'); |
|
| 78 | + $cardQuery->select('carddata') |
|
| 79 | + ->from('cards') |
|
| 80 | + ->where($cardQuery->expr()->in('id', $cardQuery->createFunction($propQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY)) |
|
| 81 | + ->andWhere($cardQuery->expr()->in('addressbookid', $cardQuery->createFunction($addressbooksQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY)) |
|
| 82 | + ->setMaxResults(1); |
|
| 83 | + $result = $cardQuery->execute(); |
|
| 84 | + /** @var string|resource|false $card */ |
|
| 85 | + $card = $result->fetchColumn(0); |
|
| 86 | 86 | |
| 87 | - if ($card === false) { |
|
| 88 | - return null; |
|
| 89 | - } |
|
| 90 | - if (is_resource($card)) { |
|
| 91 | - return stream_get_contents($card); |
|
| 92 | - } |
|
| 87 | + if ($card === false) { |
|
| 88 | + return null; |
|
| 89 | + } |
|
| 90 | + if (is_resource($card)) { |
|
| 91 | + return stream_get_contents($card); |
|
| 92 | + } |
|
| 93 | 93 | |
| 94 | - return $card; |
|
| 95 | - } |
|
| 94 | + return $card; |
|
| 95 | + } |
|
| 96 | 96 | } |