Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.3.x will end 7 October 2024 (12 months).
  • Bug fixes for security issues in 4.3.x will end 21 April 2025 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.2.x is supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * CLI script to uninstall plugins.
 *
 * @package    core
 * @subpackage cli
 * @copyright  2018 Dmitrii Metelkin <dmitriim@catalyst-au.net>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

define('CLI_SCRIPT', true);

require(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/clilib.php');
require_once($CFG->libdir . '/adminlib.php');

$help = "Command line tool to uninstall plugins.

Options:
    -h --help                   Print this help.
    --show-all                  Displays a list of all installed plugins.
    --show-contrib              Displays a list of all third-party installed plugins.
    --show-missing              Displays a list of plugins missing from disk.
    --purge-missing             Uninstall all missing from disk plugins.
    --plugins=<plugin name>     A comma separated list of plugins to be uninstalled. E.g. mod_assign,mod_forum
    --run                       Execute uninstall. If this option is not set, then the script will be run in a dry mode.
> --showsql Show sql queries before they are executed. > --showdebugging Show developer level debugging information.
Examples: # php uninstall_plugins.php --show-all Prints tab-separated list of all installed plugins. # php uninstall_plugins.php --show-contrib Prints tab-separated list of all third-party installed plugins. # php uninstall_plugins.php --show-missing Prints tab-separated list of all missing from disk plugins. # php uninstall_plugins.php --purge-missing A dry run of uninstalling all missing plugins. # php uninstall_plugins.php --purge-missing --run Run uninstall of all missing plugins. # php uninstall_plugins.php --plugins=mod_assign,mod_forum A dry run of uninstalling mod_assign and mod_forum plugins. # php uninstall_plugins.php --plugins=mod_assign,mod_forum --run Run uninstall for mod_assign and mod_forum plugins. "; list($options, $unrecognised) = cli_get_params([ 'help' => false, 'show-all' => false, 'show-contrib' => false, 'show-missing' => false, 'purge-missing' => false, 'plugins' => false, 'run' => false,
> 'showsql' => false, ], [ > 'showdebugging' => false,
'h' => 'help' ]); if ($unrecognised) { $unrecognised = implode(PHP_EOL.' ', $unrecognised); cli_error(get_string('cliunknowoption', 'core_admin', $unrecognised)); } if ($options['help']) { cli_writeln($help); exit(0);
> } } > > if ($options['showdebugging']) { $pluginman = core_plugin_manager::instance(); > set_debugging(DEBUG_DEVELOPER, true); $plugininfo = $pluginman->get_plugins(); > } > if ($options['show-all'] || $options['show-missing'] || $options['show-contrib']) { > if ($options['showsql']) { foreach ($plugininfo as $type => $plugins) { > $DB->set_debug(true);
foreach ($plugins as $name => $plugin) { if ($options['show-contrib'] && $plugin->is_standard()) { continue; } $pluginstring = $plugin->component . "\t" . $plugin->displayname; if ($options['show-all'] || $options['show-contrib']) { cli_writeln($pluginstring); } else { if ($plugin->get_status() === core_plugin_manager::PLUGIN_STATUS_MISSING) { cli_writeln($pluginstring); } } } } exit(0); } if ($options['purge-missing']) { foreach ($plugininfo as $type => $plugins) { foreach ($plugins as $name => $plugin) { if ($plugin->get_status() === core_plugin_manager::PLUGIN_STATUS_MISSING) { $pluginstring = $plugin->component . "\t" . $plugin->displayname; if ($pluginman->can_uninstall_plugin($plugin->component)) { if ($options['run']) { cli_writeln('Uninstalling: ' . $pluginstring); $progress = new progress_trace_buffer(new text_progress_trace(), true); $pluginman->uninstall_plugin($plugin->component, $progress); $progress->finished(); cli_write($progress->get_buffer()); } else { cli_writeln('Will be uninstalled: ' . $pluginstring); } } else { cli_writeln('Can not be uninstalled: ' . $pluginstring); } } } } exit(0); } if ($options['plugins']) { $components = explode(',', $options['plugins']); foreach ($components as $component) { $plugin = $pluginman->get_plugin_info($component); if (is_null($plugin)) { cli_writeln('Unknown plugin: ' . $component); } else { $pluginstring = $plugin->component . "\t" . $plugin->displayname; if ($pluginman->can_uninstall_plugin($plugin->component)) { if ($options['run']) { cli_writeln('Uninstalling: ' . $pluginstring); $progress = new progress_trace_buffer(new text_progress_trace(), true); $pluginman->uninstall_plugin($plugin->component, $progress); $progress->finished(); cli_write($progress->get_buffer()); } else { cli_writeln('Will be uninstalled: ' . $pluginstring); } } else { cli_writeln('Can not be uninstalled: ' . $pluginstring); } } } exit(0); } cli_writeln($help); exit(0);