function AMP_lookup_clear_cached($type, $instance_var = null) { //delete from memcache require_once "AMP/System/Lookups.inc.php"; $key = AMPSystem_Lookup::cache_key($type, $instance_var); AMP_cache_delete($key); //clear existing in-memory copy /* $lookup_types = array( 'AMPSystem_Lookup' => 'AMPSystemLookup_', 'AMPContent_Lookup' => 'AMPContentLookup_', 'FormLookup' => 'FormLookup_'); $instance = AMP_to_camelcase( $lookup_type ); $value = false; foreach( $lookup_types as $base_type => $prefix ) { if ( !class_exists( $prefix . ucfirst( $instance ))) continue; call_user_func_array( array( $base_type, 'instance'), array( $instance, $lookup_var, str_replace( '_', '', $prefix), true )); } */ }
function &instance($type, $instance_var = null, $lookup_baseclass = "AMPSystemLookup", $clear_existing = false) { static $lookup_set = false; static $cache = false; $empty_value = false; if (!$cache) { $cache = AMP_get_cache(); } $req_class = $lookup_baseclass . '_' . ucfirst($type); if (!class_exists($req_class)) { trigger_error(sprintf(AMP_TEXT_ERROR_LOOKUP_NOT_FOUND, $req_class)); return $empty_value; } if (!isset($instance_var)) { if ($clear_existing) { unset($lookup_set[$type]); return $empty_value; } //standard lookup if (!isset($lookup_set[$type])) { $lookup_cache_key = AMPSystem_Lookup::cache_key($type, $instance_var); $cached_lookup = AMP_cache_get($lookup_cache_key); if (!($cached_lookup && (!method_exists($cached_lookup, 'allow_cache') || $cached_lookup->allow_cache()))) { $lookup_set[$type] = new $req_class(); if (!method_exists($lookup_set[$type], 'allow_cache') || $lookup_set[$type]->allow_cache()) { AMP_cache_set($lookup_cache_key, $lookup_set[$type]); } } else { $lookup_set[$type] = $cached_lookup; } } } else { //instanced lookup if (!isset($lookup_set[$type])) { $lookup_set[$type] = array(); } if ($clear_existing) { unset($lookup_set[$type][$instance_var]); return $empty_value; } if (!isset($lookup_set[$type][$instance_var])) { $lookup_cache_key = AMPSystem_Lookup::cache_key($type, $instance_var); $cached_lookup = AMP_cache_get($lookup_cache_key); if (!$cached_lookup) { $lookup_set[$type][$instance_var] = new $req_class($instance_var); AMP_cache_set($lookup_cache_key, $lookup_set[$type][$instance_var]); } else { $lookup_set[$type][$instance_var] = $cached_lookup; } } return $lookup_set[$type][$instance_var]->dataset; } //AMP_cache_set( AMP_CACHE_TOKEN_LOOKUP . 'Master__' . AMP_SYSTEM_USER_ID, $lookup_set ); return $lookup_set[$type]->dataset; }