Esempio n. 1
0
 protected function get_other_values(renderer_base $output)
 {
     $other = array();
     if (!empty($this->related['actionuser'])) {
         $exporter = new user_summary_exporter($this->related['actionuser']);
         $actionuser = $exporter->export($output);
         $other['actionuser'] = $actionuser;
     }
     $other['description'] = $this->persistent->get_description();
     $other['userdate'] = userdate($this->persistent->get_timecreated());
     if ($this->persistent->get_grade() === null) {
         $gradename = '-';
     } else {
         $gradename = $this->related['scale']->scale_items[$this->persistent->get_grade() - 1];
     }
     $other['gradename'] = $gradename;
     // Try to guess the user from the user competency.
     $userid = null;
     if ($this->related['usercompetency']) {
         $userid = $this->related['usercompetency']->get_userid();
     } else {
         if ($this->related['usercompetencyplan']) {
             $userid = $this->related['usercompetencyplan']->get_userid();
         } else {
             $uc = user_competency::get_record(['id' => $this->persistent->get_usercompetencyid()]);
             $userid = $uc->get_userid();
         }
     }
     $other['candelete'] = evidence::can_delete_user($userid);
     return $other;
 }
Esempio n. 2
0
 /**
  * Assert that a competency was graded in a course.
  *
  * @param int $courseid The course ID.
  * @param int $userid The user ID.
  * @param int $compid The competency ID.
  * @param int $grade The grade.
  */
 protected function assertSuccessWithGradeCompetencyInCourse($courseid, $userid, $compid, $grade = 1)
 {
     $beforecount = evidence::count_records();
     api::grade_competency_in_course($courseid, $userid, $compid, $grade);
     $this->assertEquals($beforecount + 1, evidence::count_records());
     $uc = user_competency::get_record(array('userid' => $userid, 'competencyid' => $compid));
     $records = evidence::get_records(array(), 'id', 'DESC', 0, 1);
     $evidence = array_pop($records);
     $this->assertEquals($uc->get_id(), $evidence->get_usercompetencyid());
 }
Esempio n. 3
0
 /**
  * Apply the competency rules from a user competency.
  *
  * The user competency passed should be one that was recently marked as complete.
  * A user competency is considered 'complete' when it's proficiency value is true.
  *
  * This method will check if the parent of this usercompetency's competency has any
  * rules and if so will see if they match. When matched it will take the required
  * step to add evidence and trigger completion, etc...
  *
  * @param  user_competency $usercompetency The user competency recently completed.
  * @param  competency|null $competency     The competency of the user competency, useful to avoid unnecessary read.
  * @return void
  */
 protected static function apply_competency_rules_from_usercompetency(user_competency $usercompetency, competency $competency = null)
 {
     // Perform some basic checks.
     if (!$usercompetency->get_proficiency()) {
         throw new coding_exception('The user competency passed is not completed.');
     }
     if ($competency === null) {
         $competency = $usercompetency->get_competency();
     }
     if ($competency->get_id() != $usercompetency->get_competencyid()) {
         throw new coding_exception('Mismatch between user competency and competency.');
     }
     // Fetch the parent.
     $parent = $competency->get_parent();
     if ($parent === null) {
         return;
     }
     // The parent should have a rule, and a meaningful outcome.
     $ruleoutcome = $parent->get_ruleoutcome();
     if ($ruleoutcome == competency::OUTCOME_NONE) {
         return;
     }
     $rule = $parent->get_rule_object();
     if ($rule === null) {
         return;
     }
     // Fetch or create the user competency for the parent.
     $userid = $usercompetency->get_userid();
     $parentuc = user_competency::get_record(array('userid' => $userid, 'competencyid' => $parent->get_id()));
     if (!$parentuc) {
         $parentuc = user_competency::create_relation($userid, $parent->get_id());
         $parentuc->create();
     }
     // Does the rule match?
     if (!$rule->matches($parentuc)) {
         return;
     }
     // Figuring out what to do.
     $recommend = false;
     if ($ruleoutcome == competency::OUTCOME_EVIDENCE) {
         $action = evidence::ACTION_LOG;
     } else {
         if ($ruleoutcome == competency::OUTCOME_RECOMMEND) {
             $action = evidence::ACTION_LOG;
             $recommend = true;
         } else {
             if ($ruleoutcome == competency::OUTCOME_COMPLETE) {
                 $action = evidence::ACTION_COMPLETE;
             } else {
                 throw new moodle_exception('Unexpected rule outcome: ' + $ruleoutcome);
             }
         }
     }
     // Finally add an evidence.
     static::add_evidence($userid, $parent, $parent->get_context()->id, $action, 'evidence_competencyrule', 'core_competency', null, $recommend);
 }
 public function test_who_can_change_settings()
 {
     global $CFG, $DB;
     $this->resetAfterTest(true);
     $syscontext = context_system::instance();
     $dg = $this->getDataGenerator();
     $lpg = $dg->get_plugin_generator('core_competency');
     $role = create_role('Settings changer role', 'settingschanger', 'Someone who can change course competency settings');
     assign_capability('moodle/competency:coursecompetencyconfigure', CAP_ALLOW, $role, $syscontext->id);
     assign_capability('moodle/competency:competencygrade', CAP_ALLOW, $role, $syscontext->id);
     assign_capability('moodle/competency:coursecompetencyview', CAP_ALLOW, $role, $syscontext->id);
     assign_capability('moodle/competency:planview', CAP_ALLOW, $role, $syscontext->id);
     $gradedrole = create_role('Graded role', 'graded', 'Someone who can be graded');
     assign_capability('moodle/competency:coursecompetencygradable', CAP_ALLOW, $gradedrole, $syscontext->id);
     $c1 = $dg->create_course();
     $u1 = $dg->create_user();
     $u2 = $dg->create_user();
     $u3 = $dg->create_user();
     $framework = $lpg->create_framework();
     $comp1 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id()));
     $comp2 = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id()));
     $lpg->create_course_competency(array('competencyid' => $comp1->get_id(), 'courseid' => $c1->id));
     $lpg->create_course_competency(array('competencyid' => $comp2->get_id(), 'courseid' => $c1->id));
     // Enrol the user.
     $dg->enrol_user($u1->id, $c1->id);
     role_assign($gradedrole, $u1->id, $syscontext->id);
     // Assign roles.
     role_assign($role, $u2->id, $syscontext->id);
     $this->setUser($u2);
     set_config('pushcourseratingstouserplans', true, 'core_competency');
     $coursesettings = course_competency_settings::get_by_courseid($c1->id);
     $this->assertTrue((bool) $coursesettings->get_pushratingstouserplans());
     set_config('pushcourseratingstouserplans', false, 'core_competency');
     $coursesettings = course_competency_settings::get_by_courseid($c1->id);
     $this->assertFalse((bool) $coursesettings->get_pushratingstouserplans());
     api::update_course_competency_settings($c1->id, (object) array('pushratingstouserplans' => true));
     $coursesettings = course_competency_settings::get_by_courseid($c1->id);
     $this->assertTrue((bool) $coursesettings->get_pushratingstouserplans());
     set_config('pushcourseratingstouserplans', true, 'core_competency');
     api::update_course_competency_settings($c1->id, (object) array('pushratingstouserplans' => false));
     $coursesettings = course_competency_settings::get_by_courseid($c1->id);
     $this->assertFalse((bool) $coursesettings->get_pushratingstouserplans());
     // Right now the setting is false.
     api::grade_competency_in_course($c1->id, $u1->id, $comp1->get_id(), 1, 'Note');
     $filterparams = array('userid' => $u1->id, 'competencyid' => $comp1->get_id());
     $usercompcourse = \core_competency\user_competency_course::get_record($filterparams);
     $usercomp = \core_competency\user_competency::get_record($filterparams);
     // No grade in plan - only a grade in the course.
     $this->assertEmpty($usercomp->get_grade());
     $this->assertEquals(1, $usercompcourse->get_grade());
     api::update_course_competency_settings($c1->id, (object) array('pushratingstouserplans' => true));
     api::grade_competency_in_course($c1->id, $u1->id, $comp1->get_id(), 2, 'Note 2');
     $filterparams = array('userid' => $u1->id, 'competencyid' => $comp1->get_id());
     $usercompcourse = \core_competency\user_competency_course::get_record($filterparams);
     $usercomp = \core_competency\user_competency::get_record($filterparams);
     // Updated grade in plan - updated grade in the course.
     $this->assertEquals(2, $usercomp->get_grade());
     $this->assertEquals(2, $usercompcourse->get_grade());
     $this->setUser($u3);
     $this->setExpectedException('required_capability_exception');
     api::update_course_competency_settings($c1->id, (object) array('pushratingstouserplans' => false));
 }