2014-02-20 17:16:00 -04:00
< ? php
namespace BusinessModel ;
class TriggerWizard
{
private $arrayFieldDefinition = array (
" TRI_UID " => array ( " type " => " string " , " required " => false , " empty " => false , " defaultValues " => array (), " fieldNameAux " => " triggerUid " ),
" TRI_TITLE " => array ( " type " => " string " , " required " => true , " empty " => false , " defaultValues " => array (), " fieldNameAux " => " triggerTitle " ),
" TRI_DESCRIPTION " => array ( " type " => " string " , " required " => false , " empty " => true , " defaultValues " => array (), " fieldNameAux " => " triggerDescription " ),
2014-02-26 11:58:56 -04:00
" TRI_TYPE " => array ( " type " => " string " , " required " => true , " empty " => false , " defaultValues " => array ( " SCRIPT " ), " fieldNameAux " => " triggerType " ),
2014-02-20 17:16:00 -04:00
" TRI_WEBBOT " => array ( " type " => " string " , " required " => false , " empty " => true , " defaultValues " => array (), " fieldNameAux " => " triggerWebbot " ),
" TRI_PARAM " => array ( " type " => " string " , " required " => false , " empty " => true , " defaultValues " => array (), " fieldNameAux " => " triggerParam " )
);
private $formatFieldNameInUppercase = true ;
private $arrayFieldNameForException = array (
2014-02-26 11:58:56 -04:00
" processUid " => " PRO_UID " ,
" libraryName " => " LIB_NAME " ,
" methodName " => " MTH_NAME " ,
" triggerParams " => " TRI_PARAMS "
2014-02-20 17:16:00 -04:00
);
private $library ;
/**
* Constructor of the class
*
* return void
*/
public function __construct ()
{
try {
foreach ( $this -> arrayFieldDefinition as $key => $value ) {
$this -> arrayFieldNameForException [ $value [ " fieldNameAux " ]] = $key ;
}
//Library
\G :: LoadClass ( " triggerLibrary " );
$this -> library = \triggerLibrary :: getSingleton ();
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Set the format of the fields name ( uppercase , lowercase )
*
* @ param bool $flag Value that set the format
*
* return void
*/
public function setFormatFieldNameInUppercase ( $flag )
{
try {
$this -> formatFieldNameInUppercase = $flag ;
$this -> setArrayFieldNameForException ( $this -> arrayFieldNameForException );
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Set exception messages for fields
*
* @ param array $arrayData Data with the fields
*
* return void
*/
public function setArrayFieldNameForException ( $arrayData )
{
try {
foreach ( $arrayData as $key => $value ) {
$this -> arrayFieldNameForException [ $key ] = $this -> getFieldNameByFormatFieldName ( $value );
}
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Get the name of the field according to the format
*
* @ param string $fieldName Field name
*
* return string Return the field name according the format
*/
public function getFieldNameByFormatFieldName ( $fieldName )
{
try {
return ( $this -> formatFieldNameInUppercase ) ? strtoupper ( $fieldName ) : strtolower ( $fieldName );
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Verify if doesn ' t exists the name of the library
*
* @ param string $libraryName Library name
* @ param string $libraryFieldNameForException Field name for the exception
*
* return void Throw exception if doesn ' t exists the name of the library
*/
public function throwExceptionIfNotExistsLibrary ( $libraryName , $libraryFieldNameForException )
{
try {
$arrayLibrary = $this -> library -> getRegisteredClasses ();
if ( ! isset ( $arrayLibrary [ $this -> libraryGetLibraryName ( $libraryName )])) {
2014-03-05 11:17:44 -04:00
$msg = str_replace ( array ( " { 0} " , " { 1} " ), array ( $libraryFieldNameForException , $libraryName ), " The library with { 0}: \" { 1} \" does not exist " );
2014-02-20 17:16:00 -04:00
throw ( new \Exception ( $msg ));
}
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Verify if doesn ' t exists the method in the library
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
* @ param string $libraryFieldNameForException Field name for the exception
* @ param string $methodFieldNameForException Field name for the exception
*
* return void Throw exception if doesn ' t exists the method in the library
*/
public function throwExceptionIfNotExistsMethodInLibrary ( $libraryName , $methodName , $libraryFieldNameForException , $methodFieldNameForException )
{
try {
$this -> throwExceptionIfNotExistsLibrary ( $libraryName , $libraryFieldNameForException );
$library = $this -> library -> getLibraryDefinition ( $this -> libraryGetLibraryName ( $libraryName ));
if ( ! isset ( $library -> methods [ $methodName ])) {
2014-03-05 11:17:44 -04:00
$msg = str_replace ( array ( " { 0} " , " { 1} " ), array ( $methodFieldNameForException , $methodName ), " The function with { 0}: \" { 1} \" does not exist in the library " );
2014-02-20 17:16:00 -04:00
throw ( new \Exception ( $msg ));
}
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
2014-02-26 11:58:56 -04:00
* Verify if wizard is invalid for the trigger
2014-02-20 17:16:00 -04:00
*
2014-02-26 11:58:56 -04:00
* @ param string $libraryName Library name
* @ param string $methodName Method name
* @ param string $triggerUid Unique id of Trigger
* @ param string $libraryFieldNameForException Field name for the exception
* @ param string $methodFieldNameForException Field name for the exception
* @ param string $triggerUidFieldNameForException Field name for the exception
*
* return void Throw exception if wizard is invalid for the trigger
2014-02-20 17:16:00 -04:00
*/
public function throwExceptionIfLibraryAndMethodIsInvalidForTrigger ( $libraryName , $methodName , $triggerUid , $libraryFieldNameForException , $methodFieldNameForException , $triggerUidFieldNameForException )
{
try {
//Verify data
$this -> throwExceptionIfNotExistsMethodInLibrary ( $libraryName , $methodName , $libraryFieldNameForException , $methodFieldNameForException );
$trigger = new \BusinessModel\Trigger ();
$trigger -> throwExceptionIfNotExistsTrigger ( $triggerUid , " " , $triggerUidFieldNameForException );
//Get data
$trigger = new \Triggers ();
$arrayTriggerData = $trigger -> load ( $triggerUid );
$triggerParam = unserialize ( $arrayTriggerData [ " TRI_PARAM " ]);
if ( $arrayTriggerData [ " TRI_PARAM " ] == " " || ! isset ( $triggerParam [ " hash " ])) {
2014-03-05 11:17:44 -04:00
$msg = str_replace ( array ( " { 0} " , " { 1} " ), array ( $triggerUidFieldNameForException , $triggerUid ), " The trigger with { 0}: { 1}, has not been created with the wizard " );
2014-02-20 17:16:00 -04:00
throw ( new \Exception ( $msg ));
}
$arrayTriggerData [ " TRI_PARAM " ] = $triggerParam ;
if ( md5 ( $arrayTriggerData [ " TRI_WEBBOT " ]) != $arrayTriggerData [ " TRI_PARAM " ][ " hash " ]) {
2014-03-05 11:17:44 -04:00
$msg = str_replace ( array ( " { 0} " , " { 1} " ), array ( $triggerUidFieldNameForException , $triggerUid ), " The trigger with { 0}: { 1}, has been modified manually. It is invalid for the wizard " );
2014-02-20 17:16:00 -04:00
throw ( new \Exception ( $msg ));
}
2014-02-26 11:58:56 -04:00
$triggerParamLibraryName = ( preg_match ( " /^class \ .?(.*) \ .pmFunctions \ .php $ / " , $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ " LIBRARY_CLASS " ], $arrayMatch )) ? (( isset ( $arrayMatch [ 1 ]) && $arrayMatch [ 1 ] != " " ) ? $arrayMatch [ 1 ] : " pmFunctions " ) : $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ " LIBRARY_CLASS " ];
$triggerParamMethodName = $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ " PMFUNTION_NAME " ];
if ( $libraryName != $triggerParamLibraryName || $methodName != $triggerParamMethodName ) {
$msg = str_replace ( array ( " { 0} " , " { 1} " , " { 2} " , " { 3} " ), array ( $libraryName , $methodName , $triggerUidFieldNameForException , $triggerUid ), " The wizard with the library \" { 0} \" and function \" { 1} \" , is invalid for the trigger with { 2}: { 3} " );
throw ( new \Exception ( $msg ));
}
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Validate TRI_PARAMS data
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
* @ param array $arrayData Data
* @ param string $libraryFieldNameForException Field name for the exception
* @ param string $methodFieldNameForException Field name for the exception
* @ param string $fieldNameForException Field name for the exception
*
* return array Return array . Throw exception otherwise , if TRI_PARAMS data has an invalid value
*/
public function throwExceptionIfDataNotMetTriggerParamsDefinition ( $libraryName , $methodName , $arrayData , $libraryFieldNameForException , $methodFieldNameForException , $fieldNameForException )
{
try {
$arrayData = array_change_key_case ( $arrayData , CASE_UPPER );
$arrayParamData = array ();
//Verify data
$this -> throwExceptionIfNotExistsMethodInLibrary ( $libraryName , $methodName , $libraryFieldNameForException , $methodFieldNameForException );
//Set variables
$nInputParam = count ( $this -> methodGetInputParams ( $libraryName , $methodName ));
$nOutputParam = count ( $this -> methodGetOutputParams ( $libraryName , $methodName ));
if ( $nInputParam > 0 || $nOutputParam > 0 ) {
if ( ! isset ( $arrayData [ " TRI_PARAMS " ])) {
throw ( new \Exception ( str_replace ( array ( " { 0} " ), array ( $fieldNameForException ), " The \" { 0} \" attribute is not defined " )));
}
if ( ! is_array ( $arrayData [ " TRI_PARAMS " ])) {
throw ( new \Exception ( str_replace ( array ( " { 0} " ), array ( $fieldNameForException ), " The \" { 0} \" attribute is not array " )));
}
$arrayData [ " TRI_PARAMS " ] = array_change_key_case ( $arrayData [ " TRI_PARAMS " ], CASE_UPPER );
if ( $nInputParam > 0 ) {
if ( ! isset ( $arrayData [ " TRI_PARAMS " ][ " INPUT " ])) {
throw ( new \Exception ( str_replace ( array ( " { 0} " ), array ( $this -> getFieldNameByFormatFieldName ( $fieldNameForException . " .INPUT " )), " The \" { 0} \" attribute is not defined " )));
}
if ( ! is_array ( $arrayData [ " TRI_PARAMS " ][ " INPUT " ])) {
throw ( new \Exception ( str_replace ( array ( " { 0} " ), array ( $this -> getFieldNameByFormatFieldName ( $fieldNameForException . " .INPUT " )), " The \" { 0} \" attribute is not array " )));
}
$arrayParamData [ " input " ] = $arrayData [ " TRI_PARAMS " ][ " INPUT " ];
}
if ( $nOutputParam > 0 ) {
if ( ! isset ( $arrayData [ " TRI_PARAMS " ][ " OUTPUT " ])) {
throw ( new \Exception ( str_replace ( array ( " { 0} " ), array ( $this -> getFieldNameByFormatFieldName ( $fieldNameForException . " .OUTPUT " )), " The \" { 0} \" attribute is not defined " )));
}
if ( ! is_array ( $arrayData [ " TRI_PARAMS " ][ " OUTPUT " ])) {
throw ( new \Exception ( str_replace ( array ( " { 0} " ), array ( $this -> getFieldNameByFormatFieldName ( $fieldNameForException . " .OUTPUT " )), " The \" { 0} \" attribute is not array " )));
}
$arrayParamData [ " output " ] = $arrayData [ " TRI_PARAMS " ][ " OUTPUT " ];
}
$this -> throwExceptionIfDataNotMetParamDefinition ( $libraryName , $methodName , $arrayParamData , $libraryFieldNameForException , $methodFieldNameForException );
}
return $arrayParamData ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Validate data by parameter definition
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
* @ param array $arrayParamData Data
* @ param string $libraryFieldNameForException Field name for the exception
* @ param string $methodFieldNameForException Field name for the exception
*
* return void Throw exception if data has an invalid value
*/
public function throwExceptionIfDataNotMetParamDefinition ( $libraryName , $methodName , $arrayParamData , $libraryFieldNameForException , $methodFieldNameForException )
{
try {
//Verify data
$this -> throwExceptionIfNotExistsMethodInLibrary ( $libraryName , $methodName , $libraryFieldNameForException , $methodFieldNameForException );
//Set variables
$arrayMethodInputParam = $this -> methodGetInputParams ( $libraryName , $methodName );
$arrayMethodOutputParam = $this -> methodGetOutputParams ( $libraryName , $methodName );
foreach ( $arrayMethodOutputParam as $key => $value ) {
$arrayMethodOutputParam [ $key ][ " type " ] = " string " ;
}
$arrayVerify = array (
array ( " paramDefinition " => $arrayMethodInputParam , " paramData " => ( isset ( $arrayParamData [ " input " ])) ? $arrayParamData [ " input " ] : array ()),
array ( " paramDefinition " => $arrayMethodOutputParam , " paramData " => ( isset ( $arrayParamData [ " output " ])) ? $arrayParamData [ " output " ] : array ())
);
2014-02-20 17:16:00 -04:00
2014-02-26 11:58:56 -04:00
$process = new \BusinessModel\Process ();
foreach ( $arrayVerify as $key1 => $value1 ) {
if ( count ( $value1 [ " paramDefinition " ]) > 0 ) {
$arrayParamDefinition = array ();
$arrayParamNameForException = array ();
foreach ( $value1 [ " paramDefinition " ] as $key2 => $value2 ) {
$arrayParamDefinition [ $value2 [ " name " ]] = array ( " type " => $value2 [ " type " ], " required " => $value2 [ " required " ], " empty " => ! $value2 [ " required " ], " defaultValues " => array (), " fieldNameAux " => $value2 [ " name " ]);
$arrayParamNameForException [ $value2 [ " name " ]] = $value2 [ " name " ];
}
2014-02-20 17:16:00 -04:00
2014-02-26 11:58:56 -04:00
$process -> throwExceptionIfDataNotMetFieldDefinition ( $value1 [ " paramData " ], $arrayParamDefinition , $arrayParamNameForException , true );
}
}
2014-02-20 17:16:00 -04:00
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Get the filename of the library
*
* @ param string $libraryName Library name
*
* return string Return the filename of the library
*/
public function libraryGetLibraryName ( $libraryName )
{
try {
if ( ! preg_match ( " / \ .pmFunctions \ .php $ / " , $libraryName )) {
$libraryName = ( $libraryName != " pmFunctions " ) ? $libraryName . " .pmFunctions " : $libraryName ;
$libraryName = " class. " . $libraryName . " .php " ;
}
return $libraryName ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
2014-02-26 11:58:56 -04:00
* Get all input parameters of a method
2014-02-20 17:16:00 -04:00
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
*
2014-02-26 11:58:56 -04:00
* return array Return an array with all input parameters of a method
2014-02-20 17:16:00 -04:00
*/
2014-02-26 11:58:56 -04:00
public function methodGetInputParams ( $libraryName , $methodName )
2014-02-20 17:16:00 -04:00
{
try {
$arrayParam = array ();
//Verify data
$this -> throwExceptionIfNotExistsMethodInLibrary ( $libraryName , $methodName , $this -> arrayFieldNameForException [ " libraryName " ], $this -> arrayFieldNameForException [ " methodName " ]);
//Get data
$library = $this -> library -> getLibraryDefinition ( $this -> libraryGetLibraryName ( $libraryName ));
$method = $library -> methods [ $methodName ];
$arrayParameter = array_keys ( $method -> params );
foreach ( $arrayParameter as $key => $value ) {
$strParam = $value ;
if ( $strParam != " " ) {
$arrayp = explode ( " | " , $strParam );
//Get param
$arrayTypeAndMaxLength = array ();
if ( preg_match ( " /^ \ s*(.+) \ s*[ \ { \ [ \ (] \ s*( \ d+) \ s*[ \ ) \ ] \ }].* $ / " , $arrayp [ 0 ], $arrayMatch )) {
$arrayTypeAndMaxLength = array ( " type " => $arrayMatch [ 1 ], " maxLength " => ( int )( $arrayMatch [ 2 ]));
} else {
$arrayTypeAndMaxLength = array ( " type " => trim ( $arrayp [ 0 ]));
}
$arrayNameAndDefaultValue = array ();
$arrayNameAndDefaultValue [ " name " ] = " " ;
if ( preg_match ( " /^ \ s* \\ \$ ( \ w+)(.*) $ / " , $arrayp [ 1 ], $arrayMatch )) {
$arrayNameAndDefaultValue [ " name " ] = $arrayMatch [ 1 ];
$arrayp [ 1 ] = $arrayMatch [ 2 ];
}
if ( preg_match ( " /^ \ s*= \ s*(.*) $ / " , $arrayp [ 1 ], $arrayMatch )) {
$arrayNameAndDefaultValue [ " defaultValue " ] = trim ( trim ( $arrayMatch [ 1 ]), " \" ' " );
}
//Set param
$arrayData = array (
" name " => $arrayNameAndDefaultValue [ " name " ],
" type " => $arrayTypeAndMaxLength [ " type " ],
" label " => ( isset ( $arrayp [ 2 ])) ? trim ( $arrayp [ 2 ]) : $arrayNameAndDefaultValue [ " name " ],
" description " => ( isset ( $arrayp [ 3 ])) ? trim ( $arrayp [ 3 ]) : " " ,
" required " => ! isset ( $arrayNameAndDefaultValue [ " defaultValue " ])
);
if ( isset ( $arrayNameAndDefaultValue [ " defaultValue " ])) {
$arrayData [ " default_value " ] = $arrayNameAndDefaultValue [ " defaultValue " ];
}
if ( isset ( $arrayTypeAndMaxLength [ " maxLength " ])) {
$arrayData [ " max_length " ] = $arrayTypeAndMaxLength [ " maxLength " ];
}
$arrayParam [] = $arrayData ;
}
}
//Return
return $arrayParam ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
2014-02-26 11:58:56 -04:00
* Get all output parameters of a method
2014-02-20 17:16:00 -04:00
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
*
2014-02-26 11:58:56 -04:00
* return array Return an array with all output parameters of a method
2014-02-20 17:16:00 -04:00
*/
2014-02-26 11:58:56 -04:00
public function methodGetOutputParams ( $libraryName , $methodName )
2014-02-20 17:16:00 -04:00
{
try {
$arrayParam = array ();
//Verify data
$this -> throwExceptionIfNotExistsMethodInLibrary ( $libraryName , $methodName , $this -> arrayFieldNameForException [ " libraryName " ], $this -> arrayFieldNameForException [ " methodName " ]);
//Get data
$library = $this -> library -> getLibraryDefinition ( $this -> libraryGetLibraryName ( $libraryName ));
$method = $library -> methods [ $methodName ];
if ( isset ( $method -> info [ " return " ]) && $method -> info [ " return " ] != " " ) {
$strParam = $method -> info [ " return " ];
$arrayp = explode ( " | " , $strParam );
if ( isset ( $arrayp [ 0 ]) && isset ( $arrayp [ 1 ]) && trim ( strtoupper ( $arrayp [ 0 ])) != strtoupper ( \G :: LoadTranslation ( " ID_NONE " ))) {
$description = " " ;
if ( isset ( $arrayp [ 3 ])) {
$description = ( trim ( strtoupper ( $arrayp [ 3 ])) == strtoupper ( \G :: LoadTranslation ( " ID_NONE " ))) ? \G :: LoadTranslation ( " ID_NOT_REQUIRED " ) : trim ( $arrayp [ 3 ]);
} else {
$description = $strParam ;
}
//Set param
$arrayParam [] = array (
" name " => " tri_answer " ,
" type " => trim ( $arrayp [ 0 ]),
" label " => \G :: LoadTranslation ( " ID_TRIGGER_RETURN_LABEL " ),
" description " => $description ,
" required " => isset ( $arrayp [ 1 ]) //(trim($arrayp[1]) != "")? true : false
);
}
}
//Return
return $arrayParam ;
} catch ( \Exception $e ) {
throw $e ;
}
}
2014-02-26 11:58:56 -04:00
/**
* Set values in Trigger fields ( TRI_WEBBOT , TRI_PARAM )
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
* @ param string $triggerUid Unique id of Trigger
* @ param array $arrayParamData Data
*
* return void
*/
public function setData ( $libraryName , $methodName , $triggerUid , $arrayParamData )
{
try {
//Verify data
$this -> throwExceptionIfNotExistsMethodInLibrary ( $libraryName , $methodName , $this -> arrayFieldNameForException [ " libraryName " ], $this -> arrayFieldNameForException [ " methodName " ]);
$trigger = new \BusinessModel\Trigger ();
$trigger -> throwExceptionIfNotExistsTrigger ( $triggerUid , " " , $this -> arrayFieldNameForException [ " triggerUid " ]);
//Set variables
$arrayMethodInputParam = $this -> methodGetInputParams ( $libraryName , $methodName );
$arrayMethodOutputParam = $this -> methodGetOutputParams ( $libraryName , $methodName );
$arrayTriggerParam = array ();
$arrayScriptMethodParam = array ();
$strParamsNamePhp = " " ;
$strParamsType = " " ;
$strParamsRequired = " " ;
//Set variables - Load Trigger
$trigger = new \Triggers ();
$arrayTriggerData = $trigger -> load ( $triggerUid );
$arrayTriggerParam [ " TRI_UID " ] = $triggerUid ;
$arrayTriggerParam [ " TRI_TITLE " ] = $arrayTriggerData [ " TRI_TITLE " ];
$arrayTriggerParam [ " TRI_DESCRIPTION " ] = $arrayTriggerData [ " TRI_DESCRIPTION " ];
$arrayTriggerParam [ " TRI_TYPE " ] = $arrayTriggerData [ " TRI_TYPE " ];
$arrayTriggerParam [ " PRO_UID " ] = $arrayTriggerData [ " PRO_UID " ];
//Set variables - Input
foreach ( $arrayMethodInputParam as $key => $value ) {
$paramName = $value [ " name " ];
$paramType = $value [ " type " ];
$paramRequired = $value [ " required " ];
$paramDefaultValue = ( isset ( $value [ " default_value " ])) ? $value [ " default_value " ] : " " ;
//TRI_PARAM
2014-02-26 17:44:51 -04:00
if ( $paramType != " array " ) {
$arrayTriggerParam [ $paramName ] = ( isset ( $arrayParamData [ " input " ][ $paramName ])) ? $arrayParamData [ " input " ][ $paramName ] : $paramDefaultValue ;
} else {
if ( isset ( $arrayParamData [ " input " ][ $paramName ])) {
if ( is_array ( $arrayParamData [ " input " ][ $paramName ])) {
$strArrayElements = " " ;
foreach ( $arrayParamData [ " input " ][ $paramName ] as $key2 => $value2 ) {
$strKey = ( is_string ( $key2 )) ? " \" " . $key2 . " \" " : $key2 ;
$strValue = ( is_string ( $value2 )) ? " \" " . str_replace ( " \" " , " \\ \" " , $value2 ) . " \" " : $value2 ;
$strArrayElements = $strArrayElements . (( $strArrayElements != " " ) ? " , " : " " ) . $strKey . " => " . $strValue ;
}
$arrayParamData [ " input " ][ $paramName ] = " array( " . $strArrayElements . " ) " ;
}
$arrayTriggerParam [ $paramName ] = $arrayParamData [ " input " ][ $paramName ];
} else {
$arrayTriggerParam [ $paramName ] = $paramDefaultValue ;
}
}
2014-02-26 11:58:56 -04:00
//Variables
$strParamsNamePhp = $strParamsNamePhp . (( $strParamsNamePhp != " " ) ? " , " : " " ) . " \$ " . $paramName ;
$strParamsType = $strParamsType . (( $strParamsType != " " ) ? " , " : " " ) . $paramType ;
if ( $paramRequired ) {
$strParamsRequired = $strParamsRequired . (( $strParamsRequired != " " ) ? " , " : " " ) . $paramName ;
}
//Method parameters
$paramValue = " \" " . $paramDefaultValue . " \" " ;
if ( isset ( $arrayParamData [ " input " ][ $paramName ])) {
if ( preg_match ( " /^.*@@.* $ / " , $arrayParamData [ " input " ][ $paramName ])) {
$paramValue = trim ( $arrayParamData [ " input " ][ $paramName ]);
} else {
switch ( $paramType ) {
case " int " :
case " integer " :
$paramValue = intval ( $arrayParamData [ " input " ][ $paramName ]);
break ;
case " float " :
case " real " :
case " double " :
$paramValue = floatval ( $arrayParamData [ " input " ][ $paramName ]);
break ;
case " bool " :
case " boolean " :
case " array " :
$paramValue = trim ( $arrayParamData [ " input " ][ $paramName ]);
break ;
case " string " :
$paramValue = " \" " . str_replace ( " \" " , " \\ \" " , $arrayParamData [ " input " ][ $paramName ]) . " \" " ;
break ;
default :
if ( is_numeric ( $arrayParamData [ " input " ][ $paramName ]) ||
is_bool ( $arrayParamData [ " input " ][ $paramName ]) ||
preg_match ( " /^ \ s*array \ s* \ (.* \ ) \ s* $ / " , $arrayParamData [ " input " ][ $paramName ])
) {
$paramValue = trim ( $arrayParamData [ " input " ][ $paramName ]);
} else {
$paramValue = " \" " . str_replace ( " \" " , " \\ \" " , $arrayParamData [ " input " ][ $paramName ]) . " \" " ;
}
break ;
}
}
}
$arrayScriptMethodParam [] = $paramValue ;
}
//Set variables - Output
$varReturn = " " ;
foreach ( $arrayMethodOutputParam as $key => $value ) {
$paramName = $value [ " name " ];
$paramRequired = $value [ " required " ];
if ( $paramRequired && isset ( $arrayParamData [ " output " ][ $paramName ]) && trim ( $arrayParamData [ " output " ][ $paramName ]) != " " ) {
$arrayTriggerParam [ strtoupper ( $paramName )] = trim ( $arrayParamData [ " output " ][ $paramName ]);
$strParamsRequired = $strParamsRequired . (( $strParamsRequired != " " ) ? " , " : " " ) . strtoupper ( $paramName );
$varReturn = trim ( $arrayParamData [ " output " ][ $paramName ]) . " = " ;
break ;
}
}
//Set data
$library = $this -> library -> getLibraryDefinition ( $this -> libraryGetLibraryName ( $libraryName ));
$method = $library -> methods [ $methodName ];
$strScript = " /******************************************************* " ;
$strScript = $strScript . " \n " . " * " ;
$strScript = $strScript . " \n " . " * Generated by ProcessMaker Trigger Wizard " ;
$strScript = $strScript . " \n " . " * Library: " . trim ( $library -> info [ " name " ]);
$strScript = $strScript . " \n " . " * Method: " . trim ( $method -> info [ " label " ]);
$strScript = $strScript . " \n " . " * Date: " . date ( " Y-m-d H:i:s " );
$strScript = $strScript . " \n " . " * " ;
$strScript = $strScript . " \n " . " * ProcessMaker " . date ( " Y " );
$strScript = $strScript . " \n " . " * " ;
$strScript = $strScript . " \n " . " *******************************************************/ " ;
$strScript = $strScript . " \n " ;
$strScript = $strScript . " \n " . $varReturn . $methodName . " ( " . implode ( " , " , $arrayScriptMethodParam ) . " ); " ;
$arrayTriggerParam [ " TRI_WEBBOT " ] = $strScript ;
$arrayTriggerParam [ " __notValidateThisFields__ " ] = " " ;
$arrayTriggerParam [ " DynaformRequiredFields " ] = " [] " ;
$arrayTriggerParam [ " PAGED_TABLE_ID " ] = " " ;
$arrayTriggerParam [ " LIBRARY_NAME " ] = trim ( $library -> info [ " name " ]);
$arrayTriggerParam [ " LIBRARY_CLASS " ] = $this -> libraryGetLibraryName ( $libraryName );
$arrayTriggerParam [ " PMFUNTION_NAME " ] = $methodName ;
$arrayTriggerParam [ " PMFUNTION_LABEL " ] = trim ( $method -> info [ " label " ]);
$arrayTriggerParam [ " ALLFUNCTION " ] = $strParamsNamePhp ;
$arrayTriggerParam [ " ALLFUNCTION_TYPE " ] = $strParamsType ;
$arrayTriggerParam [ " FIELDS_REQUIRED " ] = $strParamsRequired ;
//Update
$result = $trigger -> update ( array ( " TRI_UID " => $triggerUid , " TRI_WEBBOT " => $strScript , " TRI_PARAM " => serialize ( array ( " hash " => md5 ( $strScript ), " params " => $arrayTriggerParam ))));
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Create Trigger for a Process
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
* @ param string $processUid Unique id of Process
* @ param array $arrayData Data
*
* return array Return data of the new Trigger created
*/
public function create ( $libraryName , $methodName , $processUid , $arrayData )
{
try {
$arrayData = array_change_key_case ( $arrayData , CASE_UPPER );
//Verify data
$process = new \BusinessModel\Process ();
$trigger = new \BusinessModel\Trigger ();
$this -> throwExceptionIfNotExistsMethodInLibrary ( $libraryName , $methodName , $this -> arrayFieldNameForException [ " libraryName " ], $this -> arrayFieldNameForException [ " methodName " ]);
$process -> throwExceptionIfNoExistsProcess ( $processUid , $this -> arrayFieldNameForException [ " processUid " ]);
$process -> throwExceptionIfDataNotMetFieldDefinition ( $arrayData , $this -> arrayFieldDefinition , $this -> arrayFieldNameForException , true );
$arrayParamData = $this -> throwExceptionIfDataNotMetTriggerParamsDefinition ( $libraryName , $methodName , $arrayData , $this -> arrayFieldNameForException [ " libraryName " ], $this -> arrayFieldNameForException [ " methodName " ], $this -> arrayFieldNameForException [ " triggerParams " ]);
$trigger -> throwExceptionIfExistsTitle ( $processUid , $arrayData [ " TRI_TITLE " ], $this -> arrayFieldNameForException [ " triggerTitle " ]);
//TRI_PARAMS
if ( isset ( $arrayData [ " TRI_PARAMS " ])) {
$arrayData [ " TRI_PARAMS " ] = array_change_key_case ( $arrayData [ " TRI_PARAMS " ], CASE_UPPER );
}
//Create
$trigger = new \Triggers ();
$arrayData [ " PRO_UID " ] = $processUid ;
$result = $trigger -> create ( $arrayData );
$triggerUid = $trigger -> getTriUid ();
$this -> setData ( $libraryName , $methodName , $triggerUid , $arrayParamData );
//Return
unset ( $arrayData [ " PRO_UID " ]);
$arrayData = array_merge ( array ( " TRI_UID " => $triggerUid ), $arrayData );
if ( ! $this -> formatFieldNameInUppercase ) {
if ( isset ( $arrayData [ " TRI_PARAMS " ])) {
$arrayData [ " TRI_PARAMS " ] = array_change_key_case ( $arrayData [ " TRI_PARAMS " ], CASE_LOWER );
}
$arrayData = array_change_key_case ( $arrayData , CASE_LOWER );
}
return $arrayData ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Update Trigger
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
* @ param string $triggerUid Unique id of Trigger
* @ param array $arrayData Data
*
* return array Return data of the Trigger updated
*/
public function update ( $libraryName , $methodName , $triggerUid , $arrayData )
{
try {
$arrayData = array_change_key_case ( $arrayData , CASE_UPPER );
//Verify data
$this -> throwExceptionIfLibraryAndMethodIsInvalidForTrigger ( $libraryName , $methodName , $triggerUid , $this -> arrayFieldNameForException [ " libraryName " ], $this -> arrayFieldNameForException [ " methodName " ], $this -> arrayFieldNameForException [ " triggerUid " ]);
//Load Trigger
$trigger = new \Triggers ();
$arrayTriggerData = $trigger -> load ( $triggerUid );
$processUid = $arrayTriggerData [ " PRO_UID " ];
//Verify data
$process = new \BusinessModel\Process ();
$trigger = new \BusinessModel\Trigger ();
$process -> throwExceptionIfDataNotMetFieldDefinition ( $arrayData , $this -> arrayFieldDefinition , $this -> arrayFieldNameForException , false );
if ( isset ( $arrayData [ " TRI_PARAMS " ])) {
$arrayParamData = $this -> throwExceptionIfDataNotMetTriggerParamsDefinition ( $libraryName , $methodName , $arrayData , $this -> arrayFieldNameForException [ " libraryName " ], $this -> arrayFieldNameForException [ " methodName " ], $this -> arrayFieldNameForException [ " triggerParams " ]);
}
if ( isset ( $arrayData [ " TRI_TITLE " ])) {
$trigger -> throwExceptionIfExistsTitle ( $processUid , $arrayData [ " TRI_TITLE " ], $this -> arrayFieldNameForException [ " triggerTitle " ], $triggerUid );
}
//TRI_PARAMS
if ( isset ( $arrayData [ " TRI_PARAMS " ])) {
$arrayData [ " TRI_PARAMS " ] = array_change_key_case ( $arrayData [ " TRI_PARAMS " ], CASE_UPPER );
}
//Update
$trigger = new \Triggers ();
$arrayData [ " TRI_UID " ] = $triggerUid ;
$result = $trigger -> update ( $arrayData );
if ( isset ( $arrayData [ " TRI_PARAMS " ])) {
$this -> setData ( $libraryName , $methodName , $triggerUid , $arrayParamData );
}
//Return
unset ( $arrayData [ " TRI_UID " ]);
if ( ! $this -> formatFieldNameInUppercase ) {
if ( isset ( $arrayData [ " TRI_PARAMS " ])) {
$arrayData [ " TRI_PARAMS " ] = array_change_key_case ( $arrayData [ " TRI_PARAMS " ], CASE_LOWER );
}
$arrayData = array_change_key_case ( $arrayData , CASE_LOWER );
}
return $arrayData ;
} catch ( \Exception $e ) {
throw $e ;
}
}
2014-02-20 17:16:00 -04:00
/**
* Get Method of the Library
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
*
* return array Return an array with the Method of the Library
*/
public function getMethod ( $libraryName , $methodName )
{
try {
$arrayMethod = array ();
//Verify data
2014-02-26 11:58:56 -04:00
$arrayMethodInputParam = $this -> methodGetInputParams ( $libraryName , $methodName );
$arrayMethodOutputParam = $this -> methodGetOutputParams ( $libraryName , $methodName );
2014-02-20 17:16:00 -04:00
//Get data
$library = $this -> library -> getLibraryDefinition ( $this -> libraryGetLibraryName ( $libraryName ));
$method = $library -> methods [ $methodName ];
2014-02-26 11:58:56 -04:00
$arrayMethod [ $this -> getFieldNameByFormatFieldName ( " FN_NAME " )] = trim ( $method -> info [ " name " ]);
2014-02-20 17:16:00 -04:00
$arrayMethod [ $this -> getFieldNameByFormatFieldName ( " FN_DESCRIPTION " )] = trim ( str_replace ( " * " , " " , implode ( " " , $method -> info [ " description " ])));
2014-02-26 11:58:56 -04:00
$arrayMethod [ $this -> getFieldNameByFormatFieldName ( " FN_LABEL " )] = trim ( $method -> info [ " label " ]);
$arrayMethod [ $this -> getFieldNameByFormatFieldName ( " FN_LINK " )] = ( isset ( $method -> info [ " link " ]) && trim ( $method -> info [ " link " ]) != " " ) ? trim ( $method -> info [ " link " ]) : " " ;
2014-02-20 17:16:00 -04:00
if ( $this -> formatFieldNameInUppercase ) {
2014-02-26 11:58:56 -04:00
$arrayMethodInputParam = \G :: array_change_key_case2 ( $arrayMethodInputParam , CASE_UPPER );
$arrayMethodOutputParam = \G :: array_change_key_case2 ( $arrayMethodOutputParam , CASE_UPPER );
2014-02-20 17:16:00 -04:00
}
2014-02-26 11:58:56 -04:00
if ( count ( $arrayMethodInputParam ) > 0 ) {
$arrayMethod [ $this -> getFieldNameByFormatFieldName ( " FN_PARAMS " )][ $this -> getFieldNameByFormatFieldName ( " INPUT " )] = $arrayMethodInputParam ;
}
if ( count ( $arrayMethodOutputParam ) > 0 ) {
$arrayMethod [ $this -> getFieldNameByFormatFieldName ( " FN_PARAMS " )][ $this -> getFieldNameByFormatFieldName ( " OUTPUT " )] = $arrayMethodOutputParam ;
}
2014-02-20 17:16:00 -04:00
//Return
return $arrayMethod ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Get Library
*
* @ param string $libraryName Library name
*
* return array Return an array with the Library
*/
public function getLibrary ( $libraryName )
{
try {
$arrayLibrary = array ();
//Verify data
$this -> throwExceptionIfNotExistsLibrary ( $libraryName , $this -> arrayFieldNameForException [ " libraryName " ]);
//Get data
$library = $this -> library -> getLibraryDefinition ( $this -> libraryGetLibraryName ( $libraryName ));
$arrayLibrary [ $this -> getFieldNameByFormatFieldName ( " LIB_NAME " )] = $libraryName ;
$arrayLibrary [ $this -> getFieldNameByFormatFieldName ( " LIB_TITLE " )] = trim ( $library -> info [ " name " ]);
$arrayLibrary [ $this -> getFieldNameByFormatFieldName ( " LIB_DESCRIPTION " )] = trim ( str_replace ( " * " , " " , implode ( " " , $library -> info [ " description " ])));
$arrayLibrary [ $this -> getFieldNameByFormatFieldName ( " LIB_ICON " )] = ( isset ( $library -> info [ " icon " ]) && trim ( $library -> info [ " icon " ]) != " " ) ? trim ( $library -> info [ " icon " ]) : " /images/browse.gif " ;
$arrayLibrary [ $this -> getFieldNameByFormatFieldName ( " LIB_CLASS_NAME " )] = trim ( $library -> info [ " className " ]);
$arrayMethod = array ();
if ( count ( $library -> methods ) > 0 ) {
ksort ( $library -> methods , SORT_STRING );
foreach ( $library -> methods as $key => $value ) {
$methodName = $key ;
$arrayMethod [] = $this -> getMethod ( $libraryName , $methodName );
}
}
$arrayLibrary [ $this -> getFieldNameByFormatFieldName ( " LIB_FUNCTIONS " )] = $arrayMethod ;
//Return
return $arrayLibrary ;
} catch ( \Exception $e ) {
throw $e ;
}
}
/**
* Get data of a Trigger
*
* @ param string $libraryName Library name
* @ param string $methodName Method name
* @ param string $triggerUid Unique id of Trigger
*
* return array Return an array with data of a Trigger
*/
public function getTrigger ( $libraryName , $methodName , $triggerUid )
{
try {
//Verify data
$this -> throwExceptionIfLibraryAndMethodIsInvalidForTrigger ( $libraryName , $methodName , $triggerUid , $this -> arrayFieldNameForException [ " libraryName " ], $this -> arrayFieldNameForException [ " methodName " ], $this -> arrayFieldNameForException [ " triggerUid " ]);
//Get data
$trigger = new \Triggers ();
$arrayTriggerData = $trigger -> load ( $triggerUid );
$arrayTriggerData [ " TRI_PARAM " ] = unserialize ( $arrayTriggerData [ " TRI_PARAM " ]);
2014-02-26 11:58:56 -04:00
$arrayMethodInputParam = $this -> methodGetInputParams ( $libraryName , $methodName );
$arrayMethodOutputParam = $this -> methodGetOutputParams ( $libraryName , $methodName );
//Params
$arrayMethodInputParamValue = array ();
2014-02-20 17:16:00 -04:00
2014-02-26 11:58:56 -04:00
foreach ( $arrayMethodInputParam as $key => $value ) {
$paramName = $value [ " name " ];
$paramDefaultValue = ( isset ( $value [ " default_value " ])) ? $value [ " default_value " ] : " " ;
2014-02-20 17:16:00 -04:00
2014-02-26 11:58:56 -04:00
$arrayMethodInputParamValue [ $paramName ] = ( isset ( $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ $paramName ])) ? $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ $paramName ] : $paramDefaultValue ;
}
$arrayMethodOutputParamValue = array ();
foreach ( $arrayMethodOutputParam as $key => $value ) {
$paramName = $value [ " name " ];
$paramRequired = $value [ " required " ];
if ( $paramRequired ) {
if ( isset ( $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ strtolower ( $paramName )])) {
$paramValue = trim ( $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ strtolower ( $paramName )]);
} else {
if ( isset ( $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ strtoupper ( $paramName )])) {
$paramValue = trim ( $arrayTriggerData [ " TRI_PARAM " ][ " params " ][ strtoupper ( $paramName )]);
} else {
$paramValue = " " ;
}
}
$arrayMethodOutputParamValue [ $paramName ] = $paramValue ;
}
}
if ( count ( $arrayMethodInputParamValue ) > 0 ) {
$arrayTriggerData [ $this -> getFieldNameByFormatFieldName ( " TRI_PARAMS " )][ $this -> getFieldNameByFormatFieldName ( " INPUT " )] = $arrayMethodInputParamValue ;
}
if ( count ( $arrayMethodOutputParamValue ) > 0 ) {
$arrayTriggerData [ $this -> getFieldNameByFormatFieldName ( " TRI_PARAMS " )][ $this -> getFieldNameByFormatFieldName ( " OUTPUT " )] = $arrayMethodOutputParamValue ;
}
2014-02-20 17:16:00 -04:00
//Return
unset ( $arrayTriggerData [ " PRO_UID " ]);
unset ( $arrayTriggerData [ " TRI_WEBBOT " ]);
unset ( $arrayTriggerData [ " TRI_PARAM " ]);
if ( ! $this -> formatFieldNameInUppercase ) {
$arrayTriggerData = array_change_key_case ( $arrayTriggerData , CASE_LOWER );
}
return $arrayTriggerData ;
} catch ( \Exception $e ) {
throw $e ;
}
}
}