diff --git a/mod/assign/externallib.php b/mod/assign/externallib.php index cd7be3042dd..7510f81cc59 100644 --- a/mod/assign/externallib.php +++ b/mod/assign/externallib.php @@ -1639,9 +1639,11 @@ class mod_assign_external extends external_api { $pluginsubmissionparams = array(); foreach ($instance->get_submission_plugins() as $plugin) { - $pluginparams = $plugin->get_external_parameters(); - if (!empty($pluginparams)) { - $pluginsubmissionparams = array_merge($pluginsubmissionparams, $pluginparams); + if ($plugin->is_visible()) { + $pluginparams = $plugin->get_external_parameters(); + if (!empty($pluginparams)) { + $pluginsubmissionparams = array_merge($pluginsubmissionparams, $pluginparams); + } } } @@ -1716,9 +1718,11 @@ class mod_assign_external extends external_api { $pluginfeedbackparams = array(); foreach ($instance->get_feedback_plugins() as $plugin) { - $pluginparams = $plugin->get_external_parameters(); - if (!empty($pluginparams)) { - $pluginfeedbackparams = array_merge($pluginfeedbackparams, $pluginparams); + if ($plugin->is_visible()) { + $pluginparams = $plugin->get_external_parameters(); + if (!empty($pluginparams)) { + $pluginfeedbackparams = array_merge($pluginfeedbackparams, $pluginparams); + } } } @@ -1856,9 +1860,11 @@ class mod_assign_external extends external_api { $pluginfeedbackparams = array(); foreach ($instance->get_feedback_plugins() as $plugin) { - $pluginparams = $plugin->get_external_parameters(); - if (!empty($pluginparams)) { - $pluginfeedbackparams = array_merge($pluginfeedbackparams, $pluginparams); + if ($plugin->is_visible()) { + $pluginparams = $plugin->get_external_parameters(); + if (!empty($pluginparams)) { + $pluginfeedbackparams = array_merge($pluginfeedbackparams, $pluginparams); + } } } diff --git a/mod/assign/feedback/comments/locallib.php b/mod/assign/feedback/comments/locallib.php index 6ba2770ab82..ab5a7c09aeb 100644 --- a/mod/assign/feedback/comments/locallib.php +++ b/mod/assign/feedback/comments/locallib.php @@ -513,7 +513,7 @@ class assign_feedback_comments extends assign_feedback_plugin { public function get_external_parameters() { $editorparams = array('text' => new external_value(PARAM_RAW, 'The text for this feedback.'), 'format' => new external_value(PARAM_INT, 'The format for this feedback')); - $editorstructure = new external_single_structure($editorparams); + $editorstructure = new external_single_structure($editorparams, 'Editor structure', VALUE_OPTIONAL); return array('assignfeedbackcomments_editor' => $editorstructure); } diff --git a/mod/assign/feedback/file/locallib.php b/mod/assign/feedback/file/locallib.php index 27d1b344e29..859701141d9 100644 --- a/mod/assign/feedback/file/locallib.php +++ b/mod/assign/feedback/file/locallib.php @@ -682,7 +682,8 @@ class assign_feedback_file extends assign_feedback_plugin { return array( 'files_filemanager' => new external_value( PARAM_INT, - 'The id of a draft area containing files for this feedback.' + 'The id of a draft area containing files for this feedback.', + VALUE_OPTIONAL ) ); } diff --git a/mod/assign/submission/file/locallib.php b/mod/assign/submission/file/locallib.php index 506eeaa7c0e..cfc4558e975 100644 --- a/mod/assign/submission/file/locallib.php +++ b/mod/assign/submission/file/locallib.php @@ -528,7 +528,8 @@ class assign_submission_file extends assign_submission_plugin { return array( 'files_filemanager' => new external_value( PARAM_INT, - 'The id of a draft area containing files for this submission.' + 'The id of a draft area containing files for this submission.', + VALUE_OPTIONAL ) ); } diff --git a/mod/assign/submission/onlinetext/locallib.php b/mod/assign/submission/onlinetext/locallib.php index ce31a25021d..063849014f1 100644 --- a/mod/assign/submission/onlinetext/locallib.php +++ b/mod/assign/submission/onlinetext/locallib.php @@ -618,7 +618,7 @@ class assign_submission_onlinetext extends assign_submission_plugin { $editorparams = array('text' => new external_value(PARAM_TEXT, 'The text for this submission.'), 'format' => new external_value(PARAM_INT, 'The format for this submission'), 'itemid' => new external_value(PARAM_INT, 'The draft area id for files attached to the submission')); - $editorstructure = new external_single_structure($editorparams); + $editorstructure = new external_single_structure($editorparams, 'Editor structure', VALUE_OPTIONAL); return array('onlinetext_editor' => $editorstructure); } diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php index 78fa73e5565..07339c470a5 100644 --- a/mod/assign/tests/externallib_test.php +++ b/mod/assign/tests/externallib_test.php @@ -1557,4 +1557,47 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { } + /** + * Test subplugins availability + */ + public function test_subplugins_availability() { + global $CFG; + + require_once($CFG->dirroot . '/mod/assign/adminlib.php'); + $this->resetAfterTest(true); + + // Hide assignment file submissiong plugin. + $pluginmanager = new assign_plugin_manager('assignsubmission'); + $pluginmanager->hide_plugin('file'); + $parameters = mod_assign_external::save_submission_parameters(); + + $this->assertTrue(!isset($parameters->keys['plugindata']->keys['files_filemanager'])); + + // Show it again and check that the value is returned as optional. + $pluginmanager->show_plugin('file'); + $parameters = mod_assign_external::save_submission_parameters(); + $this->assertTrue(isset($parameters->keys['plugindata']->keys['files_filemanager'])); + $this->assertEquals(VALUE_OPTIONAL, $parameters->keys['plugindata']->keys['files_filemanager']->required); + + // Hide feedback file submissiong plugin. + $pluginmanager = new assign_plugin_manager('assignfeedback'); + $pluginmanager->hide_plugin('file'); + + $parameters = mod_assign_external::save_grade_parameters(); + + $this->assertTrue(!isset($parameters->keys['plugindata']->keys['files_filemanager'])); + + // Show it again and check that the value is returned as optional. + $pluginmanager->show_plugin('file'); + $parameters = mod_assign_external::save_grade_parameters(); + + $this->assertTrue(isset($parameters->keys['plugindata']->keys['files_filemanager'])); + $this->assertEquals(VALUE_OPTIONAL, $parameters->keys['plugindata']->keys['files_filemanager']->required); + + // Check a different one. + $pluginmanager->show_plugin('comments'); + $this->assertTrue(isset($parameters->keys['plugindata']->keys['assignfeedbackcomments_editor'])); + $this->assertEquals(VALUE_OPTIONAL, $parameters->keys['plugindata']->keys['assignfeedbackcomments_editor']->required); + } + }