mirror of
https://github.com/moodle/moodle.git
synced 2025-01-17 21:49:15 +01:00
MDL-51867 scales: any plugin type can declare a scale as used
This commit is contained in:
parent
e8952c5951
commit
322f314155
@ -4408,3 +4408,77 @@ function get_clam_error_code($returncode) {
|
||||
$antivirus = \core\antivirus\manager::get_antivirus('clamav');
|
||||
return $antivirus->get_clam_error_code($returncode);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function returns the number of activities using the given scale in the given course.
|
||||
*
|
||||
* @deprecated since Moodle 3.1
|
||||
* @param int $courseid The course ID to check.
|
||||
* @param int $scaleid The scale ID to check
|
||||
* @return int
|
||||
*/
|
||||
function course_scale_used($courseid, $scaleid) {
|
||||
global $CFG, $DB;
|
||||
|
||||
debugging('course_scale_used() is deprecated and never used, plugins must implement <modname>_scale_used_anywhere, '.
|
||||
'all implementations of <modname>_scale_used are now ignored', DEBUG_DEVELOPER);
|
||||
|
||||
$return = 0;
|
||||
|
||||
if (!empty($scaleid)) {
|
||||
if ($cms = get_course_mods($courseid)) {
|
||||
foreach ($cms as $cm) {
|
||||
// Check cm->name/lib.php exists.
|
||||
if (file_exists($CFG->dirroot.'/mod/'.$cm->modname.'/lib.php')) {
|
||||
include_once($CFG->dirroot.'/mod/'.$cm->modname.'/lib.php');
|
||||
$functionname = $cm->modname.'_scale_used';
|
||||
if (function_exists($functionname)) {
|
||||
if ($functionname($cm->instance, $scaleid)) {
|
||||
$return++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check if any course grade item makes use of the scale.
|
||||
$return += $DB->count_records('grade_items', array('courseid' => $courseid, 'scaleid' => $scaleid));
|
||||
|
||||
// Check if any outcome in the course makes use of the scale.
|
||||
$return += $DB->count_records_sql("SELECT COUNT('x')
|
||||
FROM {grade_outcomes_courses} goc,
|
||||
{grade_outcomes} go
|
||||
WHERE go.id = goc.outcomeid
|
||||
AND go.scaleid = ? AND goc.courseid = ?",
|
||||
array($scaleid, $courseid));
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function returns the number of activities using scaleid in the entire site
|
||||
*
|
||||
* @deprecated since Moodle 3.1
|
||||
* @param int $scaleid
|
||||
* @param array $courses
|
||||
* @return int
|
||||
*/
|
||||
function site_scale_used($scaleid, &$courses) {
|
||||
$return = 0;
|
||||
|
||||
debugging('site_scale_used() is deprecated and never used, plugins must implement <modname>_scale_used_anywhere, '.
|
||||
'all implementations of <modname>_scale_used are now ignored', DEBUG_DEVELOPER);
|
||||
|
||||
if (!is_array($courses) || count($courses) == 0) {
|
||||
$courses = get_courses("all", false, "c.id, c.shortname");
|
||||
}
|
||||
|
||||
if (!empty($scaleid)) {
|
||||
if (is_array($courses) && count($courses) > 0) {
|
||||
foreach ($courses as $course) {
|
||||
$return += course_scale_used($course->id, $scaleid);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@ -289,37 +289,11 @@ class grade_scale extends grade_object {
|
||||
return true;
|
||||
}
|
||||
|
||||
$legacy_mods = false;
|
||||
if ($mods = $DB->get_records('modules', array('visible' => 1))) {
|
||||
foreach ($mods as $mod) {
|
||||
//Check cm->name/lib.php exists
|
||||
if (file_exists($CFG->dirroot.'/mod/'.$mod->name.'/lib.php')) {
|
||||
include_once($CFG->dirroot.'/mod/'.$mod->name.'/lib.php');
|
||||
$function_name = $mod->name.'_scale_used_anywhere';
|
||||
$old_function_name = $mod->name.'_scale_used';
|
||||
if (function_exists($function_name)) {
|
||||
if ($function_name($this->id)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} else if (function_exists($old_function_name)) {
|
||||
$legacy_mods = true;
|
||||
debugging('Please notify the developer of module "'.$mod->name.'" that new function module_scale_used_anywhere() should be implemented.', DEBUG_DEVELOPER);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// some mods are missing the new xxx_scale_used_anywhere() - use the really slow old way
|
||||
if ($legacy_mods) {
|
||||
if (!empty($this->courseid)) {
|
||||
if (course_scale_used($this->courseid,$this->id)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
$courses = array();
|
||||
if (site_scale_used($this->id,$courses)) {
|
||||
// Ask all plugins if the scale is used anywhere.
|
||||
$pluginsfunction = get_plugins_with_function('scale_used_anywhere');
|
||||
foreach ($pluginsfunction as $plugintype => $plugins) {
|
||||
foreach ($plugins as $pluginfunction) {
|
||||
if ($pluginfunction($this->id)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -8156,72 +8156,6 @@ function make_grades_menu($gradingtype) {
|
||||
return $grades;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function returns the number of activities using the given scale in the given course.
|
||||
*
|
||||
* @param int $courseid The course ID to check.
|
||||
* @param int $scaleid The scale ID to check
|
||||
* @return int
|
||||
*/
|
||||
function course_scale_used($courseid, $scaleid) {
|
||||
global $CFG, $DB;
|
||||
|
||||
$return = 0;
|
||||
|
||||
if (!empty($scaleid)) {
|
||||
if ($cms = get_course_mods($courseid)) {
|
||||
foreach ($cms as $cm) {
|
||||
// Check cm->name/lib.php exists.
|
||||
if (file_exists($CFG->dirroot.'/mod/'.$cm->modname.'/lib.php')) {
|
||||
include_once($CFG->dirroot.'/mod/'.$cm->modname.'/lib.php');
|
||||
$functionname = $cm->modname.'_scale_used';
|
||||
if (function_exists($functionname)) {
|
||||
if ($functionname($cm->instance, $scaleid)) {
|
||||
$return++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check if any course grade item makes use of the scale.
|
||||
$return += $DB->count_records('grade_items', array('courseid' => $courseid, 'scaleid' => $scaleid));
|
||||
|
||||
// Check if any outcome in the course makes use of the scale.
|
||||
$return += $DB->count_records_sql("SELECT COUNT('x')
|
||||
FROM {grade_outcomes_courses} goc,
|
||||
{grade_outcomes} go
|
||||
WHERE go.id = goc.outcomeid
|
||||
AND go.scaleid = ? AND goc.courseid = ?",
|
||||
array($scaleid, $courseid));
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function returns the number of activities using scaleid in the entire site
|
||||
*
|
||||
* @param int $scaleid
|
||||
* @param array $courses
|
||||
* @return int
|
||||
*/
|
||||
function site_scale_used($scaleid, &$courses) {
|
||||
$return = 0;
|
||||
|
||||
if (!is_array($courses) || count($courses) == 0) {
|
||||
$courses = get_courses("all", false, "c.id, c.shortname");
|
||||
}
|
||||
|
||||
if (!empty($scaleid)) {
|
||||
if (is_array($courses) && count($courses) > 0) {
|
||||
foreach ($courses as $course) {
|
||||
$return += course_scale_used($course->id, $scaleid);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* make_unique_id_code
|
||||
*
|
||||
|
@ -81,6 +81,7 @@ information provided here is intended especially for developers.
|
||||
* \repository::antivir_scan_file() has been deprecated, \core\antivirus\manager::scan_file() that
|
||||
applies antivirus plugins is replacing its functionality.
|
||||
* Added core_text::str_max_bytes() which safely truncates multi-byte strings to a maximum number of bytes.
|
||||
* Any plugin can report when a scale is being used with the callback function [pluginname]_scale_used_anywhere(int $scaleid).
|
||||
|
||||
=== 3.0 ===
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user