You are here

function token_custom_load_multiple in Custom Tokens 7.2

Same name and namespace in other branches
  1. 7 token_custom.module \token_custom_load_multiple()

Loads an array of tokens from the database.

Maintains a static cache with the tokens already loaded to avoid unnecessary queries.

Parameters

array $names: An array containing the machine names of the tokens to return. If none, then loads and returns all the tokens.

Return value

array An array of token objects, keyed by the token's machine name.

5 calls to token_custom_load_multiple()
token_custom_list_page in ./token_custom.admin.inc
Callback for the token_custom token list page.
token_custom_load in ./token_custom.module
Loads an individual token from the database.
token_custom_tokens in ./token_custom.module
Implements hook_tokens().
token_custom_token_info in ./token_custom.module
Implements hook_token_info().
token_custom_type_delete in ./token_custom.module
Delete token type.

File

./token_custom.module, line 380
It gives the user the ability to create custom tokens using PHP code for specific replacements that can improve other modules relying on the token Drupal 7 core API.

Code

function token_custom_load_multiple($names = NULL) {

  // FIXME Use drupal_static instead of static keyword.
  static $tokens = array();
  static $all_loaded = FALSE;
  if ($names === NULL) {
    if (!$all_loaded) {
      $loaded = array_keys($tokens);
      $query = db_select('token_custom')
        ->fields('token_custom');
      if (!empty($loaded)) {
        $query
          ->condition('machine_name', $loaded, 'NOT IN');
      }
      $results = $query
        ->execute();
      $all_loaded = TRUE;
      foreach ($results as $token) {
        $tokens[$token->machine_name] = $token;
      }
    }
    return $tokens;
  }
  $to_fetch = array();
  foreach ($names as $name) {
    if (!array_key_exists($name, $tokens)) {
      $to_fetch[] = $name;
    }
  }
  if (!empty($to_fetch)) {
    $query = db_select('token_custom')
      ->fields('token_custom')
      ->condition('machine_name', $to_fetch, 'IN');
    $results = $query
      ->execute();
    foreach ($results as $token) {
      $tokens[$token->machine_name] = $token;
    }
  }
  $return = array();
  foreach ($names as $name) {
    if (isset($tokens[$name])) {
      $return[$name] = $tokens[$name];
    }
  }
  return $return;
}