/** * Register different capsules that we can use * @param array $capsules */ public function registerCapsules($capsules = array()) { $cachePath = Config::get('base_path') . 'storage/cache/'; if (is_file($cachePath . 'reactor.cache.php')) { require_once $cachePath . 'reactor.cache.php'; $cached = true; } else { $cached = false; $toCache = ''; } foreach ($capsules as $capsule) { //todo: load anything we need to, configs, etc $this->_capsules[] = $capsule; if (!$cached) { $reflector = new \ReflectionClass(get_class($capsule)); $capsuleDir = !is_dir(dirname($reflector->getFileName()) . '/config/') ? $this->getConfigDirectory(dirname($reflector->getFileName())) : dirname($reflector->getFileName()) . '/config/'; $capsuleArray = Virge::dirToArray($capsuleDir); //crawl the config directory if it exists $files = $capsuleArray ? $capsuleArray['file'] : array(); foreach ($files as $file) { $toCache .= str_replace(array("<?php", "?>"), '', file_get_contents($capsuleDir . $file)) . "\n"; require_once $capsuleDir . $file; } } } foreach ($capsules as $capsule) { $capsule->registerCapsule(); } if (!$cached && Config::get('app', 'cache_reactor') === true) { //save cache file_put_contents($cachePath . 'reactor.cache.php', "<?php\n" . $this->sanitizeCache($toCache)); } }
/** * Commit our migrations, pass in a directory will read all files within * and commit them as migrations * @param string $dir */ public function commitMigrations($dir) { $fileArray = Virge::dirToArray($dir); //TODO: use the Virge ORM $sql = "SELECT DISTINCT(`filename`) AS `file` FROM `virge_migration`"; $result = Database::query($sql); $existing = array(); foreach ($result as $row) { $existing[] = $row['file']; } $files = $fileArray['file']; uasort($files, function ($a, $b) use($dir) { $aFilename = pathinfo($a, PATHINFO_FILENAME); $aDateTime = \DateTime::createFromFormat('Y-m-d-H-i-s', substr($aFilename, strlen($aFilename) - 19)); $bFilename = pathinfo($b, PATHINFO_FILENAME); $bDateTime = \DateTime::createFromFormat('Y-m-d-H-i-s', substr($bFilename, strlen($bFilename) - 19)); if ($aDateTime < $bDateTime) { return -1; } if ($aDateTime > $bDateTime) { return 1; } if (filemtime($dir . $a) < filemtime($dir . $b)) { return 1; } return -1; }); foreach ($files as $file) { if (!in_array($file, $existing)) { include $dir . $file; $this->logMigration($file); } } }
/** * Compile the config */ public static function compile() { $configPath = self::get('app_path') . 'config/'; $configFiles = Virge::dirToArray($configPath); $distConfigs = array(); if ($configFiles) { foreach ($configFiles['file'] as $configFile) { if (strpos($configFile, '.dist') === false) { continue; } $configName = self::getConfigNameFromFile($configFile); $distConfigs[$configName] = (include_once $configPath . $configFile); } } $compiledConfig = array(); foreach (self::$_config as $name => $config) { if (isset($distConfigs[$name])) { $distConfig = $distConfigs[$name]; $compiledConfig[$name] = array_replace_recursive($distConfig, $config); } else { $compiledConfig[$name] = $config; } } file_put_contents($configPath . '_compiled.php', serialize($compiledConfig)); }