2014-06-27 16:38:14 -04:00
< ? php
namespace ProcessMaker\BusinessModel ;
2015-02-04 12:38:08 -04:00
use \G ;
2014-06-27 16:38:14 -04:00
class Variable
{
2016-08-10 15:00:24 -04:00
private $variableTypes = [ 'string' , 'integer' , 'float' , 'boolean' , 'datetime' , 'grid' , 'array' , 'file' , 'multiplefile' ];
2016-06-30 15:52:11 -04:00
2014-06-27 16:38:14 -04:00
/**
* Create Variable for a Process
*
* @ param string $processUid Unique id of Process
* @ param array $arrayData Data
*
* return array Return data of the new Variable created
*/
public function create ( $processUid , array $arrayData )
{
try {
//Verify data
2014-06-30 16:31:27 -04:00
Validator :: proUid ( $processUid , '$prj_uid' );
2014-06-27 16:38:14 -04:00
$arrayData = array_change_key_case ( $arrayData , CASE_UPPER );
2015-05-26 17:15:31 -04:00
$this -> existsName ( $processUid , $arrayData [ " VAR_NAME " ], " " );
2014-06-27 16:38:14 -04:00
2014-08-27 10:40:13 -04:00
$this -> throwExceptionFieldDefinition ( $arrayData );
2014-06-30 16:31:27 -04:00
2014-06-27 16:38:14 -04:00
//Create
$cnn = \Propel :: getConnection ( " workflow " );
try {
$variable = new \ProcessVariables ();
$sPkProcessVariables = \ProcessMaker\Util\Common :: generateUID ();
$variable -> setVarUid ( $sPkProcessVariables );
$variable -> setPrjUid ( $processUid );
if ( $variable -> validate ()) {
$cnn -> begin ();
2014-07-02 12:13:52 -04:00
if ( isset ( $arrayData [ " VAR_NAME " ])) {
$variable -> setVarName ( $arrayData [ " VAR_NAME " ]);
} else {
throw new \Exception ( \G :: LoadTranslation ( " ID_CAN_NOT_BE_NULL " , array ( '$var_name' )));
}
if ( isset ( $arrayData [ " VAR_FIELD_TYPE " ])) {
2016-06-30 15:52:11 -04:00
$arrayData [ " VAR_FIELD_TYPE " ] = $this -> validateVarFieldType ( $arrayData [ " VAR_FIELD_TYPE " ]);
2014-07-02 12:13:52 -04:00
$variable -> setVarFieldType ( $arrayData [ " VAR_FIELD_TYPE " ]);
} else {
throw new \Exception ( \G :: LoadTranslation ( " ID_CAN_NOT_BE_NULL " , array ( '$var_field_type' )));
}
if ( isset ( $arrayData [ " VAR_FIELD_SIZE " ])) {
$variable -> setVarFieldSize ( $arrayData [ " VAR_FIELD_SIZE " ]);
}
if ( isset ( $arrayData [ " VAR_LABEL " ])) {
$variable -> setVarLabel ( $arrayData [ " VAR_LABEL " ]);
} else {
throw new \Exception ( \G :: LoadTranslation ( " ID_CAN_NOT_BE_NULL " , array ( '$var_label' )));
}
if ( isset ( $arrayData [ " VAR_DBCONNECTION " ])) {
$variable -> setVarDbconnection ( $arrayData [ " VAR_DBCONNECTION " ]);
} else {
$variable -> setVarDbconnection ( " " );
}
if ( isset ( $arrayData [ " VAR_SQL " ])) {
$variable -> setVarSql ( $arrayData [ " VAR_SQL " ]);
} else {
$variable -> setVarSql ( " " );
}
if ( isset ( $arrayData [ " VAR_NULL " ])) {
$variable -> setVarNull ( $arrayData [ " VAR_NULL " ]);
} else {
$variable -> setVarNull ( 0 );
}
if ( isset ( $arrayData [ " VAR_DEFAULT " ])) {
$variable -> setVarDefault ( $arrayData [ " VAR_DEFAULT " ]);
}
if ( isset ( $arrayData [ " VAR_ACCEPTED_VALUES " ])) {
2015-07-31 11:18:25 -04:00
$encodeAcceptedValues = \G :: json_encode ( $arrayData [ " VAR_ACCEPTED_VALUES " ]);
2014-08-01 10:25:33 -04:00
$variable -> setVarAcceptedValues ( $encodeAcceptedValues );
2014-07-02 12:13:52 -04:00
}
2015-10-05 12:12:58 -04:00
if ( isset ( $arrayData [ " INP_DOC_UID " ])) {
$variable -> setInpDocUid ( $arrayData [ " INP_DOC_UID " ]);
}
2014-06-27 16:38:14 -04:00
$variable -> save ();
$cnn -> commit ();
} else {
$msg = " " ;
foreach ( $variable -> getValidationFailures () as $validationFailure ) {
$msg = $msg . (( $msg != " " ) ? " \n " : " " ) . $validationFailure -> getMessage ();
}
throw new \Exception ( \G :: LoadTranslation ( " ID_RECORD_CANNOT_BE_CREATED " ) . " \n " . $msg );
}
} catch ( \Exception $e ) {
$cnn -> rollback ();
throw $e ;
}
//Return
2014-07-02 12:13:52 -04:00
$variable = $this -> getVariable ( $processUid , $sPkProcessVariables );
2014-06-27 16:38:14 -04:00
2014-07-02 12:13:52 -04:00
return $variable ;
2014-06-27 16:38:14 -04:00
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Update Variable
*
* @ param string $processUid Unique id of Process
* @ param string $variableUid Unique id of Variable
* @ param array $arrayData Data
*
* return array Return data of the Variable updated
*/
public function update ( $processUid , $variableUid , $arrayData )
{
try {
//Verify data
2014-06-30 16:31:27 -04:00
Validator :: proUid ( $processUid , '$prj_uid' );
2014-06-27 16:38:14 -04:00
$arrayData = array_change_key_case ( $arrayData , CASE_UPPER );
2014-06-30 16:31:27 -04:00
2014-08-27 10:40:13 -04:00
$this -> throwExceptionFieldDefinition ( $arrayData );
2014-07-02 12:13:52 -04:00
2014-06-27 16:38:14 -04:00
//Update
$cnn = \Propel :: getConnection ( " workflow " );
try {
$variable = \ProcessVariablesPeer :: retrieveByPK ( $variableUid );
2015-04-17 14:08:13 -04:00
$dbConnection = \DbSourcePeer :: retrieveByPK ( $variable -> getVarDbconnection (), $variable -> getPrjUid ());
2015-03-31 16:33:28 -04:00
$oldVariable = array (
2015-11-17 11:54:06 -04:00
" VAR_UID " => $variable -> getVarUid (),
2015-03-31 16:33:28 -04:00
" VAR_NAME " => $variable -> getVarName (),
" VAR_FIELD_TYPE " => $variable -> getVarFieldType (),
" VAR_DBCONNECTION " => $variable -> getVarDbconnection (),
2015-04-17 14:08:13 -04:00
" VAR_DBCONNECTION_LABEL " => $dbConnection !== null ? '[' . $dbConnection -> getDbsServer () . ':' . $dbConnection -> getDbsPort () . '] ' . $dbConnection -> getDbsType () . ': ' . $dbConnection -> getDbsDatabaseName () : 'PM Database' ,
2015-03-31 16:33:28 -04:00
" VAR_SQL " => $variable -> getVarSql (),
" VAR_ACCEPTED_VALUES " => $variable -> getVarAcceptedValues ()
);
2014-06-27 16:38:14 -04:00
if ( $variable -> validate ()) {
$cnn -> begin ();
2014-07-02 12:13:52 -04:00
if ( isset ( $arrayData [ " VAR_NAME " ])) {
2015-05-26 17:15:31 -04:00
$this -> existsName ( $processUid , $arrayData [ " VAR_NAME " ], $variableUid );
2014-07-02 12:13:52 -04:00
$variable -> setVarName ( $arrayData [ " VAR_NAME " ]);
}
if ( isset ( $arrayData [ " VAR_FIELD_TYPE " ])) {
2016-06-30 15:52:11 -04:00
$arrayData [ " VAR_FIELD_TYPE " ] = $this -> validateVarFieldType ( $arrayData [ " VAR_FIELD_TYPE " ]);
2014-07-02 12:13:52 -04:00
$variable -> setVarFieldType ( $arrayData [ " VAR_FIELD_TYPE " ]);
}
if ( isset ( $arrayData [ " VAR_FIELD_SIZE " ])) {
$variable -> setVarFieldSize ( $arrayData [ " VAR_FIELD_SIZE " ]);
}
if ( isset ( $arrayData [ " VAR_LABEL " ])) {
$variable -> setVarLabel ( $arrayData [ " VAR_LABEL " ]);
}
if ( isset ( $arrayData [ " VAR_DBCONNECTION " ])) {
$variable -> setVarDbconnection ( $arrayData [ " VAR_DBCONNECTION " ]);
}
if ( isset ( $arrayData [ " VAR_SQL " ])) {
$variable -> setVarSql ( $arrayData [ " VAR_SQL " ]);
}
if ( isset ( $arrayData [ " VAR_NULL " ])) {
$variable -> setVarNull ( $arrayData [ " VAR_NULL " ]);
}
if ( isset ( $arrayData [ " VAR_DEFAULT " ])) {
$variable -> setVarDefault ( $arrayData [ " VAR_DEFAULT " ]);
}
if ( isset ( $arrayData [ " VAR_ACCEPTED_VALUES " ])) {
2015-07-31 11:18:25 -04:00
$encodeAcceptedValues = \G :: json_encode ( $arrayData [ " VAR_ACCEPTED_VALUES " ]);
2014-08-01 10:25:33 -04:00
$variable -> setVarAcceptedValues ( $encodeAcceptedValues );
2014-07-02 12:13:52 -04:00
}
2015-10-05 12:12:58 -04:00
if ( isset ( $arrayData [ " INP_DOC_UID " ])) {
$variable -> setInpDocUid ( $arrayData [ " INP_DOC_UID " ]);
}
2014-06-27 16:38:14 -04:00
$variable -> save ();
$cnn -> commit ();
2015-03-31 16:33:28 -04:00
//update dynaforms
2015-04-17 14:08:13 -04:00
$dbConnection = \DbSourcePeer :: retrieveByPK ( $variable -> getVarDbconnection (), $variable -> getPrjUid ());
2015-03-31 16:33:28 -04:00
$newVariable = array (
2015-11-17 11:54:06 -04:00
" VAR_UID " => $variable -> getVarUid (),
2015-03-31 16:33:28 -04:00
" VAR_NAME " => $variable -> getVarName (),
" VAR_FIELD_TYPE " => $variable -> getVarFieldType (),
" VAR_DBCONNECTION " => $variable -> getVarDbconnection (),
2015-04-17 14:08:13 -04:00
" VAR_DBCONNECTION_LABEL " => $dbConnection !== null ? '[' . $dbConnection -> getDbsServer () . ':' . $dbConnection -> getDbsPort () . '] ' . $dbConnection -> getDbsType () . ': ' . $dbConnection -> getDbsDatabaseName () : 'PM Database' ,
2015-03-31 16:33:28 -04:00
" VAR_SQL " => $variable -> getVarSql (),
" VAR_ACCEPTED_VALUES " => $variable -> getVarAcceptedValues ()
);
\G :: LoadClass ( 'pmDynaform' );
$pmDynaform = new \pmDynaform ();
$pmDynaform -> synchronizeVariable ( $processUid , $newVariable , $oldVariable );
2014-06-27 16:38:14 -04:00
} else {
$msg = " " ;
foreach ( $variable -> getValidationFailures () as $validationFailure ) {
$msg = $msg . (( $msg != " " ) ? " \n " : " " ) . $validationFailure -> getMessage ();
}
throw new \Exception ( \G :: LoadTranslation ( " ID_RECORD_CANNOT_BE_CREATED " ) . " \n " . $msg );
}
} catch ( \Exception $e ) {
$cnn -> rollback ();
throw $e ;
}
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Delete Variable
*
* @ param string $processUid Unique id of Process
* @ param string $variableUid Unique id of Variable
*
* return void
*/
public function delete ( $processUid , $variableUid )
{
try {
//Verify data
2014-06-30 16:31:27 -04:00
Validator :: proUid ( $processUid , '$prj_uid' );
2014-06-27 16:38:14 -04:00
$this -> throwExceptionIfNotExistsVariable ( $variableUid );
2014-08-01 10:25:33 -04:00
2016-02-05 14:09:24 -04:00
//Verify variable
$this -> throwExceptionIfVariableIsAssociatedAditionalTable ( $variableUid );
2015-03-31 16:33:28 -04:00
$variable = $this -> getVariable ( $processUid , $variableUid );
\G :: LoadClass ( 'pmDynaform' );
$pmDynaform = new \pmDynaform ();
$isUsed = $pmDynaform -> isUsed ( $processUid , $variable );
if ( $isUsed !== false ) {
2015-04-08 12:33:23 -04:00
$titleDynaform = $pmDynaform -> getDynaformTitle ( $isUsed );
throw new \Exception ( \G :: LoadTranslation ( " ID_VARIABLE_IN_USE " , array ( $titleDynaform )));
2015-03-31 16:33:28 -04:00
}
2014-06-27 16:38:14 -04:00
//Delete
$criteria = new \Criteria ( " workflow " );
$criteria -> add ( \ProcessVariablesPeer :: VAR_UID , $variableUid );
\ProcessVariablesPeer :: doDelete ( $criteria );
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Get data of a Variable
* @ param string $processUid Unique id of Process
* @ param string $variableUid Unique id of Variable
*
* return array Return an array with data of a Variable
*/
public function getVariable ( $processUid , $variableUid )
{
try {
//Verify data
2014-06-30 16:31:27 -04:00
Validator :: proUid ( $processUid , '$prj_uid' );
2014-06-27 16:38:14 -04:00
$this -> throwExceptionIfNotExistsVariable ( $variableUid );
//Get data
$criteria = new \Criteria ( " workflow " );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_UID );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: PRJ_UID );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_NAME );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_FIELD_TYPE );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_FIELD_SIZE );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_LABEL );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_DBCONNECTION );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_SQL );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_NULL );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_DEFAULT );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_ACCEPTED_VALUES );
2015-10-05 12:12:58 -04:00
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: INP_DOC_UID );
2015-04-17 14:08:13 -04:00
$criteria -> addSelectColumn ( \DbSourcePeer :: DBS_SERVER );
$criteria -> addSelectColumn ( \DbSourcePeer :: DBS_PORT );
$criteria -> addSelectColumn ( \DbSourcePeer :: DBS_DATABASE_NAME );
$criteria -> addSelectColumn ( \DbSourcePeer :: DBS_TYPE );
2014-06-27 16:38:14 -04:00
$criteria -> add ( \ProcessVariablesPeer :: PRJ_UID , $processUid , \Criteria :: EQUAL );
$criteria -> add ( \ProcessVariablesPeer :: VAR_UID , $variableUid , \Criteria :: EQUAL );
2015-04-17 14:08:13 -04:00
$criteria -> addJoin ( \ProcessVariablesPeer :: VAR_DBCONNECTION , \DbSourcePeer :: DBS_UID , \Criteria :: LEFT_JOIN );
2014-06-27 16:38:14 -04:00
$rsCriteria = \ProcessVariablesPeer :: doSelectRS ( $criteria );
$rsCriteria -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
$rsCriteria -> next ();
$arrayVariables = array ();
while ( $aRow = $rsCriteria -> getRow ()) {
2015-10-23 10:30:12 -04:00
2015-07-31 11:18:25 -04:00
$VAR_ACCEPTED_VALUES = \G :: json_decode ( $aRow [ 'VAR_ACCEPTED_VALUES' ], true );
if ( sizeof ( $VAR_ACCEPTED_VALUES )) {
$encodeAcceptedValues = preg_replace ( " / \\ \\ u([a-f0-9] { 4})/e " , " iconv('UCS-4LE','UTF-8',pack('V', hexdec('U $ 1'))) " , \G :: json_encode ( $VAR_ACCEPTED_VALUES ));
} else {
$encodeAcceptedValues = $aRow [ 'VAR_ACCEPTED_VALUES' ];
}
2015-10-23 10:30:12 -04:00
2014-06-27 16:38:14 -04:00
$arrayVariables = array ( 'var_uid' => $aRow [ 'VAR_UID' ],
'prj_uid' => $aRow [ 'PRJ_UID' ],
'var_name' => $aRow [ 'VAR_NAME' ],
'var_field_type' => $aRow [ 'VAR_FIELD_TYPE' ],
2014-07-02 12:13:52 -04:00
'var_field_size' => ( int ) $aRow [ 'VAR_FIELD_SIZE' ],
2014-06-27 16:38:14 -04:00
'var_label' => $aRow [ 'VAR_LABEL' ],
2015-04-17 14:08:13 -04:00
'var_dbconnection' => $aRow [ 'VAR_DBCONNECTION' ] === 'none' ? 'workflow' : $aRow [ 'VAR_DBCONNECTION' ],
'var_dbconnection_label' => $aRow [ 'DBS_SERVER' ] !== null ? '[' . $aRow [ 'DBS_SERVER' ] . ':' . $aRow [ 'DBS_PORT' ] . '] ' . $aRow [ 'DBS_TYPE' ] . ': ' . $aRow [ 'DBS_DATABASE_NAME' ] : 'PM Database' ,
2014-06-27 16:38:14 -04:00
'var_sql' => $aRow [ 'VAR_SQL' ],
2014-07-02 12:13:52 -04:00
'var_null' => ( int ) $aRow [ 'VAR_NULL' ],
2014-06-27 16:38:14 -04:00
'var_default' => $aRow [ 'VAR_DEFAULT' ],
2015-10-05 12:12:58 -04:00
'var_accepted_values' => $encodeAcceptedValues ,
'inp_doc_uid' => $aRow [ 'INP_DOC_UID' ]);
2014-06-27 16:38:14 -04:00
$rsCriteria -> next ();
}
//Return
return $arrayVariables ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Get data of Variables
*
* @ param string $processUid Unique id of Process
*
* return array Return an array with data of a DynaForm
*/
public function getVariables ( $processUid )
{
try {
//Verify data
2014-06-30 16:31:27 -04:00
Validator :: proUid ( $processUid , '$prj_uid' );
2014-06-27 16:38:14 -04:00
//Get data
$criteria = new \Criteria ( " workflow " );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_UID );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: PRJ_UID );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_NAME );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_FIELD_TYPE );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_FIELD_SIZE );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_LABEL );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_DBCONNECTION );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_SQL );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_NULL );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_DEFAULT );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_ACCEPTED_VALUES );
2015-10-05 12:12:58 -04:00
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: INP_DOC_UID );
2015-04-17 14:08:13 -04:00
$criteria -> addSelectColumn ( \DbSourcePeer :: DBS_SERVER );
$criteria -> addSelectColumn ( \DbSourcePeer :: DBS_PORT );
$criteria -> addSelectColumn ( \DbSourcePeer :: DBS_DATABASE_NAME );
$criteria -> addSelectColumn ( \DbSourcePeer :: DBS_TYPE );
2014-06-27 16:38:14 -04:00
$criteria -> add ( \ProcessVariablesPeer :: PRJ_UID , $processUid , \Criteria :: EQUAL );
2015-08-06 14:10:46 -04:00
$criteria -> addJoin ( \ProcessVariablesPeer :: VAR_DBCONNECTION , \DbSourcePeer :: DBS_UID . " AND " . \DbSourcePeer :: PRO_UID . " = ' " . $processUid . " ' " , \Criteria :: LEFT_JOIN );
2014-06-27 16:38:14 -04:00
$rsCriteria = \ProcessVariablesPeer :: doSelectRS ( $criteria );
$rsCriteria -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
$rsCriteria -> next ();
$arrayVariables = array ();
while ( $aRow = $rsCriteria -> getRow ()) {
2015-10-23 10:30:12 -04:00
2015-07-31 11:18:25 -04:00
$VAR_ACCEPTED_VALUES = \G :: json_decode ( $aRow [ 'VAR_ACCEPTED_VALUES' ], true );
if ( sizeof ( $VAR_ACCEPTED_VALUES )) {
$encodeAcceptedValues = preg_replace ( " / \\ \\ u([a-f0-9] { 4})/e " , " iconv('UCS-4LE','UTF-8',pack('V', hexdec('U $ 1'))) " , \G :: json_encode ( $VAR_ACCEPTED_VALUES ));
} else {
$encodeAcceptedValues = $aRow [ 'VAR_ACCEPTED_VALUES' ];
}
2015-10-23 10:30:12 -04:00
2014-06-27 16:38:14 -04:00
$arrayVariables [] = array ( 'var_uid' => $aRow [ 'VAR_UID' ],
'prj_uid' => $aRow [ 'PRJ_UID' ],
'var_name' => $aRow [ 'VAR_NAME' ],
'var_field_type' => $aRow [ 'VAR_FIELD_TYPE' ],
2014-07-02 12:13:52 -04:00
'var_field_size' => ( int ) $aRow [ 'VAR_FIELD_SIZE' ],
2014-06-27 16:38:14 -04:00
'var_label' => $aRow [ 'VAR_LABEL' ],
2015-04-17 14:08:13 -04:00
'var_dbconnection' => $aRow [ 'VAR_DBCONNECTION' ] === 'none' ? 'workflow' : $aRow [ 'VAR_DBCONNECTION' ],
'var_dbconnection_label' => $aRow [ 'DBS_SERVER' ] !== null ? '[' . $aRow [ 'DBS_SERVER' ] . ':' . $aRow [ 'DBS_PORT' ] . '] ' . $aRow [ 'DBS_TYPE' ] . ': ' . $aRow [ 'DBS_DATABASE_NAME' ] : 'PM Database' ,
2014-06-27 16:38:14 -04:00
'var_sql' => $aRow [ 'VAR_SQL' ],
2014-07-02 12:13:52 -04:00
'var_null' => ( int ) $aRow [ 'VAR_NULL' ],
2014-06-27 16:38:14 -04:00
'var_default' => $aRow [ 'VAR_DEFAULT' ],
2015-10-05 12:12:58 -04:00
'var_accepted_values' => $encodeAcceptedValues ,
'inp_doc_uid' => $aRow [ 'INP_DOC_UID' ]);
2014-06-27 16:38:14 -04:00
$rsCriteria -> next ();
}
//Return
return $arrayVariables ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
2014-06-30 16:31:27 -04:00
* Verify field definition
2014-06-27 16:38:14 -04:00
*
2014-06-30 16:31:27 -04:00
* @ param array $aData Unique id of Variable to exclude
2014-06-27 16:38:14 -04:00
*
*/
2014-06-30 16:31:27 -04:00
public function throwExceptionFieldDefinition ( $aData )
2014-06-27 16:38:14 -04:00
{
try {
2014-06-30 16:31:27 -04:00
if ( isset ( $aData [ " VAR_NAME " ])) {
Validator :: isString ( $aData [ 'VAR_NAME' ], '$var_name' );
2014-07-02 12:13:52 -04:00
Validator :: isNotEmpty ( $aData [ 'VAR_NAME' ], '$var_name' );
2014-06-30 16:31:27 -04:00
}
if ( isset ( $aData [ " VAR_FIELD_TYPE " ])) {
Validator :: isString ( $aData [ 'VAR_FIELD_TYPE' ], '$var_field_type' );
2014-07-02 12:13:52 -04:00
Validator :: isNotEmpty ( $aData [ 'VAR_FIELD_TYPE' ], '$var_field_type' );
2014-08-27 10:40:13 -04:00
/* if ( $aData [ " VAR_FIELD_TYPE " ] != 'string' && $aData [ " VAR_FIELD_TYPE " ] != 'integer' && $aData [ " VAR_FIELD_TYPE " ] != 'boolean' && $aData [ " VAR_FIELD_TYPE " ] != 'float' &&
2014-07-07 16:09:04 -04:00
$aData [ " VAR_FIELD_TYPE " ] != 'datetime' && $aData [ " VAR_FIELD_TYPE " ] != 'date_of_birth' && $aData [ " VAR_FIELD_TYPE " ] != 'date' ) {
2014-07-04 09:56:01 -04:00
throw new \Exception ( \G :: LoadTranslation ( " ID_INVALID_VALUE_FOR " , array ( '$var_field_type' )));
2014-08-27 10:40:13 -04:00
} */
2014-06-30 16:31:27 -04:00
}
if ( isset ( $aData [ " VAR_FIELD_SIZE " ])) {
Validator :: isInteger ( $aData [ " VAR_FIELD_SIZE " ], '$var_field_size' );
}
if ( isset ( $aData [ " VAR_LABEL " ])) {
Validator :: isString ( $aData [ 'VAR_LABEL' ], '$var_label' );
2014-07-02 12:13:52 -04:00
Validator :: isNotEmpty ( $aData [ 'VAR_LABEL' ], '$var_label' );
2014-06-30 16:31:27 -04:00
}
if ( isset ( $aData [ " VAR_DBCONNECTION " ])) {
Validator :: isString ( $aData [ 'VAR_DBCONNECTION' ], '$var_dbconnection' );
}
if ( isset ( $aData [ " VAR_SQL " ])) {
Validator :: isString ( $aData [ 'VAR_SQL' ], '$var_sql' );
}
if ( isset ( $aData [ " VAR_NULL " ])) {
2014-07-01 11:30:44 -04:00
Validator :: isInteger ( $aData [ 'VAR_NULL' ], '$var_null' );
2014-07-02 08:59:22 -04:00
if ( $aData [ " VAR_NULL " ] != 0 && $aData [ " VAR_NULL " ] != 1 ) {
2014-07-01 11:30:44 -04:00
throw new \Exception ( \G :: LoadTranslation ( " ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES " , array ( '$var_null' , '0, 1' )));
}
2014-06-30 16:31:27 -04:00
}
2014-06-27 16:38:14 -04:00
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Verify if exists the name of a variable
*
* @ param string $processUid Unique id of Process
* @ param string $variableName Name
*
*/
2015-05-26 17:15:31 -04:00
public function existsName ( $processUid , $variableName , $variableUidToExclude = " " )
2014-06-27 16:38:14 -04:00
{
try {
$criteria = new \Criteria ( " workflow " );
2015-05-26 17:15:31 -04:00
2014-06-27 16:38:14 -04:00
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_UID );
2015-05-26 17:15:31 -04:00
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_NAME );
if ( $variableUidToExclude != " " ) {
$criteria -> add ( \ProcessVariablesPeer :: VAR_UID , $variableUidToExclude , \Criteria :: NOT_EQUAL );
}
2014-06-27 16:38:14 -04:00
$criteria -> add ( \ProcessVariablesPeer :: VAR_NAME , $variableName , \Criteria :: EQUAL );
$criteria -> add ( \ProcessVariablesPeer :: PRJ_UID , $processUid , \Criteria :: EQUAL );
$rsCriteria = \ProcessVariablesPeer :: doSelectRS ( $criteria );
2015-05-26 17:15:31 -04:00
2014-06-27 16:38:14 -04:00
$rsCriteria -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
2015-05-26 17:15:31 -04:00
while ( $rsCriteria -> next ()) {
$row = $rsCriteria -> getRow ();
if ( $variableName == $row [ " VAR_NAME " ]) {
throw new \Exception ( \G :: LoadTranslation ( " DYNAFIELD_ALREADY_EXIST " ));
}
2014-06-27 16:38:14 -04:00
}
} catch ( \Exception $e ) {
throw $e ;
}
}
2014-06-30 16:26:12 -04:00
/**
* Get required variables in the SQL
*
* @ param string $sql SQL
*
* return array Return an array with required variables in the SQL
*/
public function sqlGetRequiredVariables ( $sql )
{
try {
$arrayVariableRequired = array ();
preg_match_all ( " /@[@%# \ ? \x24 \ =]([A-Za-z_] \ w*)/ " , $sql , $arrayMatch , PREG_SET_ORDER );
foreach ( $arrayMatch as $value ) {
$arrayVariableRequired [] = $value [ 1 ];
}
return $arrayVariableRequired ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Verify if some required variable in the SQL is missing in the variables
*
* @ param string $variableName Variable name
* @ param string $variableSql SQL
* @ param array $arrayVariable The variables
*
* return void Throw exception if some required variable in the SQL is missing in the variables
*/
public function throwExceptionIfSomeRequiredVariableSqlIsMissingInVariables ( $variableName , $variableSql , array $arrayVariable )
{
try {
$arrayResult = array_diff ( array_unique ( $this -> sqlGetRequiredVariables ( $variableSql )), array_keys ( $arrayVariable ));
if ( count ( $arrayResult ) > 0 ) {
throw new \Exception ( \G :: LoadTranslation ( " ID_PROCESS_VARIABLE_REQUIRED_VARIABLES_FOR_QUERY " , array ( $variableName , implode ( " , " , $arrayResult ))));
}
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Get all records by execute SQL
*
* @ param string $processUid Unique id of Process
* @ param string $variableName Variable name
* @ param array $arrayVariable The variables
*
* return array Return an array with all records
*/
public function executeSql ( $processUid , $variableName , array $arrayVariable = array ())
{
try {
$arrayRecord = array ();
//Verify data
$process = new \ProcessMaker\BusinessModel\Process ();
$process -> throwExceptionIfNotExistsProcess ( $processUid , strtolower ( " PRJ_UID " ));
//Set data
2015-04-03 14:31:32 -04:00
\G :: LoadClass ( 'pmDynaform' );
$pmDynaform = new \pmDynaform ();
2016-11-08 11:56:50 -04:00
$field = $pmDynaform -> searchField ( $arrayVariable [ " dyn_uid " ], $arrayVariable [ " field_id " ], $processUid );
2016-01-21 11:42:26 -04:00
$dbConnection = " workflow " ;
if ( $field !== null && ! empty ( $field -> dbConnection )) {
$dbConnection = $field -> dbConnection ;
}
2015-04-03 14:31:32 -04:00
$variableSql = $field !== null ? $field -> sql : " " ;
2015-05-26 17:15:31 -04:00
2014-06-30 16:26:12 -04:00
//Get data
$_SESSION [ " PROCESS " ] = $processUid ;
2016-01-21 11:42:26 -04:00
$cnn = \Propel :: getConnection ( $dbConnection );
2014-06-30 16:26:12 -04:00
$stmt = $cnn -> createStatement ();
2015-02-04 12:38:08 -04:00
$replaceFields = G :: replaceDataField ( $variableSql , $arrayVariable );
$rs = $stmt -> executeQuery ( $replaceFields , \ResultSet :: FETCHMODE_NUM );
2014-06-30 16:26:12 -04:00
while ( $rs -> next ()) {
$row = $rs -> getRow ();
$arrayRecord [] = array (
strtolower ( " VALUE " ) => $row [ 0 ],
2015-04-03 14:31:32 -04:00
strtolower ( " TEXT " ) => isset ( $row [ 1 ]) ? $row [ 1 ] : $row [ 0 ]
2014-06-30 16:26:12 -04:00
);
}
//Return
return $arrayRecord ;
} catch ( \Exception $e ) {
throw $e ;
}
}
2014-07-02 09:28:21 -04:00
/**
* Verify if does not exist the variable in table PROCESS_VARIABLES
*
* @ param string $variableUid Unique id of variable
*
* return void Throw exception if does not exist the variable in table PROCESS_VARIABLES
*/
public function throwExceptionIfNotExistsVariable ( $variableUid )
{
try {
$obj = \ProcessVariablesPeer :: retrieveByPK ( $variableUid );
if ( is_null ( $obj )) {
throw new \Exception ( 'var_uid: ' . $variableUid . ' ' . \G :: LoadTranslation ( " ID_DOES_NOT_EXIST " ));
}
} catch ( \Exception $e ) {
throw $e ;
}
}
2014-08-01 10:25:33 -04:00
2016-02-05 14:09:24 -04:00
/**
* Check if the variable is associated to Report Table
*
* @ param string $variableUid Unique id of variable
*
* @ return void Throw exception
*/
public function throwExceptionIfVariableIsAssociatedAditionalTable ( $variableUid )
{
try {
$criteria = new \Criteria ( 'workflow' );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_UID );
$criteria -> addJoin ( \ProcessVariablesPeer :: PRJ_UID , \AdditionalTablesPeer :: PRO_UID , \Criteria :: INNER_JOIN );
$arrayCondition = [];
$arrayCondition [] = array ( \AdditionalTablesPeer :: ADD_TAB_UID , \FieldsPeer :: ADD_TAB_UID , \Criteria :: EQUAL );
$arrayCondition [] = array ( \ProcessVariablesPeer :: VAR_NAME , \FieldsPeer :: FLD_NAME , \Criteria :: EQUAL );
$criteria -> addJoinMC ( $arrayCondition , \Criteria :: INNER_JOIN );
$criteria -> add ( \ProcessVariablesPeer :: VAR_UID , $variableUid , \Criteria :: EQUAL );
$rsCriteria = \ProcessVariablesPeer :: doSelectRS ( $criteria );
$rsCriteria -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
if ( $rsCriteria -> next ()) {
throw new \Exception ( \G :: LoadTranslation ( 'ID_VARIABLE_ASSOCIATED_WITH_REPORT_TABLE' , array ( $variableUid )));
}
} catch ( \Exception $e ) {
throw $e ;
}
}
2014-08-01 10:25:33 -04:00
/**
* Verify if the variable is being used in a Dynaform
*
* @ param string $processUid Unique id of Process
* @ param string $variableUid Unique id of Variable
*
*/
public function verifyUse ( $processUid , $variableUid )
{
try {
$criteria = new \Criteria ( " workflow " );
$criteria -> addSelectColumn ( \DynaformPeer :: DYN_CONTENT );
$criteria -> addSelectColumn ( \DynaformPeer :: DYN_UID );
$criteria -> add ( \DynaformPeer :: PRO_UID , $processUid , \Criteria :: EQUAL );
$rsCriteria = \DynaformPeer :: doSelectRS ( $criteria );
$rsCriteria -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
while ( $rsCriteria -> next ()) {
$row = $rsCriteria -> getRow ();
2015-07-31 11:18:25 -04:00
$contentDecode = \G :: json_decode ( $row [ " DYN_CONTENT " ], true );
2014-08-01 10:25:33 -04:00
$content = $contentDecode [ 'items' ][ 0 ][ 'items' ];
2014-08-27 10:08:12 -04:00
if ( is_array ( $content )) {
foreach ( $content as $key => $value ) {
if ( isset ( $value [ 0 ][ " variable " ])) {
$criteria = new \Criteria ( " workflow " );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_NAME );
$criteria -> add ( \ProcessVariablesPeer :: PRJ_UID , $processUid , \Criteria :: EQUAL );
$criteria -> add ( \ProcessVariablesPeer :: VAR_NAME , $value [ 0 ][ " variable " ], \Criteria :: EQUAL );
$criteria -> add ( \ProcessVariablesPeer :: VAR_UID , $variableUid , \Criteria :: EQUAL );
$rsCriteria = \ProcessVariablesPeer :: doSelectRS ( $criteria );
$rsCriteria -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
$rsCriteria -> next ();
if ( $rsCriteria -> getRow ()) {
throw new \Exception ( \G :: LoadTranslation ( " ID_VARIABLE_IN_USE " , array ( $variableUid , $row [ " DYN_UID " ])));
}
2014-08-01 10:25:33 -04:00
}
}
}
2014-08-08 12:43:07 -04:00
}
2014-08-01 10:25:33 -04:00
} catch ( \Exception $e ) {
throw $e ;
}
}
2014-10-09 15:22:40 -04:00
/**
* Get all records by execute SQL suggest
*
* @ param string $processUid Unique id of Process
* @ param string $variableName Variable name
* @ param array $arrayVariable The variables
*
* return array Return an array with all records
*/
public function executeSqlSuggest ( $processUid , $variableName , array $arrayVariable = array ())
{
try {
$arrayRecord = array ();
2016-11-09 17:15:18 -05:00
$sysSys = ( defined ( " SYS_SYS " )) ? SYS_SYS : " Undefined " ;
$aContext = \Bootstrap :: getDefaultContextLog ();
2014-10-09 15:22:40 -04:00
//Verify data
$process = new \ProcessMaker\BusinessModel\Process ();
$process -> throwExceptionIfNotExistsProcess ( $processUid , strtolower ( " PRJ_UID " ));
//Set data
2015-10-26 18:18:43 -04:00
\G :: LoadClass ( 'pmDynaform' );
$pmDynaform = new \pmDynaform ();
2016-11-08 11:56:50 -04:00
$field = $pmDynaform -> searchField ( $arrayVariable [ " dyn_uid " ], $variableName , $processUid );
2014-10-09 15:22:40 -04:00
//Get data
2016-03-02 09:27:08 -04:00
$filter = str_replace ( '\'' , '\'\'' , ( isset ( $arrayVariable [ 'filter' ])) ? $arrayVariable [ 'filter' ] : '' );
$start = ( isset ( $arrayVariable [ 'start' ])) ? $arrayVariable [ 'start' ] : 0 ;
$limit = ( isset ( $arrayVariable [ 'limit' ])) ? $arrayVariable [ 'limit' ] : '' ;
switch (( $field !== null && isset ( $field -> datasource )) ? $field -> datasource : 'database' ) {
case 'dataVariable' :
if ( ! isset ( $arrayVariable [ 'app_uid' ])) {
return [];
}
2014-10-09 15:22:40 -04:00
2016-03-02 09:27:08 -04:00
$applicationUid = $arrayVariable [ 'app_uid' ];
2015-10-23 10:30:12 -04:00
2016-03-02 09:27:08 -04:00
$case = new \ProcessMaker\BusinessModel\Cases ();
2016-02-25 16:28:17 -04:00
2016-03-02 09:27:08 -04:00
$arrayApplicationData = $case -> getApplicationRecordByPk (
$applicationUid , [ '$applicationUid' => 'app_uid' ]
);
2014-10-09 15:22:40 -04:00
2016-03-02 09:27:08 -04:00
$case = new \Cases ();
2014-10-09 15:22:40 -04:00
2016-03-02 09:27:08 -04:00
$arrayApplicationData [ 'APP_DATA' ] = $case -> unserializeData ( $arrayApplicationData [ 'APP_DATA' ]);
$dataVariable = ( preg_match ( '/^\s*@.(.+)\s*$/' , $field -> dataVariable , $arrayMatch )) ?
$arrayMatch [ 1 ] : $field -> dataVariable ;
if ( isset ( $arrayApplicationData [ 'APP_DATA' ][ $dataVariable ]) &&
is_array ( $arrayApplicationData [ 'APP_DATA' ][ $dataVariable ]) &&
! empty ( $arrayApplicationData [ 'APP_DATA' ][ $dataVariable ])
) {
foreach ( $arrayApplicationData [ 'APP_DATA' ][ $dataVariable ] as $row ) {
$value = $row [ 0 ];
$text = ( isset ( $row [ 1 ])) ? $row [ 1 ] : $row [ 0 ];
if ( $filter !== '' ) {
if ( preg_match ( '/^.*' . $filter . '.*$/i' , $text )) {
$arrayRecord [] = [ strtolower ( 'VALUE' ) => $value , strtolower ( 'TEXT' ) => $text ];
}
} else {
$arrayRecord [] = [ strtolower ( 'VALUE' ) => $value , strtolower ( 'TEXT' ) => $text ];
}
}
$arrayRecord = array_slice (
$arrayRecord ,
( int )( $start ),
( $limit !== '' ) ? ( int )( $limit ) : null
);
}
break ;
default :
//database
$dbConnection = ( $field !== null && ! empty ( $field -> dbConnection )) ? $field -> dbConnection : 'workflow' ;
$variableSql = ( $field !== null ) ? $field -> sql : '' ;
$_SESSION [ 'PROCESS' ] = $processUid ;
$cnn = \Propel :: getConnection ( $dbConnection );
$stmt = $cnn -> createStatement ();
$replaceFields = \G :: replaceDataField ( $variableSql , $arrayVariable );
$parser = new \PHPSQLParser ( $replaceFields );
$replaceFields = $this -> queryModified (
$parser -> parsed , $filter , '*searchtype*' , $start , $limit , $dbConnection
);
$rs = $stmt -> executeQuery ( $replaceFields , \ResultSet :: FETCHMODE_NUM );
2016-11-09 17:15:18 -05:00
//Logger
$aContext [ 'action' ] = 'execute-sql-suggest' ;
$aContext [ 'sql' ] = $replaceFields ;
\Bootstrap :: registerMonolog ( 'sqlExecution' , 200 , 'Sql Execution' , $aContext , $sysSys , 'processmaker.log' );
2016-03-02 09:27:08 -04:00
while ( $rs -> next ()) {
$row = $rs -> getRow ();
$value = $row [ 0 ];
$text = ( isset ( $row [ 1 ])) ? $row [ 1 ] : $row [ 0 ];
$arrayRecord [] = [ strtolower ( 'VALUE' ) => $value , strtolower ( 'TEXT' ) => $text ];
}
break ;
2014-10-09 15:22:40 -04:00
}
//Return
return $arrayRecord ;
} catch ( \Exception $e ) {
2016-11-09 17:15:18 -05:00
//Logger
$aContext [ 'action' ] = 'execute-sql-suggest' ;
$aContext [ 'exception' ] = ( array ) $e ;
\Bootstrap :: registerMonolog ( 'sqlExecution' , 400 , 'Sql Execution' , $aContext , $sysSys , 'processmaker.log' );
2014-10-09 15:22:40 -04:00
throw $e ;
}
}
2016-02-25 16:28:17 -04:00
2016-01-21 11:42:26 -04:00
public function queryModified ( $sqlParsed , $inputSel = " " , $searchType = " *searchtype* " , $start = 0 , $limit = " " , $dbConnection = " workflow " )
2015-11-23 10:04:27 -04:00
{
if ( ! empty ( $sqlParsed [ 'SELECT' ])) {
$sqlSelectOptions = ( isset ( $sqlParsed [ " OPTIONS " ]) && count ( $sqlParsed [ " OPTIONS " ]) > 0 ) ? implode ( " " , $sqlParsed [ " OPTIONS " ]) : null ;
$sqlSelect = " SELECT $sqlSelectOptions " ;
$aSelect = $sqlParsed [ " SELECT " ];
$sFieldSel = ( count ( $aSelect ) > 1 ) ? $aSelect [ 1 ][ 'base_expr' ] : $aSelect [ 0 ][ 'base_expr' ];
foreach ( $aSelect as $key => $value ) {
if ( $key != 0 )
$sqlSelect .= " , " ;
$sAlias = str_replace ( " ` " , " " , $aSelect [ $key ][ 'alias' ]);
$sBaseExpr = $aSelect [ $key ][ 'base_expr' ];
switch ( $aSelect [ $key ][ 'expr_type' ]) {
case 'colref' : if ( $sAlias === $sBaseExpr )
$sqlSelect .= $sAlias ;
else
$sqlSelect .= $sBaseExpr . ' AS ' . $sAlias ;
break ;
case 'expression' : if ( $sAlias === $sBaseExpr )
$sqlSelect .= $sBaseExpr ;
else
$sqlSelect .= $sBaseExpr . ' AS ' . $sAlias ;
break ;
case 'subquery' : if ( strpos ( $sAlias , $sBaseExpr , 0 ) != 0 )
$sqlSelect .= $sAlias ;
else
$sqlSelect .= $sBaseExpr . " AS " . $sAlias ;
break ;
case 'operator' : $sqlSelect .= $sBaseExpr ;
break ;
default : $sqlSelect .= $sBaseExpr ;
break ;
}
}
$sqlFrom = " FROM " ;
if ( ! empty ( $sqlParsed [ 'FROM' ])) {
$aFrom = $sqlParsed [ 'FROM' ];
if ( count ( $aFrom ) > 0 ) {
foreach ( $aFrom as $key => $value ) {
if ( $key == 0 ) {
$sqlFrom .= $aFrom [ $key ][ 'table' ] . (( $aFrom [ $key ][ 'table' ] == $aFrom [ $key ][ 'alias' ]) ? " " : " " . $aFrom [ $key ][ 'alias' ]);
} else {
$sqlFrom .= " " . (( $aFrom [ $key ][ 'join_type' ] == 'JOIN' ) ? " INNER " : $aFrom [ $key ][ 'join_type' ]) . " JOIN " . $aFrom [ $key ][ 'table' ]
. (( $aFrom [ $key ][ 'table' ] == $aFrom [ $key ][ 'alias' ]) ? " " : " " . $aFrom [ $key ][ 'alias' ]) . " " . $aFrom [ $key ][ 'ref_type' ] . " " . $aFrom [ $key ][ 'ref_clause' ];
}
}
}
}
$sqlConditionLike = " LIKE '% " . $inputSel . " %' " ;
switch ( $searchType ) {
case " searchtype* " :
$sqlConditionLike = " LIKE ' " . $inputSel . " %' " ;
break ;
case " *searchtype " :
$sqlConditionLike = " LIKE '% " . $inputSel . " ' " ;
break ;
}
if ( ! empty ( $sqlParsed [ 'WHERE' ])) {
$sqlWhere = " WHERE " ;
$aWhere = $sqlParsed [ 'WHERE' ];
foreach ( $aWhere as $key => $value ) {
$sqlWhere .= $value [ 'base_expr' ] . " " ;
}
$sqlWhere .= " AND " . $sFieldSel . " " . $sqlConditionLike ;
} else {
$sqlWhere = " WHERE " . $sFieldSel . " " . $sqlConditionLike ;
}
$sqlGroupBy = " " ;
if ( ! empty ( $sqlParsed [ 'GROUP' ])) {
$sqlGroupBy = " GROUP BY " ;
$aGroup = $sqlParsed [ 'GROUP' ];
foreach ( $aGroup as $key => $value ) {
if ( $key != 0 )
$sqlGroupBy .= " , " ;
if ( $value [ 'direction' ] == 'ASC' )
$sqlGroupBy .= $value [ 'base_expr' ];
else
$sqlGroupBy .= $value [ 'base_expr' ] . " " . $value [ 'direction' ];
}
}
$sqlHaving = " " ;
if ( ! empty ( $sqlParsed [ 'HAVING' ])) {
$sqlHaving = " HAVING " ;
$aHaving = $sqlParsed [ 'HAVING' ];
foreach ( $aHaving as $key => $value ) {
$sqlHaving .= $value [ 'base_expr' ] . " " ;
}
}
$sqlOrderBy = " " ;
if ( ! empty ( $sqlParsed [ 'ORDER' ])) {
$sqlOrderBy = " ORDER BY " ;
$aOrder = $sqlParsed [ 'ORDER' ];
foreach ( $aOrder as $key => $value ) {
if ( $key != 0 )
$sqlOrderBy .= " , " ;
if ( $value [ 'direction' ] == 'ASC' )
$sqlOrderBy .= $value [ 'base_expr' ];
else
$sqlOrderBy .= $value [ 'base_expr' ] . " " . $value [ 'direction' ];
}
} else {
$sqlOrderBy = " ORDER BY " . $sFieldSel ;
}
2016-02-25 16:28:17 -04:00
2016-07-07 17:17:02 -04:00
$start = 0 ;
2015-11-23 10:04:27 -04:00
$sqlLimit = " " ;
if ( $start >= 0 ) {
$sqlLimit = " LIMIT " . $start ;
}
if ( $limit !== " " ) {
$sqlLimit = " LIMIT " . $start . " , " . $limit ;
}
if ( ! empty ( $sqlParsed [ 'LIMIT' ])) {
$sqlLimit = " LIMIT " . $sqlParsed [ 'LIMIT' ][ 'start' ] . " , " . $sqlParsed [ 'LIMIT' ][ 'end' ];
}
2016-02-25 16:28:17 -04:00
2016-01-21 11:42:26 -04:00
//get database provider
$a = new \Criteria ( " workflow " );
$a -> addSelectColumn ( \DbSourcePeer :: DBS_TYPE );
$a -> add ( \DbSourcePeer :: DBS_UID , $dbConnection , \Criteria :: EQUAL );
$ds = \DbSourcePeer :: doSelectRS ( $a );
$ds -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
$ds -> next ();
$row = $ds -> getRow ();
if ( isset ( $row [ " DBS_TYPE " ])) {
if ( $row [ " DBS_TYPE " ] === " pgsql " ) {
2016-07-07 17:17:02 -04:00
if ( $start >= 0 ) {
$sqlLimit = " OFFSET " . $start ;
}
if ( $limit !== " " ) {
$sqlLimit = $sqlLimit . " LIMIT " . $limit ;
}
2016-01-21 11:42:26 -04:00
}
if ( $row [ " DBS_TYPE " ] === " mssql " ) {
2016-07-07 17:17:02 -04:00
$sqlLimit = " " ;
if ( $limit !== " " ) {
$wordsSearch = [ " DISTINCT " , " ALL " ];
$wordsSearchCount = count ( $wordsSearch );
for ( $i = 0 ; $i < $wordsSearchCount ; $i ++ ) {
$stringSearch = $wordsSearch [ $i ];
$stringPosition = strpos ( $sqlSelect , $stringSearch );
if ( $stringPosition !== false ) {
$stringLength = strlen ( $stringSearch );
$string1 = substr ( $sqlSelect , 0 , $stringPosition + $stringLength );
$string2 = substr ( $sqlSelect , $stringPosition + $stringLength );
$sqlSelect = $string1 . " TOP( " . $limit . " ) " . $string2 ;
}
}
}
2016-01-21 11:42:26 -04:00
}
if ( $row [ " DBS_TYPE " ] === " oracle " ) {
2016-07-07 17:17:02 -04:00
$sqlLimit = " " ;
if ( $limit !== " " ) {
if ( strpos ( $sqlWhere , " WHERE " ) === false ) {
$sqlWhere = " WHERE ROWNUM <= " . $limit ;
} else {
$sqlWhere = $sqlWhere . " AND ROWNUM <= " . $limit ;
}
}
2016-01-21 11:42:26 -04:00
}
}
2015-11-23 10:04:27 -04:00
2016-07-07 17:17:02 -04:00
return $sqlSelect . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving . " " . $sqlOrderBy . $sqlLimit ;
2015-11-23 10:04:27 -04:00
}
if ( ! empty ( $sqlParsed [ 'CALL' ])) {
$sCall = " CALL " ;
$aCall = $sqlParsed [ 'CALL' ];
foreach ( $aCall as $key => $value ) {
$sCall .= $value . " " ;
}
return $sCall ;
}
if ( ! empty ( $sqlParsed [ 'EXECUTE' ])) {
$sCall = " EXECUTE " ;
$aCall = $sqlParsed [ 'EXECUTE' ];
foreach ( $aCall as $key => $value ) {
$sCall .= $value . " " ;
}
return $sCall ;
}
if ( ! empty ( $sqlParsed [ '' ])) {
$sCall = " " ;
$aCall = $sqlParsed [ '' ];
foreach ( $aCall as $key => $value ) {
$sCall .= $value . " " ;
}
return $sCall ;
}
}
2016-02-25 16:28:17 -04:00
2015-11-27 11:48:24 -04:00
public function getVariableTypeByName ( $processUid , $variableName )
{
try {
$criteria = new \Criteria ( " workflow " );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_UID );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_NAME );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_FIELD_TYPE );
2015-12-07 17:53:33 -04:00
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_DBCONNECTION );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_SQL );
$criteria -> addSelectColumn ( \ProcessVariablesPeer :: VAR_ACCEPTED_VALUES );
2015-11-27 11:48:24 -04:00
$criteria -> add ( \ProcessVariablesPeer :: VAR_NAME , $variableName );
$criteria -> add ( \ProcessVariablesPeer :: PRJ_UID , $processUid );
$rsCriteria = \ProcessVariablesPeer :: doSelectRS ( $criteria );
$rsCriteria -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
if ( $rsCriteria -> next ()) {
$row = $rsCriteria -> getRow ();
return sizeof ( $row ) ? $row : false ;
}
return false ;
} catch ( \Exception $e ) {
throw $e ;
}
}
2015-10-26 18:18:43 -04:00
2016-02-25 16:28:17 -04:00
/**
* Get Variable record by name
*
* @ param string $projectUid Unique id of Project
* @ param string $variableName Variable name
* @ param array $arrayVariableNameForException Variable name for exception
* @ param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist
* ( TRUE : throw the exception ; FALSE : returns FALSE )
*
* @ return array Returns an array with Variable record , ThrowTheException / FALSE otherwise
*/
public function getVariableRecordByName (
$projectUid ,
$variableName ,
array $arrayVariableNameForException ,
$throwException = true
) {
try {
$criteria = new \Criteria ( 'workflow' );
$criteria -> add ( \ProcessVariablesPeer :: PRJ_UID , $projectUid , \Criteria :: EQUAL );
$criteria -> add ( \ProcessVariablesPeer :: VAR_NAME , $variableName , \Criteria :: EQUAL );
$rsCriteria = \ProcessVariablesPeer :: doSelectRS ( $criteria );
$rsCriteria -> setFetchmode ( \ResultSet :: FETCHMODE_ASSOC );
if ( $rsCriteria -> next ()) {
$arrayVariableData = $rsCriteria -> getRow ();
} else {
if ( $throwException ) {
throw new \Exception (
$arrayVariableNameForException [ '$variableName' ] . ': ' . $variableName . ' ' .
\G :: LoadTranslation ( 'ID_DOES_NOT_EXIST' )
);
} else {
return false ;
}
}
//Return
return $arrayVariableData ;
} catch ( \Exception $e ) {
throw $e ;
}
}
2016-06-30 15:52:11 -04:00
public function validateVarFieldType ( $type )
{
$vType = strtolower ( $type );
if ( ! in_array ( $vType , $this -> variableTypes )) {
throw new \Exception ( \G :: LoadTranslation ( " ID_RECORD_CANNOT_BE_CREATED " ));
}
return $vType ;
}
2016-02-05 14:09:24 -04:00
}