You are here

function crm_core_activity_search_execute in CRM Core 7

Implements hook_search_execute().

File

modules/crm_core_activity/crm_core_activity.module, line 541
Provides an entity for recording a contact's activities.

Code

function crm_core_activity_search_execute($keys = NULL, $conditions = NULL) {
  $query = db_select('search_index', 'i', array(
    'target' => 'slave',
  ))
    ->extend('SearchQuery')
    ->extend('PagerDefault');
  $query
    ->join('crm_core_activity', 'a', 'a.activity_id = i.sid');
  $query
    ->searchExpression($keys, 'cmc_activity');

  // Insert special keywords.
  $query
    ->setOption('type', 'cmc_activity');
  $query
    ->setOption('language', 'a.language');

  // Only continue if the first pass query matches.
  if (!$query
    ->executeFirstPass()) {
    return array();
  }

  // Load results.
  $find = $query
    ->limit(10)
    ->execute();
  $results = array();
  foreach ($find as $item) {

    // Render the contact.
    $activity = crm_core_activity_load($item->sid);
    $build = crm_core_activity_view($activity);
    unset($build['#theme']);
    $activity->rendered = drupal_render($build);
    $uri = entity_uri('crm_core_activity', $activity);
    $results[] = array(
      'link' => url($uri['path'], array_merge($uri['options'], array(
        'absolute' => TRUE,
      ))),
      'type' => crm_core_activity_type_get_name($activity->type),
      'title' => check_plain($activity->title),
      'user' => theme('username', array(
        'account' => user_load($activity->uid),
      )),
      'date' => $activity->changed,
      'contact' => $activity,
      'score' => $item->calculated_score,
      'snippet' => search_excerpt($keys, $activity->rendered),
      'language' => isset($activity->language) ? $activity->language : LANGUAGE_NONE,
    );
  }
  return $results;
}