Ubiquity  2.0.0
php rapid development framework
CacheManager.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Ubiquity\cache;
4 
14 
16 
21  public static $cache;
22  private static $cacheDirectory;
23 
24  public static function start(&$config) {
25  self::$cacheDirectory=self::initialGetCacheDirectory($config);
26  $cacheDirectory=ROOT . DS . self::$cacheDirectory;
27  Annotations::$config['cache']=new AnnotationCache($cacheDirectory . '/annotations');
28  self::register(Annotations::getManager());
29  self::getCacheInstance($config, $cacheDirectory, ".cache");
30  }
31 
32  public static function startProd(&$config) {
33  self::$cacheDirectory=self::initialGetCacheDirectory($config);
34  $cacheDirectory=ROOT . DS . self::$cacheDirectory;
35  self::getCacheInstance($config, $cacheDirectory, ".cache");
36  }
37 
38  protected static function getCacheInstance(&$config, $cacheDirectory, $postfix) {
39  $cacheSystem='Ubiquity\cache\system\ArrayCache';
40  $cacheParams=[ ];
41  if (!isset(self::$cache)) {
42  if (isset($config["cache"]["system"])) {
43  $cacheSystem=$config["cache"]["system"];
44  }
45  if (isset($config["cache"]["params"])) {
46  $cacheParams=$config["cache"]["params"];
47  }
48  self::$cache=new $cacheSystem($cacheDirectory, $postfix, $cacheParams);
49  }
50  return self::$cache;
51  }
52 
53  private static function initialGetCacheDirectory(&$config) {
54  $cacheDirectory=@$config["cache"]["directory"];
55  if (!isset($cacheDirectory)) {
56  $config["cache"]["directory"]="cache/";
57  $cacheDirectory=$config["cache"]["directory"];
58  }
59  return $cacheDirectory;
60  }
61 
62  public static function getCacheDirectory() {
63  return self::$cacheDirectory;
64  }
65 
66  public static function checkCache(&$config, $silent=false) {
67  $dirs=self::getCacheDirectories($config, $silent);
68  foreach ( $dirs as $dir ) {
69  self::safeMkdir($dir);
70  }
71  return $dirs;
72  }
73 
74  public static function getCacheDirectories(&$config, $silent=false) {
75  $cacheDirectory=self::initialGetCacheDirectory($config);
76  if (!$silent) {
77  echo "cache directory is " . UFileSystem::cleanPathname(ROOT . DS . $cacheDirectory) . "\n";
78  }
79  $modelsDir=str_replace("\\", DS, $config["mvcNS"]["models"]);
80  $controllersDir=str_replace("\\", DS, $config["mvcNS"]["controllers"]);
81  $annotationCacheDir=ROOT . DS . $cacheDirectory . DS . "annotations";
82  $modelsCacheDir=ROOT . DS . $cacheDirectory . DS . $modelsDir;
83  $queriesCacheDir=ROOT . DS . $cacheDirectory . DS . "queries";
84  $controllersCacheDir=ROOT . DS . $cacheDirectory . DS . $controllersDir;
85  $viewsCacheDir=ROOT . DS . $cacheDirectory . DS . "views";
86  return [ "annotations" => $annotationCacheDir,"models" => $modelsCacheDir,"controllers" => $controllersCacheDir,"queries" => $queriesCacheDir,"views" => $viewsCacheDir ];
87  }
88 
89  private static function safeMkdir($dir) {
90  if (!is_dir($dir))
91  return mkdir($dir, 0777, true);
92  }
93 
94  public static function clearCache(&$config, $type="all") {
95  $cacheDirectories=self::checkCache($config);
96  $cacheDirs=[ "annotations","controllers","models","queries","views" ];
97  foreach ( $cacheDirs as $typeRef ) {
98  self::_clearCache($cacheDirectories, $type, $typeRef);
99  }
100  }
101 
102  private static function _clearCache($cacheDirectories, $type, $typeRef) {
103  if ($type === "all" || $type === $typeRef)
104  UFileSystem::deleteAllFilesFromFolder($cacheDirectories[$typeRef]);
105  }
106 
107  public static function initCache(&$config, $type="all", $silent=false) {
108  self::checkCache($config, $silent);
109  self::start($config);
110  if ($type === "all" || $type === "models")
111  self::initModelsCache($config, false, $silent);
112  if ($type === "all" || $type === "controllers")
113  self::initRouterCache($config, $silent);
114  if ($type === "all" || $type === "rest")
115  self::initRestCache($config, $silent);
116  }
117 
118  protected static function _getFiles(&$config, $type, $silent=false) {
119  $typeNS=$config["mvcNS"][$type];
120  $typeDir=ROOT . DS . str_replace("\\", DS, $typeNS);
121  if (!$silent)
122  echo \ucfirst($type) . " directory is " . ROOT . $typeNS . "\n";
123  return UFileSystem::glob_recursive($typeDir . DS . '*');
124  }
125 
126  private static function register(AnnotationManager $annotationManager) {
127  $annotationManager->registry=array_merge($annotationManager->registry, [ 'id' => 'Ubiquity\annotations\IdAnnotation','manyToOne' => 'Ubiquity\annotations\ManyToOneAnnotation','oneToMany' => 'Ubiquity\annotations\OneToManyAnnotation','manyToMany' => 'Ubiquity\annotations\ManyToManyAnnotation','joinColumn' => 'Ubiquity\annotations\JoinColumnAnnotation','table' => 'Ubiquity\annotations\TableAnnotation','transient' => 'Ubiquity\annotations\TransientAnnotation','column' => 'Ubiquity\annotations\ColumnAnnotation','joinTable' => 'Ubiquity\annotations\JoinTableAnnotation','route' => 'Ubiquity\annotations\router\RouteAnnotation','var' => 'mindplay\annotations\standard\VarAnnotation','yuml' => 'Ubiquity\annotations\YumlAnnotation','rest' => 'Ubiquity\annotations\rest\RestAnnotation','authorization' => 'Ubiquity\annotations\rest\AuthorizationAnnotation' ]);
128  }
129 }
static glob_recursive($pattern, $flags=0)
Definition: UFileSystem.php:12
static _getFiles(&$config, $type, $silent=false)
static getCacheInstance(&$config, $cacheDirectory, $postfix)
static _clearCache($cacheDirectories, $type, $typeRef)
static startProd(&$config)
static initialGetCacheDirectory(&$config)
static checkCache(&$config, $silent=false)
static getCacheDirectories(&$config, $silent=false)
static initCache(&$config, $type="all", $silent=false)
static deleteAllFilesFromFolder($folder)
Definition: UFileSystem.php:20
static clearCache(&$config, $type="all")