MDL-87545 core: route homepage selection with enablemyhome

MDL-87545 core: add unit coverage for homepage defaults

MDL-87545 core: update behat expectations for homepage options
This commit is contained in:
Andi Permana
2026-02-27 21:20:11 +07:00
parent 7dc6d5cfee
commit b2186b51b0
106 changed files with 554 additions and 131 deletions
@@ -5,7 +5,9 @@ Feature: Display extended course names
I need to display courses short names along with courses full names
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname | category |
| Course fullname | C_shortname | 0 |
And I log in as "admin"
@@ -5,7 +5,9 @@ Feature: Purge caches
I want manually purge different data and file caches
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I navigate to "Development > Purge caches" in site administration
Scenario: Purge all caches
@@ -5,7 +5,9 @@ Feature: Set admin settings value
I need to set admin setting value and verify it is applied
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname | category |
| Course fullname | C_shortname | 0 |
And I log in as "admin"
@@ -4,6 +4,10 @@ Feature: Set up contextual data for tests
As a developer
I need to fill the database with fixtures
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
Scenario: Add a bunch of users
Given the following "users" exist:
| username | password | firstname | lastname |
@@ -4,6 +4,10 @@ Feature: Verify that keyboard steps work as expected
As a test writer
I need to verify that the keyboard steps work as expected
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
@javascript
Scenario: Typing keys into a field causes them to be input
Given the following "users" exist:
@@ -5,7 +5,9 @@ Feature: tool_monitor_subscriptions
I need to create a new rule, subscribe to it, receive notification and delete subscription
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
| Course 2 | C2 |
@@ -4,6 +4,10 @@ Feature: User must accept policy managed by this plugin when logging in and sign
As a user
I need to be able to accept site policy during sign up
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
Scenario: Accept policy on sign up manage by plugin, no site policy
Given the following config values are set as admin:
| registerauth | email |
@@ -5,7 +5,9 @@ Feature: An admin can create courses using a CSV file
I need to be able to upload a CSV file and navigate through the import process
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname | category |
| First course | C1 | 0 |
And I log in as "admin"
@@ -5,7 +5,9 @@ Feature: An admin can update courses using a CSV file
I need to be able to upload a CSV file and navigate through the import process
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname | category |
| Some random name | C1 | 0 |
| Another course | CF1 | 0 |
@@ -5,7 +5,9 @@ Feature: Reset a tour
I can reset the tour to force it to display again
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I add a new user tour with:
| Name | First tour |
| Description | My first tour |
@@ -1,7 +1,9 @@
@tool @tool_usertours
Feature: Apply accessibility to a tour
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I add a new user tour with:
| Name | First tour |
| Description | My first tour |
@@ -5,7 +5,9 @@ Feature: Prevent yours from being marked as complete
I can prevent a user tour from being marked as complete
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I add a new user tour with:
| Name | First tour |
| Description | My first tour |
@@ -5,7 +5,9 @@ Feature: Test manual authentication works.
I need to go on login page and enter username and password.
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username |
| teacher1 |
And the following config values are set as admin:
+4
View File
@@ -4,6 +4,10 @@ Feature: Authentication
As a user
I need to log into the system
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
Scenario: Log in with the predefined admin user with Javascript disabled
Given I log in as "admin"
Then I should see "You are logged in as Admin User" in the "page-footer" "region"
+3 -1
View File
@@ -5,7 +5,9 @@ Feature: Test if the login form provides the correct feedback
I need to go on login page and see feedback on incorrect username or password.
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username |
| teacher1 |
@@ -5,7 +5,9 @@ Feature: Import course content bank content
I need to confirm that errors will not happen
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And the following config values are set as admin:
| unaddableblocks | | theme_boost|
And I am on site homepage
@@ -4,6 +4,10 @@ Feature: Enable Block Badges on the frontpage and view awarded badges
As a admin
I can add badges block to the frontpage
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
Scenario: Add the recent badges block on the frontpage and view recent badges
Given the following "users" exist:
| username | firstname | lastname | email | idnumber |
@@ -5,7 +5,9 @@ Feature: Enable Block blog menu on the frontpage
I can add blog menu block to the frontpage
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email | idnumber |
| student1 | Student | 1 | student1@example.com | S1 |
And the following "blocks" exist:
@@ -12,6 +12,7 @@ Feature: Feature: Students can use the recent blog entries block to view recent
| blockname | contextlevel | reference | pagetypepattern | defaultregion |
| blog_recent | System | 1 | site-index | side-pre |
And the following config values are set as admin:
| enablemyhome | 1 | |
| unaddableblocks | | theme_boost|
And I log in as "admin"
And I am on site homepage
@@ -93,7 +93,9 @@ Feature: Enable the calendar block in a course and test it's functionality
@javascript
Scenario: Click on today's course event on the calendar view page's calendar block
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I create a calendar event with form data:
| id_eventtype | Site |
| id_name | Site Event |
@@ -5,7 +5,9 @@ Feature: View a site event on the frontpage
I can view the event in the upcoming events block
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email | idnumber |
| teacher1 | Teacher | 1 | teacher1@example.com | T1 |
And the following "blocks" exist:
@@ -5,7 +5,9 @@ Feature: Enable Block comments on the frontpage and view comments
I can add the comments block to the frontpage
Scenario: Add the comments block on the frontpage and add comments
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email | idnumber |
| teacher1 | Teacher | 1 | teacher1@example.com | T1 |
And the following "blocks" exist:
@@ -5,7 +5,9 @@ Feature: Enable the course_list block on the frontpage and view it's contents
I can add the course list block to the frontpage
Background:
Given the following "categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "categories" exist:
| name | category | idnumber |
| Category A | 0 | CATA |
| Category B | 0 | CATB |
@@ -5,7 +5,9 @@ Feature: Course summary block used on the frontpage
I can use the course summary block on the frontpage
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I enable "course_summary" "block" plugin
And the following "blocks" exist:
| blockname | contextlevel | reference | pagetypepattern | defaultregion |
@@ -9,7 +9,8 @@ Feature: Random glossary entry block can be added to the frontpage
| activity | name | intro | course | idnumber |
| glossary | Tips and Tricks | Frontpage glossary description | Acceptance test site | glossary0 |
And the following config values are set as admin:
| forcelogin | 0 |
| forcelogin | 0 |
| enablemyhome | 1 |
And I log in as "admin"
And I am on site homepage
And I turn editing mode on
@@ -6,7 +6,8 @@ Feature: Adding and configuring multiple Text blocks
Background:
Given the following config values are set as admin:
| forcelogin | 0 |
| forcelogin | 0 |
| enablemyhome | 1 |
And I log in as "admin"
And I am on site homepage
When I turn editing mode on
@@ -12,7 +12,8 @@ Feature: Login from a block
| blockname | contextlevel | reference | pagetypepattern | defaultregion |
| login | System | 1 | site-index | side-pre |
And the following config values are set as admin:
| forcelogin | 0 |
| forcelogin | 0 |
| enablemyhome | 1 |
Scenario: Login block visible to non-logged in users
When I am on homepage
@@ -5,7 +5,9 @@ Feature: The logged in user block allows users to view their profile information
I can add the logged in user block to the frontpage and view my information
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email | idnumber |
| teacher1 | Teacher | One | teacher1@example.com | T1 |
And the following "blocks" exist:
@@ -5,7 +5,9 @@ Feature: Test that admin can see related nodes in Administration block
I need to be able to see related nodes in Administration block
Background:
Given the following "categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "categories" exist:
| name | category | idnumber | visible |
| cat1 | 0 | cat1 | 1 |
And the following "courses" exist:
@@ -35,6 +35,7 @@ Feature: Expand the courses nodes within the navigation block
| student1 | c2 | student |
| student1 | c4 | student |
And the following config values are set as admin:
| enablemyhome | 1 |
| navshowallcourses | 1 |
And I log in as "admin"
And I am on site homepage
@@ -5,7 +5,9 @@ Feature: Displaying the link to the Participants page
I need a link to the Participants page be displayed (but only if I can access that page)
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | One | student1@example.com |
| student2 | Student | Two | student2@example.com |
@@ -5,7 +5,9 @@ Feature: View my courses in navigation block
I need my courses displayed in the navigation block
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "categories" exist:
@@ -6,7 +6,9 @@ Feature: The online users block allow you to see who is currently online on fron
I can add the online users block to the frontpage
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
| student2 | Student | 2 | student2@example.com |
@@ -5,7 +5,9 @@ Feature: The private files block allows users to store files privately in moodle
I can upload the file to my private files area using the private files block from the front page
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And the following "users" exist:
@@ -5,7 +5,9 @@ Feature: Enable RSS client block menu on the frontpage
I can add RSS client block to the frontpage
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
When I navigate to "Plugins > Blocks > Manage blocks" in site administration
Then I enable "rss_client" "block" plugin
And the following "blocks" exist:
@@ -5,7 +5,9 @@ Feature: The search forums block allows users to search for forum posts on front
I can add the search forums block
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email | idnumber |
| student1 | Student | 1 | student1@example.com | S1 |
And the following "blocks" exist:
@@ -5,7 +5,9 @@ Feature: Add URL to Additional activities block
I need to add URLs to the Additional activities block and check it works.
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname | category | enablecompletion |
| Course 1 | C1 | 0 | 1 |
| Course 2 | C2 | 0 | |
@@ -4,6 +4,10 @@ Feature: Edit activities in Additional activities block
As an admin
I need to add and edit activities there
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
@javascript
Scenario: Edit name of activity in-place in Additional activities block
Given the following "activity" exists:
@@ -5,7 +5,9 @@ Feature: Block tags displaying tag cloud
I need to be able to use the block tags
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email | interests |
| teacher1 | Teacher | 1 | teacher1@example.com | Dogs, Cats |
| student1 | Student | 1 | student1@example.com | |
@@ -5,7 +5,9 @@ Feature: Add and configure blocks throughout the site
I need to set and configure blocks throughout the site
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And the following "users" exist:
+3 -1
View File
@@ -5,7 +5,9 @@ Feature: Comment on a blog entry
I need to be able to comment on a blog entry
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| testuser | Test | User | moodle@example.com |
| testuser2 | Test2 | User2 | moodle2@example.com |
+3 -1
View File
@@ -5,7 +5,9 @@ Feature: Delete a blog entry
I need to be able to delete entries I no longer wish to appear
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| testuser | Test | User | moodle@example.com |
And the following "core_blog > entries" exist:
@@ -5,7 +5,9 @@ Feature: Copy content from the content bank
I need to be able to copy any content from the content bank
Background:
Given the following "contentbank content" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "contentbank content" exist:
| contextlevel | reference | contenttype | user | contentname | filepath |
| System | | contenttype_h5p | admin | content2copy.h5p | /h5p/tests/fixtures/filltheblanks.h5p |
And I log in as "admin"
@@ -5,7 +5,9 @@ Feature: Content bank custom fields
I need to be able to access the custom fields
Background:
Given the following "blocks" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "blocks" exist:
| blockname | contextlevel | reference | pagetypepattern | defaultregion |
| private_files | System | 1 | my-index | side-post |
And the following "custom field categories" exist:
@@ -5,7 +5,9 @@ Feature: Download H5P content from the content bank
I need to be able to download any H5P content from the content bank
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| manager | Max | Manager | man@example.com |
And the following "role assigns" exist:
@@ -5,7 +5,9 @@ Feature: Content bank use editor feature
I need to be able to access the edition options
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I am on site homepage
And I turn editing mode on
And the following config values are set as admin:
@@ -5,7 +5,9 @@ Feature: Make content public or unlisted
I need to be able to access the edition options
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I am on site homepage
And I turn editing mode on
And the following config values are set as admin:
@@ -21,6 +21,8 @@ Feature: Courses can be created in Single Activity mode
| moodle/course:manageactivities | allow |
| moodle/course:viewparticipants | allow |
| moodle/role:assign | allow |
And the following config values are set as admin:
| enablemyhome | 1 |
When I log in as "kevin"
And I am on site homepage
And I press "Add a new course"
@@ -5,7 +5,9 @@ Feature: Restricting access to course lists
I need to be able to give/revoke capabilities to view list of courses
Background:
Given the following "categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "categories" exist:
| name | category | idnumber |
| Science category | 0 | SCI |
| English category | 0 | ENG |
@@ -5,7 +5,9 @@ Feature: Collapse course sections
I need to collapse/extend sections for course formats.
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
| student1 | Student | 1 | student1@example.com |
@@ -80,6 +80,8 @@ Feature: Managers can create courses
| moodle/course:create | allow |
| moodle/course:manageactivities | allow |
| moodle/course:viewparticipants | allow |
And the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "kevin"
And I am on site homepage
When I press "Add a new course"
@@ -102,6 +104,8 @@ Feature: Managers can create courses
And I set the following administration settings values:
| Creators' role in new courses | Non-editing teacher |
And I log out
And the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "kevin"
And I am on site homepage
When I press "Add a new course"
@@ -8,6 +8,7 @@ Feature: Courses can be set up to display dates relative to the user's enrolment
Scenario: Create a course with relative dates feature disabled
Given the following config values are set as admin:
| enablecourserelativedates | 0 |
| enablemyhome | 1 |
And I log in as "admin"
And I am on site homepage
And I turn editing mode on
@@ -20,6 +21,7 @@ Feature: Courses can be set up to display dates relative to the user's enrolment
Scenario: Create a course with relative dates feature enabled
Given the following config values are set as admin:
| enablecourserelativedates | 1 |
| enablemyhome | 1 |
And I log in as "admin"
And I am on site homepage
And I turn editing mode on
@@ -5,10 +5,12 @@ Feature: Fields locked control who is able to edit it
I can change the visibility of the fields
Background:
Given the following "custom field categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "custom field categories" exist:
| name | component | area | itemid |
| Category for test | core_course | course | 0 |
Given the following "users" exist:
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
| student1 | Student | 1 | student@example.com |
@@ -5,10 +5,12 @@ Feature: The visibility of fields control where they are displayed
I can change the visibility of the fields
Background:
Given the following "custom field categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "custom field categories" exist:
| name | component | area | itemid |
| Category for test | core_course | course | 0 |
Given the following "users" exist:
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
| student1 | Student | 1 | student@example.com |
@@ -5,7 +5,9 @@ Feature: Site home displays items in different modes
I need to set different frontpage display modes
Background:
Given the following "categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "categories" exist:
| name | category | idnumber |
| Category A | 0 | CATA |
| Category B | 0 | CATB |
@@ -6,7 +6,8 @@ Feature: Site home activities section
Background:
Given the following config values are set as admin:
| numsections | 1 |
| enablemyhome | 1 |
| numsections | 1 |
Scenario: Activities should appear in frontpage
Given the following "activities" exist:
+3 -1
View File
@@ -3,7 +3,9 @@ Feature: Keyholder role is listed as course contact
As a student I need to know who the keyholder is to enrol in a course
Background:
Given the following "role" exists:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "role" exists:
| shortname | keyholder |
| name | Keyholder |
| context_coursecat | 1 |
@@ -5,7 +5,9 @@ Feature: Browse course list and return back from enrolment page
I need to be able to return back from enrolment page
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| user1 | User | 1 | user1@example.com |
| user2 | User | 2 | user2@example.com |
@@ -5,7 +5,9 @@ Feature: Managers can manage course custom fields checkbox
I need to create, edit, remove and sort custom fields
Background:
Given the following "custom field categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "custom field categories" exist:
| name | component | area | itemid |
| Category for test | core_course | course | 0 |
And I log in as "admin"
@@ -5,7 +5,9 @@ Feature: Managers can manage course custom fields number
I need to create, edit, remove and display number custom fields
Background:
Given the following "custom field categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "custom field categories" exist:
| name | component | area | itemid |
| Category for test | core_course | course | 0 |
And I log in as "admin"
@@ -5,7 +5,9 @@ Feature: Managers can manage course custom fields text
I need to create, edit, remove and sort custom fields
Background:
Given the following "custom field categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "custom field categories" exist:
| name | component | area | itemid |
| Category for test | core_course | course | 0 |
And I log in as "admin"
@@ -5,7 +5,9 @@ Feature: Default value for the textarea custom field can contain images
I need to be able to add images to the default value
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher | Teacher | 1 | teacher1@example.com |
| manager | Manager | 1 | manager1@example.com |
@@ -5,7 +5,9 @@ Feature: Managers can manage course custom fields textarea
I need to create, edit, remove and sort custom fields
Background:
Given the following "custom field categories" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "custom field categories" exist:
| name | component | area | itemid |
| Category for test | core_course | course | 0 |
And I log in as "admin"
+21
View File
@@ -72,6 +72,24 @@ if ($hassiteconfig && moodle_needs_upgrading()) {
\core\hub\registration::registration_reminder('/index.php');
$homepage = get_home_page();
// If enablemyhome is disabled, redirect unconditionally, ignoring the redirect param.
// Any explicit link to / should be redirected away.
// $homepage is used (not $CFG->defaulthomepage) as it already resolves stale DB values.
if (empty($CFG->enablemyhome)) {
if (!isloggedin()) {
// Non-logged-in users must log in first (forcelogin may be off, but the
// page they are headed for is disabled, so send them to the login page).
redirect(get_login_url());
} else if ($homepage != HOMEPAGE_SITE) {
if ($homepage == HOMEPAGE_MY) {
redirect($CFG->wwwroot . '/my/');
} else if ($homepage == HOMEPAGE_MYCOURSES) {
redirect($CFG->wwwroot . '/my/courses.php');
}
}
}
if ($homepage != HOMEPAGE_SITE) {
if (optional_param('setdefaulthome', false, PARAM_BOOL)) {
set_user_preference('user_home_page_preference', HOMEPAGE_SITE);
@@ -82,6 +100,9 @@ if ($homepage != HOMEPAGE_SITE) {
redirect($CFG->wwwroot .'/my/courses.php');
} else if ($homepage == HOMEPAGE_URL) {
redirect(get_default_home_page_url());
} else if ($homepage == HOMEPAGE_USER) {
// All homepage options disabled - redirect to user preferences page.
redirect($CFG->wwwroot . '/user/preferences.php');
} else if (!empty($CFG->defaulthomepage) && ($CFG->defaulthomepage == HOMEPAGE_USER)) {
$frontpagenode = $PAGE->settingsnav->find('frontpage', null);
if ($frontpagenode) {
@@ -182,6 +182,7 @@ class global_navigation extends navigation_node {
// - courses: Additional courses are added here.
// - users: Other users information loaded here.
$this->rootnodes = [];
$homeenabled = !empty($CFG->enablemyhome);
$defaulthomepage = get_home_page();
if ($defaulthomepage == HOMEPAGE_SITE) {
// The home element should be my moodle because the root element is the site.
@@ -199,7 +200,7 @@ class global_navigation extends navigation_node {
$this->rootnodes['home']->showinflatnavigation = true;
}
}
} else {
} else if ($homeenabled) {
// The home element should be the site because the root node is my moodle.
$this->rootnodes['home'] = $this->add(
get_string('sitehome'),
@@ -1093,7 +1093,7 @@ class settings_navigation extends navigation_node {
// breadcrumb.
$mainpage->display = false;
$homepage = get_home_page();
if (($homepage == HOMEPAGE_MY || $homepage == HOMEPAGE_MYCOURSES)) {
if ($homepage == HOMEPAGE_MY || $homepage == HOMEPAGE_MYCOURSES || $homepage == HOMEPAGE_USER) {
$mainpage->mainnavonly = true;
}
@@ -1265,9 +1265,12 @@ class settings_navigation extends navigation_node {
// Default homepage.
$defaulthomepageuser = (!empty($CFG->defaulthomepage) && ($CFG->defaulthomepage == HOMEPAGE_USER));
if (isloggedin() && !isguestuser($user) && $defaulthomepageuser) {
require_once($CFG->dirroot . '/user/lib.php');
$options = user_get_default_homepage_options();
if (
$currentuser && has_capability('moodle/user:editownprofile', $systemcontext) ||
has_capability('moodle/user:editprofile', $usercontext)
!empty($options) &&
($currentuser && has_capability('moodle/user:editownprofile', $systemcontext) ||
has_capability('moodle/user:editprofile', $usercontext))
) {
$url = new url('/user/defaulthomepage.php', ['id' => $user->id]);
$useraccount->add(get_string('defaulthomepageuser'), $url, self::TYPE_SETTING, null, 'defaulthomepageuser');
@@ -43,7 +43,8 @@ class primary extends view {
$showhomenode = empty($this->page->theme->removedprimarynavitems) ||
!in_array('home', $this->page->theme->removedprimarynavitems);
// We do not need to change the text for the home/dashboard depending on the set homepage.
if ($showhomenode) {
$sitehome = null;
if ($showhomenode && !empty($CFG->enablemyhome)) {
$sitehome = $this->add(get_string('home'), new \moodle_url('/'), self::TYPE_SYSTEM,
null, 'home', new \pix_icon('i/home', ''));
}
@@ -51,7 +52,7 @@ class primary extends view {
$homepage = get_home_page();
if ($homepage == HOMEPAGE_MY || $homepage == HOMEPAGE_MYCOURSES) {
// We need to stop automatic redirection.
if ($showhomenode) {
if ($sitehome) {
$sitehome->action->param('redirect', '0');
}
}
+9 -4
View File
@@ -1157,12 +1157,17 @@ class user {
'permissioncallback' => [static::class, 'is_current_user'],
];
$choices = [HOMEPAGE_SITE];
if (!empty($CFG->enabledashboard)) {
// Build available homepage choices inline.
$choices = [];
if (!isset($CFG->enablemyhome) || $CFG->enablemyhome) {
$choices[] = HOMEPAGE_SITE;
}
if (!isset($CFG->enabledashboard) || $CFG->enabledashboard) {
$choices[] = HOMEPAGE_MY;
}
$choices[] = HOMEPAGE_MYCOURSES;
if (!isset($CFG->enablemycourses) || $CFG->enablemycourses) {
$choices[] = HOMEPAGE_MYCOURSES;
}
// Allow hook callbacks to extend options.
$hook = new \core_user\hook\extend_default_homepage(true);
\core\di::get(\core\hook\manager::class)->dispatch($hook);
+33 -4
View File
@@ -9916,10 +9916,18 @@ function mnet_get_idp_jump_url($user) {
function get_home_page() {
global $CFG;
if (isloggedin() && !empty($CFG->defaulthomepage)) {
$homeenabled = !empty($CFG->enablemyhome);
if (isloggedin() && isset($CFG->defaulthomepage) && $CFG->defaulthomepage !== '') {
// If dashboard is disabled, home will be set to default page.
$defaultpage = get_default_home_page();
if ($CFG->defaulthomepage == HOMEPAGE_MY && (!isguestuser() || !empty($CFG->allowguestmymoodle))) {
if ($CFG->defaulthomepage == HOMEPAGE_SITE) {
if ($homeenabled) {
return HOMEPAGE_SITE;
} else {
return $defaultpage;
}
} else if ($CFG->defaulthomepage == HOMEPAGE_MY && (!isguestuser() || !empty($CFG->allowguestmymoodle))) {
if (!empty($CFG->enabledashboard)) {
return HOMEPAGE_MY;
} else {
@@ -9929,6 +9937,9 @@ function get_home_page() {
return HOMEPAGE_MYCOURSES;
} else if ($CFG->defaulthomepage == HOMEPAGE_USER && !isguestuser()) {
$userhomepage = get_user_preferences('user_home_page_preference', $defaultpage);
if (!$homeenabled && $userhomepage == HOMEPAGE_SITE) {
$userhomepage = $defaultpage;
}
if (empty($CFG->enabledashboard) && $userhomepage == HOMEPAGE_MY) {
// If the user was using the dashboard but it's disabled, return the default home page.
$userhomepage = $defaultpage;
@@ -9940,19 +9951,37 @@ function get_home_page() {
return HOMEPAGE_URL;
}
}
if (!$homeenabled && isloggedin()) {
return get_default_home_page();
}
return HOMEPAGE_SITE;
}
/**
* Returns the default home page to display if current one is not defined or can't be applied.
* The default behaviour is to return Dashboard if it's enabled or My courses page if it isn't.
* The default behaviour is to return Dashboard if enabled, then My Courses, then Site Home,
* or User Preference page if all three are disabled.
*
* @return int The default home page.
*/
function get_default_home_page(): int {
global $CFG;
return (!isset($CFG->enabledashboard) || $CFG->enabledashboard) ? HOMEPAGE_MY : HOMEPAGE_MYCOURSES;
// Priority: Dashboard → My Courses → Site Home → User Preference page.
if (!isset($CFG->enabledashboard) || $CFG->enabledashboard) {
return HOMEPAGE_MY;
}
if (!isset($CFG->enablemycourses) || $CFG->enablemycourses) {
return HOMEPAGE_MYCOURSES;
}
if (!isset($CFG->enablemyhome) || $CFG->enablemyhome) {
return HOMEPAGE_SITE;
}
// All three disabled - redirect to User Preference page.
return HOMEPAGE_USER;
}
/**
@@ -4,6 +4,10 @@ Feature: Check for minimum or maximimum version of Moodle
As a developer
I should be able to skip tests according to the Moodle version present on a site
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
Scenario: Minimum version too low
Given the site is running Moodle version 99.0 or higher
# The following steps should not be executed. If they are, the test will fail.
@@ -3,7 +3,9 @@ Feature: Turn editing mode on
Users should be able to turn editing mode on and off
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
And the following "users" exist:
@@ -82,6 +82,8 @@ final class primary_extend_test extends \advanced_testcase {
public function test_unsupported_hacks(): void {
global $PAGE;
$this->resetAfterTest();
set_config('enablemyhome', 0);
set_config('enabledashboard', 1);
$PAGE = new \moodle_page();
$PAGE->set_url('/');
@@ -93,14 +95,20 @@ final class primary_extend_test extends \advanced_testcase {
$primarynav = new \core\navigation\views\primary($PAGE);
$primarynav->initialise();
$this->assertSame(['home'], $primarynav->get_children_key_list(),
'Unsupported primary menu modification detected, use new primary_extend hook instead.');
$this->assertSame(
[],
$primarynav->get_children_key_list(),
'Unsupported primary menu modification detected, use new primary_extend hook instead.'
);
$this->setAdminUser();
$primarynav = new \core\navigation\views\primary($PAGE);
$primarynav->initialise();
$this->assertSame(['home', 'myhome', 'mycourses'], $primarynav->get_children_key_list(),
'Unsupported primary menu modification detected, use new primary_extend hook instead.');
$this->assertSame(
['myhome', 'mycourses'],
$primarynav->get_children_key_list(),
'Unsupported primary menu modification detected, use new primary_extend hook instead.'
);
}
/**
@@ -110,6 +118,8 @@ final class primary_extend_test extends \advanced_testcase {
public function test_primary_menu_extending(): void {
global $PAGE;
$this->resetAfterTest();
set_config('enablemyhome', 0);
set_config('enabledashboard', 1);
$PAGE = new \moodle_page();
$PAGE->set_url('/');
@@ -123,12 +133,10 @@ final class primary_extend_test extends \advanced_testcase {
$primarynav = new \core\navigation\views\primary($PAGE);
$primarynav->initialise();
$keys = $primarynav->get_children_key_list();
$this->assertCount(2, $keys);
$this->assertCount(1, $keys);
$firstkey = array_shift($keys);
$this->assertSame('home', $firstkey);
$secondkey = array_shift($keys);
/** @var \navigation_node $pokus */
$pokus = $primarynav->get($secondkey);
$pokus = $primarynav->get($firstkey);
$this->assertInstanceOf(\navigation_node::class, $pokus);
$this->assertSame('Pokus', $pokus->text);
}
@@ -140,6 +148,8 @@ final class primary_extend_test extends \advanced_testcase {
public function test_primary_menu_replacing(): void {
global $PAGE;
$this->resetAfterTest();
set_config('enablemyhome', 0);
set_config('enabledashboard', 1);
$PAGE = new \moodle_page();
$PAGE->set_url('/');
+27
View File
@@ -5250,6 +5250,7 @@ EOT;
* @param int|null $enabledashboard Whether the dashboard should be enabled or not.
* @param int|string|null $userpreference User preference for the home page setting.
* $param int|null $allowguestmymoodle The $CFG->allowguestmymoodle setting value.
* @param int|null $enablemyhome Whether the home page should be enabled or not.
* @covers ::get_home_page
*/
public function test_get_home_page(
@@ -5259,6 +5260,7 @@ EOT;
?int $enabledashboard = null,
int|string|null $userpreference = null,
?int $allowguestmymoodle = null,
?int $enablemyhome = null,
): void {
global $CFG, $USER;
@@ -5279,6 +5281,10 @@ EOT;
if (isset($allowguestmymoodle)) {
$CFG->allowguestmymoodle = $allowguestmymoodle;
}
if (!isset($enablemyhome)) {
$enablemyhome = 1;
}
$CFG->enablemyhome = $enablemyhome;
if ($USER) {
set_user_preferences(['user_home_page_preference' => $userpreference], $USER->id);
@@ -5397,6 +5403,27 @@ EOT;
'enabledashboard' => null,
'userpreference' => "/home",
],
'No logged user with home disabled' => [
'user' => 'nologged',
'expected' => HOMEPAGE_SITE,
'enablemyhome' => 0,
'enabledashboard' => 1,
],
'Logged user. Site set as default home page with home disabled' => [
'user' => 'logged',
'expected' => HOMEPAGE_MY,
'defaulthomepage' => HOMEPAGE_SITE,
'enabledashboard' => 1,
'enablemyhome' => 0,
],
'Logged user. User preference set to site with home disabled' => [
'user' => 'logged',
'expected' => HOMEPAGE_MY,
'defaulthomepage' => HOMEPAGE_USER,
'enabledashboard' => 1,
'userpreference' => HOMEPAGE_SITE,
'enablemyhome' => 0,
],
];
}
@@ -33,6 +33,8 @@ final class navbar_test extends \advanced_testcase {
// We need to reset after this test because we using the generator.
$this->resetAfterTest();
set_config('enablemyhome', 0);
set_config('enabledashboard', 1);
$generator = self::getDataGenerator();
$cat1 = $generator->create_category();
@@ -34,6 +34,7 @@ final class primary_test extends \advanced_testcase {
global $PAGE;
parent::setUp();
$this->resetAfterTest();
set_config('enablemyhome', 1);
$pagecourse = $this->getDataGenerator()->create_course();
$assign = $this->getDataGenerator()->create_module('assign', ['course' => $pagecourse->id]);
$cm = get_coursemodule_from_id('assign', $assign->cmid);
@@ -146,6 +147,46 @@ final class primary_test extends \advanced_testcase {
];
}
/**
* Test the primary export when the home link is disabled.
*
* @covers \core\navigation\output\primary::export_for_template
* @dataProvider primary_export_without_home_provider
* @param bool $withlang Setup with langs
* @param array $expecteditems An array of nodes expected with content in them.
*/
public function test_primary_export_without_home(bool $withlang, array $expecteditems): void {
global $CFG, $PAGE;
set_config('enablemyhome', 0);
$this->setUser(0);
if ($withlang) {
mkdir("$CFG->dataroot/lang/de", 0777, true);
mkdir("$CFG->dataroot/lang/fr", 0777, true);
$stringmanager = get_string_manager();
$stringmanager->reset_caches(true);
}
$primary = new primary($PAGE);
$renderer = $PAGE->get_renderer('core');
$data = array_filter($primary->export_for_template($renderer));
$this->assertEqualsCanonicalizing($expecteditems, array_keys($data));
}
/**
* Provider for the test_primary_export_without_home function.
*
* @return array
*/
public static function primary_export_without_home_provider(): array {
return [
'No home link and no additional languages' => [false, ['user']],
'No home link and multiple languages available' => [true, ['lang', 'user']],
];
}
/**
* Test the custom menu getter to confirm the nodes gets generated and are returned correctly.
*
@@ -41,6 +41,8 @@ final class primary_test extends \advanced_testcase {
global $PAGE;
$PAGE->set_url("/");
$this->resetAfterTest();
set_config('enablemyhome', 0);
set_config('enabledashboard', 1);
if ($usertype == 'admin') {
$this->setAdminUser();
} else if ($usertype == 'guest') {
@@ -61,9 +63,9 @@ final class primary_test extends \advanced_testcase {
*/
public static function setting_initialise_provider(): array {
return [
'Testing as a guest user' => ['guest', ['home', 'calendar']],
'Testing as an admin' => ['admin', ['home', 'myhome', 'mycourses', 'siteadminnode']],
'Testing as a regular user' => ['user', ['home', 'myhome', 'mycourses']]
'Testing as a guest user' => ['guest', ['calendar']],
'Testing as an admin' => ['admin', ['myhome', 'mycourses', 'siteadminnode']],
'Testing as a regular user' => ['user', ['myhome', 'mycourses']],
];
}
+18 -15
View File
@@ -348,22 +348,26 @@ function core_login_get_return_url() {
unset($SESSION->wantsurl);
}
// If the url to go to is the same as the site page, check for default homepage.
if ($urltogo == ($CFG->wwwroot . '/')) {
// If the url to go to is a homepage URL (site root, /my/, or /my/courses.php), check for default homepage.
$ishomepageurl = ($urltogo == ($CFG->wwwroot . '/') ||
$urltogo == ($CFG->wwwroot . '/my/') ||
$urltogo == ($CFG->wwwroot . '/my/courses.php'));
if ($ishomepageurl) {
$homepage = get_home_page();
// Go to my-moodle page instead of site homepage if defaulthomepage set to homepage_my.
if ($homepage === HOMEPAGE_MY && !isguestuser()) {
if ($urltogo == $CFG->wwwroot or $urltogo == $CFG->wwwroot.'/' or $urltogo == $CFG->wwwroot.'/index.php') {
$urltogo = $CFG->wwwroot.'/my/';
}
}
if ($homepage === HOMEPAGE_MYCOURSES && !isguestuser()) {
if ($urltogo == $CFG->wwwroot or $urltogo == $CFG->wwwroot.'/' or $urltogo == $CFG->wwwroot.'/index.php') {
$urltogo = $CFG->wwwroot.'/my/courses.php';
}
}
if ($homepage === HOMEPAGE_URL) {
// Set urltogo based on the default homepage setting.
if ($homepage === HOMEPAGE_SITE) {
$urltogo = $CFG->wwwroot . '/';
} else if ($homepage === HOMEPAGE_MY && !isguestuser()) {
$urltogo = $CFG->wwwroot . '/my/';
} else if ($homepage === HOMEPAGE_MYCOURSES && !isguestuser()) {
$urltogo = $CFG->wwwroot . '/my/courses.php';
} else if ($homepage === HOMEPAGE_URL) {
$urltogo = (string) get_default_home_page_url();
} else if ($homepage === HOMEPAGE_USER) {
// All homepage options disabled - redirect to user preferences page.
$urltogo = $CFG->wwwroot . '/user/preferences.php';
}
}
return $urltogo;
@@ -617,4 +621,3 @@ function core_login_post_signup_requests($data) {
}
}
}
@@ -5,7 +5,9 @@ Feature: Change password
I need to test all the way to change my password
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| testuser | Test | User | moodle@example.com |
@@ -5,7 +5,9 @@ Feature: Embed videos without the media filter
I need to be able to embed videos URL, file and lesson modules
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I am on site homepage
And I turn editing mode on
@@ -5,7 +5,9 @@ Feature: Anonymous feedback
I need to be able to allow anonymous feedbacks
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname |
| user1 | Username | 1 |
| user2 | Username | 2 |
@@ -5,7 +5,9 @@ Feature: Mapping courses in a feedback
I need to be able to map site feedback to courses
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname |
| user1 | Username | 1 |
| user2 | Username | 2 |
@@ -225,7 +225,8 @@ Feature: A user can control their own subscription preferences for a discussion
| user | forum | name | message |
| admin | forum1 | Test post subject one | Test post message one |
And the following config values are set as admin:
| forcelogin | 0 |
| forcelogin | 0 |
| enablemyhome | 1 |
When I am on site homepage
And I follow "Test forum name"
Then "Subscribe to this discussion" "checkbox" should not exist in the "Test post subject one" "table_row"
@@ -5,7 +5,9 @@ Feature: Glossary entries are displayed properly when autolinked
I can set the glossary activity to autolink the entries
Background:
Given remote langimport tests are enabled
Given the following config values are set as admin:
| enablemyhome | 1 |
And remote langimport tests are enabled
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
@@ -2,7 +2,9 @@
Feature: Restoring Moodle 2 backup restores LTI configuration
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Terry1 | Teacher1 | teacher1@example.com |
And the following "courses" exist:
@@ -5,7 +5,9 @@ Feature: View activity completion information in the URL resource
I need to be able to view my URL completion progress
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Vinnie | Student1 | student1@example.com |
| teacher1 | Darrell | Teacher1 | teacher1@example.com |
+6 -2
View File
@@ -2,7 +2,9 @@
Feature: Run tests over my courses page
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| user1 | User | 1 | user1@example.com |
And the following "categories" exist:
@@ -164,7 +166,9 @@ Feature: Run tests over my courses page
@javascript
Scenario: Admin can see relevant blocks but not add or move them
Given I log in as "admin"
Given the following config values are set as admin:
| defaulthomepage | 0 |
And I log in as "admin"
And I am on site homepage
And I turn editing mode on
And I add the "Text" block to the default region with:
@@ -4,6 +4,10 @@ Feature: Add notes to course participants
As a teacher
I need to add notes from the course particpants list
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
Scenario: An teacher can add multiple notes
Given the following "users" exist:
| username | firstname | lastname | email |
@@ -5,7 +5,9 @@ Feature: See the competencies for an activity
I need to see the competencies linked to one activity in the breakdown report.
Background:
Given the following "core_competency > frameworks" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "core_competency > frameworks" exist:
| shortname | idnumber |
| Test-Framework | ID-FW1 |
And the following "core_competency > competencies" exist:
@@ -5,7 +5,9 @@ Feature: In a course administration page, navigate through report page, test for
Go to course administration -> reports
Background:
Given the following "courses" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
@@ -5,7 +5,9 @@ Feature: Language selector menu
I need to be presented with a language selector menu
Background:
Given remote langimport tests are enabled
Given the following config values are set as admin:
| enablemyhome | 1 |
And remote langimport tests are enabled
And the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
@@ -5,7 +5,9 @@ Feature: My courses page block layout in Boost theme
I need to see the blocks in the expected placement
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student@example.com |
And I log in as "admin"
@@ -8,6 +8,8 @@ Feature: Primary navigation
Given the following "users" exist:
| username | firstname | lastname | email |
| user1 | User | One | user1@example.com |
And the following config values are set as admin:
| enablemyhome | 1 |
@javascript @theme_boost
Scenario Outline: Admin sets defaulthomepage and verify the landing page and site home link
@@ -5,7 +5,9 @@ Feature: Reset a tour for Boost
I can reset the tour to force it to display again
Background:
Given I log in as "admin"
Given the following config values are set as admin:
| enablemyhome | 1 |
And I log in as "admin"
And I add a new user tour with:
| Name | First tour |
| Description | My first tour |
@@ -7,6 +7,7 @@ Feature: Welcome message on boost
@accessibility
Scenario: Login and be welcomed on the homepage
Given the following config values are set as admin:
| enablemyhome | 1 |
| defaulthomepage | 0 |
When I log in as "admin"
Then I should see "Acceptance test site" in the "page-header" "region"
@@ -189,6 +189,7 @@ final class boostnavbar_test extends \advanced_testcase {
global $PAGE;
$this->resetAfterTest();
set_config('enablemyhome', 1);
// Unfortunate hack needed because people use global $PAGE around the place.
$PAGE->set_url('/');
$course = $this->getDataGenerator()->create_course();
@@ -371,6 +372,7 @@ final class boostnavbar_test extends \advanced_testcase {
*/
public function test_remove_duplicate_items(array $navbarnodes, array $expected): void {
$this->resetAfterTest();
set_config('enablemyhome', 1);
$page = new \moodle_page();
$page->set_url('/');
@@ -401,6 +403,63 @@ final class boostnavbar_test extends \advanced_testcase {
$this->assertEquals($expected, $actual);
}
/**
* Test the remove_duplicate_items function when the home node is disabled.
*
* @dataProvider remove_duplicate_items_without_home_provider
* @param array $navbarnodes The array containing the text and action of the nodes to be added to the navbar
* @param array $expected The array containing the text of the expected navbar nodes
*/
public function test_remove_duplicate_items_without_home(array $navbarnodes, array $expected): void {
$this->resetAfterTest();
set_config('enablemyhome', 0);
set_config('enabledashboard', 1);
$page = new \moodle_page();
$page->set_url('/');
foreach ($navbarnodes as $node) {
$page->navbar->add($node['text'], $node['action'], \navigation_node::TYPE_CUSTOM);
}
$boostnavbar = $this->getMockBuilder(boostnavbar::class)
->disableOriginalConstructor()
->onlyMethods([])
->getMock();
$rc = new \ReflectionClass(boostnavbar::class);
$rcp = $rc->getProperty('items');
$rcp->setValue($boostnavbar, $page->navbar->get_items());
$rcm = $rc->getMethod('remove_duplicate_items');
$rcm->invoke($boostnavbar);
$values = $rcp->getValue($boostnavbar);
$actual = [];
foreach ($values as $value) {
$actual[] = $value->text;
}
$this->assertEquals($expected, $actual);
}
/**
* Provider for test_remove_duplicate_items_without_home.
*
* @return array
*/
public static function remove_duplicate_items_without_home_provider(): array {
$cases = [];
foreach (self::remove_duplicate_items_provider() as $name => $case) {
[$navbarnodes, $expected] = $case;
// When home is disabled, anonymous users still get 'Home' (site homepage).
// Logged-in users would get 'Dashboard', but this test doesn't log in a user.
$cases[$name . ' (home disabled)'] = [$navbarnodes, $expected];
}
return $cases;
}
/**
* Provider for test_remove_items_that_exist_in_navigation.
@@ -494,6 +553,7 @@ final class boostnavbar_test extends \advanced_testcase {
// Unfortunate hack needed because people use global $PAGE around the place.
$PAGE->set_url('/');
$this->resetAfterTest();
set_config('enablemyhome', 1);
$page = new \moodle_page();
$page->set_url('/');
@@ -5,7 +5,9 @@ Feature: My courses page block layout in Classic theme
I need to see the blocks in the expected placement
Background:
Given the following "users" exist:
Given the following config values are set as admin:
| enablemyhome | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student@example.com |
And I log in as "admin"
@@ -4,6 +4,10 @@ Feature: Welcome message on classic
As a User
I need to see a welcome message on the first page
Background:
Given the following config values are set as admin:
| enablemyhome | 1 |
Scenario: Login and be welcomed on the homepage
Given the following config values are set as admin:
| defaulthomepage | 0 |
@@ -16,11 +16,6 @@
namespace core_user\form;
use core\di;
use core\hook\manager;
use core\lang_string;
use core_user\hook\extend_default_homepage;
defined('MOODLE_INTERNAL') || die;
require_once($CFG->dirroot . '/lib/formslib.php');
@@ -42,24 +37,16 @@ class defaulthomepage_form extends \moodleform {
$mform = $this->_form;
require_once($CFG->dirroot . '/user/lib.php');
$mform->addElement('hidden', 'id');
$mform->setType('id', PARAM_INT);
$options = [HOMEPAGE_SITE => new lang_string('home')];
if (!empty($CFG->enabledashboard)) {
$options[HOMEPAGE_MY] = new lang_string('mymoodle', 'admin');
}
$options[HOMEPAGE_MYCOURSES] = new lang_string('mycourses', 'admin');
// Allow hook callbacks to extend options.
$hook = new extend_default_homepage(true);
di::get(manager::class)->dispatch($hook);
$options += $hook->get_options();
$options = user_get_default_homepage_options();
$mform->addElement('select', 'defaulthomepage', get_string('defaulthomepageuser'), $options);
$mform->addHelpButton('defaulthomepage', 'defaulthomepageuser');
$mform->setDefault('defaulthomepage', get_default_home_page());
$this->add_action_buttons(true, get_string('savechanges'));
}
}
+13 -1
View File
@@ -32,14 +32,26 @@ $PAGE->set_url('/user/defaulthomepage.php', ['id' => $userid]);
list($user, $course) = useredit_setup_preference_page($userid, SITEID);
$options = user_get_default_homepage_options();
if (empty($options)) {
redirect(new moodle_url('/user/preferences.php', ['userid' => $user->id]));
}
$form = new core_user\form\defaulthomepage_form();
$defaulthomepage = get_default_home_page();
$user->defaulthomepage = get_user_preferences('user_home_page_preference', $defaulthomepage, $user);
if (empty($CFG->enabledashboard) && $user->defaulthomepage == HOMEPAGE_MY) {
if (isset($CFG->enablemyhome) && !$CFG->enablemyhome && $user->defaulthomepage == HOMEPAGE_SITE) {
$user->defaulthomepage = $defaulthomepage;
}
if (isset($CFG->enabledashboard) && !$CFG->enabledashboard && $user->defaulthomepage == HOMEPAGE_MY) {
// If the user was using the dashboard but it's disabled, return the default home page.
$user->defaulthomepage = $defaulthomepage;
}
if (isset($CFG->enablemycourses) && !$CFG->enablemycourses && $user->defaulthomepage == HOMEPAGE_MYCOURSES) {
// If the user was using my courses but it's disabled, return the default home page.
$user->defaulthomepage = $defaulthomepage;
}
$form->set_data($user);
$redirect = new moodle_url('/user/preferences.php', ['userid' => $user->id]);
+27
View File
@@ -814,6 +814,33 @@ function user_convert_text_to_menu_items($text, $page) {
return $children;
}
/**
* Returns available default homepage options for user preferences.
*
* @return array
*/
function user_get_default_homepage_options(): array {
global $CFG;
$options = [];
if (!isset($CFG->enablemyhome) || $CFG->enablemyhome) {
$options[HOMEPAGE_SITE] = new lang_string('home');
}
if (!isset($CFG->enabledashboard) || $CFG->enabledashboard) {
$options[HOMEPAGE_MY] = new lang_string('mymoodle', 'admin');
}
if (!isset($CFG->enablemycourses) || $CFG->enablemycourses) {
$options[HOMEPAGE_MYCOURSES] = new lang_string('mycourses', 'admin');
}
// Allow hook callbacks to extend options.
$hook = new \core_user\hook\extend_default_homepage(true);
\core\di::get(\core\hook\manager::class)->dispatch($hook);
$options += $hook->get_options();
return $options;
}
/**
* Get a list of essential user navigation items.
*

Some files were not shown because too many files have changed in this diff Show More