public static function getPackageMessages($messages, $displayedIdentifier) { $html = ''; if (!($package = Package_Catalog::getPackageByIdentifier($displayedIdentifier))) { return ''; } $avaliable = Package_Catalog::getAvaliableVersions($package['packageName']); $avaliable[$displayedIdentifier] = $package['version']; foreach ($messages as $type => $messageList) { foreach ($avaliable as $identifier => $version) { if (empty($messageList[$identifier])) { continue; } $html .= '<div id="' . strtolower($package['packageName'] . '_' . $type) . '"'; $html .= ' class="'; $html .= ' ' . $type . '_message'; $html .= ' ' . $package['packageName'] . '_message packagemanager index module">'; $html .= __(ucfirst($type)); $html .= '<ul class="' . $type . '_list packagemanager index module">'; foreach ($messageList[$identifier] as $message) { $html .= '<li>' . __($message) . '</li>'; } $html .= '</ul>'; $html .= '</div>'; } } return $html; }
public function finalize($identifier) { $package = &Package_Catalog::getPackageByIdentifier($identifier); $package['status'] = Package_Manager::STATUS_INSTALLED; Package_Catalog_Datastore::export($package); }
public function finalize($identifier) { $package =& Package_Catalog::getPackageByIdentifier($identifier); $package['status'] = Package_Manager::STATUS_INSTALLED; Package_Catalog_Datastore::export($package); Package_Catalog::buildCatalog(); $configureInstance = Package_Catalog::getPackageConfigureInstance($identifier); $configureInstance->finalizeInstall($identifier); }
public static function checkTransaction($name, $operation = NULL) { $transaction = self::$instance->transaction; if (is_null($operation)) { $operation = Package_Manager::OPERATION_INSTALL; } if (empty($transaction[$operation])) { Package_Message::set('No packages queued for operation ' . $operation); throw new Package_Transaction_Exception('No packages queued for operation ' . $operation); } foreach ($transaction[$operation] as $identifier) { $package = Package_Catalog::getPackageByIdentifier($identifier); if ($package['packageName'] == $name) { return $package; } } throw new Package_Transaction_Exception('Transcation does not contain requested package ' . $name); }
public static function validateAbandon($identifier) { $package = Package_Catalog::getPackageByIdentifier($identifier); if (!empty($package['denyRemoval'])) { Package_Message::log('debug', 'denyRemoval flag set on package ' . $package['packageName']); Package_Message::set($package['displayName'] . ' is not eligible for removal', 'error', $identifier); throw new Package_Dependency_Exception('Package is not eligible for removal'); } $dependents = self::listDependents($package['packageName']); $failures = array(); foreach ($dependents as $dependent) { if ($dependentPackage = Package_Catalog::getInstalledPackage($dependent)) { Package_Message::log('debug', 'dependency restriction ' . $package['packageName'] . ' is being used by ' . $dependent . ' version ' . $dependentPackage['version']); Package_Message::set($package['displayName'] . ' is being used by ' . $dependentPackage['displayName'] . ' version ' . $dependentPackage['version'], 'error', $identifier); Package_Message::set($dependentPackage['displayName'] . ' is using ' . $package['displayName'], 'alert', $dependentPackage['identifier']); $failures['indispensable'][$dependent] = $dependentPackage['version']; } } if (!empty($failures)) { $dependencyException = new Package_Dependency_Exception('Package did not pass dependency validation'); $dependencyException->loadFailures($failures); throw $dependencyException; } }
protected static function rollback($operation, $identifier, $step, $error) { Package_Message::log('error', 'Package operation ' . $operation . ' failed during ' . $step . ' on package ' . $identifier . ': ' . $error->getMessage()); if ($step == 'validate') { Package_Message::log('debug', 'No rollback action for ' . $operation . ' if we dont get past validate on package ' . $identifier); Package_Operation_Message::set($error->getMessage(), 'error', $identifier); return; } Package_Operation_Message::set($error->getMessage(), 'error', $identifier); switch ($operation) { case Package_Manager::OPERATION_INSTALL: try { Package_Message::log('debug', 'Trying to rollback install via uninstall on package ' . $identifier); Package_Operation_Message::ignoreLogLevels('success'); self::dispatch(Package_Manager::OPERATION_UNINSTALL, $identifier); Package_Operation_Message::acceptAllLogLevels(); } catch (Exception $e) { Package_Operation_Message::set('Error during rollback: ' . $e->getMessage(), 'alert', $identifier); } break; case Package_Manager::OPERATION_MIGRATE: try { if ($package = Package_Catalog::getPackageByIdentifier($identifier)) { if ($installed = Package_Catalog::getInstalledPackage($package['packageName'])) { Package_Message::log('debug', 'Trying to rollback migrate via repair on package ' . $installed['identifier']); Package_Operation_Message::ignoreLogLevels('success'); if (self::dispatch(Package_Manager::OPERATION_REPAIR, $installed['identifier'])) { Package_Operation_Message::set('Rollback of package ' . $installed['displayName'] . ' version ' . $installed['version'] . ' completed', 'info', $identifier); } Package_Operation_Message::acceptAllLogLevels(); } } } catch (Exception $e) { Package_Operation_Message::set('Error during rollback: ' . $e->getMessage(), 'alert', $identifier); } break; case Package_Manager::OPERATION_UNINSTALL: case Package_Manager::OPERATION_REPAIR: case Package_Manager::OPERATION_VERIFY: default: Package_Message::log('debug', 'No rollback action for ' . $operation . ' on package ' . $identifier); break; } }
public function finalize($identifier) { $package =& Package_Catalog::getPackageByIdentifier($identifier); unset($package['datastore_id']); Package_Catalog_Datastore::export($package); }
public function repair($identifier) { $package = Package_Catalog::getPackageByIdentifier($identifier); if (!empty($package['models'])) { $loadedModels = Doctrine::loadModels($package['directory'] . '/models', Doctrine::MODEL_LOADING_CONSERVATIVE); } if (empty($loadedModels)) { return; } 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 { kohana::log('debug', 'Setting ' . $modelName . ' to version 0 and walking migrations forward to ensure table schema'); $migration = new Bluebox_Migration($migrationDirectory, NULL, strtolower($modelName)); $migration->setCurrentVersion(0); $migration->migrate(); } catch (Exception $e) { kohana::log('alert', 'Alerts during migration, this can USUALLY be ignored: ' . $e->getMessage()); foreach ($migration->getErrors() as $error) { kohana::log('alert', $error->getMessage()); } } } } }
public function finalize($identifier) { $metadata =& Package_Catalog::getPackageByIdentifier($identifier); Package_Catalog_Datastore::remove($metadata); }