public function do_execute() { /* Prepare variables */ try { $project_id = $this->getProvidedArgument('projectid'); $project_row = TBGProjectsTable::getTable()->getById($project_id, false); TBGContext::setScope(new TBGScope($project_row[TBGProjectsTable::SCOPE])); $project = new TBGProject($project_id, $project_row); } catch (Exception $e) { throw $e; $this->cliEcho("The project with the ID " . $this->getProvidedArgument('projectid') . " does not exist\n", 'red', 'bold'); exit; } $author = $this->getProvidedArgument('author'); $new_rev = $this->getProvidedArgument('revno'); $commit_msg = $this->getProvidedArgument('log'); $changed = $this->getProvidedArgument('changed'); $old_rev = $this->getProvidedArgument('oldrev', null); $date = $this->getProvidedArgument('date', null); $branch = $this->getProvidedArgument('branch', null); if (TBGSettings::get('access_method_' . $project->getKey()) == TBGVCSIntegration::ACCESS_HTTP) { $this->cliEcho("This project uses the HTTP access method, and so access via the CLI has been disabled\n", 'red', 'bold'); exit; } if ($old_rev === null && !is_integer($new_rev)) { $this->cliEcho("Error: if only the new revision is specified, it must be a number so that old revision can be calculated from it (by substracting 1 from new revision number)."); } else { if ($old_rev === null) { $old_rev = $new_rev - 1; } } $output = TBGVCSIntegration::processCommit($project, $commit_msg, $old_rev, $new_rev, $date, $changed, $author, $branch); $this->cliEcho($output); }
public function runScope(TBGRequest $request) { $this->scope = new TBGScope($request->getParameter('id')); $modules = TBGModulesTable::getTable()->getModulesForScope($this->scope->getID()); $this->modules = $modules; $this->scope_save_error = TBGContext::getMessageAndClear('scope_save_error'); $this->scope_saved = TBGContext::getMessageAndClear('scope_saved'); if ($request->isMethod(TBGRequest::POST)) { try { if ($request->getParameter('scope_action') == 'delete') { if (!$this->scope->isDefault()) { $this->scope->delete(); TBGContext::setMessage('scope_deleted', true); $this->forward(make_url('configure_scopes')); } else { $this->scope_save_error = TBGContext::getI18n()->__('You cannot delete the default scope'); } } else { if (!$request->getParameter('name')) { throw new Exception(TBGContext::getI18n()->__('Please specify a scope name')); } $this->scope->setName($request->getParameter('name')); $this->scope->setDescription($request->getParameter('description')); $this->scope->setCustomWorkflowsEnabled((bool) $request->getParameter('custom_workflows_enabled')); $this->scope->setMaxWorkflowsLimit((int) $request->getParameter('workflow_limit')); $this->scope->setUploadsEnabled((bool) $request->getParameter('file_uploads_enabled')); $this->scope->setMaxUploadLimit((int) $request->getParameter('upload_limit')); $this->scope->setMaxProjects((int) $request->getParameter('project_limit')); $this->scope->setMaxUsers((int) $request->getParameter('user_limit')); $this->scope->setMaxTeams((int) $request->getParameter('team_limit')); $this->scope->save(); $enabled_modules = $request->getParameter('module_enabled'); $prev_scope = TBGContext::getScope(); foreach ($enabled_modules as $module => $enabled) { if (!TBGContext::getModule($module)->isCore() && !$enabled && array_key_exists($module, $modules)) { $module = TBGModulesTable::getTable()->getModuleForScope($module, $this->scope->getID()); $module->uninstall($this->scope->getID()); } elseif (!TBGContext::getModule($module)->isCore() && $enabled && !array_key_exists($module, $modules)) { TBGContext::setScope($this->scope); TBGModule::installModule($module); TBGContext::setScope($prev_scope); } } TBGContext::setMessage('scope_saved', true); $this->forward(make_url('configure_scope', array('id' => $this->scope->getID()))); } } catch (Exception $e) { TBGContext::setMessage('scope_save_error', $e->getMessage()); } } }
protected function _postSave($is_new) { TBGScopeHostnamesTable::getTable()->saveScopeHostnames($this->getHostnames(), $this->getID()); // Load fixtures for this scope if it's a new scope if ($is_new) { if ($this->getID() != 1) { $prev_scope = TBGContext::getScope(); TBGContext::setScope($this); } $this->loadFixtures(); if ($this->getID() != 1) { TBGModule::installModule('publish', $this); TBGContext::setScope($prev_scope); } } }
public function runUpgrade(TBGRequest $request) { $version_info = explode(',', file_get_contents(THEBUGGENIE_PATH . 'installed')); $this->current_version = $version_info[0]; $this->upgrade_available = $this->current_version != '3.1'; if ($this->upgrade_available) { $scope = new TBGScope(); $scope->setID(1); $scope->setEnabled(); TBGContext::setScope($scope); } $this->upgrade_complete = false; if ($this->upgrade_available && $request->isMethod(TBGRequest::POST)) { $this->upgrade_complete = false; switch ($this->current_version) { case '3.0': $this->_upgradeFrom3dot0(); break; } if ($this->upgrade_complete) { $existing_installed_content = file_get_contents(THEBUGGENIE_PATH . 'installed'); file_put_contents(THEBUGGENIE_PATH . 'installed', TBGSettings::getVersion(false, false) . ', upgraded ' . date('d.m.Y H:i') . "\n" . $existing_installed_content); unlink(THEBUGGENIE_PATH . 'upgrade'); $this->current_version = '3.1'; $this->upgrade_available = false; } } elseif ($this->current_version != '3.1') { $this->permissions_ok = false; if (is_writable(THEBUGGENIE_PATH . 'installed') && is_writable(THEBUGGENIE_PATH . 'upgrade')) { $this->permissions_ok = true; } } else { $this->forward(TBGContext::getRouting()->generate('home')); } }
public function do_execute() { if (file_exists(THEBUGGENIE_PATH . 'installed')) { $this->cliEcho("The Bug Genie seems to already be installed.\n", 'red', 'bold'); $this->cliEcho('Please remove the file '); $this->cliEcho(THEBUGGENIE_PATH . 'installed', 'white', 'bold'); $this->cliEcho(' and try again.'); $this->cliEcho("\n"); return; } $this->cliEcho("\nWelcome to the \"The Bug Genie\" installation wizard!\n", 'white', 'bold'); $this->cliEcho("This wizard will take you through the installation of The Bug Genie.\nRemember that you can also install The Bug Genie from your web-browser.\n"); $this->cliEcho("Simply point your web-browser to the The Bug Genie subdirectory on your web server,\nand the installation will start.\n\n"); $this->cliEcho("Press ENTER to continue with the installation: "); $this->pressEnterToContinue(); $this->cliEcho("\n"); $this->cliEcho("How to support future development\n", 'green', 'bold'); $this->cliEcho("Even though this software has been provided to you free of charge,\ndeveloping it would not have been possible without support from our users.\n"); $this->cliEcho("By making a donation, or buying a support contract you can help us continue development.\n\n"); $this->cliEcho("If this software is valuable to you - please consider supporting it.\n\n"); $this->cliEcho("More information about supporting The Bug Genie's development can be found here:\n"); $this->cliEcho("http://www.thebuggenie.com/giving_back.php\n\n", 'blue', 'underline'); $this->cliEcho("Press ENTER to continue: "); $this->pressEnterToContinue(); $this->cliEcho("\n"); try { $this->cliEcho("License information\n", 'green', 'bold'); $this->cliEcho("This software is Open Source Initiative approved Open Source Software.\nOpen Source Initiative Approved is a trademark of the Open Source Initiative.\n\n"); $this->cliEcho("True to the the Open Source Definition, The Bug Genie is released\nunder the MPL 1.1 only. You can read the full license here:\n"); $this->cliEcho("http://www.opensource.org/licenses/mozilla1.1.php\n\n", 'blue', 'underline'); if ($this->getProvidedArgument('accept_license') != 'yes') { $this->cliEcho("Before you can continue the installation, you need to confirm that you \nagree to be bound by the terms in this license.\n\n"); $this->cliEcho("Do you agree to be bound by the terms in the MPL 1.1 license?\n(type \"yes\" to agree, anything else aborts the installation): "); if (!$this->askToAccept()) { throw new Exception($this->cliEcho('You need to accept the license to continue', 'red', 'bold')); } } else { $this->cliEcho('You have accepted the license', 'yellow', 'bold'); $this->cliEcho("\n\n"); } $not_well = array(); if (!is_writable('core/B2DB/')) { $not_well[] = 'b2db_perm'; } if (!is_writable(THEBUGGENIE_PATH)) { $not_well[] = 'root'; } if (count($not_well) > 0) { $this->cliEcho("\n"); foreach ($not_well as $afail) { switch ($afail) { case 'b2db_perm': $this->cliEcho("Could not write to the B2DB directory\n", 'red', 'bold'); $this->cliEcho('The folder '); $this->cliEcho('include/B2DB', 'white', 'bold'); $this->cliEcho(' folder needs to be writable'); break; case 'root': $this->cliEcho("Could not write to the main directory\n", 'red', 'bold'); $this->cliEcho('The top level folder must be writable during installation'); break; } } throw new Exception("\n\nYou need to correct the above errors before the installation can continue."); } else { $this->cliEcho("Step 1 - database information\n"); if (file_exists('core/b2db_bootstrap.inc.php')) { $this->cliEcho("You seem to already have completed this step successfully.\n"); if ($this->getProvidedArgument('use_existing_db_info') == 'yes') { $this->cliEcho("\n"); $this->cliEcho("Using existing database information\n", 'yellow', 'bold'); $use_existing_db_info = true; } else { $this->cliEcho("Do you want to use the stored settings?\n", 'white', 'bold'); $this->cliEcho("\nType \"no\" to enter new settings, press ENTER to use existing: ", 'white', 'bold'); $use_existing_db_info = $this->askToDecline(); } $this->cliEcho("\n"); } else { $use_existing_db_info = false; } if (!$use_existing_db_info) { $this->cliEcho("The Bug Genie uses a database to store information. To be able to connect\nto your database, The Bug Genie needs some information, such as\ndatabase type, username, password, etc.\n\n"); $this->cliEcho("Please select what kind of database you are installing The Bug Genie on:\n"); B2DB::setHTMLException(false); $db_types = array(); foreach (B2DB::getDBtypes() as $db_type => $db_desc) { $db_types[] = $db_type; $this->cliEcho(count($db_types) . ': ' . $db_desc . "\n", 'white', 'bold'); } do { $this->cliEcho('Enter the corresponding number for the database (1-' . count($db_types) . '): '); $db_selection = $this->getInput(); if (!isset($db_types[(int) $db_selection - 1])) { throw new Exception($db_selection . ' is not a valid database type selection'); } $db_type = $db_types[(int) $db_selection - 1]; $this->cliEcho("Selected database type: "); $this->cliEcho($db_type . "\n\n"); $this->cliEcho("Please enter the database hostname: \n"); $this->cliEcho('Database hostname [localhost]: ', 'white', 'bold'); $db_hostname = $this->getInput(); $db_hostname = $db_hostname == '' ? 'localhost' : $db_hostname; $this->cliEcho("\nPlease enter the username The Bug Genie will use to connect to the database: \n"); $this->cliEcho('Database username: '******'white', 'bold'); $db_username = $this->getInput(); $this->cliEcho("Database password (press ENTER if blank): ", 'white', 'bold'); $db_password = $this->getInput(); $this->cliEcho("\nPlease enter the database The Bug Genie will use.\nIf it does not exist, The Bug Genie will create it for you.\n(the default database name is "); $this->cliEcho("thebuggenie_db", 'white', 'bold'); $this->cliEcho(" - press ENTER to use that):\n"); $this->cliEcho('Database name: ', 'white', 'bold'); $db_name = $this->getInput('thebuggenie_db'); $this->cliEcho("\n"); $this->cliEcho("The following settings will be used:\n"); $this->cliEcho("Database type: \t\t", 'white', 'bold'); $this->cliEcho($db_type . "\n"); $this->cliEcho("Database hostname: \t", 'white', 'bold'); $this->cliEcho($db_hostname . "\n"); $this->cliEcho("Database username: \t", 'white', 'bold'); $this->cliEcho($db_username . "\n"); $this->cliEcho("Database password: \t", 'white', 'bold'); $this->cliEcho($db_password . "\n"); $this->cliEcho("Database name: \t\t", 'white', 'bold'); $this->cliEcho($db_name . "\n"); $this->cliEcho("\nIf these settings are ok, press ENTER, or anything else to retry: "); $e_ok = $this->askToDecline(); } while (!$e_ok); try { B2DB::setHost($db_hostname); B2DB::setUname($db_username); B2DB::setPasswd($db_password); B2DB::setDBtype($db_type); B2DB::initialize(); $engine_path = B2DB::getEngineClassPath(); if ($engine_path !== null) { TBGContext::addClasspath($engine_path); } else { throw new Exception("Cannot initialize the B2DB engine"); } B2DB::doConnect(); B2DB::createDatabase($db_name); B2DB::setDBname($db_name); B2DB::doConnect(); } catch (Exception $e) { throw new Exception("Could not connect to the database:\n" . $e->getMessage()); } B2DB::setDBname($db_name); B2DB::doSelectDB(); $this->cliEcho("\nSuccessfully connected to the database.\n", 'green'); $this->cliEcho("Press ENTER to continue ... "); $this->pressEnterToContinue(); $this->cliEcho("\n"); $this->cliEcho("Saving database connection information ... ", 'white', 'bold'); $this->cliEcho("\n"); B2DB::saveConnectionParameters(THEBUGGENIE_CORE_PATH . 'b2db_bootstrap.inc.php'); $this->cliEcho("Successfully saved database connection information.\n", 'green'); $this->cliEcho("\n"); } else { B2DB::initialize(THEBUGGENIE_CORE_PATH . 'b2db_bootstrap.inc.php'); $this->cliEcho("Successfully connected to the database.\n", 'green'); if ($this->getProvidedArgument('use_existing_db_info') != 'yes') { $this->cliEcho("Press ENTER to continue ... "); $this->pressEnterToContinue(); } } $this->cliEcho("\nThe Bug Genie needs some server settings to function properly...\n\n"); do { $this->cliEcho("URL rewriting\n", 'cyan', 'bold'); $this->cliEcho("The Bug Genie uses a technique called \"url rewriting\" - which allows for pretty\nURLs such as ") . $this->cliEcho('/issue/1', 'white', 'bold') . $this->cliEcho(' instead of ') . $this->cliEcho("viewissue.php?issue_id=1\n", 'white', 'bold'); $this->cliEcho("Make sure you have read the URL_REWRITE document located in the root\nfolder, or at http://www.thebuggenie.com before you continue\n"); if (!$this->hasProvidedArgument('url_subdir')) { $this->cliEcho("Press ENTER to continue ... "); $this->pressEnterToContinue(); } $this->cliEcho("\n"); $this->cliEcho("The Bug Genie subdir\n", 'white', 'bold'); $this->cliEcho("This is the sub-path of the Web server where The Bug Genie will be located.\n"); if ($this->hasProvidedArgument('url_subdir')) { $this->cliEcho('The Bug Genie subdir: ', 'white', 'bold'); $url_subdir = $this->getProvidedArgument('url_subdir'); $this->cliEcho($url_subdir, 'yellow', 'bold'); $this->cliEcho("\n"); } else { $this->cliEcho('Start and end this with a forward slash', 'white', 'bold'); $this->cliEcho(". (ex: \"/thebuggenie/\")\nIf The Bug Genie is running at the root directory, just type \"/\" (without the quotes)\n\n"); $this->cliEcho('The Bug Genie subdir: ', 'white', 'bold'); $url_subdir = $this->getInput(); } $this->cliEcho("\n"); $this->cliEcho("The Bug Genie will now be accessible at\n"); $this->cliEcho("http://example.com" . $url_subdir, 'white', 'bold'); if ($this->hasProvidedArgument('url_subdir')) { $this->cliEcho("\n"); $this->cliEcho("Using existing values", 'yellow', 'bold'); $this->cliEcho("\n"); $e_ok = true; } else { $this->cliEcho("\nPress ENTER if ok, or \"no\" to try again: "); $e_ok = $this->askToDecline(); } $this->cliEcho("\n"); } while (!$e_ok); if ($this->getProvidedArgument('setup_htaccess') != 'yes') { $this->cliEcho("Setup can autoconfigure your .htaccess file (located in the thebuggenie/ subfolder), so you don't have to.\n"); $this->cliEcho('Would you like setup to auto-generate the .htaccess file for you?'); $this->cliEcho("\nPress ENTER if ok, or \"no\" to not set up the .htaccess file: "); $htaccess_ok = $this->askToDecline(); } else { $this->cliEcho('Autoconfiguring .htaccess', 'yellow', 'bold'); $this->cliEcho("\n"); $htaccess_ok = true; } $this->cliEcho("\n"); if ($htaccess_ok) { if (!is_writable(THEBUGGENIE_PATH . 'thebuggenie/') || file_exists(THEBUGGENIE_PATH . 'thebuggenie/.htaccess') && !is_writable(THEBUGGENIE_PATH . 'thebuggenie/.htaccess')) { $this->cliEcho("Permission denied when trying to save the [main folder]/thebuggenie/.htaccess\n", 'red', 'bold'); $this->cliEcho("You will have to set up the .htaccess file yourself. See the README file for more information.\n", 'white', 'bold'); $this->cliEcho('Please note: ', 'white', 'bold'); $this->cliEcho("The Bug Genie will not function properly until the .htaccess file is properly set up!\n"); } else { $content = str_replace('###PUT URL SUBDIRECTORY HERE###', $url_subdir, file_get_contents(THEBUGGENIE_CORE_PATH . 'templates/htaccess.template')); file_put_contents(THEBUGGENIE_PATH . 'thebuggenie/.htaccess', $content); if (file_get_contents(THEBUGGENIE_PATH . 'thebuggenie/.htaccess') != $content) { $this->cliEcho("Permission denied when trying to save the [main folder]/thebuggenie/.htaccess\n", 'red', 'bold'); $this->cliEcho("You will have to set up the .htaccess file yourself. See the README file for more information.\n", 'white', 'bold'); $this->cliEcho('Please note: ', 'white', 'bold'); $this->cliEcho("The Bug Genie will not function properly until the .htaccess file is properly set up!\n"); } else { $this->cliEcho("The .htaccess file was successfully set up...\n", 'green', 'bold'); } } } else { $this->cliEcho("Skipping .htaccess auto-setup."); } if ($this->getProvidedArgument('setup_htaccess') != 'yes') { $this->cliEcho("Press ENTER to continue ... "); $this->pressEnterToContinue(); $this->cliEcho("\n"); } $enable_modules = array(); if ($this->getProvidedArgument('enable_all_modules') != 'yes') { $this->cliEcho("You will now get a list of available modules.\nTo enable the module after installation, just press ENTER.\nIf you don't want to enable the module, type \"no\".\nRemember that all these modules can be disabled/uninstalled after installation.\n\n"); } $this->cliEcho("Enable incoming and outgoing email? ", 'white', 'bold') . $this->cliEcho('(yes): '); $enable_modules['mailing'] = $this->getProvidedArgument('enable_all_modules') == 'yes' ? true : $this->askToDecline(); if ($this->getProvidedArgument('enable_all_modules') == 'yes') { $this->cliEcho("Yes\n", 'yellow', 'bold'); } $this->cliEcho("Enable communication with version control systems (i.e. svn)? ", 'white', 'bold') . $this->cliEcho('(yes): '); $enable_modules['vcs_integration'] = $this->getProvidedArgument('enable_all_modules') == 'yes' ? true : $this->askToDecline(); if ($this->getProvidedArgument('enable_all_modules') == 'yes') { $this->cliEcho("Yes\n", 'yellow', 'bold'); } $enable_modules['publish'] = true; $this->cliEcho("\n"); $this->cliEcho("Creating tables ...\n", 'white', 'bold'); $tables_path = THEBUGGENIE_CORE_PATH . 'classes' . DIRECTORY_SEPARATOR . 'B2DB' . DIRECTORY_SEPARATOR; TBGContext::addClasspath($tables_path); $tables_path_handle = opendir($tables_path); $tables_created = array(); while ($table_class_file = readdir($tables_path_handle)) { if (($tablename = substr($table_class_file, 0, strpos($table_class_file, '.'))) != '') { B2DB::getTable($tablename)->create(); $this->cliEcho("Creating table {$tablename}\n", 'white', 'bold'); } } $this->cliEcho("\n"); $this->cliEcho("All tables successfully created...\n\n", 'green', 'bold'); $this->cliEcho("Setting up initial scope... \n", 'white', 'bold'); TBGContext::reinitializeI18n('en_US'); $scope = new TBGScope(); $scope->setName('The default scope'); $scope->addHostname('*'); $scope->setEnabled(); TBGContext::setScope($scope); $scope->save(); TBGSettings::saveSetting('language', 'en_US'); $this->cliEcho("Initial scope setup successfully... \n\n", 'green', 'bold'); $this->cliEcho("Setting up modules... \n", 'white', 'bold'); try { foreach ($enable_modules as $module => $install) { if ((bool) $install && file_exists(THEBUGGENIE_MODULES_PATH . $module . DS . 'module')) { $this->cliEcho("Installing {$module}... \n"); TBGModule::installModule($module); $this->cliEcho("Module {$module} installed successfully...\n", 'green'); } } $this->cliEcho("\n"); $this->cliEcho("All modules installed successfully...\n", 'green', 'bold'); $this->cliEcho("\n"); $this->cliEcho("Finishing installation... \n", 'white', 'bold'); if (!is_writable(THEBUGGENIE_PATH . 'installed')) { $this->cliEcho("\n"); $this->cliEcho("Could not create the 'installed' file.\n", 'red', 'bold'); $this->cliEcho("Please create the file "); $this->cliEcho(THEBUGGENIE_PATH . "installed\n", 'white', 'bold'); $this->cliEcho("with the following line inside:\n"); $this->cliEcho('3.0, installed ' . date('d.m.Y H:i'), 'blue', 'bold'); $this->cliEcho("\n"); $this->cliEcho("This can be done by running the following command when installation has finished:\n"); $this->cliEcho('echo "3.0, installed ' . date('d.m.Y H:i') . '" > ' . THEBUGGENIE_PATH . 'installed', 'white', 'bold'); $this->cliEcho("\n"); $this->cliEcho("Press ENTER to continue ... "); $this->pressEnterToContinue(); $this->cliEcho("\n"); $this->cliEcho("\n"); } else { file_put_contents(THEBUGGENIE_PATH . 'installed', '3.0, installed ' . date('d.m.Y H:i')); } $this->cliEcho("The installation was completed successfully!\n", 'green', 'bold'); $this->cliEcho("\nTo use The Bug Genie, access http://example.com" . $url_subdir . "index.php with a web-browser.\n"); $this->cliEcho("The default username is ") . $this->cliEcho('Administrator') . $this->cliEcho(' and the password is ') . $this->cliEcho('admin'); $this->cliEcho("\n\nFor support, please visit ") . $this->cliEcho('http://www.thebuggenie.com/', 'blue', 'underline'); $this->cliEcho("\n"); } catch (Exception $e) { throw new Exception("Could not install the {$module} module:\n" . $e->getMessage()); } } } catch (Exception $e) { $this->cliEcho("\n\nThe installation was interrupted\n", 'red'); $this->cliEcho($e->getMessage() . "\n"); var_dump($e->getTraceAsString()); die; } $this->cliEcho("\n"); }
public function runUpgrade(TBGRequest $request) { $version_info = explode(',', file_get_contents(THEBUGGENIE_PATH . 'installed')); $this->current_version = $version_info[0]; $this->upgrade_available = $this->current_version != '3.3'; if ($this->upgrade_available) { $scope = new TBGScope(); $scope->setID(1); $scope->setEnabled(); TBGContext::setScope($scope); TBGContext::addAutoloaderClassPath(THEBUGGENIE_MODULES_PATH . 'installation' . DS . 'classes' . DS . 'upgrade_3.2'); $this->statuses = TBGListTypesTable::getTable()->getStatusListForUpgrade(); $this->adminusername = TBGUsersTable3dot2::getTable()->getAdminUsername(); } $this->upgrade_complete = false; if ($this->upgrade_available && $request->isPost()) { $this->upgrade_complete = false; switch ($this->current_version) { case '3.0': $this->_upgradeFrom3dot0(); case '3.1': $this->_upgradeFrom3dot1(); case '3.2': $this->_upgradeFrom3dot2($request); } if ($this->upgrade_complete) { $existing_installed_content = file_get_contents(THEBUGGENIE_PATH . 'installed'); file_put_contents(THEBUGGENIE_PATH . 'installed', TBGSettings::getVersion(false, false) . ', upgraded ' . date('d.m.Y H:i') . "\n" . $existing_installed_content); $prev_error_reportiong_level = error_reporting(0); unlink(THEBUGGENIE_PATH . 'upgrade'); error_reporting($prev_error_reportiong_level); if (file_exists(THEBUGGENIE_PATH . 'upgrade')) { $this->upgrade_file_failed = true; } $this->current_version = TBGSettings::getVersion(false, false); $this->upgrade_available = false; } } elseif ($this->upgrade_available) { $this->permissions_ok = false; if (is_writable(THEBUGGENIE_PATH . 'installed') && is_writable(THEBUGGENIE_PATH . 'upgrade')) { $this->permissions_ok = true; } } elseif ($this->upgrade_complete) { $this->forward(TBGContext::getRouting()->generate('home')); } }
protected final function _processArguments() { $cc = 1; foreach ($this->_required_arguments as $key => $argument) { $cc++; if ($this->hasProvidedArgument($key)) { continue; } if ($this->hasProvidedArgument($cc)) { if (mb_substr(self::$_provided_arguments[$cc], 0, 2) == '--' && mb_substr(self::$_provided_arguments[$cc], 2, mb_strpos(self::$_provided_arguments[$cc], '=') - 1) != $key) { continue; } self::$_provided_arguments[$key] = self::$_provided_arguments[$cc]; if (!is_numeric($key)) { self::$_named_arguments[$key] = self::$_provided_arguments[$cc]; } continue; } } foreach (self::$_provided_arguments as $key => $value) { $this->{$key} = $value; } $diff = array_diff(array_keys($this->_required_arguments), array_keys(self::$_named_arguments)); if (count($diff)) { throw new Exception('Please include all required arguments. Missing arguments: ' . join(', ', $diff)); } foreach ($this->_optional_arguments as $key => $argument) { $cc++; if ($this->hasProvidedArgument($key)) { continue; } if ($this->hasProvidedArgument($cc)) { if (mb_substr(self::$_provided_arguments[$cc], 0, 2) == '--' && mb_substr(self::$_provided_arguments[$cc], 2, mb_strpos(self::$_provided_arguments[$cc], '=') - 1) != $key) { continue; } self::$_provided_arguments[$key] = self::$_provided_arguments[$cc]; if (!is_numeric($key)) { self::$_named_arguments[$key] = self::$_provided_arguments[$cc]; } continue; } } if ($this->_scoped && array_key_exists('scope', self::$_named_arguments)) { $scope = TBGScopesTable::getTable()->selectById(self::$_named_arguments['scope']); $this->cliEcho("Using scope " . $scope->getID() . "\n"); TBGContext::setScope($scope); } }