Ejemplo n.º 1
0
 /**
  * External function approve_plan.
  *
  * @param int $id The plan ID.
  * @return boolean
  */
 public static function approve_plan($id)
 {
     $params = self::validate_parameters(self::approve_plan_parameters(), array('id' => $id));
     $plan = api::read_plan($id);
     self::validate_context($plan->get_context());
     return api::approve_plan($plan);
 }
Ejemplo n.º 2
0
 /**
  * Testing approving the plan.
  */
 public function test_approve_plan()
 {
     $data = $this->setup_workflow_data();
     $dg = $data['dg'];
     $lpg = $data['lpg'];
     $user = $data['user'];
     $reviewer = $data['reviewer'];
     $otheruser = $data['otheruser'];
     $plan = $data['plan'];
     $tplplan = $data['tplplan'];
     // Set waiting for review.
     $tplplan->set_status(plan::STATUS_IN_REVIEW);
     $tplplan->update();
     $plan->set_status(plan::STATUS_IN_REVIEW);
     $plan->update();
     // Foreign user cannot do anything.
     $this->setUser($otheruser);
     try {
         api::approve_plan($plan);
         $this->fail('The user can not read the plan.');
     } catch (required_capability_exception $e) {
         $this->assertEquals('nopermissions', $e->errorcode);
     }
     // Can not change a plan based on a template.
     $this->setUser($reviewer);
     try {
         api::approve_plan($tplplan);
         $this->fail('The plan is based on a template.');
     } catch (coding_exception $e) {
         $this->assertRegExp('/Template plans are already approved./', $e->getMessage());
     }
     // Can not approve a plan already approved.
     $this->setUser($reviewer);
     $plan->set_status(plan::STATUS_ACTIVE);
     try {
         api::approve_plan($plan);
         $this->fail('The plan cannot be approved at this stage.');
     } catch (coding_exception $e) {
         $this->assertRegExp('/The plan cannot be approved at this stage./', $e->getMessage());
     }
     // Can not approve a plan already approved.
     $this->setUser($reviewer);
     $plan->set_status(plan::STATUS_COMPLETE);
     try {
         api::approve_plan($plan);
         $this->fail('The plan cannot be approved at this stage.');
     } catch (coding_exception $e) {
         $this->assertRegExp('/The plan cannot be approved at this stage./', $e->getMessage());
     }
     // Approve as the owner.
     $this->setUser($user);
     $plan->set_status(plan::STATUS_IN_REVIEW);
     try {
         api::approve_plan($plan);
         $this->fail('The user can not approve the plan.');
     } catch (required_capability_exception $e) {
         $this->assertEquals('nopermissions', $e->errorcode);
     }
     // Approve plan from in review.
     $this->setUser($reviewer);
     api::approve_plan($plan);
     $plan->read();
     $this->assertEquals(plan::STATUS_ACTIVE, $plan->get_status());
     // Approve plan by ID.
     $plan->set_status(plan::STATUS_IN_REVIEW);
     $plan->update();
     api::approve_plan($plan->get_id());
     $plan->read();
     $this->assertEquals(plan::STATUS_ACTIVE, $plan->get_status());
     // Approve plan from draft.
     $plan->set_status(plan::STATUS_DRAFT);
     $plan->update();
     api::approve_plan($plan);
     $plan->read();
     $this->assertEquals(plan::STATUS_ACTIVE, $plan->get_status());
     // Approve plan from waiting for review.
     $plan->set_status(plan::STATUS_WAITING_FOR_REVIEW);
     $plan->update();
     api::approve_plan($plan);
     $plan->read();
     $this->assertEquals(plan::STATUS_ACTIVE, $plan->get_status());
 }
Ejemplo n.º 3
0
 /**
  * Test the plan approved event.
  *
  */
 public function test_plan_approved()
 {
     $this->resetAfterTest(true);
     $this->setAdminUser();
     $dg = $this->getDataGenerator();
     $lpg = $this->getDataGenerator()->get_plugin_generator('core_competency');
     $user1 = $dg->create_user();
     $plan = $lpg->create_plan(array('userid' => $user1->id));
     $planid = $plan->get_id();
     $contextid = $plan->get_context()->id;
     // Trigger and capture the event.
     $sink = $this->redirectEvents();
     $result = api::approve_plan($plan->get_id());
     $this->assertTrue($result);
     // Get our event event.
     $events = $sink->get_events();
     $event = reset($events);
     $this->assertInstanceOf('\\core\\event\\competency_plan_approved', $event);
     $this->assertEquals($planid, $event->objectid);
     $this->assertEquals($contextid, $event->contextid);
     $this->assertEquals($plan->get_userid(), $event->relateduserid);
     $this->assertEventContextNotUsed($event);
     $this->assertDebuggingNotCalled();
 }