Exemplo n.º 1
0
 /**
  * This function is designed to handle any INTERNAL routines that need
  * to be executed after the package has completed everything it may possible do...
  */
 private function finalize()
 {
     Bluebox_Installer::disableTelephony();
     foreach (self::$packages as $name => $package) {
         switch ($package['action']) {
             case 'downgrade':
             case 'install':
             case 'upgrade':
                 // If this module had errors during install DONT ADD IT
                 if (!empty(self::$errors[$name])) {
                     break;
                 }
                 try {
                     // If this module is already installed
                     if (!empty($package['installedAs']['package_id'])) {
                         Kohana::log('debug', 'Updating ' . $package['packageName'] . ' in Module');
                         $dbPackage = Doctrine::getTable('Package')->find($package['installedAs']['package_id']);
                         // If we coulnt get the current row then we will make a new one
                         if (!$dbPackage) {
                             Kohana::log('alert', 'Failed to find ' . $package['packageName'] . ' in Package, adding new package');
                             $dbPackage = new Package();
                         }
                     } else {
                         Kohana::log('debug', 'Adding ' . $package['packageName'] . ' to Package');
                         // Get a new row for the module
                         $dbPackage = new Package();
                     }
                     $registryIgnoreKeys = array_flip(array('packageName', 'displayName', 'version', 'directory', 'instance', 'navStructures', 'installedAs', 'type'));
                     $dbPackage['name'] = $package['packageName'];
                     $dbPackage['display_name'] = $package['displayName'];
                     $dbPackage['version'] = $package['version'];
                     $dbPackage['type'] = $package['type'];
                     $dbPackage['status'] = 'installed';
                     $dbPackage['basedir'] = str_replace(DOCROOT, '', $package['directory']);
                     $dbPackage['navigation'] = $package['navStructures'];
                     $dbPackage['registry'] = array_diff_key($package, $registryIgnoreKeys);
                     $dbPackage->save();
                     $package['installedAs']['package_id'] = $dbPackage['package_id'];
                     self::_integrateNumberType($package['models'], $dbPackage, $name);
                     $dbPackage->free(TRUE);
                 } catch (Exception $e) {
                     self::_setError('Unable to integrate ' . $package['packageName'] . ' into Package! <br /><small>' . $e->getMessage() . '</small>', $name);
                     break;
                 }
                 break;
             case 'repair':
                 // If this module had errors during repair skip this
                 if (!empty(self::$errors[$name])) {
                     break;
                 }
                 try {
                     // If this module is already installed
                     if (!empty($package['installedAs']['package_id'])) {
                         Kohana::log('debug', 'Updating ' . $package['packageName'] . ' in Module');
                         $dbPackage = Doctrine::getTable('Package')->find($package['installedAs']['package_id']);
                         // If we coulnt get the current row then we will make a new one
                         if (!$dbPackage) {
                             Kohana::log('alert', 'Failed to find ' . $package['packageName'] . ' in Package, adding new package');
                             $dbPackage = new Package();
                         }
                     } else {
                         Kohana::log('debug', 'Adding ' . $package['packageName'] . ' to Package');
                         // Get a new row for the module
                         $dbPackage = new Package();
                     }
                     $registryIgnoreKeys = array_flip(array('packageName', 'displayName', 'version', 'directory', 'instance', 'navStructures', 'installedAs', 'type'));
                     $dbPackage['name'] = $package['packageName'];
                     $dbPackage['display_name'] = $package['displayName'];
                     $dbPackage['version'] = $package['version'];
                     $dbPackage['type'] = $package['type'];
                     $dbPackage['basedir'] = str_replace(DOCROOT, '', $package['directory']);
                     $dbPackage['navigation'] = $package['navStructures'];
                     $dbPackage['registry'] = array_diff_key($package, $registryIgnoreKeys);
                     $dbPackage->save();
                     $package['installedAs']['package_id'] = $dbPackage['package_id'];
                     self::_integrateNumberType($package['models'], $dbPackage, $name);
                     $dbPackage->free(TRUE);
                 } catch (Exception $e) {
                     self::_setError('Unable to integrate ' . $package['packageName'] . ' into Package! <br /><small>' . $e->getMessage() . '</small>', $name);
                     break;
                 }
                 break;
             case 'enable':
                 if (!empty(self::$errors[$name])) {
                     break;
                 }
                 Kohana::log('debug', 'Update Package to enable ' . $package['packageName']);
                 try {
                     $dbModule = Doctrine::getTable('Package')->find($package['installedAs']['package_id']);
                     if (!$dbModule) {
                         self::_setError('Unable to locate the DB entry for ' . $package['displayName'], $name);
                     } else {
                         $dbModule['status'] = 'installed';
                         $dbModule->save();
                         self::_integrateNumberType($package['models'], $dbModule, $name);
                         $dbModule->free(TRUE);
                     }
                 } catch (Exception $e) {
                     self::_setError('Error during update of ' . $package['displayName'] . ' : ' . $e->getMessage(), $name);
                 }
                 break;
             case 'disable':
                 if (!empty(self::$errors[$name])) {
                     break;
                 }
                 Kohana::log('debug', 'Update Package to disable ' . $package['packageName']);
                 try {
                     $dbModule = Doctrine::getTable('Package')->find($package['installedAs']['package_id']);
                     if (!$dbModule) {
                         self::_setError('Unable to locate the DB entry for ' . $package['displayName'], $name);
                     } else {
                         $dbModule['status'] = 'disabled';
                         $dbModule->save();
                         self::_removeNumberType($package['models'], $name);
                         $dbModule->free(TRUE);
                     }
                 } catch (Exception $e) {
                     self::_setError('Error during update of ' . $package['displayName'] . ' : ' . $e->getMessage(), $name);
                 }
                 break;
             case 'uninstall':
                 if (!empty(self::$errors[$name])) {
                     break;
                 }
                 Kohana::log('alert', 'Removing ' . $package['packageName'] . ' from Package');
                 try {
                     $dbModule = Doctrine::getTable('Package')->find($package['installedAs']['package_id']);
                     if (!$dbModule) {
                         self::_setError('Unable to locate the DB entry for ' . $package['displayName'], $name);
                     } else {
                         $dbModule->delete();
                         self::_removeNumberType($package['models'], $name);
                         $dbModule->free(TRUE);
                     }
                 } catch (Exception $e) {
                     self::_setError('Error during removal of ' . $package['displayName'] . ' : ' . $e->getMessage(), $name);
                 }
                 break;
         }
     }
 }