Merge branch 'MDL-58412-master' of git://github.com/jleyva/moodle

This commit is contained in:
Jake Dallimore 2017-04-20 09:56:10 +08:00
commit d8f9177462
2 changed files with 16 additions and 10 deletions

View file

@ -424,7 +424,6 @@ class mod_feedback_external extends external_api {
$warnings = array(); $warnings = array();
list($feedback, $course, $cm, $context) = self::validate_feedback($params['feedbackid']); list($feedback, $course, $cm, $context) = self::validate_feedback($params['feedbackid']);
self::validate_feedback_access($feedback, $course, $cm, $context);
$feedbackstructure = new mod_feedback_structure($feedback, $cm, $course->id); $feedbackstructure = new mod_feedback_structure($feedback, $cm, $course->id);
$returneditems = array(); $returneditems = array();
@ -613,7 +612,7 @@ class mod_feedback_external extends external_api {
'name' => new external_value(PARAM_NOTAGS, 'The response name (usually type[index]_id).'), 'name' => new external_value(PARAM_NOTAGS, 'The response name (usually type[index]_id).'),
'value' => new external_value(PARAM_RAW, 'The response value.'), 'value' => new external_value(PARAM_RAW, 'The response value.'),
) )
), 'The data to be processed.' ), 'The data to be processed.', VALUE_DEFAULT, array()
), ),
'goprevious' => new external_value(PARAM_BOOL, 'Whether we want to jump to previous page.', VALUE_DEFAULT, false), 'goprevious' => new external_value(PARAM_BOOL, 'Whether we want to jump to previous page.', VALUE_DEFAULT, false),
) )
@ -630,7 +629,7 @@ class mod_feedback_external extends external_api {
* @return array of warnings and launch information * @return array of warnings and launch information
* @since Moodle 3.3 * @since Moodle 3.3
*/ */
public static function process_page($feedbackid, $page, $responses, $goprevious = false) { public static function process_page($feedbackid, $page, $responses = [], $goprevious = false) {
global $USER, $SESSION; global $USER, $SESSION;
$params = array('feedbackid' => $feedbackid, 'page' => $page, 'responses' => $responses, 'goprevious' => $goprevious); $params = array('feedbackid' => $feedbackid, 'page' => $page, 'responses' => $responses, 'goprevious' => $goprevious);
@ -645,18 +644,24 @@ class mod_feedback_external extends external_api {
// Create the $_POST object required by the feedback question engine. // Create the $_POST object required by the feedback question engine.
$_POST = array(); $_POST = array();
foreach ($responses as $response) { foreach ($responses as $response) {
$_POST[$response['name']] = $response['value']; // First check if we are handling array parameters.
if (preg_match('/(.+)\[(.+)\]$/', $response['name'], $matches)) {
$_POST[$matches[1]][$matches[2]] = $response['value'];
} else {
$_POST[$response['name']] = $response['value'];
}
} }
// Force fields. // Force fields.
$_POST['id'] = $cm->id; $_POST['id'] = $cm->id;
$_POST['courseid'] = $course->id; $_POST['courseid'] = $course->id;
$_POST['gopage'] = $params['page']; $_POST['gopage'] = $params['page'];
$_POST['_qf__mod_feedback_complete_form'] = 1; $_POST['_qf__mod_feedback_complete_form'] = 1;
// Determine where to go, backwards or forward.
if (!$params['goprevious']) { if (!$params['goprevious']) {
$_POST['gonextpage'] = 1; // Even if we are saving values we need this set.
if ($feedbackcompletion->get_next_page($params['page'], false) === null) { if ($feedbackcompletion->get_next_page($params['page'], false) === null) {
$_POST['savevalues'] = 1; // If there is no next page, it means we are finishing the feedback. $_POST['savevalues'] = 1; // If there is no next page, it means we are finishing the feedback.
} else {
$_POST['gonextpage'] = 1; // If we are not going to previous page or finishing we are going forward.
} }
} }

View file

@ -29,6 +29,7 @@ defined('MOODLE_INTERNAL') || die();
global $CFG; global $CFG;
require_once($CFG->dirroot . '/webservice/tests/helpers.php'); require_once($CFG->dirroot . '/webservice/tests/helpers.php');
require_once($CFG->dirroot . '/mod/feedback/lib.php');
use mod_feedback\external\feedback_summary_exporter; use mod_feedback\external\feedback_summary_exporter;
@ -315,7 +316,7 @@ class mod_feedback_external_testcase extends externallib_advanced_testcase {
global $DB; global $DB;
// Force non anonymous. // Force non anonymous.
$DB->set_field('feedback', 'anonymous', 0, array('id' => $this->feedback->id)); $DB->set_field('feedback', 'anonymous', FEEDBACK_ANONYMOUS_NO, array('id' => $this->feedback->id));
// Add a completed_tmp record. // Add a completed_tmp record.
$record = [ $record = [
'feedback' => $this->feedback->id, 'feedback' => $this->feedback->id,
@ -323,7 +324,7 @@ class mod_feedback_external_testcase extends externallib_advanced_testcase {
'guestid' => '', 'guestid' => '',
'timemodified' => time() - DAYSECS, 'timemodified' => time() - DAYSECS,
'random_response' => 0, 'random_response' => 0,
'anonymous_response' => 2, 'anonymous_response' => FEEDBACK_ANONYMOUS_NO,
'courseid' => $this->course->id, 'courseid' => $this->course->id,
]; ];
$record['id'] = $DB->insert_record('feedback_completedtmp', (object) $record); $record['id'] = $DB->insert_record('feedback_completedtmp', (object) $record);
@ -386,7 +387,7 @@ class mod_feedback_external_testcase extends externallib_advanced_testcase {
// Now, try a feedback that we attempted. // Now, try a feedback that we attempted.
// Force non anonymous. // Force non anonymous.
$DB->set_field('feedback', 'anonymous', 0, array('id' => $this->feedback->id)); $DB->set_field('feedback', 'anonymous', FEEDBACK_ANONYMOUS_NO, array('id' => $this->feedback->id));
// Add a completed_tmp record. // Add a completed_tmp record.
$record = [ $record = [
'feedback' => $this->feedback->id, 'feedback' => $this->feedback->id,
@ -394,7 +395,7 @@ class mod_feedback_external_testcase extends externallib_advanced_testcase {
'guestid' => '', 'guestid' => '',
'timemodified' => time() - DAYSECS, 'timemodified' => time() - DAYSECS,
'random_response' => 0, 'random_response' => 0,
'anonymous_response' => 2, 'anonymous_response' => FEEDBACK_ANONYMOUS_NO,
'courseid' => $this->course->id, 'courseid' => $this->course->id,
]; ];
$record['id'] = $DB->insert_record('feedback_completedtmp', (object) $record); $record['id'] = $DB->insert_record('feedback_completedtmp', (object) $record);