diff --git a/CHANGELOG.md b/CHANGELOG.md index 5276217..d1c2946 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file. - New {userdescription} tag. - New {categorycards} tag (ALPHA}. - New {coursecards} tag (ALPHA). +- New {coursecards_categoryCATID} tag (ALPHA). - New {courseprogress} tag (ALPHA). - New {courseprogressbar} tag (ALPHA). - New {-} tag (soft hyphen) diff --git a/README.md b/README.md index 263ca06..4441a6d 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,7 @@ Moodle metadata filters * {courseprogress}: (ALPHA) Displays course progress status in words. Only works within a course. * {courseprogressbar}: (ALPHA) Displays course progress status as a status bar. Only works within a course. * {coursecards}: (ALPHA) Display available courses as cards. Has only been tested on Front Page. +* {coursecards_categoryID}: (ALPHA) Display available courses from category ID as cards. Has only been tested on Front Page. * {categorycards}: (ALPHA) Display top level categories as cards. Has only been tested on Front Page. * {course_fields}: Displays the custom course fields. NOTE: Respects a custom course field's Visible To setting. * {course_field_shortname} : Display's custom course field. Replace "shortname" with the shortname of a custom course field all in lowercase. NOTE: Respects a custom course field's Visible To setting. diff --git a/filter.php b/filter.php index f5ef948..10fcb1d 100644 --- a/filter.php +++ b/filter.php @@ -852,62 +852,79 @@ function ($matches) { } } - if (stripos($text, '{coursecards}') !== false) { + if (stripos($text, '{coursecards') !== false) { //Only do the expensive regex if it's worth it. global $CFG, $OUTPUT; + $matches = []; - $chelper = new coursecat_helper(); - $chelper->set_show_courses(20)->set_courses_display_options(array( - 'recursive' => true, - 'limit' => $CFG->frontpagecourselimit, - 'viewmoreurl' => new moodle_url('/course/index.php'), - 'viewmoretext' => new lang_string('fulllistofcourses') - )); - - $chelper->set_attributes(array('class' => 'frontpage-course-list-all')); - $courses = core_course_category::get(0)->get_courses($chelper->get_courses_display_options()); - - $rcourseids = array_keys($courses); - - $header = '
'; - $footer = '
'; - $content = ''; - if (count($rcourseids) > 0) { - foreach ($rcourseids as $courseid) { - $course = get_course($courseid); - - // Load image from course image. If none, generate a course image based on the course ID. - $context = context_course::instance($courseid); - if ($course instanceof stdClass) { - $course = new \core_course_list_element($course); - } - $coursefiles = $course->get_course_overviewfiles(); - $imgurl = ''; - foreach ($coursefiles as $file) { - if ($isimage = $file->is_valid_image()) { - $imgurl = file_encode_url("/pluginfile.php", '/' . $file->get_contextid() . '/' - . $file->get_component() . '/' . $file->get_filearea() . $file->get_filepath() - . $file->get_filename(), !$isimage); - $imgurl = new moodle_url($imgurl); - break; + preg_match_all('#{coursecards(|_category([0-9])*)}#', $text, $matches); + $results = array_combine($matches[0], $matches[2]); + + foreach ($results as $placeholder => $categoryid) { + if (empty($categoryid)) { + $categoryid = 0; + } + + try { + $core_course_category = core_course_category::get($categoryid); + } catch (moodle_exception $ex) { + $replace['/'.$placeholder.'/i'] = ''; + continue; + } + + $chelper = new coursecat_helper(); + $chelper->set_show_courses(20)->set_courses_display_options(array( + 'recursive' => true, + 'limit' => $CFG->frontpagecourselimit, + 'viewmoreurl' => new moodle_url('/course/index.php'), + 'viewmoretext' => new lang_string('fulllistofcourses') + )); + + $chelper->set_attributes(array('class' => 'frontpage-course-list-all')); + $courses = $core_course_category->get_courses($chelper->get_courses_display_options()); + + $rcourseids = array_keys($courses); + + $header = '
'; + $footer = '
'; + $content = ''; + if (count($rcourseids) > 0) { + foreach ($rcourseids as $courseid) { + $course = get_course($courseid); + + // Load image from course image. If none, generate a course image based on the course ID. + $context = context_course::instance($courseid); + if ($course instanceof stdClass) { + $course = new \core_course_list_element($course); } - } - if (empty($imgurl)) { - $imgurl = $OUTPUT->get_generated_image_for_id($courseid); - } - $courseurl = new moodle_url('/course/view.php', array('id' => $courseid )); - $content .= ' + $coursefiles = $course->get_course_overviewfiles(); + $imgurl = ''; + foreach ($coursefiles as $file) { + if ($isimage = $file->is_valid_image()) { + $imgurl = file_encode_url("/pluginfile.php", '/' . $file->get_contextid() . '/' + . $file->get_component() . '/' . $file->get_filearea() . $file->get_filepath() + . $file->get_filename(), !$isimage); + $imgurl = new moodle_url($imgurl); + break; + } + } + if (empty($imgurl)) { + $imgurl = $OUTPUT->get_generated_image_for_id($courseid); + } + $courseurl = new moodle_url('/course/view.php', array('id' => $courseid )); + $content .= '
+ . ');height:100px;max-width:300px;padding-top:50%;background-size:cover;' + . 'background-repeat:no-repeat;background-position:center;">
' . $course->get_formatted_name() . '
'; + } } + $replace['/'.$placeholder.'/i'] = !empty($header) ? $header . $content . $footer : ''; } - $replace['/\{coursecards\}/i'] = !empty($header) ? $header . $content . $footer : ''; } }