/** * Gets migrations that have no been applied yet AND have a later timestamp than the current Craft release. * * @param $plugin * * @return array */ public function getNewMigrations($plugin = null) { $migrations = array(); $migrationPath = $this->getMigrationPath($plugin); if (IOHelper::folderExists($migrationPath) && IOHelper::isReadable($migrationPath)) { $applied = array(); foreach ($this->getMigrationHistory($plugin) as $migration) { $applied[] = $migration['version']; } $handle = opendir($migrationPath); if ($plugin) { $pluginInfo = craft()->plugins->getPluginInfo($plugin); $storedDate = $pluginInfo['installDate']->getTimestamp(); } else { $storedDate = Craft::getReleaseDate()->getTimestamp(); } while (($file = readdir($handle)) !== false) { if ($file[0] === '.') { continue; } $path = IOHelper::normalizePathSeparators($migrationPath . $file); $class = IOHelper::getFileName($path, false); // Have we already run this migration? if (in_array($class, $applied)) { continue; } if (preg_match('/^m(\\d\\d)(\\d\\d)(\\d\\d)_(\\d\\d)(\\d\\d)(\\d\\d)_\\w+\\.php$/', $file, $matches)) { // Check the migration timestamp against the Craft release date $time = strtotime('20' . $matches[1] . '-' . $matches[2] . '-' . $matches[3] . ' ' . $matches[4] . ':' . $matches[5] . ':' . $matches[6]); if ($time > $storedDate) { $migrations[] = $class; } } } closedir($handle); sort($migrations); } return $migrations; }