2014-08-01 13:06:51 -04:00
|
|
|
<?php
|
|
|
|
|
|
2017-08-14 16:13:46 -04:00
|
|
|
use ProcessMaker\Core\System;
|
2017-09-12 15:19:19 -04:00
|
|
|
use ProcessMaker\BusinessModel\DynaForm\SuggestTrait;
|
2017-09-15 17:52:26 -04:00
|
|
|
use ProcessMaker\BusinessModel\Cases;
|
2017-11-29 11:51:24 -04:00
|
|
|
use ProcessMaker\BusinessModel\DynaForm\ValidatorFactory;
|
2017-08-14 16:13:46 -04:00
|
|
|
|
2014-08-01 13:06:51 -04:00
|
|
|
/**
|
|
|
|
|
* Implementing pmDynaform library in the running case.
|
2015-04-17 15:21:09 -04:00
|
|
|
*
|
2014-08-01 13:06:51 -04:00
|
|
|
* @package engine.classes
|
2017-08-15 12:42:55 -04:00
|
|
|
*/
|
|
|
|
|
class PmDynaform
|
2014-08-01 13:06:51 -04:00
|
|
|
{
|
2017-09-12 15:19:19 -04:00
|
|
|
use SuggestTrait;
|
2014-08-01 13:06:51 -04:00
|
|
|
|
|
|
|
|
public static $instance = null;
|
2015-03-12 09:59:19 -04:00
|
|
|
public $fields = null;
|
2014-08-01 13:06:51 -04:00
|
|
|
public $record = null;
|
2015-10-09 15:56:49 -04:00
|
|
|
public $records = null;
|
2015-02-27 18:10:59 -04:00
|
|
|
public $credentials = null;
|
2015-08-25 17:01:15 -04:00
|
|
|
public $lang = SYS_LANG;
|
2015-03-24 16:15:19 -04:00
|
|
|
public $langs = null;
|
2016-03-01 11:46:32 -04:00
|
|
|
public $displayMode = null;
|
2015-08-18 15:42:31 -04:00
|
|
|
public $onPropertyRead = "onPropertyReadFormInstance";
|
2016-06-02 14:29:19 -04:00
|
|
|
public $isRTL = false;
|
|
|
|
|
public $pathRTLCss = '';
|
|
|
|
|
public $serverConf = null;
|
2016-12-09 15:53:29 -04:00
|
|
|
private $cache = array();
|
|
|
|
|
private $sysSys = null;
|
|
|
|
|
private $context = array();
|
|
|
|
|
private $dataSources = null;
|
|
|
|
|
private $databaseProviders = null;
|
2017-01-26 14:29:33 -04:00
|
|
|
private $propertiesToExclude = array();
|
2017-02-20 15:44:55 -04:00
|
|
|
public static $prefixs = array("@@", "@#", "@%", "@?", "@$", "@=");
|
2014-08-01 13:06:51 -04:00
|
|
|
|
2015-03-31 16:33:28 -04:00
|
|
|
public function __construct($fields = array())
|
2015-02-27 18:10:59 -04:00
|
|
|
{
|
2017-10-10 12:33:25 -04:00
|
|
|
$this->sysSys = (!empty(config("system.workspace"))) ? config("system.workspace") : "Undefined";
|
2016-12-09 15:53:29 -04:00
|
|
|
$this->context = \Bootstrap::getDefaultContextLog();
|
|
|
|
|
$this->dataSources = array("database", "dataVariable");
|
2016-06-02 14:29:19 -04:00
|
|
|
$this->pathRTLCss = '/lib/pmdynaform/build/css/PMDynaform-rtl.css';
|
2017-12-04 13:25:35 +00:00
|
|
|
$this->serverConf = ServerConf::getSingleton();
|
2016-06-02 14:29:19 -04:00
|
|
|
$this->isRTL = ($this->serverConf->isRtl(SYS_LANG)) ? 'true' : 'false';
|
2015-03-12 09:59:19 -04:00
|
|
|
$this->fields = $fields;
|
2017-01-26 14:29:33 -04:00
|
|
|
$this->propertiesToExclude = array('dataVariable');
|
2015-03-23 22:22:10 -04:00
|
|
|
$this->getDynaform();
|
2015-10-09 15:56:49 -04:00
|
|
|
$this->getDynaforms();
|
2015-12-04 17:31:37 -04:00
|
|
|
$this->synchronizeSubDynaform();
|
2015-03-23 22:22:10 -04:00
|
|
|
$this->getCredentials();
|
2016-04-26 15:11:02 -04:00
|
|
|
if (is_array($this->fields) && !isset($this->fields["APP_UID"])) {
|
2015-03-12 09:59:19 -04:00
|
|
|
$this->fields["APP_UID"] = null;
|
2015-10-05 10:04:20 -04:00
|
|
|
}
|
2016-03-08 17:40:43 -04:00
|
|
|
|
|
|
|
|
//todo: compatibility checkbox
|
2016-03-09 17:43:06 -04:00
|
|
|
if ($this->record !== null && isset($this->record["DYN_CONTENT"]) && $this->record["DYN_CONTENT"] !== "") {
|
|
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$fields = $this->jsonsf2($json, "checkbox", "type");
|
|
|
|
|
foreach ($fields as $field) {
|
|
|
|
|
if (isset($field->dataType) && $field->dataType === "string") {
|
|
|
|
|
$field->type = "checkgroup";
|
|
|
|
|
$field->dataType = "array";
|
|
|
|
|
}
|
|
|
|
|
$this->jsonReplace($json, $field->id, "id", $field);
|
2016-03-08 17:40:43 -04:00
|
|
|
}
|
2016-03-09 17:43:06 -04:00
|
|
|
$this->record["DYN_CONTENT"] = G::json_encode($json);
|
2019-01-25 17:10:59 -04:00
|
|
|
|
|
|
|
|
//to do, this line should be removed. Related to PMC-196.
|
|
|
|
|
$this->record['DYN_CONTENT'] = G::fixStringCorrupted($this->record['DYN_CONTENT']);
|
2016-03-08 17:40:43 -04:00
|
|
|
}
|
2014-08-01 13:06:51 -04:00
|
|
|
}
|
|
|
|
|
|
2015-04-08 12:33:23 -04:00
|
|
|
public function getDynaformTitle($idDynaform)
|
|
|
|
|
{
|
2015-05-08 16:45:32 -04:00
|
|
|
$d = new Dynaform();
|
|
|
|
|
$d->setDynUid($idDynaform);
|
|
|
|
|
$titleDynaform = $d->getDynTitle();
|
|
|
|
|
return $titleDynaform;
|
2015-04-08 12:33:23 -04:00
|
|
|
}
|
|
|
|
|
|
2014-08-01 13:06:51 -04:00
|
|
|
public function getDynaform()
|
|
|
|
|
{
|
2015-03-26 15:03:24 -04:00
|
|
|
if (!isset($this->fields["CURRENT_DYNAFORM"])) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2014-08-01 13:06:51 -04:00
|
|
|
if ($this->record != null) {
|
|
|
|
|
return $this->record;
|
|
|
|
|
}
|
|
|
|
|
$a = new Criteria("workflow");
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_VERSION);
|
2015-03-24 16:15:19 -04:00
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_LABEL);
|
2014-08-01 13:06:51 -04:00
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_CONTENT);
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::PRO_UID);
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_UID);
|
2015-03-12 09:59:19 -04:00
|
|
|
$a->add(DynaformPeer::DYN_UID, $this->fields["CURRENT_DYNAFORM"], Criteria::EQUAL);
|
2015-07-27 15:13:45 -04:00
|
|
|
$ds = DynaformPeer::doSelectRS($a);
|
2014-08-01 13:06:51 -04:00
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$ds->next();
|
2015-02-27 18:10:59 -04:00
|
|
|
$row = $ds->getRow();
|
2014-08-01 13:06:51 -04:00
|
|
|
$this->record = isset($row) ? $row : null;
|
2015-03-24 16:15:19 -04:00
|
|
|
$this->langs = ($this->record["DYN_LABEL"] !== "" && $this->record["DYN_LABEL"] !== null) ? G::json_decode($this->record["DYN_LABEL"]) : null;
|
2014-08-01 13:06:51 -04:00
|
|
|
return $this->record;
|
|
|
|
|
}
|
2015-02-27 18:10:59 -04:00
|
|
|
|
2015-10-09 15:56:49 -04:00
|
|
|
public function getDynaforms()
|
|
|
|
|
{
|
|
|
|
|
if ($this->record === null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if ($this->records != null) {
|
|
|
|
|
return $this->records;
|
|
|
|
|
}
|
|
|
|
|
$a = new Criteria("workflow");
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_UPDATE_DATE);
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_VERSION);
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_LABEL);
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_CONTENT);
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::PRO_UID);
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_UID);
|
|
|
|
|
$a->add(DynaformPeer::PRO_UID, $this->record["PRO_UID"], Criteria::EQUAL);
|
2015-10-12 12:52:02 -04:00
|
|
|
$a->add(DynaformPeer::DYN_UID, $this->record["DYN_UID"], Criteria::NOT_EQUAL);
|
2015-10-09 15:56:49 -04:00
|
|
|
$ds = DynaformPeer::doSelectRS($a);
|
|
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$this->records = array();
|
|
|
|
|
while ($ds->next()) {
|
|
|
|
|
array_push($this->records, $ds->getRow());
|
|
|
|
|
}
|
|
|
|
|
return $this->records;
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-27 18:10:59 -04:00
|
|
|
public function getCredentials()
|
2015-02-03 14:40:33 -04:00
|
|
|
{
|
2015-07-21 10:17:50 -04:00
|
|
|
$flagTrackerUser = false;
|
|
|
|
|
|
2015-03-26 15:03:24 -04:00
|
|
|
if (!isset($_SESSION['USER_LOGGED'])) {
|
2016-03-18 12:15:38 -04:00
|
|
|
if (!preg_match("/^.*\/" . SYS_SKIN . "\/tracker\/.*$/", $_SERVER["REQUEST_URI"]) &&
|
2016-04-19 11:49:09 -04:00
|
|
|
!preg_match("/^.*\/" . SYS_SKIN . "\/[a-z0-9A-Z]+\/[a-z0-9A-Z]+\.php$/", $_SERVER["REQUEST_URI"]) &&
|
|
|
|
|
!preg_match("/^.*\/" . SYS_SKIN . "\/services\/ActionsByEmailDataForm.*$/", $_SERVER["REQUEST_URI"])
|
2016-03-18 12:15:38 -04:00
|
|
|
) {
|
2015-07-21 10:17:50 -04:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$_SESSION["USER_LOGGED"] = "00000000000000000000000000000001";
|
|
|
|
|
$flagTrackerUser = true;
|
2015-03-26 15:03:24 -04:00
|
|
|
}
|
2015-02-27 18:10:59 -04:00
|
|
|
if ($this->credentials != null) {
|
|
|
|
|
return $this->credentials;
|
2015-02-03 14:40:33 -04:00
|
|
|
}
|
2016-09-19 10:14:46 -04:00
|
|
|
if (isset($_SESSION["PMDYNAFORM_CREDENTIALS"]) && isset($_SESSION["PMDYNAFORM_CREDENTIALS_EXPIRES"])) {
|
|
|
|
|
$time1 = strtotime(date('Y-m-d H:i:s'));
|
|
|
|
|
$time2 = strtotime($_SESSION["PMDYNAFORM_CREDENTIALS_EXPIRES"]);
|
|
|
|
|
if ($time1 < $time2) {
|
|
|
|
|
$this->credentials = $_SESSION["PMDYNAFORM_CREDENTIALS"];
|
|
|
|
|
return $this->credentials;
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-02-27 18:10:59 -04:00
|
|
|
$a = $this->clientToken();
|
|
|
|
|
$this->credentials = array(
|
|
|
|
|
"accessToken" => $a["access_token"],
|
|
|
|
|
"expiresIn" => $a["expires_in"],
|
|
|
|
|
"tokenType" => $a["token_type"],
|
|
|
|
|
"scope" => $a["scope"],
|
|
|
|
|
"refreshToken" => $a["refresh_token"],
|
|
|
|
|
"clientId" => $a["client_id"],
|
|
|
|
|
"clientSecret" => $a["client_secret"]
|
|
|
|
|
);
|
2015-07-21 10:17:50 -04:00
|
|
|
|
|
|
|
|
if ($flagTrackerUser) {
|
|
|
|
|
unset($_SESSION["USER_LOGGED"]);
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-19 10:14:46 -04:00
|
|
|
$expires = date("Y-m-d H:i:s") . " +" . $this->credentials["expiresIn"] . " seconds";
|
|
|
|
|
$_SESSION["PMDYNAFORM_CREDENTIALS"] = $this->credentials;
|
|
|
|
|
$_SESSION["PMDYNAFORM_CREDENTIALS_EXPIRES"] = date("Y-m-d H:i:s", strtotime($expires));
|
2015-02-27 18:10:59 -04:00
|
|
|
return $this->credentials;
|
2015-02-03 14:40:33 -04:00
|
|
|
}
|
|
|
|
|
|
2016-12-09 15:53:29 -04:00
|
|
|
public function jsonr(&$json, $clearCache = true)
|
2015-02-03 14:40:33 -04:00
|
|
|
{
|
2016-12-09 15:53:29 -04:00
|
|
|
if ($clearCache === true) {
|
|
|
|
|
$this->cache = [];
|
|
|
|
|
}
|
2016-04-27 10:01:01 -04:00
|
|
|
if (empty($json)) {
|
2016-04-26 15:11:02 -04:00
|
|
|
return;
|
|
|
|
|
}
|
2017-02-17 16:51:27 -04:00
|
|
|
$dataGridEnvironment = [];
|
2015-04-17 13:51:47 -04:00
|
|
|
foreach ($json as $key => &$value) {
|
2015-02-27 18:10:59 -04:00
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
2016-12-09 15:53:29 -04:00
|
|
|
$this->jsonr($value, false);
|
2015-02-27 18:10:59 -04:00
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
2015-08-03 16:37:25 -04:00
|
|
|
//read event
|
|
|
|
|
$fn = $this->onPropertyRead;
|
2016-02-19 15:00:34 -04:00
|
|
|
if (is_callable($fn) || function_exists($fn)) {
|
2015-08-03 16:37:25 -04:00
|
|
|
$fn($json, $key, $value);
|
|
|
|
|
}
|
2015-04-17 13:51:47 -04:00
|
|
|
//set properties from trigger
|
2017-03-06 11:00:37 -04:00
|
|
|
if (is_string($value) && in_array(substr($value, 0, 2), self::$prefixs)) {
|
2015-02-27 18:10:59 -04:00
|
|
|
$triggerValue = substr($value, 2);
|
2015-03-23 22:22:10 -04:00
|
|
|
if (isset($this->fields["APP_DATA"][$triggerValue])) {
|
2017-01-26 14:29:33 -04:00
|
|
|
if (!in_array($key, $this->propertiesToExclude)) {
|
2016-12-19 11:10:51 -04:00
|
|
|
$json->{$key} = $this->fields["APP_DATA"][$triggerValue];
|
|
|
|
|
}
|
2016-11-18 15:07:35 -05:00
|
|
|
} else {
|
2017-01-26 14:29:33 -04:00
|
|
|
if (!in_array($key, $this->propertiesToExclude)) {
|
2017-01-26 11:58:46 -04:00
|
|
|
$json->{$key} = "";
|
|
|
|
|
}
|
2015-04-17 13:51:47 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//set properties from 'formInstance' variable
|
|
|
|
|
if (isset($this->fields["APP_DATA"]["formInstance"])) {
|
|
|
|
|
$formInstance = $this->fields["APP_DATA"]["formInstance"];
|
|
|
|
|
if (!is_array($formInstance)) {
|
|
|
|
|
$formInstance = array($formInstance);
|
|
|
|
|
}
|
|
|
|
|
$nfi = count($formInstance);
|
|
|
|
|
for ($ifi = 0; $ifi < $nfi; $ifi++) {
|
|
|
|
|
$fi = $formInstance[$ifi];
|
|
|
|
|
if (is_object($fi) && isset($fi->id) && $key === "id" && $json->{$key} === $fi->id) {
|
|
|
|
|
foreach ($fi as $keyfi => $valuefi) {
|
|
|
|
|
if (isset($json->{$keyfi})) {
|
|
|
|
|
$json->{$keyfi} = $valuefi;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-02-03 14:40:33 -04:00
|
|
|
}
|
2015-02-27 18:10:59 -04:00
|
|
|
}
|
2016-12-09 15:53:29 -04:00
|
|
|
//options & query options
|
2015-10-26 18:18:43 -04:00
|
|
|
if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "hidden" || $value === "dropdown" || $value === "checkgroup" || $value === "radio" || $value === "suggest")) {
|
2016-12-09 15:53:29 -04:00
|
|
|
if (!isset($json->dbConnection)) {
|
2015-02-27 18:10:59 -04:00
|
|
|
$json->dbConnection = "none";
|
2016-12-09 15:53:29 -04:00
|
|
|
}
|
|
|
|
|
if (!isset($json->sql)) {
|
2015-02-27 18:10:59 -04:00
|
|
|
$json->sql = "";
|
2016-12-09 15:53:29 -04:00
|
|
|
}
|
|
|
|
|
if (!isset($json->datasource)) {
|
|
|
|
|
$json->datasource = "database";
|
|
|
|
|
}
|
|
|
|
|
if (!in_array($json->datasource, $this->dataSources)) {
|
|
|
|
|
$json->datasource = "database";
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->optionsSql = array();
|
2016-03-02 09:27:08 -04:00
|
|
|
|
2016-12-09 15:53:29 -04:00
|
|
|
if ($json->datasource === "database" && $json->dbConnection !== "" && $json->dbConnection !== "none" && $json->sql !== "") {
|
|
|
|
|
if (isset($json->queryField)) {
|
|
|
|
|
$dtFields = $json->queryInputData;
|
|
|
|
|
} else {
|
|
|
|
|
$dtFields = $this->getValuesDependentFields($json);
|
2018-05-16 14:35:52 -04:00
|
|
|
foreach ($dtFields as $keyF => $valueF) {
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$keyF])) {
|
|
|
|
|
$dtFields[$keyF] = $this->fields["APP_DATA"][$keyF];
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-09 15:53:29 -04:00
|
|
|
}
|
|
|
|
|
$sql = G::replaceDataField($json->sql, $dtFields);
|
|
|
|
|
if ($value === "suggest") {
|
2017-09-12 15:19:19 -04:00
|
|
|
$sql = $this->prepareSuggestSql($sql, $json);
|
2016-12-09 15:53:29 -04:00
|
|
|
}
|
|
|
|
|
$dt = $this->getCacheQueryData($json->dbConnection, $sql, $json->type);
|
|
|
|
|
foreach ($dt as $row) {
|
|
|
|
|
$option = new stdClass();
|
2017-03-13 13:50:32 -04:00
|
|
|
$option->value = isset($row[0]) ? $row[0] : "";
|
2016-12-09 15:53:29 -04:00
|
|
|
$option->label = isset($row[1]) ? $row[1] : "";
|
|
|
|
|
$json->optionsSql[] = $option;
|
|
|
|
|
}
|
|
|
|
|
if (isset($json->queryField)) {
|
|
|
|
|
$json->queryOutputData = $json->optionsSql;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($json->datasource === "dataVariable") {
|
|
|
|
|
$dataVariable = preg_match('/^\s*@.(.+)\s*$/', $json->dataVariable, $arrayMatch) ? $arrayMatch[1] : $json->dataVariable;
|
|
|
|
|
if (isset($this->fields['APP_DATA'][$dataVariable]) && is_array($this->fields['APP_DATA'][$dataVariable])) {
|
|
|
|
|
foreach ($this->fields['APP_DATA'][$dataVariable] as $row) {
|
|
|
|
|
$option = new stdClass();
|
2017-03-13 13:50:32 -04:00
|
|
|
$option->value = isset($row[0]) ? $row[0] : "";
|
2016-12-09 15:53:29 -04:00
|
|
|
$option->label = isset($row[1]) ? $row[1] : "";
|
|
|
|
|
$json->optionsSql[] = $option;
|
2016-03-02 09:27:08 -04:00
|
|
|
}
|
2016-12-09 15:53:29 -04:00
|
|
|
}
|
2016-12-19 11:10:51 -04:00
|
|
|
if ($value === "suggest" && isset($json->queryField) && $json->queryField == true) {
|
|
|
|
|
$json->queryOutputData = array();
|
|
|
|
|
foreach ($json->optionsSql as $option) {
|
|
|
|
|
if ($json->queryFilter !== '') {
|
2017-03-13 13:50:32 -04:00
|
|
|
if (stripos($option->label, $json->queryFilter) !== false) {
|
2016-12-19 11:10:51 -04:00
|
|
|
$json->queryOutputData[] = $option;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$json->queryOutputData[] = $option;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-03-05 18:14:04 -04:00
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
|
|
|
|
//data
|
|
|
|
|
if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "hidden")) {
|
|
|
|
|
$json->data = new stdClass();
|
|
|
|
|
$json->data->value = "";
|
|
|
|
|
$json->data->label = "";
|
|
|
|
|
if (isset($json->optionsSql[0])) {
|
|
|
|
|
$json->data->value = $json->optionsSql[0]->value;
|
|
|
|
|
$json->data->label = $json->optionsSql[0]->value;
|
|
|
|
|
}
|
|
|
|
|
if ($json->defaultValue !== "") {
|
|
|
|
|
$json->data->value = $json->defaultValue;
|
|
|
|
|
$json->data->label = $json->defaultValue;
|
|
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
|
|
|
|
$json->data->value = $this->fields["APP_DATA"][$json->name];
|
|
|
|
|
$json->data->label = $this->fields["APP_DATA"][$json->name];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($key === "type" && ($value === "dropdown")) {
|
|
|
|
|
$json->data = new stdClass();
|
|
|
|
|
$json->data->value = "";
|
|
|
|
|
$json->data->label = "";
|
|
|
|
|
if ($json->defaultValue !== "") {
|
|
|
|
|
foreach ($json->optionsSql as $os) {
|
|
|
|
|
if ($os->value === $json->defaultValue) {
|
|
|
|
|
$json->data->value = $os->value;
|
|
|
|
|
$json->data->label = $os->label;
|
2015-04-17 16:52:19 -04:00
|
|
|
}
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
foreach ($json->options as $os) {
|
|
|
|
|
if ($os->value === $json->defaultValue) {
|
|
|
|
|
$json->data->value = $os->value;
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
|
|
|
|
$json->data->value = $this->fields["APP_DATA"][$json->name];
|
2015-10-26 18:18:43 -04:00
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name . "_label"])) {
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data->label = $this->fields["APP_DATA"][$json->name . "_label"];
|
2015-02-03 14:40:33 -04:00
|
|
|
}
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
if ($key === "type" && ($value === "suggest")) {
|
|
|
|
|
$json->data = new stdClass();
|
|
|
|
|
$json->data->value = "";
|
|
|
|
|
$json->data->label = "";
|
|
|
|
|
if ($json->defaultValue !== "") {
|
|
|
|
|
$json->data->value = $json->defaultValue;
|
|
|
|
|
$json->data->label = $json->defaultValue;
|
|
|
|
|
foreach ($json->optionsSql as $os) {
|
|
|
|
|
if ($os->value === $json->defaultValue) {
|
|
|
|
|
$json->data->value = $os->value;
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($json->options as $os) {
|
|
|
|
|
if ($os->value === $json->defaultValue) {
|
|
|
|
|
$json->data->value = $os->value;
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-04-20 12:31:42 -04:00
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
|
|
|
|
$json->data->value = $this->fields["APP_DATA"][$json->name];
|
|
|
|
|
}
|
2015-10-26 18:18:43 -04:00
|
|
|
if (isset($this->fields["APP_DATA"][$json->name . "_label"])) {
|
|
|
|
|
$json->data->label = $this->fields["APP_DATA"][$json->name . "_label"];
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
|
|
|
|
if ($key === "type" && ($value === "radio")) {
|
|
|
|
|
$json->data = new stdClass();
|
|
|
|
|
$json->data->value = "";
|
|
|
|
|
$json->data->label = "";
|
|
|
|
|
if ($json->defaultValue !== "") {
|
|
|
|
|
foreach ($json->optionsSql as $os) {
|
|
|
|
|
if ($os->value === $json->defaultValue) {
|
|
|
|
|
$json->data->value = $os->value;
|
|
|
|
|
$json->data->label = $os->label;
|
2015-07-27 15:13:45 -04:00
|
|
|
}
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
foreach ($json->options as $os) {
|
|
|
|
|
if ($os->value === $json->defaultValue) {
|
|
|
|
|
$json->data->value = $os->value;
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
|
|
|
|
$json->data->value = $this->fields["APP_DATA"][$json->name];
|
2015-10-26 18:18:43 -04:00
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name . "_label"])) {
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data->label = $this->fields["APP_DATA"][$json->name . "_label"];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($key === "type" && ($value === "checkbox")) {
|
|
|
|
|
$json->data = new stdClass();
|
2015-12-08 11:24:21 -04:00
|
|
|
$json->data->value = "0";
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data->label = "";
|
2015-12-08 11:24:21 -04:00
|
|
|
foreach ($json->options as $os) {
|
|
|
|
|
if ($os->value === false || $os->value === 0 || $os->value === "0") {
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($json->defaultValue !== "") {
|
|
|
|
|
$json->data->value = $json->defaultValue;
|
|
|
|
|
foreach ($json->options as $os) {
|
|
|
|
|
if (($json->data->value === "true" || $json->data->value === "1") &&
|
|
|
|
|
($os->value === true || $os->value === 1 || $os->value === "1")) {
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
if (($json->data->value === "false" || $json->data->value === "0") &&
|
|
|
|
|
($os->value === false || $os->value === 0 || $os->value === "0")) {
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
|
|
|
|
$json->data->value = $this->fields["APP_DATA"][$json->name];
|
2015-12-08 11:24:21 -04:00
|
|
|
if (is_array($json->data->value) && isset($json->data->value[0])) {
|
|
|
|
|
$json->data->value = $json->data->value[0];
|
|
|
|
|
}
|
2015-12-04 17:31:37 -04:00
|
|
|
foreach ($json->options as $os) {
|
|
|
|
|
if (($json->data->value === true || $json->data->value === 1 || $json->data->value === "1") &&
|
|
|
|
|
($os->value === true || $os->value === 1 || $os->value === "1")) {
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
if (($json->data->value === false || $json->data->value === 0 || $json->data->value === "0") &&
|
|
|
|
|
($os->value === false || $os->value === 0 || $os->value === "0")) {
|
|
|
|
|
$json->data->label = $os->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($key === "type" && ($value === "checkgroup")) {
|
|
|
|
|
$json->data = new stdClass();
|
|
|
|
|
$json->data->value = "";
|
|
|
|
|
$json->data->label = "[]";
|
|
|
|
|
if ($json->defaultValue !== "") {
|
|
|
|
|
$dataValue = array();
|
|
|
|
|
$dataLabel = array();
|
|
|
|
|
$dv = explode("|", $json->defaultValue);
|
|
|
|
|
foreach ($dv as $idv) {
|
|
|
|
|
foreach ($json->optionsSql as $os) {
|
|
|
|
|
if ($os->value === trim($idv)) {
|
|
|
|
|
array_push($dataValue, $os->value);
|
|
|
|
|
array_push($dataLabel, $os->label);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($json->options as $os) {
|
|
|
|
|
if ($os->value === trim($idv)) {
|
|
|
|
|
array_push($dataValue, $os->value);
|
|
|
|
|
array_push($dataLabel, $os->label);
|
|
|
|
|
}
|
2015-07-27 15:13:45 -04:00
|
|
|
}
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data->value = $dataValue;
|
|
|
|
|
$json->data->label = G::json_encode($dataLabel);
|
|
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
|
|
|
|
$json->data->value = $this->fields["APP_DATA"][$json->name];
|
2015-10-26 18:18:43 -04:00
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name . "_label"])) {
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data->label = $this->fields["APP_DATA"][$json->name . "_label"];
|
2015-07-27 15:13:45 -04:00
|
|
|
}
|
2015-03-05 18:14:04 -04:00
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
if ($key === "type" && ($value === "datetime")) {
|
|
|
|
|
$json->data = new stdClass();
|
|
|
|
|
$json->data->value = "";
|
|
|
|
|
$json->data->label = "";
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
|
|
|
|
$json->data->value = $this->fields["APP_DATA"][$json->name];
|
2015-10-26 18:18:43 -04:00
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name . "_label"])) {
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data->label = $this->fields["APP_DATA"][$json->name . "_label"];
|
2015-08-19 18:15:12 -04:00
|
|
|
}
|
2015-03-03 15:17:43 -04:00
|
|
|
}
|
2015-03-23 22:22:10 -04:00
|
|
|
if ($key === "type" && ($value === "file") && isset($this->fields["APP_DATA"]["APPLICATION"])) {
|
2016-06-29 17:47:05 -04:00
|
|
|
$oCriteriaAppDocument = new Criteria("workflow");
|
|
|
|
|
$oCriteriaAppDocument->addSelectColumn(AppDocumentPeer::APP_DOC_UID);
|
|
|
|
|
$oCriteriaAppDocument->addSelectColumn(AppDocumentPeer::DOC_VERSION);
|
|
|
|
|
$oCriteriaAppDocument->add(AppDocumentPeer::APP_UID, $this->fields["APP_DATA"]["APPLICATION"]);
|
|
|
|
|
$oCriteriaAppDocument->add(AppDocumentPeer::APP_DOC_FIELDNAME, $json->name);
|
2016-10-26 10:34:28 -04:00
|
|
|
$oCriteriaAppDocument->add(AppDocumentPeer::APP_DOC_STATUS, 'ACTIVE');
|
2016-06-29 17:47:05 -04:00
|
|
|
$oCriteriaAppDocument->addDescendingOrderByColumn(AppDocumentPeer::APP_DOC_CREATE_DATE);
|
|
|
|
|
$oCriteriaAppDocument->setLimit(1);
|
|
|
|
|
$rs = AppDocumentPeer::doSelectRS($oCriteriaAppDocument);
|
2015-03-05 18:14:04 -04:00
|
|
|
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
2016-06-29 17:47:05 -04:00
|
|
|
$rs->next();
|
|
|
|
|
|
2015-03-05 18:14:04 -04:00
|
|
|
$links = array();
|
2015-12-07 14:54:14 -04:00
|
|
|
$labelsFromDb = array();
|
2016-04-27 10:01:01 -04:00
|
|
|
$appDocUids = array();
|
2016-06-29 17:47:05 -04:00
|
|
|
$oAppDocument = new AppDocument();
|
|
|
|
|
|
|
|
|
|
if ($row = $rs->getRow()) {
|
|
|
|
|
$oAppDocument->load($row["APP_DOC_UID"], $row["DOC_VERSION"]);
|
2016-04-27 10:01:01 -04:00
|
|
|
$links[] = "../cases/cases_ShowDocument?a=" . $row["APP_DOC_UID"] . "&v=" . $row["DOC_VERSION"];
|
2016-06-29 17:47:05 -04:00
|
|
|
$labelsFromDb[] = $oAppDocument->getAppDocFilename();
|
2016-04-27 10:01:01 -04:00
|
|
|
$appDocUids[] = $row["APP_DOC_UID"];
|
2015-03-05 18:14:04 -04:00
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data = new stdClass();
|
2015-12-08 11:24:21 -04:00
|
|
|
$json->data->value = $links;
|
2016-04-27 10:01:01 -04:00
|
|
|
$json->data->app_doc_uid = $appDocUids;
|
2015-12-07 14:54:14 -04:00
|
|
|
|
2015-12-08 11:24:21 -04:00
|
|
|
if (sizeof($labelsFromDb)) {
|
2015-12-07 14:54:14 -04:00
|
|
|
$json->data->label = G::json_encode($labelsFromDb);
|
|
|
|
|
} else {
|
|
|
|
|
$json->data->label = isset($this->fields["APP_DATA"][$json->name . "_label"]) ? $this->fields["APP_DATA"][$json->name . "_label"] : (isset($this->fields["APP_DATA"][$json->name]) ? $this->fields["APP_DATA"][$json->name] : "[]");
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
2015-10-26 18:18:43 -04:00
|
|
|
if ($key === "type" && ($value === "file") && isset($json->variable)) {
|
2015-10-05 12:12:58 -04:00
|
|
|
//todo
|
|
|
|
|
$oCriteria = new Criteria("workflow");
|
|
|
|
|
$oCriteria->addSelectColumn(ProcessVariablesPeer::INP_DOC_UID);
|
2016-04-19 18:15:06 -04:00
|
|
|
$oCriteria->add(ProcessVariablesPeer::VAR_UID, $json->var_uid);
|
2015-10-05 12:12:58 -04:00
|
|
|
$rs = ProcessVariablesPeer::doSelectRS($oCriteria);
|
|
|
|
|
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$rs->next();
|
|
|
|
|
$row = $rs->getRow();
|
|
|
|
|
if (isset($row["INP_DOC_UID"])) {
|
|
|
|
|
$json->inputDocuments = array($row["INP_DOC_UID"]);
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-03-10 16:36:55 -04:00
|
|
|
if ($key === "type" && ($value === "multipleFile")) {
|
|
|
|
|
$json->data = new stdClass();
|
|
|
|
|
$json->data->value = "";
|
|
|
|
|
$json->data->label = "";
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
|
|
|
|
$json->data->value = $this->fields["APP_DATA"][$json->name];
|
|
|
|
|
}
|
|
|
|
|
if (isset($this->fields["APP_DATA"][$json->name . "_label"])) {
|
|
|
|
|
$json->data->label = $this->fields["APP_DATA"][$json->name . "_label"];
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
//synchronize var_label
|
2016-03-07 18:10:01 -04:00
|
|
|
if ($key === "type" && ($value === "dropdown" || $value === "suggest" || $value === "radio")) {
|
2015-09-25 19:55:26 -04:00
|
|
|
if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) {
|
|
|
|
|
foreach ($json->optionsSql as $io) {
|
2016-03-07 18:10:01 -04:00
|
|
|
if ($this->toStringNotNullValues($json->data->value) === $io->value) {
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data->label = $io->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($json->options as $io) {
|
2016-03-07 18:10:01 -04:00
|
|
|
if ($this->toStringNotNullValues($json->data->value) === $io->value) {
|
2015-09-25 19:55:26 -04:00
|
|
|
$json->data->label = $io->label;
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-12-04 13:25:35 +00:00
|
|
|
$_SESSION["TRIGGER_DEBUG"]["DATA"][] = array("key" => $json->name . "_label", "value" => $json->data->label);
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($key === "type" && ($value === "checkgroup")) {
|
|
|
|
|
if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) {
|
|
|
|
|
$dataValue = array();
|
|
|
|
|
$dataLabel = array();
|
2015-10-13 14:02:34 -04:00
|
|
|
$dv = array();
|
2017-12-04 13:25:35 +00:00
|
|
|
if (isset($this->fields["APP_DATA"][$json->name])) {
|
2015-10-13 14:02:34 -04:00
|
|
|
$dv = $this->fields["APP_DATA"][$json->name];
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
2016-02-29 14:42:03 -04:00
|
|
|
if (!is_array($dv)) {
|
|
|
|
|
$dv = explode(",", $dv);
|
|
|
|
|
}
|
2015-09-25 19:55:26 -04:00
|
|
|
foreach ($dv as $idv) {
|
|
|
|
|
foreach ($json->optionsSql as $os) {
|
|
|
|
|
if ($os->value === $idv) {
|
2016-03-07 18:10:01 -04:00
|
|
|
$dataValue[] = $os->value;
|
|
|
|
|
$dataLabel[] = $os->label;
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($json->options as $os) {
|
|
|
|
|
if ($os->value === $idv) {
|
2016-03-07 18:10:01 -04:00
|
|
|
$dataValue[] = $os->value;
|
|
|
|
|
$dataLabel[] = $os->label;
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$json->data->value = $dataValue;
|
|
|
|
|
$json->data->label = G::json_encode($dataLabel);
|
2017-12-04 13:25:35 +00:00
|
|
|
$_SESSION["TRIGGER_DEBUG"]["DATA"][] = array("key" => $json->name . "_label", "value" => $json->data->label);
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($key === "type" && ($value === "datetime")) {
|
|
|
|
|
if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) {
|
|
|
|
|
$json->data->label = $json->data->value;
|
2017-12-04 13:25:35 +00:00
|
|
|
$_SESSION["TRIGGER_DEBUG"]["DATA"][] = array("key" => $json->name . "_label", "value" => $json->data->label);
|
2015-09-25 19:55:26 -04:00
|
|
|
}
|
2015-03-03 15:17:43 -04:00
|
|
|
}
|
2016-03-07 18:10:01 -04:00
|
|
|
//clear optionsSql
|
|
|
|
|
if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "hidden" || $value === "suggest")) {
|
|
|
|
|
$json->optionsSql = array();
|
|
|
|
|
}
|
2015-02-27 18:10:59 -04:00
|
|
|
//grid
|
|
|
|
|
if ($key === "type" && ($value === "grid")) {
|
2017-03-09 11:12:09 -04:00
|
|
|
$columnsDataVariable = [];
|
2017-02-17 16:51:27 -04:00
|
|
|
//todo compatibility 'columnWidth'
|
|
|
|
|
foreach ($json->columns as $column) {
|
|
|
|
|
if (!isset($column->columnWidth) && $column->type !== "hidden") {
|
|
|
|
|
$json->layout = "static";
|
|
|
|
|
$column->columnWidth = "";
|
|
|
|
|
}
|
|
|
|
|
$column->parentIsGrid = true;
|
2017-03-09 11:12:09 -04:00
|
|
|
//save dataVariable value, only for columns control
|
|
|
|
|
if (!empty($column->dataVariable) && is_string($column->dataVariable)) {
|
|
|
|
|
if (in_array(substr($column->dataVariable, 0, 2), self::$prefixs)) {
|
|
|
|
|
$dataVariableValue = substr($column->dataVariable, 2);
|
|
|
|
|
if (!in_array($dataVariableValue, $columnsDataVariable)) {
|
|
|
|
|
$columnsDataVariable[] = $dataVariableValue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-02-17 16:51:27 -04:00
|
|
|
}
|
|
|
|
|
//data grid environment
|
|
|
|
|
$json->dataGridEnvironment = "onDataGridEnvironment";
|
|
|
|
|
if (isset($this->fields["APP_DATA"])) {
|
|
|
|
|
$dataGridEnvironment = $this->fields["APP_DATA"];
|
2017-09-15 17:52:26 -04:00
|
|
|
//Grids only access the global variables of 'ProcessMaker', other variables are removed.
|
|
|
|
|
$this->fields["APP_DATA"] = Cases::getGlobalVariables($this->fields["APP_DATA"]);
|
2017-03-09 11:12:09 -04:00
|
|
|
//restore AppData with dataVariable definition, only for columns control
|
|
|
|
|
foreach ($columnsDataVariable as $dge) {
|
|
|
|
|
if (isset($dataGridEnvironment[$dge])) {
|
|
|
|
|
$this->fields["APP_DATA"][$dge] = $dataGridEnvironment[$dge];
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-02-17 16:51:27 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($key === "dataGridEnvironment" && ($value === "onDataGridEnvironment")) {
|
|
|
|
|
if (isset($this->fields["APP_DATA"])) {
|
|
|
|
|
$this->fields["APP_DATA"] = $dataGridEnvironment;
|
|
|
|
|
$dataGridEnvironment = [];
|
|
|
|
|
}
|
2017-04-06 10:50:56 -04:00
|
|
|
if (isset($this->fields["APP_DATA"][$json->name]) && is_array($this->fields["APP_DATA"][$json->name])) {
|
2015-02-27 18:10:59 -04:00
|
|
|
//rows
|
2015-03-23 22:22:10 -04:00
|
|
|
$rows = $this->fields["APP_DATA"][$json->name];
|
2015-02-27 18:10:59 -04:00
|
|
|
foreach ($rows as $keyRow => $row) {
|
|
|
|
|
//cells
|
|
|
|
|
$cells = array();
|
|
|
|
|
foreach ($json->columns as $column) {
|
|
|
|
|
//data
|
2017-03-10 16:36:55 -04:00
|
|
|
if ($column->type === "text" || $column->type === "textarea" || $column->type === "dropdown" || $column->type === "suggest" || $column->type === "datetime" || $column->type === "checkbox" || $column->type === "file" || $column->type === "multipleFile" || $column->type === "link" || $column->type === "hidden") {
|
2015-02-27 18:10:59 -04:00
|
|
|
array_push($cells, array(
|
2015-03-02 18:19:55 -04:00
|
|
|
"value" => isset($row[$column->name]) ? $row[$column->name] : "",
|
2015-04-17 19:32:39 -04:00
|
|
|
"label" => isset($row[$column->name . "_label"]) ? $row[$column->name . "_label"] : (isset($row[$column->name]) ? $row[$column->name] : "")
|
2015-02-27 18:10:59 -04:00
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$rows[$keyRow] = $cells;
|
|
|
|
|
}
|
|
|
|
|
$json->rows = count($rows);
|
|
|
|
|
$json->data = $rows;
|
2015-02-03 14:40:33 -04:00
|
|
|
}
|
2015-02-06 11:11:59 -04:00
|
|
|
}
|
2015-03-24 16:15:19 -04:00
|
|
|
//languages
|
|
|
|
|
if ($this->lang === null && $key === "language" && isset($json->language)) {
|
|
|
|
|
$this->lang = $json->language;
|
|
|
|
|
}
|
2015-04-06 10:23:47 -04:00
|
|
|
if ($this->langs !== null) {
|
2015-04-17 13:51:47 -04:00
|
|
|
if (($key === "label" || $key === "title" || $key === "hint" || $key === "placeholder" || $key === "validateMessage" || $key === "alternateText" || $key === "comment" || $key === "alt") && isset($this->langs->{$this->lang})) {
|
2015-04-06 10:23:47 -04:00
|
|
|
$langs = $this->langs->{$this->lang}->Labels;
|
|
|
|
|
foreach ($langs as $langsValue) {
|
2015-04-17 13:51:47 -04:00
|
|
|
if (is_object($json) && $json->{$key} === $langsValue->msgid) {
|
2015-04-06 10:23:47 -04:00
|
|
|
$json->{$key} = $langsValue->msgstr;
|
2015-04-17 13:51:47 -04:00
|
|
|
}
|
|
|
|
|
if (is_array($json) && $json[$key] === $langsValue->msgid) {
|
|
|
|
|
$json[$key] = $langsValue->msgstr;
|
|
|
|
|
}
|
2015-04-06 10:23:47 -04:00
|
|
|
}
|
2015-03-24 16:15:19 -04:00
|
|
|
}
|
|
|
|
|
}
|
2015-08-28 15:26:14 -04:00
|
|
|
//EDIT,VIEW
|
|
|
|
|
if (isset($this->fields["STEP_MODE"]) && $this->fields["STEP_MODE"] === "VIEW" && isset($json->mode)) {
|
|
|
|
|
$json->mode = "view";
|
|
|
|
|
}
|
2016-03-01 11:46:32 -04:00
|
|
|
if ($this->displayMode !== null && isset($json->mode)) {
|
|
|
|
|
$json->mode = $this->displayMode;
|
|
|
|
|
}
|
2015-10-12 11:35:26 -04:00
|
|
|
if ($key === "type" && ($value === "form") && $this->records != null) {
|
2015-10-09 15:56:49 -04:00
|
|
|
foreach ($this->records as $ri) {
|
|
|
|
|
if ($json->id === $ri["DYN_UID"] && !isset($json->jsonUpdate)) {
|
2015-12-04 17:31:37 -04:00
|
|
|
$jsonUpdate = G::json_decode($ri["DYN_CONTENT"]);
|
2015-10-09 15:56:49 -04:00
|
|
|
$jsonUpdate = $jsonUpdate->items[0];
|
|
|
|
|
$jsonUpdate->colSpan = $json->colSpan;
|
2016-01-25 17:46:55 -04:00
|
|
|
$jsonUpdate->mode = $json->mode;
|
2015-10-09 15:56:49 -04:00
|
|
|
$jsonUpdate->jsonUpdate = true;
|
|
|
|
|
$json = $jsonUpdate;
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-02-03 14:40:33 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-08-01 13:06:51 -04:00
|
|
|
|
2015-10-26 18:18:43 -04:00
|
|
|
private function getValuesDependentFields($json)
|
|
|
|
|
{
|
2015-11-09 17:27:35 -04:00
|
|
|
if (!isset($this->record["DYN_CONTENT"])) {
|
|
|
|
|
return array();
|
|
|
|
|
}
|
2017-09-15 17:52:26 -04:00
|
|
|
$data = [];
|
|
|
|
|
if (isset($this->fields["APP_DATA"])) {
|
|
|
|
|
foreach ($this->fields["APP_DATA"] as $keyF => $valueF) {
|
|
|
|
|
if (!isset($data[$keyF]) && !is_array($valueF)) {
|
|
|
|
|
$data[$keyF] = $valueF;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-10-26 18:18:43 -04:00
|
|
|
if (isset($json->dbConnection) && isset($json->sql)) {
|
2017-03-06 11:00:37 -04:00
|
|
|
$result = array();
|
|
|
|
|
preg_match_all('/\@(?:([\@\%\#\=\!Qq])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*?)*)\))/', $json->sql, $result, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE);
|
|
|
|
|
$variables = isset($result[2]) ? $result[2] : array();
|
2015-10-26 18:18:43 -04:00
|
|
|
foreach ($variables as $key => $value) {
|
2017-03-27 11:29:02 -04:00
|
|
|
//Prevents an infinite cycle. If the name of the variable is used within its own dependent.
|
|
|
|
|
if ($value[0] === $json->variable) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2018-05-22 14:35:33 -04:00
|
|
|
$jsonDecode = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$jsonSearch = $this->jsonsf($jsonDecode, $value[0], $json->variable === "" ? "id" : "variable");
|
2015-10-26 18:18:43 -04:00
|
|
|
$a = $this->getValuesDependentFields($jsonSearch);
|
|
|
|
|
foreach ($a as $i => $v) {
|
|
|
|
|
$data[$i] = $v;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($json->dbConnection !== "" && $json->dbConnection !== "none" && $json->sql !== "") {
|
2017-03-06 11:00:37 -04:00
|
|
|
$sql = G::replaceDataField($json->sql, $data);
|
|
|
|
|
$dt = $this->getCacheQueryData($json->dbConnection, $sql, $json->type);
|
2016-12-09 15:53:29 -04:00
|
|
|
$row = isset($dt[0]) ? $dt[0] : [];
|
2017-09-15 17:52:26 -04:00
|
|
|
$index = $json->variable === "" ? $json->id : $json->variable;
|
|
|
|
|
if (!isset($data[$index]) && isset($row[0]) && $json->type !== "suggest" && $json->type !== "radio") {
|
|
|
|
|
$data[$index] = $row[0];
|
2015-10-26 18:18:43 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-11-03 15:00:42 -04:00
|
|
|
if (isset($json->options) && isset($json->options[0])) {
|
|
|
|
|
$data[$json->variable === "" ? $json->id : $json->variable] = $json->options[0]->value;
|
|
|
|
|
}
|
|
|
|
|
if (isset($json->placeholder) && $json->placeholder !== "") {
|
2015-12-04 17:31:37 -04:00
|
|
|
$data[$json->variable === "" ? $json->id : $json->variable] = "";
|
2015-11-03 15:00:42 -04:00
|
|
|
}
|
2015-10-26 18:18:43 -04:00
|
|
|
if (isset($json->defaultValue) && $json->defaultValue !== "") {
|
|
|
|
|
$data[$json->variable === "" ? $json->id : $json->variable] = $json->defaultValue;
|
|
|
|
|
}
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-09 15:53:29 -04:00
|
|
|
private function getCacheQueryData($connection, $sql, $type = "", $clearCache = false)
|
|
|
|
|
{
|
|
|
|
|
$data = [];
|
|
|
|
|
if (!empty($type)) {
|
|
|
|
|
$type = "-" . $type;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
if ($clearCache === true) {
|
|
|
|
|
unset($this->cache[md5($sql)]);
|
|
|
|
|
}
|
|
|
|
|
if (isset($this->cache[md5($sql)])) {
|
|
|
|
|
$data = $this->cache[md5($sql)];
|
|
|
|
|
} else {
|
|
|
|
|
$cnn = Propel::getConnection($connection);
|
|
|
|
|
$stmt = $cnn->createStatement();
|
|
|
|
|
$rs = $stmt->executeQuery($sql, \ResultSet::FETCHMODE_NUM);
|
|
|
|
|
while ($rs->next()) {
|
|
|
|
|
$data[] = $rs->getRow();
|
|
|
|
|
}
|
|
|
|
|
$this->cache[md5($sql)] = $data;
|
|
|
|
|
|
|
|
|
|
$this->context["action"] = "execute-sql" . $type;
|
|
|
|
|
$this->context["sql"] = $sql;
|
|
|
|
|
\Bootstrap::registerMonolog("sqlExecution", 200, "Sql Execution", $this->context, $this->sysSys, "processmaker.log");
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$this->context["action"] = "execute-sql" . $type;
|
|
|
|
|
$this->context["exception"] = (array) $e;
|
2017-10-23 15:01:21 -04:00
|
|
|
\Bootstrap::registerMonolog("sqlExecution",
|
|
|
|
|
400,
|
|
|
|
|
"Sql Execution",
|
2017-10-24 10:01:38 -04:00
|
|
|
$this->basicExceptionData($e, $sql),
|
2017-10-23 15:01:21 -04:00
|
|
|
$this->sysSys,
|
|
|
|
|
"processmaker.log");
|
2016-12-09 15:53:29 -04:00
|
|
|
}
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getDatabaseProvider($dbConnection)
|
|
|
|
|
{
|
2017-04-10 14:41:33 -04:00
|
|
|
if ($dbConnection === "workflow" || $dbConnection === "rbac" || $dbConnection === "rp") {
|
|
|
|
|
return "mysql";
|
|
|
|
|
}
|
2016-12-09 15:53:29 -04:00
|
|
|
if ($this->databaseProviders === null) {
|
|
|
|
|
$a = new Criteria("workflow");
|
|
|
|
|
$a->addSelectColumn(DbSourcePeer::DBS_UID);
|
|
|
|
|
$a->addSelectColumn(DbSourcePeer::DBS_TYPE);
|
|
|
|
|
$ds = DbSourcePeer::doSelectRS($a);
|
|
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$this->databaseProviders = [];
|
|
|
|
|
while ($ds->next()) {
|
|
|
|
|
$this->databaseProviders[] = $ds->getRow();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($this->databaseProviders as $key => $value) {
|
|
|
|
|
if ($value["DBS_UID"] === $dbConnection) {
|
|
|
|
|
return $value["DBS_TYPE"];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function sqlParse($sql, $fn = null)
|
|
|
|
|
{
|
|
|
|
|
$sqlParser = new \PHPSQLParser($sql);
|
|
|
|
|
$parsed = $sqlParser->parsed;
|
|
|
|
|
if (!empty($parsed["SELECT"])) {
|
|
|
|
|
$options = isset($parsed["OPTIONS"]) && count($parsed["OPTIONS"]) > 0 ? implode(" ", $parsed["OPTIONS"]) : "";
|
|
|
|
|
if (!empty($options)) {
|
|
|
|
|
$options = $options . " ";
|
|
|
|
|
}
|
|
|
|
|
$select = "SELECT " . $options;
|
|
|
|
|
$dt = $parsed["SELECT"];
|
|
|
|
|
foreach ($dt as $key => $value) {
|
|
|
|
|
if ($key != 0) {
|
|
|
|
|
$select .= ", ";
|
|
|
|
|
}
|
|
|
|
|
$sAlias = str_replace("`", "", $dt[$key]["alias"]);
|
|
|
|
|
$sBaseExpr = $dt[$key]["base_expr"];
|
|
|
|
|
if (strpos(strtoupper($sBaseExpr), "TOP") !== false) {
|
|
|
|
|
$dt[$key]["expr_type"] = "";
|
|
|
|
|
$sBaseExpr = trim($sBaseExpr) . " " . trim($sAlias);
|
|
|
|
|
}
|
|
|
|
|
switch ($dt[$key]["expr_type"]) {
|
|
|
|
|
case "colref":
|
|
|
|
|
if ($sAlias === $sBaseExpr) {
|
|
|
|
|
$select .= $sAlias;
|
|
|
|
|
} else {
|
|
|
|
|
$select .= $sBaseExpr . " AS " . $sAlias;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "expression":
|
|
|
|
|
if ($sAlias === $sBaseExpr) {
|
|
|
|
|
$select .= $sBaseExpr;
|
|
|
|
|
} else {
|
|
|
|
|
$select .= $sBaseExpr . " AS " . $sAlias;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "subquery":
|
|
|
|
|
if (strpos($sAlias, $sBaseExpr, 0) != 0) {
|
|
|
|
|
$select .= $sAlias;
|
|
|
|
|
} else {
|
|
|
|
|
$select .= $sBaseExpr . " AS " . $sAlias;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "operator":
|
|
|
|
|
$select .= $sBaseExpr;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$select .= $sBaseExpr;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$select = trim($select);
|
|
|
|
|
|
|
|
|
|
$isOffsetWord = false;
|
|
|
|
|
|
|
|
|
|
$from = "";
|
|
|
|
|
if (!empty($parsed["FROM"])) {
|
|
|
|
|
$from = "FROM ";
|
|
|
|
|
$dt = $parsed["FROM"];
|
|
|
|
|
foreach ($dt as $key => $value) {
|
|
|
|
|
//reserved word: OFFSET
|
|
|
|
|
if ($dt[$key]["alias"] === "OFFSET") {
|
|
|
|
|
$isOffsetWord = true;
|
|
|
|
|
$dt[$key]["alias"] = "";
|
|
|
|
|
}
|
|
|
|
|
if ($key == 0) {
|
|
|
|
|
$from .= $dt[$key]["table"]
|
|
|
|
|
. ($dt[$key]["table"] == $dt[$key]["alias"] ? "" : " " . $dt[$key]["alias"]);
|
|
|
|
|
} else {
|
|
|
|
|
$from .= " "
|
|
|
|
|
. ($dt[$key]["join_type"] == "JOIN" ? "INNER" : $dt[$key]["join_type"])
|
|
|
|
|
. " JOIN "
|
|
|
|
|
. $dt[$key]["table"]
|
|
|
|
|
. ($dt[$key]["table"] == $dt[$key]["alias"] ? "" : " " . $dt[$key]["alias"]) . " "
|
|
|
|
|
. $dt[$key]["ref_type"] . " "
|
|
|
|
|
. $dt[$key]["ref_clause"];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$from = trim($from);
|
|
|
|
|
|
|
|
|
|
$where = "";
|
|
|
|
|
if (!empty($parsed["WHERE"])) {
|
|
|
|
|
$where = "WHERE ";
|
2017-03-28 11:00:23 -04:00
|
|
|
$dt = ($parsed['WHERE'][0]['expr_type'] == 'expression') ? $parsed['WHERE'][0]['sub_tree'] : $parsed["WHERE"];
|
2016-12-09 15:53:29 -04:00
|
|
|
$nw = count($dt);
|
|
|
|
|
//reserved word: OFFSET
|
|
|
|
|
if ($dt[$nw - 2]["base_expr"] === "OFFSET") {
|
|
|
|
|
$isOffsetWord = true;
|
|
|
|
|
if ($dt[$nw - 2]["expr_type"] === "colref") {
|
|
|
|
|
$dt[$nw - 2]["base_expr"] = "";
|
|
|
|
|
}
|
|
|
|
|
if ($dt[$nw - 1]["expr_type"] === "const") {
|
|
|
|
|
if (isset($parsed["LIMIT"]["start"])) {
|
|
|
|
|
$parsed["LIMIT"]["start"] = $dt[$nw - 1]["base_expr"];
|
|
|
|
|
}
|
|
|
|
|
$dt[$nw - 1]["base_expr"] = "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($dt as $key => $value) {
|
|
|
|
|
$where .= $value["base_expr"] . " ";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$where = trim($where);
|
|
|
|
|
|
|
|
|
|
$groupBy = "";
|
|
|
|
|
if (!empty($parsed["GROUP"])) {
|
|
|
|
|
$groupBy = "GROUP BY ";
|
|
|
|
|
$dt = $parsed["GROUP"];
|
|
|
|
|
foreach ($dt as $key => $value) {
|
2017-03-28 13:26:02 -04:00
|
|
|
$search = preg_replace("/ ASC$/i", "", $value["base_expr"]);
|
|
|
|
|
$groupBy .= $search . ", ";
|
2016-12-09 15:53:29 -04:00
|
|
|
}
|
|
|
|
|
$groupBy = rtrim($groupBy, ", ");
|
|
|
|
|
}
|
|
|
|
|
$groupBy = trim($groupBy);
|
|
|
|
|
|
|
|
|
|
$having = "";
|
|
|
|
|
if (!empty($parsed["HAVING"])) {
|
|
|
|
|
$having = "HAVING ";
|
|
|
|
|
$dt = $parsed["HAVING"];
|
|
|
|
|
foreach ($dt as $key => $value) {
|
|
|
|
|
$having .= $value["base_expr"] . " ";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$having = trim($having);
|
|
|
|
|
|
|
|
|
|
$orderBy = "";
|
|
|
|
|
if (!empty($parsed["ORDER"])) {
|
|
|
|
|
$orderBy = "ORDER BY ";
|
|
|
|
|
$dt = $parsed["ORDER"];
|
|
|
|
|
foreach ($dt as $key => $value) {
|
2017-03-28 13:26:02 -04:00
|
|
|
$search = preg_replace("/ ASC$/i", "", $value["base_expr"]);
|
2017-03-28 14:25:11 -04:00
|
|
|
$orderBy .= $search . " " . $value["direction"] . ", ";
|
2016-12-09 15:53:29 -04:00
|
|
|
}
|
|
|
|
|
$orderBy = rtrim($orderBy, ", ");
|
|
|
|
|
}
|
|
|
|
|
$orderBy = trim($orderBy);
|
|
|
|
|
|
|
|
|
|
$limit = "";
|
|
|
|
|
if (!empty($parsed["LIMIT"])) {
|
|
|
|
|
if ($isOffsetWord == false) {
|
|
|
|
|
$limit = "LIMIT " . $parsed["LIMIT"]["start"] . ", " . $parsed["LIMIT"]["end"];
|
|
|
|
|
}
|
|
|
|
|
if ($isOffsetWord == true) {
|
|
|
|
|
$limit = "OFFSET " . $parsed["LIMIT"]["start"] . " LIMIT " . $parsed["LIMIT"]["end"];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($fn !== null && (is_callable($fn) || function_exists($fn))) {
|
|
|
|
|
$fn($parsed, $select, $from, $where, $groupBy, $having, $orderBy, $limit);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$dt = [$select, $from, $where, $groupBy, $having, $orderBy, $limit];
|
|
|
|
|
$query = "";
|
|
|
|
|
foreach ($dt as $val) {
|
|
|
|
|
$val = trim($val);
|
|
|
|
|
if (!empty($val)) {
|
|
|
|
|
$query = $query . $val . " ";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $query;
|
|
|
|
|
}
|
|
|
|
|
if (!empty($parsed["CALL"])) {
|
|
|
|
|
$sCall = "CALL ";
|
|
|
|
|
$aCall = $parsed["CALL"];
|
|
|
|
|
foreach ($aCall as $key => $value) {
|
|
|
|
|
$sCall .= $value . " ";
|
|
|
|
|
}
|
|
|
|
|
return $sCall;
|
|
|
|
|
}
|
|
|
|
|
if (!empty($parsed["EXECUTE"])) {
|
|
|
|
|
$sCall = "EXECUTE ";
|
|
|
|
|
$aCall = $parsed["EXECUTE"];
|
|
|
|
|
foreach ($aCall as $key => $value) {
|
|
|
|
|
$sCall .= $value . " ";
|
|
|
|
|
}
|
|
|
|
|
return $sCall;
|
|
|
|
|
}
|
|
|
|
|
return $sql;
|
|
|
|
|
}
|
|
|
|
|
|
2014-08-01 13:06:51 -04:00
|
|
|
public function isResponsive()
|
|
|
|
|
{
|
|
|
|
|
return $this->record != null && $this->record["DYN_VERSION"] == 2 ? true : false;
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-20 17:33:41 -04:00
|
|
|
public function printTracker()
|
2015-04-17 15:21:09 -04:00
|
|
|
{
|
|
|
|
|
ob_clean();
|
|
|
|
|
|
2015-12-15 16:51:06 -04:00
|
|
|
$this->fields["STEP_MODE"] = "VIEW";
|
2015-04-17 15:21:09 -04:00
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
|
|
|
|
|
foreach ($json->items[0]->items as $key => $value) {
|
2015-12-15 16:51:06 -04:00
|
|
|
$n = count($json->items[0]->items[$key]);
|
|
|
|
|
for ($i = 0; $i < $n; $i++) {
|
|
|
|
|
if (isset($json->items[0]->items[$key][$i]->type) && $json->items[0]->items[$key][$i]->type === "submit") {
|
|
|
|
|
$cols = new stdClass();
|
|
|
|
|
$cols->colSpan = $json->items[0]->items[$key][$i]->colSpan;
|
|
|
|
|
$json->items[0]->items[$key][$i] = $cols;
|
|
|
|
|
}
|
2015-04-17 15:21:09 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
|
|
|
|
|
$javascript = "
|
|
|
|
|
<script type=\"text/javascript\">
|
|
|
|
|
var jsondata = " . G::json_encode($json) . ";
|
2017-08-14 16:13:46 -04:00
|
|
|
var httpServerHostname = \"" . System::getHttpServerHostnameRequestsFrontEnd() . "\";
|
2015-04-17 15:21:09 -04:00
|
|
|
var pm_run_outside_main_app = \"\";
|
|
|
|
|
var dyn_uid = \"" . $this->fields["CURRENT_DYNAFORM"] . "\";
|
|
|
|
|
var __DynaformName__ = \"" . $this->record["PRO_UID"] . "_" . $this->record["DYN_UID"] . "\";
|
|
|
|
|
var app_uid = \"" . $this->fields["APP_UID"] . "\";
|
|
|
|
|
var prj_uid = \"" . $this->fields["PRO_UID"] . "\";
|
|
|
|
|
var step_mode = \"\";
|
2017-10-10 12:33:25 -04:00
|
|
|
var workspace = \"" . config("system.workspace") . "\";
|
2015-04-17 15:21:09 -04:00
|
|
|
var credentials = " . G::json_encode($this->credentials) . ";
|
|
|
|
|
var filePost = \"\";
|
|
|
|
|
var fieldsRequired = null;
|
|
|
|
|
var triggerDebug = false;
|
2015-10-01 13:01:11 -04:00
|
|
|
var sysLang = \"" . SYS_LANG . "\";
|
2016-06-02 14:29:19 -04:00
|
|
|
var isRTL = \"" . $this->isRTL . "\";
|
|
|
|
|
var pathRTLCss = \"" . $this->pathRTLCss . "\";
|
2016-08-13 10:12:54 -04:00
|
|
|
var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? $this->fields["DEL_INDEX"] : "0") . ";
|
2018-10-15 15:08:52 -04:00
|
|
|
" . $this->getTheStringVariableForGoogleMaps() . "\n
|
2015-04-17 15:21:09 -04:00
|
|
|
$(window).load(function ()
|
|
|
|
|
{
|
|
|
|
|
var data = jsondata;
|
|
|
|
|
|
2016-03-31 15:42:59 -04:00
|
|
|
window.dynaform = new PMDynaform.core.Project({
|
2015-04-17 15:21:09 -04:00
|
|
|
data: data,
|
2016-08-29 18:18:34 -04:00
|
|
|
delIndex: delIndex,
|
2016-09-19 13:38:34 -04:00
|
|
|
dynaformUid: dyn_uid,
|
2015-04-17 15:21:09 -04:00
|
|
|
keys: {
|
2016-03-31 15:42:59 -04:00
|
|
|
server: httpServerHostname,
|
2015-04-17 15:21:09 -04:00
|
|
|
projectId: prj_uid,
|
|
|
|
|
workspace: workspace
|
|
|
|
|
},
|
|
|
|
|
token: credentials,
|
2018-10-15 17:49:53 +00:00
|
|
|
submitRest: false,
|
2018-10-30 13:58:33 +00:00
|
|
|
googleMaps: typeof googleMaps !== 'undefined' ? googleMaps : null
|
2015-04-17 15:21:09 -04:00
|
|
|
});
|
|
|
|
|
$(document).find(\"form\").submit(function (e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<div style=\"margin: 10px 20px 10px 0;\">
|
|
|
|
|
<div style=\"float: right\"><a href=\"javascript: window.history.go(-1);\" style=\"text-decoration: none;\">< " . G::LoadTranslation("ID_BACK") . "</a></div>
|
|
|
|
|
<div style=\"clear: both\"></div>
|
|
|
|
|
</div>
|
|
|
|
|
";
|
|
|
|
|
|
|
|
|
|
$file = file_get_contents(PATH_HOME . "public_html" . PATH_SEP . "lib" . PATH_SEP . "pmdynaform" . PATH_SEP . "build" . PATH_SEP . "pmdynaform.html");
|
|
|
|
|
$file = str_replace("{javascript}", $javascript, $file);
|
2015-09-25 19:55:26 -04:00
|
|
|
$file = str_replace("{sys_skin}", SYS_SKIN, $file);
|
2015-04-17 15:21:09 -04:00
|
|
|
echo $file;
|
|
|
|
|
exit(0);
|
|
|
|
|
}
|
|
|
|
|
|
2015-03-12 09:59:19 -04:00
|
|
|
public function printView()
|
2014-08-01 13:06:51 -04:00
|
|
|
{
|
|
|
|
|
ob_clean();
|
2016-03-01 11:46:32 -04:00
|
|
|
$this->displayMode = "disabled";
|
2015-02-27 18:10:59 -04:00
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
$javascrip = "" .
|
|
|
|
|
"<script type='text/javascript'>\n" .
|
|
|
|
|
"var jsondata = " . G::json_encode($json) . ";\n" .
|
2017-08-14 16:13:46 -04:00
|
|
|
"var httpServerHostname = \"" . System::getHttpServerHostnameRequestsFrontEnd() . "\";\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
"var pm_run_outside_main_app = null;\n" .
|
|
|
|
|
"var dyn_uid = '" . $this->fields["CURRENT_DYNAFORM"] . "';\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"var __DynaformName__ = '" . $this->record["PRO_UID"] . "_" . $this->record["DYN_UID"] . "';\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
"var app_uid = '" . $this->fields["APP_UID"] . "';\n" .
|
|
|
|
|
"var prj_uid = '" . $this->fields["PRO_UID"] . "';\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"var step_mode = null;\n" .
|
2017-10-10 12:33:25 -04:00
|
|
|
"var workspace = '" . config("system.workspace") . "';\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
"var credentials = " . G::json_encode($this->credentials) . ";\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"var filePost = null;\n" .
|
|
|
|
|
"var fieldsRequired = null;\n" .
|
2015-03-03 15:17:43 -04:00
|
|
|
"var triggerDebug = null;\n" .
|
2015-10-01 13:01:11 -04:00
|
|
|
"var sysLang = '" . SYS_LANG . "';\n" .
|
2016-06-02 14:29:19 -04:00
|
|
|
"var isRTL = " . $this->isRTL . ";\n" .
|
|
|
|
|
"var pathRTLCss = '" . $this->pathRTLCss . "';\n" .
|
2016-08-13 10:12:54 -04:00
|
|
|
"var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? $this->fields["DEL_INDEX"] : "0") . ";\n" .
|
2016-12-02 14:14:18 -04:00
|
|
|
"var leaveCaseWarning = " . $this->getLeaveCaseWarning() . ";\n" .
|
2018-10-15 15:08:52 -04:00
|
|
|
$this->getTheStringVariableForGoogleMaps() . "\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"$(window).load(function () {\n" .
|
|
|
|
|
" var data = jsondata;\n" .
|
2016-03-31 15:42:59 -04:00
|
|
|
" window.dynaform = new PMDynaform.core.Project({\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
" data: data,\n" .
|
2016-08-19 16:47:39 -04:00
|
|
|
" delIndex: delIndex,\n" .
|
2016-09-19 13:38:34 -04:00
|
|
|
" dynaformUid: dyn_uid,\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
" keys: {\n" .
|
2016-03-31 15:42:59 -04:00
|
|
|
" server: httpServerHostname,\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
" projectId: prj_uid,\n" .
|
|
|
|
|
" workspace: workspace\n" .
|
|
|
|
|
" },\n" .
|
|
|
|
|
" token: credentials,\n" .
|
2018-10-15 17:49:53 +00:00
|
|
|
" submitRest: false,\n" .
|
2018-10-30 13:58:33 +00:00
|
|
|
" googleMaps: typeof googleMaps !== 'undefined' ? googleMaps : null\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
" });\n" .
|
2016-03-07 08:56:49 -04:00
|
|
|
" $(document).find('form').find('button').on('click', function (e) {\n" .
|
2016-03-01 11:46:32 -04:00
|
|
|
" e.preventDefault();\n" .
|
2016-03-07 08:56:49 -04:00
|
|
|
" return false;\n" .
|
2016-03-01 11:46:32 -04:00
|
|
|
" });\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
" $(document).find('form').submit(function (e) {\n" .
|
|
|
|
|
" e.preventDefault();\n" .
|
|
|
|
|
" return false;\n" .
|
|
|
|
|
" });\n" .
|
|
|
|
|
"});\n" .
|
|
|
|
|
"</script>\n";
|
|
|
|
|
|
|
|
|
|
$file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html');
|
|
|
|
|
$file = str_replace("{javascript}", $javascrip, $file);
|
2015-09-25 19:55:26 -04:00
|
|
|
$file = str_replace("{sys_skin}", SYS_SKIN, $file);
|
2014-08-01 13:06:51 -04:00
|
|
|
echo $file;
|
|
|
|
|
exit();
|
|
|
|
|
}
|
|
|
|
|
|
2015-03-12 09:59:19 -04:00
|
|
|
public function printEdit()
|
2014-08-01 13:06:51 -04:00
|
|
|
{
|
|
|
|
|
ob_clean();
|
2015-02-27 18:10:59 -04:00
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
2015-03-12 09:59:19 -04:00
|
|
|
if (!isset($this->fields["APP_DATA"]["__DYNAFORM_OPTIONS"]["PREVIOUS_STEP"])) {
|
|
|
|
|
$this->fields["APP_DATA"]["__DYNAFORM_OPTIONS"]["PREVIOUS_STEP"] = "";
|
|
|
|
|
}
|
2015-10-09 19:14:06 -04:00
|
|
|
$msg = "";
|
|
|
|
|
if (isset($_SESSION['G_MESSAGE_TYPE']) && isset($_SESSION['G_MESSAGE'])) {
|
|
|
|
|
$color = "green";
|
2017-12-04 13:25:35 +00:00
|
|
|
if ($_SESSION['G_MESSAGE_TYPE'] === "ERROR") {
|
2015-10-09 19:14:06 -04:00
|
|
|
$color = "red";
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
|
|
|
|
if ($_SESSION['G_MESSAGE_TYPE'] === "WARNING") {
|
2015-10-09 19:14:06 -04:00
|
|
|
$color = "#C3C380";
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
|
|
|
|
if ($_SESSION['G_MESSAGE_TYPE'] === "INFO") {
|
2015-10-09 19:14:06 -04:00
|
|
|
$color = "green";
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
2015-10-09 19:14:06 -04:00
|
|
|
$msg = "<div style='background-color:" . $color . ";color: white;padding: 1px 2px 1px 5px;' class='userGroupTitle'>" . $_SESSION['G_MESSAGE_TYPE'] . ": " . $_SESSION['G_MESSAGE'] . "</div>";
|
2015-10-13 14:02:34 -04:00
|
|
|
unset($_SESSION['G_MESSAGE_TYPE']);
|
2015-10-09 19:14:06 -04:00
|
|
|
unset($_SESSION['G_MESSAGE']);
|
|
|
|
|
}
|
|
|
|
|
$title = $msg .
|
|
|
|
|
"<table width='100%' align='center'>\n" .
|
2015-03-02 12:51:29 -04:00
|
|
|
" <tr class='userGroupTitle'>\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
" <td width='100%' align='center'>" . G::LoadTranslation('ID_CASE') . " #: " . $this->fields["APP_NUMBER"] . " " . G::LoadTranslation('ID_TITLE') . ": " . $this->fields["APP_TITLE"] . "</td>\n" .
|
2015-03-02 12:51:29 -04:00
|
|
|
" </tr>\n" .
|
|
|
|
|
"</table>\n";
|
2015-02-27 18:10:59 -04:00
|
|
|
$javascrip = "" .
|
|
|
|
|
"<script type='text/javascript'>\n" .
|
2016-08-29 18:18:34 -04:00
|
|
|
"var jsondata = " . $this->json_encode($json) . ";\n" .
|
2017-08-14 16:13:46 -04:00
|
|
|
"var httpServerHostname = \"" . System::getHttpServerHostnameRequestsFrontEnd() . "\";\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
"var pm_run_outside_main_app = '" . $this->fields["PM_RUN_OUTSIDE_MAIN_APP"] . "';\n" .
|
|
|
|
|
"var dyn_uid = '" . $this->fields["CURRENT_DYNAFORM"] . "';\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"var __DynaformName__ = '" . $this->record["PRO_UID"] . "_" . $this->record["DYN_UID"] . "';\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
"var app_uid = '" . $this->fields["APP_UID"] . "';\n" .
|
|
|
|
|
"var prj_uid = '" . $this->fields["PRO_UID"] . "';\n" .
|
|
|
|
|
"var step_mode = '" . $this->fields["STEP_MODE"] . "';\n" .
|
2017-10-10 12:33:25 -04:00
|
|
|
"var workspace = '" . config("system.workspace") . "';\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"var credentials = " . G::json_encode($this->credentials) . ";\n" .
|
|
|
|
|
"var filePost = null;\n" .
|
|
|
|
|
"var fieldsRequired = null;\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
"var triggerDebug = " . ($this->fields["TRIGGER_DEBUG"] === 1 ? "true" : "false") . ";\n" .
|
2015-10-01 13:01:11 -04:00
|
|
|
"var sysLang = '" . SYS_LANG . "';\n" .
|
2016-06-02 14:29:19 -04:00
|
|
|
"var isRTL = " . $this->isRTL . ";\n" .
|
|
|
|
|
"var pathRTLCss = '" . $this->pathRTLCss . "';\n" .
|
2016-08-13 10:12:54 -04:00
|
|
|
"var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? $this->fields["DEL_INDEX"] : "0") . ";\n" .
|
2016-12-02 14:14:18 -04:00
|
|
|
"var leaveCaseWarning = " . $this->getLeaveCaseWarning() . ";\n" .
|
2018-10-15 15:08:52 -04:00
|
|
|
$this->getTheStringVariableForGoogleMaps() . "\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"</script>\n" .
|
|
|
|
|
"<script type='text/javascript' src='/jscore/cases/core/cases_Step.js'></script>\n" .
|
|
|
|
|
"<script type='text/javascript' src='/jscore/cases/core/pmDynaform.js'></script>\n" .
|
2017-12-04 13:25:35 +00:00
|
|
|
($this->fields["PRO_SHOW_MESSAGE"] === 1 ? '' : $title) .
|
2015-03-02 12:51:29 -04:00
|
|
|
"<div style='width:100%;padding:0px 10px 0px 10px;margin:15px 0px 0px 0px;'>\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
" <img src='/images/bulletButtonLeft.gif' style='float:left;'> \n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
" <a id='dyn_backward' href='" . $this->fields["APP_DATA"]["__DYNAFORM_OPTIONS"]["PREVIOUS_STEP"] . "' style='float:left;font-size:12px;line-height:1;margin:0px 0px 1px 5px;'>\n" .
|
|
|
|
|
" " . $this->fields["APP_DATA"]["__DYNAFORM_OPTIONS"]["PREVIOUS_STEP_LABEL"] . "" .
|
2015-02-27 18:10:59 -04:00
|
|
|
" </a>\n" .
|
|
|
|
|
" <img src='/images/bulletButton.gif' style='float:right;'> \n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
" <a id='dyn_forward' href='" . $this->fields["APP_DATA"]["__DYNAFORM_OPTIONS"]["NEXT_STEP"] . "' style='float:right;font-size:12px;line-height:1;margin:0px 5px 1px 0px;'>\n" .
|
|
|
|
|
" " . $this->fields["APP_DATA"]["__DYNAFORM_OPTIONS"]["NEXT_STEP_LABEL"] . "" .
|
2015-02-27 18:10:59 -04:00
|
|
|
" </a>\n" .
|
|
|
|
|
"</div>";
|
|
|
|
|
$file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html');
|
|
|
|
|
$file = str_replace("{javascript}", $javascrip, $file);
|
2015-09-25 19:55:26 -04:00
|
|
|
$file = str_replace("{sys_skin}", SYS_SKIN, $file);
|
2014-08-01 13:06:51 -04:00
|
|
|
echo $file;
|
|
|
|
|
exit();
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-11 15:38:06 -04:00
|
|
|
public function printEditSupervisor()
|
|
|
|
|
{
|
|
|
|
|
ob_clean();
|
|
|
|
|
|
|
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
|
|
|
|
|
$msg = "";
|
|
|
|
|
|
|
|
|
|
if (isset($_SESSION["G_MESSAGE_TYPE"]) && isset($_SESSION["G_MESSAGE"])) {
|
|
|
|
|
$msg = "<div style=\"margin: 1.2em; border: 1px solid #3C763D; padding: 0.5em; background: #B2D3B3;\"><strong>" . G::LoadTranslation("ID_INFO") . "</strong>: " . $_SESSION["G_MESSAGE"] . "</div>";
|
|
|
|
|
|
|
|
|
|
unset($_SESSION["G_MESSAGE_TYPE"]);
|
|
|
|
|
unset($_SESSION["G_MESSAGE"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$javascrip = "
|
|
|
|
|
<script type=\"text/javascript\">
|
|
|
|
|
var jsondata = " . G::json_encode($json) . ";
|
2017-08-14 16:13:46 -04:00
|
|
|
var httpServerHostname = \"" . System::getHttpServerHostnameRequestsFrontEnd() . "\";
|
2015-09-11 15:38:06 -04:00
|
|
|
var pm_run_outside_main_app = null;
|
|
|
|
|
var dyn_uid = \"" . $this->fields["CURRENT_DYNAFORM"] . "\";
|
|
|
|
|
var __DynaformName__ = \"" . $this->fields["PRO_UID"] . "_" . $this->fields["CURRENT_DYNAFORM"] . "\";
|
|
|
|
|
var app_uid = \"" . $this->fields["APP_UID"] . "\";
|
|
|
|
|
var prj_uid = \"" . $this->fields["PRO_UID"] . "\";
|
|
|
|
|
var step_mode = null;
|
2017-10-10 12:33:25 -04:00
|
|
|
var workspace = \"" . config("system.workspace") . "\";
|
2015-09-11 15:38:06 -04:00
|
|
|
var credentials = " . G::json_encode($this->credentials) . ";
|
2015-09-25 19:55:26 -04:00
|
|
|
var filePost = \"cases_SaveDataSupervisor?UID=" . $this->fields["CURRENT_DYNAFORM"] . "\";
|
2015-09-11 15:38:06 -04:00
|
|
|
var fieldsRequired = null;
|
|
|
|
|
var triggerDebug = null;
|
2015-10-01 13:01:11 -04:00
|
|
|
var sysLang = \"" . SYS_LANG . "\";
|
2016-06-02 14:29:19 -04:00
|
|
|
var isRTL = \"" . $this->isRTL . "\";
|
|
|
|
|
var pathRTLCss = \"" . $this->pathRTLCss . "\";
|
2016-08-13 10:12:54 -04:00
|
|
|
var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? $this->fields["DEL_INDEX"] : "0") . ";
|
2016-12-02 14:14:18 -04:00
|
|
|
var leaveCaseWarning = " . $this->getLeaveCaseWarning() . ";
|
2018-10-15 15:08:52 -04:00
|
|
|
" . $this->getTheStringVariableForGoogleMaps() . "
|
2015-09-11 15:38:06 -04:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<script type=\"text/javascript\" src=\"/jscore/cases/core/pmDynaform.js\"></script>
|
|
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
$msg
|
|
|
|
|
<div style=\"display: none;\">
|
|
|
|
|
<a id=\"dyn_forward\" href=\"javascript:;\"></a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
";
|
|
|
|
|
|
|
|
|
|
$file = file_get_contents(PATH_HOME . "public_html" . PATH_SEP . "lib" . PATH_SEP . "pmdynaform" . PATH_SEP . "build" . PATH_SEP . "pmdynaform.html");
|
|
|
|
|
$file = str_replace("{javascript}", $javascrip, $file);
|
2015-09-25 19:55:26 -04:00
|
|
|
$file = str_replace("{sys_skin}", SYS_SKIN, $file);
|
2015-09-11 15:38:06 -04:00
|
|
|
echo $file;
|
|
|
|
|
exit(0);
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-18 15:36:20 -04:00
|
|
|
public function printWebEntry($filename)
|
2015-02-18 09:50:29 -04:00
|
|
|
{
|
|
|
|
|
ob_clean();
|
2015-02-27 18:10:59 -04:00
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
$javascrip = "" .
|
|
|
|
|
"<script type='text/javascript'>\n" .
|
|
|
|
|
"var jsondata = " . G::json_encode($json) . ";\n" .
|
2017-08-14 16:13:46 -04:00
|
|
|
"var httpServerHostname = \"" . System::getHttpServerHostnameRequestsFrontEnd() . "\";\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"var pm_run_outside_main_app = null;\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
"var dyn_uid = '" . $this->fields["CURRENT_DYNAFORM"] . "';\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"var __DynaformName__ = null;\n" .
|
|
|
|
|
"var app_uid = null;\n" .
|
|
|
|
|
"var prj_uid = '" . $this->record["PRO_UID"] . "';\n" .
|
|
|
|
|
"var step_mode = null;\n" .
|
2017-10-10 12:33:25 -04:00
|
|
|
"var workspace = '" . config("system.workspace") . "';\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"var credentials = " . G::json_encode($this->credentials) . ";\n" .
|
|
|
|
|
"var filePost = '" . $filename . "';\n" .
|
2015-03-12 09:59:19 -04:00
|
|
|
"var fieldsRequired = " . G::json_encode(array()) . ";\n" .
|
2015-03-03 15:17:43 -04:00
|
|
|
"var triggerDebug = null;\n" .
|
2015-10-01 13:01:11 -04:00
|
|
|
"var sysLang = '" . SYS_LANG . "';\n" .
|
2016-06-02 14:29:19 -04:00
|
|
|
"var isRTL = " . $this->isRTL . ";\n" .
|
|
|
|
|
"var pathRTLCss = '" . $this->pathRTLCss . "';\n" .
|
2016-08-13 10:12:54 -04:00
|
|
|
"var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? $this->fields["DEL_INDEX"] : "0") . ";\n" .
|
2016-12-02 14:14:18 -04:00
|
|
|
"var leaveCaseWarning = " . $this->getLeaveCaseWarning() . ";\n" .
|
2018-10-15 15:08:52 -04:00
|
|
|
$this->getTheStringVariableForGoogleMaps() . "\n" .
|
2015-02-27 18:10:59 -04:00
|
|
|
"</script>\n" .
|
|
|
|
|
"<script type='text/javascript' src='/jscore/cases/core/pmDynaform.js'></script>\n" .
|
|
|
|
|
"<div style='width:100%;padding: 0px 10px 0px 10px;margin:15px 0px 0px 0px;'>\n" .
|
|
|
|
|
" <img src='/images/bulletButton.gif' style='float:right;'> \n" .
|
|
|
|
|
" <a id='dyn_forward' href='' style='float:right;font-size:12px;line-height:1;margin:0px 5px 1px 0px;'>\n" .
|
|
|
|
|
" Next Step\n" .
|
|
|
|
|
" </a>\n" .
|
|
|
|
|
"</div>";
|
|
|
|
|
|
|
|
|
|
$file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html');
|
|
|
|
|
$file = str_replace("{javascript}", $javascrip, $file);
|
2015-09-25 19:55:26 -04:00
|
|
|
$file = str_replace("{sys_skin}", SYS_SKIN, $file);
|
2015-02-27 18:10:59 -04:00
|
|
|
echo $file;
|
|
|
|
|
exit();
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-28 16:21:45 -04:00
|
|
|
public function printABE($filename, $record)
|
|
|
|
|
{
|
|
|
|
|
ob_clean();
|
|
|
|
|
$this->record = $record;
|
|
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
$javascrip = "" .
|
|
|
|
|
"<script type='text/javascript'>\n" .
|
|
|
|
|
"var jsondata = " . G::json_encode($json) . ";\n" .
|
2017-08-14 16:13:46 -04:00
|
|
|
"var httpServerHostname = \"" . System::getHttpServerHostnameRequestsFrontEnd() . "\";\n" .
|
2015-04-28 16:21:45 -04:00
|
|
|
"var pm_run_outside_main_app = null;\n" .
|
|
|
|
|
"var dyn_uid = '" . $this->fields["CURRENT_DYNAFORM"] . "';\n" .
|
|
|
|
|
"var __DynaformName__ = null;\n" .
|
2017-05-18 15:20:07 -04:00
|
|
|
"var app_uid = '" . G::decrypt($record['APP_UID'], URL_KEY) . "';\n" .
|
2015-04-28 16:21:45 -04:00
|
|
|
"var prj_uid = '" . $this->record["PRO_UID"] . "';\n" .
|
|
|
|
|
"var step_mode = null;\n" .
|
2017-10-10 12:33:25 -04:00
|
|
|
"var workspace = '" . config("system.workspace") . "';\n" .
|
2015-04-28 16:21:45 -04:00
|
|
|
"var credentials = " . G::json_encode($this->credentials) . ";\n" .
|
|
|
|
|
"var filePost = '" . $filename . "';\n" .
|
|
|
|
|
"var fieldsRequired = " . G::json_encode(array()) . ";\n" .
|
|
|
|
|
"var triggerDebug = null;\n" .
|
2015-10-01 13:01:11 -04:00
|
|
|
"var sysLang = '" . SYS_LANG . "';\n" .
|
2016-06-02 14:29:19 -04:00
|
|
|
"var isRTL = " . $this->isRTL . ";\n" .
|
|
|
|
|
"var pathRTLCss = '" . $this->pathRTLCss . "';\n" .
|
2017-06-01 15:42:50 -04:00
|
|
|
"var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? G::decrypt($this->fields["DEL_INDEX"], URL_KEY) : "0") . ";\n" .
|
2016-12-02 14:14:18 -04:00
|
|
|
"var leaveCaseWarning = " . $this->getLeaveCaseWarning() . ";\n" .
|
2018-10-15 15:08:52 -04:00
|
|
|
$this->getTheStringVariableForGoogleMaps() . "\n" .
|
2015-04-28 16:21:45 -04:00
|
|
|
"</script>\n" .
|
|
|
|
|
"<script type='text/javascript' src='/jscore/cases/core/pmDynaform.js'></script>\n" .
|
|
|
|
|
"<div style='width:100%;padding: 0px 10px 0px 10px;margin:15px 0px 0px 0px;'>\n" .
|
|
|
|
|
" <a id='dyn_forward' href='' style='float:right;font-size:12px;line-height:1;margin:0px 5px 1px 0px;'>\n" .
|
|
|
|
|
" </a>\n" .
|
|
|
|
|
"</div>";
|
|
|
|
|
|
|
|
|
|
$file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html');
|
|
|
|
|
$file = str_replace("{javascript}", $javascrip, $file);
|
2015-09-25 19:55:26 -04:00
|
|
|
$file = str_replace("{sys_skin}", SYS_SKIN, $file);
|
2015-04-28 16:21:45 -04:00
|
|
|
echo $file;
|
|
|
|
|
exit();
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-31 18:59:16 -04:00
|
|
|
public function printPmDynaform($js = "")
|
2015-02-27 18:10:59 -04:00
|
|
|
{
|
|
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
$javascrip = "" .
|
|
|
|
|
"<script type='text/javascript'>" .
|
2015-10-01 13:01:11 -04:00
|
|
|
"var sysLang = '" . SYS_LANG . "';\n" .
|
2016-06-02 14:29:19 -04:00
|
|
|
"var isRTL = " . $this->isRTL . ";\n" .
|
|
|
|
|
"var pathRTLCss = '" . $this->pathRTLCss . "';\n" .
|
2016-08-25 15:56:48 -04:00
|
|
|
"var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? $this->fields["DEL_INDEX"] : "0") . ";\n" .
|
2016-08-29 18:18:34 -04:00
|
|
|
"var jsonData = " . $this->json_encode($json) . ";\n" .
|
2017-08-14 16:13:46 -04:00
|
|
|
"var httpServerHostname = \"" . System::getHttpServerHostnameRequestsFrontEnd() . "\";\n" .
|
2016-12-02 14:14:18 -04:00
|
|
|
"var leaveCaseWarning = " . $this->getLeaveCaseWarning() . ";\n" .
|
2018-10-15 15:08:52 -04:00
|
|
|
$this->getTheStringVariableForGoogleMaps() . "\n" .
|
2015-07-31 18:59:16 -04:00
|
|
|
$js .
|
2015-02-27 18:10:59 -04:00
|
|
|
"</script>";
|
|
|
|
|
|
|
|
|
|
$file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html');
|
|
|
|
|
$file = str_replace("{javascript}", $javascrip, $file);
|
2015-09-25 19:55:26 -04:00
|
|
|
$file = str_replace("{sys_skin}", SYS_SKIN, $file);
|
2015-02-18 15:36:20 -04:00
|
|
|
echo $file;
|
2015-02-18 09:50:29 -04:00
|
|
|
exit();
|
|
|
|
|
}
|
2015-02-18 15:36:20 -04:00
|
|
|
|
2015-04-28 16:21:45 -04:00
|
|
|
public function printPmDynaformAbe($record)
|
2015-04-28 12:36:33 -04:00
|
|
|
{
|
2015-04-28 16:21:45 -04:00
|
|
|
ob_clean();
|
|
|
|
|
$this->record = $record;
|
2015-04-28 12:36:33 -04:00
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
2015-12-08 11:24:21 -04:00
|
|
|
$currentDynaform = (isset($this->fields['CURRENT_DYNAFORM']) && $this->fields['CURRENT_DYNAFORM'] != '') ? $this->fields['CURRENT_DYNAFORM'] : '';
|
2015-04-28 16:21:45 -04:00
|
|
|
$javascrip = "" .
|
|
|
|
|
"<script type='text/javascript'>\n" .
|
|
|
|
|
"var jsondata = " . G::json_encode($json) . ";\n" .
|
2017-08-14 16:13:46 -04:00
|
|
|
"var httpServerHostname = \"" . System::getHttpServerHostnameRequestsFrontEnd() . "\";\n" .
|
2015-04-28 16:21:45 -04:00
|
|
|
"var pm_run_outside_main_app = null;\n" .
|
2015-12-04 12:42:49 -04:00
|
|
|
"var dyn_uid = '" . $currentDynaform . "';\n" .
|
2015-04-28 16:21:45 -04:00
|
|
|
"var __DynaformName__ = null;\n" .
|
|
|
|
|
"var app_uid = null;\n" .
|
|
|
|
|
"var prj_uid = '" . $this->record["PRO_UID"] . "';\n" .
|
|
|
|
|
"var step_mode = null;\n" .
|
2017-10-10 12:33:25 -04:00
|
|
|
"var workspace = '" . config("system.workspace") . "';\n" .
|
2015-04-28 16:21:45 -04:00
|
|
|
"var credentials = " . G::json_encode($this->credentials) . ";\n" .
|
|
|
|
|
"var fieldsRequired = " . G::json_encode(array()) . ";\n" .
|
|
|
|
|
"var triggerDebug = null;\n" .
|
2015-10-01 13:01:11 -04:00
|
|
|
"var sysLang = '" . SYS_LANG . "';\n" .
|
2016-06-02 14:29:19 -04:00
|
|
|
"var isRTL = " . $this->isRTL . ";\n" .
|
|
|
|
|
"var pathRTLCss = '" . $this->pathRTLCss . "';\n" .
|
2016-08-13 10:12:54 -04:00
|
|
|
"var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? $this->fields["DEL_INDEX"] : "0") . ";\n" .
|
2016-12-02 14:14:18 -04:00
|
|
|
"var leaveCaseWarning = " . $this->getLeaveCaseWarning() . ";\n" .
|
2018-10-15 15:08:52 -04:00
|
|
|
$this->getTheStringVariableForGoogleMaps() . "\n" .
|
2015-04-28 16:21:45 -04:00
|
|
|
"</script>\n" .
|
|
|
|
|
"<script type='text/javascript' src='/jscore/cases/core/pmDynaform.js'></script>\n" .
|
|
|
|
|
"<div style='width:100%;padding: 0px 10px 0px 10px;margin:15px 0px 0px 0px;'>\n" .
|
|
|
|
|
"</div>";
|
2015-04-28 12:36:33 -04:00
|
|
|
$file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html');
|
|
|
|
|
$file = str_replace("{javascript}", $javascrip, $file);
|
2015-09-25 19:55:26 -04:00
|
|
|
$file = str_replace("{sys_skin}", SYS_SKIN, $file);
|
2015-04-28 12:36:33 -04:00
|
|
|
return $file;
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-04 17:31:37 -04:00
|
|
|
public function synchronizeSubDynaform()
|
|
|
|
|
{
|
|
|
|
|
if (!isset($this->record["DYN_CONTENT"])) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
foreach ($this->records as $ri) {
|
|
|
|
|
$jsonSearch = $this->jsonsf($json, $ri["DYN_UID"], "id");
|
|
|
|
|
if ($jsonSearch === null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
$jsonUpdate = G::json_decode($ri["DYN_CONTENT"]);
|
|
|
|
|
$jsonUpdate = $jsonUpdate->items[0];
|
|
|
|
|
$jsonUpdate->colSpan = $jsonSearch->colSpan;
|
2016-01-25 17:46:55 -04:00
|
|
|
$jsonUpdate->mode = $jsonSearch->mode;
|
2015-12-04 17:31:37 -04:00
|
|
|
$this->jsonReplace($json, $ri["DYN_UID"], "id", $jsonUpdate);
|
|
|
|
|
}
|
|
|
|
|
$this->record["DYN_CONTENT"] = G::json_encode($json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function jsonReplace(&$json, $id, $for = "id", $update)
|
|
|
|
|
{
|
|
|
|
|
foreach ($json as $key => &$value) {
|
|
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
|
|
|
|
$this->jsonReplace($value, $id, $for, $update);
|
|
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
|
|
|
|
if ($key === $for && $id === $value) {
|
|
|
|
|
$json = $update;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-03-31 16:33:28 -04:00
|
|
|
public function synchronizeVariable($processUid, $newVariable, $oldVariable)
|
|
|
|
|
{
|
|
|
|
|
$criteria = new Criteria("workflow");
|
|
|
|
|
$criteria->addSelectColumn(DynaformPeer::DYN_UID);
|
|
|
|
|
$criteria->addSelectColumn(DynaformPeer::DYN_CONTENT);
|
|
|
|
|
$criteria->add(DynaformPeer::PRO_UID, $processUid, Criteria::EQUAL);
|
|
|
|
|
$rsCriteria = DynaformPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
while ($rsCriteria->next()) {
|
|
|
|
|
$aRow = $rsCriteria->getRow();
|
|
|
|
|
$json = G::json_decode($aRow['DYN_CONTENT']);
|
|
|
|
|
$this->jsons($json, $newVariable, $oldVariable);
|
|
|
|
|
$json2 = G::json_encode($json);
|
|
|
|
|
//update dynaform
|
|
|
|
|
if ($json2 !== $aRow['DYN_CONTENT']) {
|
|
|
|
|
$con = Propel::getConnection(DynaformPeer::DATABASE_NAME);
|
|
|
|
|
$con->begin();
|
|
|
|
|
$oPro = DynaformPeer::retrieveByPk($aRow["DYN_UID"]);
|
|
|
|
|
$oPro->setDynContent($json2);
|
|
|
|
|
$oPro->save();
|
|
|
|
|
$con->commit();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function jsons(&$json, $newVariable, $oldVariable)
|
|
|
|
|
{
|
|
|
|
|
foreach ($json as $key => $value) {
|
|
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
|
|
|
|
$this->jsons($value, $newVariable, $oldVariable);
|
|
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
|
|
|
|
if ($key === "variable" && $json->variable === $oldVariable["VAR_NAME"]) {
|
|
|
|
|
$json->variable = $newVariable["VAR_NAME"];
|
2017-12-04 13:25:35 +00:00
|
|
|
if (isset($json->dataType)) {
|
2015-03-31 16:33:28 -04:00
|
|
|
$json->dataType = $newVariable["VAR_FIELD_TYPE"];
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
|
|
|
|
if (isset($json->name)) {
|
2015-03-31 16:33:28 -04:00
|
|
|
$json->name = $newVariable["VAR_NAME"];
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
|
|
|
|
if (isset($json->dbConnection) && $json->dbConnection === $oldVariable["VAR_DBCONNECTION"]) {
|
2015-03-31 16:33:28 -04:00
|
|
|
$json->dbConnection = $newVariable["VAR_DBCONNECTION"];
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
|
|
|
|
if (isset($json->dbConnectionLabel) && $json->dbConnectionLabel === $oldVariable["VAR_DBCONNECTION_LABEL"]) {
|
2015-04-17 13:51:47 -04:00
|
|
|
$json->dbConnectionLabel = $newVariable["VAR_DBCONNECTION_LABEL"];
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
|
|
|
|
if (isset($json->sql) && $json->sql === $oldVariable["VAR_SQL"]) {
|
2015-03-31 16:33:28 -04:00
|
|
|
$json->sql = $newVariable["VAR_SQL"];
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
2015-03-31 16:33:28 -04:00
|
|
|
if (isset($json->options) && G::json_encode($json->options) === $oldVariable["VAR_ACCEPTED_VALUES"]) {
|
|
|
|
|
$json->options = G::json_decode($newVariable["VAR_ACCEPTED_VALUES"]);
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-11-17 11:54:06 -04:00
|
|
|
//update variable
|
|
|
|
|
if ($key === "var_name" && $json->var_uid === $oldVariable["VAR_UID"]) {
|
|
|
|
|
$json->var_name = $newVariable["VAR_NAME"];
|
|
|
|
|
}
|
|
|
|
|
if ($key === "var_field_type" && $json->var_uid === $oldVariable["VAR_UID"]) {
|
|
|
|
|
$json->var_field_type = $newVariable["VAR_FIELD_TYPE"];
|
|
|
|
|
}
|
|
|
|
|
if ($key === "var_dbconnection" && $json->var_uid === $oldVariable["VAR_UID"]) {
|
|
|
|
|
$json->var_dbconnection = $newVariable["VAR_DBCONNECTION"];
|
|
|
|
|
}
|
|
|
|
|
if ($key === "var_dbconnection_label" && $json->var_uid === $oldVariable["VAR_UID"]) {
|
|
|
|
|
$json->var_dbconnection_label = $newVariable["VAR_DBCONNECTION_LABEL"];
|
|
|
|
|
}
|
|
|
|
|
if ($key === "var_sql" && $json->var_uid === $oldVariable["VAR_UID"]) {
|
|
|
|
|
$json->var_sql = $newVariable["VAR_SQL"];
|
|
|
|
|
}
|
|
|
|
|
if ($key === "var_accepted_values" && $json->var_uid === $oldVariable["VAR_UID"]) {
|
|
|
|
|
$json->var_accepted_values = G::json_decode($newVariable["VAR_ACCEPTED_VALUES"]);
|
|
|
|
|
}
|
2015-03-31 16:33:28 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-06 15:43:32 -04:00
|
|
|
/**
|
|
|
|
|
* Sync JSON definition of the Forms with Input Document information
|
|
|
|
|
* in all forms from a process
|
|
|
|
|
*
|
|
|
|
|
* @param string $processUid
|
|
|
|
|
* @param array $inputDocument
|
|
|
|
|
*/
|
2015-10-05 12:12:58 -04:00
|
|
|
public function synchronizeInputDocument($processUid, $inputDocument)
|
|
|
|
|
{
|
2018-11-06 15:43:32 -04:00
|
|
|
$criteria = new Criteria('workflow');
|
2015-10-05 12:12:58 -04:00
|
|
|
$criteria->addSelectColumn(DynaformPeer::DYN_UID);
|
|
|
|
|
$criteria->addSelectColumn(DynaformPeer::DYN_CONTENT);
|
|
|
|
|
$criteria->add(DynaformPeer::PRO_UID, $processUid, Criteria::EQUAL);
|
2018-11-06 15:43:32 -04:00
|
|
|
// Only select the forms with an input document related to a field
|
|
|
|
|
$criteria->add(DynaformPeer::DYN_CONTENT, '%"sizeUnity":%', Criteria::LIKE);
|
2015-10-05 12:12:58 -04:00
|
|
|
$rsCriteria = DynaformPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
while ($rsCriteria->next()) {
|
|
|
|
|
$aRow = $rsCriteria->getRow();
|
|
|
|
|
$json = G::json_decode($aRow['DYN_CONTENT']);
|
|
|
|
|
$this->jsonsid($json, $inputDocument);
|
|
|
|
|
$json2 = G::json_encode($json);
|
|
|
|
|
//update dynaform
|
|
|
|
|
if ($json2 !== $aRow['DYN_CONTENT']) {
|
|
|
|
|
$con = Propel::getConnection(DynaformPeer::DATABASE_NAME);
|
|
|
|
|
$con->begin();
|
2018-11-06 15:43:32 -04:00
|
|
|
$oPro = DynaformPeer::retrieveByPk($aRow['DYN_UID']);
|
2015-10-05 12:12:58 -04:00
|
|
|
$oPro->setDynContent($json2);
|
|
|
|
|
$oPro->save();
|
|
|
|
|
$con->commit();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-06 15:43:32 -04:00
|
|
|
/**
|
|
|
|
|
* Replace values from an Input Document related to the form,
|
|
|
|
|
* for fields of type "file" and "multipleFile"
|
|
|
|
|
*
|
|
|
|
|
* @param object $json
|
|
|
|
|
* @param array $inputDocument
|
|
|
|
|
*/
|
2015-10-05 12:12:58 -04:00
|
|
|
private function jsonsid(&$json, $inputDocument)
|
|
|
|
|
{
|
|
|
|
|
foreach ($json as $key => $value) {
|
|
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
|
|
|
|
$this->jsonsid($value, $inputDocument);
|
|
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
2018-11-06 15:43:32 -04:00
|
|
|
if ($key === "type" && ($json->type === "file" || $json->type === "multipleFile") && isset($json->inp_doc_uid)) {
|
|
|
|
|
if ($json->inp_doc_uid === $inputDocument["INP_DOC_UID"]) {
|
2015-10-05 12:12:58 -04:00
|
|
|
if (isset($json->size)) {
|
|
|
|
|
$json->size = $inputDocument["INP_DOC_MAX_FILESIZE"];
|
|
|
|
|
}
|
|
|
|
|
if (isset($json->sizeUnity)) {
|
|
|
|
|
$json->sizeUnity = $inputDocument["INP_DOC_MAX_FILESIZE_UNIT"];
|
|
|
|
|
}
|
|
|
|
|
if (isset($json->extensions)) {
|
|
|
|
|
$json->extensions = $inputDocument["INP_DOC_TYPE_FILE"];
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-11-06 15:43:32 -04:00
|
|
|
} else if ($key === "type" && $json->type === "grid" && !empty($json->columns)) {
|
|
|
|
|
$this->jsonsid($json->columns, $inputDocument);
|
2015-10-05 12:12:58 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-03-31 16:33:28 -04:00
|
|
|
public function isUsed($processUid, $variable)
|
|
|
|
|
{
|
|
|
|
|
$criteria = new Criteria("workflow");
|
|
|
|
|
$criteria->addSelectColumn(DynaformPeer::DYN_UID);
|
|
|
|
|
$criteria->addSelectColumn(DynaformPeer::DYN_CONTENT);
|
|
|
|
|
$criteria->add(DynaformPeer::PRO_UID, $processUid, Criteria::EQUAL);
|
|
|
|
|
$rsCriteria = DynaformPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
while ($rsCriteria->next()) {
|
|
|
|
|
$aRow = $rsCriteria->getRow();
|
|
|
|
|
$json = G::json_decode($aRow['DYN_CONTENT']);
|
|
|
|
|
if ($this->jsoni($json, $variable)) {
|
|
|
|
|
return $aRow['DYN_UID'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function jsoni(&$json, $variable)
|
|
|
|
|
{
|
|
|
|
|
foreach ($json as $key => $value) {
|
|
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
|
|
|
|
if ($this->jsoni($value, $variable)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
|
|
|
|
if ($key === "variable" && $json->variable === $variable["var_name"]) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-08 11:56:50 -04:00
|
|
|
public function searchField($dyn_uid, $field_id, $pro_uid = null)
|
2015-04-03 14:31:32 -04:00
|
|
|
{
|
2016-11-08 11:56:50 -04:00
|
|
|
//get pro_uid if empty
|
|
|
|
|
if (empty($pro_uid)) {
|
|
|
|
|
$a = new Criteria("workflow");
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::PRO_UID);
|
|
|
|
|
$a->add(DynaformPeer::DYN_UID, $dyn_uid, Criteria::EQUAL);
|
|
|
|
|
$ds = DynaformPeer::doSelectRS($a);
|
|
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$ds->next();
|
|
|
|
|
$row = $ds->getRow();
|
|
|
|
|
$pro_uid = $row["PRO_UID"];
|
|
|
|
|
}
|
|
|
|
|
//get dynaforms
|
2015-04-03 14:31:32 -04:00
|
|
|
$a = new Criteria("workflow");
|
2016-11-08 11:56:50 -04:00
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_UID);
|
2015-04-03 14:31:32 -04:00
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_CONTENT);
|
2016-11-08 11:56:50 -04:00
|
|
|
$a->add(DynaformPeer::PRO_UID, $pro_uid, Criteria::EQUAL);
|
|
|
|
|
$ds = DynaformPeer::doSelectRS($a);
|
2015-04-03 14:31:32 -04:00
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
2016-10-12 10:16:38 -04:00
|
|
|
|
2016-11-08 11:56:50 -04:00
|
|
|
$json = new stdClass();
|
|
|
|
|
$dynaforms = array();
|
|
|
|
|
while ($ds->next()) {
|
|
|
|
|
$row = $ds->getRow();
|
|
|
|
|
if ($row["DYN_UID"] === $dyn_uid) {
|
|
|
|
|
$json = G::json_decode($row["DYN_CONTENT"]);
|
|
|
|
|
} else {
|
|
|
|
|
$dynaforms[] = G::json_decode($row["DYN_CONTENT"]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//get subforms
|
|
|
|
|
$fields = $this->jsonsf2($json, "form", "type");
|
|
|
|
|
foreach ($fields as $key => $value) {
|
|
|
|
|
if ($json->items[0]->id !== $value->id) {
|
|
|
|
|
foreach ($dynaforms as $dynaform) {
|
|
|
|
|
if ($value->id === $dynaform->items[0]->id) {
|
|
|
|
|
$form = $dynaform->items[0];
|
|
|
|
|
$this->jsonReplace($json, $value->id, "id", $form);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-10-12 10:16:38 -04:00
|
|
|
|
2015-04-03 14:31:32 -04:00
|
|
|
return $this->jsonsf($json, $field_id);
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-22 12:28:07 -04:00
|
|
|
public function searchFieldByName($dyn_uid, $name)
|
|
|
|
|
{
|
|
|
|
|
$a = new Criteria("workflow");
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_CONTENT);
|
|
|
|
|
$a->add(DynaformPeer::DYN_UID, $dyn_uid, Criteria::EQUAL);
|
|
|
|
|
$ds = ProcessPeer::doSelectRS($a);
|
|
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$ds->next();
|
|
|
|
|
$row = $ds->getRow();
|
|
|
|
|
$json = G::json_decode($row["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
return $this->jsonsf($json, $name, "name");
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-26 18:18:43 -04:00
|
|
|
private function jsonsf(&$json, $id, $for = "id")
|
2015-04-03 14:31:32 -04:00
|
|
|
{
|
|
|
|
|
foreach ($json as $key => $value) {
|
|
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
2015-10-26 18:18:43 -04:00
|
|
|
$val = $this->jsonsf($value, $id, $for);
|
2017-12-04 13:25:35 +00:00
|
|
|
if ($val !== null) {
|
2015-04-03 14:31:32 -04:00
|
|
|
return $val;
|
2017-12-04 13:25:35 +00:00
|
|
|
}
|
2015-04-03 14:31:32 -04:00
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
2015-10-26 18:18:43 -04:00
|
|
|
if ($key === $for && $id === $value) {
|
2015-04-03 14:31:32 -04:00
|
|
|
return $json;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-08 17:40:43 -04:00
|
|
|
/**
|
|
|
|
|
* You obtain an array of elements according to search criteria.
|
HOR-433 "(WSSO Plugin) Cuando se ingresa al proceso, se..." SOLVED
Issue:
(WSSO Plugin) Cuando se ingresa al proceso, se puede verificar que no se puede recuperar la data del mismo
Cause:
Se esta usando el mismo VirtualHost para clientes WEB y REST
Solution:
Se realizo la implementacion de la nueva directiva "server_hostname_requests_frontend" del "env.ini"; esto para
el caso en que se requiera del "feature SSO", tomar nota de lo siguiente:
- Habilitar el modulo "mod_headers" de apache (httpd.conf)
- Tener configurado un VirtualHost normal para ProcessMaker (pmos.conf)
- Para el "feature SSO" se debera crear un 2do VirtualHost con toda la configuracion necesaria para
el mismo (pmos.conf), por lo que todos los usuarios que requieran este feature, deberan usar este para
acceder por browser
- Crear un 3er VirtualHost para las solicitudes del front-end (DESIGNER), en donde se agregara lo
siguiente (pmos.conf):
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Content-Type,Depth,User-Agent,X-File-Size,X-Requested-With,If-Modified-Since,X-File-Name,Cache-Control,Authorization"
Header set Access-Control-Allow-Methods "OPTIONS,GET,POST,PUT,DELETE"
</IfModule>
De tal forma que quedara asi:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Content-Type,Depth,User-Agent,X-File-Size,X-Requested-With,If-Modified-Since,X-File-Name,Cache-Control,Authorization"
Header set Access-Control-Allow-Methods "OPTIONS,GET,POST,PUT,DELETE"
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*/(.*)$ app.php [QSA,L,NC]
</IfModule>
- Agregar lo siguiente al archivo "/path/to/processmaker/shared/sites/your-workspace/env.ini"
server_hostname_requests_frontend = "{your_server_hostname_requests_frontend}"
Donde:
- your_server_hostname_requests_frontend, es el nombre del servidor configurado para el
front-end (3er VirtualHost), ejemplo:
server_hostname_requests_frontend = "192.168.40.72:3017"
- Tambien se puede hacer la configuracion en el archivo "/path/to/processmaker/workflow/engine/config/env.ini",
considerar que esto afectara a todos lo workspaces creados
Note:
Todo el desarrollo se lo hizo en un server Windows-Server-2012-R2 con Apache-2.4
2016-03-17 08:45:23 -04:00
|
|
|
*
|
2016-03-08 17:40:43 -04:00
|
|
|
* @param object $json
|
|
|
|
|
* @param string $id
|
|
|
|
|
* @param string $for
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
private function jsonsf2(&$json, $id, $for = "id")
|
|
|
|
|
{
|
|
|
|
|
$result = array();
|
|
|
|
|
foreach ($json as $key => $value) {
|
|
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
|
|
|
|
$fields = $this->jsonsf2($value, $id, $for);
|
|
|
|
|
foreach ($fields as $field) {
|
|
|
|
|
$result[] = $field;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
|
|
|
|
if ($key === $for && $id === $value) {
|
|
|
|
|
$result[] = $json;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $result;
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-03 14:31:32 -04:00
|
|
|
public function downloadLanguage($dyn_uid, $lang)
|
|
|
|
|
{
|
|
|
|
|
if ($lang === "en") {
|
|
|
|
|
$a = new Criteria("workflow");
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_CONTENT);
|
|
|
|
|
$a->add(DynaformPeer::DYN_UID, $dyn_uid, Criteria::EQUAL);
|
|
|
|
|
$ds = ProcessPeer::doSelectRS($a);
|
|
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$ds->next();
|
|
|
|
|
$row = $ds->getRow();
|
|
|
|
|
if ($row["DYN_CONTENT"] !== null && $row["DYN_CONTENT"] !== "") {
|
|
|
|
|
$json = \G::json_decode($row["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonl($json);
|
|
|
|
|
}
|
|
|
|
|
$string = "";
|
|
|
|
|
$string = $string . "msgid \"\"\n";
|
|
|
|
|
$string = $string . "msgstr \"\"\n";
|
|
|
|
|
$string = $string . "\"Project-Id-Version: PM 4.0.1\\n\"\n";
|
|
|
|
|
$string = $string . "\"POT-Creation-Date: \\n\"\n";
|
|
|
|
|
$string = $string . "\"PO-Revision-Date: 2010-12-02 11:44+0100 \\n\"\n";
|
|
|
|
|
$string = $string . "\"Last-Translator: Colosa<colosa@colosa.com>\\n\"\n";
|
|
|
|
|
$string = $string . "\"Language-Team: Colosa Developers Team <developers@colosa.com>\\n\"\n";
|
|
|
|
|
$string = $string . "\"MIME-Version: 1.0\\n\"\n";
|
|
|
|
|
$string = $string . "\"Content-Type: text/plain; charset=utf-8\\n\"\n";
|
|
|
|
|
$string = $string . "\"Content-Transfer_Encoding: 8bit\\n\"\n";
|
|
|
|
|
$string = $string . "\"X-Poedit-Language: English\\n\"\n";
|
|
|
|
|
$string = $string . "\"X-Poedit-Country: United States\\n\"\n";
|
|
|
|
|
$string = $string . "\"X-Poedit-SourceCharset: utf-8\\n\"\n";
|
|
|
|
|
$string = $string . "\"Content-Transfer-Encoding: 8bit\\n\"\n";
|
|
|
|
|
$string = $string . "\"File-Name: processmaker.en.po\\n\"\n\n";
|
|
|
|
|
|
|
|
|
|
$n = count($this->dyn_conten_labels);
|
|
|
|
|
for ($i = 0; $i < $n; $i++) {
|
|
|
|
|
$string = $string . "msgid \"" . $this->dyn_conten_labels[$i] . "\"\n";
|
|
|
|
|
$string = $string . "msgstr \"" . $this->dyn_conten_labels[$i] . "\"\n\n";
|
|
|
|
|
}
|
|
|
|
|
return array("labels" => $string, "lang" => $lang);
|
|
|
|
|
} else {
|
|
|
|
|
$a = new Criteria("workflow");
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_LABEL);
|
|
|
|
|
$a->add(DynaformPeer::DYN_UID, $dyn_uid, Criteria::EQUAL);
|
|
|
|
|
$ds = ProcessPeer::doSelectRS($a);
|
|
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$ds->next();
|
|
|
|
|
$row = $ds->getRow();
|
|
|
|
|
$data = G::json_decode($row["DYN_LABEL"]);
|
|
|
|
|
$string = "";
|
|
|
|
|
$string = $string . "msgid \"\"\n";
|
|
|
|
|
$string = $string . "msgstr \"\"\n";
|
|
|
|
|
foreach ($data->{$lang} as $key => $value) {
|
|
|
|
|
if (is_string($value)) {
|
|
|
|
|
$string = $string . "\"" . $key . ": " . $value . "\\n\"\n";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$string = $string . "\n";
|
|
|
|
|
foreach ($data->{$lang}->Labels as $key => $value) {
|
|
|
|
|
$string = $string . "msgid \"" . $value->msgid . "\"\n";
|
|
|
|
|
$string = $string . "msgstr \"" . $value->msgstr . "\"\n\n";
|
|
|
|
|
}
|
|
|
|
|
return array("labels" => $string, "lang" => $lang);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function uploadLanguage($dyn_uid)
|
|
|
|
|
{
|
|
|
|
|
if (!isset($_FILES["LANGUAGE"])) {
|
|
|
|
|
throw new Exception(G::LoadTranslation("ID_ERROR_UPLOADING_FILENAME"));
|
|
|
|
|
}
|
|
|
|
|
if (pathinfo($_FILES["LANGUAGE"]["name"], PATHINFO_EXTENSION) != "po") {
|
|
|
|
|
throw new Exception(G::LoadTranslation("ID_FILE_UPLOAD_INCORRECT_EXTENSION"));
|
|
|
|
|
}
|
|
|
|
|
$translation = array();
|
2017-02-15 16:26:02 +00:00
|
|
|
|
2015-04-03 14:31:32 -04:00
|
|
|
$i18n = new i18n_PO($_FILES["LANGUAGE"]["tmp_name"]);
|
|
|
|
|
$i18n->readInit();
|
|
|
|
|
while ($rowTranslation = $i18n->getTranslation()) {
|
|
|
|
|
array_push($translation, $rowTranslation);
|
|
|
|
|
}
|
|
|
|
|
$name = $_FILES["LANGUAGE"]["name"];
|
|
|
|
|
$name = explode(".", $name);
|
|
|
|
|
if (isset($name[1]) && isset($name[2]) && $name[1] . "." . $name[2] === "en.po") {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$content = $i18n->getHeaders();
|
|
|
|
|
$content["File-Name"] = $_FILES["LANGUAGE"]["name"];
|
|
|
|
|
$content["Labels"] = $translation;
|
|
|
|
|
|
|
|
|
|
$con = Propel::getConnection(DynaformPeer::DATABASE_NAME);
|
|
|
|
|
$con->begin();
|
|
|
|
|
$oPro = DynaformPeer::retrieveByPk($dyn_uid);
|
|
|
|
|
|
|
|
|
|
$dyn_labels = new stdClass();
|
|
|
|
|
if ($oPro->getDynLabel() !== null && $oPro->getDynLabel() !== "") {
|
|
|
|
|
$dyn_labels = G::json_decode($oPro->getDynLabel());
|
|
|
|
|
}
|
2017-12-04 13:25:35 +00:00
|
|
|
$dyn_labels->{$name[count($name) - 2]} = $content;
|
2015-04-03 14:31:32 -04:00
|
|
|
|
|
|
|
|
$oPro->setDynLabel(G::json_encode($dyn_labels));
|
|
|
|
|
$oPro->save();
|
|
|
|
|
$con->commit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function listLanguage($dyn_uid)
|
|
|
|
|
{
|
|
|
|
|
$list = array();
|
|
|
|
|
$a = new Criteria("workflow");
|
|
|
|
|
$a->addSelectColumn(DynaformPeer::DYN_LABEL);
|
|
|
|
|
$a->add(DynaformPeer::DYN_UID, $dyn_uid, Criteria::EQUAL);
|
|
|
|
|
$ds = ProcessPeer::doSelectRS($a);
|
|
|
|
|
$ds->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$ds->next();
|
|
|
|
|
$row = $ds->getRow();
|
|
|
|
|
|
|
|
|
|
if ($row["DYN_LABEL"] === null || $row["DYN_LABEL"] === "") {
|
|
|
|
|
return $list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$dyn_label = \G::json_decode($row["DYN_LABEL"]);
|
|
|
|
|
foreach ($dyn_label as $key => $value) {
|
|
|
|
|
array_push($list, array(
|
|
|
|
|
"Lang" => $key,
|
|
|
|
|
"File-Name" => isset($value->{"File-Name"}) ? $value->{"File-Name"} : "",
|
|
|
|
|
"Project-Id-Version" => isset($value->{"Project-Id-Version"}) ? $value->{"Project-Id-Version"} : "",
|
|
|
|
|
"POT-Creation-Date" => isset($value->{"POT-Creation-Date"}) ? $value->{"POT-Creation-Date"} : "",
|
|
|
|
|
"PO-Revision-Date" => isset($value->{"PO-Revision-Date"}) ? $value->{"PO-Revision-Date"} : "",
|
|
|
|
|
"Last-Translator" => isset($value->{"Last-Translator"}) ? $value->{"Last-Translator"} : "",
|
|
|
|
|
"Language-Team" => isset($value->{"Language-Team"}) ? $value->{"Language-Team"} : "",
|
|
|
|
|
"MIME-Version" => isset($value->{"MIME-Version"}) ? $value->{"MIME-Version"} : "",
|
|
|
|
|
"Content-Type" => isset($value->{"Content-Type"}) ? $value->{"Content-Type"} : "",
|
|
|
|
|
"Content-Transfer_Encoding" => isset($value->{"Content-Transfer_Encoding"}) ? $value->{"Content-Transfer_Encoding"} : "",
|
|
|
|
|
"X-Poedit-Language" => isset($value->{"X-Poedit-Language"}) ? $value->{"X-Poedit-Language"} : "",
|
|
|
|
|
"X-Poedit-Country" => isset($value->{"X-Poedit-Country"}) ? $value->{"X-Poedit-Country"} : "",
|
|
|
|
|
"X-Poedit-SourceCharset" => isset($value->{"X-Poedit-SourceCharset"}) ? $value->{"X-Poedit-SourceCharset"} : "",
|
|
|
|
|
"Content-Transfer-Encoding" => isset($value->{"Content-Transfer-Encoding"}) ? $value->{"Content-Transfer-Encoding"} : ""
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
return $list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private $dyn_conten_labels = array();
|
|
|
|
|
|
|
|
|
|
private function jsonl(&$json)
|
|
|
|
|
{
|
|
|
|
|
foreach ($json as $key => $value) {
|
|
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
|
|
|
|
$this->jsonl($value);
|
|
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
|
|
|
|
if ($key === "label") {
|
|
|
|
|
array_push($this->dyn_conten_labels, $json->label);
|
|
|
|
|
}
|
2015-04-06 10:23:47 -04:00
|
|
|
if ($key === "hint") {
|
|
|
|
|
array_push($this->dyn_conten_labels, $json->hint);
|
|
|
|
|
}
|
|
|
|
|
if ($key === "placeholder") {
|
|
|
|
|
array_push($this->dyn_conten_labels, $json->placeholder);
|
|
|
|
|
}
|
|
|
|
|
if ($key === "validateMessage") {
|
|
|
|
|
array_push($this->dyn_conten_labels, $json->validateMessage);
|
|
|
|
|
}
|
|
|
|
|
if ($key === "alternateText") {
|
|
|
|
|
array_push($this->dyn_conten_labels, $json->alternateText);
|
|
|
|
|
}
|
|
|
|
|
if ($key === "comment") {
|
|
|
|
|
array_push($this->dyn_conten_labels, $json->comment);
|
|
|
|
|
}
|
|
|
|
|
if ($key === "alt") {
|
|
|
|
|
array_push($this->dyn_conten_labels, $json->alt);
|
|
|
|
|
}
|
2015-04-03 14:31:32 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function deleteLanguage($dyn_uid, $lang)
|
|
|
|
|
{
|
|
|
|
|
$con = Propel::getConnection(DynaformPeer::DATABASE_NAME);
|
|
|
|
|
$con->begin();
|
|
|
|
|
$oPro = DynaformPeer::retrieveByPk($dyn_uid);
|
|
|
|
|
|
|
|
|
|
$dyn_labels = \G::json_decode($oPro->getDynLabel());
|
|
|
|
|
unset($dyn_labels->{$lang});
|
|
|
|
|
|
|
|
|
|
$oPro->setDynLabel(G::json_encode($dyn_labels));
|
|
|
|
|
$oPro->save();
|
|
|
|
|
$con->commit();
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-07 08:56:49 -04:00
|
|
|
/**
|
|
|
|
|
* Remove the posted values that are not in the definition of Dynaform.
|
2017-11-28 09:43:16 -04:00
|
|
|
*
|
2016-03-07 08:56:49 -04:00
|
|
|
* @param array $post
|
2017-11-28 09:43:16 -04:00
|
|
|
*
|
2016-03-07 08:56:49 -04:00
|
|
|
* @return array
|
|
|
|
|
*/
|
2017-11-28 09:43:16 -04:00
|
|
|
public function validatePost($post = [])
|
2016-03-07 08:56:49 -04:00
|
|
|
{
|
2016-03-14 09:22:59 -04:00
|
|
|
$result = array();
|
|
|
|
|
$previusFunction = $this->onPropertyRead;
|
2017-12-04 13:25:35 +00:00
|
|
|
$this->onPropertyRead = function ($json, $key, $value) use (&$post) {
|
2016-03-14 09:22:59 -04:00
|
|
|
if ($key === "type" && isset($json->variable) && !empty($json->variable)) {
|
2017-11-29 11:51:24 -04:00
|
|
|
//clears the data in the appData for grids
|
|
|
|
|
$isThereIdIntoPost = array_key_exists($json->id, $post);
|
|
|
|
|
$isThereIdIntoFields = array_key_exists($json->id, $this->fields);
|
|
|
|
|
if ($json->type === 'grid' && !$isThereIdIntoPost && $isThereIdIntoFields) {
|
2017-11-28 09:43:16 -04:00
|
|
|
$post[$json->variable] = [[]];
|
|
|
|
|
}
|
|
|
|
|
//validate 'protectedValue' property
|
2016-03-14 09:22:59 -04:00
|
|
|
if (isset($json->protectedValue) && $json->protectedValue === true) {
|
2017-11-29 11:51:24 -04:00
|
|
|
if (isset($this->fields[$json->variable])) {
|
|
|
|
|
$post[$json->variable] = $this->fields[$json->variable];
|
2016-03-14 09:22:59 -04:00
|
|
|
}
|
2017-11-29 11:51:24 -04:00
|
|
|
if (isset($this->fields[$json->variable . "_label"])) {
|
|
|
|
|
$post[$json->variable . "_label"] = $this->fields[$json->variable . "_label"];
|
2016-03-07 08:56:49 -04:00
|
|
|
}
|
|
|
|
|
}
|
2016-03-14 09:22:59 -04:00
|
|
|
//validator data
|
2017-11-29 11:51:24 -04:00
|
|
|
$validatorClass = ValidatorFactory::createValidatorClass($json->type, $json);
|
2016-03-14 09:22:59 -04:00
|
|
|
if ($validatorClass !== null) {
|
|
|
|
|
$validatorClass->validatePost($post);
|
|
|
|
|
}
|
2016-03-07 08:56:49 -04:00
|
|
|
}
|
2016-03-14 09:22:59 -04:00
|
|
|
};
|
|
|
|
|
$json = G::json_decode($this->record["DYN_CONTENT"]);
|
|
|
|
|
$this->jsonr($json);
|
|
|
|
|
$this->onPropertyRead = $previusFunction;
|
2016-03-07 08:56:49 -04:00
|
|
|
return $post;
|
|
|
|
|
}
|
|
|
|
|
|
2014-08-29 11:19:14 -04:00
|
|
|
private function clientToken()
|
|
|
|
|
{
|
|
|
|
|
$client = $this->getClientCredentials();
|
|
|
|
|
$authCode = $this->getAuthorizationCode($client);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$request = array(
|
|
|
|
|
'grant_type' => 'authorization_code',
|
|
|
|
|
'code' => $authCode
|
|
|
|
|
);
|
|
|
|
|
$server = array(
|
|
|
|
|
'REQUEST_METHOD' => 'POST'
|
|
|
|
|
);
|
|
|
|
|
$headers = array(
|
|
|
|
|
"PHP_AUTH_USER" => $client['CLIENT_ID'],
|
|
|
|
|
"PHP_AUTH_PW" => $client['CLIENT_SECRET'],
|
|
|
|
|
"Content-Type" => "multipart/form-data;",
|
|
|
|
|
"Authorization" => "Basic " . base64_encode($client['CLIENT_ID'] . ":" . $client['CLIENT_SECRET'])
|
|
|
|
|
);
|
2014-08-01 13:06:51 -04:00
|
|
|
|
2014-08-29 11:19:14 -04:00
|
|
|
$request = new \OAuth2\Request(array(), $request, array(), array(), array(), $server, null, $headers);
|
|
|
|
|
$oauthServer = new \ProcessMaker\Services\OAuth2\Server();
|
|
|
|
|
$response = $oauthServer->getServer()->handleTokenRequest($request);
|
|
|
|
|
$clientToken = $response->getParameters();
|
|
|
|
|
$clientToken["client_id"] = $client['CLIENT_ID'];
|
|
|
|
|
$clientToken["client_secret"] = $client['CLIENT_SECRET'];
|
|
|
|
|
|
|
|
|
|
return $clientToken;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected $clientId = 'x-pm-local-client';
|
|
|
|
|
|
|
|
|
|
protected function getClientCredentials()
|
|
|
|
|
{
|
|
|
|
|
$oauthQuery = new ProcessMaker\Services\OAuth2\PmPdo($this->getDsn());
|
|
|
|
|
return $oauthQuery->getClientDetails($this->clientId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected function getAuthorizationCode($client)
|
|
|
|
|
{
|
|
|
|
|
\ProcessMaker\Services\OAuth2\Server::setDatabaseSource($this->getDsn());
|
|
|
|
|
\ProcessMaker\Services\OAuth2\Server::setPmClientId($client['CLIENT_ID']);
|
|
|
|
|
|
|
|
|
|
$oauthServer = new \ProcessMaker\Services\OAuth2\Server();
|
|
|
|
|
$userId = $_SESSION['USER_LOGGED'];
|
|
|
|
|
$authorize = true;
|
|
|
|
|
$_GET = array_merge($_GET, array(
|
|
|
|
|
'response_type' => 'code',
|
|
|
|
|
'client_id' => $client['CLIENT_ID'],
|
|
|
|
|
'scope' => implode(' ', $oauthServer->getScope())
|
|
|
|
|
));
|
|
|
|
|
|
2016-03-18 12:15:38 -04:00
|
|
|
$response = $oauthServer->postAuthorize($authorize, $userId, true, array('USER_LOGGED' => $_SESSION['USER_LOGGED']));
|
2014-08-29 11:19:14 -04:00
|
|
|
$code = substr($response->getHttpHeader('Location'), strpos($response->getHttpHeader('Location'), 'code=') + 5, 40);
|
|
|
|
|
|
|
|
|
|
return $code;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function getDsn()
|
|
|
|
|
{
|
|
|
|
|
list($host, $port) = strpos(DB_HOST, ':') !== false ? explode(':', DB_HOST) : array(DB_HOST, '');
|
|
|
|
|
$port = empty($port) ? '' : ";port=$port";
|
|
|
|
|
$dsn = DB_ADAPTER . ':host=' . $host . ';dbname=' . DB_NAME . $port;
|
|
|
|
|
|
|
|
|
|
return array('dsn' => $dsn, 'username' => DB_USER, 'password' => DB_PASS);
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-07 18:10:01 -04:00
|
|
|
/**
|
|
|
|
|
* Returns the value converted to string if it is not null.
|
HOR-433 "(WSSO Plugin) Cuando se ingresa al proceso, se..." SOLVED
Issue:
(WSSO Plugin) Cuando se ingresa al proceso, se puede verificar que no se puede recuperar la data del mismo
Cause:
Se esta usando el mismo VirtualHost para clientes WEB y REST
Solution:
Se realizo la implementacion de la nueva directiva "server_hostname_requests_frontend" del "env.ini"; esto para
el caso en que se requiera del "feature SSO", tomar nota de lo siguiente:
- Habilitar el modulo "mod_headers" de apache (httpd.conf)
- Tener configurado un VirtualHost normal para ProcessMaker (pmos.conf)
- Para el "feature SSO" se debera crear un 2do VirtualHost con toda la configuracion necesaria para
el mismo (pmos.conf), por lo que todos los usuarios que requieran este feature, deberan usar este para
acceder por browser
- Crear un 3er VirtualHost para las solicitudes del front-end (DESIGNER), en donde se agregara lo
siguiente (pmos.conf):
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Content-Type,Depth,User-Agent,X-File-Size,X-Requested-With,If-Modified-Since,X-File-Name,Cache-Control,Authorization"
Header set Access-Control-Allow-Methods "OPTIONS,GET,POST,PUT,DELETE"
</IfModule>
De tal forma que quedara asi:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Content-Type,Depth,User-Agent,X-File-Size,X-Requested-With,If-Modified-Since,X-File-Name,Cache-Control,Authorization"
Header set Access-Control-Allow-Methods "OPTIONS,GET,POST,PUT,DELETE"
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*/(.*)$ app.php [QSA,L,NC]
</IfModule>
- Agregar lo siguiente al archivo "/path/to/processmaker/shared/sites/your-workspace/env.ini"
server_hostname_requests_frontend = "{your_server_hostname_requests_frontend}"
Donde:
- your_server_hostname_requests_frontend, es el nombre del servidor configurado para el
front-end (3er VirtualHost), ejemplo:
server_hostname_requests_frontend = "192.168.40.72:3017"
- Tambien se puede hacer la configuracion en el archivo "/path/to/processmaker/workflow/engine/config/env.ini",
considerar que esto afectara a todos lo workspaces creados
Note:
Todo el desarrollo se lo hizo en un server Windows-Server-2012-R2 con Apache-2.4
2016-03-17 08:45:23 -04:00
|
|
|
*
|
2016-03-07 18:10:01 -04:00
|
|
|
* @param string $string
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
private function toStringNotNullValues($value)
|
|
|
|
|
{
|
|
|
|
|
if (is_null($value)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
return (string) $value;
|
|
|
|
|
}
|
|
|
|
|
|
2016-06-15 17:03:07 -04:00
|
|
|
/**
|
|
|
|
|
* Get grids and fields
|
|
|
|
|
*
|
|
|
|
|
* @param mixed $form
|
|
|
|
|
* @param bool $flagGridAssocToVar
|
|
|
|
|
*
|
|
|
|
|
* @return array Return an array, FALSE otherwise
|
|
|
|
|
*/
|
|
|
|
|
public static function getGridsAndFields($form, $flagGridAssocToVar = true)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
if (!is_object($form)) {
|
|
|
|
|
//This code it runs only in the first call to the method
|
|
|
|
|
$object = \ProcessMaker\Util\Common::stringToJson($form);
|
|
|
|
|
|
|
|
|
|
if ($object !== false) {
|
|
|
|
|
$form = $object->items[0];
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$arrayGrid = [];
|
|
|
|
|
|
|
|
|
|
foreach ($form->items as $value) {
|
|
|
|
|
foreach ($value as $value2) {
|
|
|
|
|
$field = $value2;
|
|
|
|
|
|
|
|
|
|
if (isset($field->type)) {
|
|
|
|
|
switch ($field->type) {
|
|
|
|
|
case 'grid':
|
|
|
|
|
$flagInsert = ($flagGridAssocToVar)? (isset($field->var_uid) && $field->var_uid != '' && isset($field->variable) && $field->variable != '') : true;
|
|
|
|
|
|
|
|
|
|
if ($flagInsert) {
|
|
|
|
|
$arrayGrid[$field->id] = $field;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'form':
|
|
|
|
|
$arrayGrid = array_merge(
|
2017-12-04 13:25:35 +00:00
|
|
|
$arrayGrid,
|
|
|
|
|
self::getGridsAndFields($field, $flagGridAssocToVar)
|
2016-06-15 17:03:07 -04:00
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $arrayGrid;
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-08-29 18:18:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns a string containing the JSON representation of the object
|
|
|
|
|
*
|
|
|
|
|
* @param object $json The object being encoded
|
|
|
|
|
*
|
|
|
|
|
* @return string Returns a string
|
|
|
|
|
*/
|
|
|
|
|
public function json_encode($json)
|
|
|
|
|
{
|
|
|
|
|
$jsonData = G::json_encode($json);
|
|
|
|
|
|
|
|
|
|
if ($jsonData === false) {
|
|
|
|
|
$jsonLastError = json_last_error();
|
|
|
|
|
$jsonLastErrorMsg = json_last_error_msg();
|
|
|
|
|
$token = time();
|
|
|
|
|
|
|
|
|
|
$obj = new stdClass();
|
|
|
|
|
$obj->type = 'panel';
|
|
|
|
|
$obj->id = '__json_encode_error__';
|
|
|
|
|
$obj->content = '
|
|
|
|
|
<div style="border: 1px solid #9A3A1F; background: #F7DBCE; color: #8C0000; font:0.9em arial, verdana, helvetica, sans-serif;">
|
|
|
|
|
<div style="margin: 0.5em;">
|
|
|
|
|
<img src="/images/documents/_log_error.png" alt="" style="margin-right: 0.8em; vertical-align: middle;" />' .
|
|
|
|
|
G::LoadTranslation('ID_EXCEPTION_LOG_INTERFAZ', [$token]) .
|
|
|
|
|
'</div></div>';
|
|
|
|
|
$obj->border = 0;
|
|
|
|
|
|
|
|
|
|
$json->items[0]->items = [[$obj]];
|
|
|
|
|
|
|
|
|
|
$jsonData = G::json_encode($json);
|
|
|
|
|
|
|
|
|
|
//Log
|
|
|
|
|
\Bootstrap::registerMonolog(
|
|
|
|
|
'RenderDynaForm',
|
|
|
|
|
400,
|
|
|
|
|
'JSON encoded string error ' . $jsonLastError . ': ' . $jsonLastErrorMsg,
|
|
|
|
|
['token' => $token, 'projectUid' => $this->record['PRO_UID'], 'dynaFormUid' => $this->record['DYN_UID']],
|
2017-10-10 12:33:25 -04:00
|
|
|
config("system.workspace"),
|
2016-08-29 18:18:34 -04:00
|
|
|
'processmaker.log'
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $jsonData;
|
|
|
|
|
}
|
2016-12-02 14:14:18 -04:00
|
|
|
|
|
|
|
|
public function getLeaveCaseWarning()
|
|
|
|
|
{
|
|
|
|
|
return defined("LEAVE_CASE_WARNING") ? LEAVE_CASE_WARNING : 0;
|
|
|
|
|
}
|
|
|
|
|
|
2017-03-07 10:43:00 -04:00
|
|
|
/**
|
|
|
|
|
* Unset a json property from the following controls: text, textarea, dropdown,
|
|
|
|
|
* checkbox, checkgroup, radio, datetime, suggest, hidden, file, grid.
|
|
|
|
|
* @param stdClass $json
|
|
|
|
|
* @param string $property
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function jsonUnsetProperty(&$json, $property)
|
|
|
|
|
{
|
|
|
|
|
if (empty($json)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
foreach ($json as $key => &$value) {
|
|
|
|
|
$sw1 = is_array($value);
|
|
|
|
|
$sw2 = is_object($value);
|
|
|
|
|
if ($sw1 || $sw2) {
|
|
|
|
|
$this->jsonUnsetProperty($value, $property);
|
|
|
|
|
}
|
|
|
|
|
if (!$sw1 && !$sw2) {
|
|
|
|
|
if ($key === "type" && (
|
|
|
|
|
$value === "text" ||
|
|
|
|
|
$value === "textarea" ||
|
|
|
|
|
$value === "dropdown" ||
|
|
|
|
|
$value === "checkbox" ||
|
|
|
|
|
$value === "checkgroup" ||
|
|
|
|
|
$value === "radio" ||
|
|
|
|
|
$value === "datetime" ||
|
|
|
|
|
$value === "suggest" ||
|
|
|
|
|
$value === "hidden" ||
|
|
|
|
|
$value === "file" ||
|
2017-12-04 13:25:35 +00:00
|
|
|
$value === "grid"
|
|
|
|
|
)) {
|
2017-03-07 10:43:00 -04:00
|
|
|
if ($value === "grid" && $property === "data") {
|
|
|
|
|
$json->{$property} = [];
|
|
|
|
|
} else {
|
|
|
|
|
unset($json->{$property});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-23 15:01:21 -04:00
|
|
|
/**
|
|
|
|
|
* Returns an array with the basic fields of the Exception class. It isn't returned any extra fields information
|
|
|
|
|
* of any derivated Exception class. This way we have a lightweight version of the exception data that can
|
|
|
|
|
* be used when logging the exception, for example.
|
|
|
|
|
* @param $e an Exception class derivate
|
2017-10-24 10:48:01 -04:00
|
|
|
* @param $sql query that was executed when the exception was generated
|
2017-10-23 15:01:21 -04:00
|
|
|
* @return array
|
|
|
|
|
*/
|
2017-10-24 10:01:38 -04:00
|
|
|
private function basicExceptionData($e, $sql)
|
2017-10-23 15:01:21 -04:00
|
|
|
{
|
|
|
|
|
$result = [];
|
|
|
|
|
$result['code'] = $e->getCode();
|
|
|
|
|
$result['file'] = $e->getFile();
|
|
|
|
|
$result['line'] = $e->getLine();
|
|
|
|
|
$result['message'] = $e->getMessage();
|
2017-10-24 10:01:38 -04:00
|
|
|
$result['nativeQuery'] = $sql;
|
2017-10-23 16:38:42 -04:00
|
|
|
|
|
|
|
|
if (property_exists($e, 'nativeError')) {
|
|
|
|
|
$result['nativeError'] = $e->getNativeError();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (property_exists($e, 'userInfo')) {
|
2017-10-24 10:01:38 -04:00
|
|
|
$result['userInfo'] = $e->getUserInfo();
|
2017-10-23 16:38:42 -04:00
|
|
|
}
|
|
|
|
|
|
2017-10-23 15:01:21 -04:00
|
|
|
return $result;
|
|
|
|
|
}
|
2018-10-15 15:08:52 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get the string variable for google maps
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
private function getTheStringVariableForGoogleMaps()
|
|
|
|
|
{
|
|
|
|
|
$config = Bootstrap::getSystemConfiguration();
|
|
|
|
|
$googleMaps = new stdClass();
|
|
|
|
|
$googleMaps->key = $config['google_map_api_key'];
|
|
|
|
|
$googleMaps->signature = $config['google_map_signature'];
|
|
|
|
|
$result = 'var googleMaps = ' . G::json_encode($googleMaps) . ';';
|
|
|
|
|
return $result;
|
|
|
|
|
}
|
2015-03-24 16:15:19 -04:00
|
|
|
}
|