function _registry_check_code in Drupal 7
Checks for a resource in the registry.
Parameters
$type: The type of resource we are looking up, or one of the constants REGISTRY_RESET_LOOKUP_CACHE or REGISTRY_WRITE_LOOKUP_CACHE, which signal that we should reset or write the cache, respectively.
$name: The name of the resource, or NULL if either of the REGISTRY_* constants is passed in.
Return value
TRUE if the resource was found, FALSE if not. NULL if either of the REGISTRY_* constants is passed in as $type.
Related topics
5 calls to _registry_check_code()
- drupal_autoload_class in includes/
bootstrap.inc - Confirms that a class is available.
- drupal_autoload_interface in includes/
bootstrap.inc - Confirms that an interface is available.
- drupal_autoload_trait in includes/
bootstrap.inc - Confirms that a trait is available.
- drupal_page_footer in includes/
common.inc - Performs end-of-request tasks.
- _registry_update in includes/
registry.inc - Does the work for registry_update().
File
- includes/
bootstrap.inc, line 3456 - Functions that need to be loaded on every Drupal request.
Code
function _registry_check_code($type, $name = NULL) {
static $lookup_cache, $cache_update_needed;
if ($type == 'class' && class_exists($name) || $type == 'interface' && interface_exists($name) || $type == 'trait' && trait_exists($name)) {
return TRUE;
}
if (!isset($lookup_cache)) {
$lookup_cache = array();
if ($cache = cache_get('lookup_cache', 'cache_bootstrap')) {
$lookup_cache = $cache->data;
}
}
// When we rebuild the registry, we need to reset this cache so
// we don't keep lookups for resources that changed during the rebuild.
if ($type == REGISTRY_RESET_LOOKUP_CACHE) {
$cache_update_needed = TRUE;
$lookup_cache = NULL;
return;
}
// Called from drupal_page_footer, we write to permanent storage if there
// changes to the lookup cache for this request.
if ($type == REGISTRY_WRITE_LOOKUP_CACHE) {
if ($cache_update_needed) {
cache_set('lookup_cache', $lookup_cache, 'cache_bootstrap');
}
return;
}
// $type is either 'interface' or 'class', so we only need the first letter to
// keep the cache key unique.
$cache_key = $type[0] . $name;
if (isset($lookup_cache[$cache_key])) {
if ($lookup_cache[$cache_key]) {
include_once DRUPAL_ROOT . '/' . $lookup_cache[$cache_key];
}
return (bool) $lookup_cache[$cache_key];
}
// This function may get called when the default database is not active, but
// there is no reason we'd ever want to not use the default database for
// this query.
$file = Database::getConnection('default', 'default')
->select('registry', 'r', array(
'target' => 'default',
))
->fields('r', array(
'filename',
))
->condition('r.name', db_like($name), 'LIKE')
->condition('r.type', $type)
->execute()
->fetchField();
// Flag that we've run a lookup query and need to update the cache.
$cache_update_needed = TRUE;
// Misses are valuable information worth caching, so cache even if
// $file is FALSE.
$lookup_cache[$cache_key] = $file;
if ($file) {
include_once DRUPAL_ROOT . '/' . $file;
return TRUE;
}
else {
return FALSE;
}
}