/** * Lists user plans. * * @param int $userid * @return \core_competency\plan[] */ public static function list_user_plans($userid) { global $DB, $USER; static::require_enabled(); $select = 'userid = :userid'; $params = array('userid' => $userid); $context = context_user::instance($userid); // Check that we can read something here. if (!plan::can_read_user($userid) && !plan::can_read_user_draft($userid)) { throw new required_capability_exception($context, 'moodle/competency:planview', 'nopermissions', ''); } // The user cannot view the drafts. if (!plan::can_read_user_draft($userid)) { list($insql, $inparams) = $DB->get_in_or_equal(plan::get_draft_statuses(), SQL_PARAMS_NAMED, 'param', false); $select .= " AND status {$insql}"; $params += $inparams; } // The user cannot view the non-drafts. if (!plan::can_read_user($userid)) { list($insql, $inparams) = $DB->get_in_or_equal(array(plan::STATUS_ACTIVE, plan::STATUS_COMPLETE), SQL_PARAMS_NAMED, 'param', false); $select .= " AND status {$insql}"; $params += $inparams; } return plan::get_records_select($select, $params, 'name ASC'); }
public function test_can_read_user_draft() { $this->resetAfterTest(true); $read = create_role('Read', 'read', 'Plan readr'); $readown = create_role('Readown', 'readown', 'Own plan readr'); $readdraft = create_role('Readdraft', 'readdraft', 'Draft plan readr'); $readowndraft = create_role('Readowndraft', 'readowndraft', 'Own draft plan readr'); $u1 = $this->getDataGenerator()->create_user(); $u2 = $this->getDataGenerator()->create_user(); $u3 = $this->getDataGenerator()->create_user(); $u4 = $this->getDataGenerator()->create_user(); $u5 = $this->getDataGenerator()->create_user(); $syscontext = context_system::instance(); $u1context = context_user::instance($u1->id); $u2context = context_user::instance($u2->id); $u3context = context_user::instance($u3->id); $u4context = context_user::instance($u4->id); $u5context = context_user::instance($u5->id); assign_capability('moodle/competency:planview', CAP_ALLOW, $read, $syscontext->id); assign_capability('moodle/competency:planviewown', CAP_ALLOW, $readown, $syscontext->id); assign_capability('moodle/competency:planviewdraft', CAP_ALLOW, $readdraft, $syscontext->id); assign_capability('moodle/competency:planviewowndraft', CAP_ALLOW, $readowndraft, $syscontext->id); assign_capability('moodle/competency:planviewown', CAP_PROHIBIT, $readowndraft, $syscontext->id); role_assign($read, $u1->id, $syscontext->id); role_assign($readown, $u2->id, $syscontext->id); role_assign($readdraft, $u3->id, $syscontext->id); role_assign($readdraft, $u4->id, $u2context->id); role_assign($readowndraft, $u5->id, $syscontext->id); accesslib_clear_all_caches_for_unit_testing(); $this->setUser($u1); $this->assertFalse(plan::can_read_user_draft($u1->id)); $this->assertFalse(plan::can_read_user_draft($u2->id)); $this->assertFalse(plan::can_read_user_draft($u3->id)); $this->assertFalse(plan::can_read_user_draft($u4->id)); $this->assertFalse(plan::can_read_user_draft($u5->id)); $this->setUser($u2); $this->assertFalse(plan::can_read_user_draft($u1->id)); $this->assertFalse(plan::can_read_user_draft($u2->id)); $this->assertFalse(plan::can_read_user_draft($u3->id)); $this->assertFalse(plan::can_read_user_draft($u4->id)); $this->assertFalse(plan::can_read_user_draft($u5->id)); $this->setUser($u3); $this->assertTrue(plan::can_read_user_draft($u1->id)); $this->assertTrue(plan::can_read_user_draft($u2->id)); $this->assertTrue(plan::can_read_user_draft($u3->id)); $this->assertTrue(plan::can_read_user_draft($u4->id)); $this->assertTrue(plan::can_read_user_draft($u5->id)); $this->setUser($u4); $this->assertFalse(plan::can_read_user_draft($u1->id)); $this->assertTrue(plan::can_read_user_draft($u2->id)); $this->assertFalse(plan::can_read_user_draft($u3->id)); $this->assertFalse(plan::can_read_user_draft($u4->id)); $this->assertFalse(plan::can_read_user_draft($u5->id)); $this->setUser($u5); $this->assertFalse(plan::can_read_user_draft($u1->id)); $this->assertFalse(plan::can_read_user_draft($u2->id)); $this->assertFalse(plan::can_read_user_draft($u3->id)); $this->assertFalse(plan::can_read_user_draft($u4->id)); $this->assertTrue(plan::can_read_user_draft($u5->id)); }