/** * Function to add the JQuery form validator to a form. * * the parameters in $params are: * * 'form' - the form object, must be a Zend_Form or an inherited class of that * * @param array $params An array of the parameters to make up the URL * @param Smarty $smarty A reference to the Smarty template object * @return string */ function smarty_function_addJSValidator($params, &$smarty) { if (!isset($params['form']) || !is_object($params['form']) || !is_subclass_of($params['form'], 'Zend_Form')) { return ''; } $validationRules = array(); $formObj = $params['form']; __vimbadmin_getFormElements($formObj, $validationRules); if (sizeof($formObj->getSubForms()) != 0) { foreach ($formObj->getSubForms() as $subForm) { __vimbadmin_getFormElements($subForm, $validationRules); } } $ruleStr = "\n\n<script type=\"text/javascript\"> /* <![CDATA[ */\n\n \$(document).ready(function() {\n \$('#" . $formObj->getId() . "').validate({\n rules: {\n"; foreach ($validationRules as $fieldId => $ruleSet) { $ruleStr .= " '{$fieldId}': {"; foreach ($ruleSet as $ruleKey => $ruleValue) { if ($ruleKey == 'field_type') { continue; } if (!isset($ruleSet['required'])) { $ruleSet['required'] = false; } if (isset($ruleSet['field_type']) && $ruleSet['field_type'] == 'Zend_Form_Element_Checkbox' && $ruleSet['required']) { $ruleStr .= " isChecked: true,"; continue; } $ruleStr .= " {$ruleKey}: "; switch (getType($ruleValue)) { case 'boolean': $ruleStr .= $ruleValue == true ? 'true' : 'false'; break; case 'integer': case 'double': $ruleStr .= $ruleValue; break; case 'array': if (sizeof($ruleValue)) { $ruleStr .= '[ '; foreach ($ruleValue as $key => $oneValue) { switch (getType($oneValue)) { case 'integer': case 'double': $ruleStr .= $oneValue . ', '; break; case 'boolean': $ruleStr .= ($oneValue == true ? 'true' : 'false') . ', '; break; case 'string': default: $ruleStr .= "'{$oneValue}', "; break; } } $ruleStr = substr(trim($ruleStr), 0, -1) . ' ]'; } else { $ruleStr .= '[ ]'; } break; case 'object': $ruleStr .= '{ '; foreach ($ruleValue as $key => $oneValue) { $ruleStr .= $key . ': '; switch (getType($oneValue)) { case 'integer': case 'double': $ruleStr .= $oneValue . ', '; break; case 'boolean': $ruleStr .= ($oneValue == true ? 'true' : 'false') . ', '; break; case 'string': default: $ruleStr .= "'{$oneValue}', "; break; } } $ruleStr = substr(trim($ruleStr), 0, -1) . ' }'; break; case 'string': default: $ruleStr .= "'{$ruleValue}'"; break; } $ruleStr .= ","; } $ruleStr = mb_substr(trim($ruleStr), 0, -1); $ruleStr .= " },\n"; } $ruleStr = mb_substr(trim($ruleStr), 0, -1) . "\n"; $ruleStr .= " }\n });\n });\n\n/* ]]> */ </script>\n\n"; return $ruleStr; }
/** * Function to add the JQuery form validator to a form. * * the parameters in $params are: * * 'form' - the form object, must be a Zend_Form or an inherited class of that * * @category OSS * @package OSS_Smarty * @subpackage Functions * * @param array $params An array of the parameters to make up the URL * @param Smarty $smarty A reference to the Smarty template object * @return string */ function smarty_function_addJSValidator($params, &$smarty) { if (!isset($params['form']) || !is_object($params['form']) || !is_subclass_of($params['form'], 'Zend_Form')) { return ''; } $validationRules = array(); $formObj = $params['form']; __vimbadmin_getFormElements($formObj, $validationRules); if (sizeof($formObj->getSubForms()) != 0) { foreach ($formObj->getSubForms() as $subForm) { __vimbadmin_getFormElements($subForm, $validationRules); } } $ruleStr = "\n\n<script type=\"text/javascript\">\n\n \$(document).ready(function() {\n \$('#" . $formObj->getId() . "').validate({\n rules: {\n"; foreach ($validationRules as $fieldId => $ruleSet) { $ruleStr .= " '{$fieldId}': {"; foreach ($ruleSet as $ruleKey => $ruleValue) { if ($ruleKey == 'field_type') { continue; } if (!isset($ruleSet['required'])) { $ruleSet['required'] = false; } if (isset($ruleSet['field_type']) && $ruleSet['field_type'] == 'Zend_Form_Element_Checkbox' && $ruleSet['required']) { $ruleStr .= " isChecked: true,"; continue; } $ruleStr .= " {$ruleKey}: "; switch (getType($ruleValue)) { case 'boolean': $ruleStr .= $ruleValue == true ? 'true' : 'false'; break; case 'integer': case 'double': $ruleStr .= $ruleValue; break; case 'array': if (sizeof($ruleValue)) { $ruleStr .= '[ '; foreach ($ruleValue as $key => $oneValue) { switch (getType($oneValue)) { case 'integer': case 'double': $ruleStr .= $oneValue . ', '; break; case 'boolean': $ruleStr .= ($oneValue == true ? 'true' : 'false') . ', '; break; case 'string': default: $ruleStr .= "'{$oneValue}', "; break; } } $ruleStr = substr(trim($ruleStr), 0, -1) . ' ]'; } else { $ruleStr .= '[ ]'; } break; case 'object': $ruleStr .= '{ '; foreach ($ruleValue as $key => $oneValue) { $ruleStr .= $key . ': '; switch (getType($oneValue)) { case 'integer': case 'double': $ruleStr .= $oneValue . ', '; break; case 'boolean': $ruleStr .= ($oneValue == true ? 'true' : 'false') . ', '; break; case 'string': default: $ruleStr .= "'{$oneValue}', "; break; } } $ruleStr = substr(trim($ruleStr), 0, -1) . ' }'; break; case 'string': default: $ruleStr .= "'{$ruleValue}'"; break; } $ruleStr .= ","; } $ruleStr = mb_substr(trim($ruleStr), 0, -1); $ruleStr .= " },\n"; } $ruleStr = mb_substr(trim($ruleStr), 0, -1) . "\n"; $ruleStr .= " },\n errorElement: 'span',\n errorPlacement: function (error, element) {\n var id = element.attr('id');\n error.appendTo( '#help-' + id );\n },\n highlight: function (element, errorClass ) {\n var id = element['id'];\n var wraper = \$( '#' + id ).closest( '.control-group' );\n wraper.addClass( 'error' );\n var parent = false;\n if( wraper.parent().hasClass( 'tab-pane' ) )\n parent = wraper.parent();\n else if( ( wraper.parent().parent().hasClass( 'row' ) || wraper.parent().parent().hasClass( 'row-fluid' ) ) && wraper.parent().parent().parent().hasClass( 'tab-pane' ) )\n parent = wraper.parent().parent().parent();\n\n if( parent )\n \$( 'a[href|=\"#' + parent.attr( 'id' ) + '\"]' ).addClass( 'text-error' );\n },\n unhighlight: function(element, errorClass, validClass){\n var id = element['id'];\n var wraper = \$( '#' + id ).closest( '.control-group' );\n wraper.removeClass( 'error' );\n var parent = false\n if( wraper.parent().hasClass( 'tab-pane' ) )\n parent = wraper.parent();\n else if( ( wraper.parent().parent().hasClass( 'row' ) || wraper.parent().parent().hasClass( 'row-fluid' ) ) && wraper.parent().parent().parent().hasClass( 'tab-pane' ) )\n parent = wraper.parent().parent().parent();\n\n wraper.find( '.help-block' ).each( function(){\n if( \$( this ).is( 'span' ) )\n \$( this ).remove();\n });\n\n if( parent )\n {\n if( !parent.find( '.error' ).find( '.control-label' ).length )\n \$( 'a[href|=\"#' + parent.attr( 'id' ) + '\"]' ).removeClass( 'text-error' );\n }\n } \n });\n });\n\n</script>\n\n"; return $ruleStr; }