MDL-68177 course: split course_info_box into different methods
This commit is contained in:
+174
-102
@@ -1122,6 +1122,58 @@ class core_course_renderer extends plugin_renderer_base {
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML to display course name.
|
||||
*
|
||||
* @param coursecat_helper $chelper
|
||||
* @param core_course_list_element $course
|
||||
* @return string
|
||||
*/
|
||||
protected function course_name(coursecat_helper $chelper, core_course_list_element $course): string {
|
||||
$content = '';
|
||||
if ($chelper->get_show_courses() >= self::COURSECAT_SHOW_COURSES_EXPANDED) {
|
||||
$nametag = 'h3';
|
||||
} else {
|
||||
$nametag = 'div';
|
||||
}
|
||||
$coursename = $chelper->get_course_formatted_name($course);
|
||||
$coursenamelink = html_writer::link(new moodle_url('/course/view.php', ['id' => $course->id]),
|
||||
$coursename, ['class' => $course->visible ? '' : 'dimmed']);
|
||||
$content .= html_writer::tag($nametag, $coursenamelink, ['class' => 'coursename']);
|
||||
// If we display course in collapsed form but the course has summary or course contacts, display the link to the info page.
|
||||
$content .= html_writer::start_tag('div', ['class' => 'moreinfo']);
|
||||
if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
|
||||
if ($course->has_summary() || $course->has_course_contacts() || $course->has_course_overviewfiles()
|
||||
|| $course->has_custom_fields()) {
|
||||
$url = new moodle_url('/course/info.php', ['id' => $course->id]);
|
||||
$image = $this->output->pix_icon('i/info', $this->strings->summary);
|
||||
$content .= html_writer::link($url, $image, ['title' => $this->strings->summary]);
|
||||
// Make sure JS file to expand course content is included.
|
||||
$this->coursecat_include_js();
|
||||
}
|
||||
}
|
||||
$content .= html_writer::end_tag('div');
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML to display course enrolment icons.
|
||||
*
|
||||
* @param core_course_list_element $course
|
||||
* @return string
|
||||
*/
|
||||
protected function course_enrolment_icons(core_course_list_element $course): string {
|
||||
$content = '';
|
||||
if ($icons = enrol_get_course_info_icons($course)) {
|
||||
$content .= html_writer::start_tag('div', ['class' => 'enrolmenticons']);
|
||||
foreach ($icons as $icon) {
|
||||
$content .= $this->render($icon);
|
||||
}
|
||||
$content .= html_writer::end_tag('div');
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays one course in the list of courses.
|
||||
*
|
||||
@@ -1146,11 +1198,8 @@ class core_course_renderer extends plugin_renderer_base {
|
||||
}
|
||||
$content = '';
|
||||
$classes = trim('coursebox clearfix '. $additionalclasses);
|
||||
if ($chelper->get_show_courses() >= self::COURSECAT_SHOW_COURSES_EXPANDED) {
|
||||
$nametag = 'h3';
|
||||
} else {
|
||||
if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
|
||||
$classes .= ' collapsed';
|
||||
$nametag = 'div';
|
||||
}
|
||||
|
||||
// .coursebox
|
||||
@@ -1161,45 +1210,130 @@ class core_course_renderer extends plugin_renderer_base {
|
||||
));
|
||||
|
||||
$content .= html_writer::start_tag('div', array('class' => 'info'));
|
||||
|
||||
// course name
|
||||
$coursename = $chelper->get_course_formatted_name($course);
|
||||
$coursenamelink = html_writer::link(new moodle_url('/course/view.php', array('id' => $course->id)),
|
||||
$coursename, array('class' => $course->visible ? '' : 'dimmed'));
|
||||
$content .= html_writer::tag($nametag, $coursenamelink, array('class' => 'coursename'));
|
||||
// If we display course in collapsed form but the course has summary or course contacts, display the link to the info page.
|
||||
$content .= html_writer::start_tag('div', array('class' => 'moreinfo'));
|
||||
if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
|
||||
if ($course->has_summary() || $course->has_course_contacts() || $course->has_course_overviewfiles()
|
||||
|| $course->has_custom_fields()) {
|
||||
$url = new moodle_url('/course/info.php', array('id' => $course->id));
|
||||
$image = $this->output->pix_icon('i/info', $this->strings->summary);
|
||||
$content .= html_writer::link($url, $image, array('title' => $this->strings->summary));
|
||||
// Make sure JS file to expand course content is included.
|
||||
$this->coursecat_include_js();
|
||||
}
|
||||
}
|
||||
$content .= html_writer::end_tag('div'); // .moreinfo
|
||||
|
||||
// print enrolmenticons
|
||||
if ($icons = enrol_get_course_info_icons($course)) {
|
||||
$content .= html_writer::start_tag('div', array('class' => 'enrolmenticons'));
|
||||
foreach ($icons as $pix_icon) {
|
||||
$content .= $this->render($pix_icon);
|
||||
}
|
||||
$content .= html_writer::end_tag('div'); // .enrolmenticons
|
||||
}
|
||||
|
||||
$content .= html_writer::end_tag('div'); // .info
|
||||
$content .= $this->course_name($chelper, $course);
|
||||
$content .= $this->course_enrolment_icons($course);
|
||||
$content .= html_writer::end_tag('div');
|
||||
|
||||
$content .= html_writer::start_tag('div', array('class' => 'content'));
|
||||
$content .= $this->coursecat_coursebox_content($chelper, $course);
|
||||
$content .= html_writer::end_tag('div'); // .content
|
||||
$content .= html_writer::end_tag('div');
|
||||
|
||||
$content .= html_writer::end_tag('div'); // .coursebox
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML to display course summary.
|
||||
*
|
||||
* @param coursecat_helper $chelper
|
||||
* @param core_course_list_element $course
|
||||
* @return string
|
||||
*/
|
||||
protected function course_summary(coursecat_helper $chelper, core_course_list_element $course): string {
|
||||
$content = '';
|
||||
if ($course->has_summary()) {
|
||||
$content .= html_writer::start_tag('div', ['class' => 'summary']);
|
||||
$content .= $chelper->get_course_formatted_summary($course,
|
||||
array('overflowdiv' => true, 'noclean' => true, 'para' => false));
|
||||
$content .= html_writer::end_tag('div');
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML to display course contacts.
|
||||
*
|
||||
* @param core_course_list_element $course
|
||||
* @return string
|
||||
*/
|
||||
protected function course_contacts(core_course_list_element $course) {
|
||||
$content = '';
|
||||
if ($course->has_course_contacts()) {
|
||||
$content .= html_writer::start_tag('ul', ['class' => 'teachers']);
|
||||
foreach ($course->get_course_contacts() as $coursecontact) {
|
||||
$rolenames = array_map(function ($role) {
|
||||
return $role->displayname;
|
||||
}, $coursecontact['roles']);
|
||||
$name = implode(", ", $rolenames).': '.
|
||||
html_writer::link(new moodle_url('/user/view.php',
|
||||
['id' => $coursecontact['user']->id, 'course' => SITEID]),
|
||||
$coursecontact['username']);
|
||||
$content .= html_writer::tag('li', $name);
|
||||
}
|
||||
$content .= html_writer::end_tag('ul');
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML to display course overview files.
|
||||
*
|
||||
* @param core_course_list_element $course
|
||||
* @return string
|
||||
*/
|
||||
protected function course_overview_files(core_course_list_element $course): string {
|
||||
global $CFG;
|
||||
|
||||
$contentimages = $contentfiles = '';
|
||||
foreach ($course->get_course_overviewfiles() as $file) {
|
||||
$isimage = $file->is_valid_image();
|
||||
$url = moodle_url::make_file_url("$CFG->wwwroot/pluginfile.php",
|
||||
'/' . $file->get_contextid() . '/' . $file->get_component() . '/' .
|
||||
$file->get_filearea() . $file->get_filepath() . $file->get_filename(), !$isimage);
|
||||
if ($isimage) {
|
||||
$contentimages .= html_writer::tag('div',
|
||||
html_writer::empty_tag('img', ['src' => $url]),
|
||||
['class' => 'courseimage']);
|
||||
} else {
|
||||
$image = $this->output->pix_icon(file_file_icon($file, 24), $file->get_filename(), 'moodle');
|
||||
$filename = html_writer::tag('span', $image, ['class' => 'fp-icon']).
|
||||
html_writer::tag('span', $file->get_filename(), ['class' => 'fp-filename']);
|
||||
$contentfiles .= html_writer::tag('span',
|
||||
html_writer::link($url, $filename),
|
||||
['class' => 'coursefile fp-filename-icon']);
|
||||
}
|
||||
}
|
||||
return $contentimages . $contentfiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML to display course category name.
|
||||
*
|
||||
* @param coursecat_helper $chelper
|
||||
* @param core_course_list_element $course
|
||||
* @return string
|
||||
*/
|
||||
protected function course_category_name(coursecat_helper $chelper, core_course_list_element $course): string {
|
||||
$content = '';
|
||||
// Display course category if necessary (for example in search results).
|
||||
if ($chelper->get_show_courses() == self::COURSECAT_SHOW_COURSES_EXPANDED_WITH_CAT) {
|
||||
if ($cat = core_course_category::get($course->category, IGNORE_MISSING)) {
|
||||
$content .= html_writer::start_tag('div', ['class' => 'coursecat']);
|
||||
$content .= get_string('category').': '.
|
||||
html_writer::link(new moodle_url('/course/index.php', ['categoryid' => $cat->id]),
|
||||
$cat->get_formatted_name(), ['class' => $cat->visible ? '' : 'dimmed']);
|
||||
$content .= html_writer::end_tag('div');
|
||||
}
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML to display course custom fields.
|
||||
*
|
||||
* @param core_course_list_element $course
|
||||
* @return string
|
||||
*/
|
||||
protected function course_custom_fields(core_course_list_element $course): string {
|
||||
$content = '';
|
||||
if ($course->has_custom_fields()) {
|
||||
$handler = core_course\customfield\course_handler::create();
|
||||
$customfields = $handler->display_custom_fields_data($course->get_custom_fields());
|
||||
$content .= \html_writer::tag('div', $customfields, ['class' => 'customfields-container']);
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML to display course content (summary, course contacts and optionally category name)
|
||||
*
|
||||
@@ -1210,79 +1344,17 @@ class core_course_renderer extends plugin_renderer_base {
|
||||
* @return string
|
||||
*/
|
||||
protected function coursecat_coursebox_content(coursecat_helper $chelper, $course) {
|
||||
global $CFG;
|
||||
if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
|
||||
return '';
|
||||
}
|
||||
if ($course instanceof stdClass) {
|
||||
$course = new core_course_list_element($course);
|
||||
}
|
||||
$content = '';
|
||||
|
||||
// display course summary
|
||||
if ($course->has_summary()) {
|
||||
$content .= html_writer::start_tag('div', array('class' => 'summary'));
|
||||
$content .= $chelper->get_course_formatted_summary($course,
|
||||
array('overflowdiv' => true, 'noclean' => true, 'para' => false));
|
||||
$content .= html_writer::end_tag('div'); // .summary
|
||||
}
|
||||
|
||||
// display course overview files
|
||||
$contentimages = $contentfiles = '';
|
||||
foreach ($course->get_course_overviewfiles() as $file) {
|
||||
$isimage = $file->is_valid_image();
|
||||
$url = file_encode_url("$CFG->wwwroot/pluginfile.php",
|
||||
'/'. $file->get_contextid(). '/'. $file->get_component(). '/'.
|
||||
$file->get_filearea(). $file->get_filepath(). $file->get_filename(), !$isimage);
|
||||
if ($isimage) {
|
||||
$contentimages .= html_writer::tag('div',
|
||||
html_writer::empty_tag('img', array('src' => $url)),
|
||||
array('class' => 'courseimage'));
|
||||
} else {
|
||||
$image = $this->output->pix_icon(file_file_icon($file, 24), $file->get_filename(), 'moodle');
|
||||
$filename = html_writer::tag('span', $image, array('class' => 'fp-icon')).
|
||||
html_writer::tag('span', $file->get_filename(), array('class' => 'fp-filename'));
|
||||
$contentfiles .= html_writer::tag('span',
|
||||
html_writer::link($url, $filename),
|
||||
array('class' => 'coursefile fp-filename-icon'));
|
||||
}
|
||||
}
|
||||
$content .= $contentimages. $contentfiles;
|
||||
|
||||
// Display course contacts. See core_course_list_element::get_course_contacts().
|
||||
if ($course->has_course_contacts()) {
|
||||
$content .= html_writer::start_tag('ul', array('class' => 'teachers'));
|
||||
foreach ($course->get_course_contacts() as $coursecontact) {
|
||||
$rolenames = array_map(function ($role) {
|
||||
return $role->displayname;
|
||||
}, $coursecontact['roles']);
|
||||
$name = implode(", ", $rolenames).': '.
|
||||
html_writer::link(new moodle_url('/user/view.php',
|
||||
array('id' => $coursecontact['user']->id, 'course' => SITEID)),
|
||||
$coursecontact['username']);
|
||||
$content .= html_writer::tag('li', $name);
|
||||
}
|
||||
$content .= html_writer::end_tag('ul'); // .teachers
|
||||
}
|
||||
|
||||
// display course category if necessary (for example in search results)
|
||||
if ($chelper->get_show_courses() == self::COURSECAT_SHOW_COURSES_EXPANDED_WITH_CAT) {
|
||||
if ($cat = core_course_category::get($course->category, IGNORE_MISSING)) {
|
||||
$content .= html_writer::start_tag('div', array('class' => 'coursecat'));
|
||||
$content .= get_string('category').': '.
|
||||
html_writer::link(new moodle_url('/course/index.php', array('categoryid' => $cat->id)),
|
||||
$cat->get_formatted_name(), array('class' => $cat->visible ? '' : 'dimmed'));
|
||||
$content .= html_writer::end_tag('div'); // .coursecat
|
||||
}
|
||||
}
|
||||
|
||||
// Display custom fields.
|
||||
if ($course->has_custom_fields()) {
|
||||
$handler = core_course\customfield\course_handler::create();
|
||||
$customfields = $handler->display_custom_fields_data($course->get_custom_fields());
|
||||
$content .= \html_writer::tag('div', $customfields, ['class' => 'customfields-container']);
|
||||
}
|
||||
|
||||
$content = $this->course_summary($chelper, $course);
|
||||
$content .= $this->course_overview_files($course);
|
||||
$content .= $this->course_contacts($course);
|
||||
$content .= $this->course_category_name($chelper, $course);
|
||||
$content .= $this->course_custom_fields($course);
|
||||
return $content;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,15 @@ information provided here is intended especially for developers.
|
||||
|
||||
* The function get_module_metadata is now deprecated. Please use \core_course\local\service\content_item_service instead.
|
||||
* Activity module names are now PARAM_ALPHANUM instead of PARAM_ALPHA so integers can be used in activity module names
|
||||
* The following functions have been added to core_course_renderer class to have more granularity. They can be overriden in
|
||||
extending classes:
|
||||
- course_name
|
||||
- course_enrolment_icons
|
||||
- course_summary
|
||||
- course_contacts
|
||||
- course_overview_files
|
||||
- course_category_name
|
||||
- course_custom_fields
|
||||
|
||||
=== 3.8 ===
|
||||
|
||||
|
||||
Reference in New Issue
Block a user