示例#1
0
文件: asterisk.php 项目: swk/bluebox
 public function save()
 {
     // This array maps the telephony returns to the telephony file
     $telephonyOptions = array('cfg_root' => rtrim($this->session->get('installer.ast_root'), '/'), 'AmiHost' => $this->session->get('installer.ami_host'), 'AmiPort' => $this->session->get('installer.ami_port'), 'AmiUser' => $this->session->get('installer.ami_user'), 'AmiPass' => $this->session->get('installer.ami_pass'));
     if (!is_dir($telephonyOptions['cfg_root'])) {
         message::set('Unable to access directory <pre>' . $telephonyOptions['cfg_root'] . '</pre>');
         return false;
     }
     // Write $telephonyOptions to asterisk.php
     if (!Installer_Controller::updateConfig($telephonyOptions, 'asterisk')) {
         return false;
     }
     // Set the driver name in telephony.php
     if (!Installer_Controller::updateConfig(array('driver' => 'Asterisk'), 'telephony')) {
         return false;
     }
     // Reload the new asterisk options
     Kohana::config_clear('asterisk');
     Kohana::config_load('asterisk');
     $this->session->set('installer.default_packages', kohana::config('asterisk.default_packages'));
     return true;
 }
示例#2
0
 public function save()
 {
     if (!class_exists('DOMDocument')) {
         message::set('This driver requires ' . html::anchor('http://us3.php.net/manual/en/class.domdocument.php', 'DOMDocument', array('target' => '_new')) . ' to be installed and active');
         return false;
     }
     // This array maps the telephony returns to the telephony file
     $telephonyOptions = array('cfg_root' => rtrim($this->session->get('installer.cfg_root'), '/'), 'audio_root' => rtrim($this->session->get('installer.audio_root'), '/'), 'ESLHost' => $this->session->get('installer.esl_host'), 'ESLPort' => $this->session->get('installer.esl_port'), 'ESLAuth' => $this->session->get('installer.esl_auth'));
     if (!is_dir($telephonyOptions['cfg_root'])) {
         message::set('Unable to access directory <pre>' . $telephonyOptions['cfg_root'] . '</pre>');
         return false;
     }
     if (!is_dir($telephonyOptions['audio_root'])) {
         message::set('Unable to access directory <pre>' . $telephonyOptions['audio_root'] . '</pre>');
         return false;
     }
     // Write $telephonyOptions to freeswitch.php
     if (!Installer_Controller::updateConfig($telephonyOptions, 'freeswitch')) {
         return false;
     }
     // Set the driver name in telephony.php
     if (!Installer_Controller::updateConfig(array('driver' => 'FreeSwitch'), 'telephony')) {
         return false;
     }
     // Reload the new telephony options so we can use the filemap
     Kohana::config_clear('freeswitch');
     Kohana::config_load('freeswitch');
     $filemaps = Kohana::config('freeswitch.filemap');
     $notWritable = array();
     foreach ($filemaps as $filemap) {
         if (!filesystem::is_writable($filemap['filename'])) {
             $notWritable[] = $filemap['filename'];
         }
     }
     if (!empty($notWritable)) {
         $notWritable = array_unique($notWritable);
         if (empty($this->template->error)) {
             message::set('Ensure the web server has write permission on these files, and SELINUX allows this action.' . '<div class="write_help">Unable to write to the following file(s):</div>' . '<div>' . arr::arrayToUL($notWritable, array(), array('class' => 'error_details', 'style' => 'text-align:left;')) . '</div>');
         }
         return false;
     }
     // Make sure that if the user changed the directory and any conflicts were found that the user
     // knows these will be deleted
     $existingProfiles = glob(rtrim($telephonyOptions['cfg_root'], '/') . '/sip_profiles/*.xml', GLOB_MARK);
     $oldXmlFiles = array();
     foreach ($filemaps as $filemap) {
         if (file_exists($filemap['filename'])) {
             $oldXmlFiles[] = $filemap['filename'];
         }
     }
     $conflictXmlFiles = $this->session->get('installer.conflictXmlFiles');
     foreach (array_unique(array_merge($existingProfiles, $oldXmlFiles)) as $existingFile) {
         if (!in_array($existingFile, $conflictXmlFiles)) {
             message::set('Conflicting configuration files will be permanently erased if you continue!');
             message::set('Click continue again to proceed...', 'alert');
             // This session var lets the user continue the second time around (after the warning)
             $this->session->set('installer.confirm_delete', true);
             return false;
         }
     }
     // If there are conflictXmlFile in the session then the user has seen this list
     // so they SHOULD be aware we are about to delete them... should
     $conflictXmlFiles = $this->session->get('installer.conflictXmlFiles');
     if (!empty($conflictXmlFiles) && is_array($conflictXmlFiles)) {
         $confirmDelete = $this->session->get('installer.confirm_delete', false);
         if (empty($confirmDelete)) {
             message::set('Conflicting configuration files will be permanently erased if you continue!');
             message::set('Click continue again to proceed...', 'alert');
             // This session var lets the user continue the second time around (after the warning)
             $this->session->set('installer.confirm_delete', true);
             return false;
         }
         foreach ($conflictXmlFiles as $conflictXmlFile) {
             if (!filesystem::delete($conflictXmlFile)) {
                 Kohana::log('error', 'Unable to unlink ' . $conflictXmlFile);
                 $unlinkErrors[] = $conflictXmlFile;
             }
         }
     }
     // If there are files that could not be deleted, inform the user
     if (!empty($unlinkErrors)) {
         message::set('Manually remove these files or change the file permissions.' . '<div class="write_help">Unable to delete incompatible file(s):</div>' . '<div>' . arr::arrayToUL($unlinkErrors, array(), array('class' => 'error_details', 'style' => 'text-align:left;')) . '</div>');
         return false;
     }
     $this->session->set('installer.default_packages', kohana::config('freeswitch.default_packages'));
     return true;
 }
 public function run()
 {
     ini_set("max_execution_time", "0");
     ini_set("max_input_time", "0");
     set_time_limit(0);
     pcntl_signal(SIGCHLD, array($this, 'sig_handler'));
     pcntl_signal(SIGTERM, array($this, 'sig_handler'));
     pcntl_signal(SIGHUP, array($this, 'sig_handler'));
     declare (ticks=1);
     $pid = pcntl_fork();
     // fork
     if ($pid == -1) {
         Kohana::log('error', 'Could not fork.');
         exit;
     } else {
         if ($pid) {
             Kohana::log('debug', 'Forked Once');
             exit;
         } else {
             // Write the log to ensure no memory issues
             Kohana::log_save();
             $pid = pcntl_fork();
             if ($pid == -1) {
                 Kohana::log('error', 'Could not fork.');
                 exit;
             } elseif ($pid) {
                 // We don't do anything
                 Kohana::log('error', 'Parent.');
             } else {
                 Kohana::log('debug', 'Starting the scanning');
                 $task_model = new Task_Model();
                 while (!$this->sigterm) {
                     // Only scan based on our config item
                     usleep(Kohana::config('queue.scan_delay'));
                     $this->connect();
                     if ($this->sighup) {
                         // We need to reload the config
                         Kohana::config_clear('queue');
                         Kohana::config_clear('database');
                         Kohana::config_clear('log');
                         Kohana::config_clear('routes');
                         Kohana::config_clear('core');
                         $this->sighup = FALSE;
                     }
                     $sql = 'SELECT * FROM `' . Kohana::config('queue.table_name') . '` ORDER BY `priority` DESC LIMIT 1';
                     $result = mysql_query($sql, $this->connection);
                     $num_rows = is_resource($result) ? mysql_num_rows($result) : 0;
                     // Scan the queue
                     if (count($this->pids) < Kohana::config('queue.parallel_operations') and $num_rows > 0) {
                         // Write the log to ensure no memory issues
                         Kohana::log_save();
                         $pid = pcntl_fork();
                         if ($pid == -1) {
                             Kohana::log('error', 'Could not spawn child task process.');
                             exit;
                         } elseif ($pid) {
                             // Add the child's PID to the running list
                             $this->pids[$pid] = time();
                         } else {
                             $queue = new Task_Model();
                             $queue->scan()->execute();
                             exit;
                         }
                         mysql_free_result($result);
                     } else {
                         // var_dump( $this->pids );
                         // var_dump( Kohana::config('queue.parallel_operations') );
                         // var_dump( $num_rows );
                         // var_dump( $result );
                         // var_dump( $sql );
                         // var_dump( $this->connection );
                         // var_dump( "mysql_connect(".Kohana::config('database.default.connection.host').", ".Kohana::config('database.default.connection.user').", ".Kohana::config('database.default.connection.pass').", TRUE);" );
                         // exit;
                     }
                     mysql_close($this->connection);
                 }
                 // Run cleanup stuffs
                 $this->cleanup();
             }
         }
     }
 }
示例#4
0
 /**
  * Frees the current instance of the identity provider so the next call to instance will reload
  *
  * @param   string  configuration
  * @return  Identity_Core
  */
 static function reset()
 {
     self::$instance = null;
     Kohana::config_clear("identity");
 }