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