You are here

function advanced_link_url_load in Advanced Link 7

Same name and namespace in other branches
  1. 6 advanced_link.module \advanced_link_url_load()

Loads list of matching URLs.

1 call to advanced_link_url_load()
advanced_link_autocomplete in ./advanced_link.module
Menu callback for autocomplete.

File

./advanced_link.module, line 93
Defines simple advanced_link widget.

Code

function advanced_link_url_load($field_name, $bundle, $string = NULL) {

  // Getting urls_filter settings from table 'field_config_instances'
  $instance = field_read_instances(array(
    'field_name' => $field_name,
    'bundle' => $bundle,
  ), array());
  $search_type = $instance[0]['widget']['settings']['urls_search'];
  $urls_filter = isset($instance[0]['widget']['settings']['urls_filter']) ? trim($instance[0]['widget']['settings']['urls_filter']) : NULL;
  if ($search_type == ADVANCED_LINK_SEARCH_CONTAINS) {

    // Search for urls that contain our string.
    $condition_menu = db_like($string) . '[^\\%]*$';
    $condition_alias = '%' . db_like($string) . '%';
  }
  else {

    // Search for urls that start string.
    $condition_menu = '^' . db_like($string) . '[^\\%]*$';
    $condition_alias = db_like($string) . '%';
  }
  if ($string) {
    $urls_list = array();
    $urls_list_menu = array();

    // If database connection type is pgsql we should use '~'
    // instead 'REGEXP' in query condition.
    if (db_driver() == 'pgsql') {
      $operator = '~';
    }
    else {
      $operator = 'REGEXP';
    }

    // $operator use for exclude urls with '%' character.
    $query = db_select('menu_router', 'mr')
      ->fields('mr', array(
      'path',
    ))
      ->condition('mr.path', $condition_menu, $operator)
      ->range(0, 20)
      ->orderBy('mr.path', 'ASC');
    $query = advanced_link_autocomplete_url_filter_conditions($urls_filter, $query, 'mr.path');
    $result = $query
      ->execute()
      ->fetchAll();
    foreach ($result as $record) {
      $urls_list[$record->path] = $record->path;
    }
    $query = db_select('url_alias', 'ua')
      ->fields('ua', array(
      'alias',
    ))
      ->condition('ua.alias', $condition_alias, 'LIKE')
      ->range(0, 20 - count($urls_list))
      ->orderBy('ua.alias', 'ASC');
    $query = advanced_link_autocomplete_url_filter_conditions($urls_filter, $query, 'ua.alias');
    $result = $query
      ->execute()
      ->fetchAll();
    foreach ($result as $record) {
      $urls_list_menu[$record->alias] = $record->alias;
    }
    return $urls_list + $urls_list_menu;
  }
  else {
    return FALSE;
  }
}