MDL-73679 courseformat: Add support for course format templating
This commit is contained in:
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
}
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -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 <[email protected]>
|
||||
* @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;
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
<?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_courseformat\output\local;
|
||||
|
||||
/**
|
||||
* Base templatable class for coursformat templateables which are typically overridden by course formats.
|
||||
*
|
||||
* @package core_courseformat
|
||||
* @copyright 2022 Andrew Lyons <[email protected]>
|
||||
* @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)/(?<template>.+)$@';
|
||||
$matches = null;
|
||||
|
||||
if (preg_match($specialrenderers, $fullpath, $matches)) {
|
||||
return "core_courseformat/local/{$matches['template']}";
|
||||
}
|
||||
|
||||
throw new \coding_exception("Unable to determine template name for class " . get_class($this));
|
||||
}
|
||||
}
|
||||
@@ -103,20 +103,7 @@ abstract class section_renderer extends core_course_renderer {
|
||||
if (method_exists($this, $rendermethod)) {
|
||||
return $this->$rendermethod($widget);
|
||||
}
|
||||
// Check for special course format templatables.
|
||||
if ($widget instanceof templatable) {
|
||||
// Templatables from both core_courseformat\output\xxx_format\* and format_xxx\output\xxx_format\*
|
||||
// use core_crouseformat/local/xxx_format templates by default.
|
||||
$corepath = 'core_courseformat\/output\/local';
|
||||
$pluginpath = 'format_.+\/output\/courseformat';
|
||||
$specialrenderers = '/^(?<componentpath>' . $corepath . '|' . $pluginpath . ')\/(?<template>.+)$/';
|
||||
$matches = null;
|
||||
|
||||
if (preg_match($specialrenderers, $fullpath, $matches)) {
|
||||
$data = $widget->export_for_template($this);
|
||||
return $this->render_from_template('core_courseformat/local/' . $matches['template'], $data);
|
||||
}
|
||||
}
|
||||
// If nothing works, let the parent class decide.
|
||||
return parent::render($widget);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user