Merge branch 'MDL-41738' of https://github.com/Lightwork-Marking/moodle
This commit is contained in:
@@ -57,6 +57,15 @@ $functions = array(
|
||||
'type' => 'read'
|
||||
),
|
||||
|
||||
'mod_assign_set_user_flags' => array(
|
||||
'classname' => 'mod_assign_external',
|
||||
'methodname' => 'set_user_flags',
|
||||
'classpath' => 'mod/assign/externallib.php',
|
||||
'description' => 'Creates or updates user flags',
|
||||
'type' => 'write',
|
||||
'capabilities'=> 'mod/assign:grade'
|
||||
),
|
||||
|
||||
'mod_assign_get_user_mappings' => array(
|
||||
'classname' => 'mod_assign_external',
|
||||
'methodname' => 'get_user_mappings',
|
||||
|
||||
@@ -736,6 +736,149 @@ class mod_assign_external extends external_api {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Describes the parameters for set_user_flags
|
||||
* @return external_function_parameters
|
||||
* @since Moodle 2.6
|
||||
*/
|
||||
public static function set_user_flags_parameters() {
|
||||
return new external_function_parameters(
|
||||
array(
|
||||
'assignmentid' => new external_value(PARAM_INT, 'assignment id'),
|
||||
'userflags' => new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
array(
|
||||
'userid' => new external_value(PARAM_INT, 'student id'),
|
||||
'locked' => new external_value(PARAM_INT, 'locked', VALUE_OPTIONAL),
|
||||
'mailed' => new external_value(PARAM_INT, 'mailed', VALUE_OPTIONAL),
|
||||
'extensionduedate' => new external_value(PARAM_INT, 'extension due date', VALUE_OPTIONAL),
|
||||
'workflowstate' => new external_value(PARAM_TEXT, 'marking workflow state', VALUE_OPTIONAL),
|
||||
'allocatedmarker' => new external_value(PARAM_INT, 'allocated marker', VALUE_OPTIONAL)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create or update user_flags records
|
||||
*
|
||||
* @param int $assignmentid the assignment for which the userflags are created or updated
|
||||
* @param array $userflags An array of userflags to create or update
|
||||
* @return array containing success or failure information for each record
|
||||
* @since Moodle 2.6
|
||||
*/
|
||||
public static function set_user_flags($assignmentid, $userflags = array()) {
|
||||
global $CFG, $DB;
|
||||
require_once($CFG->dirroot . "/mod/assign/locallib.php");
|
||||
|
||||
$params = self::validate_parameters(self::set_user_flags_parameters(),
|
||||
array('assignmentid' => $assignmentid,
|
||||
'userflags' => $userflags));
|
||||
|
||||
// Load assignment if it exists and if the user has the capability.
|
||||
$cm = get_coursemodule_from_instance('assign', $params['assignmentid'], 0, false, MUST_EXIST);
|
||||
$context = context_module::instance($cm->id);
|
||||
self::validate_context($context);
|
||||
require_capability('mod/assign:grade', $context);
|
||||
$assign = new assign($context, null, null);
|
||||
|
||||
$results = array();
|
||||
foreach ($params['userflags'] as $userflag) {
|
||||
$success = true;
|
||||
$result = array();
|
||||
|
||||
$record = $assign->get_user_flags($userflag['userid'], false);
|
||||
if ($record) {
|
||||
if (isset($userflag['locked'])) {
|
||||
$record->locked = $userflag['locked'];
|
||||
}
|
||||
if (isset($userflag['mailed'])) {
|
||||
$record->mailed = $userflag['mailed'];
|
||||
}
|
||||
if (isset($userflag['extensionduedate'])) {
|
||||
$record->extensionduedate = $userflag['extensionduedate'];
|
||||
}
|
||||
if (isset($userflag['workflowstate'])) {
|
||||
$record->workflowstate = $userflag['workflowstate'];
|
||||
}
|
||||
if (isset($userflag['allocatedmarker'])) {
|
||||
$record->allocatedmarker = $userflag['allocatedmarker'];
|
||||
}
|
||||
if ($assign->update_user_flags($record)) {
|
||||
$result['id'] = $record->id;
|
||||
$result['userid'] = $userflag['userid'];
|
||||
} else {
|
||||
$result['id'] = $record->id;
|
||||
$result['userid'] = $userflag['userid'];
|
||||
$result['errormessage'] = 'Record created but values could not be set';
|
||||
}
|
||||
} else {
|
||||
$record = $assign->get_user_flags($userflag['userid'], true);
|
||||
$setfields = isset($userflag['locked'])
|
||||
|| isset($userflag['mailed'])
|
||||
|| isset($userflag['extensionduedate'])
|
||||
|| isset($userflag['workflowstate'])
|
||||
|| isset($userflag['allocatedmarker']);
|
||||
if ($record) {
|
||||
if ($setfields) {
|
||||
if (isset($userflag['locked'])) {
|
||||
$record->locked = $userflag['locked'];
|
||||
}
|
||||
if (isset($userflag['mailed'])) {
|
||||
$record->mailed = $userflag['mailed'];
|
||||
}
|
||||
if (isset($userflag['extensionduedate'])) {
|
||||
$record->extensionduedate = $userflag['extensionduedate'];
|
||||
}
|
||||
if (isset($userflag['workflowstate'])) {
|
||||
$record->workflowstate = $userflag['workflowstate'];
|
||||
}
|
||||
if (isset($userflag['allocatedmarker'])) {
|
||||
$record->allocatedmarker = $userflag['allocatedmarker'];
|
||||
}
|
||||
if ($assign->update_user_flags($record)) {
|
||||
$result['id'] = $record->id;
|
||||
$result['userid'] = $userflag['userid'];
|
||||
} else {
|
||||
$result['id'] = $record->id;
|
||||
$result['userid'] = $userflag['userid'];
|
||||
$result['errormessage'] = 'Record created but values could not be set';
|
||||
}
|
||||
} else {
|
||||
$result['id'] = $record->id;
|
||||
$result['userid'] = $userflag['userid'];
|
||||
}
|
||||
} else {
|
||||
$result['id'] = -1;
|
||||
$result['userid'] = $userflag['userid'];
|
||||
$result['errormessage'] = 'Record could not be created';
|
||||
}
|
||||
}
|
||||
|
||||
$results[] = $result;
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Describes the set_user_flags return value
|
||||
* @return external_multiple_structure
|
||||
* @since Moodle 2.6
|
||||
*/
|
||||
public static function set_user_flags_returns() {
|
||||
return new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
array(
|
||||
'id' => new external_value(PARAM_INT, 'id of record if successful, -1 for failure'),
|
||||
'userid' => new external_value(PARAM_INT, 'userid of record'),
|
||||
'errormessage' => new external_value(PARAM_TEXT, 'Failure error message', VALUE_OPTIONAL)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Describes the parameters for get_user_flags
|
||||
* @return external_function_parameters
|
||||
|
||||
@@ -1043,4 +1043,91 @@ class mod_assign_external_testcase extends externallib_advanced_testcase {
|
||||
$this->assertNotEmpty($result['assignments'][0]['submissions'][0]['plugins']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test set_user_flags
|
||||
*/
|
||||
public function test_set_user_flags() {
|
||||
global $DB, $USER;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
// Create a course and assignment.
|
||||
$coursedata['idnumber'] = 'idnumbercourse';
|
||||
$coursedata['fullname'] = 'Lightwork Course';
|
||||
$coursedata['summary'] = 'Lightwork Course description';
|
||||
$coursedata['summaryformat'] = FORMAT_MOODLE;
|
||||
$course = self::getDataGenerator()->create_course($coursedata);
|
||||
|
||||
$assigndata['course'] = $course->id;
|
||||
$assigndata['name'] = 'lightwork assignment';
|
||||
|
||||
$assign = self::getDataGenerator()->create_module('assign', $assigndata);
|
||||
|
||||
// Create a manual enrolment record.
|
||||
$manualenroldata['enrol'] = 'manual';
|
||||
$manualenroldata['status'] = 0;
|
||||
$manualenroldata['courseid'] = $course->id;
|
||||
$enrolid = $DB->insert_record('enrol', $manualenroldata);
|
||||
|
||||
// Create a teacher and give them capabilities.
|
||||
$context = context_course::instance($course->id);
|
||||
$roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id, 3);
|
||||
$context = context_module::instance($assign->id);
|
||||
$this->assignUserCapability('mod/assign:grade', $context->id, $roleid);
|
||||
|
||||
// Create the teacher's enrolment record.
|
||||
$userenrolmentdata['status'] = 0;
|
||||
$userenrolmentdata['enrolid'] = $enrolid;
|
||||
$userenrolmentdata['userid'] = $USER->id;
|
||||
$DB->insert_record('user_enrolments', $userenrolmentdata);
|
||||
|
||||
// Create a student.
|
||||
$student = self::getDataGenerator()->create_user();
|
||||
|
||||
// Create test user flags record.
|
||||
$userflags = array();
|
||||
$userflag['userid'] = $student->id;
|
||||
$userflag['workflowstate'] = 'inmarking';
|
||||
$userflag['allocatedmarker'] = $USER->id;
|
||||
$userflags = array($userflag);
|
||||
|
||||
$createduserflags = mod_assign_external::set_user_flags($assign->id, $userflags);
|
||||
// We need to execute the return values cleaning process to simulate the web service server.
|
||||
$createduserflags = external_api::clean_returnvalue(mod_assign_external::set_user_flags_returns(), $createduserflags);
|
||||
|
||||
$this->assertEquals($student->id, $createduserflags[0]['userid']);
|
||||
$createduserflag = $DB->get_record('assign_user_flags', array('id' => $createduserflags[0]['id']));
|
||||
|
||||
// Confirm that all data was inserted correctly.
|
||||
$this->assertEquals($student->id, $createduserflag->userid);
|
||||
$this->assertEquals($assign->id, $createduserflag->assignment);
|
||||
$this->assertEquals(0, $createduserflag->locked);
|
||||
$this->assertEquals(2, $createduserflag->mailed);
|
||||
$this->assertEquals(0, $createduserflag->extensionduedate);
|
||||
$this->assertEquals('inmarking', $createduserflag->workflowstate);
|
||||
$this->assertEquals($USER->id, $createduserflag->allocatedmarker);
|
||||
|
||||
// Create update data.
|
||||
$userflags = array();
|
||||
$userflag['userid'] = $createduserflag->userid;
|
||||
$userflag['workflowstate'] = 'readyforreview';
|
||||
$userflags = array($userflag);
|
||||
|
||||
$updateduserflags = mod_assign_external::set_user_flags($assign->id, $userflags);
|
||||
// We need to execute the return values cleaning process to simulate the web service server.
|
||||
$updateduserflags = external_api::clean_returnvalue(mod_assign_external::set_user_flags_returns(), $updateduserflags);
|
||||
|
||||
$this->assertEquals($student->id, $updateduserflags[0]['userid']);
|
||||
$updateduserflag = $DB->get_record('assign_user_flags', array('id' => $updateduserflags[0]['id']));
|
||||
|
||||
// Confirm that all data was updated correctly.
|
||||
$this->assertEquals($student->id, $updateduserflag->userid);
|
||||
$this->assertEquals($assign->id, $updateduserflag->assignment);
|
||||
$this->assertEquals(0, $updateduserflag->locked);
|
||||
$this->assertEquals(2, $updateduserflag->mailed);
|
||||
$this->assertEquals(0, $updateduserflag->extensionduedate);
|
||||
$this->assertEquals('readyforreview', $updateduserflag->workflowstate);
|
||||
$this->assertEquals($USER->id, $updateduserflag->allocatedmarker);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user