public static function getinstance()

in classes/api/base.php [121:184]


    public static function getinstance() {
        global $USER, $SESSION, $CFG;

        $msaccountclass = '\local_onenote\api\msaccount';
        $o365class = '\local_onenote\api\o365';
        $class = '';
        $debugtracker = '';
        $debugcaller = 'onenote\api\base\getinstance';

        $iso365user = (class_exists('\local_o365\rest\onenote')
          && \local_o365\utils::is_o365_connected($USER->id) === true) ? true : false;
        if ($iso365user === true) {
            $debugtracker .= '1';

            // Check if the user is logged in to msaccount OneNote, or has o365 OneNote disabled.
            $sesskey = class_exists('\local_msaccount\client') ? 'msaccount_client-'.md5(\local_msaccount\client::SCOPE) : null;
            $disableo365onenote = get_config('local_o365', 'onenote');
            $iso365user = ((!empty($sesskey) && !empty($SESSION->$sesskey)) || !empty($disableo365onenote)) ? false : true;

            if ($iso365user === true) {
                $debugtracker .= '2';
                try {
                    $httpclient = new \local_o365\httpclient();
                    $clientdata = \local_o365\oauth2\clientdata::instance_from_oidc();
                    $onenoteresource = (\local_o365\rest\unified::is_configured() === true)
                        ? \local_o365\rest\unified::get_tokenresource()
                        : \local_o365\rest\onenote::get_tokenresource();
                    $token = \local_o365\oauth2\token::instance($USER->id, $onenoteresource, $clientdata, $httpclient);
                    if (empty($token)) {
                        $debugtracker .= '5';
                        $iso365user = false;
                    }
                } catch (\Exception $e) {
                    \local_onenote\utils::debug($e->getMessage(), $debugcaller, $debugtracker);
                    $debugtracker .= '4';
                    $iso365user = false;
                }
            } else {
                $debugtracker .= '3';
            }

            if ($iso365user === true) {
                $debugtracker .= '7';
                $class = $o365class;
            } else {
                $debugtracker .= '8';
                $class = (class_exists('\local_msaccount\client')) ? $msaccountclass : null;
                \local_onenote\utils::debug('was o365 user but fell back to msaccount.', $debugcaller, $debugtracker);
            }
        } else {
            $debugtracker .= '6';
            $class = (class_exists('\local_msaccount\client')) ? $msaccountclass : null;
        }

        if (empty($class)) {
            \local_onenote\utils::debug('no usable onenote api was found.', $debugcaller, $debugtracker);
            throw new \moodle_exception('error_noapiavailable', 'local_onenote');
        }

        if (empty(self::$instance)) {
            self::$instance = new $class();
        }
        return self::$instance;
    }