예제 #1
0
 /**
  * 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');
 }
예제 #2
0
 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));
 }