コード例 #1
0
 /**
  * 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
 }