/** * @param string $pattern which should match within the $searchProperties * @param array $searchProperties defines the properties within the query pattern should match * @param array $options - for future use. One should always have options! * @return array an array of contacts which are arrays of key-value-pairs * @since 5.0.0 */ public function search($pattern, $searchProperties, $options) { $result = $this->backend->search($this->getKey(), $pattern, $searchProperties); $vCards = []; foreach ($result as $cardData) { $vCards[] = $this->vCard2Array($this->readCard($cardData)); } return $vCards; }
/** * @param string $pattern which should match within the $searchProperties * @param array $searchProperties defines the properties within the query pattern should match * @param array $options - for future use. One should always have options! * @return array an array of contacts which are arrays of key-value-pairs * @since 5.0.0 */ public function search($pattern, $searchProperties, $options) { $results = $this->backend->search($this->getKey(), $pattern, $searchProperties); $vCards = []; foreach ($results as $result) { $vCards[] = $this->vCard2Array($result['uri'], $this->readCard($result['carddata'])); } return $vCards; }
/** * @dataProvider dataTestSearch * * @param string $pattern * @param array $properties * @param array $expected */ public function testSearch($pattern, $properties, $expected) { /** @var VCard $vCards */ $vCards = []; $vCards[0] = new VCard(); $vCards[0]->add(new Text($vCards[0], 'UID', 'uid')); $vCards[0]->add(new Text($vCards[0], 'FN', 'John Doe')); $vCards[0]->add(new Text($vCards[0], 'CLOUD', '*****@*****.**')); $vCards[1] = new VCard(); $vCards[1]->add(new Text($vCards[1], 'UID', 'uid')); $vCards[1]->add(new Text($vCards[1], 'FN', 'John M. Doe')); $vCardIds = []; $query = $this->db->getQueryBuilder(); for ($i = 0; $i < 2; $i++) { $query->insert($this->dbCardsTable)->values(['addressbookid' => $query->createNamedParameter(0), 'carddata' => $query->createNamedParameter($vCards[$i]->serialize(), IQueryBuilder::PARAM_LOB), 'uri' => $query->createNamedParameter('uri' . $i), 'lastmodified' => $query->createNamedParameter(time()), 'etag' => $query->createNamedParameter('etag' . $i), 'size' => $query->createNamedParameter(120)]); $query->execute(); $vCardIds[] = $query->getLastInsertId(); } $query->insert($this->dbCardsPropertiesTable)->values(['addressbookid' => $query->createNamedParameter(0), 'cardid' => $query->createNamedParameter($vCardIds[0]), 'name' => $query->createNamedParameter('FN'), 'value' => $query->createNamedParameter('John Doe'), 'preferred' => $query->createNamedParameter(0)]); $query->execute(); $query->insert($this->dbCardsPropertiesTable)->values(['addressbookid' => $query->createNamedParameter(0), 'cardid' => $query->createNamedParameter($vCardIds[0]), 'name' => $query->createNamedParameter('CLOUD'), 'value' => $query->createNamedParameter('*****@*****.**'), 'preferred' => $query->createNamedParameter(0)]); $query->execute(); $query->insert($this->dbCardsPropertiesTable)->values(['addressbookid' => $query->createNamedParameter(0), 'cardid' => $query->createNamedParameter($vCardIds[1]), 'name' => $query->createNamedParameter('FN'), 'value' => $query->createNamedParameter('John M. Doe'), 'preferred' => $query->createNamedParameter(0)]); $query->execute(); $result = $this->backend->search(0, $pattern, $properties); // check result $this->assertSame(count($expected), count($result)); $found = []; foreach ($result as $r) { foreach ($expected as $exp) { if ($r['uri'] === $exp[0] && strpos($r['carddata'], $exp[1]) > 0) { $found[$exp[1]] = true; break; } } } $this->assertSame(count($expected), count($found)); }