diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php new file mode 100644 index 000000000..0550c0891 --- /dev/null +++ b/workflow/engine/classes/class.pmDynaform.php @@ -0,0 +1,105 @@ +dyn_uid = $dyn_uid; + $this->app_data = $app_data; + + $this->getDynaform(); + } + + public function getDynaform() + { + if ($this->record != null) { + return $this->record; + } + $a = new Criteria("workflow"); + $a->addSelectColumn(DynaformPeer::DYN_VERSION); + $a->addSelectColumn(DynaformPeer::DYN_CONTENT); + $a->addSelectColumn(DynaformPeer::PRO_UID); + $a->addSelectColumn(DynaformPeer::DYN_UID); + $a->add(DynaformPeer::DYN_UID, $this->dyn_uid, Criteria::EQUAL); + $ds = ProcessPeer::doSelectRS($a); + $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $ds->next(); + $row = $ds->getRow(); + $this->record = isset($row) ? $row : null; + + return $this->record; + } + + public function getMergeValues() + { + $dataJSON = G::json_decode($this->record["DYN_CONTENT"]); + $dt = $dataJSON->items[0]->items; + $n = count($dt); + for ($i = 0; $i < $n; $i++) { + $dr = $dt[$i]; + $n2 = count($dr); + for ($j = 0; $j < $n2; $j++) { + if ($dr[$j]->name) { + $valueField = isset($this->app_data[$dr[$j]->name]) ? $this->app_data[$dr[$j]->name] : ""; + $dataJSON->items[0]->items[$i][$j]->defaultValue = $valueField; + } + } + } + return G::json_encode($dataJSON); + } + + public function mergeValues() + { + $this->record["DYN_CONTENT"] = $this->getMergeValues(); + } + + public function isResponsive() + { + return $this->record != null && $this->record["DYN_VERSION"] == 2 ? true : false; + } + + public function printView($pm_run_outside_main_app, $application) + { + ob_clean(); + $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/cases_Step_Pmdynaform_View.html'); + $file = str_replace("{JSON_DATA}", $this->record["DYN_CONTENT"], $file); + $file = str_replace("{PM_RUN_OUTSIDE_MAIN_APP}", $pm_run_outside_main_app, $file); + $file = str_replace("{DYN_UID}", $this->dyn_uid, $file); + $file = str_replace("{DYNAFORMNAME}", $this->record["PRO_UID"] . "_" . $this->record["DYN_UID"], $file); + $file = str_replace("{APP_UID}", $application, $file); + echo $file; + exit(); + } + + public function printEdit($pm_run_outside_main_app, $application, $headData) + { + ob_clean(); + $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/cases_Step_Pmdynaform.html'); + $file = str_replace("{JSON_DATA}", $this->record["DYN_CONTENT"], $file); + $file = str_replace("{CASE}", $headData["CASE"], $file); + $file = str_replace("{APP_NUMBER}", $headData["APP_NUMBER"], $file); + $file = str_replace("{TITLE}", $headData["TITLE"], $file); + $file = str_replace("{APP_TITLE}", $headData["APP_TITLE"], $file); + $file = str_replace("{PM_RUN_OUTSIDE_MAIN_APP}", $pm_run_outside_main_app, $file); + $file = str_replace("{DYN_UID}", $this->dyn_uid, $file); + $file = str_replace("{DYNAFORMNAME}", $this->record["PRO_UID"] . "_" . $this->record["DYN_UID"], $file); + $file = str_replace("{APP_UID}", $application, $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 f662f4815..b839a4c9c 100644 --- a/workflow/engine/js/cases/core/cases_Step_Pmdynaform.js +++ b/workflow/engine/js/cases/core/cases_Step_Pmdynaform.js @@ -21,22 +21,8 @@ function dynaFormChanged (frm) { } return false; } - -function validateNameField (form, type) { - var i, j = 0, dt, name; - dt = form.getElementsByTagName(type); - for (i = 0; i < dt.length; i++) { - name = dt[i].name; - if (!name) - name = "field" + type + j; - dt[i].name = "form[" + name + "]"; - j++; - } -} - $(window).load(function () { var data = JSON.parse(jsondata); - window.dynaform = new PMDynaform.core.Project({ data: data }); @@ -52,9 +38,19 @@ $(window).load(function () { } var form = document.getElementsByTagName("form")[0]; - validateNameField(form, "input"); - validateNameField(form, "textarea"); - validateNameField(form, "select"); + + var el = form.elements; + var k = 0; + var dt = data.items[0].items; + for (var i = 0; i < dt.length; i++) { + var dr = dt[i]; + for (var j = 0; j < dr.length; j++) { + if (dr[j].name) { + el[k].name = "form[" + dr[j].name + "]"; + k = k + 1; + } + } + } var type = document.createElement("input"); type.type = "hidden"; @@ -94,7 +90,10 @@ $(window).load(function () { form.appendChild(action); form.appendChild(dynaformname); form.appendChild(appuid); - + var dyn_forward = document.getElementById("dyn_forward"); - dyn_forward.href = "cases_Step?TYPE=" + type.value + "&UID=" + dyn_uid + "&POSITION=" + position.value + "&ACTION=" + action.value + ""; + dyn_forward.onclick = function () { + form.submit(); + return false; + }; }); \ No newline at end of file diff --git a/workflow/engine/methods/cases/casesHistoryDynaformPage_Ajax.php b/workflow/engine/methods/cases/casesHistoryDynaformPage_Ajax.php index 4d0989f60..4739335a2 100644 --- a/workflow/engine/methods/cases/casesHistoryDynaformPage_Ajax.php +++ b/workflow/engine/methods/cases/casesHistoryDynaformPage_Ajax.php @@ -380,55 +380,13 @@ if ($actionAjax == 'dynaformChangeLogViewHistory') { $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['NEXT_STEP_LABEL'] = ''; $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['NEXT_STEP'] = '#'; $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['NEXT_ACTION'] = 'return false;'; - - /* - * PMDynaform - * DYN_VERSION is 1: classic Dynaform, - * DYN_VERSION is 2: responsive form, Pmdynaform. - */ - $a = new Criteria("workflow"); - $a->addSelectColumn(DynaformPeer::DYN_VERSION); - $a->addSelectColumn(DynaformPeer::DYN_CONTENT); - $a->addSelectColumn(DynaformPeer::PRO_UID); - $a->addSelectColumn(DynaformPeer::DYN_UID); - $a->add(DynaformPeer::DYN_UID, $_GET['DYN_UID'], Criteria::EQUAL); - $ds = ProcessPeer::doSelectRS($a); - $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $ds->next(); - $row = $ds->getRow(); - $file = ""; - if (isset($row) && $row["DYN_VERSION"] == 2) { - //merge data - $fields = array("input", "textarea", "select"); - $fieldsJSON = array("text", "textarea", "select"); - $dataJSON = G::json_decode($row["DYN_CONTENT"]); - $n1 = count($fields); - $n2 = count($dataJSON->items[0]->items); - for ($i1 = 0; $i1 < $n1; $i1++) { - $i3 = 0; - for ($i2 = 0; $i2 < $n2; $i2++) { - if ($dataJSON->items[0]->items[$i2][0]->type == $fieldsJSON[$i1]) { - $key = "field" . $fields[$i1] . $i3; - $valueField = isset($Fields['APP_DATA'][$key]) ? $Fields['APP_DATA'][$key] : ""; - $dataJSON->items[0]->items[$i2][0]->options = array($valueField); - $dataJSON->items[0]->items[$i2][0]->type = 'label'; - $i3 = $i3 + 1; - } - } - } - $row["DYN_CONTENT"] = G::json_encode($dataJSON); - //set template - ob_clean(); - $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/cases_Step_Pmdynaform_View.html'); - $file = str_replace("{JSON_DATA}", $row["DYN_CONTENT"], $file); - $file = str_replace("{PM_RUN_OUTSIDE_MAIN_APP}", (!isset($_SESSION["PM_RUN_OUTSIDE_MAIN_APP"])) ? "true" : "false", $file); - $file = str_replace("{DYN_UID}", $_GET['DYN_UID'], $file); - $file = str_replace("{DYNAFORMNAME}", $row["PRO_UID"] . "_" . $row["DYN_UID"], $file); - $file = str_replace("{APP_UID}", $_SESSION['APPLICATION'], $file); - echo $file; - exit(); + G::LoadClass('pmDynaform'); + $a = new pmDynaform($_GET['DYN_UID'], $Fields['APP_DATA']); + if ($a->isResponsive()) { + $a->mergeValues(); + $a->printView((!isset($_SESSION["PM_RUN_OUTSIDE_MAIN_APP"])) ? "true" : "false", $_SESSION['APPLICATION']); } else { - $G_PUBLISH->AddContent( 'dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_POST['DYN_UID'], '', $Fields['APP_DATA'], '', '', 'view' ); + $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_POST['DYN_UID'], '', $Fields['APP_DATA'], '', '', 'view'); } ?> @@ -512,55 +470,13 @@ if ($actionAjax == 'historyDynaformGridPreview') { $_SESSION['CURRENT_DYN_UID'] = $_POST['DYN_UID']; $_SESSION['DYN_UID_PRINT'] = $_POST['DYN_UID']; - - /* - * PMDynaform - * DYN_VERSION is 1: classic Dynaform, - * DYN_VERSION is 2: responsive form, Pmdynaform. - */ - $a = new Criteria("workflow"); - $a->addSelectColumn(DynaformPeer::DYN_VERSION); - $a->addSelectColumn(DynaformPeer::DYN_CONTENT); - $a->addSelectColumn(DynaformPeer::PRO_UID); - $a->addSelectColumn(DynaformPeer::DYN_UID); - $a->add(DynaformPeer::DYN_UID, $_GET['DYN_UID'], Criteria::EQUAL); - $ds = ProcessPeer::doSelectRS($a); - $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $ds->next(); - $row = $ds->getRow(); - $file = ""; - if (isset($row) && $row["DYN_VERSION"] == 2) { - //merge data - $fields = array("input", "textarea", "select"); - $fieldsJSON = array("text", "textarea", "select"); - $dataJSON = G::json_decode($row["DYN_CONTENT"]); - $n1 = count($fields); - $n2 = count($dataJSON->items[0]->items); - for ($i1 = 0; $i1 < $n1; $i1++) { - $i3 = 0; - for ($i2 = 0; $i2 < $n2; $i2++) { - if ($dataJSON->items[0]->items[$i2][0]->type == $fieldsJSON[$i1]) { - $key = "field" . $fields[$i1] . $i3; - $valueField = isset($Fields['APP_DATA'][$key]) ? $Fields['APP_DATA'][$key] : ""; - $dataJSON->items[0]->items[$i2][0]->options = array($valueField); - $dataJSON->items[0]->items[$i2][0]->type = 'label'; - $i3 = $i3 + 1; - } - } - } - $row["DYN_CONTENT"] = G::json_encode($dataJSON); - //set template - ob_clean(); - $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/cases_Step_Pmdynaform_View.html'); - $file = str_replace("{JSON_DATA}", $row["DYN_CONTENT"], $file); - $file = str_replace("{PM_RUN_OUTSIDE_MAIN_APP}", (!isset($_SESSION["PM_RUN_OUTSIDE_MAIN_APP"])) ? "true" : "false", $file); - $file = str_replace("{DYN_UID}", $_GET['DYN_UID'], $file); - $file = str_replace("{DYNAFORMNAME}", $row["PRO_UID"] . "_" . $row["DYN_UID"], $file); - $file = str_replace("{APP_UID}", $_SESSION['APPLICATION'], $file); - echo $file; - exit(); + G::LoadClass('pmDynaform'); + $a = new pmDynaform($_GET['DYN_UID'], $Fields['APP_DATA']); + if ($a->isResponsive()) { + $a->mergeValues(); + $a->printView((!isset($_SESSION["PM_RUN_OUTSIDE_MAIN_APP"])) ? "true" : "false", $_SESSION['APPLICATION']); } else { - $G_PUBLISH->AddContent( 'dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_POST['DYN_UID'], '', $Fields['APP_DATA'], '', '', 'view' ); + $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_POST['DYN_UID'], '', $Fields['APP_DATA'], '', '', 'view'); } ?>