From d6052154a609de53f3804b52b6c8bc6ba4e5668d Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Fri, 28 Jan 2022 11:09:33 +0800 Subject: [PATCH] MDL-73679 courseformat: Add support for course format templating --- .../format/classes/output/local/content.php | 5 +- .../output/local/content/addsection.php | 9 ++-- .../classes/output/local/content/cm.php | 8 ++-- .../output/local/content/cm/cmname.php | 15 ++++-- .../output/local/content/cm/controlmenu.php | 11 +++-- .../classes/output/local/content/cm/title.php | 9 ++-- .../output/local/content/frontpagesection.php | 13 ++++-- .../classes/output/local/content/section.php | 9 ++-- .../local/content/section/availability.php | 17 ++++--- .../output/local/content/section/cmitem.php | 11 +++-- .../output/local/content/section/cmlist.php | 12 +++-- .../local/content/section/cmsummary.php | 11 +++-- .../local/content/section/controlmenu.php | 17 ++++--- .../output/local/content/section/header.php | 9 ++-- .../output/local/content/section/summary.php | 13 ++++-- .../local/content/sectionnavigation.php | 11 +++-- .../output/local/content/sectionselector.php | 9 ++-- .../local/courseformat_named_templatable.php | 46 +++++++++++++++++++ .../classes/output/section_renderer.php | 13 ------ 19 files changed, 164 insertions(+), 84 deletions(-) create mode 100644 course/format/classes/output/local/courseformat_named_templatable.php diff --git a/course/format/classes/output/local/content.php b/course/format/classes/output/local/content.php index 1ea5290d55b..79a52d2deb0 100644 --- a/course/format/classes/output/local/content.php +++ b/course/format/classes/output/local/content.php @@ -24,10 +24,10 @@ namespace core_courseformat\output\local; +use core\output\named_templatable; use core_courseformat\base as course_format; use course_modinfo; use renderable; -use templatable; /** * Base class to render a course format. @@ -36,7 +36,8 @@ use templatable; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class content implements renderable, templatable { +class content implements named_templatable, renderable { + use courseformat_named_templatable; /** @var core_courseformat\base the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/addsection.php b/course/format/classes/output/local/content/addsection.php index 6c1c5e38f15..801a6bc90d0 100644 --- a/course/format/classes/output/local/content/addsection.php +++ b/course/format/classes/output/local/content/addsection.php @@ -24,10 +24,11 @@ namespace core_courseformat\output\local\content; +use core\output\named_templatable; use core_courseformat\base as course_format; -use renderable; -use templatable; +use core_courseformat\output\local\courseformat_named_templatable; use moodle_url; +use renderable; use stdClass; /** @@ -37,7 +38,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class addsection implements renderable, templatable { +class addsection implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/cm.php b/course/format/classes/output/local/content/cm.php index 05c671a6d00..cc8d96d29b8 100644 --- a/course/format/classes/output/local/content/cm.php +++ b/course/format/classes/output/local/content/cm.php @@ -26,15 +26,16 @@ namespace core_courseformat\output\local\content; use cm_info; use core\activity_dates; +use core\output\named_templatable; use core_availability\info_module; use core_completion\cm_completion_details; -use core_courseformat\base as course_format; use core_course\output\activity_information; +use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; use renderable; use renderer_base; use section_info; use stdClass; -use templatable; /** * Base class to render a course module inside a course format. @@ -43,7 +44,8 @@ use templatable; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class cm implements renderable, templatable { +class cm implements named_templatable, renderable { + use courseformat_named_templatable; /** @var course_format the course format */ protected $format; diff --git a/course/format/classes/output/local/content/cm/cmname.php b/course/format/classes/output/local/content/cm/cmname.php index 7ab70dce111..229940063bc 100644 --- a/course/format/classes/output/local/content/cm/cmname.php +++ b/course/format/classes/output/local/content/cm/cmname.php @@ -25,13 +25,16 @@ namespace core_courseformat\output\local\content\cm; use cm_info; +use context_module; +use core\output\inplace_editable; +use core\output\named_templatable; use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; +use external_api; +use lang_string; +use renderable; use section_info; use stdClass; -use context_module; -use lang_string; -use external_api; -use core\output\inplace_editable; /** * Base class to render a course module inplace editable header. @@ -40,7 +43,9 @@ use core\output\inplace_editable; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class cmname extends inplace_editable { +class cmname extends inplace_editable implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format */ protected $format; diff --git a/course/format/classes/output/local/content/cm/controlmenu.php b/course/format/classes/output/local/content/cm/controlmenu.php index 37636dcbe11..aee13154e04 100644 --- a/course/format/classes/output/local/content/cm/controlmenu.php +++ b/course/format/classes/output/local/content/cm/controlmenu.php @@ -24,14 +24,15 @@ namespace core_courseformat\output\local\content\cm; +use action_menu; +use action_menu_link; use cm_info; +use core\output\named_templatable; use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; use renderable; use section_info; use stdClass; -use templatable; -use action_menu; -use action_menu_link; /** * Base class to render a course module menu inside a course format. @@ -40,7 +41,9 @@ use action_menu_link; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class controlmenu implements renderable, templatable { +class controlmenu implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format */ protected $format; diff --git a/course/format/classes/output/local/content/cm/title.php b/course/format/classes/output/local/content/cm/title.php index 6abb90aefaf..57c06992679 100644 --- a/course/format/classes/output/local/content/cm/title.php +++ b/course/format/classes/output/local/content/cm/title.php @@ -27,12 +27,13 @@ namespace core_courseformat\output\local\content\cm; use cm_info; +use core\output\named_templatable; use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; +use core_text; use renderable; use section_info; use stdClass; -use templatable; -use core_text; /** * Base class to render a course module title inside a course format. @@ -41,7 +42,9 @@ use core_text; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class title implements renderable, templatable { +class title implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format */ protected $format; diff --git a/course/format/classes/output/local/content/frontpagesection.php b/course/format/classes/output/local/content/frontpagesection.php index 3c7411d1440..b689053175a 100644 --- a/course/format/classes/output/local/content/frontpagesection.php +++ b/course/format/classes/output/local/content/frontpagesection.php @@ -26,12 +26,13 @@ namespace core_courseformat\output\local\content; -use core_courseformat\base as course_format; -use renderable; -use templatable; -use section_info; use context_course; +use core\output\named_templatable; +use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; use moodle_url; +use renderable; +use section_info; use stdClass; /** @@ -41,7 +42,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class frontpagesection implements renderable, templatable { +class frontpagesection implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/section.php b/course/format/classes/output/local/content/section.php index dd8f09f5420..a28b38214c4 100644 --- a/course/format/classes/output/local/content/section.php +++ b/course/format/classes/output/local/content/section.php @@ -24,13 +24,14 @@ namespace core_courseformat\output\local\content; -use core_courseformat\base as course_format; use context_course; +use core\output\named_templatable; +use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; use renderable; use renderer_base; use section_info; use stdClass; -use templatable; /** * Base class to render a course section. @@ -39,7 +40,8 @@ use templatable; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class section implements renderable, templatable { +class section implements named_templatable, renderable { + use courseformat_named_templatable; /** @var course_format the course format */ protected $format; @@ -221,7 +223,6 @@ class section implements renderable, templatable { $cmlist = new $this->cmlistclass($format, $section); $data->cmlist = $cmlist->export_for_template($output); $result = true; - } return $result; } diff --git a/course/format/classes/output/local/content/section/availability.php b/course/format/classes/output/local/content/section/availability.php index 1979543907a..a183aa3eed2 100644 --- a/course/format/classes/output/local/content/section/availability.php +++ b/course/format/classes/output/local/content/section/availability.php @@ -24,13 +24,14 @@ namespace core_courseformat\output\local\content\section; -use core_courseformat\base as course_format; -use section_info; -use renderable; -use templatable; -use core_availability\info_section; -use core_availability\info; use context_course; +use core\output\named_templatable; +use core_availability\info; +use core_availability\info_section; +use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; +use renderable; +use section_info; use stdClass; /** @@ -40,7 +41,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class availability implements renderable, templatable { +class availability implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/section/cmitem.php b/course/format/classes/output/local/content/section/cmitem.php index e06ad62fd72..995b324f8ce 100644 --- a/course/format/classes/output/local/content/section/cmitem.php +++ b/course/format/classes/output/local/content/section/cmitem.php @@ -24,12 +24,13 @@ namespace core_courseformat\output\local\content\section; +use cm_info; +use core\output\named_templatable; use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; +use renderable; use renderer_base; use section_info; -use renderable; -use templatable; -use cm_info; use stdClass; /** @@ -39,7 +40,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class cmitem implements renderable, templatable { +class cmitem implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/section/cmlist.php b/course/format/classes/output/local/content/section/cmlist.php index f1f73d7815b..2a2e050dde8 100644 --- a/course/format/classes/output/local/content/section/cmlist.php +++ b/course/format/classes/output/local/content/section/cmlist.php @@ -24,11 +24,12 @@ namespace core_courseformat\output\local\content\section; +use core\output\named_templatable; use core_courseformat\base as course_format; -use section_info; -use renderable; -use templatable; +use core_courseformat\output\local\courseformat_named_templatable; use moodle_url; +use renderable; +use section_info; use stdClass; /** @@ -38,7 +39,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class cmlist implements renderable, templatable { +class cmlist implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; @@ -129,4 +132,3 @@ class cmlist implements renderable, templatable { return $data; } } - diff --git a/course/format/classes/output/local/content/section/cmsummary.php b/course/format/classes/output/local/content/section/cmsummary.php index 8b8bd90a5bf..5e20311ea84 100644 --- a/course/format/classes/output/local/content/section/cmsummary.php +++ b/course/format/classes/output/local/content/section/cmsummary.php @@ -24,11 +24,12 @@ namespace core_courseformat\output\local\content\section; -use core_courseformat\base as course_format; -use section_info; use completion_info; +use core\output\named_templatable; +use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; use renderable; -use templatable; +use section_info; use stdClass; /** @@ -38,7 +39,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class cmsummary implements renderable, templatable { +class cmsummary implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/section/controlmenu.php b/course/format/classes/output/local/content/section/controlmenu.php index c16ef2090e1..a82626b9ca3 100644 --- a/course/format/classes/output/local/content/section/controlmenu.php +++ b/course/format/classes/output/local/content/section/controlmenu.php @@ -24,15 +24,16 @@ namespace core_courseformat\output\local\content\section; -use core_courseformat\base as course_format; -use section_info; -use renderable; -use templatable; +use action_menu; +use action_menu_link_secondary; use context_course; +use core\output\named_templatable; +use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; use moodle_url; use pix_icon; -use action_menu_link_secondary; -use action_menu; +use renderable; +use section_info; use stdClass; /** @@ -42,7 +43,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class controlmenu implements renderable, templatable { +class controlmenu implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/section/header.php b/course/format/classes/output/local/content/section/header.php index e70a64edd73..b1355e5543f 100644 --- a/course/format/classes/output/local/content/section/header.php +++ b/course/format/classes/output/local/content/section/header.php @@ -24,10 +24,11 @@ namespace core_courseformat\output\local\content\section; +use core\output\named_templatable; use core_courseformat\base as course_format; -use section_info; +use core_courseformat\output\local\courseformat_named_templatable; use renderable; -use templatable; +use section_info; use stdClass; /** @@ -37,7 +38,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class header implements renderable, templatable { +class header implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/section/summary.php b/course/format/classes/output/local/content/section/summary.php index 3aea8c6f205..49c8c865a3c 100644 --- a/course/format/classes/output/local/content/section/summary.php +++ b/course/format/classes/output/local/content/section/summary.php @@ -24,11 +24,12 @@ namespace core_courseformat\output\local\content\section; -use core_courseformat\base as course_format; -use section_info; -use renderable; -use templatable; use context_course; +use core\output\named_templatable; +use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; +use renderable; +use section_info; use stdClass; /** @@ -38,7 +39,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class summary implements renderable, templatable { +class summary implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/sectionnavigation.php b/course/format/classes/output/local/content/sectionnavigation.php index 9b9e150eb6e..ac3770f4dd5 100644 --- a/course/format/classes/output/local/content/sectionnavigation.php +++ b/course/format/classes/output/local/content/sectionnavigation.php @@ -24,10 +24,11 @@ namespace core_courseformat\output\local\content; -use core_courseformat\base as course_format; -use renderable; -use templatable; use context_course; +use core\output\named_templatable; +use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; +use renderable; use stdClass; /** @@ -37,7 +38,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class sectionnavigation implements renderable, templatable { +class sectionnavigation implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/content/sectionselector.php b/course/format/classes/output/local/content/sectionselector.php index 07a7ec3d5b4..5694dc5e49c 100644 --- a/course/format/classes/output/local/content/sectionselector.php +++ b/course/format/classes/output/local/content/sectionselector.php @@ -24,11 +24,12 @@ namespace core_courseformat\output\local\content; +use core\output\named_templatable; use core_courseformat\base as course_format; +use core_courseformat\output\local\courseformat_named_templatable; use renderable; -use templatable; -use url_select; use stdClass; +use url_select; /** * Represents the section selector. @@ -37,7 +38,9 @@ use stdClass; * @copyright 2020 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class sectionselector implements renderable, templatable { +class sectionselector implements named_templatable, renderable { + + use courseformat_named_templatable; /** @var course_format the course format class */ protected $format; diff --git a/course/format/classes/output/local/courseformat_named_templatable.php b/course/format/classes/output/local/courseformat_named_templatable.php new file mode 100644 index 00000000000..918824794b9 --- /dev/null +++ b/course/format/classes/output/local/courseformat_named_templatable.php @@ -0,0 +1,46 @@ +. + +namespace core_courseformat\output\local; + +/** + * Base templatable class for coursformat templateables which are typically overridden by course formats. + * + * @package core_courseformat + * @copyright 2022 Andrew Lyons + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +trait courseformat_named_templatable { + + /** + * Get the name of the template to use for this templatable. + * + * @param \renderer_base $renderer The renderer requesting the template name + * @return string + */ + public function get_template_name(\renderer_base $renderer): string { + $fullpath = str_replace('\\', '/', get_class($this)); + + $specialrenderers = '@^.*/output/(local|courseformat)/(?