diff --git a/workflow/engine/Features/ActionsByEmail/ActionsByEmailFeature.php b/workflow/engine/Features/ActionsByEmail/ActionsByEmailFeature.php index 948851927..dda882c3d 100644 --- a/workflow/engine/Features/ActionsByEmail/ActionsByEmailFeature.php +++ b/workflow/engine/Features/ActionsByEmail/ActionsByEmailFeature.php @@ -13,17 +13,22 @@ G::LoadClass('feature'); class ActionsByEmailFeature extends PMFeature { + protected $triggers; + protected $classInstance; + public function __construct($namespace, $filename = null) { $result = parent::__construct($namespace, $filename); $this->sFriendlyName = 'Actions By Email'; $this->sDescription = 'Actions by Email using variables as multiple choice actions delivered by email'; $this->sFeatureFolder = 'ActionsByEmail'; + $this->classInstance = array('filename' => 'class.actionsByEmail.php', 'classname' => 'actionsByEmailClass'); $this->sSetupPage = ''; $this->iVersion = self::getFeatureVersion($namespace); $this->aWorkspaces = null; $this->aDependences = array(array('sClassName' => 'enterprise'), array('sClassName' => 'pmLicenseManager')); - $this->bPrivate = parent::registerEE($this->sFeatureFolder, $this->iVersion); + $this->triggers = array(); +// $this->bPrivate = parent::registerEE($this->sFeatureFolder, $this->iVersion); return $result; } @@ -31,24 +36,28 @@ class ActionsByEmailFeature extends PMFeature public function setup() { try { - // Register the extended tab for the task properties - //$this->registerTaskExtendedProperty('actionsByEmail/configActionsByEmail', "Actions by Email"); - //$this->registerTaskExtendedProperty('actionsByEmail/configActionsByEmail', 'Actions by Email'); - //$this->registerMenu('setup', 'menusetup.php'); - - // Register the trigger for the hook PM_CREATE_NEW_DELEGATION if (!defined('PM_CREATE_NEW_DELEGATION')) { throw new Exception('It might be using a version of ProcessMaker which is not totally compatible with this plugin, the minimun required version is 2.0.37'); } $this->registerTrigger(PM_CREATE_NEW_DELEGATION, 'sendActionsByEmail'); - - // Register the external step for the tracking form - //$this->registerStep('4939290144f0745f5ddb1d1019823738', 'externalStep', 'Actions by Email - Tracking Form'); // ToDo: For the next release } catch (Exception $error) { - //G::SendMessageText($error->getMessage(), 'WARNING'); } } + public function executeTriggers($triggerId, $data) + { + $method = $this->triggers[$triggerId]; + require_once PATH_FEATURES. $this->sFeatureFolder . DS .$this->classInstance['filename']; + $actionsByEmail = new $this->classInstance['classname'](); + $actionsByEmail->$method($data); + } + + public function registerTrigger($triggerId, $method) + { + $this->triggers[$triggerId] = $method; + } + + public function install() { $this->checkTables(); diff --git a/workflow/engine/Features/ActionsByEmail/Services/Api/ActionsByEmail.php b/workflow/engine/Features/ActionsByEmail/Services/Api/ActionsByEmail.php index 198e08871..c2a5d91d5 100644 --- a/workflow/engine/Features/ActionsByEmail/Services/Api/ActionsByEmail.php +++ b/workflow/engine/Features/ActionsByEmail/Services/Api/ActionsByEmail.php @@ -16,7 +16,6 @@ require_once 'classes/model/Users.php'; * Class ActionsByEmail * * @author gustavo cruz - * @protected */ class ActionsByEmail extends Api { @@ -515,15 +514,15 @@ class ActionsByEmail extends Api } return $message; } - + /** * * @url GET /Templates/:proId */ public function getTemplates($proId) { - $templates = array(); - $path = PATH_DATA_MAILTEMPLATES . $proId . PATH_SEP; + $templates = array(); + $path = PATH_DATA_MAILTEMPLATES . $proId . PATH_SEP; \G::verifyPath($path, true); @@ -544,6 +543,7 @@ class ActionsByEmail extends Api $templates[] = array('FILE' => $object, 'NAME' => $object); } } - return $templates; + return $templates; } + } diff --git a/workflow/engine/Features/ActionsByEmail/class.actionsByEmail.php b/workflow/engine/Features/ActionsByEmail/class.actionsByEmail.php index e560aafde..06cb1a759 100644 --- a/workflow/engine/Features/ActionsByEmail/class.actionsByEmail.php +++ b/workflow/engine/Features/ActionsByEmail/class.actionsByEmail.php @@ -1,13 +1,16 @@ setFetchmode(ResultSet::FETCHMODE_ASSOC); $result->next(); - if ($configuration = $result->getRow()) { + $configuration['ABE_EMAIL_FIELD'] = str_replace('@@', '', $configuration['ABE_EMAIL_FIELD']); if ($configuration['ABE_EMAIL_FIELD'] != '' && isset($caseFields['APP_DATA'][$configuration['ABE_EMAIL_FIELD']])) { $email = trim($caseFields['APP_DATA'][$configuration['ABE_EMAIL_FIELD']]); } else { @@ -108,39 +111,47 @@ class actionsByEmailClass extends PMPlugin $_SESSION['CURRENT_DYN_UID'] = $configuration['DYN_UID']; $scriptCode = ''; - $dynaform = new Form($caseFields['PRO_UID'] . PATH_SEP . $configuration['DYN_UID'], PATH_DYNAFORM, SYS_LANG, false); - $dynaform->mode = 'view'; - $dynaform->values = $caseFields['APP_DATA']; - - foreach ($dynaform->fields as $fieldName => $field) { - if ($field->type == 'submit') { - unset($dynaform->fields[$fieldName]); - } - } +// foreach ($dynaform->fields as $fieldName => $field) { +// if ($field->type == 'submit') { +// unset($dynaform->fields[$fieldName]); +// } +// } $__ABE__ = ''; - $link = (G::is_https() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/actionsByEmail/services/'; + $link = (G::is_https() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/ActionsByEmail'; switch ($configuration['ABE_TYPE']) { case 'LINK': - $__ABE__ .= $dynaform->render(PATH_PLUGINS . 'actionsByEmail/xmlform.html', $scriptCode) . '
'; + // $__ABE__ .= $dynaform->render(PATH_FEATURES . 'actionsByEmail/xmlform.html', $scriptCode) . '
'; $__ABE__ .= 'Please complete this form'; break; // coment case 'FIELD': - if (isset($dynaform->fields[$configuration['ABE_ACTION_FIELD']])) { - $field = $dynaform->fields[$configuration['ABE_ACTION_FIELD']]; - unset($dynaform->fields[$configuration['ABE_ACTION_FIELD']]); - $__ABE__ .= $dynaform->render(PATH_PLUGINS . 'actionsByEmail/xmlform.html', $scriptCode) . '
'; - $__ABE__ .= '' . $field->label . '
'; + $variableService = new \ProcessMaker\Services\Api\Project\Variable(); + $variables = $variableService->doGetVariables($caseFields['PRO_UID']); + $field = new stdClass(); + $field->label = 'Test'; + $field->type = 'dropdown'; + $field->options = array(); + $actionField = str_replace('@@', '', $configuration['ABE_ACTION_FIELD']); + foreach ($variables as $variable) { + if ($variable['var_name'] == $actionField) { + $field->label = $variable['var_name']; + $field->type = 'dropdown'; + $values = json_decode($variable['var_accepted_values']); + foreach ($values as $value) { + $field->options[$value->keyValue] = $value->value; + } + } + } + $__ABE__ .= '' . $field->label . '
'; + switch ($field->type) { case 'dropdown': case 'radiogroup': - $field->executeSQL($field->owner); $index = 1; $__ABE__.='
'; - foreach ($field->options as $optValue => $optName) { $__ABE__ .= ''; break; } - $__ABE__ .= '
' . $optName; @@ -169,9 +180,7 @@ class actionsByEmailClass extends PMPlugin $__ABE__ .= 'Uncheck
'; - } break; } diff --git a/workflow/engine/classes/class.feature.php b/workflow/engine/classes/class.feature.php index 2eac323ee..93f23c3d7 100644 --- a/workflow/engine/classes/class.feature.php +++ b/workflow/engine/classes/class.feature.php @@ -23,25 +23,25 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ -define('G_PLUGIN_CLASS', 1); -define('PM_CREATE_CASE', 1001); -define('PM_UPLOAD_DOCUMENT', 1002); -define('PM_CASE_DOCUMENT_LIST', 1003); -define('PM_BROWSE_CASE', 1004); -define('PM_NEW_PROCESS_LIST', 1005); -define('PM_NEW_PROCESS_SAVE', 1006); -define('PM_NEW_DYNAFORM_LIST', 1007); -define('PM_NEW_DYNAFORM_SAVE', 1008); -define('PM_EXTERNAL_STEP', 1009); -define('PM_CASE_DOCUMENT_LIST_ARR', 1010); -define('PM_LOGIN', 1011); -define('PM_UPLOAD_DOCUMENT_BEFORE', 1012); -define('PM_CREATE_NEW_DELEGATION', 1013); -define('PM_SINGLE_SIGN_ON', 1014); -define('PM_GET_CASES_AJAX_LISTENER', 1015); -define('PM_BEFORE_CREATE_USER', 1016); -define('PM_AFTER_LOGIN', 1017); -define('PM_HASH_PASSWORD', 1018); +//define('G_PLUGIN_CLASS', 1); +//define('PM_CREATE_CASE', 1001); +//define('PM_UPLOAD_DOCUMENT', 1002); +//define('PM_CASE_DOCUMENT_LIST', 1003); +//define('PM_BROWSE_CASE', 1004); +//define('PM_NEW_PROCESS_LIST', 1005); +//define('PM_NEW_PROCESS_SAVE', 1006); +//define('PM_NEW_DYNAFORM_LIST', 1007); +//define('PM_NEW_DYNAFORM_SAVE', 1008); +//define('PM_EXTERNAL_STEP', 1009); +//define('PM_CASE_DOCUMENT_LIST_ARR', 1010); +//define('PM_LOGIN', 1011); +//define('PM_UPLOAD_DOCUMENT_BEFORE', 1012); +//define('PM_CREATE_NEW_DELEGATION', 1013); +//define('PM_SINGLE_SIGN_ON', 1014); +//define('PM_GET_CASES_AJAX_LISTENER', 1015); +//define('PM_BEFORE_CREATE_USER', 1016); +//define('PM_AFTER_LOGIN', 1017); +//define('PM_HASH_PASSWORD', 1018); /** * @package workflow.engine.classes diff --git a/workflow/engine/classes/class.featureRegistry.php b/workflow/engine/classes/class.featureRegistry.php index d779f45b4..f2bbb08e8 100755 --- a/workflow/engine/classes/class.featureRegistry.php +++ b/workflow/engine/classes/class.featureRegistry.php @@ -147,31 +147,24 @@ class PMFeatureRegistry public function executeTriggers ($triggerId, $data) { foreach ($this->features as $feature) { - $feature->executeTrigger($triggerId, $data); + $feature->executeTriggers($triggerId, $data); } } public function setupFeatures () { - return true; - $featureDirList = glob(PATH_FEATURES . "/*", GLOB_ONLYDIR); + $path = PATH_FEATURES; + $featureDirList = glob(PATH_FEATURES."/*", GLOB_ONLYDIR); foreach ($featureDirList as $directory) { - if ($directory == 'ViewContainers') { + if (basename($directory) === 'ViewContainers') { continue; } - $featureApiClassList = Util\Common::rglob($directory . DS . 'Services' . DS . 'Api' . "/*"); - foreach ($featureApiClassList as $classFile) { - if (pathinfo($classFile, PATHINFO_EXTENSION) === 'php') { - $relClassPath = str_replace('.php', '', str_replace($servicesDir, '', $classFile)); - $namespace = '\\ProcessMaker\\Services\\Api\\' . basename($classFile, '.php'); - $namespace = strpos($namespace, "//") === false? $namespace: str_replace("//", '', $namespace); - require_once $classFile; - $this->rest->addAPIClass($namespace); - } - } - } - foreach ($this->features as $feature) { + $name = basename($directory); + $featureClass = $name.'Feature'; + require_once $directory.DS.$featureClass.'.php'; + $feature = new $featureClass($name); $feature->setup(); + $this->features[$name] = $feature; } } diff --git a/workflow/engine/methods/services/ActionsByEmail.php b/workflow/engine/methods/services/ActionsByEmail.php new file mode 100644 index 000000000..5884ffd41 --- /dev/null +++ b/workflow/engine/methods/services/ActionsByEmail.php @@ -0,0 +1,113 @@ +loadCase($_REQUEST['APP_UID'], $_REQUEST['DEL_INDEX']); + + if (is_null($caseFieldsABE['DEL_FINISH_DATE'])) { + $dataField = array(); + $dataField[$_REQUEST['FIELD']] = $_REQUEST['VALUE']; + $caseFieldsABE ['APP_DATA'] = array_merge($caseFieldsABE ['APP_DATA'], $dataField); + + $dataResponses = array(); + $dataResponses['ABE_REQ_UID'] = $_REQUEST['ABER']; + $dataResponses['ABE_RES_CLIENT_IP'] = $_SERVER['REMOTE_ADDR']; + $dataResponses['ABE_RES_DATA'] = serialize($_REQUEST['VALUE']); + $dataResponses['ABE_RES_STATUS'] = 'PENDING'; + $dataResponses['ABE_RES_MESSAGE'] = ''; + + try { + set_include_path(PATH_FEATURES . '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; + } + + $cases->updateCase($_REQUEST['APP_UID'], $caseFieldsABE); + + G::LoadClass('wsBase'); + + $ws = new wsBase(); + + $result = $ws->derivateCase($caseFieldsABE['CURRENT_USER_UID'], $_REQUEST['APP_UID'], $_REQUEST['DEL_INDEX'], true); + $code = (is_array($result) ? $result['status_code'] : $result->status_code); + + if ($code != 0) { + 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; + } + + $message = 'The answer has been submited. Thank you'; + + //Save Cases Notes + include_once PATH_FEATURES.'ActionsByEmail'.DS.'Services'.DS.'utils.php'; + + $dataAbeRequests = loadAbeRequest($_REQUEST['ABER']); + $dataAbeConfiguration = loadAbeConfiguration($dataAbeRequests['ABE_UID']); + + if ($dataAbeConfiguration['ABE_CASE_NOTE_IN_RESPONSE'] == 1) { + $response = new stdclass(); + $response->usrUid = $caseFieldsABE['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) : ''; + } else { + $message = 'The response has already been sent.'; + } + + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', array('MESSAGE' => $message)); + } catch (Exception $error) { + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', array('MESSAGE' => $error->getMessage() . 'Please contact to your system administrator.')); + } + + G::RenderPage('publish', 'blank'); + + + break; +} \ No newline at end of file diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index 83567fb3e..7d20d423e 100755 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -197,7 +197,7 @@ define( 'PATH_XMLFORM', PATH_CORE . 'xmlform' . PATH_SEP ); define( 'PATH_CONFIG', PATH_CORE . 'config' . PATH_SEP ); define( 'PATH_PLUGINS', PATH_CORE . 'plugins' . PATH_SEP ); /*****features-begins******/ -define( 'PATH_FEATURES', PATH_CORE . 'features' . PATH_SEP ); +define( 'PATH_FEATURES', PATH_CORE . 'Features' . PATH_SEP ); /*****features-ends******/ define( 'PATH_HTMLMAIL', PATH_CORE . 'html_templates' . PATH_SEP ); define( 'PATH_TPL', PATH_CORE . 'templates' . PATH_SEP );