2015-04-28 16:21:45 -04:00
< ? php
2019-02-19 12:03:36 -04:00
/**
* @ see workflow / engine / methods / services / ActionsByEmailDataForm . php
* @ link https :// wiki . processmaker . com / 3.3 / Actions_by_Email #Link_to_Fill_a_Form
*/
2019-04-01 08:34:02 -04:00
use ProcessMaker\BusinessModel\Cases\InputDocument ;
2019-04-26 09:24:15 -04:00
use ProcessMaker\ChangeLog\ChangeLog ;
use ProcessMaker\Validation\ValidationUploadedFiles ;
2018-06-04 12:33:56 -04:00
if ( PMLicensedFeatures :: getSingleton ()
2017-05-30 10:57:29 -04:00
-> verifyfeature ( 'zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=' )) {
2019-04-26 09:24:15 -04:00
/**
* To do : The following evaluation must be moved after saving the data ( so as not to lose the data entered in the form ) .
* It only remains because it is an old behavior , which must be defined by " Product Owner " .
* @ see workflow / engine / methods / cases / cases_SaveData . php
*/
$validator = ValidationUploadedFiles :: getValidationUploadedFiles () -> runRulesForFileEmpty ();
if ( $validator -> fails ()) {
G :: SendMessageText ( $validator -> getMessage (), " ERROR " );
$url = explode ( " sys " . config ( " system.workspace " ), $_SERVER [ 'HTTP_REFERER' ]);
G :: header ( " location: " . " /sys " . config ( " system.workspace " ) . $url [ 1 ]);
die ();
}
2015-04-28 16:40:46 -04:00
$G_PUBLISH = new Publisher ();
try {
2018-04-04 09:21:59 -04:00
2017-04-03 14:48:51 -04:00
$backupSession = serialize ( $_SESSION );
2017-05-30 10:57:29 -04:00
if ( empty ( $_GET [ 'APP_UID' ])) {
$sw = empty ( $_REQUEST [ 'APP_UID' ]);
if ( ! $sw && ! G :: verifyUniqueID32 ( $_REQUEST [ 'APP_UID' ])) {
$_GET [ 'APP_UID' ] = $_REQUEST [ 'APP_UID' ];
}
if ( $sw ) {
throw new Exception ( 'The parameter APP_UID is empty.' );
2015-04-28 16:40:46 -04:00
}
}
2016-07-21 13:04:17 -04:00
2017-05-30 10:57:29 -04:00
if ( empty ( $_REQUEST [ 'DEL_INDEX' ])) {
2015-04-28 16:40:46 -04:00
throw new Exception ( 'The parameter DEL_INDEX is empty.' );
}
2016-07-21 13:04:17 -04:00
2017-05-30 10:57:29 -04:00
if ( empty ( $_REQUEST [ 'ABER' ])) {
2015-04-28 16:40:46 -04:00
throw new Exception ( 'The parameter ABER is empty.' );
}
2016-07-21 13:04:17 -04:00
2017-05-30 10:57:29 -04:00
$appUid = G :: decrypt ( $_GET [ 'APP_UID' ], URL_KEY );
$delIndex = G :: decrypt ( $_REQUEST [ 'DEL_INDEX' ], URL_KEY );
$aber = G :: decrypt ( $_REQUEST [ 'ABER' ], URL_KEY );
2018-06-04 12:33:56 -04:00
$dynUid = G :: decrypt ( $_REQUEST [ 'DYN_UID' ], URL_KEY );
2017-05-30 10:57:29 -04:00
$forms = isset ( $_REQUEST [ 'form' ]) ? $_REQUEST [ 'form' ] : [];
2016-07-21 13:04:17 -04:00
2018-04-04 09:21:59 -04:00
//Load data related to the case
2015-04-28 16:40:46 -04:00
$case = new Cases ();
2017-05-30 10:57:29 -04:00
$casesFields = $case -> loadCase ( $appUid , $delIndex );
2020-04-08 16:47:08 -04:00
// Check if the current thread is not finished
if ( ! is_null ( $casesFields [ 'DEL_FINISH_DATE' ])) {
throw new Exception ( G :: loadTranslation ( 'ID_ABE_FORM_ALREADY_FILLED' ));
}
// Merge the data
2017-05-30 10:57:29 -04:00
$casesFields [ 'APP_DATA' ] = array_merge ( $casesFields [ 'APP_DATA' ], $forms );
2016-07-21 13:04:17 -04:00
2018-04-04 09:21:59 -04:00
//Get current user info
$delegation = new AppDelegation ();
$currentUsrUid = $delegation -> getUserAssignedInThread ( $appUid , $delIndex );
if ( ! is_null ( $currentUsrUid )) {
$users = new Users ();
$userInfo = $users -> loadDetails ( $currentUsrUid );
$casesFields [ " APP_DATA " ][ " USER_LOGGED " ] = $currentUsrUid ;
$casesFields [ " APP_DATA " ][ " USR_USERNAME " ] = $userInfo [ 'USR_USERNAME' ];
2015-04-28 16:40:46 -04:00
}
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
foreach ( $casesFields [ " APP_DATA " ] as $index => $value ) {
$_SESSION [ $index ] = $value ;
}
2016-07-21 13:04:17 -04:00
2018-06-04 12:33:56 -04:00
$casesFields [ 'CURRENT_DYNAFORM' ] = $dynUid ;
$casesFields [ 'USER_UID' ] = $casesFields [ 'CURRENT_USER_UID' ];
ChangeLog :: getChangeLog ()
2018-06-13 13:33:23 -04:00
-> getUsrIdByUsrUid ( $casesFields [ 'USER_UID' ], true )
2018-06-04 12:33:56 -04:00
-> setSourceId ( ChangeLog :: FromABE );
2015-04-28 16:40:46 -04:00
//Update case info
2017-05-30 10:57:29 -04:00
$case -> updateCase ( $appUid , $casesFields );
2019-04-01 08:34:02 -04:00
if ( isset ( $_FILES [ 'form' ])) {
if ( isset ( $_FILES [ " form " ][ " name " ]) && count ( $_FILES [ " form " ][ " name " ]) > 0 ) {
$oInputDocument = new InputDocument ();
$oInputDocument -> uploadFileCase ( $_FILES , $case , $casesFields , $currentUsrUid , $appUid , $delIndex );
}
}
2017-08-11 14:10:44 -04:00
$wsBaseInstance = new WsBase ();
2018-04-04 09:21:59 -04:00
$result = $wsBaseInstance -> derivateCase (
2018-06-04 12:33:56 -04:00
$casesFields [ 'CURRENT_USER_UID' ], $appUid , $delIndex , true
2018-04-04 09:21:59 -04:00
);
2015-04-28 16:40:46 -04:00
$code = ( is_array ( $result ) ? $result [ 'status_code' ] : $result -> status_code );
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
$dataResponses = array ();
2017-05-30 10:57:29 -04:00
$dataResponses [ 'ABE_REQ_UID' ] = $aber ;
2015-04-28 16:40:46 -04:00
$dataResponses [ 'ABE_RES_CLIENT_IP' ] = $_SERVER [ 'REMOTE_ADDR' ];
2017-05-30 10:57:29 -04:00
$dataResponses [ 'ABE_RES_DATA' ] = serialize ( $forms );
2015-04-28 16:40:46 -04:00
$dataResponses [ 'ABE_RES_STATUS' ] = 'PENDING' ;
$dataResponses [ 'ABE_RES_MESSAGE' ] = '' ;
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
try {
require_once 'classes/model/AbeResponses.php' ;
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
$abeAbeResponsesInstance = new AbeResponses ();
$dataResponses [ 'ABE_RES_UID' ] = $abeAbeResponsesInstance -> createOrUpdate ( $dataResponses );
} catch ( Exception $error ) {
throw $error ;
}
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
if ( $code == 0 ) {
//Save Cases Notes
2017-05-30 10:57:29 -04:00
$dataAbeRequests = loadAbeRequest ( $aber );
2015-04-28 16:40:46 -04:00
$dataAbeConfiguration = loadAbeConfiguration ( $dataAbeRequests [ 'ABE_UID' ]);
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
if ( $dataAbeConfiguration [ 'ABE_CASE_NOTE_IN_RESPONSE' ] == 1 ) {
$response = new stdclass ();
$response -> usrUid = $casesFields [ 'APP_DATA' ][ 'USER_LOGGED' ];
2017-05-30 10:57:29 -04:00
$response -> appUid = $appUid ;
2018-04-04 09:21:59 -04:00
$response -> delIndex = $delIndex ;
2015-04-28 16:40:46 -04:00
$response -> noteText = " Check the information that was sent for the receiver: " . $dataAbeRequests [ 'ABE_REQ_SENT_TO' ];
postNote ( $response );
}
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
$dataAbeRequests [ 'ABE_REQ_ANSWERED' ] = 1 ;
$code == 0 ? uploadAbeRequest ( $dataAbeRequests ) : '' ;
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
$assign = $result [ 'message' ];
2017-06-09 16:40:18 -04:00
$aMessage [ 'MESSAGE' ] = '<strong>' . G :: loadTranslation ( 'ID_ABE_INFORMATION_SUBMITTED' ) . '</strong>' ;
2015-04-28 16:40:46 -04:00
} else {
throw new Exception ( ' An error occurred while the application was being processed .< br />< br />
2017-05-30 10:57:29 -04:00
Error code : ' . $result->status_code . ' < br />
Error message : ' . $result->message . ' < br />< br /> ' );
2015-04-28 16:21:45 -04:00
}
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
// Update
$dataResponses [ 'ABE_RES_STATUS' ] = ( $code == 0 ? 'SENT' : 'ERROR' );
$dataResponses [ 'ABE_RES_MESSAGE' ] = ( $code == 0 ? '-' : $result -> message );
2016-07-21 13:04:17 -04:00
2015-04-28 16:40:46 -04:00
try {
$abeAbeResponsesInstance = new AbeResponses ();
$abeAbeResponsesInstance -> createOrUpdate ( $dataResponses );
} catch ( Exception $error ) {
throw $error ;
}
2016-07-21 13:04:17 -04:00
2017-04-03 14:48:51 -04:00
$_SESSION = unserialize ( $backupSession );
2015-04-28 16:40:46 -04:00
$G_PUBLISH -> AddContent ( 'xmlform' , 'xmlform' , 'login/showInfo' , '' , $aMessage );
2015-04-28 16:21:45 -04:00
} catch ( Exception $error ) {
2017-05-30 10:57:29 -04:00
$G_PUBLISH -> AddContent ( 'xmlform' , 'xmlform' , 'login/showMessage' , '' , array ( 'MESSAGE' => $error -> getMessage () . ' Please contact to your system administrator.' ));
2015-04-28 16:21:45 -04:00
}
2017-04-03 14:48:51 -04:00
$_SESSION = unserialize ( $backupSession );
2015-04-28 16:40:46 -04:00
G :: RenderPage ( 'publish' , 'blank' );
2015-04-28 16:21:45 -04:00
}