Example #1
0
 public static function beginTransaction()
 {
     if (is_null(self::$instance)) {
         self::$instance = new Package_Transaction();
     }
     self::$instance->transaction = array();
     return self::$instance;
 }
Example #2
0
 public function repair_all()
 {
     $this->template->content = new View('generic/blank');
     $catalog = Package_Manager::getDisplayList();
     if (empty($catalog['Installed'])) {
         return;
     }
     try {
         $transaction = Package_Transaction::beginTransaction();
         foreach ($catalog['Installed'] as $package) {
             $transaction->repair($package['identifier']);
         }
         $transaction->commit();
         message::set('Repair all operation completed', 'success');
     } catch (Exception $e) {
         message::set($e->getMessage());
     }
     url::redirect(Router::$controller);
 }
Example #3
0
 public static function validateIntegration($identifier)
 {
     $package = Package_Catalog::getPackageByIdentifier($identifier);
     $failures = array();
     foreach ($package['required'] as $requirement => $conditions) {
         switch ($requirement) {
             case 'not':
                 foreach ($conditions as $name => $condition) {
                     if (!($dependency = Package_Catalog::getInstalledPackage($name))) {
                         try {
                             // Hmmm, this is offly optimistic....
                             $dependency = Package_Transaction::checkTransaction($name);
                         } catch (Exception $e) {
                             continue;
                         }
                     }
                     if (self::compareVersion($dependency['version'], $condition)) {
                         Package_Message::log('debug', 'dependency restriction, ' . $package['packageName'] . ' can not be installed with ' . $name . ' version ' . $condition);
                         Package_Message::set($package['displayName'] . ' version ' . $package['version'] . ' can not be installed with ' . $dependency['displayName'] . ' version ' . $dependency['version'], 'error', $identifier);
                         Package_Message::set($dependency['displayName'] . ' conflicts with ' . $package['displayName'], 'alert', $dependency['identifier']);
                         $failures['not'][$name] = $condition;
                     }
                 }
                 break;
             case 'or':
                 $failed = array();
                 foreach ($conditions as $name => $condition) {
                     if (!($dependency = Package_Catalog::getInstalledPackage($name))) {
                         try {
                             // Hmmm, this is offly optimistic....
                             $dependency = Package_Transaction::checkTransaction($name);
                         } catch (Exception $e) {
                             continue;
                         }
                     }
                     if (self::compareVersion($dependency['version'], $condition)) {
                         continue 2;
                     }
                     Package_Message::set($dependency['displayName'] . ' is part of a series of packages, one of which must be installed for ' . $package['displayName'], 'info', $dependency['identifier']);
                     $failed[$name] = $condition;
                 }
                 Package_Message::log('debug', 'dependency restriction ' . $package['packageName'] . ' requires one to be installed -> ' . implode(', ', $failed));
                 Package_Message::set($package['displayName'] . ' version ' . $package['version'] . ' requires one of the following to be install: ' . implode(', ', $failed), 'error', $identifier);
                 $failures['or'] += $failed;
                 break;
             default:
                 if (!($dependency = Package_Catalog::getInstalledPackage($requirement))) {
                     try {
                         // Hmmm, this is offly optimistic....
                         $dependency = Package_Transaction::checkTransaction($requirement);
                     } catch (Exception $e) {
                         Package_Message::log('debug', 'dependency restriction ' . $package['packageName'] . ' requires ' . $requirement . ' version ' . $conditions . ' but it is not installed');
                         Package_Message::set($package['displayName'] . ' version ' . $package['version'] . ' requires ' . ucfirst($requirement) . ' but it is not avaliable', 'error', $identifier);
                         $failures['missing'][$requirement] = $conditions;
                         continue;
                     }
                 }
                 if (!self::compareVersion($dependency['version'], $conditions)) {
                     Package_Message::log('debug', 'dependency restriction ' . $package['packageName'] . ' requires ' . $requirement . ' version ' . $conditions);
                     Package_Message::set($package['displayName'] . ' version ' . $package['version'] . ' requires ' . $dependency['displayName'] . ' version ' . $conditions . ' but it is not avaliable', 'error', $identifier);
                     $failures['incompatible'][$requirement] = $conditions;
                 }
         }
     }
     if (!empty($failures)) {
         $dependencyException = new Package_Dependency_Exception('Package did not pass dependency validation');
         $dependencyException->loadFailures($failures);
         throw $dependencyException;
     }
 }
Example #4
0
 private function _freshInstall()
 {
     $defaultModules = Kohana::config('config.modules');
     Kohana::config_set('core.modules', $defaultModules);
     // Get the doctrine overlord
     $manager = Doctrine_Manager::getInstance();
     $conn = $manager->getCurrentConnection();
     try {
         // See if we can connect to the DB
         $conn->connect();
     } catch (Doctrine_Connection_Exception $e) {
         // We could connect earlier, hmmm....
         try {
             Doctrine::createDatabases();
         } catch (Exception $e) {
             // We cant resolve this issue without the user
             message::set('Unable to establish a connection to ' . $this->session->get('installer.dbName') . '! <div class="error_details">' . $e->getMessage() . '</div>');
             return FALSE;
         }
     }
     // See if the DB has any tables in it
     $tables = $conn->import->listTables();
     if (!empty($tables)) {
         // Yup, there are tables in our soon to be fresh install db, remove them
         try {
             $dsn = $conn->getOption('dsn');
             $dsn = $manager->parsePdoDsn($dsn);
             $tmpConn = $conn->getTmpConnection($dsn);
             $conn->close();
             $tmpConn->export->dropDatabase($dsn['dbname']);
             $tmpConn->export->createDatabase($dsn['dbname']);
             $manager->closeConnection($tmpConn);
             $conn->connect();
         } catch (Exception $e) {
             // We cant resolve this issue without the user
             message::set('Unable to recreate database ' . $this->session->get('installer.dbName') . '! <div class="error_details">' . $e->getMessage() . '</div>');
             return FALSE;
         }
     }
     $driver = $this->session->get('installer.tel_driver', 'none');
     kohana::log('debug', 'Installer running for driver ' . $driver);
     $packages = $this->session->get('installer.default_packages', array());
     $packages = arr::merge($this->minimumPackages, $packages, array($driver));
     try {
         $transaction = Package_Transaction::beginTransaction();
         foreach ($packages as $package) {
             try {
                 $identifier = Package_Catalog::getFirstAvaliablePackage($package);
                 $transaction->install($identifier);
             } catch (Exception $e) {
                 kohana::log('error', 'Error during initial install package selection: ' . $e->getMessage());
             }
         }
         $transaction->commit();
         Session::instance()->set('Bluebox_installer.created', Bluebox_Tenant::$created);
         return TRUE;
     } catch (Exception $e) {
         message::set('Installer Error!' . '<div class="error_details">' . $e->getMessage() . '</div>');
         return FALSE;
     }
 }