MDL-52755 tool_lp: Preserve competencies sortorder when plan completed
This commit is contained in:
committed by
Frederic Massart
parent
32fa431e0f
commit
af3fa58f3c
@@ -3552,6 +3552,7 @@ class api {
|
||||
$competencies = $plan->get_competencies();
|
||||
$usercompetencies = user_competency::get_multiple($plan->get_userid(), $competencies);
|
||||
|
||||
$i = 0;
|
||||
foreach ($competencies as $competency) {
|
||||
$found = false;
|
||||
|
||||
@@ -3561,6 +3562,7 @@ class api {
|
||||
|
||||
$ucprecord = $uc->to_record();
|
||||
$ucprecord->planid = $plan->get_id();
|
||||
$ucprecord->sortorder = $i;
|
||||
unset($ucprecord->id);
|
||||
unset($ucprecord->status);
|
||||
unset($ucprecord->reviewerid);
|
||||
@@ -3577,8 +3579,10 @@ class api {
|
||||
if (!$found) {
|
||||
$usercompetencyplan = user_competency_plan::create_relation($plan->get_userid(), $competency->get_id(),
|
||||
$plan->get_id());
|
||||
$usercompetencyplan->set_sortorder($i);
|
||||
$usercompetencyplan->create();
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -63,6 +63,10 @@ class user_competency_plan extends persistent {
|
||||
'planid' => array(
|
||||
'type' => PARAM_INT,
|
||||
),
|
||||
'sortorder' => array(
|
||||
'type' => PARAM_INT,
|
||||
'default' => null,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -171,14 +175,13 @@ class user_competency_plan extends persistent {
|
||||
public static function list_competencies($planid, $userid) {
|
||||
global $DB;
|
||||
|
||||
// TODO Fix ordering. The order set in template_competency, or plan_competency is not applied here.
|
||||
// Perhaps we should have copied the sortorder here as well.
|
||||
$sql = 'SELECT c.*
|
||||
FROM {' . competency::TABLE . '} c
|
||||
JOIN {' . self::TABLE . '} ucp
|
||||
ON ucp.competencyid = c.id
|
||||
AND ucp.userid = :userid
|
||||
WHERE ucp.planid = :planid';
|
||||
WHERE ucp.planid = :planid
|
||||
ORDER BY ucp.sortorder ASC';
|
||||
$params = array('userid' => $userid, 'planid' => $planid);
|
||||
|
||||
$results = $DB->get_recordset_sql($sql, $params);
|
||||
|
||||
@@ -191,6 +191,7 @@
|
||||
<FIELD NAME="planid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="Plan associated to the user."/>
|
||||
<FIELD NAME="proficiency" TYPE="int" LENGTH="2" NOTNULL="false" SEQUENCE="false" COMMENT="Indicate if the competency is proficient not."/>
|
||||
<FIELD NAME="grade" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" COMMENT="Grade assigned to the competency."/>
|
||||
<FIELD NAME="sortorder" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" COMMENT="Relative sort order"/>
|
||||
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
|
||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="usermodified" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
|
||||
|
||||
@@ -713,5 +713,20 @@ function xmldb_tool_lp_upgrade($oldversion) {
|
||||
upgrade_plugin_savepoint(true, 2016020900, 'tool', 'lp');
|
||||
}
|
||||
|
||||
if ($oldversion < 2016020901) {
|
||||
|
||||
// Define field note to be added to tool_lp_user_competency_plan.
|
||||
$table = new xmldb_table('tool_lp_user_competency_plan');
|
||||
$field = new xmldb_field('sortorder', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
|
||||
|
||||
// Conditionally launch add field note.
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
|
||||
// Lp savepoint reached.
|
||||
upgrade_plugin_savepoint(true, 2016020901, 'tool', 'lp');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1509,6 +1509,96 @@ class tool_lp_api_testcase extends advanced_testcase {
|
||||
$this->assertEquals(0, \tool_lp\user_competency_plan::count_records());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test completing plan does not change the order of competencies.
|
||||
*/
|
||||
public function test_complete_plan_doesnot_change_order() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
$this->setAdminUser();
|
||||
$dg = $this->getDataGenerator();
|
||||
$lpg = $this->getDataGenerator()->get_plugin_generator('tool_lp');
|
||||
|
||||
$syscontext = context_system::instance();
|
||||
|
||||
// Create users and roles for the test.
|
||||
$user = $dg->create_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()));
|
||||
$c3 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id()));
|
||||
|
||||
// Create two plans and assign competencies.
|
||||
$plan = $lpg->create_plan(array('userid' => $user->id));
|
||||
|
||||
$lpg->create_plan_competency(array('planid' => $plan->get_id(), 'competencyid' => $c1->get_id()));
|
||||
$lpg->create_plan_competency(array('planid' => $plan->get_id(), 'competencyid' => $c2->get_id()));
|
||||
$lpg->create_plan_competency(array('planid' => $plan->get_id(), 'competencyid' => $c3->get_id()));
|
||||
|
||||
// Changing competencies order in plan competency.
|
||||
api::reorder_plan_competency($plan->get_id(), $c1->get_id(), $c3->get_id());
|
||||
|
||||
$competencies = api::list_plan_competencies($plan);
|
||||
$this->assertEquals($c2->get_id(), $competencies[0]->competency->get_id());
|
||||
$this->assertEquals($c3->get_id(), $competencies[1]->competency->get_id());
|
||||
$this->assertEquals($c1->get_id(), $competencies[2]->competency->get_id());
|
||||
|
||||
// Completing plan.
|
||||
api::complete_plan($plan);
|
||||
|
||||
$competencies = api::list_plan_competencies($plan);
|
||||
|
||||
// Completing plan does not change order.
|
||||
$this->assertEquals($c2->get_id(), $competencies[0]->competency->get_id());
|
||||
$this->assertEquals($c3->get_id(), $competencies[1]->competency->get_id());
|
||||
$this->assertEquals($c1->get_id(), $competencies[2]->competency->get_id());
|
||||
|
||||
// Testing plan based on template.
|
||||
$template = $lpg->create_template();
|
||||
$framework = $lpg->create_framework();
|
||||
$c1 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id()));
|
||||
$c2 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id()));
|
||||
$c3 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id()));
|
||||
|
||||
$lpg->create_template_competency(array(
|
||||
'templateid' => $template->get_id(),
|
||||
'competencyid' => $c1->get_id()
|
||||
));
|
||||
$lpg->create_template_competency(array(
|
||||
'templateid' => $template->get_id(),
|
||||
'competencyid' => $c2->get_id()
|
||||
));
|
||||
$lpg->create_template_competency(array(
|
||||
'templateid' => $template->get_id(),
|
||||
'competencyid' => $c3->get_id()
|
||||
));
|
||||
// Reorder competencies in template.
|
||||
api::reorder_template_competency($template->get_id(), $c1->get_id(), $c3->get_id());
|
||||
|
||||
// Create plan from template.
|
||||
$plan = api::create_plan_from_template($template->get_id(), $user->id);
|
||||
|
||||
$competencies = api::list_plan_competencies($plan);
|
||||
|
||||
// Completing plan does not change order.
|
||||
$this->assertEquals($c2->get_id(), $competencies[0]->competency->get_id());
|
||||
$this->assertEquals($c3->get_id(), $competencies[1]->competency->get_id());
|
||||
$this->assertEquals($c1->get_id(), $competencies[2]->competency->get_id());
|
||||
|
||||
// Completing plan.
|
||||
api::complete_plan($plan);
|
||||
|
||||
$competencies = api::list_plan_competencies($plan);
|
||||
|
||||
// Completing plan does not change order.
|
||||
$this->assertEquals($c2->get_id(), $competencies[0]->competency->get_id());
|
||||
$this->assertEquals($c3->get_id(), $competencies[1]->competency->get_id());
|
||||
$this->assertEquals($c1->get_id(), $competencies[2]->competency->get_id());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test remove plan and the managing of archived user competencies.
|
||||
*/
|
||||
|
||||
@@ -332,6 +332,10 @@ class tool_lp_generator extends component_generator_base {
|
||||
throw new coding_exception('The planid value is required.');
|
||||
}
|
||||
|
||||
if (!isset($record->sortorder)) {
|
||||
$record->sortorder = 0;
|
||||
}
|
||||
|
||||
$usercompetencyplan = new user_competency_plan(0, $record);
|
||||
$usercompetencyplan->create();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user