diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index e99cf4351..2666f4201 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -50,9 +50,6 @@ CLI::taskOpt("workspace", "Specify which workspace to restore if multiple worksp Ex: -wworkflow.", "w:", "workspace="); CLI::taskOpt("lang", "Specify the language which will be used to rebuild the case cache list. If this option isn't included, then 'en' (English) will be used by default.", "l:", "lang="); CLI::taskOpt("port", "Specify the port number used by MySQL. If not specified, then the port 3306 will be used by default.", "p:"); -/*----------------------------------********---------------------------------*/ -CLI::taskOpt('keep_dyn_content', "Include the DYN_CONTENT_HISTORY value. Ex: --keep_dyn_content", 'd', 'keep_dyn_content'); -/*----------------------------------********---------------------------------*/ CLI::taskRun("run_workspace_restore"); CLI::taskName('cacheview-repair'); @@ -356,9 +353,19 @@ EOT ); CLI::taskArg('workspace'); CLI::taskRun('migrate_history_data'); -CLI::taskOpt('keep_dyn_content', "Include the DYN_CONTENT_HISTORY value. Ex: --keep_dyn_content", 'i', 'keep_dyn_content'); /*----------------------------------********---------------------------------*/ +/** + * Remove the DYN_CONTENT_HISTORY + */ +CLI::taskName('clear-dyn-content-history-data'); +CLI::taskDescription(<< $value) { - if ($args[$key] === '--keep_dyn_content' || $args[$key] === '-i') { - unset($args[$key]); - $opts['keep_dyn_content'] = ''; - } - } - $option = ''; - $removedDynContentHistory = true; - $exist = array_key_exists('keep_dyn_content', $opts); - if ($exist) { - $removedDynContentHistory = false; - $option = '--keep_dyn_content'; - } if (count($args) === 1) { $start = microtime(true); CLI::logging("> Migrating history data...\n"); @@ -1320,15 +1314,37 @@ function migrate_history_data($args, $opts) Bootstrap::setConstantsRelatedWs($args[0]); $workspaceTools = new WorkspaceTools($args[0]); - $workspaceTools->migrateAppHistoryToAppDataChangeLog(true, $removedDynContentHistory); + $workspaceTools->migrateAppHistoryToAppDataChangeLog(true); $stop = microtime(true); CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); } else { $workspaces = get_workspaces_from_args($args); foreach ($workspaces as $workspace) { - passthru(PHP_BINARY . ' processmaker migrate-history-data ' . $workspace->name . ' ' . $option); + passthru(PHP_BINARY . ' processmaker migrate-history-data ' . $workspace->name); } } } /*----------------------------------********---------------------------------*/ + +/** + * Will be clean the History of use from the table + * Will be remove the DYN_CONTENT_HISTORY from APP_HISTORY + * + * @param array $args + * @param array $opts + * + * @return void +*/ +function run_clear_dyn_content_history_data($args, $opts) +{ + $workspaces = get_workspaces_from_args($args); + $start = microtime(true); + CLI::logging("> Cleaning history data from APP_HISTORY...\n"); + foreach ($workspaces as $workspace) { + CLI::logging('Remove history of use: ' . pakeColor::colorize($workspace->name, 'INFO') . "\n"); + $workspace->clearDynContentHistoryData(true); + } + $stop = microtime(true); + CLI::logging("<*> Cleaning history data from APP_HISTORY process took " . ($stop - $start) . " seconds.\n"); +} diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index 272feff8a..fcf744b51 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -898,7 +898,6 @@ class Cases $appHistory = new AppHistory(); $aFieldsHistory = $Fields; $appDataWithoutDynContentHistory = serialize($FieldsDifference); - $FieldsDifference['DYN_CONTENT_HISTORY'] = base64_encode($currentDynaform["DYN_CONTENT"]); $aFieldsHistory['APP_DATA'] = serialize($FieldsDifference); $appHistory->insertHistory($aFieldsHistory); diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index 6accc2093..309bd9384 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -51,12 +51,6 @@ class PmDynaform if (is_array($this->fields) && !isset($this->fields["APP_UID"])) { $this->fields["APP_UID"] = null; } - if (isset($this->fields["APP_DATA"]["DYN_CONTENT_HISTORY"])) { - $decode = base64_decode($this->fields["APP_DATA"]["DYN_CONTENT_HISTORY"], true); - if ($decode !== false) { - $this->record["DYN_CONTENT"] = $decode; - } - } //todo: compatibility checkbox if ($this->record !== null && isset($this->record["DYN_CONTENT"]) && $this->record["DYN_CONTENT"] !== "") { diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 896bf873e..d1094597c 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -342,12 +342,19 @@ class WorkspaceTools $this->migrateSingleton($workSpace); $stop = microtime(true); CLI::logging("<*> Migrating and populating plugin singleton data took " . ($stop - $start) . " seconds.\n"); - - /*----------------------------------********---------------------------------*/ + $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; + //Review if we need to remove the 'History of use' from APP_HISTORY + $start = microtime(true); + CLI::logging("> Clearing History of Use from APP_HISTORY table...\n"); + $this->clearDynContentHistoryData(false, $keepDynContent); + $stop = microtime(true); + CLI::logging("<*> Clearing History of Use from APP_HISTORY table took " . ($stop - $start) . " seconds.\n"); + + /*----------------------------------********---------------------------------*/ $start = microtime(true); CLI::logging("> Migrating history data...\n"); - $this->migrateAppHistoryToAppDataChangeLog(false, !$keepDynContent); + $this->migrateAppHistoryToAppDataChangeLog(false); $stop = microtime(true); CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); /*----------------------------------********---------------------------------*/ @@ -2067,11 +2074,18 @@ class WorkspaceTools //Updating generated class files for PM Tables passthru(PHP_BINARY . ' processmaker regenerate-pmtable-classes ' . $workspace->name); - /*----------------------------------********---------------------------------*/ $keepDynContent = isset($optionMigrateHistoryData['keepDynContent']) && $optionMigrateHistoryData['keepDynContent'] === true; + //Review if we need to remove the 'History of use' from APP_HISTORY + $start = microtime(true); + CLI::logging("> Clearing History of Use from APP_HISTORY table...\n"); + $workspace->clearDynContentHistoryData(false, $keepDynContent); + $stop = microtime(true); + CLI::logging("<*> Clearing History of Use from APP_HISTORY table took " . ($stop - $start) . " seconds.\n"); + + /*----------------------------------********---------------------------------*/ $start = microtime(true); CLI::logging("> Migrating history data...\n"); - $workspace->migrateAppHistoryToAppDataChangeLog(false, !$keepDynContent); + $workspace->migrateAppHistoryToAppDataChangeLog(false); $stop = microtime(true); CLI::logging("<*> Migrating history data took " . ($stop - $start) . " seconds.\n"); /*----------------------------------********---------------------------------*/ @@ -4237,137 +4251,173 @@ class WorkspaceTools $this->setLastContentMigrateTable(true); } } + /** + * Remove the DYN_CONTENT_HISTORY from APP_HISTORY + * + * @param boolean $force + * @param boolean $keepDynContent + * + * @return void + */ + public function clearDynContentHistoryData($force = false, $keepDynContent = false) + { + $this->initPropel(true); + $conf = new Configurations(); + $exist = $conf->exists('CLEAN_DYN_CONTENT_HISTORY', 'history'); - /*----------------------------------********---------------------------------*/ + if ($force === false && $exist === true) { + $config = (object)$conf->load('CLEAN_DYN_CONTENT_HISTORY', 'history'); + if ($config->updated) { + CLI::logging("-> This was previously updated.\n"); + + return; + } + } + if ($force === false && $keepDynContent) { + CLI::logging("-> Keep DYN_CONTENT_HISTORY.\n"); + + return; + } + //We will to proceed to clean DYN_CONTENT_HISTORY + $query = "UPDATE APP_HISTORY SET HISTORY_DATA = IF(LOCATE('DYN_CONTENT_HISTORY',HISTORY_DATA)>0, CONCAT( " + . " SUBSTRING_INDEX(HISTORY_DATA, ':', 1), " + . " ':', " + . " CAST( " + . " SUBSTRING( " + . " SUBSTRING_INDEX(HISTORY_DATA, ':{', 1), " + . " LOCATE(':', HISTORY_DATA)+1 " + . " ) AS SIGNED " + . " )-1, " + . " SUBSTRING( " + . " CONCAT( " + . " SUBSTRING_INDEX(HISTORY_DATA, 's:19:\"DYN_CONTENT_HISTORY\";s:', 1), " + . " SUBSTRING( " + . " SUBSTRING( " + . " HISTORY_DATA, " + . " LOCATE('s:19:\"DYN_CONTENT_HISTORY\";s:', HISTORY_DATA)+29 " + . " ), " + . " LOCATE( " + . " '\";', " + . " SUBSTRING( " + . " HISTORY_DATA, " + . " LOCATE('s:19:\"DYN_CONTENT_HISTORY\";s:', HISTORY_DATA)+29 " + . " ) " + . " )+2 " + . " ) " + . " ), " + . " LOCATE(':{', HISTORY_DATA) " + . " ) " + . "), HISTORY_DATA)"; + + $con = Propel::getConnection("workflow"); + $stmt = $con->createStatement(); + $stmt->executeQuery($query); + CLI::logging("-> Table fixed for " . $this->dbName . ".APP_HISTORY\n"); + $stmt = $con->createStatement(); + + $conf->aConfig = ['updated' => true]; + $conf->saveConfig('CLEAN_DYN_CONTENT_HISTORY', 'history'); + + } + + /*----------------------------------********---------------------------------*/ /** * Migrate the contents of table APP_HISTORY to table APP_DATA_CHANGE_LOG. * * @param boolean $force - * @param boolean $removedDynContentHistory + * * @return void */ - public function migrateAppHistoryToAppDataChangeLog($force = false, $removedDynContentHistory = false) + public function migrateAppHistoryToAppDataChangeLog($force = false) { $this->initPropel(true); $conf = new Configurations(); $exist = $conf->exists('MIGRATED_APP_HISTORY', 'history'); if ($exist === true && $force === false) { - $config = (object) $conf->load('MIGRATED_APP_HISTORY', 'history'); + $config = (object)$conf->load('MIGRATED_APP_HISTORY', 'history'); if ($config->updated) { - CLI::logging("> This was previously updated.\n"); + CLI::logging("-> This was previously updated.\n"); + return; } } - $remove = "" - . "CONCAT( " - . " SUBSTRING_INDEX(A.HISTORY_DATA, ':', 1), " - . " ':', " - . " CAST( " - . " SUBSTRING( " - . " SUBSTRING_INDEX(A.HISTORY_DATA, ':{', 1), " - . " LOCATE(':', A.HISTORY_DATA)+1 " - . " ) AS SIGNED " - . " )-1, " - . " SUBSTRING( " - . " CONCAT( " - . " SUBSTRING_INDEX(A.HISTORY_DATA, 's:19:\"DYN_CONTENT_HISTORY\";s:', 1), " - . " SUBSTRING( " - . " SUBSTRING( " - . " A.HISTORY_DATA, " - . " LOCATE('s:19:\"DYN_CONTENT_HISTORY\";s:', A.HISTORY_DATA)+29 " - . " ), " - . " LOCATE( " - . " '\";', " - . " SUBSTRING( " - . " A.HISTORY_DATA, " - . " LOCATE('s:19:\"DYN_CONTENT_HISTORY\";s:', A.HISTORY_DATA)+29 " - . " ) " - . " )+2 " - . " ) " - . " ), " - . " LOCATE(':{', A.HISTORY_DATA) " - . " ) " - . ") "; - $select = "" - . "SELECT " - . "A.HISTORY_DATE AS 'DATE', " - . "B.APP_NUMBER AS 'APP_NUMBER', " - . "A.DEL_INDEX AS 'DEL_INDEX', " - . "C.PRO_ID AS 'PRO_ID', " - . "D.TAS_ID AS 'TAS_ID', " - . "E.USR_ID AS 'USR_ID', " - . "IF( " - . " A.OBJ_TYPE='DYNAFORM', " - . " " . ChangeLog::DYNAFORM . ", " - . " IF( " - . " A.OBJ_TYPE='OUTPUT_DOCUMENT', " - . " " . ChangeLog::OUTPUT_DOCUMENT . ", " - . " IF( " - . " A.OBJ_TYPE='INPUT_DOCUMENT', " - . " " . ChangeLog::INPUT_DOCUMENT . ", " - . " IF( " - . " A.OBJ_TYPE='ASSIGN_TASK', " - . " " . ChangeLog::TRIGGER . ", " - . " IF( " - . " A.OBJ_TYPE='EXTERNAL', " - . " " . ChangeLog::EXTERNAL_STEP . ", " - . " 0 " - . " ) " - . " ) " - . " ) " - . " ) " - . ") AS 'OBJECT_TYPE', " - . "IF( " - . " F.DYN_ID IS NOT NULL, " - . " F.DYN_ID, " - . " IF( " - . " G.OUT_DOC_ID IS NOT NULL, " - . " G.OUT_DOC_ID, " - . " IF( " - . " H.INP_DOC_ID IS NOT NULL, " - . " H.INP_DOC_ID, " - . " 0 " - . " ) " - . " ) " - . ") AS 'OBJECT_ID', " - . "IF( " - . " A.DYN_UID='-1' OR A.DYN_UID='-2', " - . " 0," - . " A.DYN_UID " - . ") AS 'OBJECT_UID', " - . "IF( " - . " A.DYN_UID='-1', " - . " " . ChangeLog::BEFORE_ASSIGNMENT . ", " - . " IF( " - . " A.DYN_UID='-2', " - . " " . ChangeLog::UNKNOW_STEP . ", " - . " " . ChangeLog::UNKNOW_STEP . " " - . " ) " - . ") AS 'EXECUTED_AT', " - . "" . ChangeLog::FromWeb . " AS 'SOURCE_ID', " - . "IF(LOCATE('DYN_CONTENT_HISTORY',A.HISTORY_DATA)>0 AND " . ($removedDynContentHistory ? 'true' : 'false') . "=true, " . $remove . ", A.HISTORY_DATA) AS 'DATA', " - . "IF(LOCATE('SYS_SKIN',B.APP_DATA)>0, SUBSTRING_INDEX(SUBSTRING(B.APP_DATA, LOCATE('SYS_SKIN',B.APP_DATA)+16),'\"',1), '') AS 'SKIN', " - . "IF(LOCATE('SYS_LANG',B.APP_DATA)>0, SUBSTRING(B.APP_DATA, LOCATE('SYS_LANG',B.APP_DATA)+15,2), '') AS 'LANGUAGE', " - . "1 AS ROW_MIGRATION " - . "FROM " . $this->dbName . ".APP_HISTORY AS A " - . "LEFT JOIN " . $this->dbName . ".APPLICATION AS B ON (B.APP_UID=A.APP_UID) " - . "LEFT JOIN " . $this->dbName . ".PROCESS AS C ON (C.PRO_UID=A.PRO_UID) " - . "LEFT JOIN " . $this->dbName . ".TASK AS D ON (D.TAS_UID=A.TAS_UID) " - . "LEFT JOIN " . $this->dbName . ".USERS AS E ON (E.USR_UID=A.USR_UID) " - . "LEFT JOIN " . $this->dbName . ".DYNAFORM AS F ON (F.DYN_UID=A.DYN_UID) " - . "LEFT JOIN " . $this->dbName . ".OUTPUT_DOCUMENT AS G ON (G.OUT_DOC_UID=A.DYN_UID) " - . "LEFT JOIN " . $this->dbName . ".INPUT_DOCUMENT AS H ON (H.INP_DOC_UID=A.DYN_UID) "; + . "SELECT " + . "A.HISTORY_DATE AS 'DATE', " + . "B.APP_NUMBER AS 'APP_NUMBER', " + . "A.DEL_INDEX AS 'DEL_INDEX', " + . "C.PRO_ID AS 'PRO_ID', " + . "D.TAS_ID AS 'TAS_ID', " + . "E.USR_ID AS 'USR_ID', " + . "IF( " + . " A.OBJ_TYPE='DYNAFORM', " + . " " . ChangeLog::DYNAFORM . ", " + . " IF( " + . " A.OBJ_TYPE='OUTPUT_DOCUMENT', " + . " " . ChangeLog::OUTPUT_DOCUMENT . ", " + . " IF( " + . " A.OBJ_TYPE='INPUT_DOCUMENT', " + . " " . ChangeLog::INPUT_DOCUMENT . ", " + . " IF( " + . " A.OBJ_TYPE='ASSIGN_TASK', " + . " " . ChangeLog::TRIGGER . ", " + . " IF( " + . " A.OBJ_TYPE='EXTERNAL', " + . " " . ChangeLog::EXTERNAL_STEP . ", " + . " 0 " + . " ) " + . " ) " + . " ) " + . " ) " + . ") AS 'OBJECT_TYPE', " + . "IF( " + . " F.DYN_ID IS NOT NULL, " + . " F.DYN_ID, " + . " IF( " + . " G.OUT_DOC_ID IS NOT NULL, " + . " G.OUT_DOC_ID, " + . " IF( " + . " H.INP_DOC_ID IS NOT NULL, " + . " H.INP_DOC_ID, " + . " 0 " + . " ) " + . " ) " + . ") AS 'OBJECT_ID', " + . "IF( " + . " A.DYN_UID='-1' OR A.DYN_UID='-2', " + . " 0," + . " A.DYN_UID " + . ") AS 'OBJECT_UID', " + . "IF( " + . " A.DYN_UID='-1', " + . " " . ChangeLog::BEFORE_ASSIGNMENT . ", " + . " IF( " + . " A.DYN_UID='-2', " + . " " . ChangeLog::UNKNOW_STEP . ", " + . " " . ChangeLog::UNKNOW_STEP . " " + . " ) " + . ") AS 'EXECUTED_AT', " + . "" . ChangeLog::FromWeb . " AS 'SOURCE_ID', " + . "A.HISTORY_DATA AS 'DATA', " + . "IF(LOCATE('SYS_SKIN',B.APP_DATA)>0, SUBSTRING_INDEX(SUBSTRING(B.APP_DATA, LOCATE('SYS_SKIN',B.APP_DATA)+16),'\"',1), '') AS 'SKIN', " + . "IF(LOCATE('SYS_LANG',B.APP_DATA)>0, SUBSTRING(B.APP_DATA, LOCATE('SYS_LANG',B.APP_DATA)+15,2), '') AS 'LANGUAGE', " + . "1 AS ROW_MIGRATION " + . "FROM " . $this->dbName . ".APP_HISTORY AS A " + . "LEFT JOIN " . $this->dbName . ".APPLICATION AS B ON (B.APP_UID=A.APP_UID) " + . "LEFT JOIN " . $this->dbName . ".PROCESS AS C ON (C.PRO_UID=A.PRO_UID) " + . "LEFT JOIN " . $this->dbName . ".TASK AS D ON (D.TAS_UID=A.TAS_UID) " + . "LEFT JOIN " . $this->dbName . ".USERS AS E ON (E.USR_UID=A.USR_UID) " + . "LEFT JOIN " . $this->dbName . ".DYNAFORM AS F ON (F.DYN_UID=A.DYN_UID) " + . "LEFT JOIN " . $this->dbName . ".OUTPUT_DOCUMENT AS G ON (G.OUT_DOC_UID=A.DYN_UID) " + . "LEFT JOIN " . $this->dbName . ".INPUT_DOCUMENT AS H ON (H.INP_DOC_UID=A.DYN_UID) "; - $delete = "" - . "DELETE FROM " . $this->dbName . ".APP_DATA_CHANGE_LOG " + $delete = "DELETE FROM " . $this->dbName . ".APP_DATA_CHANGE_LOG " . "WHERE " . "ROW_MIGRATION=1"; - $insert = "" - . "INSERT INTO " . $this->dbName . ".APP_DATA_CHANGE_LOG ( " + $insert = "INSERT INTO " . $this->dbName . ".APP_DATA_CHANGE_LOG ( " . " DATE, " . " APP_NUMBER, " . " DEL_INDEX, " diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 7a26509c2..e292db7d1 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -1,4 +1,4 @@ -INSERT INTO USERS (USR_UID,USR_USERNAME,USR_PASSWORD,USR_FIRSTNAME,USR_LASTNAME,USR_EMAIL,USR_DUE_DATE,USR_CREATE_DATE,USR_UPDATE_DATE,USR_STATUS,USR_COUNTRY,USR_CITY,USR_LOCATION,USR_ADDRESS,USR_PHONE,USR_FAX,USR_CELLULAR,USR_ZIP_CODE,DEP_UID,USR_POSITION,USR_RESUME,USR_BIRTHDAY,USR_ROLE,USR_REPORTS_TO,USR_REPLACED_BY ) VALUES +INSERT INTO USERS (USR_UID,USR_USERNAME,USR_PASSWORD,USR_FIRSTNAME,USR_LASTNAME,USR_EMAIL,USR_DUE_DATE,USR_CREATE_DATE,USR_UPDATE_DATE,USR_STATUS,USR_COUNTRY,USR_CITY,USR_LOCATION,USR_ADDRESS,USR_PHONE,USR_FAX,USR_CELLULAR,USR_ZIP_CODE,DEP_UID,USR_POSITION,USR_RESUME,USR_BIRTHDAY,USR_ROLE,USR_REPORTS_TO,USR_REPLACED_BY ) VALUES ('00000000000000000000000000000001','admin','21232f297a57a5a743894a0e4a801fc3','Administrator',' ', 'admin@processmaker.com','2020-01-01','1999-11-30 00:00:00','2008-05-23 18:36:19','ACTIVE', 'US','FL','MMK','','', '1-305-402-0282','1-305-675-1400','','','Administrator', '','1999-02-25','PROCESSMAKER_ADMIN','',''), ('00000000000000000000000000000002','guest','674ba9750749d735ec9787d606170d78','Guest',' ', 'guest@processmaker.com','2030-01-01','2009-02-01 12:24:36','2009-02-01 12:24:36','INACTIVE', 'US','FL','MMK','','', '1-305-402-0282','1-305-675-1400','','','Guest', '','2009-02-01','PROCESSMAKER_GUEST','',''); @@ -61540,6 +61540,7 @@ INSERT INTO DASHLET_INSTANCE (DAS_INS_UID,DAS_UID,DAS_INS_OWNER_TYPE,DAS_INS_OWN INSERT INTO CONFIGURATION (CFG_UID,OBJ_UID,CFG_VALUE,PRO_UID,USR_UID,APP_UID) VALUES ('AUDIT_LOG','log','s:5:"false";','','',''), +('CLEAN_DYN_CONTENT_HISTORY', 'history', 'a:1:{s:7:\"updated\";b:1;}', '', '', ''), ('ENTERPRISE_SETTING_ENCRYPT','','a:2:{s:7:"current";s:6:"sha256";s:8:"previous";s:3:"md5";}','','',''), ('ENVIRONMENT_SETTINGS','','a:1:{s:18:"directoryStructure";i:2;}','','',''), ('MIGRATED_APP_HISTORY', 'history', 'a:1:{s:7:\"updated\";b:1;}', '', '', ''), diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php index c86ad95a8..cea3ed5e7 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php @@ -1131,70 +1131,4 @@ class DynaForm throw $e; } } - - /** - * Get data of a DynaForm History - * - * @param string $dynaFormUid Unique id of DynaForm - * - * return array Return an array with data of a DynaForm History - */ - public function getDynaFormHistory($prj_uid, $dynaFormUid, array $arrayData = array()) - { - try { - $filter = ""; - if (isset($arrayData["filter"])) { - $filter = $arrayData["filter"]; - } - $start = 0; - if (isset($arrayData["start"])) { - $start = $arrayData["start"]; - } - $limit = 50; - if (isset($arrayData["limit"])) { - $limit = $arrayData["limit"]; - } - $this->throwExceptionIfNotExistsDynaForm($dynaFormUid, "", $this->arrayFieldNameForException["dynaFormUid"]); - - $criteria = new \Criteria("workflow"); - - $subcriteria = $criteria->getNewCriterion(\AppHistoryPeer::HISTORY_DATE, "%" . $filter . "%", \Criteria::LIKE); - - $criteria->addSelectColumn(\AppHistoryPeer::DYN_UID); - $criteria->addSelectColumn(\AppHistoryPeer::HISTORY_DATA); - $criteria->addSelectColumn(\AppHistoryPeer::HISTORY_DATE); - $criteria->addAnd(\AppHistoryPeer::DYN_UID, $dynaFormUid, \Criteria::EQUAL); - $criteria->addAnd(\AppHistoryPeer::OBJ_TYPE, "DYNAFORM", \Criteria::EQUAL); - $criteria->addAnd(\AppHistoryPeer::HISTORY_DATA, "%DYN_CONTENT_HISTORY%", \Criteria::LIKE); - $criteria->addAnd($subcriteria); - - $criteria->addDescendingOrderByColumn(\AppHistoryPeer::HISTORY_DATE); - $criteria->setOffset($start); - $criteria->setLimit($limit); - - $rsCriteria = \AppHistoryPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - $data = array(); - while ($rsCriteria->next()) { - $row = $rsCriteria->getRow(); - $d = @unserialize($row["HISTORY_DATA"]); - $jsonData = ""; - if (isset($d["DYN_CONTENT_HISTORY"])) { - $decode = base64_decode($d["DYN_CONTENT_HISTORY"], true); - if ($decode !== false) { - $jsonData = $decode; - } - } - $data[] = array( - "history_date" => $row["HISTORY_DATE"], - "dyn_uid" => $row["DYN_UID"], - "dyn_content_history" => $jsonData - ); - } - return $data; - } catch (\Exception $e) { - throw $e; - } - } - } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/DynaForm.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/DynaForm.php index 3d8696d49..9dac1477c 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/DynaForm.php @@ -220,33 +220,4 @@ class DynaForm extends Api } } - /** - * Get Dynaform's history. - * - * @url POST /:prj_uid/dynaform/:dyn_uid/history - * - * @param string $dyn_uid {@min 32}{@max 32} - * @param string $prj_uid {@min 32}{@max 32} - * @param array $request_data - * - * @return array - * @throws RestException - * - * @access protected - * @class AccessControl {@permission PM_FACTORY} - */ - public function doGetDynaFormHistory($dyn_uid, $prj_uid, $request_data) - { - try { - $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); - $dynaForm->setFormatFieldNameInUppercase(false); - - $response = $dynaForm->getDynaFormHistory($prj_uid, $dyn_uid, $request_data); - - return $response; - } catch (\Exception $e) { - throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); - } - } - }