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" .
+ "";
+
+ $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;
+ }
+}
+