diff --git a/gulliver/system/class.dynaformhandler.php b/gulliver/system/class.dynaformhandler.php index f2a61df73..559e1b094 100755 --- a/gulliver/system/class.dynaformhandler.php +++ b/gulliver/system/class.dynaformhandler.php @@ -508,7 +508,7 @@ class dynaFormHandler /** * Function getFields * @param array $aFilter - * @return array + * @return DOMElement[] */ public function getFields($aFilter = Array()) { diff --git a/workflow/engine/src/BusinessModel/Process.php b/workflow/engine/src/BusinessModel/Process.php index fcae7d07a..d36128ba7 100644 --- a/workflow/engine/src/BusinessModel/Process.php +++ b/workflow/engine/src/BusinessModel/Process.php @@ -1,6 +1,9 @@ $value) { $arrayVariableAux = $this->getVariableDataFromRecord(array("name" => $value["sName"], "label" => "[ " . \G::LoadTranslation("ID_GRID") . " ]", "type" => "grid")); @@ -1565,36 +1566,15 @@ class Process $dynaForm->throwExceptionIfNotIsGridDynaForm($gridUid, $this->arrayFieldNameForException["gridUid"]); //Get data - $file = PATH_DYNAFORM . $processUid . PATH_SEP . $gridUid . ".xml"; - - if (file_exists($file) && filesize($file) > 0) { - //Load DynaForm - $dynaForm = new \Dynaform(); - - $arrayDynaFormData = $dynaForm->Load($gridUid); - - $dynaFormFilename = $arrayDynaFormData["DYN_FILENAME"]; - - //Fields - $form = new \Form($dynaFormFilename, PATH_DYNAFORM, SYS_LANG); - - $arrayFieldName = array(); - - if ($form->type == "grid") { - foreach ($form->fields as $key => $value) { - if (!in_array($key, $arrayFieldName)) { - $arrayVariable[] = $this->getVariableDataFromRecord(array("name" => $key, "label" => $value->label, "type" => $value->type)); - $arrayFieldName[] = $key; - } - } - } + $fields = self::getVarsGrid($processUid, $gridUid); + foreach ($fields as $field) { + $arrayVariable[] = $this->getVariableDataFromRecord(array("name" => $field["sName"], "label" => $field["sLabel"], "type" => $field["sType"])); } + break; default: //ALL - \G::LoadClass("xmlfield_InputPM"); - - $arrayVar = getDynaformsVars($processUid); + $arrayVar = self::getDynaformsVars($processUid); foreach ($arrayVar as $key => $value) { $arrayVariable[] = $this->getVariableDataFromRecord(array("name" => $value["sName"], "label" => $value["sLabel"], "type" => $value["sType"])); @@ -1646,5 +1626,163 @@ class Process throw $e; } } + + /** + * Function getDynaformsVars + * + * @access public + * @param eter string $sProcessUID + * @param eter boolean $bSystemVars + * @return array + */ + public static function getDynaformsVars ($sProcessUID, $bSystemVars = true, $bIncMulSelFields = 0) + { + $aFields = array (); + $aFieldsNames = array (); + if ($bSystemVars) { + $aAux = G::getSystemConstants(); + foreach ($aAux as $sName => $sValue) { + $aFields[] = array ('sName' => $sName,'sType' => 'system','sLabel' => G::LoadTranslation('ID_TINY_SYSTEM_VARIABLES')); + } + //we're adding the ping variable to the system list + $aFields[] = array ('sName' => 'PIN','sType' => 'system','sLabel' => G::LoadTranslation('ID_TINY_SYSTEM_VARIABLES')); + } + + $aInvalidTypes = array("title", "subtitle", "file", "button", "reset", "submit", "javascript"); + $aMultipleSelectionFields = array("listbox", "checkgroup", "grid"); + + if ($bIncMulSelFields != 0) { + $aInvalidTypes = array_merge( $aInvalidTypes, $aMultipleSelectionFields ); + } + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( \DynaformPeer::DYN_FILENAME ); + $oCriteria->add( \DynaformPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( \DynaformPeer::DYN_TYPE, 'xmlform' ); + $oDataset = \DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + + while ($aRow = $oDataset->getRow()) { + if (is_file(PATH_DYNAFORM . $aRow['DYN_FILENAME'] . ".xml")) { + $dyn = new \dynaFormHandler(PATH_DYNAFORM . $aRow['DYN_FILENAME'] . ".xml"); + + if ($dyn->getHeaderAttribute("type") !== "xmlform" && $dyn->getHeaderAttribute("type") !== "") { // skip it, if that is not a xmlform + $oDataset->next(); + continue; + } + + $fields = $dyn->getFields(); + + foreach ($fields as $field) { + $label = ""; + if ($field->hasChildNodes()) { + $child = $field->getElementsByTagName(SYS_LANG)->length ? $field->getElementsByTagName(SYS_LANG): $field->getElementsByTagName("en"); + $label = $child->item(0) ? $child->item(0)->textContent : ""; + } + + if (! in_array($field->getAttribute("type"), $aInvalidTypes) && ! in_array($field->tagName, $aFieldsNames)) { + $aFieldsNames[] = $field->tagName; + $aFields[] = array ( + 'sName' => $field->tagName, + 'sType' => $field->getAttribute("type"), + 'sLabel' => ($field->getAttribute("type") != 'grid' ? $label : '[ ' . G::LoadTranslation('ID_GRID') . ' ]') + ); + } + } + } + + $oDataset->next(); + } + return $aFields; + } + + /** + * Function getGridsVars + * + * @access public + * @param eter string $sProcessUID + * @return array + */ + public static function getGridsVars ($sProcessUID) + { + $aFields = array (); + $aFieldsNames = array (); + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( \DynaformPeer::DYN_FILENAME ); + $oCriteria->add( \DynaformPeer::PRO_UID, $sProcessUID ); + $oDataset = \DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if (is_file(PATH_DYNAFORM . $aRow['DYN_FILENAME'] . ".xml")) { + $dyn = new \dynaFormHandler(PATH_DYNAFORM . $aRow['DYN_FILENAME'] . ".xml"); + + if ($dyn->getHeaderAttribute("type") === "xmlform") { // skip it, if that is not a xmlform + $oDataset->next(); + continue; + } + + $fields = $dyn->getFields(); + + foreach ($fields as $field) { + if ($field->getAttribute("type") !== "grid") { + continue; + } + if (! in_array($field->tagName, $aFieldsNames)) { + $aFieldsNames[] = $field->tagName; + $aFields[] = array ( + 'sName' => $field->tagName, + 'sXmlForm' => $aRow['DYN_FILENAME'] + ); + } + } + } + + $oDataset->next(); + } + return $aFields; + } + + /** + * Function getVarsGrid returns all variables of Grid + * + * @access public + * @param string proUid process ID + * @param string dynUid dynaform ID + * @return array + */ + public static function getVarsGrid ($proUid, $dynUid) + { + $dynaformFields = array (); + $aFieldsNames = array(); + $aFields = array(); + $aInvalidTypes = array("title", "subtitle", "file", "button", "reset", "submit", "javascript"); + $aMultipleSelectionFields = array("listbox", "checkgroup", "grid"); + + if (is_file( PATH_DATA . '/sites/'. SYS_SYS .'/xmlForms/'. $proUid .'/'.$dynUid. '.xml' ) && filesize( PATH_DATA . '/sites/'. SYS_SYS .'/xmlForms/'. $proUid .'/'. $dynUid .'.xml' ) > 0) { + $dyn = new \dynaFormHandler( PATH_DATA . '/sites/'. SYS_SYS .'/xmlForms/' .$proUid. '/' . $dynUid .'.xml' ); + $dynaformFields[] = $dyn->getFields(); + + $fields = $dyn->getFields(); + + foreach ($fields as $field) { + if ($field->getAttribute("type") !== "grid") { + continue; + } + if (! in_array($field->getAttribute("type"), $aInvalidTypes) && ! in_array($field->tagName, $aFieldsNames)) { + $aFieldsNames[] = $field->tagName; + $aFields[] = array ( + 'sName' => $field->tagName, + 'sType' => $field->getAttribute("type"), + 'sLabel' => ($field->getAttribute("type") != 'grid' ? $label : '[ ' . G::LoadTranslation('ID_GRID') . ' ]') + ); + } + } + } + + return $aFields; + } }