Esempio n. 1
0
File: fax.php Progetto: swk/bluebox
 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;
 }
Esempio n. 2
0
 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);
         }
     }
 }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
 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;
 }
Esempio n. 5
0
 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;
 }
Esempio n. 6
0
 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;
     }
 }
Esempio n. 7
0
 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();
 }
Esempio n. 8
0
 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;
     }
 }
Esempio n. 9
0
 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();
 }
Esempio n. 10
0
 /**
  * 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);
             }
         }
     }
 }