diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index 64391c24c..0946c52e1 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -27,7 +27,7 @@ class pmDynaform $this->fields["APP_UID"] = null; } if (isset($this->fields["APP_DATA"]["DYN_CONTENT_HISTORY"])) { - $this->record["DYN_CONTENT"] = $this->fields["APP_DATA"]["DYN_CONTENT_HISTORY"]; + $this->record["DYN_CONTENT"] = $this->fields["APP_DATA"]["DYN_CONTENT_HISTORY"]; } } @@ -314,6 +314,19 @@ class pmDynaform $json->data->value = $links; $json->data->label = isset($this->fields["APP_DATA"][$json->name . "_label"]) ? $this->fields["APP_DATA"][$json->name . "_label"] : "[]"; } + if ($key === "type" && ($value === "file")) { + //todo + $oCriteria = new Criteria("workflow"); + $oCriteria->addSelectColumn(ProcessVariablesPeer::INP_DOC_UID); + $oCriteria->add(ProcessVariablesPeer::VAR_NAME, $json->variable); + $rs = ProcessVariablesPeer::doSelectRS($oCriteria); + $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $rs->next(); + $row = $rs->getRow(); + if (isset($row["INP_DOC_UID"])) { + $json->inputDocuments = array($row["INP_DOC_UID"]); + } + } //synchronize var_label if ($key === "type" && ($value === "dropdown" || $value === "suggest")) { if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) { @@ -805,6 +818,64 @@ class pmDynaform } } + public function synchronizeInputDocument($processUid, $inputDocument) + { + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(DynaformPeer::DYN_UID); + $criteria->addSelectColumn(DynaformPeer::DYN_CONTENT); + $criteria->add(DynaformPeer::PRO_UID, $processUid, Criteria::EQUAL); + $rsCriteria = DynaformPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($rsCriteria->next()) { + $aRow = $rsCriteria->getRow(); + $json = G::json_decode($aRow['DYN_CONTENT']); + $this->jsonsid($json, $inputDocument); + $json2 = G::json_encode($json); + //update dynaform + if ($json2 !== $aRow['DYN_CONTENT']) { + $con = Propel::getConnection(DynaformPeer::DATABASE_NAME); + $con->begin(); + $oPro = DynaformPeer::retrieveByPk($aRow["DYN_UID"]); + $oPro->setDynContent($json2); + $oPro->save(); + $con->commit(); + } + } + } + + private function jsonsid(&$json, $inputDocument) + { + foreach ($json as $key => $value) { + $sw1 = is_array($value); + $sw2 = is_object($value); + if ($sw1 || $sw2) { + $this->jsonsid($value, $inputDocument); + } + if (!$sw1 && !$sw2) { + if ($key === "type" && $json->type === "file" && $json->variable !== "") { + $a = new Criteria("workflow"); + $a->addSelectColumn(ProcessVariablesPeer::INP_DOC_UID); + $a->add(ProcessVariablesPeer::VAR_NAME, $json->variable, Criteria::EQUAL); + $ds = DynaformPeer::doSelectRS($a); + $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $ds->next(); + $row = $ds->getRow(); + if (isset($row) && $row["INP_DOC_UID"] === $inputDocument["INP_DOC_UID"]) { + if (isset($json->size)) { + $json->size = $inputDocument["INP_DOC_MAX_FILESIZE"]; + } + if (isset($json->sizeUnity)) { + $json->sizeUnity = $inputDocument["INP_DOC_MAX_FILESIZE_UNIT"]; + } + if (isset($json->extensions)) { + $json->extensions = $inputDocument["INP_DOC_TYPE_FILE"]; + } + } + } + } + } + } + public function isUsed($processUid, $variable) { $criteria = new Criteria("workflow"); diff --git a/workflow/engine/classes/model/map/ProcessVariablesMapBuilder.php b/workflow/engine/classes/model/map/ProcessVariablesMapBuilder.php index 06391afec..403c0c2dd 100644 --- a/workflow/engine/classes/model/map/ProcessVariablesMapBuilder.php +++ b/workflow/engine/classes/model/map/ProcessVariablesMapBuilder.php @@ -87,6 +87,8 @@ class ProcessVariablesMapBuilder $tMap->addColumn('VAR_ACCEPTED_VALUES', 'VarAcceptedValues', 'string', CreoleTypes::LONGVARCHAR, false, null); + $tMap->addColumn('INP_DOC_UID', 'InpDocUid', 'string', CreoleTypes::VARCHAR, false, 32); + } // doBuild() } // ProcessVariablesMapBuilder diff --git a/workflow/engine/classes/model/om/BaseProcessVariables.php b/workflow/engine/classes/model/om/BaseProcessVariables.php index 0beeb5bb6..bc9526da9 100644 --- a/workflow/engine/classes/model/om/BaseProcessVariables.php +++ b/workflow/engine/classes/model/om/BaseProcessVariables.php @@ -93,6 +93,12 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent */ protected $var_accepted_values; + /** + * The value for the inp_doc_uid field. + * @var string + */ + protected $inp_doc_uid = ''; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -228,6 +234,17 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent return $this->var_accepted_values; } + /** + * Get the [inp_doc_uid] column value. + * + * @return string + */ + public function getInpDocUid() + { + + return $this->inp_doc_uid; + } + /** * Set the value of [var_uid] column. * @@ -470,6 +487,28 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent } // setVarAcceptedValues() + /** + * Set the value of [inp_doc_uid] column. + * + * @param string $v new value + * @return void + */ + public function setInpDocUid($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->inp_doc_uid !== $v || $v === '') { + $this->inp_doc_uid = $v; + $this->modifiedColumns[] = ProcessVariablesPeer::INP_DOC_UID; + } + + } // setInpDocUid() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -509,12 +548,14 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent $this->var_accepted_values = $rs->getString($startcol + 10); + $this->inp_doc_uid = $rs->getString($startcol + 11); + $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 11; // 11 = ProcessVariablesPeer::NUM_COLUMNS - ProcessVariablesPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 12; // 12 = ProcessVariablesPeer::NUM_COLUMNS - ProcessVariablesPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating ProcessVariables object", $e); @@ -751,6 +792,9 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent case 10: return $this->getVarAcceptedValues(); break; + case 11: + return $this->getInpDocUid(); + break; default: return null; break; @@ -782,6 +826,7 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent $keys[8] => $this->getVarNull(), $keys[9] => $this->getVarDefault(), $keys[10] => $this->getVarAcceptedValues(), + $keys[11] => $this->getInpDocUid(), ); return $result; } @@ -846,6 +891,9 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent case 10: $this->setVarAcceptedValues($value); break; + case 11: + $this->setInpDocUid($value); + break; } // switch() } @@ -913,6 +961,10 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent $this->setVarAcceptedValues($arr[$keys[10]]); } + if (array_key_exists($keys[11], $arr)) { + $this->setInpDocUid($arr[$keys[11]]); + } + } /** @@ -968,6 +1020,10 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent $criteria->add(ProcessVariablesPeer::VAR_ACCEPTED_VALUES, $this->var_accepted_values); } + if ($this->isColumnModified(ProcessVariablesPeer::INP_DOC_UID)) { + $criteria->add(ProcessVariablesPeer::INP_DOC_UID, $this->inp_doc_uid); + } + return $criteria; } @@ -1042,6 +1098,8 @@ abstract class BaseProcessVariables extends BaseObject implements Persistent $copyObj->setVarAcceptedValues($this->var_accepted_values); + $copyObj->setInpDocUid($this->inp_doc_uid); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseProcessVariablesPeer.php b/workflow/engine/classes/model/om/BaseProcessVariablesPeer.php index 486e5b688..2ba345ffe 100644 --- a/workflow/engine/classes/model/om/BaseProcessVariablesPeer.php +++ b/workflow/engine/classes/model/om/BaseProcessVariablesPeer.php @@ -25,7 +25,7 @@ abstract class BaseProcessVariablesPeer const CLASS_DEFAULT = 'classes.model.ProcessVariables'; /** The total number of columns. */ - const NUM_COLUMNS = 11; + const NUM_COLUMNS = 12; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -64,6 +64,9 @@ abstract class BaseProcessVariablesPeer /** the column name for the VAR_ACCEPTED_VALUES field */ const VAR_ACCEPTED_VALUES = 'PROCESS_VARIABLES.VAR_ACCEPTED_VALUES'; + /** the column name for the INP_DOC_UID field */ + const INP_DOC_UID = 'PROCESS_VARIABLES.INP_DOC_UID'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -75,10 +78,10 @@ abstract class BaseProcessVariablesPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('VarUid', 'PrjUid', 'VarName', 'VarFieldType', 'VarFieldSize', 'VarLabel', 'VarDbconnection', 'VarSql', 'VarNull', 'VarDefault', 'VarAcceptedValues', ), - BasePeer::TYPE_COLNAME => array (ProcessVariablesPeer::VAR_UID, ProcessVariablesPeer::PRJ_UID, ProcessVariablesPeer::VAR_NAME, ProcessVariablesPeer::VAR_FIELD_TYPE, ProcessVariablesPeer::VAR_FIELD_SIZE, ProcessVariablesPeer::VAR_LABEL, ProcessVariablesPeer::VAR_DBCONNECTION, ProcessVariablesPeer::VAR_SQL, ProcessVariablesPeer::VAR_NULL, ProcessVariablesPeer::VAR_DEFAULT, ProcessVariablesPeer::VAR_ACCEPTED_VALUES, ), - BasePeer::TYPE_FIELDNAME => array ('VAR_UID', 'PRJ_UID', 'VAR_NAME', 'VAR_FIELD_TYPE', 'VAR_FIELD_SIZE', 'VAR_LABEL', 'VAR_DBCONNECTION', 'VAR_SQL', 'VAR_NULL', 'VAR_DEFAULT', 'VAR_ACCEPTED_VALUES', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ) + BasePeer::TYPE_PHPNAME => array ('VarUid', 'PrjUid', 'VarName', 'VarFieldType', 'VarFieldSize', 'VarLabel', 'VarDbconnection', 'VarSql', 'VarNull', 'VarDefault', 'VarAcceptedValues', 'InpDocUid', ), + BasePeer::TYPE_COLNAME => array (ProcessVariablesPeer::VAR_UID, ProcessVariablesPeer::PRJ_UID, ProcessVariablesPeer::VAR_NAME, ProcessVariablesPeer::VAR_FIELD_TYPE, ProcessVariablesPeer::VAR_FIELD_SIZE, ProcessVariablesPeer::VAR_LABEL, ProcessVariablesPeer::VAR_DBCONNECTION, ProcessVariablesPeer::VAR_SQL, ProcessVariablesPeer::VAR_NULL, ProcessVariablesPeer::VAR_DEFAULT, ProcessVariablesPeer::VAR_ACCEPTED_VALUES, ProcessVariablesPeer::INP_DOC_UID, ), + BasePeer::TYPE_FIELDNAME => array ('VAR_UID', 'PRJ_UID', 'VAR_NAME', 'VAR_FIELD_TYPE', 'VAR_FIELD_SIZE', 'VAR_LABEL', 'VAR_DBCONNECTION', 'VAR_SQL', 'VAR_NULL', 'VAR_DEFAULT', 'VAR_ACCEPTED_VALUES', 'INP_DOC_UID', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ) ); /** @@ -88,10 +91,10 @@ abstract class BaseProcessVariablesPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('VarUid' => 0, 'PrjUid' => 1, 'VarName' => 2, 'VarFieldType' => 3, 'VarFieldSize' => 4, 'VarLabel' => 5, 'VarDbconnection' => 6, 'VarSql' => 7, 'VarNull' => 8, 'VarDefault' => 9, 'VarAcceptedValues' => 10, ), - BasePeer::TYPE_COLNAME => array (ProcessVariablesPeer::VAR_UID => 0, ProcessVariablesPeer::PRJ_UID => 1, ProcessVariablesPeer::VAR_NAME => 2, ProcessVariablesPeer::VAR_FIELD_TYPE => 3, ProcessVariablesPeer::VAR_FIELD_SIZE => 4, ProcessVariablesPeer::VAR_LABEL => 5, ProcessVariablesPeer::VAR_DBCONNECTION => 6, ProcessVariablesPeer::VAR_SQL => 7, ProcessVariablesPeer::VAR_NULL => 8, ProcessVariablesPeer::VAR_DEFAULT => 9, ProcessVariablesPeer::VAR_ACCEPTED_VALUES => 10, ), - BasePeer::TYPE_FIELDNAME => array ('VAR_UID' => 0, 'PRJ_UID' => 1, 'VAR_NAME' => 2, 'VAR_FIELD_TYPE' => 3, 'VAR_FIELD_SIZE' => 4, 'VAR_LABEL' => 5, 'VAR_DBCONNECTION' => 6, 'VAR_SQL' => 7, 'VAR_NULL' => 8, 'VAR_DEFAULT' => 9, 'VAR_ACCEPTED_VALUES' => 10, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ) + BasePeer::TYPE_PHPNAME => array ('VarUid' => 0, 'PrjUid' => 1, 'VarName' => 2, 'VarFieldType' => 3, 'VarFieldSize' => 4, 'VarLabel' => 5, 'VarDbconnection' => 6, 'VarSql' => 7, 'VarNull' => 8, 'VarDefault' => 9, 'VarAcceptedValues' => 10, 'InpDocUid' => 11, ), + BasePeer::TYPE_COLNAME => array (ProcessVariablesPeer::VAR_UID => 0, ProcessVariablesPeer::PRJ_UID => 1, ProcessVariablesPeer::VAR_NAME => 2, ProcessVariablesPeer::VAR_FIELD_TYPE => 3, ProcessVariablesPeer::VAR_FIELD_SIZE => 4, ProcessVariablesPeer::VAR_LABEL => 5, ProcessVariablesPeer::VAR_DBCONNECTION => 6, ProcessVariablesPeer::VAR_SQL => 7, ProcessVariablesPeer::VAR_NULL => 8, ProcessVariablesPeer::VAR_DEFAULT => 9, ProcessVariablesPeer::VAR_ACCEPTED_VALUES => 10, ProcessVariablesPeer::INP_DOC_UID => 11, ), + BasePeer::TYPE_FIELDNAME => array ('VAR_UID' => 0, 'PRJ_UID' => 1, 'VAR_NAME' => 2, 'VAR_FIELD_TYPE' => 3, 'VAR_FIELD_SIZE' => 4, 'VAR_LABEL' => 5, 'VAR_DBCONNECTION' => 6, 'VAR_SQL' => 7, 'VAR_NULL' => 8, 'VAR_DEFAULT' => 9, 'VAR_ACCEPTED_VALUES' => 10, 'INP_DOC_UID' => 11, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ) ); /** @@ -214,6 +217,8 @@ abstract class BaseProcessVariablesPeer $criteria->addSelectColumn(ProcessVariablesPeer::VAR_ACCEPTED_VALUES); + $criteria->addSelectColumn(ProcessVariablesPeer::INP_DOC_UID); + } const COUNT = 'COUNT(PROCESS_VARIABLES.VAR_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 9bff54f9f..de646dd5c 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -3860,6 +3860,7 @@ + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 9012b5fe2..619810022 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2122,6 +2122,7 @@ CREATE TABLE `PROCESS_VARIABLES` `VAR_NULL` TINYINT(32) default 0, `VAR_DEFAULT` VARCHAR(32) default '', `VAR_ACCEPTED_VALUES` MEDIUMTEXT, + `INP_DOC_UID` VARCHAR(32) default '', PRIMARY KEY (`VAR_UID`) )ENGINE=InnoDB ; #----------------------------------------------------------------------------- diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/InputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/InputDocument.php index 49d2372f6..79f4b1517 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/InputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/InputDocument.php @@ -372,6 +372,10 @@ class InputDocument $arrayData["INP_DOC_UID"] = $inputDocumentUid; $result = $inputDocument->update($arrayData); + + \G::LoadClass('pmDynaform'); + $pmDynaform = new \pmDynaform(); + $pmDynaform->synchronizeInputDocument($processUid, $arrayData); //Return unset($arrayData["INP_DOC_UID"]); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php index 6e97d01e4..75f01fd8c 100755 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php @@ -78,6 +78,9 @@ class Variable $encodeAcceptedValues = \G::json_encode($arrayData["VAR_ACCEPTED_VALUES"]); $variable->setVarAcceptedValues($encodeAcceptedValues); } + if (isset($arrayData["INP_DOC_UID"])) { + $variable->setInpDocUid($arrayData["INP_DOC_UID"]); + } $variable->save(); $cnn->commit(); } else { @@ -171,6 +174,9 @@ class Variable $encodeAcceptedValues = \G::json_encode($arrayData["VAR_ACCEPTED_VALUES"]); $variable->setVarAcceptedValues($encodeAcceptedValues); } + if (isset($arrayData["INP_DOC_UID"])) { + $variable->setInpDocUid($arrayData["INP_DOC_UID"]); + } $variable->save(); $cnn->commit(); //update dynaforms @@ -272,6 +278,7 @@ class Variable $criteria->addSelectColumn(\ProcessVariablesPeer::VAR_NULL); $criteria->addSelectColumn(\ProcessVariablesPeer::VAR_DEFAULT); $criteria->addSelectColumn(\ProcessVariablesPeer::VAR_ACCEPTED_VALUES); + $criteria->addSelectColumn(\ProcessVariablesPeer::INP_DOC_UID); $criteria->addSelectColumn(\DbSourcePeer::DBS_SERVER); $criteria->addSelectColumn(\DbSourcePeer::DBS_PORT); $criteria->addSelectColumn(\DbSourcePeer::DBS_DATABASE_NAME); @@ -308,7 +315,8 @@ class Variable 'var_sql' => $aRow['VAR_SQL'], 'var_null' => (int)$aRow['VAR_NULL'], 'var_default' => $aRow['VAR_DEFAULT'], - 'var_accepted_values' => $encodeAcceptedValues); + 'var_accepted_values' => $encodeAcceptedValues, + 'inp_doc_uid' => $aRow['INP_DOC_UID']); $rsCriteria->next(); } //Return @@ -347,6 +355,7 @@ class Variable $criteria->addSelectColumn(\ProcessVariablesPeer::VAR_NULL); $criteria->addSelectColumn(\ProcessVariablesPeer::VAR_DEFAULT); $criteria->addSelectColumn(\ProcessVariablesPeer::VAR_ACCEPTED_VALUES); + $criteria->addSelectColumn(\ProcessVariablesPeer::INP_DOC_UID); $criteria->addSelectColumn(\DbSourcePeer::DBS_SERVER); $criteria->addSelectColumn(\DbSourcePeer::DBS_PORT); $criteria->addSelectColumn(\DbSourcePeer::DBS_DATABASE_NAME); @@ -382,7 +391,8 @@ class Variable 'var_sql' => $aRow['VAR_SQL'], 'var_null' => (int)$aRow['VAR_NULL'], 'var_default' => $aRow['VAR_DEFAULT'], - 'var_accepted_values' => $encodeAcceptedValues); + 'var_accepted_values' => $encodeAcceptedValues, + 'inp_doc_uid' => $aRow['INP_DOC_UID']); $rsCriteria->next(); } //Return