diff --git a/gulliver/js/form/core/form.js b/gulliver/js/form/core/form.js index b2bf57744..044e50f24 100755 --- a/gulliver/js/form/core/form.js +++ b/gulliver/js/form/core/form.js @@ -162,9 +162,11 @@ function G_Field ( form, element, name ) for(var i=0;i-1){dependentFields=dependentFields.split(',');} else{dependentFields=dependentFields.split('|');} for(i=0;i=0){me.dependentFields[i]=me.form.getElementByName(dependentFields[i]);me.dependentFields[i].addDependencie(me);}}};this.addDependencie=function(field){var exists=false;for(i=0;i-1){var aAux=oAux.name.split('][');grid=aAux[0];row=aAux[1];fieldName=aAux[2];if(Fields.length>0){aux=Fields;aux.push('?');if(aux.join('*').indexOf(fieldName+'*')==-1){Fields.push(fieldName);eval("var oAux2 = {"+fieldName+":'"+oAux.value()+"'}");fields=fields.concat(oAux2);}}else{Fields.push(fieldName);eval("var oAux2 = {"+fieldName+":'"+oAux.value()+"'}");fields=fields.concat(oAux2);}} +if(me.dependentOf[i]===field)exists=true;if(!exists)me.dependentOf[i]=field;};this.updateDepententFields=function(event){var tempValue;if(me.dependentFields.length===0)return true;var fields=[],Fields=[],i,grid='',row=0;for(i in me.dependentFields){console.log("Campos dependient");console.log(i);if(me.dependentFields[i].dependentOf){for(var j=0;j-1){var aAux=oAux.name.split('][');grid=aAux[0];row=aAux[1];fieldName=aAux[2];if(Fields.length>0){aux=Fields;aux.push('?');if(aux.join('*').indexOf(fieldName+'*')==-1){Fields.push(fieldName);eval("var oAux2 = {"+fieldName+":'"+oAux.value()+"'}");fields=fields.concat(oAux2);}}else{Fields.push(fieldName);eval("var oAux2 = {"+fieldName+":'"+oAux.value()+"'}");fields=fields.concat(oAux2);}} else{aux=Fields;aux.push('?');oAux=me.dependentFields[i].dependentOf[0];if(Fields.length>0){if(aux.join('*').indexOf(oAux.name+'*')==-1){Fields.push(oAux.name);fields=fields.concat(me.dependentFields[i].dependentOf);}}else{Fields.push(oAux.name);fields=fields.concat(me.dependentFields[i].dependentOf);}}}}} -var callServer;callServer=new leimnud.module.rpc.xmlhttp({url:me.form.ajaxServer,async:false,method:"POST",args:"function=reloadField&"+'form='+encodeURIComponent(me.form.id)+'&fields='+encodeURIComponent(fields.toJSONString())+(grid!=''?'&grid='+grid:'')+(row>0?'&row='+row:'')});callServer.make();var response=callServer.xmlhttp.responseText;if(response.substr(0,1)==='['){var newcont;eval('newcont='+response+';');if(grid==''){for(var i=0;i0?'&row='+row:'')});callServer.make();var response=callServer.xmlhttp.responseText;if(response.substr(0,1)==='['){var newcont;eval('newcont='+response+';');if(grid==''){for(var i=0;iid = urlDecode( $_POST['form'] ); $G_FORM->values = isset( $_SESSION[$G_FORM->id] ) ? $_SESSION[$G_FORM->id] : array (); $newValues = (Bootstrap::json_decode( urlDecode( stripslashes( $_POST['fields'] ) ) )); +if (isset($_POST['aFieldCurrent'])) { + $currentValue = (Bootstrap::json_decode( urlDecode( stripslashes( $_POST['aFieldCurrent'] ) ) )); +} else { + $currentValue = (Bootstrap::json_decode( urlDecode( stripslashes( $_POST['fields'] ) ) )); +} if (isset( $_POST['grid'] )) { $_POST['row'] = (int) $_POST['row']; $aAux = array (); - foreach ($newValues as $sKey => $newValue) { + foreach ($currentValue as $sKey => $newValue) { $newValue = (array) $newValue; $aKeys = array_keys( $newValue ); if (count($aKeys)>0) { @@ -154,8 +159,7 @@ foreach ($dependentFields as $d) { if ($sendContent[$r]->content->type != 'text') { $sendContent[$r]->content->{$attribute} = toJSArray( $value ); } else { - $sendContent[$r]->content->{$attribute} = toJSArray( (isset( $value[$_POST['row']] ) ? array ($value[$_POST['row']] - ) : array ()) ); + $sendContent[$r]->content->{$attribute} = toJSArray( (isset( $value[$_POST['row']] ) ? array ($value[$_POST['row']]) : array ()) ); } break; } @@ -199,10 +203,10 @@ function subDependencies ($k, &$G_FORM, &$aux, $grid = '') if ($myDependentFields[$r] == "") unset( $myDependentFields[$r] ); } - // $mD = $myDependentFields; - // foreach( $mD as $ki) { - // $myDependentFields = array_merge( $myDependentFields , subDependencies( $ki , $G_FORM , $aux ) ); - // } + $mD = $myDependentFields; + foreach( $mD as $ki) { + $myDependentFields = array_merge( $myDependentFields , subDependencies( $ki , $G_FORM , $aux ) ); + } } else { if (! isset($G_FORM->fields[$grid])) { return array (); @@ -221,10 +225,10 @@ function subDependencies ($k, &$G_FORM, &$aux, $grid = '') if ($myDependentFields[$r] == "") unset( $myDependentFields[$r] ); } - // $mD = $myDependentFields; - // foreach( $mD as $ki) { - // $myDependentFields = array_merge( $myDependentFields , subDependencies( $ki , $G_FORM , $aux, $grid) ); - // } + $mD = $myDependentFields; + foreach( $mD as $ki) { + $myDependentFields = array_merge( $myDependentFields , subDependencies( $ki , $G_FORM , $aux, $grid) ); + } } return $myDependentFields; } diff --git a/gulliver/system/class.xmlform.php b/gulliver/system/class.xmlform.php index c554d90b5..b7f81fc73 100755 --- a/gulliver/system/class.xmlform.php +++ b/gulliver/system/class.xmlform.php @@ -1371,7 +1371,7 @@ class XmlForm_Field_Suggest extends XmlForm_Field_SimpleText //by neyek $sSQL = $this->sql; $nCount = preg_match_all( '/\@(?:([\@\%\#\!Qq])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*?)*)\))/', $sSQL, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); - $sResult = array (); + $aResult = array (); if ($nCount) { for ($i = 0; $i < $nCount; $i ++) { if (isset( $match[0][$i][0] ) && isset( $match[2][$i][0] )) { @@ -1560,7 +1560,7 @@ class XmlForm_Field_Suggest extends XmlForm_Field_SimpleText //by neyek $str .= 'value="' . $this->htmlentities( $formVariableKeyValue, ENT_COMPAT, 'utf-8' ) . '" '; $str .= 'type="hidden" />'; - $str .= $this->renderHint(); + //$str .= $this->renderHint(); if (trim( $this->callback ) != '') { $sCallBack = 'try{' . $this->callback . '}catch(e){alert("Suggest Widget call back error: "+e)}'; } else { @@ -1571,7 +1571,7 @@ class XmlForm_Field_Suggest extends XmlForm_Field_SimpleText //by neyek $sSQL = $this->sql; $nCount = preg_match_all( '/\@(?:([\@\%\#\!Qq])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*?)*)\))/', $sSQL, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); - $sResult = array (); + $aResult = array (); if ($nCount) { for ($i = 0; $i < $nCount; $i ++) { if (isset( $match[0][$i][0] ) && isset( $match[2][$i][0] )) { @@ -1581,6 +1581,7 @@ class XmlForm_Field_Suggest extends XmlForm_Field_SimpleText //by neyek } $depValues = ''; + $depFieldsLast = ''; $i = 1; if (isset( $aResult ) && $aResult) { $sResult = '"' . implode( '","', $aResult ) . '"'; @@ -1595,6 +1596,7 @@ class XmlForm_Field_Suggest extends XmlForm_Field_SimpleText //by neyek } } + $depFieldsLast = 'getField(\''. $rowIdField . '[' . $field . '\').value'; $depValues = '+' . $depValues . '+'; } else { $sResult = ''; @@ -1635,13 +1637,16 @@ class XmlForm_Field_Suggest extends XmlForm_Field_SimpleText //by neyek $sOptions .= 'if (typeof obj != "undefined") { '; $sOptions .= ' var jField = { };'; $sOptions .= ' var sField = "[]"; '; + $sOptions .= ' var aFieldCurrent = {};'; + $sOptions .= ' aFieldCurrent[\'' . $this->name . '\'] = obj.id;'; + $sOptions .= ' var sFieldCurrent = "["+ encodeURIComponent(aFieldCurrent.toJSONString()) + "]"; '; if ($count > 0) { for ($cnt = 0; $cnt < $count; $cnt ++) { if ( $this->name == $aDepFields[$cnt] ) { $sOptions .= ' jField[\'' . $aDepFields[$cnt] . '\'] = obj.id;'; -// } else { -// $sOptions .= ' jField[\'' . $aDepFields[$cnt] . '\'] = getField(\'' . $rowIdField . '[' . $aDepFields[$cnt] . '\').value; '; + } else { + $sOptions .= ' jField[\'' . $aDepFields[$cnt] . '\'] = getField(\'' . $rowIdField . '[' . $aDepFields[$cnt] . '\').value; '; } } } @@ -1655,7 +1660,7 @@ class XmlForm_Field_Suggest extends XmlForm_Field_SimpleText //by neyek $sOptions .= 'indexFieldVal = indexField[0].replace(/\[|\]/g,""); '; $sOptions .= 'var response = ajax_function("../gulliver/defaultAjaxDynaform", "reloadField", '; - $sOptions .= ' "form=' . $sOwnerId . '&fields=" + sField + "&grid=' . $ownerName . '&row=" + indexFieldVal, "POST" ); '; + $sOptions .= ' "form=' . $sOwnerId . '&fields=" + sField + "&grid=' . $ownerName . '&row=" + indexFieldVal + "&aFieldCurrent=" + sFieldCurrent, "POST" ); '; $sOptions .= 'if (response.substr(0,1) === \'[\') { '; $sOptions .= ' var newcont; ';