| [ Index ] |
PHP Cross Reference of Akelos Framework |
[Summary view] [Print] [Text view]
1 <?php 2 3 class AkDbSchemaCache 4 { 5 function doRefresh($set = null) 6 { 7 static $refresh = false; 8 if ($set === false) { 9 $refresh = false; 10 } else if ($set === true) { 11 $refresh = true; 12 } 13 return $refresh; 14 } 15 function _generateCacheFileName($table, $environment = AK_ENVIRONMENT) 16 { 17 $namespace = Ak::sanitize_include($table, 'high'); 18 $cacheDir = AK_CONFIG_DIR; 19 if (defined('AK_CONFIG_CACHE_TMP') && AK_CONFIG_CACHE_TMP) { 20 $cacheDir = AK_TMP_DIR.DS.'ak_config'; 21 } 22 $cacheFile = $cacheDir.DS.'cache'.DS.'activerecord'.DS.$environment.DS.$table.'.php'; 23 return $cacheFile; 24 } 25 26 function clear($table, $environment = AK_ENVIRONMENT) 27 { 28 29 $modelName = AkInflector::singularize(AkInflector::classify($table)); 30 $cacheFileName = AkDbSchemaCache::_generateCacheFileName($modelName, $environment); 31 //echo "Cleaning cache: $cacheFileName\n"; 32 if (file_exists($cacheFileName)) { 33 @unlink($cacheFileName); 34 } 35 AkDbSchemaCache::_get($modelName,$environment,false,false); 36 $tableName = AkInflector::tableize($table); 37 $databaseInternalsFileName = AkDbSchemaCache::_generateCacheFileName('database_table_internals_'.$tableName); 38 //echo "Cleaning cache: $databaseInternalsFileName\n"; 39 if (file_exists($databaseInternalsFileName)) { 40 @unlink($databaseInternalsFileName); 41 } 42 43 AkDbSchemaCache::_get('database_table_internals_'.$tableName,$environment,false,false); 44 } 45 46 function clearAll($environment = AK_ENVIRONMENT) 47 { 48 $dummy = AkDbSchemaCache::_generateCacheFileName('dummy', $environment); 49 $dir = dirname($dummy); 50 $files = Ak::dir($dir); 51 foreach ($files as $file) { 52 if (is_file($dir.DS.$file)) { 53 @unlink($dir.DS.$file); 54 } 55 } 56 } 57 58 function getAvailableTables($environment = AK_ENVIRONMENT) 59 { 60 return AkDbSchemaCache::_get('available_tables', $environment); 61 } 62 63 function setAvailableTables($tables, $environment = AK_ENVIRONMENT) 64 { 65 AkDbSchemaCache::_set('available_tables',$tables, $environment); 66 } 67 function setModelColumnSettings($model, $config, $environment = AK_ENVIRONMENT) 68 { 69 return AkDbSchemaCache::_set($model, $config, $environment, false, true); 70 71 } 72 function setDbTableInternals($table, $internals, $environment = AK_ENVIRONMENT) 73 { 74 return AkDbSchemaCache::_set('database_table_internals_'.$table, $internals, $environment); 75 } 76 function getDbTableInternals($table, $environment = AK_ENVIRONMENT) 77 { 78 return AkDbSchemaCache::_get('database_table_internals_'.$table,$environment); 79 } 80 function getColumnsSettings($environment = AK_ENVIRONMENT) 81 { 82 return AkDbSchemaCache::_get(true,$environment); 83 84 } 85 function getModelColumnSettings($model, $environment = AK_ENVIRONMENT) 86 { 87 return AkDbSchemaCache::_get($model, $environment, false, null, true); 88 } 89 function &_get($type, $environment = AK_ENVIRONMENT, $uncached = false, $set = null, $var_export = false) 90 { 91 $false = false; 92 if (AkDbSchemaCache::doRefresh() && $set === null) return $false; 93 $null = null; 94 static $configs = array(); 95 if ($set !== null) { 96 if (!isset($configs[$environment])) { 97 $configs[$environment] = array(); 98 } 99 if ($set === false) { 100 unset($configs[$environment][$type]); 101 } else { 102 $configs[$environment][$type] = $set; 103 } 104 return $null; 105 } 106 107 if ($type === true) { 108 return isset($configs[$environment]) ? $configs[$environment] : array(); 109 } 110 if (!$uncached && isset($configs[$environment]) && isset($configs[$environment][$type])) { 111 return $configs[$environment][$type]; 112 } 113 if ($uncached || !($config = AkDbSchemaCache::_readCache($type, $environment, false, $var_export))) { 114 return $false; 115 } 116 if (!isset($configs[$environment])) { 117 $configs[$environment] = array($type=>$config); 118 } else { 119 $configs[$environment][$type] = $config; 120 } 121 return $configs[$environment][$type]; 122 } 123 124 function _readCache($table, $environment = AK_ENVIRONMENT, $force = false, $var_export = false) 125 { 126 $cacheFileName = AkDbSchemaCache::_generateCacheFileName($table,$environment); 127 if (file_exists($cacheFileName)) { 128 if ($var_export === false) { 129 $config = unserialize(file_get_contents($cacheFileName)); 130 } else { 131 $config = include $cacheFileName; 132 } 133 } else { 134 $config = false; 135 } 136 return $config; 137 } 138 139 function _set($type, $config, $environment = AK_ENVIRONMENT, $force = false, $var_export = false) 140 { 141 if ($var_export === false) { 142 $cache = serialize($config); 143 } else { 144 $cacheStr = var_export($config,true); 145 $cache = <<<EOF 146 <?php 147 \$cache = $cacheStr; 148 return \$cache; 149 ?> 150 EOF; 151 } 152 $cacheFileName = AkDbSchemaCache::_generateCacheFileName($type,$environment); 153 $cacheDir = dirname($cacheFileName); 154 155 if (!file_exists($cacheDir)) { 156 $oldumask = umask(); 157 umask(0); 158 $res = @mkdir($cacheDir,0777,true); 159 if (!$res) { 160 trigger_error(Ak::t('Could not create config cache dir %dir',array('%dir'=>$cacheDir)),E_USER_ERROR); 161 } 162 umask($oldumask); 163 } 164 $fh = fopen($cacheFileName,'w+'); 165 if ($fh) { 166 fputs($fh,$cache); 167 fclose($fh); 168 @chmod($cacheFileName,0777); 169 } else { 170 trigger_error(Ak::t('Could not create dbschema cache file %file',array('%file'=>$cacheFileName)),E_USER_ERROR); 171 } 172 AkDbSchemaCache::_get($type, $environment, false, $config); 173 } 174 175 } 176 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Oct 27 12:43:49 2008 | Cross-referenced by PHPXref 0.6 |