/** * Tests for the user_competency_course data when api::add_evidence() is invoked when * grading a user competency in a course. */ public function test_add_evidence_user_competency_course_grade_in_course() { global $USER; $this->resetAfterTest(true); $dg = $this->getDataGenerator(); // Create a course. $course = $dg->create_course(); $record = array('courseid' => $course->id, 'pushratingstouserplans' => false); $settings = new course_competency_settings(0, (object) $record); $settings->create(); $coursecontext = context_course::instance($course->id); // Create a student and enrol into the course. $student = $dg->create_user(); $studentarch = get_archetype_roles('student'); $studentrole = array_shift($studentarch); $dg->role_assign($studentrole->id, $student->id, $coursecontext->id); $dg->enrol_user($student->id, $course->id, $studentrole->id); // Create a competency for the course. $lpg = $dg->get_plugin_generator('core_competency'); $framework = $lpg->create_framework(); // Do not push ratings from course to user plans. $comp = $lpg->create_competency(array('competencyframeworkid' => $framework->get_id())); $lpg->create_course_competency(array('courseid' => $course->id, 'competencyid' => $comp->get_id())); // Query for user_competency_course data. $filterparams = array('userid' => $student->id, 'competencyid' => $comp->get_id(), 'courseid' => $course->id); // Add evidence that sets a grade to the course. $evidence = api::add_evidence($student->id, $comp, $coursecontext, evidence::ACTION_OVERRIDE, 'commentincontext', 'core', null, false, null, 3, $USER->id); // Get user competency course record. $usercompcourse = \core_competency\user_competency_course::get_record($filterparams); // There should be a user_competency_course object when adding a grade. $this->assertNotEmpty($usercompcourse); $grade = $evidence->get_grade(); $this->assertEquals($grade, $usercompcourse->get_grade()); $this->assertEquals(3, $usercompcourse->get_grade()); $proficiency = $comp->get_proficiency_of_grade($grade); $this->assertEquals($proficiency, $usercompcourse->get_proficiency()); // Confirm that the user competency's grade/proficiency has not been affected by the grade. $usercompetencyparams = ['userid' => $student->id, 'competencyid' => $comp->get_id()]; $usercompetency = \core_competency\user_competency::get_record($usercompetencyparams); $this->assertNotEmpty($usercompetency); $this->assertNotEquals($usercompcourse->get_grade(), $usercompetency->get_grade()); $this->assertNotEquals($usercompcourse->get_proficiency(), $usercompetency->get_proficiency()); }
/** * Process a course competency settings. * * @param array $data The data. */ public function process_course_competency_settings($data) { global $DB; $data = (object) $data; // We do not restore the course settings during merge. $target = $this->get_task()->get_target(); if ($target == backup::TARGET_CURRENT_ADDING || $target == backup::TARGET_EXISTING_ADDING) { return; } $courseid = $this->task->get_courseid(); $exists = \core_competency\course_competency_settings::record_exists_select('courseid = :courseid', array('courseid' => $courseid)); // Strangely the course settings already exist, let's just leave them as is then. if ($exists) { $this->log('Course competency settings not restored, existing settings have been found.', backup::LOG_WARNING); return; } $data = (object) array('courseid' => $courseid, 'pushratingstouserplans' => $data->pushratingstouserplans); $settings = new \core_competency\course_competency_settings(0, $data); $settings->create(); }
/** * Test update course competency settings. */ public function test_update_course_competency_settings() { $this->resetAfterTest(true); $dg = $this->getDataGenerator(); $course = $dg->create_course(); $roleid = $dg->create_role(); $noobroleid = $dg->create_role(); $context = context_course::instance($course->id); $compmanager = $this->getDataGenerator()->create_user(); $compnoob = $this->getDataGenerator()->create_user(); assign_capability('moodle/competency:coursecompetencyconfigure', CAP_ALLOW, $roleid, $context->id, true); assign_capability('moodle/competency:coursecompetencyview', CAP_ALLOW, $roleid, $context->id, true); assign_capability('moodle/competency:coursecompetencyview', CAP_ALLOW, $noobroleid, $context->id, true); role_assign($roleid, $compmanager->id, $context->id); role_assign($noobroleid, $compnoob->id, $context->id); $dg->enrol_user($compmanager->id, $course->id, $roleid); $dg->enrol_user($compnoob->id, $course->id, $noobroleid); $this->setUser($compmanager); // Start the test. $result = external::update_course_competency_settings($course->id, array('pushratingstouserplans' => true)); $settings = course_competency_settings::get_by_courseid($course->id); $this->assertTrue((bool) $settings->get_pushratingstouserplans()); $result = external::update_course_competency_settings($course->id, array('pushratingstouserplans' => false)); $settings = course_competency_settings::get_by_courseid($course->id); $this->assertFalse((bool) $settings->get_pushratingstouserplans()); $this->setUser($compnoob); $this->setExpectedException('required_capability_exception'); $result = external::update_course_competency_settings($course->id, array('pushratingstouserplans' => true)); }
/** * Update the competency settings for a course. * * Requires moodle/competency:coursecompetencyconfigure capability at the course context. * * @param int $courseid The course id * @param stdClass $settings List of settings. The only valid setting ATM is pushratginstouserplans (boolean). * @return bool */ public static function update_course_competency_settings($courseid, $settings) { static::require_enabled(); $settings = (object) $settings; // Get all the valid settings. $pushratingstouserplans = isset($settings->pushratingstouserplans) ? $settings->pushratingstouserplans : false; // First we do a permissions check. if (!course_competency_settings::can_manage_course($courseid)) { $context = context_course::instance($courseid); throw new required_capability_exception($context, 'moodle/competency:coursecompetencyconfigure', 'nopermissions', ''); } $exists = course_competency_settings::get_record(array('courseid' => $courseid)); // Now update or insert. if ($exists) { $settings = $exists; $settings->set_pushratingstouserplans($pushratingstouserplans); return $settings->update(); } else { $data = (object) array('courseid' => $courseid, 'pushratingstouserplans' => $pushratingstouserplans); $settings = new course_competency_settings(0, $data); $result = $settings->create(); return !empty($result); } }
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)); }