/** * Definition after data method to modify form based on form data * * @uses $DB * @uses $PAGE */ function definition_after_data() { global $DB, $PAGE; parent::definition_after_data(); $mform =& $this->_form; // Disable shortname if user context and Moodle shortname exists $level = $this->_customdata['level']; $shortname = $mform->getElementValue('shortname'); $requireshortname = true; if ($level == 'user') { // user custom field from Moodle if (!empty($shortname) && $DB->record_exists('user_info_field', array('shortname' => $shortname))) { $mform->freeze('shortname'); // ELIS-8329: 2.4 freeze seems to remove element from data! $mform->setDefault('shortname', $shortname); $requireshortname = false; } } if ($requireshortname) { $mform->addRule('shortname', get_string('required'), 'required', null, 'client'); } // Check for specific plugin definition_after_data functions $plugins = core_component::get_plugin_list('elisfields'); foreach ($plugins as $plugin => $dir) { if (is_readable(elis::plugin_file("elisfields_{$plugin}", 'custom_fields.php'))) { include_once elis::plugin_file("elisfields_{$plugin}", 'custom_fields.php'); if (function_exists("{$plugin}_field_edit_form_definition_after_data")) { call_user_func("{$plugin}_field_edit_form_definition_after_data", $mform, $level, $shortname); } } } $td = $mform->getElementValue('defaultdata_menu'); if (!isset($td)) { return; } if (!is_array($td)) { $td = array($td); } array_walk($td, array($this, 'trim_crlf')); $dt = $mform->getElementValue('datatype'); if (!empty($dt) && is_array($dt)) { // If it's an array just get first value! foreach ($dt as $val) { $dt = $val; break; } } $mform->addElement('html', '<script type="text/javascript"> function setmenudefaults() { var myselected = [' . ($dt == 'char' || $dt == 'text' ? '"' . implode('", "', $td) . '"' : implode(', ', $td)) . ']; var defaultdata_menu = document.getElementById("id_defaultdata_menu"); var inputtags = document.getElementsByTagName("input"); for (var i = 0; i < myselected.length; ++i) { var j; for (j = 0; j < defaultdata_menu.options.length; ++j) { //alert("checking: "+ myselected[i] +" == "+ parseFloat(defaultdata_menu.options[j].value)); if ((typeof(myselected[i]) == "string" && myselected[i] == defaultdata_menu.options[j].value) || (typeof(myselected[i]) == "number" && myselected[i] == parseFloat(defaultdata_menu.options[j].value))) { //alert("menu default match"); defaultdata_menu.options[j].selected = "selected"; } } for (j = 0; j < inputtags.length; ++j) { //alert("checking for radios with value = "+ myselected[i] + "; current: input = "+ inputtags[j].type + ", value = "+ inputtags[j].value + " type == radio ? "+ (inputtags[j].type == "radio") + "; value == ? "+ (inputtags[j].value == myselected[i])); if (inputtags[j].type == "radio" && inputtags[j].value == myselected[i]) { //alert("radio default match"); inputtags[j].checked = "checked"; break; } } } } YUI().use("yui2-base", "yui2-yahoo", function(Y) { if (Y.YUI2.env.ua.ie <= 8) { window.setTimeout(setmenudefaults, 2000); // ugly for IE8 } else if (window.attachEvent) { window.attachEvent("onload", setmenudefaults); } else if (window.addEventListener) { window.addEventListener("DOMContentLoaded", setmenudefaults, false); } else { window.setTimeout(setmenudefaults, 2000); // rare fallback } }); </script>'); // $PAGE->requires->js_init_call() didn't work in IE8 w/ domready=true }