diff --git a/Rakefile b/Rakefile index 6794d1e2e..a43a131b5 100644 --- a/Rakefile +++ b/Rakefile @@ -192,7 +192,7 @@ def buildPmdynaform(homeDir, targetDir, mode) template += s end - htmlTemplates=["cases_Step_Pmdynaform.html","cases_Step_Pmdynaform_Preview.html","cases_Step_Pmdynaform_View.html"] + htmlTemplates=["cases_Step_Pmdynaform.html","cases_Step_Pmdynaform_Preview.html","cases_Step_Pmdynaform_View.html","WebEntry_Pmdynaform.html"] htmlTemplates.each do |htmlTemplate| FileUtils.cp("#{Dir.pwd}/workflow/engine/templates/cases/#{htmlTemplate}", "#{pmdynaformDir}/build/#{htmlTemplate}") diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index d45c6f9d1..8b1b05123 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -17,67 +17,77 @@ class pmDynaform public $items = array(); public $data = array(); public $variables = array(); + public $arrayFieldRequired = array(); - public function __construct($dyn_uid, $app_data) - { + public function __construct($dyn_uid, $app_data = array()) + { $this->dyn_uid = $dyn_uid; $this->app_data = $app_data; $this->getDynaform(); - + //items $dynContent = G::json_decode($this->record["DYN_CONTENT"]); if (isset($dynContent->items)) { - $this->items = $dynContent->items[0]->items; - } - - //data - $cases = new \ProcessMaker\BusinessModel\Cases(); - $this->data = $cases->getCaseVariables($app_data["APPLICATION"]); - - //variables - $this->variables = array(); - - $a = new Criteria("workflow"); - $a->addSelectColumn(ProcessVariablesPeer::VAR_NAME); - $a->addSelectColumn(ProcessVariablesPeer::VAR_SQL); - $a->addSelectColumn(ProcessVariablesPeer::VAR_ACCEPTED_VALUES); - $a->addSelectColumn(ProcessVariablesPeer::VAR_DBCONNECTION); - - $c3 = $a->getNewCriterion(ProcessVariablesPeer::VAR_ACCEPTED_VALUES, "", Criteria::ALT_NOT_EQUAL); - $c2 = $a->getNewCriterion(ProcessVariablesPeer::VAR_ACCEPTED_VALUES, "[]", Criteria::ALT_NOT_EQUAL); - $c2->addAnd($c3); - - $c4 = $a->getNewCriterion(ProcessVariablesPeer::PRJ_UID, $this->app_data["PROCESS"], Criteria::EQUAL); - - $c1 = $a->getNewCriterion(ProcessVariablesPeer::VAR_SQL, "", Criteria::ALT_NOT_EQUAL); - $c1->addOr($c2); - $c1->addAnd($c4); - - $a->add($c1); - - $ds = ProcessPeer::doSelectRS($a); - $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while ($ds->next()) { - $row = $ds->getRow(); - //options - $rows2 = json_decode($row["VAR_ACCEPTED_VALUES"]); - $n = count($rows2); - for ($i = 0; $i < $n; $i++) { - $rows2[$i] = array($rows2[$i]->keyValue, $rows2[$i]->value); - } - //query - $arrayVariable = array(); - if ($row["VAR_DBCONNECTION"] !== "none") { - $cnn = Propel::getConnection($row["VAR_DBCONNECTION"]); - $stmt = $cnn->createStatement(); - $rs = $stmt->executeQuery(\G::replaceDataField($row["VAR_SQL"], $arrayVariable), \ResultSet::FETCHMODE_NUM); - while ($rs->next()) { - array_push($rows2, $rs->getRow()); + $this->items = $dynContent->items[0]->items; + for($i=0; $iitems); $i++){ + for($j=0; $jitems[$i]); $j++){ + if($this->items[$i][$j]->required == 1){ + array_push($this->arrayFieldRequired, $this->items[$i][$j]->name); + } } - } - $this->variables[$row["VAR_NAME"]] = $rows2; + } } + if(!empty($app_data)){ + //data + $cases = new \ProcessMaker\BusinessModel\Cases(); + $this->data = $cases->getCaseVariables($app_data["APPLICATION"]); + + //variables + $this->variables = array(); + + $a = new Criteria("workflow"); + $a->addSelectColumn(ProcessVariablesPeer::VAR_NAME); + $a->addSelectColumn(ProcessVariablesPeer::VAR_SQL); + $a->addSelectColumn(ProcessVariablesPeer::VAR_ACCEPTED_VALUES); + $a->addSelectColumn(ProcessVariablesPeer::VAR_DBCONNECTION); + + $c3 = $a->getNewCriterion(ProcessVariablesPeer::VAR_ACCEPTED_VALUES, "", Criteria::ALT_NOT_EQUAL); + $c2 = $a->getNewCriterion(ProcessVariablesPeer::VAR_ACCEPTED_VALUES, "[]", Criteria::ALT_NOT_EQUAL); + $c2->addAnd($c3); + + $c4 = $a->getNewCriterion(ProcessVariablesPeer::PRJ_UID, $this->app_data["PROCESS"], Criteria::EQUAL); + + $c1 = $a->getNewCriterion(ProcessVariablesPeer::VAR_SQL, "", Criteria::ALT_NOT_EQUAL); + $c1->addOr($c2); + $c1->addAnd($c4); + + $a->add($c1); + + $ds = ProcessPeer::doSelectRS($a); + $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + while ($ds->next()) { + $row = $ds->getRow(); + //options + $rows2 = G::json_decode($row["VAR_ACCEPTED_VALUES"]); + $n = count($rows2); + for ($i = 0; $i < $n; $i++) { + $rows2[$i] = array($rows2[$i]->keyValue, $rows2[$i]->value); + } + //query + $arrayVariable = array(); + if ($row["VAR_DBCONNECTION"] !== "none") { + $cnn = Propel::getConnection($row["VAR_DBCONNECTION"]); + $stmt = $cnn->createStatement(); + $rs = $stmt->executeQuery(\G::replaceDataField($row["VAR_SQL"], $arrayVariable), \ResultSet::FETCHMODE_NUM); + while ($rs->next()) { + array_push($rows2, $rs->getRow()); + } + } + $this->variables[$row["VAR_NAME"]] = $rows2; + } + } + } public function getDynaform() @@ -94,7 +104,7 @@ class pmDynaform $ds = ProcessPeer::doSelectRS($a); $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); $ds->next(); - $row = $ds->getRow(); + $row = $ds->getRow(); $this->record = isset($row) ? $row : null; return $this->record; @@ -238,7 +248,34 @@ class pmDynaform $file = str_replace("{PRJ_UID}", $this->app_data["PROCESS"], $file); $file = str_replace("{STEP_MODE}", $step_mode, $file); $file = str_replace("{WORKSPACE}", $this->app_data["SYS_SYS"], $file); - $file = str_replace("{credentials}", json_encode($clientToken), $file); + $file = str_replace("{PORT}", $_SERVER["SERVER_PORT"] , $file); + $file = str_replace("{credentials}", G::json_encode($clientToken), $file); + echo $file; + exit(); + } + + public function printWebEntry($filename) + { + ob_clean(); + $a = $this->clientToken(); + $clientToken = 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"] + ); + $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/WebEntry_Pmdynaform.html'); + $file = str_replace("{JSON_DATA}", $this->record["DYN_CONTENT"], $file); + $file = str_replace("{DYN_UID}", $this->dyn_uid, $file); + $file = str_replace("{PRJ_UID}",$this->record["PRO_UID"], $file); + $file = str_replace("{WORKSPACE}", SYS_SYS, $file); + $file = str_replace("{FILEPOST}", $filename, $file); + $file = str_replace("{PORT}", $_SERVER["SERVER_PORT"] , $file); + $file = str_replace("{credentials}", G::json_encode($clientToken), $file); + $file = str_replace("{FIELDSREQUIRED}", G::json_encode($this->arrayFieldRequired), $file); echo $file; exit(); } diff --git a/workflow/engine/js/cases/core/cases_Step_Pmdynaform.js b/workflow/engine/js/cases/core/cases_Step_Pmdynaform.js index ababad45f..0f6af810f 100644 --- a/workflow/engine/js/cases/core/cases_Step_Pmdynaform.js +++ b/workflow/engine/js/cases/core/cases_Step_Pmdynaform.js @@ -49,7 +49,7 @@ $(window).load(function () { submitRest: false }); new PMDynaform.core.Proxy({ - url: "http://" + window.project.keys.server + "/" + window.project.keys.apiName + "/" + window.project.keys.apiVersion + "/" + window.project.keys.workspace + "/cases/" + app_uid + "/variables", + url: "http://" + window.project.keys.server + ":"+port +"/" + window.project.keys.apiName + "/" + window.project.keys.apiVersion + "/" + window.project.keys.workspace + "/cases/" + app_uid + "/variables", method: 'GET', data: {}, keys: window.project.token, diff --git a/workflow/engine/js/cases/core/webentry_pmdynaform.js b/workflow/engine/js/cases/core/webentry_pmdynaform.js new file mode 100644 index 000000000..3fb7228f5 --- /dev/null +++ b/workflow/engine/js/cases/core/webentry_pmdynaform.js @@ -0,0 +1,86 @@ +function dynaFormChanged(frm) { + for (var i1 = 0; i1 <= frm.elements.length - 1; i1++) { + if ((frm.elements[i1].type === "radio" || frm.elements[i1].type === "checkbox") && (frm.elements[i1].checked !== frm.elements[i1].defaultChecked)) { + return true; + } + if ((frm.elements[i1].type === "textarea" || frm.elements[i1].type === "text" || frm.elements[i1].type === "file") && (frm.elements[i1].value !== frm.elements[i1].defaultValue)) { + return true; + } + if (frm.elements[i1].tagName.toLowerCase() === "select") { + var selectDefaultValue = frm.elements[i1].value; + for (var i2 = 0; i2 <= frm.elements[i1].options.length - 1; i2++) { + if (frm.elements[i1].options[i2].defaultSelected) { + selectDefaultValue = frm.elements[i1].options[i2].value; + break; + } + } + if (frm.elements[i1].value !== selectDefaultValue) { + return true; + } + } + } + return false; +} +$(window).load(function () { + if ((navigator.userAgent.indexOf("MSIE") !== -1) || (navigator.userAgent.indexOf("Trident") !== -1)) { + document.body.innerHTML = "
Responsive Dynaforms are not supported in this browser.
"; + return; + } + var data = jsondata; + window.project = new PMDynaform.core.Project({ + data: data, + keys: { + server: location.host, + projectId: prj_uid, + workspace: workspace + }, + token: credentials, + submitRest: false + }); + + var type = document.createElement("input"); + type.type = "hidden"; + type.name = "TYPE"; + type.value = "ASSIGN_TASK"; + var uid = document.createElement("input"); + uid.type = "hidden"; + uid.name = "UID"; + uid.value = dyn_uid; + var position = document.createElement("input"); + position.type = "hidden"; + position.name = "POSITION"; + position.value = "10000"; + var action = document.createElement("input"); + action.type = "hidden"; + action.name = "ACTION"; + action.value = "ASSIGN"; + var dynaformname = document.createElement("input"); + dynaformname.type = "hidden"; + dynaformname.name = "__DynaformName__"; + //dynaformname.value = __DynaformName__; + var appuid = document.createElement("input"); + appuid.type = "hidden"; + appuid.name = "APP_UID"; + + var arrayRequired = document.createElement("input"); + arrayRequired.type = "hidden"; + arrayRequired.name = "DynaformRequiredFields"; + arrayRequired.value = fieldsRequired; + //appuid.value = app_uid; + var form = document.getElementsByTagName("form")[0]; + form.action = filePost; + form.method = "post"; + form.appendChild(type); + form.appendChild(uid); + form.appendChild(position); + form.appendChild(action); + form.appendChild(dynaformname); + form.appendChild(appuid); + form.appendChild(arrayRequired); + + var dyn_forward = document.getElementById("dyn_forward"); + dyn_forward.onclick = function () { + form.submit(); + return false; + }; +}); \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php index ed8d7bdd3..52511af14 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php @@ -395,9 +395,17 @@ class WebEntry $fileContent .= "\$_SESSION[\"PROCESS\"] = \"" . $processUid . "\";\n"; $fileContent .= "\$_SESSION[\"CURRENT_DYN_UID\"] = \"" . $dynaFormUid . "\";\n"; $fileContent .= "\$G_PUBLISH = new Publisher();\n"; + + + $fileContent .= "G::LoadClass('pmDynaform');\n"; + $fileContent .= "\$a = new pmDynaform('".$arrayWebEntryData["DYN_UID"]."', array());\n"; + $fileContent .= "if(\$a->isResponsive()){"; + $fileContent .= "\$a->printWebEntry('".$fileName."Post.php');"; + $fileContent .= "}else {"; $fileContent .= "\$G_PUBLISH->AddContent(\"dynaform\", \"xmlform\", \"" . $processUid . "/" . $dynaFormUid . "\", \"\", array(), \"" . $fileName . "Post.php\");\n"; $fileContent .= "G::RenderPage(\"publish\", \"blank\");"; - + $fileContent .= "}"; + file_put_contents($pathDataPublicProcess . PATH_SEP . $fileName . ".php", $fileContent); //Creating the second file, the post file who receive the post form. diff --git a/workflow/engine/templates/cases/WebEntry_Pmdynaform.html b/workflow/engine/templates/cases/WebEntry_Pmdynaform.html new file mode 100644 index 000000000..d55f866f5 --- /dev/null +++ b/workflow/engine/templates/cases/WebEntry_Pmdynaform.html @@ -0,0 +1,53 @@ + + + + PMDynaform + + + + + + + + + + + + + +
+ ###TEMPLATES### + + + + + + + + +
+
+   + + +   + + Next Step + +
+ + diff --git a/workflow/engine/templates/cases/cases_Step_Pmdynaform.html b/workflow/engine/templates/cases/cases_Step_Pmdynaform.html index cae588671..8fabe6c67 100644 --- a/workflow/engine/templates/cases/cases_Step_Pmdynaform.html +++ b/workflow/engine/templates/cases/cases_Step_Pmdynaform.html @@ -27,6 +27,7 @@ var prj_uid = '{PRJ_UID}'; var step_mode = '{STEP_MODE}'; var workspace = '{WORKSPACE}'; + var port = '{PORT}'; var credentials = {credentials};