mirror of
https://github.com/moodle/moodle.git
synced 2025-03-18 22:50:19 +01:00
Merge branch 'MDL-63753' of https://github.com/larsbonczek/moodle
This commit is contained in:
commit
576e63cb0f
@ -6,16 +6,18 @@ Feature: Toggle activities visibility from the course page
|
||||
|
||||
Background:
|
||||
Given the following "users" exist:
|
||||
| username | firstname | lastname | email |
|
||||
| teacher1 | Teacher | 1 | teacher1@example.com |
|
||||
| student1 | Student | 1 | student1@example.com |
|
||||
| username | firstname | lastname | email |
|
||||
| teacher1 | Teacher | 1 | teacher1@example.com |
|
||||
| noneditingteacher1 | Non-Editing Teacher | 1 | noneditingteacher1@example.com |
|
||||
| student1 | Student | 1 | student1@example.com |
|
||||
And the following "courses" exist:
|
||||
| fullname | shortname | format | numsections |
|
||||
| Course 1 | C1 | topics | 2 |
|
||||
And the following "course enrolments" exist:
|
||||
| user | course | role |
|
||||
| teacher1 | C1 | editingteacher |
|
||||
| student1 | C1 | student |
|
||||
| user | course | role |
|
||||
| teacher1 | C1 | editingteacher |
|
||||
| noneditingteacher1 | C1 | teacher |
|
||||
| student1 | C1 | student |
|
||||
And the following "activities" exist:
|
||||
| activity | course | section | idnumber | name | intro | id_visible |
|
||||
| assign | C1 | 1 | 1 | Test assignment name | Test assignment description | 1 |
|
||||
@ -53,6 +55,9 @@ Feature: Toggle activities visibility from the course page
|
||||
And the field "Availability" matches value "Hide on course page"
|
||||
And I press "Save and return to course"
|
||||
And "Test forum name" activity should be hidden
|
||||
# Non-editing teacher should see this activity.
|
||||
And I am on the "Course 1" course page logged in as noneditingteacher1
|
||||
And I should see "Test forum name" in the "region-main" "region"
|
||||
# Student should not see this activity.
|
||||
And I am on the "Course 1" course page logged in as student1
|
||||
And I should not see "Test forum name"
|
||||
@ -115,12 +120,12 @@ Feature: Toggle activities visibility from the course page
|
||||
And "Test assignment name" activity should be available but hidden from course page
|
||||
And I turn editing mode off
|
||||
And "Test assignment name" activity should be available but hidden from course page
|
||||
And I log out
|
||||
# Non-editing teacher will see the module on the course page:
|
||||
And I am on the "Course 1" course page logged in as noneditingteacher1
|
||||
And I should see "Test assignment name" in the "region-main" "region"
|
||||
# Student will not see the module on the course page but can access it from other reports and blocks:
|
||||
And I log in as "student1"
|
||||
And I am on "Course 1" course homepage
|
||||
And I am on the "Course 1" course page logged in as student1
|
||||
And "Test assignment name" activity should be hidden
|
||||
And I click on "Test assignment name" "link" in the "Recent activity" "block"
|
||||
And I should see "Test assignment name"
|
||||
And I should see "Submission status"
|
||||
And I log out
|
||||
|
@ -2602,10 +2602,13 @@ class cm_info implements IteratorAggregate {
|
||||
$this->availableinfo = '';
|
||||
}
|
||||
|
||||
$capabilities = [
|
||||
'moodle/course:manageactivities',
|
||||
'moodle/course:activityvisibility',
|
||||
'moodle/course:viewhiddenactivities',
|
||||
];
|
||||
$this->uservisibleoncoursepage = $this->uservisible &&
|
||||
($this->visibleoncoursepage ||
|
||||
has_capability('moodle/course:manageactivities', $this->get_context(), $userid) ||
|
||||
has_capability('moodle/course:activityvisibility', $this->get_context(), $userid));
|
||||
($this->visibleoncoursepage || has_any_capability($capabilities, $this->get_context(), $userid));
|
||||
// Activity that is not available, not hidden from course page and has availability
|
||||
// info is actually visible on the course page (with availability info and without a link).
|
||||
if (!$this->uservisible && $this->visibleoncoursepage && $this->availableinfo) {
|
||||
|
@ -414,65 +414,119 @@ class modinfolib_test extends advanced_testcase {
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
set_config('allowstealth', true);
|
||||
|
||||
// Generate the course and some modules. Make one section hidden.
|
||||
$course = $this->getDataGenerator()->create_course(
|
||||
array('format' => 'topics',
|
||||
'numsections' => 3),
|
||||
array('createsections' => true));
|
||||
['format' => 'topics', 'numsections' => 3],
|
||||
['createsections' => true]);
|
||||
$DB->execute('UPDATE {course_sections} SET visible = 0 WHERE course = ? and section = ?',
|
||||
array($course->id, 3));
|
||||
$coursecontext = context_course::instance($course->id);
|
||||
[$course->id, 3]);
|
||||
$forum0 = $this->getDataGenerator()->create_module('forum',
|
||||
array('course' => $course->id), array('section' => 0));
|
||||
['course' => $course->id, 'section' => 0]);
|
||||
$assign0 = $this->getDataGenerator()->create_module('assign',
|
||||
array('course' => $course->id), array('section' => 0, 'visible' => 0));
|
||||
['course' => $course->id, 'section' => 0, 'visible' => 0]);
|
||||
$page0 = $this->getDataGenerator()->create_module('page',
|
||||
['course' => $course->id, 'section' => 0, 'visibleoncoursepage' => 0]);
|
||||
$forum1 = $this->getDataGenerator()->create_module('forum',
|
||||
array('course' => $course->id), array('section' => 1));
|
||||
['course' => $course->id, 'section' => 1]);
|
||||
$assign1 = $this->getDataGenerator()->create_module('assign',
|
||||
array('course' => $course->id), array('section' => 1));
|
||||
['course' => $course->id, 'section' => 1]);
|
||||
$page1 = $this->getDataGenerator()->create_module('page',
|
||||
array('course' => $course->id), array('section' => 1));
|
||||
['course' => $course->id, 'section' => 1]);
|
||||
$page3 = $this->getDataGenerator()->create_module('page',
|
||||
array('course' => $course->id), array('section' => 3));
|
||||
['course' => $course->id, 'section' => 3]);
|
||||
|
||||
$modinfo = get_fast_modinfo($course->id);
|
||||
|
||||
$this->assertEquals(array($forum0->cmid, $assign0->cmid, $forum1->cmid, $assign1->cmid, $page1->cmid, $page3->cmid),
|
||||
$this->assertEquals(
|
||||
[$forum0->cmid, $assign0->cmid, $page0->cmid, $forum1->cmid, $assign1->cmid, $page1->cmid, $page3->cmid],
|
||||
array_keys($modinfo->cms));
|
||||
$this->assertEquals($course->id, $modinfo->courseid);
|
||||
$this->assertEquals($USER->id, $modinfo->userid);
|
||||
$this->assertEquals(array(0 => array($forum0->cmid, $assign0->cmid),
|
||||
1 => array($forum1->cmid, $assign1->cmid, $page1->cmid), 3 => array($page3->cmid)), $modinfo->sections);
|
||||
$this->assertEquals(array('forum', 'assign', 'page'), array_keys($modinfo->instances));
|
||||
$this->assertEquals(array($assign0->id, $assign1->id), array_keys($modinfo->instances['assign']));
|
||||
$this->assertEquals(array($forum0->id, $forum1->id), array_keys($modinfo->instances['forum']));
|
||||
$this->assertEquals(array($page1->id, $page3->id), array_keys($modinfo->instances['page']));
|
||||
$this->assertEquals([
|
||||
0 => [$forum0->cmid, $assign0->cmid, $page0->cmid],
|
||||
1 => [$forum1->cmid, $assign1->cmid, $page1->cmid],
|
||||
3 => [$page3->cmid],
|
||||
], $modinfo->sections);
|
||||
$this->assertEquals(['forum', 'assign', 'page'], array_keys($modinfo->instances));
|
||||
$this->assertEquals([$assign0->id, $assign1->id], array_keys($modinfo->instances['assign']));
|
||||
$this->assertEquals([$forum0->id, $forum1->id], array_keys($modinfo->instances['forum']));
|
||||
$this->assertEquals([$page0->id, $page1->id, $page3->id], array_keys($modinfo->instances['page']));
|
||||
$this->assertEquals(groups_get_user_groups($course->id), $modinfo->groups);
|
||||
$this->assertEquals(array(0 => array($forum0->cmid, $assign0->cmid),
|
||||
1 => array($forum1->cmid, $assign1->cmid, $page1->cmid),
|
||||
3 => array($page3->cmid)), $modinfo->get_sections());
|
||||
$this->assertEquals(array(0, 1, 2, 3), array_keys($modinfo->get_section_info_all()));
|
||||
$this->assertEquals($forum0->cmid . ',' . $assign0->cmid, $modinfo->get_section_info(0)->sequence);
|
||||
$this->assertEquals([
|
||||
0 => [$forum0->cmid, $assign0->cmid, $page0->cmid],
|
||||
1 => [$forum1->cmid, $assign1->cmid, $page1->cmid],
|
||||
3 => [$page3->cmid],
|
||||
], $modinfo->get_sections());
|
||||
$this->assertEquals([0, 1, 2, 3], array_keys($modinfo->get_section_info_all()));
|
||||
$this->assertEquals($forum0->cmid . ',' . $assign0->cmid . ',' . $page0->cmid, $modinfo->get_section_info(0)->sequence);
|
||||
$this->assertEquals($forum1->cmid . ',' . $assign1->cmid . ',' . $page1->cmid, $modinfo->get_section_info(1)->sequence);
|
||||
$this->assertEquals('', $modinfo->get_section_info(2)->sequence);
|
||||
$this->assertEquals($page3->cmid, $modinfo->get_section_info(3)->sequence);
|
||||
$this->assertEquals($course->id, $modinfo->get_course()->id);
|
||||
$names = array_keys($modinfo->get_used_module_names());
|
||||
sort($names);
|
||||
$this->assertEquals(array('assign', 'forum', 'page'), $names);
|
||||
$this->assertEquals(['assign', 'forum', 'page'], $names);
|
||||
$names = array_keys($modinfo->get_used_module_names(true));
|
||||
sort($names);
|
||||
$this->assertEquals(array('assign', 'forum', 'page'), $names);
|
||||
$this->assertEquals(['assign', 'forum', 'page'], $names);
|
||||
// Admin can see hidden modules/sections.
|
||||
$this->assertTrue($modinfo->cms[$assign0->cmid]->uservisible);
|
||||
$this->assertTrue($modinfo->cms[$assign0->cmid]->is_visible_on_course_page());
|
||||
$this->assertTrue($modinfo->cms[$page0->cmid]->uservisible);
|
||||
$this->assertTrue($modinfo->cms[$page0->cmid]->is_visible_on_course_page());
|
||||
$this->assertTrue($modinfo->get_section_info(3)->uservisible);
|
||||
|
||||
// Get modinfo for non-current user (without capability to view hidden activities/sections).
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$modinfo = get_fast_modinfo($course->id, $user->id);
|
||||
$this->assertEquals($user->id, $modinfo->userid);
|
||||
$this->assertFalse($modinfo->cms[$assign0->cmid]->uservisible);
|
||||
$this->assertFalse($modinfo->get_section_info(3)->uservisible);
|
||||
$this->assertFalse($modinfo->cms[$assign0->cmid]->is_stealth());
|
||||
$this->assertFalse($modinfo->cms[$assign0->cmid]->is_stealth());
|
||||
$this->assertTrue($modinfo->cms[$page0->cmid]->is_stealth());
|
||||
$this->assertTrue($modinfo->cms[$page3->cmid]->is_stealth());
|
||||
|
||||
// Get modinfo for user with student role (without capability to view hidden activities/sections).
|
||||
$student = $this->getDataGenerator()->create_user();
|
||||
$this->getDataGenerator()->enrol_user($student->id, $course->id, 'student');
|
||||
$studentmodinfo = get_fast_modinfo($course->id, $student->id);
|
||||
$this->assertEquals($student->id, $studentmodinfo->userid);
|
||||
$this->assertTrue($studentmodinfo->cms[$forum0->cmid]->uservisible);
|
||||
$this->assertTrue($studentmodinfo->cms[$forum0->cmid]->is_visible_on_course_page());
|
||||
$this->assertFalse($studentmodinfo->cms[$assign0->cmid]->uservisible);
|
||||
$this->assertFalse($studentmodinfo->cms[$assign0->cmid]->is_visible_on_course_page());
|
||||
$this->assertTrue($studentmodinfo->cms[$page0->cmid]->uservisible);
|
||||
$this->assertFalse($studentmodinfo->cms[$page0->cmid]->is_visible_on_course_page());
|
||||
$this->assertFalse($studentmodinfo->get_section_info(3)->uservisible);
|
||||
$this->assertTrue($studentmodinfo->cms[$page3->cmid]->uservisible);
|
||||
$this->assertTrue($studentmodinfo->cms[$page3->cmid]->is_visible_on_course_page());
|
||||
|
||||
// Get modinfo for user with teacher role (with capability to view hidden activities but not sections).
|
||||
$teacher = $this->getDataGenerator()->create_user();
|
||||
$this->getDataGenerator()->enrol_user($teacher->id, $course->id, 'teacher');
|
||||
$teachermodinfo = get_fast_modinfo($course->id, $teacher->id);
|
||||
$this->assertEquals($teacher->id, $teachermodinfo->userid);
|
||||
$this->assertTrue($teachermodinfo->cms[$forum0->cmid]->uservisible);
|
||||
$this->assertTrue($teachermodinfo->cms[$forum0->cmid]->is_visible_on_course_page());
|
||||
$this->assertTrue($teachermodinfo->cms[$assign0->cmid]->uservisible);
|
||||
$this->assertTrue($teachermodinfo->cms[$assign0->cmid]->is_visible_on_course_page());
|
||||
$this->assertTrue($teachermodinfo->cms[$page0->cmid]->uservisible);
|
||||
$this->assertTrue($teachermodinfo->cms[$page0->cmid]->is_visible_on_course_page());
|
||||
$this->assertFalse($teachermodinfo->get_section_info(3)->uservisible);
|
||||
$this->assertTrue($teachermodinfo->cms[$page3->cmid]->uservisible);
|
||||
$this->assertTrue($teachermodinfo->cms[$page3->cmid]->is_visible_on_course_page());
|
||||
|
||||
// Get modinfo for user with editingteacher role (with capability to view hidden activities/sections).
|
||||
$editingteacher = $this->getDataGenerator()->create_user();
|
||||
$this->getDataGenerator()->enrol_user($editingteacher->id, $course->id, 'editingteacher');
|
||||
$editingteachermodinfo = get_fast_modinfo($course->id, $editingteacher->id);
|
||||
$this->assertEquals($editingteacher->id, $editingteachermodinfo->userid);
|
||||
$this->assertTrue($editingteachermodinfo->cms[$forum0->cmid]->uservisible);
|
||||
$this->assertTrue($editingteachermodinfo->cms[$forum0->cmid]->is_visible_on_course_page());
|
||||
$this->assertTrue($editingteachermodinfo->cms[$assign0->cmid]->uservisible);
|
||||
$this->assertTrue($editingteachermodinfo->cms[$assign0->cmid]->is_visible_on_course_page());
|
||||
$this->assertTrue($editingteachermodinfo->cms[$page0->cmid]->uservisible);
|
||||
$this->assertTrue($editingteachermodinfo->cms[$page0->cmid]->is_visible_on_course_page());
|
||||
$this->assertTrue($editingteachermodinfo->get_section_info(3)->uservisible);
|
||||
$this->assertTrue($editingteachermodinfo->cms[$page3->cmid]->uservisible);
|
||||
$this->assertTrue($editingteachermodinfo->cms[$page3->cmid]->is_visible_on_course_page());
|
||||
|
||||
// Attempt to access and set non-existing field.
|
||||
$this->assertTrue(empty($modinfo->somefield));
|
||||
|
Loading…
x
Reference in New Issue
Block a user