Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/lib/pear/HTML/QuickForm/DHTMLRulesTableless.php
Go to the documentation of this file.
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 ?>
 All Data Structures Namespaces Files Functions Variables Enumerations