[ Index ]

PHP Cross Reference of Akelos Framework

title

Body

[close]

/AkActiveRecord/ -> AkDbSchemaCache.php (source)

   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  ?>


Generated: Mon Oct 27 12:43:49 2008 Cross-referenced by PHPXref 0.6