diff --git a/grade/edit/scale/edit_form.php b/grade/edit/scale/edit_form.php
index e97bc24a38b..88b045e4566 100644
--- a/grade/edit/scale/edit_form.php
+++ b/grade/edit/scale/edit_form.php
@@ -18,7 +18,7 @@ class edit_scale_form extends moodleform {
$mform->setHelpButton('standard', array(false, get_string('scalestandard'),
false, true, false, get_string('scalestandardhelp', 'grades')));
- $mform->addElement('static', 'activities', get_string('activities'));
+ $mform->addElement('static', 'used', get_string('used'));
$mform->addElement('textarea', 'scale', get_string('scale'), array('cols'=>50, 'rows'=>2));
$mform->setHelpButton('scale', array('scales', get_string('scale')));
@@ -55,9 +55,9 @@ class edit_scale_form extends moodleform {
if ($id = $mform->getElementValue('id')) {
$scale = grade_scale::fetch(array('id'=>$id));
- $count = $scale->get_item_uses_count();
+ $used = $scale->is_used();
- if ($count) {
+ if ($used) {
$mform->hardFreeze('scale');
}
@@ -67,15 +67,16 @@ class edit_scale_form extends moodleform {
} else if (empty($scale->courseid) and !has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
$mform->hardFreeze('standard');
- } else if ($count and !empty($scale->courseid)) {
+ } else if ($used and !empty($scale->courseid)) {
$mform->hardFreeze('standard');
}
- $activities_el =& $mform->getElement('activities');
- $activities_el->setValue(get_string('usedinnplaces', '', $count));
+ $usedstr = $scale->is_used() ? get_string('yes') : get_string('no');
+ $used_el =& $mform->getElement('used');
+ $used_el->setValue($usedstr);
} else {
- $mform->removeElement('activities');
+ $mform->removeElement('used');
if (empty($courseid) or !has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
$mform->hardFreeze('standard');
}
diff --git a/grade/edit/scale/index.php b/grade/edit/scale/index.php
index 300857884b0..fd1eb272bd1 100644
--- a/grade/edit/scale/index.php
+++ b/grade/edit/scale/index.php
@@ -37,7 +37,7 @@ $strname = get_string('name');
$strdelete = get_string('delete');
$stredit = get_string('edit');
$srtcreatenewscale = get_string('scalescustomcreate');
-$stritems = get_string('items', 'grades');
+$strused = get_string('used');
$stredit = get_string('edit');
switch ($action) {
@@ -82,20 +82,20 @@ if ($courseid and $scales = grade_scale::fetch_all_local($courseid)) {
$line = array();
$line[] = format_string($scale->name).'
'.str_replace(",",", ",$scale->scale).'
';
- $scales_uses = $scale->get_item_uses_count();
- $line[] = $scales_uses;
+ $used = $scale->is_used();
+ $line[] = $used ? get_string('yes') : get_string('no');
$buttons = "";
$buttons .= "id\">
pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /> ";
- if (empty($scales_uses)) {
+ if (!$used) {
$buttons .= "id&action=delete&sesskey=$USER->sesskey\">
pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /> ";
}
$line[] = $buttons;
$data[] = $line;
}
- $table->head = array($strscale, $stritems, $stredit);
+ $table->head = array($strscale, $strused, $stredit);
$table->size = array('70%', '20%', '10%');
$table->align = array('left', 'center', 'center');
$table->width = '90%';
@@ -110,22 +110,22 @@ if ($scales = grade_scale::fetch_all_global()) {
$line = array();
$line[] = format_string($scale->name).''.str_replace(",",", ",$scale->scale).'
';
- $scales_uses = $scale->get_item_uses_count();
- $line[] = $scales_uses;
+ $used = $scale->is_used();
+ $line[] = $used ? get_string('yes') : get_string('no');
$buttons = "";
if (has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
$buttons .= "id\">
pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /> ";
}
- if (empty($scales_uses) and has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
+ if (!$used and has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
$buttons .= "id&action=delete&sesskey=$USER->sesskey\">
pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /> ";
}
$line[] = $buttons;
$data[] = $line;
}
- $table->head = array($strscale, $stritems, $stredit);
+ $table->head = array($strscale, $strused, $stredit);
$table->size = array('70%', '20%', '10%');
$table->align = array('left', 'center', 'center');
$table->width = '90%';
diff --git a/lang/en_utf8/moodle.php b/lang/en_utf8/moodle.php
index 735d8d82e31..64ec5eb282e 100644
--- a/lang/en_utf8/moodle.php
+++ b/lang/en_utf8/moodle.php
@@ -1489,6 +1489,7 @@ $string['uploadrenamedcollision'] = 'File was renamed from $a->oldname to $a->ne
$string['uploadserverlimit'] = 'Uploaded file exceeded the maximum size limit set by the server';
$string['uploadthisfile'] = 'Upload this file';
$string['uploadusers'] = 'Upload users';
+$string['used'] = 'Used';
$string['usedinnplaces'] = 'Used in $a places';
$string['usemessageform'] = 'or use the form below to send a message to the selected students';
$string['user'] = 'User';
diff --git a/lib/grade/grade_scale.php b/lib/grade/grade_scale.php
index af1df4d0c24..703e060f2a4 100644
--- a/lib/grade/grade_scale.php
+++ b/lib/grade/grade_scale.php
@@ -200,43 +200,64 @@ class grade_scale extends grade_object {
* @return boolean
*/
function can_delete() {
- $count = $this->get_item_uses_count();
- return empty($count);
+ return !$this->is_used();
}
/**
- * Returns the number of places where scale is used - activities, grade items, outcomes, etc.
- * @return int
+ * Returns if scale used anywhere - activities, grade items, outcomes, etc.
+ * @return bool
*/
- function get_item_uses_count() {
+ function is_used() {
global $CFG;
-//TODO: fix me - this methods does some duplicate counting in grade items and activities
- $count = 0;
- if (!empty($this->courseid)) {
- if ($scales_uses = course_scale_used($this->courseid,$this->id)) {
- $count += count($scales_uses);
- }
- } else {
- $courses = array();
- if ($scales_uses = site_scale_used($this->id,$courses)) {
- $count += count($scales_uses);
- }
- }
-
- // count grade items
+ // count grade items excluding the
$sql = "SELECT COUNT(id) FROM {$CFG->prefix}grade_items WHERE scaleid = {$this->id} AND outcomeid IS NULL";
- if ($scales_uses = count_records_sql($sql)) {
- $count += $scales_uses;
+ if (count_records_sql($sql)) {
+ return true;
}
// count outcomes
$sql = "SELECT COUNT(id) FROM {$CFG->prefix}grade_outcomes WHERE scaleid = {$this->id}";
- if ($scales_uses = count_records_sql($sql)) {
- $count += $scales_uses;
+ if (count_records_sql($sql)) {
+ return true;
}
- return $count;
+ $legacy_mods = false;
+ if ($mods = get_records('modules', '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;
+ 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)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
}
}
?>
diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php
index 6aed46fe3e0..67dca3c5657 100644
--- a/mod/assignment/lib.php
+++ b/mod/assignment/lib.php
@@ -2234,7 +2234,7 @@ function assignment_get_participants($assignmentid) {
* @param $scaleid int
* @return boolean True if the scale is used by the assignment
*/
-function assignment_scale_used ($assignmentid, $scaleid) {
+function assignment_scale_used($assignmentid, $scaleid) {
$return = false;
@@ -2247,6 +2247,21 @@ function assignment_scale_used ($assignmentid, $scaleid) {
return $return;
}
+/**
+ * Checks if scale is being used by any instance of assignment
+ *
+ * This is used to find out if scale used anywhere
+ * @param $scaleid int
+ * @return boolean True if the scale is used by any assignment
+ */
+function assignment_scale_used_anywhere($scaleid) {
+ if ($scaleid and record_exists('assignment', 'grade', -$scaleid)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
/**
* Make sure up-to-date events are created for all assignment instances
*
diff --git a/mod/forum/lib.php b/mod/forum/lib.php
index 123fdb24629..30a64099e35 100644
--- a/mod/forum/lib.php
+++ b/mod/forum/lib.php
@@ -1272,6 +1272,21 @@ function forum_scale_used ($forumid,$scaleid) {
return $return;
}
+/**
+ * Checks if scale is being used by any instance of forum
+ *
+ * This is used to find out if scale used anywhere
+ * @param $scaleid int
+ * @return boolean True if the scale is used by any forum
+ */
+function forum_scale_used_anywhere($scaleid) {
+ if ($scaleid and record_exists('forum', 'scale', -$scaleid)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
// SQL FUNCTIONS ///////////////////////////////////////////////////////////
/**
diff --git a/mod/glossary/lib.php b/mod/glossary/lib.php
index d54b508d877..395b67944c0 100644
--- a/mod/glossary/lib.php
+++ b/mod/glossary/lib.php
@@ -444,6 +444,21 @@ function glossary_scale_used ($glossaryid,$scaleid) {
return $return;
}
+/**
+ * Checks if scale is being used by any instance of glossary
+ *
+ * This is used to find out if scale used anywhere
+ * @param $scaleid int
+ * @return boolean True if the scale is used by any glossary
+ */
+function glossary_scale_used_anywhere($scaleid) {
+ if ($scaleid and record_exists('glossary', 'scale', -$scaleid)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
//////////////////////////////////////////////////////////////////////////////////////
/// Any other glossary functions go here. Each of them must have a name that
/// starts with glossary_
diff --git a/mod/hotpot/lib.php b/mod/hotpot/lib.php
index c22d6e934b9..1df8537a21c 100644
--- a/mod/hotpot/lib.php
+++ b/mod/hotpot/lib.php
@@ -1217,6 +1217,17 @@ function hotpot_scale_used ($hotpotid, $scaleid) {
return $report;
}
+/**
+ * Checks if scale is being used by any instance of hotpot
+ *
+ * This is used to find out if scale used anywhere
+ * @param $scaleid int
+ * @return boolean True if the scale is used by any hotpot
+ */
+function hotpot_scale_used_anywhere($scaleid) {
+ return false;
+}
+
//////////////////////////////////////////////////////////
/// Any other hotpot functions go here.
/// Each of them must have a name that starts with hotpot
diff --git a/mod/journal/lib.php b/mod/journal/lib.php
index a542bd11a5d..44ba271236b 100644
--- a/mod/journal/lib.php
+++ b/mod/journal/lib.php
@@ -307,6 +307,21 @@ function journal_scale_used ($journalid,$scaleid) {
return $return;
}
+/**
+ * Checks if scale is being used by any instance of journal
+ *
+ * This is used to find out if scale used anywhere
+ * @param $scaleid int
+ * @return boolean True if the scale is used by any journal
+ */
+function journal_scale_used_anywhere($scaleid) {
+ if ($scaleid and record_exists('journal', 'assessed', -$scaleid)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
// SQL FUNCTIONS ///////////////////////////////////////////////////////////////////
function journal_get_users_done($journal) {
diff --git a/mod/lams/lib.php b/mod/lams/lib.php
index f96f32877a9..06244abbbe6 100644
--- a/mod/lams/lib.php
+++ b/mod/lams/lib.php
@@ -140,6 +140,17 @@ function lams_scale_used ($lamsid,$scaleid) {
return $return;
}
+/**
+ * Checks if scale is being used by any instance of lams
+ *
+ * This is used to find out if scale used anywhere
+ * @param $scaleid int
+ * @return boolean True if the scale is used by any lams
+ */
+function lams_scale_used_anywhere($scaleid) {
+ return false;
+}
+
//////////////////////////////////////////////////////////////////////////////////////
/// Any other lams functions go here. Each of them must have a name that
/// starts with lams_