/** * Preps the application for running, then runs it. If this function is called more than once, an E_USER_ERROR is triggered. * * @param string $root_dir The path to the root of the installation. * @return void */ function StartCurator() { static $did_start = false; // set up the exit status. $exit_status = 0; // make sure this is only run once. if ($did_start === false) { $autoload = Autoload::singleton(); // configure the autoloader. try { $autoload->setBaseDir(CURATOR_APP_DIR); $autoload->register(); } catch (\Exception $e) { Console::stderr('** Could not register the autoloader:'); Console::stderr(' ' . $e->getMessage()); die; } // once the autoloader is in place, we are started up. $did_start = true; try { $app = new Application(); $exit_status = $app->run(); } catch (\Exception $e) { Console::stderr('** Could not run the application:'); Console::stderr(' ' . $e->getMessage()); die; } } else { // if we are called again, bail. trigger_error('StartCurator called after already being called.', E_USER_ERROR); } // send the status back. return $exit_status; }
/** * Runs the application, returning the status to exit with. * * @return integer The exit status. * @access public */ public function run() { $exit_status = 0; // Curator doesn't do anything without at least one argument, besides the curator command itself. if ($this->argc === 0) { Console::stdout('Use \'' . $this->cmd . ' --help\' for usage information.'); } else { try { $parser = $this->buildCommandLineParser(); $result = $parser->parse(); // determine where our relevant directories are. if (!empty($result->options['proj_path'])) { $project_dir = realpath($result->options['proj_path']); } if (empty($project_dir)) { $project_dir = $_SERVER['PWD']; } $this->createDirectoryAtPath($project_dir); try { $project = new Project($project_dir); switch ($result->command_name) { case 'new': $project->install(); break; case 'clean': $project->clean(); break; case 'build': $project->build(); break; } } catch (\Exception $e) { Console::stderr('** Command \'' . $result->command_name . '\' has failed:'); Console::stderr(' ' . $e->getMessage()); } } catch (\Exception $e) { $parser->displayError($e->getMessage()); $exit_status = $e->getCode(); } } return $exit_status; }