MDL-52745 tool_lp: For competency show evidences added before plan was completed.

This commit is contained in:
Serge Gauthier 2016-02-10 13:45:04 -05:00 committed by Frederic Massart
parent f194761408
commit b200c8c88c
3 changed files with 138 additions and 3 deletions

View File

@ -3666,14 +3666,30 @@ class api {
throw new required_capability_exception($context, 'tool/lp:usercompetencyview', 'nopermissions', '');
}
// TODO - handle archived plans.
$usercompetency = user_competency::get_record(array('userid' => $userid, 'competencyid' => $competencyid));
if (!$usercompetency) {
return array();
}
return evidence::get_records(array('usercompetencyid' => $usercompetency->get_id()), $sort, $order, $skip, $limit);
$plancompleted = false;
if ($planid != 0) {
$plan = new plan($planid);
if ($plan->get_status() == plan::STATUS_COMPLETE) {
$plancompleted = true;
}
}
if ($plancompleted) {
$select = 'usercompetencyid = :usercompetencyid AND timecreated <= :timecompeleted';
$params = array('usercompetencyid' => $usercompetency->get_id(), 'timecompeleted' => $plan->get_timemodified());
$orderby = $sort . ' ' . $order;
$evidences = evidence::get_records_select($select, $params, $orderby, '*', $skip, $limit);
} else {
$params = array('usercompetencyid' => $usercompetency->get_id());
$evidences = evidence::get_records($params, $sort, $order, $skip, $limit);
}
return $evidences;
}
/**

View File

@ -3609,4 +3609,66 @@ class tool_lp_api_testcase extends advanced_testcase {
$this->fail('Grading should not be allowed.');
}
}
/**
* Test list of evidences for plan completed and not completed.
*/
public function test_list_evidence() {
global $DB;
$this->resetAfterTest(true);
$dg = $this->getDataGenerator();
$lpg = $this->getDataGenerator()->get_plugin_generator('tool_lp');
$currenttime = time();
$syscontext = context_system::instance();
// Create users.
$user = $dg->create_user();
$this->setUser($user);
// Create a framework and assign competencies.
$framework = $lpg->create_framework();
$c1 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id()));
$c2 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id()));
// Create 2 user plans and add competency to each plan.
$p1 = $lpg->create_plan(array('userid' => $user->id));
$p2 = $lpg->create_plan(array('userid' => $user->id));
$pc1 = $lpg->create_plan_competency(array('planid' => $p1->get_id(), 'competencyid' => $c1->get_id()));
$pc2 = $lpg->create_plan_competency(array('planid' => $p2->get_id(), 'competencyid' => $c1->get_id()));
// Create user competency. Add user_evidence and associate it to the user competency.
$uc = $lpg->create_user_competency(array('userid' => $user->id, 'competencyid' => $c1->get_id()));
$ue = $lpg->create_user_evidence(array('userid' => $user->id));
$uec = $lpg->create_user_evidence_competency(array('userevidenceid' => $ue->get_id(), 'competencyid' => $c1->get_id()));
$e1 = $lpg->create_evidence(array('usercompetencyid' => $uc->get_id()));
// Check both plans as one evidence.
$this->assertEquals(1, count(api::list_evidence($user->id, $c1->get_id(), $p1->get_id())));
$this->assertEquals(1, count(api::list_evidence($user->id, $c1->get_id(), $p2->get_id())));
// Complete second plan.
$currenttime += 1;
$p2->set_status(plan::STATUS_COMPLETE);
$p2->update();
$plansql = "UPDATE {tool_lp_plan} SET timemodified = :currenttime WHERE id = :planid";
$DB->execute($plansql, array('currenttime' => $currenttime, 'planid' => $p2->get_id()));
// Add an other user evidence for the same competency.
$currenttime += 1;
$ue2 = $lpg->create_user_evidence(array('userid' => $user->id));
$uec2 = $lpg->create_user_evidence_competency(array('userevidenceid' => $ue2->get_id(), 'competencyid' => $c1->get_id()));
$e2 = $lpg->create_evidence(array('usercompetencyid' => $uc->get_id()));
$evidencesql = "UPDATE {tool_lp_evidence} SET timecreated = :currenttime WHERE id = :evidenceid";
$DB->execute($evidencesql, array('currenttime' => $currenttime, 'evidenceid' => $e2->get_id()));
// Check first plan which is not completed as all evidences.
$this->assertEquals(2, count(api::list_evidence($user->id, $c1->get_id(), $p1->get_id())));
// Check second plan completed before the new evidence as only the first evidence.
$listevidences = api::list_evidence($user->id, $c1->get_id(), $p2->get_id());
$this->assertEquals(1, count($listevidences));
$this->assertEquals($e1->get_id(), $listevidences[$e1->get_id()]->get_id());
}
}

View File

@ -36,6 +36,8 @@ use tool_lp\user_competency;
use tool_lp\user_competency_plan;
use tool_lp\plan_competency;
use tool_lp\evidence;
use tool_lp\user_evidence;
use tool_lp\user_evidence_competency;
defined('MOODLE_INTERNAL') || die();
@ -61,6 +63,9 @@ class tool_lp_generator extends component_generator_base {
/** @var int Number of created templates. */
protected $templatecount = 0;
/** @var int Number of created user_evidence. */
protected $userevidencecount = 0;
/** @var stdClass Scale that we might need. */
protected $scale;
@ -433,5 +438,57 @@ class tool_lp_generator extends component_generator_base {
return $cc;
}
/**
* Create a new user_evidence.
*
* @param array|stdClass $record
* @return evidence
*/
public function create_user_evidence($record = null) {
$this->userevidencecount++;
$i = $this->userevidencecount;
$record = (object) $record;
if (!isset($record->userid)) {
throw new coding_exception('The userid value is required.');
}
if (!isset($record->name)) {
$record->name = "Evidence $i name";
}
if (!isset($record->description)) {
$record->description = "Evidence $i description";
}
if (!isset($record->descriptionformat)) {
$record->descriptionformat = FORMAT_HTML;
}
$ue = new user_evidence(0, $record);
$ue->create();
return $ue;
}
/**
* Create a new user_evidence_comp.
*
* @param array|stdClass $record
* @return evidence
*/
public function create_user_evidence_competency($record = null) {
$record = (object) $record;
if (!isset($record->userevidenceid)) {
throw new coding_exception('The userevidenceid value is required.');
}
if (!isset($record->competencyid)) {
throw new coding_exception('The competencyid value is required.');
}
$uec = new user_evidence_competency(0, $record);
$uec->create();
return $uec;
}
}