diff --git a/workflow/engine/classes/class.actionsByEmail.php b/workflow/engine/classes/class.actionsByEmail.php index eb8c453cb..b55754ab7 100644 --- a/workflow/engine/classes/class.actionsByEmail.php +++ b/workflow/engine/classes/class.actionsByEmail.php @@ -137,7 +137,7 @@ class actionsByEmailClass extends PMPlugin switch ($configuration['ABE_TYPE']) { case 'LINK': // $__ABE__ .= $dynaform->render(PATH_FEATURES . 'actionsByEmail/xmlform.html', $scriptCode) . '
'; - $__ABE__ .= 'Please complete this form'; + $__ABE__ .= 'Please complete this form'; break; // coment case 'FIELD': @@ -169,7 +169,9 @@ class actionsByEmailClass extends PMPlugin } G::LoadClass('pmDynaform'); $obj = new pmDynaform($configuration['DYN_UID']); - $file = $obj->printPmDynaformAbe($configuration['DYN_CONTENT']); + $configuration['CURRENT_DYNAFORM'] = $configuration['DYN_UID']; + $file = $obj->printPmDynaformAbe($configuration); + $__ABE__ .= $file; $__ABE__ .= '' . $field->label . '
'; switch ($field->type) { case 'dropdown': diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index 4a73cd017..46a5e5a63 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -456,6 +456,39 @@ class pmDynaform exit(); } + public function printABE($filename, $record) + { + ob_clean(); + $this->record = $record; + $json = G::json_decode($this->record["DYN_CONTENT"]); + $this->jsonr($json); + $javascrip = "" . + "\n" . + "\n" . + "
\n" . + " \n" . + " \n" . + "
"; + + $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); + $file = str_replace("{javascript}", $javascrip, $file); + echo $file; + exit(); + } + public function printPmDynaform() { $json = G::json_decode($this->record["DYN_CONTENT"]); @@ -472,12 +505,29 @@ class pmDynaform exit(); } - public function printPmDynaformAbe($content) + public function printPmDynaformAbe($record) { - $this->record["DYN_CONTENT"] = $content; + ob_clean(); + $this->record = $record; $json = G::json_decode($this->record["DYN_CONTENT"]); $this->jsonr($json); - $javascrip = ""; + $javascrip = "" . + "\n" . + "\n" . + "
\n" . + "
"; $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); return $file; diff --git a/workflow/engine/methods/services/ActionsByEmail.php b/workflow/engine/methods/services/ActionsByEmail.php index 8d7598280..8a708a39c 100644 --- a/workflow/engine/methods/services/ActionsByEmail.php +++ b/workflow/engine/methods/services/ActionsByEmail.php @@ -6,7 +6,7 @@ if (PMLicensedFeatures // since all the request parameters using this script are encrypted // using the URL_KEY the probability of injecting any kind of code using // this entry point are only possible knowing the aforementioned key. - switch (true) { + switch (G::decrypt(urldecode(utf8_encode($_REQUEST['ACTION'])), URL_KEY)) { case 'processABE' : $G_PUBLISH = new Publisher(); try { diff --git a/workflow/engine/methods/services/ActionsByEmailDataForm.php b/workflow/engine/methods/services/ActionsByEmailDataForm.php new file mode 100755 index 000000000..428c23339 --- /dev/null +++ b/workflow/engine/methods/services/ActionsByEmailDataForm.php @@ -0,0 +1,56 @@ +loadCase(G::decrypt($_REQUEST['APP_UID'], URL_KEY),G::decrypt($_REQUEST['DEL_INDEX'], URL_KEY)); + + // + $criteria = new Criteria(); + $criteria->addSelectColumn(DynaformPeer::DYN_CONTENT); + $criteria->addSelectColumn(DynaformPeer::PRO_UID); + $criteria->add(DynaformPeer::DYN_UID, G::decrypt($_REQUEST['DYN_UID'], URL_KEY)); + $result = DynaformPeer::doSelectRS($criteria); + $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $result->next(); + $configuration = $result->getRow(); + $a = new pmDynaform(G::decrypt($_REQUEST['DYN_UID'], URL_KEY)); + $action = 'ActionsByEmailDataFormPost.php?APP_UID=' . $_REQUEST['APP_UID'] . '&DEL_INDEX=' . $_REQUEST['DEL_INDEX'] . '&ABER=' . $_REQUEST['ABER']; + $record['DYN_CONTENT'] = $configuration['DYN_CONTENT']; + $record['PRO_UID'] = $configuration['PRO_UID']; + $record['CURRENT_DYNAFORM'] = G::decrypt($_REQUEST['DYN_UID'], URL_KEY); + $record['APP_UID'] = $_REQUEST['APP_UID']; + $record['DEL_INDEX'] = $_REQUEST['DEL_INDEX']; + $record['ABER'] = $_REQUEST['ABER']; + if (is_null($caseFields['DEL_FINISH_DATE'])) { + $a->printABE($action,$record); + } else { + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', array('MESSAGE' => 'The form has already been filled and sent.')); + } +} catch (Exception $error) { + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', array('MESSAGE' => $error->getMessage())); +} + +G::RenderPage('publish', 'blank'); + diff --git a/workflow/engine/methods/services/ActionsByEmailDataFormPost.php b/workflow/engine/methods/services/ActionsByEmailDataFormPost.php new file mode 100755 index 000000000..cfc17492d --- /dev/null +++ b/workflow/engine/methods/services/ActionsByEmailDataFormPost.php @@ -0,0 +1,204 @@ +loadCase($_REQUEST['APP_UID'], $_REQUEST['DEL_INDEX']); + + $casesFields['APP_DATA'] = array_merge($casesFields['APP_DATA'], $_REQUEST['form']); + + //Get user info + $current_user_uid = null; + $currentUsrName = null; + + $criteria = new Criteria("workflow"); + + $criteria->addSelectColumn(AppDelegationPeer::USR_UID); + $criteria->add(AppDelegationPeer::APP_UID, $_REQUEST["APP_UID"]); + $criteria->add(AppDelegationPeer::DEL_INDEX, $_REQUEST["DEL_INDEX"]); + + $rsSQL = AppDelegationPeer::doSelectRS($criteria); + $rsSQL->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + while ($rsSQL->next()) { + $row = $rsSQL->getRow(); + + $current_user_uid = $row["USR_UID"]; + } + + if ($current_user_uid != null) { + $criteria = new Criteria("workflow"); + + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->add(UsersPeer::USR_UID, $current_user_uid); + + $rsSQL = UsersPeer::doSelectRS($criteria); + $rsSQL->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $rsSQL->next(); + + $row = $rsSQL->getRow(); + $currentUsrName = $row["USR_USERNAME"]; + + $casesFields["APP_DATA"]["USER_LOGGED"] = $current_user_uid; + $casesFields["APP_DATA"]["USR_USERNAME"] = $currentUsrName; + } + + foreach ($casesFields["APP_DATA"] as $index => $value) { + $_SESSION[$index] = $value; + } + + //Update case info + $case->updateCase($_REQUEST['APP_UID'], $casesFields); + + G::LoadClass('wsBase'); + + $wsBaseInstance = new wsBase(); + $result = $wsBaseInstance->derivateCase($casesFields['CURRENT_USER_UID'], $_REQUEST['APP_UID'], $_REQUEST ['DEL_INDEX'], true); + $code = (is_array($result) ? $result['status_code'] : $result->status_code); + + $dataResponses = array(); + $dataResponses['ABE_REQ_UID'] = $_REQUEST['ABER']; + $dataResponses['ABE_RES_CLIENT_IP'] = $_SERVER['REMOTE_ADDR']; + $dataResponses['ABE_RES_DATA'] = serialize($_REQUEST['form']); + $dataResponses['ABE_RES_STATUS'] = 'PENDING'; + $dataResponses['ABE_RES_MESSAGE'] = ''; + + try { + set_include_path(PATH_PLUGINS . 'actionsByEmail' . PATH_SEPARATOR . get_include_path()); + require_once 'classes/model/AbeResponses.php'; + + $abeAbeResponsesInstance = new AbeResponses(); + $dataResponses['ABE_RES_UID'] = $abeAbeResponsesInstance->createOrUpdate($dataResponses); + } catch (Exception $error) { + throw $error; + } + + if ($code == 0) { + //Save Cases Notes + include_once 'utils.php'; + + $dataAbeRequests = loadAbeRequest($_REQUEST['ABER']); + $dataAbeConfiguration = loadAbeConfiguration($dataAbeRequests['ABE_UID']); + + if ($dataAbeConfiguration['ABE_CASE_NOTE_IN_RESPONSE'] == 1) { + $response = new stdclass(); + $response->usrUid = $casesFields['APP_DATA']['USER_LOGGED']; + $response->appUid = $_REQUEST['APP_UID']; + $response->noteText = "Check the information that was sent for the receiver: " . $dataAbeRequests['ABE_REQ_SENT_TO']; + + postNote($response); + } + + $dataAbeRequests['ABE_REQ_ANSWERED'] = 1; + $code == 0 ? uploadAbeRequest($dataAbeRequests) : ''; + + if (isset ( $_FILES ['form'] )) { + foreach ($_FILES ['form'] ['name'] as $fieldName => $value) { + if ($_FILES ['form'] ['error'] [$fieldName] == 0) { + $appDocument = new AppDocument ( ); + + if ( isset ( $_REQUEST['INPUTS'] [$fieldName] ) && $_REQUEST['INPUTS'] [$fieldName] != '' ) { + require_once 'classes/model/AppFolder.php'; + require_once 'classes/model/InputDocument.php'; + + $inputDocument = new InputDocument(); + $id = $inputDocument->load($_REQUEST['INPUTS'] [$fieldName]); + + //Get the Custom Folder ID (create if necessary) + $oFolder=new AppFolder(); + $folderId=$oFolder->createFromPath($id['INP_DOC_DESTINATION_PATH']); + + //Tags + $fileTags=$oFolder->parseTags($id['INP_DOC_TAGS']); + + $fields = array ( + 'APP_UID' => $_REQUEST['APP_UID'], + 'DEL_INDEX' => $_REQUEST ['DEL_INDEX'], + 'USR_UID' => $casesFields['APP_DATA']['USER_LOGGED'], + 'DOC_UID' => $_REQUEST['INPUTS'] [$fieldName], + 'APP_DOC_TYPE' => 'INPUT', + 'APP_DOC_CREATE_DATE' => date ( 'Y-m-d H:i:s' ), + 'APP_DOC_COMMENT' => '', + 'APP_DOC_TITLE' => '', + 'APP_DOC_FILENAME' => $_FILES ['form'] ['name'] [$fieldName], + 'FOLDER_UID' => $folderId, + 'APP_DOC_TAGS' => $fileTags + ); + } else { + $fields = array ( + 'APP_UID' => $_REQUEST['APP_UID'], + 'DEL_INDEX' => $_REQUEST ['DEL_INDEX'], + 'USR_UID' => $casesFields['APP_DATA']['USER_LOGGED'], + 'DOC_UID' => - 1, + 'APP_DOC_TYPE' => 'ATTACHED', + 'APP_DOC_CREATE_DATE' => date ( 'Y-m-d H:i:s' ), + 'APP_DOC_COMMENT' => '', + 'APP_DOC_TITLE' => '', + 'APP_DOC_FILENAME' => $_FILES ['form'] ['name'] [$fieldName] + ); + } + + $appDocument->create($fields); + $docVersion = $appDocument->getDocVersion(); + $appDocUid = $appDocument->getAppDocUid (); + $info = pathinfo ( $appDocument->getAppDocFilename () ); + $extension = (isset ( $info ['extension'] ) ? $info ['extension'] : ''); + $pathName = PATH_DOCUMENT . $_REQUEST['APP_UID'] . PATH_SEP; + $fileName = $appDocUid . '_'.$docVersion.'.' . $extension; + + G::uploadFile ( $_FILES ['form'] ['tmp_name'] [$fieldName], $pathName, $fileName ); + } + } + } + + $assign = $result['message']; + $aMessage['MESSAGE'] = 'The information was submitted. Thank you.'; + } else { + throw new Exception('An error occurred while the application was being processed.

+ Error code: '.$result->status_code.'
+ Error message: '.$result->message.'

'); + } + + // Update + $dataResponses['ABE_RES_STATUS'] = ($code == 0 ? 'SENT' : 'ERROR'); + $dataResponses['ABE_RES_MESSAGE'] = ($code == 0 ? '-' : $result->message); + + try { + $abeAbeResponsesInstance = new AbeResponses(); + $abeAbeResponsesInstance->createOrUpdate($dataResponses); + } catch (Exception $error) { + throw $error; + } + + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', $aMessage); +} catch (Exception $error) { + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', array('MESSAGE' => $error->getMessage().'Please contact to your system administrator.')); +} + +G::RenderPage('publish', 'blank'); + diff --git a/workflow/engine/methods/services/utils.php b/workflow/engine/methods/services/utils.php new file mode 100755 index 000000000..0325349e3 --- /dev/null +++ b/workflow/engine/methods/services/utils.php @@ -0,0 +1,84 @@ +appUid))? $httpData->appUid : ''; + + $usrUid = (isset($httpData->usrUid))? $httpData->usrUid : '' ; + + require_once ( "classes/model/AppNotes.php" ); + + $appNotes = new AppNotes(); + $noteContent = addslashes($httpData->noteText); + + $result = $appNotes->postNewNote($appUid, $usrUid, $noteContent, false); + //return true; + + //die(); + //send the response to client + @ini_set('implicit_flush', 1); + ob_start(); + //echo G::json_encode($result); + @ob_flush(); + @flush(); + @ob_end_flush(); + ob_implicit_flush(1); + //return true; + //send notification in background + $noteRecipientsList = array(); + G::LoadClass('case'); + $oCase = new Cases(); + + $p = $oCase->getUsersParticipatedInCase($appUid); + + foreach ($p['array'] as $key => $userParticipated) { + $noteRecipientsList[] = $key; + } + + $noteRecipients = implode(",", $noteRecipientsList); + + $appNotes->sendNoteNotification($appUid, $usrUid, $noteContent, $noteRecipients); + +} + +function loadAbeRequest($AbeRequestsUid) +{ + require_once 'classes/model/AbeRequests.php'; + + $criteria = new Criteria(); + $criteria->add(AbeRequestsPeer::ABE_REQ_UID, $AbeRequestsUid); + $resultRequests = AbeRequestsPeer::doSelectRS($criteria); + $resultRequests->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $resultRequests->next(); + $abeRequests = $resultRequests->getRow(); + + return $abeRequests; +} + +function loadAbeConfiguration($AbeConfigurationUid) +{ + require_once 'classes/model/AbeConfiguration.php'; + + $criteria = new Criteria(); + $criteria->add(AbeConfigurationPeer::ABE_UID, $AbeConfigurationUid); + $result = AbeConfigurationPeer::doSelectRS($criteria); + $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $result->next(); + $abeConfiguration = $result->getRow(); + + return $abeConfiguration; +} + +function uploadAbeRequest($data) +{ + require_once 'classes/model/AbeRequests.php'; + + try { + $abeRequestsInstance = new AbeRequests(); + $abeRequestsInstance->createOrUpdate($data); + } catch (Exception $error) { + throw $error; + } +} +