public function process_apicall_response()

in classes/api/base.php [193:247]


    public function process_apicall_response($response, array $expectedstructure = array()) {
        $backtrace = debug_backtrace(0);
        $callingclass = (isset($backtrace[1]['class'])) ? $backtrace[1]['class'] : '?';
        $callingfunc = (isset($backtrace[1]['function'])) ? $backtrace[1]['function'] : '?';
        $callingline = (isset($backtrace[0]['line'])) ? $backtrace[0]['line'] : '?';
        $caller = $callingclass.'::'.$callingfunc.':'.$callingline;

        $result = @json_decode($response, true);
        if (empty($result) || !is_array($result)) {
            \local_onenote\utils::debug('Bad response received', $caller, $response);
            throw new \moodle_exception('erroronenoteapibadcall', 'local_onenote');
        }
        if (isset($result['odata.error'])) {
            $errmsg = 'Error response received.';
            \local_onenote\utils::debug($errmsg, $caller, $result['odata.error']);
            if (isset($result['odata.error']['message']) && isset($result['odata.error']['message']['value'])) {
                $apierrormessage = $result['odata.error']['message']['value'];
                throw new \moodle_exception('erroronenoteapibadcall_message', 'local_onenote', '', htmlentities($apierrormessage));
            } else {
                throw new \moodle_exception('erroronenoteapibadcall', 'local_onenote');
            }
        }
        if (isset($result['error'])) {
            $errmsg = 'Error response received.';
            \local_onenote\utils::debug($errmsg, $caller, $result['error']);
            if (isset($result['error']['message'])) {
                $apierrormessage = 'Unknown error, check logs for more information.';
                if (is_string($result['error']['message'])) {
                    $apierrormessage = $result['error']['message'];
                } else if (is_array($result['error']['message']) && isset($result['error']['message']['value'])) {
                    $apierrormessage = $result['error']['message']['value'];
                }
                throw new \moodle_exception('erroronenoteapibadcall_message', 'local_onenote', '', htmlentities($apierrormessage));
            } else {
                throw new \moodle_exception('erroronenoteapibadcall', 'local_onenote');
            }
        }

        foreach ($expectedstructure as $key => $val) {
            if (!isset($result[$key])) {
                $errmsg = 'Invalid structure received. No "'.$key.'"';
                \local_onenote\utils::debug($errmsg, $caller, $result);
                throw new \moodle_exception('erroronenoteapibadcall_message', 'local_onenote', '', $errmsg);
            }

            if ($val !== null && $result[$key] !== $val) {
                $strreceivedval = \local_onenote\utils::tostring($result[$key]);
                $strval = \local_onenote\utils::tostring($val);
                $errmsg = 'Invalid structure received. Invalid "'.$key.'". Received "'.$strreceivedval.'", expected "'.$strval.'"';
                \local_onenote\utils::debug($errmsg, $caller, $result);
                throw new \moodle_exception('erroronenoteapibadcall_message', 'local_onenote', '', $errmsg);
            }
        }
        return $result;
    }