示例#1
0
 /**
  * @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));
 }