Site Configuration

There's a handy CLI tool available in recent versions of Moodle to get and set site and plugin/component configuration:

php admin/cli/cfg.php --help
Displays the current value of the given site setting. Allows to set it to the given value, too.

    # php cfg.php [--component=<componentname>] [--json] [--shell-arg]
    # php cfg.php --name=<configname> [--component=<componentname>] [--shell-arg] [--no-eol]
    # php cfg.php --name=<configname> [--component=<componentname>] --set=<value>
    # php cfg.php --name=<configname> [--component=<componentname>] --unset
    # php cfg.php [--help|-h]

    -h --help                   Print this help.
    --component=<frankenstyle>  Name of the component the variable is part of. Defaults to core.
    --name=<configname>         Name of the configuration variable to get/set. If missing, print all
                                configuration variables of the given component.
    --set=<value>               Set the given variable to this value.
    --unset                     Unset the given variable.
    --shell-arg                 Escape output values so that they can be directly used as shell script arguments.
    --json                      Encode output list of values using JSON notation.
    --no-eol                    Do not include the trailing new line character when printing the value.

Here are a few good examples of how to use it.

For a site configuration value e.g. the list of user ids who are site administrators.

php admin/cli/cfg.php --name=siteadmins

To search for a configuration value that you think might be set use good old grep:

php admin/cli/cfg.php | grep wwwroot
wwwroot	https://{}

For any component/plugin use the {type}_{name} format i.e. frankenstyle like tool_log or enrol_manual:

php admin/cli/cfg.php --component=tool_log
enabled_stores	logstore_standard
exportlog	1
version	2018120300

php admin/cli/cfg.php --component=enrol_manual
defaultenrol	1
enrolperiod	0
enrolstart	4
expiredaction	1
expirynotify	0
expirynotifyhour	6
expirythreshold	86400
roleid	5
status	0
version	2018120300

You can also output json if you like (though you need to format json accordingly).

php admin/cli/cfg.php --component=enrol_meta --json | python -m json.tool
    "coursesort": "sortorder",
    "nosyncroleids": "",
    "syncall": "1",
    "unenrolaction": "3",
    "version": "2018120300"

The set and unset options are particularly handy if you the site is not working due to a configuration option For example lets just set the auth methods available to email and remove saml2 and a2fa.

php admin/cli/cfg.php --name=auth

php admin/cli/cfg.php --name=auth --set=email
php admin/cli/cfg.php --name=auth
No Comments
Back to top