You are here

function advanced_link_url_load in Advanced Link 6

Same name and namespace in other branches
  1. 7 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 85
Defines simple advanced_link widget.

Code

function advanced_link_url_load($field_name, $type_name, $string = NULL) {
  module_load_include('inc', 'content', 'includes/content.crud');
  $instance = content_field_instance_read(array(
    'field_name' => $field_name,
    'type_name' => $type_name,
  ));
  $search_type = $instance[0]['widget']['urls_search'];
  $urls_filter = isset($instance[0]['widget']['urls_filter']) ? trim($instance[0]['widget']['urls_filter']) : NULL;
  if ($search_type == ADVANCED_LINK_SEARCH_CONTAINS) {

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

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

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

    // $operator use for exclude urls with '%' character.
    $query_text = "SELECT path FROM {menu_router} WHERE path " . $operator . " lower('" . $condition_menu . "')";
    $query_text = advanced_link_autocomplete_url_filter_conditions($urls_filter, $query_text, 'path');
    $query_text .= " ORDER BY path ASC";
    $query = db_query_range($query_text, $string, 0, 20);
    while ($result = db_fetch_object($query)) {
      $urls_list_menu[$result->path] = $result->path;
    }
    $query_text = "SELECT dst FROM {url_alias} WHERE dst LIKE lower('" . $condition_alias . "')";
    $query_text = advanced_link_autocomplete_url_filter_conditions($urls_filter, $query_text, 'dst');
    $query_text .= " ORDER BY dst ASC";
    $query = db_query_range($query_text, $string, 0, 20 - count($urls_list_menu));
    while ($result = db_fetch_object($query)) {
      $urls_list[$result->dst] = $result->dst;
    }
    return $urls_list + $urls_list_menu;
  }
  else {
    return FALSE;
  }
}