Example #1
0
 /**
  * Get a list of suggestions from the given search string.
  * @param string $search
  *   String to get suggestions for.
  * @param array $types
  *   Types to search for. Example page.
  * @param bool $past
  *   Also search suggestions for past events.
  * @param array $extra_parameters
  *   Extra parameters to add to the search query.
  */
 public function searchSuggestions($search_string, $types = null, $past = FALSE, $extra_parameters = array(), $max = null)
 {
     $client = $this->getClient();
     $request = $client->get($search_path = empty($types) ? 'search/suggest' : 'search/suggest/item');
     if (!empty($types)) {
         foreach ($types as $type) {
             $parameter = new Type($type);
             $request->getQuery()->add($parameter->getKey(), $parameter->getValue());
         }
         $parameter = new Title($search_string);
         $request->getQuery()->add($parameter->getKey(), $parameter->getValue());
     } else {
         $parameter = new Query($search_string);
         $request->getQuery()->add($parameter->getKey(), $parameter->getValue());
     }
     // Add additional requested parameters.
     foreach ($extra_parameters as $parameter) {
         $value = '';
         $localParams = $parameter->getLocalParams();
         if (!empty($localParams)) {
             if (!isset($localParameterSerializer)) {
                 $localParameterSerializer = new LocalParameterSerializer();
             }
             $value = $localParameterSerializer->serialize($localParams);
         }
         $value .= $parameter->getValue();
         $request->getQuery()->add($parameter->getKey(), $value);
     }
     if ($past) {
         $request->getQuery()->add('past', 'true');
     }
     if ($max) {
         $request->getQuery()->add('max', $max);
     }
     $this->addVersionToRequest($request);
     $response = $request->send();
     $xmlElement = new SimpleXMLElement($response->getBody(true), 0, false, $this->cdbXmlNamespaceUri);
     return SuggestionsResult::fromXml($xmlElement);
 }