|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00027 require_once 'HTML/QuickForm.php'; 00028 00044 class HTML_QuickForm_DHTMLRulesTableless extends HTML_QuickForm { 00045 // {{{ getValidationScript() 00046 00055 function getValidationScript() 00056 { 00057 if (empty($this->_rules) || empty($this->_attributes['onsubmit'])) { 00058 return ''; 00059 } 00060 00061 include_once('HTML/QuickForm/RuleRegistry.php'); 00062 $registry =& HTML_QuickForm_RuleRegistry::singleton(); 00063 $test = array(); 00064 $js_escape = array( 00065 "\r" => '\r', 00066 "\n" => '\n', 00067 "\t" => '\t', 00068 "'" => "\\'", 00069 '"' => '\"', 00070 '\\' => '\\\\' 00071 ); 00072 00073 foreach ($this->_rules as $elementName => $rules) { 00074 foreach ($rules as $rule) { 00075 if ('client' == $rule['validation']) { 00076 unset($element); 00077 00078 $dependent = isset($rule['dependent']) && is_array($rule['dependent']); 00079 $rule['message'] = strtr($rule['message'], $js_escape); 00080 00081 if (isset($rule['group'])) { 00082 $group =& $this->getElement($rule['group']); 00083 // No JavaScript validation for frozen elements 00084 if ($group->isFrozen()) { 00085 continue 2; 00086 } 00087 $elements =& $group->getElements(); 00088 foreach (array_keys($elements) as $key) { 00089 if ($elementName == $group->getElementName($key)) { 00090 $element =& $elements[$key]; 00091 break; 00092 } 00093 } 00094 } elseif ($dependent) { 00095 $element = array(); 00096 $element[] =& $this->getElement($elementName); 00097 foreach ($rule['dependent'] as $idx => $elName) { 00098 $element[] =& $this->getElement($elName); 00099 } 00100 } else { 00101 $element =& $this->getElement($elementName); 00102 } 00103 // No JavaScript validation for frozen elements 00104 if (is_object($element) && $element->isFrozen()) { 00105 continue 2; 00106 } elseif (is_array($element)) { 00107 foreach (array_keys($element) as $key) { 00108 if ($element[$key]->isFrozen()) { 00109 continue 3; 00110 } 00111 } 00112 } 00113 00114 $test[$elementName][] = $registry->getValidationScript($element, $elementName, $rule); 00115 } 00116 } 00117 } 00118 $js = ' 00119 <script type="text/javascript"> 00120 //<![CDATA[ 00121 function qf_errorHandler(element, _qfMsg) { 00122 div = element.parentNode; 00123 if (_qfMsg != \'\') { 00124 span = document.createElement("span"); 00125 span.className = "error"; 00126 span.appendChild(document.createTextNode(_qfMsg.substring(3))); 00127 br = document.createElement("br"); 00128 00129 var errorDiv = document.getElementById(element.name + \'_errorDiv\'); 00130 if (!errorDiv) { 00131 errorDiv = document.createElement("div"); 00132 errorDiv.id = element.name + \'_errorDiv\'; 00133 } 00134 while (errorDiv.firstChild) { 00135 errorDiv.removeChild(errorDiv.firstChild); 00136 } 00137 00138 errorDiv.insertBefore(br, errorDiv.firstChild); 00139 errorDiv.insertBefore(span, errorDiv.firstChild); 00140 element.parentNode.insertBefore(errorDiv, element.parentNode.firstChild); 00141 00142 if (div.className.substr(div.className.length - 6, 6) != " error" 00143 && div.className != "error") { 00144 div.className += " error"; 00145 } 00146 00147 return false; 00148 } else { 00149 var errorDiv = document.getElementById(element.name + \'_errorDiv\'); 00150 if (errorDiv) { 00151 errorDiv.parentNode.removeChild(errorDiv); 00152 } 00153 00154 if (div.className.substr(div.className.length - 6, 6) == " error") { 00155 div.className = div.className.substr(0, div.className.length - 6); 00156 } else if (div.className == "error") { 00157 div.className = ""; 00158 } 00159 00160 return true; 00161 } 00162 }'; 00163 $validateJS = ''; 00164 foreach ($test as $elementName => $jsArr) { 00165 $js .= ' 00166 function validate_' . $this->_attributes['id'] . '_' . $elementName . '(element) { 00167 var value = \'\'; 00168 var errFlag = new Array(); 00169 var _qfGroups = {}; 00170 var _qfMsg = \'\'; 00171 var frm = element.parentNode; 00172 while (frm && frm.nodeName != "FORM") { 00173 frm = frm.parentNode; 00174 } 00175 ' . join("\n", $jsArr) . ' 00176 return qf_errorHandler(element, _qfMsg); 00177 } 00178 '; 00179 $validateJS .= ' 00180 ret = validate_' . $this->_attributes['id'] . '_' . $elementName.'(frm.elements[\''.$elementName.'\']) && ret;'; 00181 unset($element); 00182 $element =& $this->getElement($elementName); 00183 $valFunc = 'validate_' . $this->_attributes['id'] . '_' . $elementName . '(this)'; 00184 $onBlur = $element->getAttribute('onBlur'); 00185 $onChange = $element->getAttribute('onChange'); 00186 $element->updateAttributes(array('onBlur' => $onBlur . $valFunc, 00187 'onChange' => $onChange . $valFunc)); 00188 } 00189 $js .= ' 00190 function validate_' . $this->_attributes['id'] . '(frm) { 00191 var ret = true; 00192 ' . $validateJS . '; 00193 return ret; 00194 } 00195 //]]> 00196 </script>'; 00197 return $js; 00198 } // end func getValidationScript 00199 00200 // }}} 00201 00202 function display() { 00203 $this->getValidationScript(); 00204 return parent::display(); 00205 } 00206 } 00207 00208 ?>