You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
213 lines
8.6 KiB
213 lines
8.6 KiB
2 years ago
|
<?php
|
||
|
/**
|
||
|
* Edit configuration for an individual auth plugin
|
||
|
*/
|
||
|
|
||
|
require_once '../config.php';
|
||
|
require_once $CFG->libdir.'/adminlib.php';
|
||
|
|
||
|
$auth = required_param('auth', PARAM_PLUGIN);
|
||
|
$PAGE->set_pagetype('admin-auth-' . $auth);
|
||
|
|
||
|
admin_externalpage_setup('authsetting'.$auth);
|
||
|
|
||
|
$authplugin = get_auth_plugin($auth);
|
||
|
$err = array();
|
||
|
|
||
|
$returnurl = "$CFG->wwwroot/$CFG->admin/settings.php?section=manageauths";
|
||
|
|
||
|
debugging("Use of config.html files in authentication plugins have been deprecated. " .
|
||
|
" Please migrate your plugin to use the admin settings API", DEBUG_DEVELOPER);
|
||
|
|
||
|
// save configuration changes
|
||
|
if ($frm = data_submitted() and confirm_sesskey()) {
|
||
|
|
||
|
$authplugin->validate_form($frm, $err);
|
||
|
|
||
|
if (count($err) == 0) {
|
||
|
|
||
|
// save plugin config
|
||
|
if ($authplugin->process_config($frm)) {
|
||
|
|
||
|
// save field lock configuration
|
||
|
foreach ($frm as $name => $value) {
|
||
|
if (preg_match('/^lockconfig_(.+?)$/', $name, $matches)) {
|
||
|
$plugin = "auth/$auth";
|
||
|
$name = $matches[1];
|
||
|
set_config($name, $value, $plugin);
|
||
|
}
|
||
|
}
|
||
|
redirect($returnurl);
|
||
|
exit;
|
||
|
}
|
||
|
} else {
|
||
|
foreach ($err as $key => $value) {
|
||
|
$focus = "form.$key";
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
$frmlegacystyle = get_config('auth/'.$auth);
|
||
|
$frmnewstyle = get_config('auth_'.$auth);
|
||
|
$frm = (object)array_merge((array)$frmlegacystyle, (array)$frmnewstyle);
|
||
|
}
|
||
|
|
||
|
$user_fields = $authplugin->userfields;
|
||
|
//$user_fields = array("firstname", "lastname", "email", "phone1", "phone2", "institution", "department", "address", "city", "country", "description", "idnumber", "lang");
|
||
|
|
||
|
/// Get the auth title (from core or own auth lang files)
|
||
|
$authtitle = $authplugin->get_title();
|
||
|
/// Get the auth descriptions (from core or own auth lang files)
|
||
|
$authdescription = $authplugin->get_description();
|
||
|
|
||
|
// output configuration form
|
||
|
echo $OUTPUT->header();
|
||
|
|
||
|
// choose an authentication method
|
||
|
echo "<form id=\"authmenu\" method=\"post\" action=\"auth_config.php\">\n";
|
||
|
echo "<div>\n";
|
||
|
echo "<input type=\"hidden\" name=\"sesskey\" value=\"".sesskey()."\" />\n";
|
||
|
echo "<input type=\"hidden\" name=\"auth\" value=\"".$auth."\" />\n";
|
||
|
|
||
|
// auth plugin description
|
||
|
echo $OUTPUT->box_start();
|
||
|
echo $OUTPUT->heading($authtitle);
|
||
|
echo $OUTPUT->box_start('informationbox');
|
||
|
echo $authdescription;
|
||
|
echo $OUTPUT->box_end();
|
||
|
echo "<hr />\n";
|
||
|
$authplugin->config_form($frm, $err, $user_fields);
|
||
|
echo $OUTPUT->box_end();
|
||
|
echo '<p style="text-align: center"><input type="submit" value="' . get_string("savechanges") . "\" /></p>\n";
|
||
|
echo "</div>\n";
|
||
|
echo "</form>\n";
|
||
|
|
||
|
$PAGE->requires->string_for_js('unmaskpassword', 'core_form');
|
||
|
$PAGE->requires->yui_module('moodle-auth-passwordunmask', 'M.auth.passwordunmask');
|
||
|
|
||
|
echo $OUTPUT->footer();
|
||
|
exit;
|
||
|
|
||
|
/// Functions /////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
/**
|
||
|
* auth field locking
|
||
|
* Good enough for most auth plugins
|
||
|
* but some may want a custom one if they are offering
|
||
|
* other options
|
||
|
* Note: lockconfig_ fields have special handling.
|
||
|
*
|
||
|
* @param string $auth authentication plugin shortname
|
||
|
* @param array $user_fields user profile fields
|
||
|
* @param string $helptext help text to be displayed at top of form
|
||
|
* @param boolean $retrieveopts Map fields or lock only.
|
||
|
* @param boolean $updateopts Allow remote updates
|
||
|
* @param array $customfields list of custom profile fields
|
||
|
* @deprecated since Moodle 3.3
|
||
|
*/
|
||
|
function print_auth_lock_options($auth, $user_fields, $helptext, $retrieveopts, $updateopts, $customfields = array()) {
|
||
|
global $DB, $OUTPUT;
|
||
|
debugging("The function 'print_auth_lock_options' has been deprecated, " .
|
||
|
"Please migrate your code to use the admin settings API and use the function 'display_auth_lock_options' instead. ",
|
||
|
DEBUG_DEVELOPER);
|
||
|
|
||
|
echo '<tr><td colspan="3">';
|
||
|
if ($retrieveopts) {
|
||
|
echo $OUTPUT->heading(get_string('auth_data_mapping', 'auth'));
|
||
|
} else {
|
||
|
echo $OUTPUT->heading(get_string('auth_fieldlocks', 'auth'));
|
||
|
}
|
||
|
echo '</td></tr>';
|
||
|
|
||
|
$lockoptions = array ('unlocked' => get_string('unlocked', 'auth'),
|
||
|
'unlockedifempty' => get_string('unlockedifempty', 'auth'),
|
||
|
'locked' => get_string('locked', 'auth'));
|
||
|
$updatelocaloptions = array('oncreate' => get_string('update_oncreate', 'auth'),
|
||
|
'onlogin' => get_string('update_onlogin', 'auth'));
|
||
|
$updateextoptions = array('0' => get_string('update_never', 'auth'),
|
||
|
'1' => get_string('update_onupdate', 'auth'));
|
||
|
|
||
|
$pluginconfig = get_config("auth/$auth");
|
||
|
|
||
|
// Helptext is on a field with rowspan.
|
||
|
if (empty($helptext)) {
|
||
|
$helptext = ' ';
|
||
|
}
|
||
|
|
||
|
// If we have custom fields then merge them with user fields.
|
||
|
if (!empty($customfields)) {
|
||
|
$user_fields = array_merge($user_fields, $customfields);
|
||
|
}
|
||
|
|
||
|
if (!empty($customfields)) {
|
||
|
$customfieldname = $DB->get_records('user_info_field', null, '', 'shortname, name');
|
||
|
}
|
||
|
foreach ($user_fields as $field) {
|
||
|
// Define some vars we'll work with.
|
||
|
if (!isset($pluginconfig->{"field_map_$field"})) {
|
||
|
$pluginconfig->{"field_map_$field"} = '';
|
||
|
}
|
||
|
if (!isset($pluginconfig->{"field_updatelocal_$field"})) {
|
||
|
$pluginconfig->{"field_updatelocal_$field"} = '';
|
||
|
}
|
||
|
if (!isset($pluginconfig->{"field_updateremote_$field"})) {
|
||
|
$pluginconfig->{"field_updateremote_$field"} = '';
|
||
|
}
|
||
|
if (!isset($pluginconfig->{"field_lock_$field"})) {
|
||
|
$pluginconfig->{"field_lock_$field"} = '';
|
||
|
}
|
||
|
|
||
|
// Define the fieldname we display to the user.
|
||
|
$fieldname = $field;
|
||
|
if ($fieldname === 'lang') {
|
||
|
$fieldname = get_string('language');
|
||
|
} elseif (!empty($customfields) && in_array($field, $customfields)) {
|
||
|
// If custom field then pick name from database.
|
||
|
$fieldshortname = str_replace('profile_field_', '', $fieldname);
|
||
|
$fieldname = $customfieldname[$fieldshortname]->name;
|
||
|
if (core_text::strlen($fieldshortname) > 67) {
|
||
|
// If custom profile field name is longer than 67 characters we will not be able to store the setting
|
||
|
// such as 'field_updateremote_profile_field_NOTSOSHORTSHORTNAME' in the database because the character
|
||
|
// limit for the setting name is 100.
|
||
|
continue;
|
||
|
}
|
||
|
} elseif ($fieldname == 'url') {
|
||
|
$fieldname = get_string('webpage');
|
||
|
} else {
|
||
|
$fieldname = get_string($fieldname);
|
||
|
}
|
||
|
if ($retrieveopts) {
|
||
|
$varname = 'field_map_' . $field;
|
||
|
|
||
|
echo '<tr valign="top"><td align="right">';
|
||
|
echo '<label for="lockconfig_'.$varname.'">'.$fieldname.'</label>';
|
||
|
echo '</td><td>';
|
||
|
|
||
|
echo "<input id=\"lockconfig_{$varname}\" name=\"lockconfig_{$varname}\" type=\"text\" size=\"30\" value=\"{$pluginconfig->$varname}\" />";
|
||
|
echo '<div style="text-align: right">';
|
||
|
echo '<label for="menulockconfig_field_updatelocal_'.$field.'">'.get_string('auth_updatelocal', 'auth') . '</label> ';
|
||
|
echo html_writer::select($updatelocaloptions, "lockconfig_field_updatelocal_{$field}", $pluginconfig->{"field_updatelocal_$field"}, false);
|
||
|
echo '<br />';
|
||
|
if ($updateopts) {
|
||
|
echo '<label for="menulockconfig_field_updateremote_'.$field.'">'.get_string('auth_updateremote', 'auth') . '</label> ';
|
||
|
echo html_writer::select($updateextoptions, "lockconfig_field_updateremote_{$field}", $pluginconfig->{"field_updateremote_$field"}, false);
|
||
|
echo '<br />';
|
||
|
}
|
||
|
echo '<label for="menulockconfig_field_lock_'.$field.'">'.get_string('auth_fieldlock', 'auth') . '</label> ';
|
||
|
echo html_writer::select($lockoptions, "lockconfig_field_lock_{$field}", $pluginconfig->{"field_lock_$field"}, false);
|
||
|
echo '</div>';
|
||
|
} else {
|
||
|
echo '<tr valign="top"><td align="right">';
|
||
|
echo '<label for="menulockconfig_field_lock_'.$field.'">'.$fieldname.'</label>';
|
||
|
echo '</td><td>';
|
||
|
echo html_writer::select($lockoptions, "lockconfig_field_lock_{$field}", $pluginconfig->{"field_lock_$field"}, false);
|
||
|
}
|
||
|
echo '</td>';
|
||
|
if (!empty($helptext)) {
|
||
|
echo '<td rowspan="' . count($user_fields) . '">' . $helptext . '</td>';
|
||
|
$helptext = '';
|
||
|
}
|
||
|
echo '</tr>';
|
||
|
}
|
||
|
}
|