/** * Return an XHTML string for the setting * @return string Returns an XHTML string */ public function output_html($data, $query = '') { global $OUTPUT; $button = \html_writer::tag('button', get_string('settings_detectperms_update', 'local_o365'), ['class' => 'refreshperms']); $results = \html_writer::tag('div', '', ['class' => 'results']); $settinghtml = $button . $results; if (\local_o365\adminsetting\detectoidc::setup_step_complete() === true) { $existingsetting = $this->config_read($this->name); if (!empty($existingsetting)) { $messageattrs = ['class' => 'permmessage']; $message = \html_writer::tag('span', get_string('settings_detectperms_valid', 'local_o365'), $messageattrs); } else { $messageattrs = ['class' => 'permmessage']; $message = \html_writer::tag('span', get_string('settings_detectperms_invalid', 'local_o365'), $messageattrs); } } else { $icon = $OUTPUT->pix_icon('i/warning', 'prerequisite not complete', 'moodle'); $message = \html_writer::tag('span', get_string('settings_detectperms_nocreds', 'local_o365')); $settinghtml .= \html_writer::tag('div', $icon . $message, ['class' => 'alert-info local_o365_statusmessage']); } // Using a <script> tag here instead of $PAGE->requires->js() because using $PAGE object loads file too late. $scripturl = new \moodle_url('/local/o365/classes/adminsetting/azuresetup.js'); $settinghtml .= '<script src="' . $scripturl->out() . '"></script>'; $lastresults = get_config('local_o365', 'azuresetupresult'); if (!empty($lastresults)) { $lastresults = @unserialize($lastresults); $lastresults = !empty($lastresults) && is_object($lastresults) ? $lastresults : false; $lastresults = json_encode(['success' => true, 'data' => $lastresults]); } else { $lastresults = json_encode(false); } $unifiedenabled = \local_o365\rest\unified::is_enabled() === true ? 'true' : 'false'; $ajaxurl = new \moodle_url('/local/o365/ajax.php'); $settinghtml .= '<script> $(function() { var opts = { url: "' . $ajaxurl->out() . '", lastresults: ' . $lastresults . ', iconsuccess: "' . addslashes($OUTPUT->pix_icon('t/check', 'success', 'moodle')) . '", iconinfo: "' . addslashes($OUTPUT->pix_icon('i/warning', 'information', 'moodle')) . '", iconerror: "' . addslashes($OUTPUT->pix_icon('t/delete', 'error', 'moodle')) . '", strupdate: "' . addslashes(get_string('settings_azuresetup_update', 'local_o365')) . '", strchecking: "' . addslashes(get_string('settings_azuresetup_checking', 'local_o365')) . '", strmissingperms: "' . addslashes(get_string('settings_azuresetup_missingperms', 'local_o365')) . '", strpermscorrect: "' . addslashes(get_string('settings_azuresetup_permscorrect', 'local_o365')) . '", strfixperms: "' . addslashes(get_string('settings_detectperms_fixperms', 'local_o365')) . '", strfixprereq: "' . addslashes(get_string('settings_detectperms_fixprereq', 'local_o365')) . '", strerrorfix: "' . addslashes(get_string('settings_detectperms_errorfix', 'local_o365')) . '", strerrorcheck: "' . addslashes(get_string('settings_azuresetup_errorcheck', 'local_o365')) . '", strnoinfo: "' . addslashes(get_string('settings_azuresetup_noinfo', 'local_o365')) . '", showunified: ' . $unifiedenabled . ', strunifiedheader: "' . addslashes(get_string('settings_azuresetup_unifiedheader', 'local_o365')) . '", strunifieddesc: "' . addslashes(get_string('settings_azuresetup_unifieddesc', 'local_o365')) . '", strunifiederror: "' . addslashes(get_string('settings_azuresetup_unifiederror', 'local_o365')) . '", strunifiedpermerror: "' . addslashes(get_string('settings_azuresetup_strunifiedpermerror', 'local_o365')) . '", strunifiedmissing: "' . addslashes(get_string('settings_azuresetup_unifiedmissing', 'local_o365')) . '", strunifiedactive: "' . addslashes(get_string('settings_azuresetup_unifiedactive', 'local_o365')) . '", strlegacyheader: "' . addslashes(get_string('settings_azuresetup_legacyheader', 'local_o365')) . '", strlegacydesc: "' . addslashes(get_string('settings_azuresetup_legacydesc', 'local_o365')) . '", strlegacyerror: "' . addslashes(get_string('settings_azuresetup_legacyerror', 'local_o365')) . '", strtenanterror: "' . addslashes(get_string('settings_azuresetup_strtenanterror', 'local_o365')) . '" }; $("#admin-' . $this->name . '").azuresetup(opts); }); </script>'; return format_admin_setting($this, $this->visiblename, $settinghtml, $this->description, true, '', null, $query); }
/** * Check setup in Azure. */ public function mode_checksetup() { $data = new \stdClass(); $success = false; $enableunifiedapi = optional_param('enableunifiedapi', 0, PARAM_INT); set_config('enableunifiedapi', $enableunifiedapi, 'local_o365'); $chineseapi = optional_param('chineseapi', 0, PARAM_INT); set_config('chineseapi', $chineseapi, 'local_o365'); $aadtenant = required_param('aadtenant', PARAM_TEXT); set_config('aadtenant', $aadtenant, 'local_o365'); $odburl = required_param('odburl', PARAM_TEXT); set_config('odburl', $odburl, 'local_o365'); $resource = \local_o365\rest\azuread::get_resource(); $clientdata = \local_o365\oauth2\clientdata::instance_from_oidc(); $httpclient = new \local_o365\httpclient(); $token = \local_o365\oauth2\systemtoken::instance(null, $resource, $clientdata, $httpclient); if (empty($token)) { throw new \moodle_exception('errorchecksystemapiuser', 'local_o365'); } // Legacy API. $legacyapi = new \stdClass(); try { $aadapiclient = new \local_o365\rest\azuread($token, $httpclient); list($missingperms, $haswrite) = $aadapiclient->check_permissions(); $legacyapi->missingperms = $missingperms; $legacyapi->haswrite = $haswrite; } catch (\Exception $e) { \local_o365\utils::debug($e->getMessage(), 'mode_checksetup:legacy'); $legacyapi->error = $e->getMessage(); } $data->legacyapi = $legacyapi; // Unified API. $unifiedapi = new \stdClass(); $unifiedapi->active = false; if (\local_o365\rest\unified::is_enabled() === true) { try { $httpclient = new \local_o365\httpclient(); $unifiedresource = \local_o365\rest\unified::get_resource(); $token = \local_o365\oauth2\systemtoken::instance(null, $unifiedresource, $clientdata, $httpclient); if (empty($token)) { throw new \moodle_exception('errorchecksystemapiuser', 'local_o365'); } $unifiedapiclient = new \local_o365\rest\unified($token, $httpclient); $unifiedpermsresult = $unifiedapiclient->check_permissions(); if ($unifiedpermsresult === null) { $unifiedapi->active = false; } else { $unifiedapi->active = true; $unifiedapi->missingperms = $unifiedpermsresult; } } catch (\Exception $e) { $unifiedapi->active = false; \local_o365\utils::debug($e->getMessage(), 'mode_checksetup:unified'); $unifiedapi->error = $e->getMessage(); } } $data->unifiedapi = $unifiedapi; set_config('unifiedapiactive', (int) $unifiedapi->active, 'local_o365'); set_config('azuresetupresult', serialize($data), 'local_o365'); $success = true; echo $this->ajax_response($data, $success); }