Exemple #1
0
 public static function sortUninstall($packageA, $packageB)
 {
     try {
         $packageA = Package_Catalog::getPackageName($packageA);
         $packageB = Package_Catalog::getPackageName($packageB);
         return self::$uninstallOrder[$packageA] - self::$uninstallOrder[$packageB];
     } catch (Exception $e) {
         return -1;
     }
 }
Exemple #2
0
 public static function dispatch($operation, $identifiers)
 {
     if (!is_array($identifiers)) {
         $identifiers = array($identifiers);
     }
     $steps = array('validate', 'preExec', 'exec', 'postExec', 'finalize');
     switch ($operation) {
         case Package_Manager::OPERATION_VERIFY:
             $agent = new Package_Operation_Verify();
             break;
         case Package_Manager::OPERATION_REPAIR:
             $agent = new Package_Operation_Repair();
             break;
         case Package_Manager::OPERATION_INSTALL:
             $agent = new Package_Operation_Install();
             break;
         case Package_Manager::OPERATION_UNINSTALL:
             $agent = new Package_Operation_Uninstall();
             break;
         case Package_Manager::OPERATION_MIGRATE:
             $agent = new Package_Operation_Migrate();
             break;
         default:
             throw new Package_Operation_Exception('Unknown operation ' . $operation);
     }
     foreach ($identifiers as $identifier) {
         $name = Package_Catalog::getPackageName($identifier);
         Package_Message::log('debug', 'Package management dispatching ' . $operation . ' on ' . $identifier . '(' . $name . ')');
     }
     $successfull = TRUE;
     foreach ($steps as $step) {
         foreach ($identifiers as $pos => $identifier) {
             try {
                 Package_Message::log('debug', 'Package management executing ' . get_class($agent) . '->' . $step . '(' . $identifier . ')');
                 self::execStep($identifier, $step, $agent);
             } catch (Exception $e) {
                 // TODO: This needs to also stop anything depending on it during
                 // install or uninstall.
                 unset($identifiers[$pos]);
                 self::rollback($operation, $identifier, $step, $e);
                 $successfull = FALSE;
             }
         }
     }
     foreach ($identifiers as $identifier) {
         $package = Package_Catalog::getPackageByIdentifier($identifier);
         Package_Operation_Message::set(ucfirst($operation) . ' of package ' . $package['displayName'] . ' version ' . $package['version'] . ' completed', 'success', $identifier);
     }
     return $successfull;
 }