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; } }
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; }