$classname = get_class($widget);
// Strip namespaces.
$classname = preg_replace('/^.*\\\/', '', $classname);
+ // Keep a copy at this point, we may need to look for a deprecated method.
+ $deprecatedmethod = 'render_'.$classname;
// Remove _renderable suffixes
- $classname = preg_replace('/_renderable/', '', $classname);
+ $classname = preg_replace('/_renderable$/', '', $classname);
$rendermethod = 'render_'.$classname;
if (method_exists($this, $rendermethod)) {
return $this->$rendermethod($widget);
}
+ if ($rendermethod !== $deprecatedmethod && method_exists($this, $deprecatedmethod)) {
+ // This is exactly where we don't want to be.
+ // If you have arrived here you have a renderable component within your plugin that has the name
+ // blah_renderable, and you have a render method render_blah_renderable on your plugin.
+ // In 2.8 we revamped output, as part of this change we changed slightly how renderables got rendered
+ // and the _renderable suffix now gets removed when looking for a render method.
+ // You need to change your renderers render_blah_renderable to render_blah.
+ // Until you do this it will not be possible for a theme to override the renderer to override your method.
+ // Please do it ASAP.
+ static $debugged = array();
+ if (!isset($debugged[$deprecatedmethod])) {
+ debugging(sprintf('Deprecated call. Please rename your renderables render method from %s to %s.',
+ $deprecatedmethod, $rendermethod), DEBUG_DEVELOPER);
+ $debugged[$deprecatedmethod] = true;
+ }
+ return $this->$deprecatedmethod($widget);
+ }
// pass to core renderer if method not found here
return $this->output->render($widget);
}
=== 2.8 ===
* lib/excelllib.class.php has been updated. The class MoodleExcelWorkbook will now only produce excel 2007 files.
+* renderers: We now remove the suffix _renderable when looking for a render method for a renderable.
+ If you have a renderable class named like "blah_renderable" and have a method on a renderer named "render_blah_renderable"
+ you will need to change the name of your render method to "render_blah" instead, as renderable at the end is no longer accepted.
=== 2.6.4 / 2.7.1 ===
* setnew_password_and_mail() and update_internal_user_password() will trigger
*/
class report_log_renderer extends plugin_renderer_base {
+ /**
+ * This method should never be manually called, it should only be called by process.
+ *
+ * @deprecated since 2.8, to be removed in 2.9
+ * @param report_log_renderable $reportlog
+ * @return string
+ */
+ public function render_report_log_renderable(report_log_renderable $reportlog) {
+ debugging('Do not call this method. Please call $renderer->render($reportlog) instead.', DEBUG_DEVELOPER);
+ return $this->render($reportlog);
+ }
+
/**
* Render log report page.
*
* @param report_log_renderable $reportlog object of report_log.
*/
- public function render_report_log_renderable(report_log_renderable $reportlog) {
+ protected function render_report_log(report_log_renderable $reportlog) {
if (empty($reportlog->selectedlogreader)) {
echo $this->output->notification(get_string('nologreaderenabled', 'report_log'), 'notifyproblem');
return;
*/
class report_loglive_renderer extends plugin_renderer_base {
+ /**
+ * This method should never be manually called, it should only be called by process.
+ * Please call the render method instead.
+ *
+ * @deprecated since 2.8, to be removed in 2.9
+ * @param report_loglive_renderable $reportloglive
+ * @return string
+ */
+ public function render_report_loglive_renderable(report_loglive_renderable $reportloglive) {
+ debugging('Do not call this method. Please call $renderer->render($reportloglive) instead.', DEBUG_DEVELOPER);
+ return $this->render($reportloglive);
+ }
+
/**
* Return html to render the loglive page..
*
*
* @return string html used to render the page;
*/
- public function render_report_loglive_renderable(report_loglive_renderable $reportloglive) {
+ protected function render_report_loglive(report_loglive_renderable $reportloglive) {
if (empty($reportloglive->selectedlogreader)) {
return $this->output->notification(get_string('nologreaderenabled', 'report_loglive'), 'notifyproblem');
}
*/
class report_loglive_renderer_ajax extends plugin_renderer_base {
+ /**
+ * This method should never be manually called, it should only be called by process.
+ * Please call the render method instead.
+ *
+ * @deprecated since 2.8, to be removed in 2.9
+ * @param report_loglive_renderable $reportloglive
+ * @return string
+ */
+ public function render_report_loglive_renderable(report_loglive_renderable $reportloglive) {
+ debugging('Do not call this method. Please call $renderer->render($reportloglive) instead.', DEBUG_DEVELOPER);
+ return $this->render($reportloglive);
+ }
+
/**
* Render logs for ajax.
*
*
* @return string html to be displayed to user.
*/
- public function render_report_loglive_renderable(report_loglive_renderable $reportloglive) {
+ protected function render_report_loglive(report_loglive_renderable $reportloglive) {
if (empty($reportloglive->selectedlogreader)) {
return null;
}
* All mod_assign CSS selectors have been qualified with ".path-mod-assign". This means any custom CSS
rules for mod_assign in a theme may need to be updated.
+* The following render methods were renamed, if you have overridden any of these you will need to update your renderer:
+ - report_log_renderer::render_report_log_renderable => report_log_renderer::render_report_log
+ - report_loglive_renderer::render_report_loglive_renderable => report_loglive_renderer::render_report_log
=== 2.7 ===