function context_prefix_prefixes in Context 5
Queries the database & modules for valid prefixes based on prefixing method.
Modules that wish to provide in-code prefixes should implement the hook_context_prefix_prefixes(). Which should return an array of prefixes by by provider.
For example:
return array( 'my_module => array( array('prefix' => 'foo', 'id' => 1), array('prefix' => 'bar', 'id' => 2), ), );
3 calls to context_prefix_prefixes()
- context_prefix_admin in context_prefix/
context_prefix.module  - Page callback for the context_prefix administration page.
 - context_prefix_goto in context_prefix/
context_prefix.module  - A wrapper around drupal_goto() that abstracts out the prefix/context setting You provide both a normal drupal path ('node/43') and a context prefix ('dsi') and context_prefix_goto will determine the correct location to use.
 - context_prefix_parse in context_prefix/
context_prefix.module  - Parses a query string of various types (url, domain, etc.) and returns an array of any found prefixes and their respective providers/id values.
 
File
- context_prefix/
context_prefix.module, line 163  
Code
function context_prefix_prefixes($requested_method = CONTEXT_PREFIX_PATH, $reset = FALSE) {
  static $prefixes;
  if (!isset($prefixes) || $reset) {
    $prefixes = array();
    // Invoke context_prefix_prefixes() and gather all prefixes
    // provided "in code" (or stored by their respective modules)
    foreach (module_invoke_all('context_prefix_prefixes') as $provider => $items) {
      $method = variable_get('context_prefix_method_' . $provider, CONTEXT_PREFIX_PATH);
      // If using a prefix pair we don't need to cache the valid prefixes.
      if ($method == CONTEXT_PREFIX_PAIR) {
        $prefix = variable_get('context_prefix_method_' . $provider . '_key', false);
        if ($prefix != false) {
          $prefixes[$method][$prefix] = array(
            'provider' => $provider,
            'id' => null,
          );
        }
      }
      else {
        foreach ($items as $item) {
          if ($item['prefix'] && $item['id']) {
            $prefixes[$method][$item['prefix']] = array(
              'provider' => $provider,
              'id' => $item['id'],
            );
          }
        }
      }
    }
    // Gather database prefixes.
    $result = db_query("SELECT DISTINCT(provider) FROM {context_prefix}");
    while ($item = db_fetch_object($result)) {
      $method = variable_get('context_prefix_method_' . $item->provider, CONTEXT_PREFIX_PATH);
      // Don't load all data base prefixes for keyed pairs.
      if ($method == CONTEXT_PREFIX_PAIR) {
        $prefix = variable_get('context_prefix_method_' . $item->provider . '_key', false);
        if ($prefix != false) {
          $prefixes[$method][$prefix] = array(
            'provider' => $item->provider,
            'id' => null,
          );
        }
      }
      else {
        $result2 = db_query("SELECT * FROM {context_prefix} WHERE provider = '%s'", $item->provider);
        while ($row = db_fetch_object($result2)) {
          $prefixes[$method][$row->prefix] = array(
            'provider' => $row->provider,
            'id' => $row->id,
          );
        }
      }
    }
  }
  return isset($prefixes[$requested_method]) ? $prefixes[$requested_method] : array();
}