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..6a7893d55 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -19,65 +19,67 @@ class pmDynaform public $variables = array(); public function __construct($dyn_uid, $app_data) - { + { $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; } + if($app_data != array()){ + //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); - //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); - $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); - $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); - $c1 = $a->getNewCriterion(ProcessVariablesPeer::VAR_SQL, "", Criteria::ALT_NOT_EQUAL); - $c1->addOr($c2); - $c1->addAnd($c4); + $a->add($c1); - $a->add($c1); + $ds = ProcessPeer::doSelectRS($a); + $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $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()); + 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->variables[$row["VAR_NAME"]] = $rows2; } - $this->variables[$row["VAR_NAME"]] = $rows2; } + } public function getDynaform() @@ -94,7 +96,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; @@ -243,6 +245,29 @@ class pmDynaform exit(); } + public function printWebEntry() + { + 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("{credentials}", json_encode($clientToken), $file); + echo $file; + exit(); + } + private function clientToken() { $client = $this->getClientCredentials(); 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..33843f102 --- /dev/null +++ b/workflow/engine/js/cases/core/webentry_pmdynaform.js @@ -0,0 +1,89 @@ +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 + }); + 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", + method: 'GET', + data: {}, + keys: window.project.token, + successCallback: function (xhr, response) { + window.project.setData2(response); + } + }); + + 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"; + appuid.value = app_uid; + var form = document.getElementsByTagName("form")[0]; + form.action = "cases_SaveData?UID=" + dyn_uid + "&APP_UID=" + app_uid; + form.method = "post"; + form.appendChild(type); + form.appendChild(uid); + form.appendChild(position); + form.appendChild(action); + form.appendChild(dynaformname); + form.appendChild(appuid); + + 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..7a580ca33 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();"; + $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..2d4c02a3a --- /dev/null +++ b/workflow/engine/templates/cases/WebEntry_Pmdynaform.html @@ -0,0 +1,49 @@ + + + + PMDynaform + + + + + + + + + + + + + +
+ ###TEMPLATES### + + + + + + + + +
+
+   + + +   + + Next Step + +
+ +