diff --git a/CHANGELOG.md b/CHANGELOG.md index 046a98c..3457c72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to this project will be documented in this file. +## [2.0.5] dev-2021-02-02 +### Added +- categoryid parameter for {coursecards categoryid=x} tag (ALPHA). + ## [2.1.0] 2020-11-23 ### Added - New {ifingroup id|idnumber}{/ifingroup} tags. diff --git a/README.md b/README.md index 0d904ce..0731203 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,7 @@ FilterCodes are meant to be entered as regular text in the Moodle WYSIWYG editor * {coursecompletiondate dateTimeFormat} : Course completion date. If not completed, will display "Not completed". Will also detect if completion is not enabled. For information on the optional dateTimeFormat format, see Supported dateTimeFormats Formats in the [FAQ](#faq) section of this documentation. * {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 categoryid=x}: (ALPHA) Display available courses as cards. Optional categoryid parameter to specify one or more category IDs. * {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. * {coursesummary} : Display's the course summary. If placed in a site page, displays the site summary. @@ -581,7 +582,7 @@ Create a Page on your Moodle site, preferably in a course, so that those tags wo * Completion date [{coursecompletiondate strftimedatetime}]: {coursecompletiondate strftimedatetime} * Course progress (ALPHA) [{courseprogress}]: {courseprogress} * Course progress bar (ALPHA) [{courseprogressbar}]: {courseprogressbar} -* Course cards (ALPHA) [{coursecards}]: {coursecards} +* Course cards (ALPHA) [{coursecards categoryid=1}]: If miscellaneous category still exists, it will be displayed: {coursecards categoryid=1} * Category cards (ALPHA) [{categorycards}]: {categorycards} * Total courses [{coursecount}]: {coursecount} * Institution [{institution}]: {institution} diff --git a/filter.php b/filter.php index 9ead253..29f1696 100644 --- a/filter.php +++ b/filter.php @@ -873,9 +873,9 @@ function ($matches) { $coursefiles = $course->get_course_overviewfiles(); 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); + $imgurl = moodle_url::make_pluginfile_url($file->get_contextid(), $file->get_component(), + $file->get_filearea(), null, $file->get_filepath(), + $file->get_filename())->out(false); break; } } @@ -1047,62 +1047,78 @@ function($matches) use ($ccompletion) { } } - 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(| categoryid=([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); } + $coursefiles = $course->get_course_overviewfiles(); + $imgurl = ''; + foreach ($coursefiles as $file) { + if ($isimage = $file->is_valid_image()) { + $imgurl = moodle_url::make_pluginfile_url($file->get_contextid(), $file->get_component(), + $file->get_filearea(), null, $file->get_filepath(), + $file->get_filename())->out(false); + break; + } + } + if (empty($imgurl)) { + $imgurl = $OUTPUT->get_generated_image_for_id($courseid); + } + $courseurl = new moodle_url('/course/view.php', array('id' => $courseid )); + $content .= '
+
+ + + +
+
+ ' . $course->get_formatted_name() . ' +
+
'; } - if (empty($imgurl)) { - $imgurl = $OUTPUT->get_generated_image_for_id($courseid); - } - $courseurl = new moodle_url('/course/view.php', array('id' => $courseid )); - $content .= ' -
- -
-
' . $course->get_formatted_name() . '
-
-
- '; } + $replace['/'.$placeholder.'/i'] = !empty($header) ? $header . $content . $footer : ''; } - $replace['/\{coursecards\}/i'] = !empty($header) ? $header . $content . $footer : ''; } } diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..f39b055 --- /dev/null +++ b/styles.css @@ -0,0 +1,8 @@ +div.filtercodes_coursecards div.card-img-top { + text-align: center; + align-content: center; +} + +div.filtercodes_coursecards div.card-img-top img { + padding-top: 10px; +}