public function mode_connection()

in local/o365/classes/page/ucp.php [272:412]


    public function mode_connection() {
        global $OUTPUT, $USER, $PAGE, $CFG;
        $strtitle = get_string('ucp_index_connection_title', 'local_o365');
        $PAGE->navbar->add($strtitle, new \moodle_url('/local/o365/ucp.php?action=connection'));
        $candisconnect = auth_oidc_connectioncapability($USER->id, 'disconnect');
        $canconnect = auth_oidc_connectioncapability($USER->id, 'connect');
        $canlink = local_o365_connectioncapability($USER->id, 'link');
        $canunlink = local_o365_connectioncapability($USER->id, 'unlink');

        // If the user cannot disconnect or connect than they cannot use this page.
        if (!($candisconnect || $canconnect || $canlink || $canunlink)) {
            auth_oidc_connectioncapability($USER->id, 'both', true);
        }
        $connectiontype = $this->get_connection_type();
        $opname = get_config('auth_oidc', 'opname');
        echo $OUTPUT->header();
        echo \html_writer::start_div('local_o365_ucp_featurepage local_o365_feature_connection');

        echo \html_writer::tag('h3', $strtitle, ['class' => 'local_o365_featureheader local_o365_feature_connection']);

        if (optional_param('o365accountconnected', null, PARAM_TEXT) == 'true') {
            $statusstring = get_string('ucp_o365accountconnected', 'local_o365');
            $statusclasses = 'alert alert-error';
        } else {
            $statusstring = get_string('ucp_connection_disconnected', 'local_o365');
            $statusclasses = 'alert alert-info';
        }

        switch ($connectiontype) {
            case 'aadlogin':
                $statusclasses = 'alert alert-success';
                $o365upn = \local_o365\utils::get_o365_upn($USER->id);
                $statusstring = get_string('ucp_connection_aadlogin_active', 'local_o365', $o365upn);
                break;

            case 'linked':
                $statusclasses = 'alert alert-success';
                $o365upn = \local_o365\utils::get_o365_upn($USER->id);
                $statusstring = get_string('ucp_connection_linked_active', 'local_o365', $o365upn);
                break;
        }

        // Is user connected.
        $howconnected = (\local_o365\utils::is_o365_connected($USER->id) === true) ? $connectiontype : false;
        // If the user cannot connect and is not already connected they cannot do anything.
        $canconnectnotconnected = (($canconnect || $canlink) && $howconnected === false) ||
                ($canconnect && $canunlink && $howconnected != 'aadlogin') ||
                ($candisconnect && $canlink && $howconnected != 'linked');
        // If the user cannot disconnect and is connected, they cannot do anything.
        $candisconnectconnected = ($canunlink && $howconnected == 'linked') || ($candisconnect && $howconnected == 'aadlogin');
        $cannotdoanything = !($candisconnect || $canconnect || $canlink || $canunlink) ||
            !($canconnectnotconnected || $candisconnectconnected);
        if (!$cannotdoanything) {
            echo \html_writer::div(get_string('ucp_connection_desc', 'local_o365'));
        }
        echo \html_writer::start_div('connectionstatus '.$statusclasses);
        echo \html_writer::tag('h5', $statusstring);
        echo \html_writer::end_div();

        if ($cannotdoanything) {
            echo \html_writer::end_div();
            echo $OUTPUT->footer();
            return;
        }

        echo \html_writer::tag('h5', get_string('ucp_connection_options', 'local_o365'));

        // AAD Login.
        if (is_enabled_auth('oidc')) {
            $options = \html_writer::start_div('local_o365_connectionoption');
            $header = \html_writer::tag('h4', get_string('ucp_connection_aadlogin', 'local_o365'));
            $loginflow = get_config('auth_oidc', 'loginflow');
            switch ($loginflow) {
                case 'authcode':
                case 'rocreds':
                    $header .= get_string('ucp_connection_aadlogin_desc_'.$loginflow, 'local_o365', $opname);
                    break;
            }

            switch ($connectiontype) {
                case 'aadlogin';
                    if (is_enabled_auth('manual') === true && $candisconnect) {
                        $disconnectlinkurl = new \moodle_url('/local/o365/ucp.php', ['action' => 'disconnectlogin']);
                        $strdisconnect = get_string('ucp_connection_aadlogin_stop', 'local_o365', $opname);
                        $linkhtml = \html_writer::link($disconnectlinkurl, $strdisconnect);
                        echo $options.$header.\html_writer::tag('h5', $linkhtml);
                        $options = '';
                    }
                    break;

                default:
                    if ($canconnect && ($howconnected != 'linked' || $canunlink)) {
                        $connectlinkurl = new \moodle_url('/local/o365/ucp.php', ['action' => 'connectlogin']);
                        $linkhtml = \html_writer::link($connectlinkurl,
                            get_string('ucp_connection_aadlogin_start', 'local_o365', $opname));
                        echo $options.$header.\html_writer::tag('h5', $linkhtml);
                        $options = '';
                    }
            }
            echo \html_writer::end_div();
        }

        // Connected account.
        $header = \html_writer::start_div('local_o365_connectionoption');
        $header .= \html_writer::tag('h4', get_string('ucp_connection_linked', 'local_o365'));
        $header .= \html_writer::div(get_string('ucp_connection_linked_desc', 'local_o365'));

        $linkhtml = '';
        switch ($connectiontype) {
            case 'linked':
                if ($canunlink) {
                    $disconnecttokenurl = new \moodle_url('/local/o365/ucp.php', ['action' => 'disconnecttoken']);
                    $linkhtml = \html_writer::link($disconnecttokenurl,
                        get_string('ucp_connection_linked_stop', 'local_o365', $opname));
                }
                break;

            case 'aadlogin':
                if ($canlink && auth_oidc_connectioncapability($USER->id, 'disconnect')) {
                    $connecttokenurl = new \moodle_url('/local/o365/ucp.php', ['action' => 'migratetolinked']);
                    $linkhtml = \html_writer::link($connecttokenurl,
                        get_string('ucp_connection_linked_migrate', 'local_o365', $opname));
                }
                break;

            default:
                if ($canlink) {
                    $connecttokenurl = new \moodle_url('/local/o365/ucp.php', ['action' => 'connecttoken']);
                    $linkhtml = \html_writer::link($connecttokenurl,
                        get_string('ucp_connection_linked_start', 'local_o365', $opname));
                }
        }

        if (!empty($linkhtml)) {
            echo $options.$header.\html_writer::tag('h5', $linkhtml);
            echo \html_writer::end_div();
        }

        echo \html_writer::end_div();
        echo $OUTPUT->footer();
    }