MDL-70801 core_my: Add a new courses page

This commit is contained in:
Mathew May 2021-10-21 12:13:36 +08:00
parent c69c33b14d
commit 6ca9c2154a
33 changed files with 417 additions and 51 deletions

View file

@ -60,6 +60,7 @@ $PAGE->blocks->add_custom_regions_for_pagetype($pagetype);
$pagetype = explode('-', $pagetype);
switch ($pagetype[0]) {
case 'my':
case 'mycourses':
$PAGE->set_blocks_editing_capability('moodle/my:manageblocks');
break;
case 'user':

View file

@ -2647,7 +2647,30 @@ function blocks_add_default_system_blocks() {
$subpagepattern = null;
}
$newblocks = array('timeline', 'private_files', 'badges', 'calendar_month');
$newcontent = array('myoverview');
$page->blocks->add_blocks(array(BLOCK_POS_RIGHT => $newblocks, 'content' => $newcontent), 'my-index', $subpagepattern);
if ($defaultmycoursespage = $DB->get_record('my_pages', array('userid' => null, 'name' => '__courses', 'private' => 0))) {
$mycoursesubpagepattern = $defaultmycoursespage->id;
} else {
$mycoursesubpagepattern = null;
}
$page->blocks->add_blocks([
BLOCK_POS_RIGHT => [
'private_files',
'badges',
],
'content' => [
'timeline',
'calendar_month',
]],
'my-index',
$subpagepattern
);
$page->blocks->add_blocks([
'content' => [
'myoverview'
]],
'my-index',
$mycoursesubpagepattern
);
}

View file

@ -0,0 +1,58 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core\event;
/**
* My courses viewed event class.
*
* Class for event to be triggered when a user views their My courses page.
*
* @package core
* @copyright 2021 Mathew May <mathew.solutions>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class mycourses_viewed extends base {
/**
* Init method.
*
* @return void
*/
protected function init(): void {
$this->data['crud'] = 'r';
$this->data['edulevel'] = self::LEVEL_OTHER;
}
/**
* Returns description of what happened.
*
* @return string
*/
public function get_description(): string {
return "The user with id '$this->userid' has viewed their my courses page";
}
/**
* Return localised event name.
*
* @return string
*/
public static function get_name(): string {
return get_string('eventmycoursesviewed', 'core');
}
}

View file

@ -57,8 +57,8 @@ class primary extends view {
}
}
// Add a dummy mycourse link to a mycourses page.
$this->add(get_string('mycourses'), new \moodle_url('/course/index.php'), self::TYPE_ROOTNODE, null, 'courses');
// Add the mycourses link.
$this->add(get_string('mycourses'), new \moodle_url('/my/courses.php'), self::TYPE_ROOTNODE, null, 'courses');
// Add the site admin node. We are using the settingsnav so as to avoid rechecking permissions again.
$settingsnav = $this->page->settingsnav;

View file

@ -310,6 +310,13 @@ function xmldb_main_install() {
$mypage->private = 1;
$DB->insert_record('my_pages', $mypage);
$mycoursespage = new stdClass();
$mycoursespage->userid = null;
$mycoursespage->name = '__courses';
$mycoursespage->private = 0;
$mycoursespage->sortorder = 0;
$DB->insert_record('my_pages', $mycoursespage);
// Set a sensible default sort order for the most-used question types.
set_config('multichoice_sortorder', 1, 'question');
set_config('truefalse_sortorder', 2, 'question');

View file

@ -3145,5 +3145,17 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2021110800.03);
}
if ($oldversion < 2021111200.01) {
$mycoursespage = new stdClass();
$mycoursespage->userid = null;
$mycoursespage->name = '__courses';
$mycoursespage->private = 0;
$mycoursespage->sortorder = 0;
$DB->insert_record('my_pages', $mycoursespage);
upgrade_main_savepoint(true, 2021111200.01);
}
return true;
}

View file

@ -1328,7 +1328,14 @@ class global_navigation extends navigation_node {
$this->rootnodes['site'] = $this->add_course($SITE);
$this->rootnodes['myprofile'] = $this->add(get_string('profile'), null, self::TYPE_USER, null, 'myprofile');
$this->rootnodes['currentcourse'] = $this->add(get_string('currentcourse'), null, self::TYPE_ROOTNODE, null, 'currentcourse');
$this->rootnodes['mycourses'] = $this->add(get_string('mycourses'), null, self::TYPE_ROOTNODE, null, 'mycourses', new pix_icon('i/course', ''));
$this->rootnodes['mycourses'] = $this->add(
get_string('mycourses'),
new moodle_url('/my/courses.php'),
self::TYPE_ROOTNODE,
null,
'mycourses',
new pix_icon('i/course', '')
);
$this->rootnodes['courses'] = $this->add(get_string('courses'), new moodle_url('/course/index.php'), self::TYPE_ROOTNODE, null, 'courses');
if (!core_course_category::user_top()) {
$this->rootnodes['courses']->hide();
@ -1521,7 +1528,7 @@ class global_navigation extends navigation_node {
foreach ($this->rootnodes as $node) {
// Dont remove the home node
/** @var navigation_node $node */
if (!in_array($node->key, ['home', 'myhome']) && !$node->has_children() && !$node->isactive) {
if (!in_array($node->key, ['home', 'mycourses', 'myhome']) && !$node->has_children() && !$node->isactive) {
$node->remove();
}
}
@ -2880,6 +2887,9 @@ class global_navigation extends navigation_node {
// This required as there are not other guaranteed nodes that may be loaded.
$coursenode->add('frontpageloaded', null, self::TYPE_CUSTOM, null, 'frontpageloaded')->display = false;
// Add My courses to the site pages within the navigation structure so the block can read it.
$coursenode->add(get_string('mycourses'), new moodle_url('/my/courses.php'), self::TYPE_CUSTOM, null, 'mycourses');
// Participants.
if ($navoptions->participants) {
$coursenode->add(get_string('participants'), new moodle_url('/user/index.php?id='.$course->id), self::TYPE_CUSTOM, get_string('participants'), 'participants');

View file

@ -4372,7 +4372,8 @@ EOD;
$pagetype = $this->page->pagetype;
$homepage = get_home_page();
$homepagetype = null;
if ($homepage == HOMEPAGE_MY) {
// Add a special case since /my/courses is a part of the /my subsystem.
if ($homepage == HOMEPAGE_MY && $this->page->title !== get_string('mycourses')) {
$homepagetype = 'my-index';
} else if ($homepage == HOMEPAGE_SITE) {
$homepagetype = 'site-index';

View file

@ -717,6 +717,9 @@ class behat_navigation extends behat_base {
case 'Homepage':
return new moodle_url('/');
case 'My courses':
return new moodle_url('/my/courses.php');
case 'Admin notifications':
return new moodle_url('/admin/');