public function execute() { global $CFG; require_once $CFG->libdir . '/adminlib.php'; // various admin-only functions require_once $CFG->libdir . '/upgradelib.php'; // general upgrade/install related functions require_once $CFG->libdir . '/environmentlib.php'; require_once $CFG->libdir . '/pluginlib.php'; require_once $CFG->dirroot . '/course/lib.php'; //some variables you may want to use //$this->cwd - the directory where moosh command was executed //$this->mooshDir - moosh installation directory //$this->expandedOptions - commandline provided options, merged with defaults //$this->topDir - top Moodle directory //$this->arguments[0] - first argument passed //$options = $this->expandedOptions; $split = explode('_', $this->arguments[0], 2); uninstall_plugin($split[0], $split[1]); upgrade_noncore(true); /* if verbose mode was requested, show some more information/debug messages if($this->verbose) { echo "Say what you're doing now"; } */ }
public function execute() { global $CFG; require_once $CFG->libdir . '/adminlib.php'; // various admin-only functions require_once $CFG->libdir . '/upgradelib.php'; // general upgrade/install related functions require_once $CFG->libdir . '/environmentlib.php'; require_once $CFG->dirroot . '/course/lib.php'; $pluginname = $this->arguments[0]; $moodleversion = $this->arguments[1]; $pluginversion = $this->arguments[2]; $pluginsfile = home_dir() . '/.moosh/plugins.json'; $stat = @stat($pluginsfile); if (!$stat || time() - $stat['mtime'] > 60 * 60 * 24 || !$stat['size']) { die("plugins.json file not found or too old. Run moosh plugin-list to download newest plugins.json file\n"); } $pluginsdata = file_get_contents($pluginsfile); $decodeddata = json_decode($pluginsdata); $downloadurl = NULL; $downloadurl = $this->get_plugin_url($decodeddata, $pluginname, $moodleversion, $pluginversion); if (!$downloadurl) { die("Couldn't find {$pluginname} {$moodleversion}\n"); } $split = explode('_', $this->arguments[0], 2); $tempdir = home_dir() . '/.moosh/moodleplugins/'; if (!file_exists($tempdir)) { mkdir($tempdir); } if (!fopen($tempdir . $split[1] . ".zip", 'w')) { echo "Failed to save plugin.\n"; return; } try { file_put_contents($tempdir . $split[1] . ".zip", file_get_contents($downloadurl)); } catch (Exception $e) { echo "Failed to download plugin. " . $e . "\n"; return; } try { shell_exec("unzip " . $tempdir . $split[1] . ".zip -d " . home_dir() . "/.moosh/moodleplugins/"); shell_exec("cp -r " . $tempdir . $split[1] . "/ " . $this->get_install_path($split[0], $moodleversion)); } catch (Exception $e) { echo "Failed to unzip plugin. " . $e . "\n"; return; } echo "Installing {$pluginname} {$moodleversion}\n"; upgrade_noncore(true); echo "Done\n"; }
public function execute() { global $CFG; require_once $CFG->libdir . '/adminlib.php'; // various admin-only functions require_once $CFG->libdir . '/upgradelib.php'; // general upgrade/install related functions require_once $CFG->libdir . '/environmentlib.php'; require_once $CFG->dirroot . '/course/lib.php'; $this->init(); $pluginname = $this->arguments[0]; $pluginversion = $this->arguments[1]; $downloadurl = $this->get_plugin_url($pluginname, $pluginversion); $split = explode('_', $pluginname, 2); $type = $split[0]; $component = $split[1]; $tempdir = home_dir() . '/.moosh/moodleplugins/'; $downloadedfile = $tempdir . $component . ".zip"; if (!file_exists($tempdir)) { mkdir($tempdir); } if (!fopen($downloadedfile, 'w')) { echo "Failed to save plugin - check permissions on {$tempdir}.\n"; return; } try { file_put_contents($downloadedfile, file_get_contents($downloadurl)); } catch (Exception $e) { die("Failed to download plugin from {$downloadurl}. " . $e . "\n"); } $installpath = $this->get_install_path($type); $targetpath = $installpath . DIRECTORY_SEPARATOR . $component; if (file_exists($targetpath)) { if ($this->expandedOptions['delete']) { echo "Removing previously installed {$pluginname} from {$targetpath}\n"; run_external_command("rm -rf {$targetpath}"); } else { die("Something already exists at {$targetpath} - please remove it and try again, or run with the -d option.\n"); } } run_external_command("unzip {$downloadedfile} -d {$installpath}"); run_external_command("rm {$downloadedfile}"); echo "Installing\n"; echo "\tname: {$pluginname}\n"; echo "\tversion: {$pluginversion}\n"; upgrade_noncore(true); echo "Done\n"; }
$PAGE->navbar->add($strplugincheck); $PAGE->set_title($strplugincheck); $PAGE->set_heading($strplugincheck); $PAGE->set_cacheable(false); if ($fetchupdates) { // no sesskey support guaranteed here available_update_checker::instance()->fetch(); redirect($PAGE->url); } $output = $PAGE->get_renderer('core', 'admin'); echo $output->upgrade_plugin_check_page(plugin_manager::instance(), available_update_checker::instance(), $version, $showallplugins, new moodle_url($PAGE->url), new moodle_url('/admin/index.php', array('confirmplugincheck' => 1))); die; } } // install/upgrade all plugins and other parts upgrade_noncore(true); } // If this is the first install, indicate that this site is fully configured // except the admin password if (during_initial_install()) { set_config('rolesactive', 1); // after this, during_initial_install will return false. set_config('adminsetuppending', 1); // we need this redirect to setup proper session upgrade_finished("index.php?sessionstarted=1&lang={$CFG->lang}"); } // make sure admin user is created - this is the last step because we need // session to be working properly in order to edit admin account if (!empty($CFG->adminsetuppending)) { $sessionstarted = optional_param('sessionstarted', 0, PARAM_BOOL); if (!$sessionstarted) {
/** * Install Moodle DB, * config.php must exist, there must not be any tables in db yet. * * @param array $options adminpass is mandatory * @param bool $interactive * @return void */ function install_cli_database(array $options, $interactive) { global $CFG, $DB; require_once $CFG->libdir . '/environmentlib.php'; require_once $CFG->libdir . '/upgradelib.php'; // show as much debug as possible @error_reporting(E_ALL | E_STRICT); @ini_set('display_errors', '1'); $CFG->debug = E_ALL | E_STRICT; $CFG->debugdisplay = true; $CFG->version = ''; $CFG->release = ''; $CFG->branch = ''; $version = null; $release = null; $branch = null; // read $version and $release require $CFG->dirroot . '/version.php'; if ($DB->get_tables()) { cli_error(get_string('clitablesexist', 'install')); } if (empty($options['adminpass'])) { cli_error('Missing required admin password'); } // test environment first list($envstatus, $environment_results) = check_moodle_environment(normalize_version($release), ENV_SELECT_RELEASE); if (!$envstatus) { $errors = environment_get_errors($environment_results); cli_heading(get_string('environment', 'admin')); foreach ($errors as $error) { list($info, $report) = $error; echo "!! {$info} !!\n{$report}\n\n"; } exit(1); } if (!$DB->setup_is_unicodedb()) { if (!$DB->change_db_encoding()) { // If could not convert successfully, throw error, and prevent installation cli_error(get_string('unicoderequired', 'admin')); } } if ($interactive) { cli_separator(); cli_heading(get_string('databasesetup')); } // install core install_core($version, true); set_config('release', $release); set_config('branch', $branch); if (PHPUNIT_TEST) { // mark as test database as soon as possible set_config('phpunittest', 'na'); } // install all plugins types, local, etc. upgrade_noncore(true); // set up admin user password $DB->set_field('user', 'password', hash_internal_user_password($options['adminpass']), array('username' => 'admin')); // rename admin username if needed if (isset($options['adminuser']) and $options['adminuser'] !== 'admin' and $options['adminuser'] !== 'guest') { $DB->set_field('user', 'username', $options['adminuser'], array('username' => 'admin')); } // indicate that this site is fully configured set_config('rolesactive', 1); upgrade_finished(); // log in as admin - we need do anything when applying defaults $admins = get_admins(); $admin = reset($admins); session_set_user($admin); // apply all default settings, do it twice to fill all defaults - some settings depend on other setting admin_apply_default_settings(NULL, true); admin_apply_default_settings(NULL, true); set_config('registerauth', ''); // set the site name if (isset($options['shortname']) and $options['shortname'] !== '') { $DB->set_field('course', 'shortname', $options['shortname'], array('format' => 'site')); } if (isset($options['fullname']) and $options['fullname'] !== '') { $DB->set_field('course', 'fullname', $options['fullname'], array('format' => 'site')); } }
function mnetadmin_rpc_upgrade($user, $json_response = true) { global $CFG, $USER; // Invoke local user and check his rights if ($auth_response = invoke_local_user((array) $user)) { if ($json_response) { return $auth_response; } else { return json_decode($auth_response); } } // Creating response $response = new stdclass(); $response->status = RPC_SUCCESS; require "{$CFG->dirroot}/version.php"; // defines $version, $release, $branch and $maturity $CFG->target_release = $release; // used during installation and upgrades if ($version < $CFG->version) { $response->status = RPC_FAILURE_RUN; $response->error = get_string('downgradedcore', 'error'); $response->errors[] = get_string('downgradedcore', 'error'); if ($json_response) { return json_encode($response); } else { return $response; } } $oldversion = "{$CFG->release} ({$CFG->version})"; $newversion = "{$release} ({$version})"; if (!moodle_needs_upgrading()) { $response->message = get_string('cliupgradenoneed', 'core_admin', $newversion); if ($json_response) { return json_encode($response); } else { return $response; } } // debug_trace('Remote Upgrade : Environment check'); list($envstatus, $environment_results) = check_moodle_environment(normalize_version($release), ENV_SELECT_NEWER); if (!$envstatus) { $response->status = RPC_FAILURE_RUN; $response->error = vmoodle_get_string('environmentissues', 'vmoodleadminset_upgrade'); $response->errors[] = vmoodle_get_string('environmentissues', 'vmoodleadminset_upgrade'); $response->detail = $environment_results; if ($json_response) { return json_encode($response); } else { return $response; } } // Test plugin dependencies. // debug_trace('Remote Upgrade : Plugins check'); $failed = array(); if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) { $response->status = RPC_FAILURE_RUN; $response->error = get_string('pluginschecktodo', 'admin'); $response->errors[] = get_string('pluginschecktodo', 'admin'); if ($json_response) { return json_encode($response); } else { return $response; } } ob_start(); // debug_trace('Remote Upgrade : Upgrade core'); if ($version > $CFG->version) { upgrade_core($version, false); } set_config('release', $release); set_config('branch', $branch); // unconditionally upgrade // debug_trace('Remote Upgrade : Upgrade other'); upgrade_noncore(false); // log in as admin - we need doanything permission when applying defaults // debug_trace('Remote Upgrade : Turning ADMIN '); session_set_user(get_admin()); // apply all default settings, just in case do it twice to fill all defaults // debug_trace('Remote Upgrade : Applying settings '); admin_apply_default_settings(NULL, false); admin_apply_default_settings(NULL, false); ob_end_clean(); $response->message = vmoodle_get_string('upgradecomplete', 'vmoodleadminset_upgrade', $newversion); if ($json_response) { return json_encode($response); } else { return $response; } }
public function execute() { global $CFG, $DB; $CFG->debugdisplay = 0; require_once $CFG->libdir . '/adminlib.php'; // various admin-only functions require_once $CFG->libdir . '/upgradelib.php'; // general upgrade/install related functions require_once $CFG->libdir . '/filelib.php'; $pluginname = $this->arguments[0]; if ($pluginname) { $pluginman = core_plugin_manager::instance(); $pluginfo = $pluginman->get_plugin_info($pluginname); // Make sure we know the plugin. if (is_null($pluginfo)) { echo 'core_plugin_manager::get_plugin_info() returned null for the plugin to be uninstalled' . PHP_EOL; if ($CFG->debugdisplay) { throw new moodle_exception('err_uninstalling_unknown_plugin', 'core_plugin', '', array('plugin' => $pluginname), 'core_plugin_manager::get_plugin_info() returned null for the plugin to be uninstalled'); } die; } $pluginname = $pluginman->plugin_name($pluginfo->component); echo "Uninstalling {$pluginname} plugin.\n"; if (!$pluginman->can_uninstall_plugin($pluginfo->component)) { // Remove it form DB. if it is not installed properly. if ($DB->get_record('config_plugins', array('plugin' => $pluginfo->component))) { $ok = $DB->delete_records('config_plugins', array('plugin' => $pluginfo->component)); echo 'Plugin not installed properly, deleting redundant plugin records from mdl_config_plugins' . PHP_EOL; upgrade_noncore(true); die; } echo 'core_plugin_manager::can_uninstall_plugin() returned false' . PHP_EOL; if ($CFG->debugdisplay) { throw new moodle_exception('err_cannot_uninstall_plugin', 'core_plugin', '', array('plugin' => $pluginfo->component), 'core_plugin_manager::can_uninstall_plugin() returned false'); } die; } // Make sure it is not installed. if (is_null($pluginfo->versiondb)) { echo 'core_plugin_manager::get_plugin_info() returned not-null versiondb for the plugin to be deleted' . PHP_EOL; if ($CFG->debugdisplay) { throw new moodle_exception('err_removing_installed_plugin', 'core_plugin', '', array('plugin' => $pluginfo->component, 'versiondb' => $pluginfo->versiondb), 'core_plugin_manager::get_plugin_info() returned not-null versiondb for the plugin to be deleted'); } die; } if (empty($pluginfo->rootdir)) { $pluginfo->rootdir = $pluginfo->typerootdir . '/' . $pluginfo->name; //$CFG->dirroot.'/'.$pluginfo->type; } if (file_exists($pluginfo->rootdir)) { // Make sure the folder is removable. if (!$pluginman->is_plugin_folder_removable($pluginfo->component)) { echo 'plugin root folder is not removable as expected ' . PHP_EOL; echo ' Use CLI "sudo chmod -R +w ' . $pluginfo->rootdir . '" to enable write (delete) permission on that folder' . PHP_EOL; if ($CFG->debugdisplay) { throw new moodle_exception('err_removing_unremovable_folder', 'core_plugin', '', array('plugin' => $pluginfo->component, 'rootdir' => $pluginfo->rootdir), 'plugin root folder is not removable as expected' . PHP_EOL . ' Use CLI "sudo chmod -R +w ' . $pluginfo->rootdir . '" to enable write (delete) permission on that folder'); } die; } } else { echo 'Plugin folder (' . $pluginfo->rootdir . ') does not exist, skipping...' . PHP_EOL; } // Make sure the folder is within Moodle installation tree. if (strpos($pluginfo->rootdir, $CFG->dirroot) !== 0) { echo 'plugin root folder not in the moodle dirroot' . PHP_EOL; if ($CFG->debugdisplay) { throw new moodle_exception('err_unexpected_plugin_rootdir', 'core_plugin', '', array('plugin' => $pluginfo->component, 'rootdir' => $pluginfo->rootdir, 'dirroot' => $CFG->dirroot), 'plugin root folder not in the moodle dirroot'); } die; } echo 'Uninstalling plugins...' . PHP_EOL; $progress = new progress_trace_buffer(new text_progress_trace(), false); $pluginman->uninstall_plugin($pluginfo->component, $progress); $progress->finished(); // So long, and thanks for all the bugs. if ($CFG->debugdisplay) { print_r($pluginfo); } echo "Deleting folder: {$pluginfo->rootdir} (if exists)" . PHP_EOL; fulldelete($pluginfo->rootdir); // Reset op code caches. if (function_exists('opcache_reset')) { opcache_reset(); } echo "Upgrade noncore." . PHP_EOL; upgrade_noncore(true); echo "Uninstalled :-) So long, and thanks for all the bugs." . PHP_EOL; } }