/**
  * Upgrades the modules
  * @param string $old_vers
  * @param string $new_vers
  * @returns boolean
  */
 public function upgrade($old_vers, $new_vers)
 {
     I2CE::raiseError("upgrade {$old_vers} -- {$new_vers}");
     if (I2CE_Validate::checkVersion($old_vers, '<', '4.1.5.1')) {
         if (!$this->updateConfigAltToLong()) {
             return false;
         }
     }
     if (I2CE_Validate::checkVersion($old_vers, '<', '3.0.1')) {
         if (!$this->updateConfigStatus()) {
             return false;
         }
     }
     if (I2CE_Validate::checkVersion($old_vers, '<', '3.1')) {
         if (!$this->dropOldCaches()) {
             return false;
         }
         if (!$this->updateToInnoDB()) {
             return false;
         }
     }
     if (I2CE_Validate::checkVersion($old_vers, '<', '3.2')) {
         if (!$this->updateConfigProcessed()) {
             return false;
         }
     }
     if (I2CE_Validate::checkVersion($old_vers, '>=', '3.2') && I2CE_Validate::checkVersion($old_vers, '<', '3.2.5')) {
         I2CE::raiseError("Clearing magic data cache for upgrade of I2CE");
         if (!I2CE::getConfig()->clearCache()) {
             return false;
         }
     }
     if (I2CE_Validate::checkVersion($old_vers, '<', '4.0.2')) {
         if (!$this->addConfigPathIndex()) {
             return false;
         }
     }
     if (I2CE_Validate::checkVersion($old_vers, '<', '4.0.3.6')) {
         if (!$this->createAltConfig(true)) {
             return false;
         }
     }
     $config_protocol = strtolower(I2CE::getRuntimeVariable('I2CE_CONFIG_PROTOCOL', 'config_alt'));
     if ($config_protocol == 'mongodb' && I2CE_Validate::checkVersion($old_vers, '<', '4.1.4.0')) {
         if (!$this->createMongoDBConfig(true)) {
             return false;
         }
     }
     return true;
 }
 /**
  * The business method if this page is called from the commmand line
  * @param array $request_remainder the remainder of the request after the page specfication.  
  * @param array $args the array of unix style command line arguments 
  */
 protected function actionCommandLine($args, $request_remainder)
 {
     $config = I2CE::getConfig();
     if (!$config->is_parent("/modules/forms/forms")) {
         I2CE::raiseError("No Forms", E_USER_ERROR);
     }
     $config = I2CE::getConfig();
     $module = $config->config->site->module;
     if (!$module) {
         I2CE::raiseError("No site module");
     }
     $formConfig = $config->modules->forms->forms;
     $this->locale = I2CE::getRuntimeVariable('locale', false);
     if (!$this->locale) {
         $this->locale = I2CE_Locales::DEFAULT_LOCALE;
     }
     $this->locale = I2CE_Locales::ensureSelectableLocale($this->locale);
     I2CE_Locales::setPreferredLocale($this->locale);
     $forms = I2CE::getRuntimeVariable('forms', false);
     if ($forms) {
         $forms = explode(',', $forms);
     } else {
         $forms = $formConfig->getKeys('/modules/forms/forms');
         $cli = new I2CE_CLI();
         $forms = $cli->chooseMenuValues("Select Forms:", $forms);
     }
     if ($skipforms = I2CE::getRuntimeVariable('skipforms', false)) {
         $skipforms = explode('#', $skipforms);
         $t_forms = array();
         foreach ($forms as $form) {
             foreach ($skipforms as $skipform) {
                 if (preg_match('/' . $skipform . '/', $form)) {
                     continue 2;
                 }
             }
             $t_forms[] = $form;
         }
         $forms = $t_forms;
     }
     sort($forms, SORT_STRING);
     switch ($this->page) {
         case 'wiki':
             $this->wiki($forms);
             break;
         case 'dot':
             $this->dot($forms);
             break;
         case 'text':
         default:
             $this->text($forms);
             break;
     }
 }
Example #3
0
 protected static function _updateSite($site_module_file, $verbose_errors = true)
 {
     $config = I2CE::getConfig();
     $status = I2CE::allSystemsAreGoGo($site_module_file, true);
     I2CE::raiseError("Updating site for {$site_module_file}: {$status}");
     if (substr($status, 0, 11) == 'in_progress') {
         if (array_key_exists('HTTP_HOST', $_SERVER)) {
             if (array_key_exists('restart', $_GET)) {
                 $status = 'restart_' . substr($status, 12);
             }
         } else {
             if (I2CE::getRuntimeVariable('force-restart')) {
                 $status = 'restart_' . substr($status, 12);
             }
         }
     }
     switch ($status) {
         case 'done':
             return true;
         case 'no_site':
             I2CE::raiseError("Cannot determine the site");
             return false;
         case 'restart_install':
         case 'needs_install':
             $config->__set("/config/site/installation", 'in_progress_install');
             if (!self::install($site_module_file, substr($status, 0, 7) == 'restart', $verbose_errors)) {
                 I2CE::raiseError("Unseting at " . $config->getPath());
                 if (isset($config->config) && isset($config->config->site) && isset($config->config->site->installation)) {
                     unset($config->config->site->installation);
                 }
                 I2CE::raiseError("Installation of the site failed", E_USER_ERROR);
                 return false;
             }
             return !I2CE::hasWarnings();
         case 'restart_reinstall':
         case 'needs_reinstall':
             $config->__set("/config/site/installation", 'in_progress_reinstall');
             if (!self::reinstall($site_module_file, substr($status, 0, 7) == 'restart', $verbose_errors)) {
                 I2CE::raiseError("Reintiaizliation of site to new file {$site_module_file} failed", E_USER_ERROR);
                 return false;
             }
             return !I2CE::hasWarnings();
         case 'restart_reenable':
         case 'needs_reenable':
             $config->__set("/config/site/installation", 'in_progress_reenable');
             I2CE::setupFileSearch(array("CLASSES" => "./", 'MODULES' => array(dirname($site_module_file), dirname(dirname(__FILE__)))), true);
             if ($config->setIfIsSet($site_module, '/config/site/module')) {
                 I2CE::raiseError("Somehow the site module {$site_module} was disabled.  Attempting to enable");
                 $mod_factory = I2CE_ModuleFactory::instance();
                 $mod_factory->resetStoredLoadedPaths();
                 //$mod_factory->loadPaths(null,'CLASSES'); //make sure all of our classes are loaded.
                 //somehow the site module got disabled.  this could happen, for example, if the paths got screwed up.  lets try and correct things
                 if (!self::_updateModules($site_module)) {
                     I2CE::raiseError("Renabling failed for {$site_module} ", E_USER_ERROR);
                     return false;
                 }
                 return !I2CE::hasWarnings();
             }
             I2CE::raiseError("Lost the site module");
             return false;
         case 'restart_upgrade':
         case 'needs_upgrade':
             $config->__set("/config/site/installation", 'in_progress_upgrade');
             $mod_factory = I2CE_ModuleFactory::instance();
             $mod_factory->resetStoredLoadedPaths();
             //$mod_factory->loadPaths(null,'CLASSES'); //make sure all of our classes are loaded.
             I2CE::setupFileSearch(array("CLASSES" => "./", 'MODULES' => array(dirname($site_module_file), dirname(dirname(__FILE__)))), true);
             if (!self::updateOutOfDateConfigFiles()) {
                 I2CE::raiseError("Error in checking configuration files", E_USER_ERROR);
                 return false;
             }
             $config->__set("/I2CE/update/times/last", time());
             return !I2CE::hasWarnings();
             //Ireturn true;
         //Ireturn true;
         case 'in_progress_reenable':
         case 'in_progress_upgrade':
         case 'in_progress_install':
         case 'in_progress_reinstall':
             if (array_key_exists('HTTP_HOST', $_SERVER)) {
                 I2CE::raiseError("System update is already in progress");
                 $url = $_SERVER['REQUEST_URI'];
                 if (!array_key_exists('restart', $_GET)) {
                     if (strlen($_SERVER['QUERY_STRING']) > 0) {
                         $url .= '&restart';
                     } else {
                         $url .= '?restart';
                     }
                 }
                 echo "<br/>Site update in progress.  <a href='{$url}'>Restart</a>?";
                 $msg = "Site update in progress. Restart?";
                 echo "<script type='text/javascript'>if (confirm('{$msg}')) {setTimeout(function() {window.location= '{$url}';},500)}</script>";
                 //reload the requested page after 5 seconds
                 flush();
             } else {
                 I2CE::raiseError("System update is already in progress.  To force the restart add  --force-restart=1");
             }
             return false;
         default:
             I2CE::raiseError("Unrecognized site status: {$status}");
             return false;
     }
 }
 /**
  * @param mixed $obj Calling object
  * @param string $page the name of the page to launch
  * @param mixed $cl_args.  String or array of string, the command line arguments.  Defualts to empty arra.
  */
 public static function launchBackgroundPage($obj, $page, $cl_args = array())
 {
     $script = $_SERVER['SCRIPT_FILENAME'];
     if ($protocol = I2CE::getRuntimeVariable('I2CE_DB_PROTOCOL', '')) {
         $cl_args[] = '--I2CE_DB_PROTOCOL=' . $protocol;
     }
     $cl_args[] = "--page={$page}";
     $cl_args[] = "--nocheck=1";
     //dont' check that all things are a gogo.. this update won't run
     self::launchBackgroundPHPScript($obj, $script, $cl_args);
 }