From 38ad797a515ea3cfe9e0cb2ff75ccaec37595d01 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 1 Jul 2014 11:30:44 -0400 Subject: [PATCH 1/7] Se adiciona validaciones para OutputDocument y ProcessVariable --- .../BusinessModel/OutputDocument.php | 83 +++++++++++++++++++ .../ProcessMaker/BusinessModel/Variable.php | 13 ++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/OutputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/OutputDocument.php index af330057a..a51d13d5f 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/OutputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/OutputDocument.php @@ -363,6 +363,7 @@ class OutputDocument require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "OutputDocument.php"); require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "ObjectPermission.php"); require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Step.php"); + $this->throwExceptionIfItsAssignedInOtherObjects($sOutputDocumentUID, "inputDocumentUid"); \G::LoadClass( 'processMap' ); $oOutputDocument = new \OutputDocument(); $fields = $oOutputDocument->load( $sOutputDocumentUID ); @@ -443,5 +444,87 @@ class OutputDocument throw $e; } } + + /** + * Verify if the OutputDocument it's assigned in other objects + * + * @param string $outputDocumentUid Unique id of OutputDocument + * + * return array Return array (true if it's assigned or false otherwise and data) + */ + public function itsAssignedInOtherObjects($outputDocumentUid) + { + try { + $flagAssigned = false; + $arrayData = array(); + //Step + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\StepPeer::STEP_UID); + $criteria->add(\StepPeer::STEP_TYPE_OBJ, "OUTPUT_DOCUMENT", \Criteria::EQUAL); + $criteria->add(\StepPeer::STEP_UID_OBJ, $outputDocumentUid, \Criteria::EQUAL); + + $rsCriteria = \StepPeer::doSelectRS($criteria); + + if ($rsCriteria->next()) { + $flagAssigned = true; + $arrayData[] = \G::LoadTranslation("ID_STEPS"); + } + + //StepSupervisor + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\StepSupervisorPeer::STEP_UID); + $criteria->add(\StepSupervisorPeer::STEP_TYPE_OBJ, "OUTPUT_DOCUMENT", \Criteria::EQUAL); + $criteria->add(\StepSupervisorPeer::STEP_UID_OBJ, $outputDocumentUid, \Criteria::EQUAL); + + $rsCriteria = \StepSupervisorPeer::doSelectRS($criteria); + + if ($rsCriteria->next()) { + $flagAssigned = true; + $arrayData[] = \G::LoadTranslation("ID_CASES_MENU_ADMIN"); + } + + //ObjectPermission + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\ObjectPermissionPeer::OP_UID); + $criteria->add(\ObjectPermissionPeer::OP_OBJ_TYPE, "OUTPUT", \Criteria::EQUAL); + $criteria->add(\ObjectPermissionPeer::OP_OBJ_UID, $outputDocumentUid, \Criteria::EQUAL); + + $rsCriteria = \ObjectPermissionPeer::doSelectRS($criteria); + + if ($rsCriteria->next()) { + $flagAssigned = true; + $arrayData[] = \G::LoadTranslation("ID_PROCESS_PERMISSIONS"); + } + + //Return + return array($flagAssigned, $arrayData); + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Verify if the OutputDocument it's assigned in other objects + * + * @param string $outputDocumentUid Unique id of OutputDocument + * @param string $fieldNameForException Field name for the exception + * + * return void Throw exception if the OutputDocument it's assigned in other objects + */ + public function throwExceptionIfItsAssignedInOtherObjects($outputDocumentUid, $fieldNameForException) + { + try { + list($flagAssigned, $arrayData) = $this->itsAssignedInOtherObjects($outputDocumentUid); + + if ($flagAssigned) { + throw new \Exception(\G::LoadTranslation("ID_OUTPUT_DOCUMENT_ITS_ASSIGNED", array($fieldNameForException, $outputDocumentUid, implode(", ", $arrayData)))); + } + } catch (\Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php index 90a3237e8..c5cdb8da3 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php @@ -299,15 +299,23 @@ class Variable try { if (isset($aData["VAR_NAME"])) { Validator::isString($aData['VAR_NAME'], '$var_name'); + } else { + throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_name' ))); } if (isset($aData["VAR_FIELD_TYPE"])) { Validator::isString($aData['VAR_FIELD_TYPE'], '$var_field_type'); + } else { + throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_field_type' ))); } if (isset($aData["VAR_FIELD_SIZE"])) { Validator::isInteger($aData["VAR_FIELD_SIZE"], '$var_field_size'); + } else { + throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_field_size' ))); } if (isset($aData["VAR_LABEL"])) { Validator::isString($aData['VAR_LABEL'], '$var_label'); + } else { + throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_label' ))); } if (isset($aData["VAR_DBCONNECTION"])) { Validator::isString($aData['VAR_DBCONNECTION'], '$var_dbconnection'); @@ -316,7 +324,10 @@ class Variable Validator::isString($aData['VAR_SQL'], '$var_sql'); } if (isset($aData["VAR_NULL"])) { - Validator::isInteger($aData['VAR_NULL'], '$var_null'); + Validator::isInteger($aData['VAR_NULL'], '$var_null'); + if ($aData["VAR_NULL"] != 0 || $aData["VAR_NULL"] !=1 ) { + throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES", array('$var_null','0, 1' ))); + } } if (isset($aData["VAR_DEFAULT"])) { Validator::isString($aData['VAR_DEFAULT'], '$var_default'); From d44d1587524268776e71e3f944c270cde8a6b44f Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 1 Jul 2014 11:33:37 -0400 Subject: [PATCH 2/7] Se adiciona validaciones para OutputDocument y ProcessVariable --- .../engine/src/ProcessMaker/BusinessModel/OutputDocument.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/OutputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/OutputDocument.php index a51d13d5f..f6a38c298 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/OutputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/OutputDocument.php @@ -363,7 +363,7 @@ class OutputDocument require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "OutputDocument.php"); require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "ObjectPermission.php"); require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Step.php"); - $this->throwExceptionIfItsAssignedInOtherObjects($sOutputDocumentUID, "inputDocumentUid"); + $this->throwExceptionIfItsAssignedInOtherObjects($sOutputDocumentUID, "outputDocumentUid"); \G::LoadClass( 'processMap' ); $oOutputDocument = new \OutputDocument(); $fields = $oOutputDocument->load( $sOutputDocumentUID ); From 286cc51b55591992addc7ac734a03abbe3d6d423 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 1 Jul 2014 12:26:55 -0400 Subject: [PATCH 3/7] Se adiciona validaciones para Dynaform --- workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php index 9499036ef..a601401a7 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php @@ -10,7 +10,7 @@ class DynaForm "DYN_DESCRIPTION" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "dynaFormDescription"), "DYN_TYPE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("xmlform", "grid"), "fieldNameAux" => "dynaFormType"), "DYN_CONTENT" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "dynaFormContent"), - "DYN_VERSION" => array("type" => "int", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "dynaFormVersion") + "DYN_VERSION" => array("type" => "int", "required" => true, "empty" => false, "defaultValues" => array(1 ,2), "fieldNameAux" => "dynaFormVersion") ); private $formatFieldNameInUppercase = true; From a5cbc1380c2b18036add69b08f93fb78b148786f Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 1 Jul 2014 14:51:20 -0400 Subject: [PATCH 4/7] Se adiciona validaciones para Dynaform --- workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php index a601401a7..4304a51c8 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php @@ -365,7 +365,7 @@ class DynaForm //Create $dynaForm = new \Dynaform(); - if (isset($arrayData["DYN_VERSION"])) { + if (!isset($arrayData["DYN_VERSION"])) { $arrayData["DYN_VERSION"] = 1; } From 9834a231225bbe3cd0d27f90eeea46c9d20ddfb0 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 1 Jul 2014 14:54:29 -0400 Subject: [PATCH 5/7] Se adiciona validaciones para Dynaform --- .../engine/src/ProcessMaker/BusinessModel/DynaForm.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php index 4304a51c8..887a8de10 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php @@ -358,6 +358,10 @@ class DynaForm $process->throwExceptionIfNotExistsProcess($processUid, $this->arrayFieldNameForException["processUid"]); + if (!isset($arrayData["DYN_VERSION"])) { + $arrayData["DYN_VERSION"] = 1; + } + $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, true); $this->throwExceptionIfExistsTitle($processUid, $arrayData["DYN_TITLE"], $this->arrayFieldNameForException["dynaFormTitle"]); @@ -365,10 +369,6 @@ class DynaForm //Create $dynaForm = new \Dynaform(); - if (!isset($arrayData["DYN_VERSION"])) { - $arrayData["DYN_VERSION"] = 1; - } - $arrayData["PRO_UID"] = $processUid; $dynaFormUid = $dynaForm->create($arrayData); From e61a656e0a3d2c578527a6e9425e457e36212bdc Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 1 Jul 2014 15:05:45 -0400 Subject: [PATCH 6/7] Se adiciona validaciones para Dynaform --- workflow/engine/data/mysql/schema.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index e74a4faba..3276e8474 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -205,6 +205,7 @@ CREATE TABLE `DYNAFORM` `DYN_TYPE` VARCHAR(20) default 'xmlform' NOT NULL, `DYN_FILENAME` VARCHAR(100) default '' NOT NULL, `DYN_CONTENT` MEDIUMTEXT, + `DYN_VERSION` INTEGER, PRIMARY KEY (`DYN_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Forms required'; #----------------------------------------------------------------------------- From f0d48216bae1eb07d549febba072d81445d031a9 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 1 Jul 2014 15:07:23 -0400 Subject: [PATCH 7/7] Se adiciona dyn_version en data/mysql/schema.sql --- .../src/ProcessMaker/BusinessModel/CaseScheduler.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php b/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php index 20c3fd1b3..60addfc4e 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php @@ -283,8 +283,10 @@ class CaseScheduler if (!preg_match($patternDate, $caseSchedulerData['SCH_START_DATE'])) { throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_DATE")); } - if (!preg_match($patternDate, $caseSchedulerData['SCH_END_DATE'])) { - throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_END_DATE")); + if (!isset($caseSchedulerData['SCH_END_DATE'])) { + if (!preg_match($patternDate, $caseSchedulerData['SCH_END_DATE'])) { + throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_END_DATE")); + } } if ($caseSchedulerData['SCH_START_DATE'] == "") { throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_date'))); @@ -568,8 +570,10 @@ class CaseScheduler if (!preg_match($patternDate, $caseSchedulerData['SCH_START_DATE'])) { throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_DATE")); } - if (!preg_match($patternDate, $caseSchedulerData['SCH_END_DATE'])) { - throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_END_DATE")); + if (isset($caseSchedulerData['SCH_END_DATE'])) { + if (!preg_match($patternDate, $caseSchedulerData['SCH_END_DATE'])) { + throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_END_DATE")); + } } if ($caseSchedulerData['SCH_START_DATE'] == "") { throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_date')));