Esempio n. 1
0
 public static function getDisplayList()
 {
     $packageList = Package_Catalog::getPackageList();
     $avaliablePackages = array('Upgrade Avaliable' => array(), 'Installed' => array(), 'Uninstalled' => array());
     foreach ($packageList as $name => $avaliable) {
         if (isset($avaliable[self::STATUS_INSTALLED])) {
             $packages = $avaliable[self::STATUS_INSTALLED];
             $package = reset($packages);
             if (!empty($package['upgrades'])) {
                 $avaliablePackages['Upgrade Avaliable'][$name] = $package;
             } else {
                 $avaliablePackages['Installed'][$name] = $package;
             }
             continue;
         }
         $newestPackage = array();
         foreach ($avaliable as $status => $packages) {
             foreach ($packages as $key => $package) {
                 if (empty($newestPackage['version'])) {
                     $newestPackage = $package;
                     continue;
                 }
                 if (Package_Dependency::compareVersion($package['version'], $newestPackage['version'])) {
                     $newestPackage = $package;
                 }
             }
         }
         if (!empty($newestPackage)) {
             $avaliablePackages['Uninstalled'][$name] = $newestPackage;
         }
     }
     return $avaliablePackages;
 }
Esempio n. 2
0
 public function exec($identifier)
 {
     self::verify($identifier);
     self::runCheckMethods($identifier);
     Package_Dependency::validateIntegration($identifier);
 }
Esempio n. 3
0
 protected static function findAvaliableMigrations()
 {
     foreach (self::$packageList as $name => $packages) {
         if (empty($packages[Package_Manager::STATUS_INSTALLED])) {
             continue;
         }
         $installedIdentifier = key($packages[Package_Manager::STATUS_INSTALLED]);
         $installedPackage =& $packages[Package_Manager::STATUS_INSTALLED][$installedIdentifier];
         foreach ($packages as $status => $avaliable) {
             if ($status == Package_Manager::STATUS_INSTALLED) {
                 continue;
             }
             foreach ($avaliable as $identifier => $package) {
                 if (Package_Dependency::compareVersion($package['version'], $installedPackage['version'])) {
                     $installedPackage['upgrades'][$package['version']] = $identifier;
                 } else {
                     $installedPackage['downgrades'][$package['version']] = $identifier;
                 }
             }
         }
         if (!empty($installedPackage['upgrades'])) {
             uksort($installedPackage['upgrades'], array('Package_Dependency', 'compareVersion'));
             $installedPackage['upgrades'] = array_reverse($installedPackage['upgrades']);
         }
         if (!empty($installedPackage['downgrades'])) {
             uksort($installedPackage['downgrades'], array('Package_Dependency', 'compareVersion'));
             $installedPackage['downgrades'] = array_reverse($installedPackage['downgrades']);
         }
     }
 }
Esempio n. 4
0
 /**
  * Perform a migration of this module.
  *
  * Make sure you rollback any changes if your migration fails!
  *
  * By default, the migrate routine just runs the migrations in Doctrine for your models, based on the version of
  * this module and the version registered in the database.
  * If that's all you need for your migrations, you don't need to override this function.
  * All models in the directory of your module will be migrated.
  *
  * You do not need to override this class if you are not adding additional functionality to it.
  *
  * @return array | NULL Array of failures, or NULL if everything is OK
  */
 public function migrate($identifier)
 {
     $package = Package_Catalog::getPackageByIdentifier($identifier);
     if (!empty($package['models'])) {
         $loadedModels = Doctrine::loadModels($package['directory'] . '/models', Doctrine::MODEL_LOADING_CONSERVATIVE);
     }
     if (empty($loadedModels)) {
         return;
     }
     $installed = Package_Catalog::getInstalledPackage($package['packageName']);
     if (Package_Dependency::compareVersion($package['version'], $installed['version'])) {
         kohana::log('debug', 'Attempting to upgrade package ' . $installed['packageName'] . ' version ' . $installed['version'] . ' to ' . $package['version']);
         foreach ($loadedModels as $modelName) {
             if (get_parent_class($modelName) != 'Bluebox_Record' and get_parent_class($modelName) != 'Doctrine_Record') {
                 continue;
             }
             $migrationDirectory = $package['directory'] . '/migrations/' . $modelName;
             kohana::log('debug', 'Looking for migrations in `' . $migrationDirectory . '`');
             if (is_dir($migrationDirectory)) {
                 try {
                     $migration = new Bluebox_Migration($migrationDirectory, NULL, strtolower($modelName));
                     kohana::log('debug', 'Running migration on ' . $modelName . ' from model version ' . $migration->getCurrentVersion() . ' to ' . $migration->getLatestVersion());
                     $migration->migrate();
                     $msg = inflector::humanizeModelName($modelName);
                     $msg .= ' database table upgraded to model version # ' . $migration->getCurrentVersion();
                     Package_Message::set($msg, 'info', $identifier);
                 } catch (Exception $e) {
                     kohana::log('alert', 'Alerts during migration, this can USUALLY be ignored: ' . $e->getMessage());
                     // TODO: This isnt a great idea, but migrations are so noisy with needless failures... PITA
                     $migration->setCurrentVersion($migration->getLatestVersion());
                     foreach ($migration->getErrors() as $error) {
                         if (strstr($error->getMessage(), 'Already at version')) {
                             $msg = inflector::humanizeModelName($modelName);
                             $msg .= ' database table ' . inflector::lcfirst($error->getMessage());
                             Package_Message::set($msg, 'info', $identifier);
                         } else {
                             Package_Message::set($error->getMessage(), 'alert', $identifier);
                         }
                     }
                 }
             } else {
                 $migration = new Bluebox_Migration(NULL, NULL, strtolower($modelName));
                 $migration->setCurrentVersion(0);
             }
         }
     } else {
         kohana::log('debug', 'Attempting to downgrade package ' . $installed['packageName'] . ' version ' . $installed['version'] . ' to ' . $package['version']);
         foreach ($loadedModels as $modelName) {
             if (get_parent_class($modelName) != 'Bluebox_Record' and get_parent_class($modelName) != 'Doctrine_Record') {
                 continue;
             }
             $migrationDirectory = $installed['directory'] . '/migrations/' . $modelName;
             kohana::log('debug', 'Looking for migrations in `' . $migrationDirectory . '`');
             if (is_dir($migrationDirectory)) {
                 try {
                     $modelVersion = 0;
                     if (is_dir($package['directory'] . '/migrations/' . $modelName)) {
                         $previousMigration = new Doctrine_Migration($package['directory'] . '/migrations/' . $modelName);
                         $modelVersion = $previousMigration->getLatestVersion();
                     }
                     kohana::log('debug', 'Determined that ' . $package['packageName'] . ' version ' . $package['version'] . ' works against ' . $modelName . ' version ' . $modelVersion);
                     $migration = new Bluebox_Migration($migrationDirectory, NULL, strtolower($modelName));
                     kohana::log('debug', 'Running migration on ' . $modelName . ' from model version ' . $migration->getCurrentVersion() . ' to ' . $modelVersion);
                     $migration->migrate($modelVersion);
                     $msg = inflector::humanizeModelName($modelName);
                     $msg .= ' database table downgraded to model version # ' . $migration->getCurrentVersion();
                     Package_Message::set($msg, 'info', $identifier);
                 } catch (Exception $e) {
                     kohana::log('alert', 'Alerts during migration, this can USUALLY be ignored: ' . $e->getMessage());
                     // TODO: This isnt a great idea, but migrations are so noisy with needless failures... PITA
                     $migration->setCurrentVersion($migration->getLatestVersion());
                     foreach ($migration->getErrors() as $error) {
                         if (strstr($error->getMessage(), 'Already at version')) {
                             $msg = inflector::humanizeModelName($modelName);
                             $msg .= ' database table ' . inflector::lcfirst($error->getMessage());
                             Package_Message::set($msg, 'info', $identifier);
                         } else {
                             Package_Message::set($error->getMessage(), 'alert', $identifier);
                         }
                     }
                 }
             } else {
                 $migration = new Bluebox_Migration(NULL, NULL, strtolower($modelName));
                 $migration->setCurrentVersion(0);
             }
         }
     }
 }
Esempio n. 5
0
 public function validate($identifier)
 {
     $package = Package_Catalog::getPackageByIdentifier($identifier);
     Package_Dependency::validateAbandon($identifier);
 }