diff --git a/admin/tool/lp/classes/api.php b/admin/tool/lp/classes/api.php index de63c7a8597..5b53b8b48ea 100644 --- a/admin/tool/lp/classes/api.php +++ b/admin/tool/lp/classes/api.php @@ -1882,6 +1882,12 @@ class api { // Wrap the suppression in a DB transaction. $transaction = $DB->start_delegated_transaction(); + // Delete plan competencies. + $plancomps = plan_competency::get_records(array('planid' => $plan->get_id())); + foreach ($plancomps as $plancomp) { + $plancomp->delete(); + } + // Delete archive user competencies if the status of the plan is complete. if ($plan->get_status() == plan::STATUS_COMPLETE) { self::remove_archived_user_competencies_in_plan($plan); diff --git a/admin/tool/lp/tests/externallib_test.php b/admin/tool/lp/tests/externallib_test.php index 6efa54b8ae4..d0251eb5169 100644 --- a/admin/tool/lp/tests/externallib_test.php +++ b/admin/tool/lp/tests/externallib_test.php @@ -27,10 +27,12 @@ global $CFG; require_once($CFG->dirroot . '/webservice/tests/helpers.php'); +use tool_lp\api; use tool_lp\external; use tool_lp\plan; use tool_lp\related_competency; use tool_lp\user_competency; +use tool_lp\user_competency_plan; use tool_lp\plan_competency; use tool_lp\template_competency; @@ -1347,6 +1349,34 @@ class tool_lp_external_testcase extends externallib_advanced_testcase { $this->assertTrue(external::delete_plan($plan4->id)); } + public function test_delete_plan_removes_relations() { + $this->setAdminUser(); + $dg = $this->getDataGenerator(); + $lpg = $dg->get_plugin_generator('tool_lp'); + + $user = $dg->create_user(); + $plan = $lpg->create_plan(array('userid' => $user->id)); + $framework = $lpg->create_framework(); + $comp1 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id())); + $comp2 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id())); + $comp3 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id())); + $pc1 = $lpg->create_plan_competency(array('planid' => $plan->get_id(), 'competencyid' => $comp1->get_id())); + $pc2 = $lpg->create_plan_competency(array('planid' => $plan->get_id(), 'competencyid' => $comp2->get_id())); + $pc3 = $lpg->create_plan_competency(array('planid' => $plan->get_id(), 'competencyid' => $comp3->get_id())); + + // Complete the plan to generate user_competency_plan entries. + api::complete_plan($plan); + + // Confirm the data we have. + $this->assertEquals(3, plan_competency::count_records(array('planid' => $plan->get_id()))); + $this->assertEquals(3, user_competency_plan::count_records(array('planid' => $plan->get_id(), 'userid' => $user->id))); + + // Delete the plan now. + api::delete_plan($plan->get_id()); + $this->assertEquals(0, plan_competency::count_records(array('planid' => $plan->get_id()))); + $this->assertEquals(0, user_competency_plan::count_records(array('planid' => $plan->get_id(), 'userid' => $user->id))); + } + public function test_list_plan_competencies() { $this->setUser($this->creator);