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_