From 69115a5a1454302cb344adce1e7badbc0d7052db Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Tue, 9 Feb 2016 10:40:03 +0100 Subject: [PATCH 1/2] MDL-52999 mod_assign: Fix subplugins handling in external functions --- mod/assign/externallib.php | 24 ++++++++++++------- mod/assign/feedback/comments/locallib.php | 2 +- mod/assign/feedback/file/locallib.php | 3 ++- mod/assign/submission/file/locallib.php | 3 ++- mod/assign/submission/onlinetext/locallib.php | 2 +- 5 files changed, 21 insertions(+), 13 deletions(-) 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 bfe019c8386..df7dc5bec57 100644 --- a/mod/assign/feedback/comments/locallib.php +++ b/mod/assign/feedback/comments/locallib.php @@ -490,7 +490,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 c4d95bc1eba..a407948515a 100644 --- a/mod/assign/feedback/file/locallib.php +++ b/mod/assign/feedback/file/locallib.php @@ -618,7 +618,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); } From 7cc2106193eeb35c91e53066e2dd1ce97d40f082 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Tue, 9 Feb 2016 11:10:47 +0100 Subject: [PATCH 2/2] MDL-52999 mod_assign: New unit tests for subplugins --- mod/assign/tests/externallib_test.php | 43 +++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php index 0dd6de1c140..535c0fb25d8 100644 --- a/mod/assign/tests/externallib_test.php +++ b/mod/assign/tests/externallib_test.php @@ -1555,4 +1555,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); + } + }