MDL-58836 auth: Improve backwards compatibility

Auth plugins with custom signup forms may not be using renderables / renderers - or
even if they are they may return a renderable that can only be rendered with the renderer from the auth
plugin.

This change checks if the signup form is a renderable - if so try the plugin renderer or fall back on the general renderer.
Otherwise call display() from the mform which is the previous way of rendering an mform.
This commit is contained in:
Damyon Wiese 2017-05-08 16:14:01 +08:00
parent 48ad73619f
commit 406b92c6fd
2 changed files with 14 additions and 2 deletions

View File

@ -128,7 +128,7 @@ class login implements renderable, templatable {
$data->error = $this->error;
$data->forgotpasswordurl = $this->forgotpasswordurl->out(false);
$data->hasidentityproviders = !empty($this->identityproviders);
$data->hasinstructions = !empty($this->instructions);
$data->hasinstructions = !empty($this->instructions) || $this->cansignup;
$data->identityproviders = $identityproviders;
list($data->instructions, $data->instructionsformat) = external_format_text($this->instructions, FORMAT_MOODLE,
context_system::instance()->id);

View File

@ -97,5 +97,17 @@ $PAGE->set_heading($SITE->fullname);
echo $OUTPUT->header();
echo $OUTPUT->render($mform_signup);
if ($mform_signup instanceof renderable) {
// Try and use the renderer from the auth plugin if it exists.
try {
$renderer = $PAGE->get_renderer('auth_' . $authplugin->authtype);
} catch (coding_exception $ce) {
// Fall back on the general renderer.
$renderer = $OUTPUT;
}
echo $renderer->render($mform_signup);
} else {
// Fall back for auth plugins not using renderables.
$mform_signup->display();
}
echo $OUTPUT->footer();