mirror of
https://github.com/moodle/moodle.git
synced 2025-04-13 12:32:08 +02:00
MDL-82347 hub: Registration collects plugin usage data
This commit is contained in:
parent
554a790bf0
commit
12b43ec6c4
@ -89,6 +89,7 @@ $string['nohubselected'] = 'No hub selected';
|
||||
$string['none'] = 'None';
|
||||
$string['operation'] = 'Actions';
|
||||
$string['participantnumberaverage'] = 'Average number of participants ({$a})';
|
||||
$string['pluginusagedata'] = 'Plugin usage data collected from the following pages: <a href="{$a->overview}">Plugin overview</a>, <a href="{$a->activities}">Activities</a>, and <a href="{$a->blocks}">Blocks</a>';
|
||||
$string['policyagreed'] = 'Privacy notice and data processing agreement';
|
||||
$string['policyagreeddesc'] = 'I agree to the <a href="{$a}" target="_blank">Privacy notice and data processing agreement</a>';
|
||||
$string['postaladdress'] = 'Postal address';
|
||||
|
@ -30,6 +30,7 @@ use moodle_url;
|
||||
use context_system;
|
||||
use stdClass;
|
||||
use html_writer;
|
||||
use core_plugin_manager;
|
||||
|
||||
/**
|
||||
* Methods to use when registering the site at the moodle sites directory.
|
||||
@ -62,6 +63,8 @@ class registration {
|
||||
2020022600 => ['activeusers', 'activeparticipantnumberaverage'],
|
||||
// Database type, course date info, site theme, primary auth type added in Moodle 4.2.
|
||||
2023021700 => ['dbtype', 'coursesnodates', 'sitetheme', 'primaryauthtype'],
|
||||
// Plugin usage added in Moodle 4.5.
|
||||
2023072300 => ['pluginusage'],
|
||||
];
|
||||
|
||||
/** @var string Site privacy: not displayed */
|
||||
@ -185,6 +188,7 @@ class registration {
|
||||
$siteinfo['dbtype'] = $CFG->dbtype;
|
||||
$siteinfo['coursesnodates'] = $DB->count_records_select('course', 'enddate = ?', [0]) - 1;
|
||||
$siteinfo['sitetheme'] = get_config('core', 'theme');
|
||||
$siteinfo['pluginusage'] = json_encode(self::get_plugin_usage_data());
|
||||
|
||||
// Primary auth type.
|
||||
$primaryauthsql = 'SELECT auth, count(auth) as tc FROM {user} GROUP BY auth ORDER BY tc DESC';
|
||||
@ -238,6 +242,11 @@ class registration {
|
||||
if (preg_match('/^(\d+\.\d.*?)[\. ]/', $moodlerelease, $matches)) {
|
||||
$moodlerelease = $matches[1];
|
||||
}
|
||||
$pluginusagelinks = [
|
||||
'overview' => new moodle_url('/admin/plugins.php'),
|
||||
'activities' => new moodle_url('/admin/modules.php'),
|
||||
'blocks' => new moodle_url('/admin/blocks.php'),
|
||||
];
|
||||
$senddata = [
|
||||
'moodlerelease' => get_string('sitereleasenum', 'hub', $moodlerelease),
|
||||
'courses' => get_string('coursesnumber', 'hub', $siteinfo['courses']),
|
||||
@ -267,6 +276,7 @@ class registration {
|
||||
'coursesnodates' => get_string('coursesnodates', 'hub', $siteinfo['coursesnodates']),
|
||||
'sitetheme' => get_string('sitetheme', 'hub', $siteinfo['sitetheme']),
|
||||
'primaryauthtype' => get_string('primaryauthtype', 'hub', $siteinfo['primaryauthtype']),
|
||||
'pluginusage' => get_string('pluginusagedata', 'hub', $pluginusagelinks),
|
||||
];
|
||||
|
||||
foreach ($senddata as $key => $str) {
|
||||
@ -608,4 +618,40 @@ class registration {
|
||||
redirect(new moodle_url('/admin/registration/index.php', ['returnurl' => $returnurl->out_as_local_url(false)]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of plugins.
|
||||
*
|
||||
* Only blocks and activities will include instance counts.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_plugin_usage_data(): array {
|
||||
global $DB;
|
||||
|
||||
$pluginman = core_plugin_manager::instance();
|
||||
$plugininfo = $pluginman->get_plugins();
|
||||
$data = [];
|
||||
|
||||
foreach ($plugininfo as $plugins) {
|
||||
foreach ($plugins as $plugin) {
|
||||
// Plugins are considered enabled if $plugin->is_enabled() returns true or null.
|
||||
// Plugins that return null cannot be disabled.
|
||||
$enabled = ($plugin->is_enabled() || is_null($plugin->is_enabled()));
|
||||
$data[$plugin->type][$plugin->name]['enabled'] = $enabled ? 1 : 0;
|
||||
|
||||
if ($plugin->type === 'mod') {
|
||||
$mid = $DB->get_field('modules', 'id', ['name' => $plugin->name]);
|
||||
$count = $DB->count_records('course_modules', ['module' => $mid]);
|
||||
$data[$plugin->type][$plugin->name]['count'] = $count;
|
||||
|
||||
} else if ($plugin->type === 'block') {
|
||||
$count = $DB->count_records('block_instances', ['blockname' => $plugin->name]);
|
||||
$data[$plugin->type][$plugin->name]['count'] = $count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
@ -22,15 +22,12 @@ namespace core\hub;
|
||||
* @package core
|
||||
* @copyright 2023 Matt Porritt <matt.porritt@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*
|
||||
* @covers \core\hub\registration
|
||||
*/
|
||||
class registration_test extends \advanced_testcase {
|
||||
|
||||
/**
|
||||
* Test getting site registration information.
|
||||
*
|
||||
* return void
|
||||
* @covers \core\hub\registration
|
||||
*/
|
||||
public function test_get_site_info(): void {
|
||||
global $CFG;
|
||||
@ -50,4 +47,42 @@ class registration_test extends \advanced_testcase {
|
||||
$this->assertEquals('manual', $siteinfo['primaryauthtype']);
|
||||
$this->assertEquals(1, $siteinfo['coursesnodates']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getting the plugin usage data.
|
||||
*/
|
||||
public function test_get_plugin_usage(): void {
|
||||
global $DB;
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Create some courses with end dates.
|
||||
$generator = $this->getDataGenerator();
|
||||
$course = $generator->create_course();
|
||||
|
||||
// Create some assignments.
|
||||
$generator->create_module('assign', ['course' => $course->id]);
|
||||
$generator->create_module('assign', ['course' => $course->id]);
|
||||
$generator->create_module('assign', ['course' => $course->id]);
|
||||
|
||||
// Create some quizzes.
|
||||
$generator->create_module('quiz', ['course' => $course->id]);
|
||||
$generator->create_module('quiz', ['course' => $course->id]);
|
||||
|
||||
// Add some blocks.
|
||||
$generator->create_block('online_users');
|
||||
$generator->create_block('online_users');
|
||||
$generator->create_block('online_users');
|
||||
$generator->create_block('online_users');
|
||||
|
||||
// Disabled a plugin.
|
||||
$DB->set_field('modules', 'visible', 0, ['name' => 'feedback']);
|
||||
|
||||
// Check our plugin usage counts and enabled states are correct.
|
||||
$pluginusage = registration::get_plugin_usage_data();
|
||||
$this->assertEquals(3, $pluginusage['mod']['assign']['count']);
|
||||
$this->assertEquals(2, $pluginusage['mod']['quiz']['count']);
|
||||
$this->assertEquals(4, $pluginusage['block']['online_users']['count']);
|
||||
$this->assertEquals(0, $pluginusage['mod']['feedback']['enabled']);
|
||||
$this->assertEquals(1, $pluginusage['mod']['assign']['enabled']);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user