/** * Test the user competency plan viewed event. * */ public function test_user_competency_plan_viewed() { $this->resetAfterTest(true); $this->setAdminUser(); $dg = $this->getDataGenerator(); $lpg = $this->getDataGenerator()->get_plugin_generator('core_competency'); $user = $dg->create_user(); $plan = $lpg->create_plan(array('userid' => $user->id)); $fr = $lpg->create_framework(); $c = $lpg->create_competency(array('competencyframeworkid' => $fr->get_id())); $ucp = $lpg->create_user_competency_plan(array('userid' => $user->id, 'competencyid' => $c->get_id(), 'planid' => $plan->get_id())); // Can not log the event for user competency using non completed plan. try { api::user_competency_plan_viewed($ucp); $this->fail('To log the user competency in non-completed plan ' . 'use user_competency_viewed_in_plan method.'); } catch (coding_exception $e) { $this->assertRegExp('/To log the user competency in non-completed plan ' . 'use user_competency_viewed_in_plan method./', $e->getMessage()); } // Complete the plan. api::complete_plan($plan); // Trigger and capture the event. $sink = $this->redirectEvents(); api::user_competency_plan_viewed($ucp); // Get our event event. $events = $sink->get_events(); $event = reset($events); // Check that the event data is valid. $this->assertInstanceOf('\\core\\event\\competency_user_competency_plan_viewed', $event); $this->assertEquals($ucp->get_id(), $event->objectid); $this->assertEquals($ucp->get_context()->id, $event->contextid); $this->assertEquals($ucp->get_userid(), $event->relateduserid); $this->assertEquals($plan->get_id(), $event->other['planid']); $this->assertEquals($c->get_id(), $event->other['competencyid']); $this->assertEventContextNotUsed($event); $this->assertDebuggingNotCalled(); // Test validation. $params = array('objectid' => $ucp->get_id(), 'contextid' => $ucp->get_context()->id, 'other' => null); // Other value null. try { \core\event\competency_user_competency_plan_viewed::create($params)->trigger(); $this->fail('The \'competencyid\' and \'planid\' values must be set.'); } catch (coding_exception $e) { $this->assertRegExp("/The 'competencyid' and 'planid' values must be set./", $e->getMessage()); } $params['other']['anythingelse'] = ''; // Missing competencyid. try { \core\event\competency_user_competency_plan_viewed::create($params)->trigger(); $this->fail('The \'competencyid\' value must be set.'); } catch (coding_exception $e) { $this->assertRegExp("/The 'competencyid' value must be set./", $e->getMessage()); } $params['other']['competencyid'] = $c->get_id(); // Missing planid. try { \core\event\competency_user_competency_plan_viewed::create($params)->trigger(); $this->fail('The \'planid\' value must be set.'); } catch (coding_exception $e) { $this->assertRegExp("/The 'planid' value must be set./", $e->getMessage()); } }
/** * Log user competency plan viewed event. * * @param int $competencyid The competency ID. * @param int $userid The user ID. * @param int $planid The plan ID. * @return boolean */ public static function user_competency_plan_viewed($competencyid, $userid, $planid) { $params = self::validate_parameters(self::user_competency_viewed_in_plan_parameters(), array('competencyid' => $competencyid, 'userid' => $userid, 'planid' => $planid)); $pl = api::get_plan_competency($params['planid'], $params['competencyid']); $result = api::user_competency_plan_viewed($pl->usercompetencyplan); return $result; }
require_login(null, false); if (isguestuser()) { throw new require_login_exception('Guests are not allowed here.'); } \core_competency\api::require_enabled(); $params = array('userid' => $userid, 'competencyid' => $competencyid); $params['planid'] = $planid; $plan = \core_competency\api::read_plan($planid); $url = new moodle_url('/admin/tool/lp/user_competency_in_plan.php', $params); $competency = new \core_competency\competency($competencyid); $framework = $competency->get_framework(); list($title, $subtitle) = \tool_lp\page_helper::setup_for_plan($userid, $url, $plan); $output = $PAGE->get_renderer('tool_lp'); echo $output->header(); echo $output->heading($title); // User competency plan navigation. $baseurl = new moodle_url('/admin/tool/lp/user_competency_in_plan.php'); $nav = new \tool_lp\output\competency_plan_navigation($userid, $competencyid, $planid, $baseurl); echo $output->render($nav); $page = new \tool_lp\output\user_competency_summary_in_plan($competencyid, $planid); echo $output->render($page); // Trigger the viewed event. $pc = \core_competency\api::get_plan_competency($plan, $competency->get_id()); if ($plan->get_status() == \core_competency\plan::STATUS_COMPLETE) { $usercompetencyplan = $pc->usercompetencyplan; \core_competency\api::user_competency_plan_viewed($usercompetencyplan); } else { $usercompetency = $pc->usercompetency; \core_competency\api::user_competency_viewed_in_plan($usercompetency, $plan->get_id()); } echo $output->footer();