public function upgrade_confirm_abort_install_page(array $abortable, moodle_url $continue) {

        $pluginman = core_plugin_manager::instance();

        if (empty($abortable)) {
            // The UI should not allow this.
            throw new moodle_exception('err_no_plugin_install_abortable', 'core_plugin');
        }

        $out = $this->output->header();
        $out .= $this->output->heading(get_string('cancelinstallhead', 'core_plugin'), 3);
        $out .= $this->output->container(get_string('cancelinstallinfo', 'core_plugin'), 'cancelinstallinfo');

        foreach ($abortable as $pluginfo) {
            $out .= $this->output->heading($pluginfo->displayname.' ('.$pluginfo->component.')', 4);
            $out .= $this->output->container(get_string('cancelinstallinfodir', 'core_plugin', $pluginfo->rootdir));
            if ($repotype = $pluginman->plugin_external_source($pluginfo->component)) {
                $out .= $this->output->container(get_string('uninstalldeleteconfirmexternal', 'core_plugin', $repotype),
                    'uninstalldeleteconfirmexternal');
            }
        }

        $out .= $this->plugins_management_confirm_buttons($continue, $this->page->url);
        $out .= $this->output->footer();

        return $out;
    }