public function getDispositionForm() { $faxprof = Input::instance()->post('faxprofile'); $faxdisp = Doctrine::getTable('FaxDisposition')->find($faxprof['fxp_fxd_id']); if ($faxdisp) { $packageobj = Doctrine::getTable('package')->find($faxdisp['fxd_package_id']); if ($packageobj) { try { if (!($package = Package_Catalog::getInstalledPackage($packageobj->name))) { echo 'Package not ' . $packageobj->name . ' found.'; exit; } $formfile = $package['directory'] . '/views/' . $packageobj->name . '/' . $faxdisp['fxd_name'] . '.php'; kohana::Log('debug', 'Looking for view ' . $formfile); if (file_exists($formfile)) { $featureFormView = new View($packageobj->name . '/' . $faxdisp['fxd_name']); kohana::Log('debug', 'View file found.'); if (isset($faxprof['fxp_id']) && !empty($faxprof['fxp_id']) && $faxprof['fxp_id'] != '') { $faxprofobj = Doctrine::getTable('FaxProfile')->find($faxprof['fxp_id']); } else { $faxprofobj = new FaxProfile(); } $featureFormView->set_global('faxprofile', $faxprofobj); echo $featureFormView->render(TRUE); } else { kohana::Log('debug', 'View file not found.'); } } catch (Package_Catalog_Exception $e) { echo 'Package not ' . $packageobj->name . ' found.'; } } } exit; }
public static function dialplan($number) { if (get_called_class() != 'FreeSwitch_Feature_Driver') { throw new featureException('Subclass of Freeswitch Feature Driver called but the Dialplan function was not overwritten', -99); } $destination = $number['Destination']; $registry = (array) $destination['registry']; if ($destination['ftr_package_id'] != 0) { $packageobj = Doctrine::getTable('package')->find($destination['ftr_package_id']); if ($packageobj) { try { if (!($package = Package_Catalog::getInstalledPackage($packageobj->name))) { throw new featureException('Package ' . $packageobj->name . ' not found.', -10); } $driverclass = 'FreeSwitch_ftr' . $destination['ftr_name'] . '_Driver'; try { $driver = new $driverclass(); } catch (Exception $e) { throw new featureException('Unable to find feature class ' . $driverlass); } $driver->dialplan($number); } catch (Package_Catalog_Exception $e) { throw new featureException('Package ' . $packageobj->name . ' not found.', -10); } } else { throw new featureException('Package ' . $destination['ftr_package_id'] . 'Found...', -10); } } }
public function validate($identifier) { self::locatePackageSource($identifier); $package = Package_Catalog::getPackageByIdentifier($identifier); $from = Package_Catalog::getInstalledPackage($package['packageName']); if (empty($from)) { throw new Package_Operation_Exception('Migrate could not determine the package that is being updated', $identifier); } $from = $from['identifier']; Package_Message::log('debug', 'Package management executing Package_Operation_Verify::exec(' . $identifier . ')'); Package_Operation_Verify::exec($identifier); }
function setupCreateEdit() { $catalog = Package_Catalog::getPackageList(); $packagelist = array(); foreach ($catalog as $packagename => $info) { try { if ($package = Package_Catalog::getInstalledPackage($packagename)) { $packagelist[$package['datastore_id']] = $package['displayName']; } } catch (Package_Catalog_Exception $e) { } } asort($packagelist); $packagelist = array(0 => 'Select a Package...') + $packagelist; Event::$data->template->content->packagelist = $packagelist; Event::$data->template->content->usertypelist = array(0 => 'Guest', 40 => 'Restricted', 50 => 'Normal', 60 => 'Power', 70 => 'Restricted Admin', 80 => 'Account Admin', 101 => 'System Admin'); return true; }
public function getFeatureNumberOptionsForm() { $number = Input::instance()->post('number'); if (isset($number['foreign_id'])) { $featureobj = Doctrine::getTable('Feature')->find($number['foreign_id']); if (!$featureobj) { throw new featureException('Feature ' . $featureid . ' not found.'); } $packageobj = Doctrine::getTable('package')->find($featureobj->ftr_package_id); if (!$packageobj) { throw new featureException('Package ' . $featureobj->ftr_package_id . ' not found.'); } if (!($package = Package_Catalog::getInstalledPackage($packageobj->name))) { throw new featureException('Package ' . $packageob->name . ' not found.'); } $viewfile = $package['directory'] . 'views/' . $packageobj->name . '/' . $featureobj->ftr_name . 'Options.php'; if (file_exists($viewfile)) { $featureoptview = new view($pacjageobj->name . '/' . $featureobj->ftr_name . 'Options'); $featureoptview->set_global('number', $number); echo $featureoptview->render(TRUE); } } exit; }
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 static function unregister($name, $package, $mode = 'SAFE') { $dispobj = Doctrine::getTable('FaxDispositon')->findOneByname($name); if (!$dispobj) { throw new faxException('Unregistration was attempted on fax disposition "' . $name . '" that is not registered', 0); } $packageobj = null; try { $packageobj = Package_Catalog::getInstalledPackage($package); } catch (Package_Catalog_Exception $e) { } if (!$packageobj && $mode !== 'FORCE') { throw new faxException('The package "' . $package . '" tried to unregister fax disposition "' . $name . '" but the package cannot be found', -1); } $package = $packageobj['datastore_id']; if ($package !== $dispobj->fxd_package_id && $mode !== 'FORCE') { if ($packageobj) { $packagename = $packageobj->name; } else { $packagename = 'NOT FOUND'; } throw new faxException('The package "' . $packagename . '" tried to unregister "' . $dispobj->fxd_name . '" in SAFE mode but did not match the package on file', -2); } $dispobj->delete(); }
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; } }
public static function unregister($name, $package, $mode = 'SAFE') { $funcobj = Doctrine::getTable('callmanagerFunction')->findOneByname($name); if (!$funcobj) { $this->_throwError('Unregistration was attempted on function "' . $name . '" that is not registered', 0); } $packageobj = null; try { $packageobj = Package_Catalog::getInstalledPackage($package); } catch (Package_Catalog_Exception $e) { } if (!$packageobj && $mode !== 'FORCE') { $this->_throwError('The package "' . $package . '" tried to unregister function "' . $name . '" but the package cannot be found', -1); } $package = $packageobj['datastore_id']; if ($package !== $funcobj->fcmf_package_id && $mode !== 'FORCE') { if ($packageobj) { $packagename = $packageobj->name; } else { $packagename = 'NOT FOUND'; } $this->_throwError('The package "' . $packagename . '" tried to unregister "' . $funcobj->cmf_name . '" in SAFE mode but did not match the package on file', -2); } $funcobj->delete(); }
/** * Perform a migration of this module. * * Make sure you rollback any changes if your migration fails! * * By default, the migrate routine just runs the migrations in Doctrine for your models, based on the version of * this module and the version registered in the database. * If that's all you need for your migrations, you don't need to override this function. * All models in the directory of your module will be migrated. * * You do not need to override this class if you are not adding additional functionality to it. * * @return array | NULL Array of failures, or NULL if everything is OK */ public function migrate($identifier) { $package = Package_Catalog::getPackageByIdentifier($identifier); if (!empty($package['models'])) { $loadedModels = Doctrine::loadModels($package['directory'] . '/models', Doctrine::MODEL_LOADING_CONSERVATIVE); } if (empty($loadedModels)) { return; } $installed = Package_Catalog::getInstalledPackage($package['packageName']); if (Package_Dependency::compareVersion($package['version'], $installed['version'])) { kohana::log('debug', 'Attempting to upgrade package ' . $installed['packageName'] . ' version ' . $installed['version'] . ' to ' . $package['version']); 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 { $migration = new Bluebox_Migration($migrationDirectory, NULL, strtolower($modelName)); kohana::log('debug', 'Running migration on ' . $modelName . ' from model version ' . $migration->getCurrentVersion() . ' to ' . $migration->getLatestVersion()); $migration->migrate(); $msg = inflector::humanizeModelName($modelName); $msg .= ' database table upgraded to model version # ' . $migration->getCurrentVersion(); Package_Message::set($msg, 'info', $identifier); } catch (Exception $e) { kohana::log('alert', 'Alerts during migration, this can USUALLY be ignored: ' . $e->getMessage()); // TODO: This isnt a great idea, but migrations are so noisy with needless failures... PITA $migration->setCurrentVersion($migration->getLatestVersion()); foreach ($migration->getErrors() as $error) { if (strstr($error->getMessage(), 'Already at version')) { $msg = inflector::humanizeModelName($modelName); $msg .= ' database table ' . inflector::lcfirst($error->getMessage()); Package_Message::set($msg, 'info', $identifier); } else { Package_Message::set($error->getMessage(), 'alert', $identifier); } } } } else { $migration = new Bluebox_Migration(NULL, NULL, strtolower($modelName)); $migration->setCurrentVersion(0); } } } else { kohana::log('debug', 'Attempting to downgrade package ' . $installed['packageName'] . ' version ' . $installed['version'] . ' to ' . $package['version']); foreach ($loadedModels as $modelName) { if (get_parent_class($modelName) != 'Bluebox_Record' and get_parent_class($modelName) != 'Doctrine_Record') { continue; } $migrationDirectory = $installed['directory'] . '/migrations/' . $modelName; kohana::log('debug', 'Looking for migrations in `' . $migrationDirectory . '`'); if (is_dir($migrationDirectory)) { try { $modelVersion = 0; if (is_dir($package['directory'] . '/migrations/' . $modelName)) { $previousMigration = new Doctrine_Migration($package['directory'] . '/migrations/' . $modelName); $modelVersion = $previousMigration->getLatestVersion(); } kohana::log('debug', 'Determined that ' . $package['packageName'] . ' version ' . $package['version'] . ' works against ' . $modelName . ' version ' . $modelVersion); $migration = new Bluebox_Migration($migrationDirectory, NULL, strtolower($modelName)); kohana::log('debug', 'Running migration on ' . $modelName . ' from model version ' . $migration->getCurrentVersion() . ' to ' . $modelVersion); $migration->migrate($modelVersion); $msg = inflector::humanizeModelName($modelName); $msg .= ' database table downgraded to model version # ' . $migration->getCurrentVersion(); Package_Message::set($msg, 'info', $identifier); } catch (Exception $e) { kohana::log('alert', 'Alerts during migration, this can USUALLY be ignored: ' . $e->getMessage()); // TODO: This isnt a great idea, but migrations are so noisy with needless failures... PITA $migration->setCurrentVersion($migration->getLatestVersion()); foreach ($migration->getErrors() as $error) { if (strstr($error->getMessage(), 'Already at version')) { $msg = inflector::humanizeModelName($modelName); $msg .= ' database table ' . inflector::lcfirst($error->getMessage()); Package_Message::set($msg, 'info', $identifier); } else { Package_Message::set($error->getMessage(), 'alert', $identifier); } } } } else { $migration = new Bluebox_Migration(NULL, NULL, strtolower($modelName)); $migration->setCurrentVersion(0); } } } }