diff --git a/grade/tests/edittreelib_test.php b/grade/tests/edittreelib_test.php index 07c59e70a26..f3d768c22db 100644 --- a/grade/tests/edittreelib_test.php +++ b/grade/tests/edittreelib_test.php @@ -99,9 +99,14 @@ class core_grade_edittreelib_testcase extends advanced_testcase { $this->assertEquals($scale->id, $gradeitem->scaleid); $this->assertEquals($scalestring, $cell->text, "Grade text matches scale"); - // Now change it to no grade. + // Now change it to no grade with gradebook feedback enabled. + $adminconfig = $assign->get_admin_config(); + $gradebookplugin = $adminconfig->feedback_plugin_for_gradebook; + $gradebookplugin .= '_enabled'; + $instance = $assign->get_instance(); $instance->grade = 0; + $instance->$gradebookplugin = 1; $instance->instance = $instance->id; $assign->update_instance($instance); @@ -111,6 +116,19 @@ class core_grade_edittreelib_testcase extends advanced_testcase { $this->assertEquals(GRADE_TYPE_TEXT, $gradeitem->gradetype); $this->assertEquals(null, $gradeitem->scaleid); $this->assertEquals(' - ', $cell->text, 'Grade text matches empty value of " - "'); + + // Now change it to no grade with gradebook feedback disabled. + $instance = $assign->get_instance(); + $instance->grade = 0; + $instance->$gradebookplugin = 0; + $instance->instance = $instance->id; + $assign->update_instance($instance); + + $gradeitem = grade_item::fetch($gradeitemparams); + $cell = $column->get_item_cell($gradeitem, array()); + + $this->assertEquals(GRADE_TYPE_NONE, $gradeitem->gradetype); + $this->assertEquals(null, $gradeitem->scaleid); } } diff --git a/mod/assign/lib.php b/mod/assign/lib.php index 67b2ffd3c60..136c45aac77 100644 --- a/mod/assign/lib.php +++ b/mod/assign/lib.php @@ -912,6 +912,19 @@ function assign_grade_item_update($assign, $grades=null) { $params = array('itemname'=>$assign->name, 'idnumber'=>$assign->cmidnumber); + // Check if feedback plugin for gradebook is enabled, if yes then + // gradetype = GRADE_TYPE_TEXT else GRADE_TYPE_NONE. + $gradefeedbackenabled = false; + + if (isset($assign->gradefeedbackenabled)) { + $gradefeedbackenabled = $assign->gradefeedbackenabled; + } else if ($assign->grade == 0) { // Grade feedback is needed only when grade == 0. + $mod = get_coursemodule_from_instance('assign', $assign->id, $assign->courseid); + $cm = context_module::instance($mod->id); + $assignment = new assign($cm, null, null); + $gradefeedbackenabled = $assignment->is_gradebook_feedback_enabled(); + } + if ($assign->grade > 0) { $params['gradetype'] = GRADE_TYPE_VALUE; $params['grademax'] = $assign->grade; @@ -921,9 +934,12 @@ function assign_grade_item_update($assign, $grades=null) { $params['gradetype'] = GRADE_TYPE_SCALE; $params['scaleid'] = -$assign->grade; - } else { - // Allow text comments only. + } else if ($gradefeedbackenabled) { + // $assign->grade == 0 and feedback enabled. $params['gradetype'] = GRADE_TYPE_TEXT; + } else { + // $assign->grade == 0 and no feedback enabled. + $params['gradetype'] = GRADE_TYPE_NONE; } if ($grades === 'reset') { diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index c3667df5ebe..3218e16da79 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -788,6 +788,10 @@ class assign { require_once($CFG->dirroot.'/mod/assign/lib.php'); $assign = clone $this->get_instance(); $assign->cmidnumber = $coursemoduleid; + + // Set assign gradebook feedback plugin status (enabled and visible). + $assign->gradefeedbackenabled = $this->is_gradebook_feedback_enabled(); + $param = null; if ($reset) { $param = 'reset'; @@ -3999,7 +4003,8 @@ class assign { } $assign = clone $this->get_instance(); $assign->cmidnumber = $this->get_course_module()->idnumber; - + // Set assign gradebook feedback plugin status (enabled and visible). + $assign->gradefeedbackenabled = $this->is_gradebook_feedback_enabled(); return assign_grade_item_update($assign, $gradebookgrade); } @@ -5958,6 +5963,8 @@ class assign { // Update Gradebook. $assign = clone $this->get_instance(); $assign->cmidnumber = $this->get_course_module()->idnumber; + // Set assign gradebook feedback plugin status. + $assign->gradefeedbackenabled = $this->is_gradebook_feedback_enabled(); assign_update_grades($assign, $userid); } @@ -6779,6 +6786,28 @@ class assign { } return !in_array($userid, $this->susers); } + + /** + * Returns true if gradebook feedback plugin is enabled + * + * @return bool true if gradebook feedback plugin is enabled and visible else false. + */ + public function is_gradebook_feedback_enabled() { + // Get default grade book feedback plugin. + $adminconfig = $this->get_admin_config(); + $gradebookplugin = $adminconfig->feedback_plugin_for_gradebook; + $gradebookplugin = str_replace('assignfeedback_', '', $gradebookplugin); + + // Check if default gradebook feedback is visible and enabled. + $gradebookfeedbackplugin = $this->get_feedback_plugin_by_type($gradebookplugin); + + if ($gradebookfeedbackplugin->is_visible() && $gradebookfeedbackplugin->is_enabled()) { + return true; + } + + // Gradebook feedback plugin is either not visible/enabled. + return false; + } } /** diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index 766f8514668..7cc74951af4 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -1582,5 +1582,27 @@ Anchor link 2:Link text $plugin = $assign->get_feedback_plugin_by_type('comments'); $this->assertEquals(1, $plugin->is_enabled('enabled')); } + + /** + * Testing if gradebook feedback plugin is enabled. + */ + public function test_is_gradebook_feedback_enabled() { + $adminconfig = get_config('assign'); + $gradebookplugin = $adminconfig->feedback_plugin_for_gradebook; + + // Create assignment with gradebook feedback enabled and grade = 0. + $assign = $this->create_instance(array($gradebookplugin . '_enabled' => 1, 'grades' => 0)); + + // Get gradebook feedback plugin. + $gradebookplugintype = str_replace('assignfeedback_', '', $gradebookplugin); + $plugin = $assign->get_feedback_plugin_by_type($gradebookplugintype); + $this->assertEquals(1, $plugin->is_enabled('enabled')); + $this->assertEquals(1, $assign->is_gradebook_feedback_enabled()); + + // Create assignment with gradebook feedback disabled and grade = 0. + $assign = $this->create_instance(array($gradebookplugin . '_enabled' => 0, 'grades' => 0)); + $plugin = $assign->get_feedback_plugin_by_type($gradebookplugintype); + $this->assertEquals(0, $plugin->is_enabled('enabled')); + } } diff --git a/mod/assign/version.php b/mod/assign/version.php index 1e8f15b436f..47ed041344c 100644 --- a/mod/assign/version.php +++ b/mod/assign/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); $module->component = 'mod_assign'; // Full name of the plugin (used for diagnostics). -$module->version = 2013110501; // The current module version (Date: YYYYMMDDXX). +$module->version = 2013110502; // The current module version (Date: YYYYMMDDXX). $module->requires = 2013110500; // Requires this Moodle version. $module->cron = 60;