You are here

function search_service_content in Services 6.2

Same name and namespace in other branches
  1. 7 services/search_service/search_service.inc \search_service_content()

Return site content specified by a system setting.

This service returns search results across the site, as specified by the user at admin/settings/search_service. This can combine results from any module that implements hook_search().

Parameters

$keys: The keywords to search for within the content.

$simple: When set to TRUE, only the fields indicated in $stdkeys will be returned. This can be helpful to limit the size of the search results.

Return value

An array of search results. If $simple is TRUE, this array will contain only results and no content objects. If $simple is FALSE the array will contain both results and full content objects.

See also

hook_search()

1 string reference to 'search_service_content'
search_service_service in services/search_service/search_service.module
Implementation of hook_service().

File

services/search_service/search_service.inc, line 84
Link general search functionalities to services module.

Code

function search_service_content($keys, $simple = FALSE) {

  // define standard keys for simple set
  $stdkeys = array(
    'link',
    'type',
    'title',
    'user',
    'date',
    'snippet',
  );

  // invoke the search hook to generate results
  $results = array();
  $search_hooks = variable_get('search_service_options', array(
    'node' => 'node',
  ));
  watchdog('search_service', 'search.content invoked for "!keys".', array(
    '!keys' => $keys,
  ));

  // run through only select hook_search() as defined in /admin/settings/search_service
  foreach ($search_hooks as $hook) {
    if (!empty($hook)) {
      $search_results = module_invoke($hook, 'search', 'search', $keys);
      if (!empty($search_results)) {
        $results = array_merge($results, $search_results);
      }
    }
  }
  $count_message = format_plural(count($results), '1 result', '@count results');
  watchdog('search_service', 'search.content returned !count for "!keys".', array(
    '!count' => $count_message,
    '!keys' => $keys,
  ));
  if ($results and is_array($results) and count($results)) {

    // if simple results requested, remove extra data
    if ($simple) {
      $num = count($results);
      for ($i = 0; $i < $num; $i++) {
        $keys = array_keys($results[$i]);
        foreach ($keys as $key) {
          if (!in_array($key, $stdkeys)) {
            unset($results[$i][$key]);
          }
        }
      }
    }
    return $results;
  }
  return services_error(t('Search returned no results.'), 401);
}