MDL-59248 mod_workshop: New API check_examples_assessed_before_assessment

For consistency I renamed the old check_examples_assessed function to
check_examples_assessed_before_submission.
I also call the new function in the existing
get_workshop_access_information external function.
This commit is contained in:
Juan Leyva
2017-10-03 08:51:29 +02:00
parent 086d592d43
commit 86928d2a7c
5 changed files with 53 additions and 32 deletions
+5 -21
View File
@@ -69,31 +69,15 @@ if ($isreviewer and $workshop->assessing_allowed($USER->id)) {
}
// check that all required examples have been assessed by the user
if ($assessmenteditable and $workshop->useexamples and $workshop->examplesmode == workshop::EXAMPLES_BEFORE_ASSESSMENT
and !has_capability('mod/workshop:manageexamples', $workshop->context)) {
// the reviewer must have submitted their own submission
$reviewersubmission = $workshop->get_submission_by_author($assessment->reviewerid);
$output = $PAGE->get_renderer('mod_workshop');
if (!$reviewersubmission) {
// no money, no love
$assessmenteditable = false;
if ($assessmenteditable) {
list($assessed, $notice) = $workshop->check_examples_assessed_before_assessment($assessment->reviewerid);
if (!$assessed) {
echo $output->header();
echo $output->heading(format_string($workshop->name));
notice(get_string('exampleneedsubmission', 'workshop'), new moodle_url('/mod/workshop/view.php', array('id' => $cm->id)));
notice(get_string($notice, 'workshop'), new moodle_url('/mod/workshop/view.php', array('id' => $cm->id)));
echo $output->footer();
exit;
} else {
$examples = $workshop->get_examples_for_reviewer($assessment->reviewerid);
foreach ($examples as $exampleid => $example) {
if (is_null($example->grade)) {
$assessmenteditable = false;
echo $output->header();
echo $output->heading(format_string($workshop->name));
notice(get_string('exampleneedassessed', 'workshop'), new moodle_url('/mod/workshop/view.php', array('id' => $cm->id)));
echo $output->footer();
exit;
}
}
}
}
+10 -5
View File
@@ -199,7 +199,8 @@ class mod_workshop_external extends external_api {
if (is_null($result['assessingexamplesallowed'])) {
$result['assessingexamplesallowed'] = false;
}
$result['examplesassessed'] = $workshop->check_examples_assessed($USER->id);
$result['examplesassessedbeforesubmission'] = $workshop->check_examples_assessed_before_submission($USER->id);
list($result['examplesassessedbeforeassessment'], $code) = $workshop->check_examples_assessed_before_assessment($USER->id);
$result['warnings'] = array();
return $result;
@@ -222,8 +223,12 @@ class mod_workshop_external extends external_api {
'Is the user allowed to create/edit his assessments?'),
'assessingexamplesallowed' => new external_value(PARAM_BOOL,
'Are reviewers allowed to create/edit their assessments of the example submissions?.'),
'examplesassessed' => new external_value(PARAM_BOOL,
'Whether the given user has assessed all his required examples (always true if there are no examples to assess).'),
'examplesassessedbeforesubmission' => new external_value(PARAM_BOOL,
'Whether the given user has assessed all his required examples before submission
(always true if there are not examples to assess or not configured to check before submission).'),
'examplesassessedbeforeassessment' => new external_value(PARAM_BOOL,
'Whether the given user has assessed all his required examples before assessment
(always true if there are not examples to assessor not configured to check before assessment).'),
'warnings' => new external_warnings()
);
@@ -476,7 +481,7 @@ class mod_workshop_external extends external_api {
// Check if we can submit now.
$canaddsubmission = $workshop->creating_submission_allowed($USER->id);
$canaddsubmission = $canaddsubmission && $workshop->check_examples_assessed($USER->id);
$canaddsubmission = $canaddsubmission && $workshop->check_examples_assessed_before_submission($USER->id);
if (!$canaddsubmission) {
throw new moodle_exception('nopermissions', 'error', '', 'add submission');
}
@@ -592,7 +597,7 @@ class mod_workshop_external extends external_api {
// Check if we can update the submission.
$canupdatesubmission = $submission->authorid == $USER->id;
$canupdatesubmission = $canupdatesubmission && $workshop->modifying_submission_allowed($USER->id);
$canupdatesubmission = $canupdatesubmission && $workshop->check_examples_assessed($USER->id);
$canupdatesubmission = $canupdatesubmission && $workshop->check_examples_assessed_before_submission($USER->id);
if (!$canupdatesubmission) {
throw new moodle_exception('nopermissions', 'error', '', 'update submission');
}
+31 -2
View File
@@ -2767,13 +2767,13 @@ class workshop {
}
/**
* Check whether the given user has assessed all his required examples.
* Check whether the given user has assessed all his required examples before submission.
*
* @param int $userid the user to check
* @return bool false if there are examples missing assessment, true otherwise.
* @since Moodle 3.4
*/
public function check_examples_assessed($userid) {
public function check_examples_assessed_before_submission($userid) {
if ($this->useexamples and $this->examplesmode == self::EXAMPLES_BEFORE_SUBMISSION
and !has_capability('mod/workshop:manageexamples', $this->context)) {
@@ -2792,6 +2792,35 @@ class workshop {
return true;
}
/**
* Check that all required examples have been assessed by the given user.
*
* @param stdClass $userid the user (reviewer) to check
* @return mixed bool|state false and notice code if there are examples missing assessment, true otherwise.
* @since Moodle 3.4
*/
public function check_examples_assessed_before_assessment($userid) {
if ($this->useexamples and $this->examplesmode == self::EXAMPLES_BEFORE_ASSESSMENT
and !has_capability('mod/workshop:manageexamples', $this->context)) {
// The reviewer must have submitted their own submission.
$reviewersubmission = $this->get_submission_by_author($userid);
if (!$reviewersubmission) {
// No money, no love.
return array(false, 'exampleneedsubmission');
} else {
$examples = $this->get_examples_for_reviewer($userid);
foreach ($examples as $exampleid => $example) {
if (is_null($example->grade)) {
return array(false, 'exampleneedassessed');
}
}
}
}
return array(true, null);
}
/**
* Trigger module viewed event and set the module viewed for completion.
*
+1 -1
View File
@@ -103,7 +103,7 @@ if ($submission->id and !$workshop->modifying_submission_allowed($USER->id)) {
$canviewall = $canviewall && $workshop->check_group_membership($submission->authorid);
$editable = $editable && $workshop->check_examples_assessed($USER->id);
$editable = ($editable && $workshop->check_examples_assessed_before_submission($USER->id));
$edit = ($editable and $edit);
if (!$candeleteall and $ownsubmission and $editable) {
+6 -3
View File
@@ -242,7 +242,8 @@ class mod_workshop_external_testcase extends externallib_advanced_testcase {
$this->assertFalse($result['modifyingsubmissionallowed']);
$this->assertFalse($result['assessingallowed']);
$this->assertFalse($result['assessingexamplesallowed']);
$this->assertTrue($result['examplesassessed']);
$this->assertTrue($result['examplesassessedbeforesubmission']);
$this->assertTrue($result['examplesassessedbeforeassessment']);
// Switch phase.
$workshop = new workshop($this->workshop, $this->cm, $this->course);
@@ -254,7 +255,8 @@ class mod_workshop_external_testcase extends externallib_advanced_testcase {
$this->assertTrue($result['modifyingsubmissionallowed']);
$this->assertFalse($result['assessingallowed']);
$this->assertFalse($result['assessingexamplesallowed']);
$this->assertTrue($result['examplesassessed']);
$this->assertTrue($result['examplesassessedbeforesubmission']);
$this->assertTrue($result['examplesassessedbeforeassessment']);
// Switch to next (to assessment).
$workshop = new workshop($this->workshop, $this->cm, $this->course);
@@ -266,7 +268,8 @@ class mod_workshop_external_testcase extends externallib_advanced_testcase {
$this->assertFalse($result['modifyingsubmissionallowed']);
$this->assertTrue($result['assessingallowed']);
$this->assertFalse($result['assessingexamplesallowed']);
$this->assertTrue($result['examplesassessed']);
$this->assertTrue($result['examplesassessedbeforesubmission']);
$this->assertTrue($result['examplesassessedbeforeassessment']);
}
/**