diff --git a/Rakefile b/Rakefile
index 8ffc4d77f..c0d680a19 100644
--- a/Rakefile
+++ b/Rakefile
@@ -141,6 +141,7 @@ def generateEnviromentVariables()
file = File.read('./config/enviromentvariables.json')
dataUser = JSON.parse(file)
content = content + "__env.USER_GUEST = " + JSON.generate(dataUser['constants']['userguest'])
+ content = content + "; __env.pmVariable = " + JSON.generate(dataUser['validation']['pmVariable'])
dir = "vendor/colosa/MichelangeloFE/src/enviroment/"
# create a directory enviroment
FileUtils.mkdir_p(dir)
diff --git a/config/constants.php b/config/constants.php
new file mode 100644
index 000000000..f51963dc0
--- /dev/null
+++ b/config/constants.php
@@ -0,0 +1,10 @@
+ [
+ 'pmVariable' => [
+ 'regEx' => '/^[a-zA-Z\_]{1}\w+$/'
+ ]
+ ]
+];
+
diff --git a/config/enviromentvariables.json b/config/enviromentvariables.json
index 57d9fc8da..e97f1b876 100644
--- a/config/enviromentvariables.json
+++ b/config/enviromentvariables.json
@@ -8,5 +8,10 @@
"lastname": "Guest",
"username": "guest"
}
+ },
+ "validation": {
+ "pmVariable": {
+ "regEx": "/^[a-zA-Z\\_]{1}\\w+$/"
+ }
}
}
\ No newline at end of file
diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php
index aad745212..4b1bd7c44 100644
--- a/gulliver/system/class.bootstrap.php
+++ b/gulliver/system/class.bootstrap.php
@@ -1,6 +1,7 @@
\G::getIpAddress()
- ,'timeZone' => $date
- ,'workspace' => $sysSys
- );
- return $aContext;
+ public static function getDefaultContextLog()
+ {
+
+ global $RBAC;
+ $info = [
+ 'ip' => G::getIpAddress(),
+ 'workspace' => !empty(config('system.workspace')) ? config('system.workspace') : 'Undefined Workspace',
+ 'timeZone' => DateTime::convertUtcToTimeZone(date('Y-m-d H:m:s'))
+ ];
+
+ if ($RBAC !== null) {
+ $userInfo = [
+ 'usrUid' => $RBAC->aUserInfo['USER_INFO']['USR_UID']
+ ];
+ $info = array_merge($info, $userInfo);
+ }
+ //Some endpoints can defined the USER_LOGGED
+ if (empty($info['usrUid'])) {
+ $user = !empty($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : G::LoadTranslation('UID_UNDEFINED_USER');
+ $userInfo = [
+ 'usrUid' => $user
+ ];
+ $info = array_merge($info, $userInfo);
+ }
+
+ return $info;
}
/**
diff --git a/gulliver/system/class.monologProvider.php b/gulliver/system/class.monologProvider.php
index ad15960e8..03a84e6b9 100644
--- a/gulliver/system/class.monologProvider.php
+++ b/gulliver/system/class.monologProvider.php
@@ -26,7 +26,7 @@ class MonologProvider
private $registerLogger;
//the default format "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n";
- private $output = "<%level%> %datetime% %channel% %level_name%: %message% %context% %extra%\n";
+ private $output = "<%level%> %datetime% %channel% %level_name%: %message% %context%\n";
private $dateFormat = 'M d H:i:s';
/**
* The maximal amount of files to keep (0 means unlimited)
diff --git a/gulpfile.js b/gulpfile.js
index 2ecbb281b..5e9b4c5cc 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -471,6 +471,37 @@ gulp.task('clean', function () {
cleanDirectory('workflow/public_html/lib');
});
+/**
+ * Exports from the config/constants.php the configuration constants to the
+ * enviromentvariables.json file
+ */
+gulp.task('exportBackendConstants', function () {
+ var runner = require('child_process');
+ gutil.log(gutil.colors.green('Export ProcessMaker constants...'));
+
+ var envVarsJsonFile = 'config/enviromentvariables.json';
+
+ var code = 'require_once "gulliver/system/class.g.php";' +
+ 'require_once "bootstrap/autoload.php";' +
+ 'require_once "bootstrap/app.php";' +
+ 'app()->make(Illuminate\\Foundation\\Http\\Kernel::class)->bootstrap();' +
+ 'print(json_encode(config("constants", JSON_UNESCAPED_SLASHES)));';
+
+ runner.exec(
+ 'php -r \'' + code + '\'',
+ function (err, stdout, stderr) {
+ var pmConstants = JSON.parse(stdout);
+ var envVar = JSON.parse(fs.readFileSync(envVarsJsonFile));
+
+ for (var attr in pmConstants) {
+ envVar[attr] = pmConstants[attr];
+ }
+
+ fs.writeFileSync(envVarsJsonFile, JSON.stringify(envVar, null, 2));
+ return pmConstants;
+ });
+});
+
/**
* This scheduled task is to be able to create the guest user constants
*/
@@ -490,7 +521,7 @@ gulp.task('__env', function (cb) {
);
});
-gulp.task('default', ['clean', '__env'], function (cb) {
+gulp.task('default', ['clean', 'exportBackendConstants', '__env'], function (cb) {
var i, tasks = [];
gutil.log(gutil.colors.green('Initializing ProcessMaker building...'));
@@ -499,4 +530,5 @@ gulp.task('default', ['clean', '__env'], function (cb) {
tasks.push(_.bind(processTask, config[i]));
}
executeSequence(tasks, cb);
-});
\ No newline at end of file
+});
+
diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php
index cc9dc246e..9019c0721 100644
--- a/workflow/engine/bin/cron_single.php
+++ b/workflow/engine/bin/cron_single.php
@@ -9,16 +9,12 @@ require_once __DIR__ . '/../../../bootstrap/app.php';
use ProcessMaker\Core\System;
use ProcessMaker\Plugins\PluginRegistry;
-register_shutdown_function(
- create_function(
- '',
- '
- if (class_exists("Propel")) {
- Propel::close();
- }
- '
- )
-);
+$fn = '
+ if (class_exists("Propel")) {
+ Propel::close();
+ }
+ ';
+register_shutdown_function(create_function('', $fn));
ini_set('memory_limit', '512M');
@@ -45,8 +41,7 @@ try {
$cronName = $argv[4];
$workspace = $argv[5];
$dateSystem = $argv[6];
- $sNow = $argv[7]; //$date
-
+ $sNow = $argv[7]; //date
//Defines constants
define('PATH_SEP', ($osIsLinux) ? '/' : '\\');
@@ -68,10 +63,7 @@ try {
$classLoader->add(PATH_TRUNK . 'workflow' . PATH_SEP . 'engine' . PATH_SEP . 'src' . PATH_SEP);
//Add vendors to autoloader
- //$classLoader->add(PATH_TRUNK . 'vendor' . PATH_SEP . 'luracast' . PATH_SEP . 'restler' . PATH_SEP . 'vendor', 'Luracast');
- //$classLoader->add(PATH_TRUNK . 'vendor' . PATH_SEP . 'bshaffer' . PATH_SEP . 'oauth2-server-php' . PATH_SEP . 'src' . PATH_SEP, 'OAuth2');
- $classLoader->addClass('Bootstrap',
- PATH_TRUNK . 'gulliver' . PATH_SEP . 'system' . PATH_SEP . 'class.bootstrap.php');
+ $classLoader->addClass('Bootstrap', PATH_TRUNK . 'gulliver' . PATH_SEP . 'system' . PATH_SEP . 'class.bootstrap.php');
$classLoader->addModelClassPath(PATH_TRUNK . 'workflow' . PATH_SEP . 'engine' . PATH_SEP . 'classes' . PATH_SEP . 'model' . PATH_SEP);
@@ -89,7 +81,6 @@ try {
ini_set('error_reporting', $e_all);
ini_set('short_open_tag', 'On');
ini_set('default_charset', 'UTF-8');
- //ini_set('memory_limit', $arraySystemConfiguration['memory_limit']);
ini_set('soap.wsdl_cache_enabled', $arraySystemConfiguration['wsdl_cache']);
ini_set('date.timezone', $arraySystemConfiguration['time_zone']);
@@ -99,9 +90,6 @@ try {
define('MEMCACHED_ENABLED', $arraySystemConfiguration['memcached']);
define('MEMCACHED_SERVER', $arraySystemConfiguration['memcached_server']);
- //require_once(PATH_GULLIVER . PATH_SEP . 'class.bootstrap.php');
- //define('PATH_GULLIVER_HOME', PATH_TRUNK . 'gulliver' . PATH_SEP);
-
spl_autoload_register(['Bootstrap', 'autoloadClass']);
//Set variables
@@ -168,8 +156,7 @@ try {
while (!feof($fileDb)) {
$buffer = fgets($fileDb, 4096); //Read a line
- $phpCode .= preg_replace('/define\s*\(\s*[\x22\x27](.*)[\x22\x27]\s*,\s*(\x22.*\x22|\x27.*\x27)\s*\)\s*;/i',
- '$$1 = $2;', $buffer);
+ $phpCode .= preg_replace('/define\s*\(\s*[\x22\x27](.*)[\x22\x27]\s*,\s*(\x22.*\x22|\x27.*\x27)\s*\)\s*;/i', '$$1 = $2;', $buffer);
}
fclose($fileDb);
@@ -189,8 +176,6 @@ try {
$dsnRbac .= '?encoding=utf8';
break;
case 'mssql':
- //$dsn .= '?sendStringAsUnicode=false';
- //$dsnRbac .= '?sendStringAsUnicode=false';
break;
default:
break;
@@ -203,15 +188,12 @@ try {
$pro['datasources']['rbac']['adapter'] = $DB_ADAPTER;
$pro['datasources']['rp']['connection'] = $dsnRp;
$pro['datasources']['rp']['adapter'] = $DB_ADAPTER;
- //$pro['datasources']['dbarray']['connection'] = 'dbarray://user:pass@localhost/pm_os';
- //$pro['datasources']['dbarray']['adapter'] = 'dbarray';
$oFile = fopen(PATH_CORE . 'config' . PATH_SEP . '_databases_.php', 'w');
fwrite($oFile, '');
fclose($oFile);
Propel::init(PATH_CORE . 'config' . PATH_SEP . '_databases_.php');
- //Creole::registerDriver('dbarray', 'creole.contrib.DBArrayConnection');
//Enable RBAC
$rbac = RBAC::getSingleton(PATH_DATA, session_id());
@@ -226,7 +208,7 @@ try {
/*----------------------------------********---------------------------------*/
if (PMLicensedFeatures::getSingleton()->verifyfeature('oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=')) {
- $systemUtcTimeZone = (int)($arraySystemConfiguration['system_utc_time_zone']) == 1;
+ $systemUtcTimeZone = (int) ($arraySystemConfiguration['system_utc_time_zone']) == 1;
}
/*----------------------------------********---------------------------------*/
@@ -234,6 +216,12 @@ try {
define('TIME_ZONE', ini_get('date.timezone'));
+ //UTC time zone
+ if ($systemUtcTimeZone) {
+ $sNow = convertToSystemUtcTimeZone($sNow);
+ $dateSystem = convertToSystemUtcTimeZone($dateSystem);
+ }
+
//Processing
eprintln('Processing workspace: ' . $workspace, 'green');
@@ -261,7 +249,7 @@ try {
case 'timereventcron':
$timerEvent = new \ProcessMaker\BusinessModel\TimerEvent();
- $timerEvent->startContinueCaseByTimerEvent(date('Y-m-d H:i:s'), true);
+ $timerEvent->startContinueCaseByTimerEvent($sNow, true);
break;
case 'sendnotificationscron':
sendNotifications();
@@ -434,7 +422,6 @@ function executePlugins()
}
// Executing registered cron files
-
// -> Get registered cron files
$oPluginRegistry = PluginRegistry::loadSingleton();
$cronFiles = $oPluginRegistry->getCronFiles();
@@ -445,7 +432,7 @@ function executePlugins()
/**
* @var \ProcessMaker\Plugins\Interfaces\CronFile $cronFile
*/
- foreach($cronFiles as $cronFile) {
+ foreach ($cronFiles as $cronFile) {
$path = PATH_PLUGINS . $cronFile->getNamespace() . PATH_SEP . 'bin' . PATH_SEP . $cronFile->getCronFile() . '.php';
if (file_exists($path)) {
executeCustomCronFunction($path, $cronFile->getCronFile());
@@ -503,8 +490,8 @@ function calculateDuration()
saveLog('calculateDuration', 'error', 'Error Calculating Duration: ' . $oError->getMessage());
}
}
-
/*----------------------------------********---------------------------------*/
+
function calculateAppDuration()
{
global $argvx;
@@ -527,7 +514,6 @@ function calculateAppDuration()
saveLog('calculateDurationByApp', 'error', 'Error Calculating Duration: ' . $oError->getMessage());
}
}
-
/*----------------------------------********---------------------------------*/
function executeEvents($sLastExecution, $sNow = null)
@@ -559,7 +545,6 @@ function executeEvents($sLastExecution, $sNow = null)
setExecutionMessage("|- End Execution events");
setExecutionResultMessage("Processed $n");
- //saveLog('executeEvents', 'action', $res );
} catch (Exception $oError) {
setExecutionResultMessage('WITH ERRORS', 'error');
eprintln(" '-" . $oError->getMessage(), 'red');
@@ -581,10 +566,8 @@ function executeScheduledCases($sNow = null)
setExecutionMessage("Executing the scheduled starting cases");
setExecutionResultMessage('PROCESSING');
- $runDate = runDateForScheduledCases($sNow);
-
$oCaseScheduler = new CaseScheduler();
- $oCaseScheduler->caseSchedulerCron($runDate, $log, 1);
+ $oCaseScheduler->caseSchedulerCron($sNow, $log, 1);
foreach ($log as $value) {
$arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron")));
@@ -601,7 +584,7 @@ function executeScheduledCases($sNow = null)
}
}
-function runDateForScheduledCases($sNow)
+function convertToSystemUtcTimeZone($sNow)
{
global $arraySystemConfiguration;
@@ -610,7 +593,7 @@ function runDateForScheduledCases($sNow)
$systemUtcTimeZone = false;
/*----------------------------------********---------------------------------*/
if (PMLicensedFeatures::getSingleton()->verifyfeature('oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=')) {
- $systemUtcTimeZone = (int)($arraySystemConfiguration['system_utc_time_zone']) == 1;
+ $systemUtcTimeZone = (int) ($arraySystemConfiguration['system_utc_time_zone']) == 1;
}
/*----------------------------------********---------------------------------*/
@@ -766,7 +749,7 @@ function executeCaseSelfService()
$appcacheDelDelegateDate,
$taskSelfServiceTime,
$taskSelfServiceTimeUnit //HOURS|DAYS|MINUTES
- //1
+ //1
);
if (time() > $dueDate["DUE_DATE_SECONDS"] && $flag == false) {
@@ -898,8 +881,8 @@ function setExecutionResultMessage($m, $t = '')
eprintln("[$m]", $c);
}
-
/*----------------------------------********---------------------------------*/
+
function fillReportByUser()
{
try {
@@ -1017,7 +1000,6 @@ function synchronizeGmailLabels()
saveLog("synchronizeGmailLabels", "error", "Error when synchronizing Gmail labels: " . $e->getMessage());
}
}
-
/*----------------------------------********---------------------------------*/
function sendNotifications()
diff --git a/workflow/engine/classes/Applications.php b/workflow/engine/classes/Applications.php
index af0b1630a..5f7cf4e61 100644
--- a/workflow/engine/classes/Applications.php
+++ b/workflow/engine/classes/Applications.php
@@ -152,6 +152,7 @@ class Applications
if ($columnSearch === 'APP_NUMBER' || $columnSearch === 'APP_TITLE') {
$sqlSearch = "SELECT APPLICATION.APP_NUMBER FROM APPLICATION";
$sqlSearch .= " WHERE APPLICATION.{$columnSearch} LIKE '%{$search}%'";
+ $orderByColumnSearch = " ORDER BY APPLICATION.{$columnSearch} " . $dir;
switch ($columnSearch) {
case 'APP_TITLE':
break;
@@ -166,6 +167,7 @@ class Applications
}
break;
}
+ $sqlSearch .= $orderByColumnSearch;
if (!empty($start)) {
$sqlSearch .= " LIMIT $start, " . $limit;
} else {
diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php
index 91c2bfc15..8d489e3d5 100644
--- a/workflow/engine/classes/Cases.php
+++ b/workflow/engine/classes/Cases.php
@@ -912,7 +912,7 @@ class Cases
$appDataWithoutDynContentHistory = serialize($FieldsDifference);
$aFieldsHistory['APP_DATA'] = serialize($FieldsDifference);
$appHistory->insertHistory($aFieldsHistory);
-
+
/*----------------------------------********---------------------------------*/
$type = isset($Fields['OBJECT_TYPE']) ?
$Fields['OBJECT_TYPE'] : ChangeLog::getChangeLog()->getObjectNameById(ChangeLog::DYNAFORM);
@@ -1152,12 +1152,13 @@ class Cases
$nameFiles .= $node['file'] . ":" . $node['function'] . "(" . $node['line'] . ")\n";
}
}
- $dataLog = \Bootstrap::getDefaultContextLog();
- $dataLog['usrUid'] = isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : G::LoadTranslation('UID_UNDEFINED_USER');
- $dataLog['appUid'] = $sAppUid;
- $dataLog['request'] = $nameFiles;
- $dataLog['action'] = 'DeleteCases';
- Bootstrap::registerMonolog('DeleteCases', 200, 'Delete Case', $dataLog, $dataLog['workspace'], 'processmaker.log');
+
+ /** ProcessMaker log*/
+ $context = Bootstrap::getDefaultContextLog();
+ $context['appUid'] = $sAppUid;
+ $context['request'] = $nameFiles;
+ Bootstrap::registerMonolog('DeleteCases', 200, 'Delete Case', $context);
+
return $result;
} catch (exception $e) {
throw ($e);
@@ -4543,11 +4544,14 @@ class Cases
$appDelay = new AppDelay();
$appDelay->create($newData);
- //update searchindex
+ //Update searchindex
if ($this->appSolr != null) {
$this->appSolr->updateApplicationSearchIndex($appUid);
}
+ //Execute trigger
+ $this->getExecuteTriggerProcess($appUid, 'REASSIGNED');
+
/*----------------------------------********---------------------------------*/
$participated = new ListParticipatedLast();
$participated->remove($newData['APP_UID'], $newUserUid, $delIndex);
@@ -4567,9 +4571,7 @@ class Cases
$criteriaSet = new Criteria("workflow");
$criteriaSet->add(ListInboxPeer::DEL_INDEX, $newData['DEL_INDEX']);
BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow"));
-
/*----------------------------------********---------------------------------*/
- $this->getExecuteTriggerProcess($appUid, 'REASSIGNED');
//Delete record of the table LIST_UNASSIGNED
$unassigned = new ListUnassigned();
@@ -7139,57 +7141,38 @@ class Cases
return false;
}
+ /**
+ * When the case is deleted will be removed the case from the report tables related
+ *
+ * @param string $applicationUid
+ *
+ * @return void
+ * @throws Exception
+ */
public function reportTableDeleteRecord($applicationUid)
{
- $criteria1 = new Criteria("workflow");
-
- //SELECT
- $criteria1->addSelectColumn(ApplicationPeer::PRO_UID);
-
- //FROM
- //WHERE
- $criteria1->add(ApplicationPeer::APP_UID, $applicationUid);
-
- //QUERY
- $rsCriteria1 = ApplicationPeer::doSelectRS($criteria1);
- $rsCriteria1->setFetchmode(ResultSet::FETCHMODE_ASSOC);
-
- $rsCriteria1->next();
- $row1 = $rsCriteria1->getRow();
-
- $processUid = $row1["PRO_UID"];
-
- $criteria2 = new Criteria("workflow");
-
- //SELECT
- $criteria2->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME);
-
- //FROM
- //WHERE
-
- $criteria2->add(AdditionalTablesPeer::PRO_UID, $processUid);
-
- //QUERY
- $rsCriteria2 = AdditionalTablesPeer::doSelectRS($criteria2);
- $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC);
-
- $pmTable = new PmTable();
-
- while ($rsCriteria2->next()) {
- try {
- $row2 = $rsCriteria2->getRow();
- $tableName = $row2["ADD_TAB_NAME"];
- $pmTableName = $pmTable->toCamelCase($tableName);
-
- //DELETE
- require_once(PATH_WORKSPACE . "classes" . PATH_SEP . "$pmTableName.php");
-
- $criteria3 = new Criteria("workflow");
-
- eval("\$criteria3->add(" . $pmTableName . "Peer::APP_UID, \$applicationUid);");
- eval($pmTableName . "Peer::doDelete(\$criteria3);");
- } catch (Exception $e) {
- throw $e;
+ $app = new Application();
+ $applicationFields = $app->Load($applicationUid);
+ if (!empty($applicationFields["PRO_UID"])) {
+ $additionalTables = new AdditionalTables();
+ $listTables = $additionalTables->getReportTables($applicationFields["PRO_UID"]);
+ $pmTable = new PmTable();
+ foreach ($listTables as $row) {
+ try {
+ $tableName = $row["ADD_TAB_NAME"];
+ $pmTableName = $pmTable->toCamelCase($tableName);
+ require_once(PATH_WORKSPACE . 'classes' . PATH_SEP . $pmTableName . '.php');
+ $criteria = new Criteria("workflow");
+ $pmTablePeer = $pmTableName . 'Peer';
+ $criteria->add($pmTablePeer::APP_UID, $applicationUid);
+ $pmTablePeer::doDelete($criteria);
+ } catch (Exception $e) {
+ $context = Bootstrap::getDefaultContextLog();
+ $context['appUid'] = $applicationUid;
+ $context['proUid'] = $applicationFields["PRO_UID"];
+ $context['reportTable'] = $tableName;
+ Bootstrap::registerMonolog('DeleteCases', 400, $e->getMessage(), $context);
+ }
}
}
}
diff --git a/workflow/engine/classes/Processes.php b/workflow/engine/classes/Processes.php
index 24c4ad523..c81813e60 100644
--- a/workflow/engine/classes/Processes.php
+++ b/workflow/engine/classes/Processes.php
@@ -1768,25 +1768,33 @@ class Processes
/**
* Create "Process User" records
*
- * @param array $arrayData Data to create
+ * @param array $arrayData
*
- * return void
+ * @return void
+ * @throws Exception
*/
public function createProcessUser(array $arrayData)
{
try {
- $processUser = new ProcessUser();
-
- foreach ($arrayData as $value) {
- $record = $value;
-
- if ($processUser->Exists($record["PU_UID"])) {
- $result = $processUser->remove($record["PU_UID"]);
- }
-
- $result = $processUser->create($record);
+ $con = Propel::getConnection(ProcessUserPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($arrayData as $row) {
+ //Prepare the delete
+ $criteria = new Criteria(ProcessUserPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(ProcessUserPeer::PU_UID, $row['PU_UID']);
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(ProcessUserPeer::DATABASE_NAME);
+ $criteria->add(ProcessUserPeer::PU_UID, $row['PU_UID']);
+ $criteria->add(ProcessUserPeer::PRO_UID, $row['PRO_UID']);
+ $criteria->add(ProcessUserPeer::USR_UID, $row['USR_UID']);
+ $criteria->add(ProcessUserPeer::PU_TYPE, $row['PU_TYPE']);
+ BasePeer::doInsert($criteria, $con);
}
+ $con->commit();
} catch (Exception $e) {
+ $con->rollback();
throw $e;
}
}
@@ -1832,23 +1840,41 @@ class Processes
/**
* Create "Process Variables" records
*
- * @param array $arrayData Data to create
+ * @param array $arrayData
*
- * return void
+ * @return void
+ * @throws Exception
*/
public function createProcessVariables(array $arrayData)
{
try {
- foreach ($arrayData as $value) {
- $processVariables = new ProcessVariables();
- $record = $value;
-
- if ($processVariables->Exists($record["VAR_UID"])) {
- $result = $processVariables->remove($record["VAR_UID"]);
- }
- $result = $processVariables->create($record);
+ $con = Propel::getConnection(ProcessVariablesPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($arrayData as $row) {
+ //Prepare the delete
+ $criteria = new Criteria(ProcessVariablesPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(ProcessVariablesPeer::VAR_UID, $row['VAR_UID']);
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(ProcessVariablesPeer::DATABASE_NAME);
+ $criteria->add(ProcessVariablesPeer::VAR_UID, $row['VAR_UID']);
+ $criteria->add(ProcessVariablesPeer::PRJ_UID, $row['PRJ_UID']);
+ $criteria->add(ProcessVariablesPeer::VAR_NAME, $row['VAR_NAME']);
+ $criteria->add(ProcessVariablesPeer::VAR_FIELD_TYPE, $row['VAR_FIELD_TYPE']);
+ $criteria->add(ProcessVariablesPeer::VAR_FIELD_SIZE, $row['VAR_FIELD_SIZE']);
+ $criteria->add(ProcessVariablesPeer::VAR_LABEL, $row['VAR_LABEL']);
+ $criteria->add(ProcessVariablesPeer::VAR_DBCONNECTION, $row['VAR_DBCONNECTION']);
+ $criteria->add(ProcessVariablesPeer::VAR_SQL, $row['VAR_SQL']);
+ $criteria->add(ProcessVariablesPeer::VAR_NULL, $row['VAR_NULL']);
+ $criteria->add(ProcessVariablesPeer::VAR_DEFAULT, $row['VAR_DEFAULT']);
+ $criteria->add(ProcessVariablesPeer::VAR_ACCEPTED_VALUES, $row['VAR_ACCEPTED_VALUES']);
+ $criteria->add(ProcessVariablesPeer::INP_DOC_UID, $row['INP_DOC_UID']);
+ BasePeer::doInsert($criteria, $con);
}
+ $con->commit();
} catch (Exception $e) {
+ $con->rollback();
throw $e;
}
}
@@ -1895,47 +1921,86 @@ class Processes
/**
* Gets Input Documents Rows from aProcess.
*
- * @param $sProUid string.
- * @return void
+ * @param string $proUid
+ *
+ * @return array
+ * @throws Exception
*/
- public function getInputRows($sProUid)
+ public function getInputRows($proUid)
{
try {
- $aInput = array();
- $oCriteria = new Criteria('workflow');
- $oCriteria->add(InputDocumentPeer::PRO_UID, $sProUid);
- $oDataset = InputDocumentPeer::doSelectRS($oCriteria);
- $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- $oDataset->next();
- while ($aRow = $oDataset->getRow()) {
- $oInput = new InputDocument();
- $aInput[] = $oInput->load($aRow['INP_DOC_UID']);
- $oDataset->next();
+ $inputList = [];
+ $criteria = new Criteria('workflow');
+ $criteria->add(InputDocumentPeer::PRO_UID, $proUid);
+ $dataset = InputDocumentPeer::doSelectRS($criteria);
+ $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $dataset->next();
+ while ($row = $dataset->getRow()) {
+ $input = new InputDocument();
+ $infoInput = $input->load($row['INP_DOC_UID']);
+ unset($infoInput['INP_DOC_ID']);
+ $inputList[] = $infoInput;
+ $dataset->next();
}
- return $aInput;
- } catch (Exception $oError) {
- throw ($oError);
+
+ return $inputList;
+ } catch (Exception $error) {
+ throw ($error);
}
}
/**
- * Create Input Documents Rows from an array, removing those Objects
- * with the same UID, and recreaiting the records from the array data.
+ * Create Input Documents
+ *
+ * @param array $input
*
- * @param $aInput array.
* @return void
+ * @throws Exception
*/
- public function createInputRows($aInput)
+ public function createInputRows($input)
{
- foreach ($aInput as $key => $row) {
- $oInput = new InputDocument();
- //unset ($row['TAS_UID']);
- if ($oInput->InputExists($row['INP_DOC_UID'])) {
- $oInput->remove($row['INP_DOC_UID']);
+ try {
+ $con = Propel::getConnection(InputDocumentPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($input as $key => $row) {
+ //Prepare the delete
+ $criteria = new Criteria(InputDocumentPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(InputDocumentPeer::INP_DOC_UID, $row['INP_DOC_UID']);
+ //Get the INP_DOC_ID column
+ $dataSet = BasePeer::doSelect($criteria, $con);
+ $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ if ($dataSet->next()) {
+ $inputInfo = $dataSet->getRow();
+ $row['INP_DOC_ID'] = $inputInfo['INP_DOC_ID'];
+ } else {
+ $row['INP_DOC_ID'] = null;
+ }
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(InputDocumentPeer::DATABASE_NAME);
+ $criteria->add(InputDocumentPeer::INP_DOC_ID, $row['INP_DOC_ID']);
+ $criteria->add(InputDocumentPeer::INP_DOC_UID, $row['INP_DOC_UID']);
+ $criteria->add(InputDocumentPeer::PRO_UID, $row['PRO_UID']);
+ $criteria->add(InputDocumentPeer::INP_DOC_TITLE, $row['INP_DOC_TITLE']);
+ $criteria->add(InputDocumentPeer::INP_DOC_DESCRIPTION, $row['INP_DOC_DESCRIPTION']);
+ $criteria->add(InputDocumentPeer::INP_DOC_FORM_NEEDED, $row['INP_DOC_FORM_NEEDED']);
+ $criteria->add(InputDocumentPeer::INP_DOC_ORIGINAL, $row['INP_DOC_ORIGINAL']);
+ $criteria->add(InputDocumentPeer::INP_DOC_PUBLISHED, $row['INP_DOC_PUBLISHED']);
+ $criteria->add(InputDocumentPeer::INP_DOC_VERSIONING, $row['INP_DOC_VERSIONING']);
+ $criteria->add(InputDocumentPeer::INP_DOC_DESTINATION_PATH, $row['INP_DOC_DESTINATION_PATH']);
+ $criteria->add(InputDocumentPeer::INP_DOC_TAGS, $row['INP_DOC_TAGS']);
+ $criteria->add(InputDocumentPeer::INP_DOC_TYPE_FILE, $row['INP_DOC_TYPE_FILE']);
+ $criteria->add(InputDocumentPeer::INP_DOC_MAX_FILESIZE, $row['INP_DOC_MAX_FILESIZE']);
+ $criteria->add(InputDocumentPeer::INP_DOC_MAX_FILESIZE_UNIT, $row['INP_DOC_MAX_FILESIZE_UNIT']);
+ BasePeer::doInsert($criteria, $con);
}
- $res = $oInput->create($row);
+ $con->commit();
+ } catch (Exception $e) {
+ $con->rollback();
+ throw $e;
}
- return;
+
}
/**
@@ -2029,47 +2094,96 @@ class Processes
/**
* Gets the Output Documents Rows from a Process.
*
- * @param $sProUid string.
- * @return $aOutput array
+ * @param string $proUid
+ *
+ * @return array
+ * @throws Exception
*/
- public function getOutputRows($sProUid)
+ public function getOutputRows($proUid)
{
try {
- $aOutput = array();
- $oCriteria = new Criteria('workflow');
- $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProUid);
- $oDataset = OutputDocumentPeer::doSelectRS($oCriteria);
- $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- $oDataset->next();
- while ($aRow = $oDataset->getRow()) {
- $oOutput = new OutputDocument();
- $aOutput[] = $oOutput->Load($aRow['OUT_DOC_UID']);
- $oDataset->next();
+ $outputList = [];
+ $criteria = new Criteria('workflow');
+ $criteria->add(OutputDocumentPeer::PRO_UID, $proUid);
+ $dataset = OutputDocumentPeer::doSelectRS($criteria);
+ $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $dataset->next();
+ while ($row = $dataset->getRow()) {
+ $output = new OutputDocument();
+ $infoOutput = $output->Load($row['OUT_DOC_UID']);
+ unset($infoOutput['OUT_DOC_ID']);
+ $outputList[] = $infoOutput;
+ $dataset->next();
}
- return $aOutput;
- } catch (Exception $oError) {
- throw ($oError);
+
+ return $outputList;
+ } catch (Exception $error) {
+ throw ($error);
}
}
/**
- * Create Input Documents Rows from an array, removing those Objects
- * with the same UID, and recreaiting the records from the array data.
+ * Create Input Documents
+ *
+ * @param array $output
*
- * @param $aOutput array.
* @return void
+ * @throws Exception
*/
- public function createOutputRows($aOutput)
+ public function createOutputRows($output)
{
- foreach ($aOutput as $key => $row) {
- $oOutput = new OutputDocument();
- //unset ($row['TAS_UID']);
- if ($oOutput->OutputExists($row['OUT_DOC_UID'])) {
- $oOutput->remove($row['OUT_DOC_UID']);
+ try {
+ $con = Propel::getConnection(OutputDocumentPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($output as $key => $row) {
+ //Prepare the delete
+ $criteria = new Criteria(OutputDocumentPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(OutputDocumentPeer::OUT_DOC_UID, $row['OUT_DOC_UID']);
+ //Get the OUT_DOC_ID column
+ $dataSet = BasePeer::doSelect($criteria, $con);
+ $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ if ($dataSet->next()) {
+ $outputInfo = $dataSet->getRow();
+ $row['OUT_DOC_ID'] = $outputInfo['OUT_DOC_ID'];
+ } else {
+ $row['OUT_DOC_ID'] = null;
+ }
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(OutputDocumentPeer::DATABASE_NAME);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_ID, $row['OUT_DOC_ID']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_UID, $row['OUT_DOC_UID']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_TITLE, $row['OUT_DOC_TITLE']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_DESCRIPTION, $row['OUT_DOC_DESCRIPTION']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_FILENAME, $row['OUT_DOC_FILENAME']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_TEMPLATE, $row['OUT_DOC_TEMPLATE']);
+ $criteria->add(OutputDocumentPeer::PRO_UID, $row['PRO_UID']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_REPORT_GENERATOR, $row['OUT_DOC_REPORT_GENERATOR']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_LANDSCAPE, $row['OUT_DOC_LANDSCAPE']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_MEDIA, $row['OUT_DOC_MEDIA']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_LEFT_MARGIN, $row['OUT_DOC_LEFT_MARGIN']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_RIGHT_MARGIN, $row['OUT_DOC_RIGHT_MARGIN']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_TOP_MARGIN, $row['OUT_DOC_TOP_MARGIN']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_BOTTOM_MARGIN, $row['OUT_DOC_BOTTOM_MARGIN']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_GENERATE, $row['OUT_DOC_GENERATE']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_CURRENT_REVISION, $row['OUT_DOC_CURRENT_REVISION']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_FIELD_MAPPING, $row['OUT_DOC_FIELD_MAPPING']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_VERSIONING, $row['OUT_DOC_VERSIONING']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_DESTINATION_PATH, $row['OUT_DOC_DESTINATION_PATH']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_TAGS, $row['OUT_DOC_TAGS']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_PDF_SECURITY_ENABLED, $row['OUT_DOC_PDF_SECURITY_ENABLED']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OPEN_PASSWORD, $row['OUT_DOC_PDF_SECURITY_OPEN_PASSWORD']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_PDF_SECURITY_OWNER_PASSWORD, $row['OUT_DOC_PDF_SECURITY_OWNER_PASSWORD']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_PDF_SECURITY_PERMISSIONS, $row['OUT_DOC_PDF_SECURITY_PERMISSIONS']);
+ $criteria->add(OutputDocumentPeer::OUT_DOC_OPEN_TYPE, $row['OUT_DOC_OPEN_TYPE']);
+ BasePeer::doInsert($criteria, $con);
}
- $res = $oOutput->create($row);
+ $con->commit();
+ } catch (Exception $e) {
+ $con->rollback();
+ throw $e;
}
- return;
}
/**
@@ -2665,37 +2779,75 @@ class Processes
/**
* Create Step Rows from a Process
*
- * @param $aStep array.
+ * @param array $step
+ *
* @return void.
+ * @throws Exception
*/
- public function createStepRows($aStep)
+ public function createStepRows($step)
{
- foreach ($aStep as $key => $row) {
- $oStep = new Step();
- if (isset($row['STEP_UID'])) {
- if ($oStep->StepExists($row['STEP_UID'])) {
- $oStep->remove($row['STEP_UID']);
+ try {
+ $con = Propel::getConnection(StepPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($step as $key => $row) {
+ if (isset($row['STEP_UID'])) {
+ //Prepare the delete
+ $criteria = new Criteria(StepPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(StepPeer::STEP_UID, $row['STEP_UID']);
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(StepPeer::DATABASE_NAME);
+ $criteria->add(StepPeer::STEP_UID, $row['STEP_UID']);
+ $criteria->add(StepPeer::PRO_UID, $row['PRO_UID']);
+ $criteria->add(StepPeer::TAS_UID, $row['TAS_UID']);
+ $criteria->add(StepPeer::STEP_TYPE_OBJ, $row['STEP_TYPE_OBJ']);
+ $criteria->add(StepPeer::STEP_UID_OBJ, $row['STEP_UID_OBJ']);
+ $criteria->add(StepPeer::STEP_CONDITION, $row['STEP_CONDITION']);
+ $criteria->add(StepPeer::STEP_POSITION, $row['STEP_POSITION']);
+ $criteria->add(StepPeer::STEP_MODE, $row['STEP_MODE']);
+ BasePeer::doInsert($criteria, $con);
}
- $res = $oStep->create($row);
}
+ $con->commit();
+ } catch (Exception $e) {
+ $con->rollback();
+ throw $e;
}
- return;
}
/**
* Create Step Supervisor Rows for a Process from an array of data
*
- * @param $aStepSupervisor array.
+ * @param array $stepSupervisor
+ *
* @return void.
+ * @throws Exception
*/
- public function createStepSupervisorRows($aStepSupervisor)
+ public function createStepSupervisorRows($stepSupervisor)
{
- foreach ($aStepSupervisor as $key => $row) {
- $oStepSupervisor = new StepSupervisor();
- if ($oStepSupervisor->Exists($row['STEP_UID'])) {
- $oStepSupervisor->remove($row['STEP_UID']);
+ try {
+ $con = Propel::getConnection(StepSupervisorPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($stepSupervisor as $key => $row) {
+ //Prepare the delete
+ $criteria = new Criteria(StepSupervisorPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(StepSupervisorPeer::STEP_UID, $row['STEP_UID']);
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(StepSupervisorPeer::DATABASE_NAME);
+ $criteria->add(StepSupervisorPeer::STEP_UID, $row['STEP_UID']);
+ $criteria->add(StepSupervisorPeer::PRO_UID, $row['PRO_UID']);
+ $criteria->add(StepSupervisorPeer::STEP_TYPE_OBJ, $row['STEP_TYPE_OBJ']);
+ $criteria->add(StepSupervisorPeer::STEP_UID_OBJ, $row['STEP_UID_OBJ']);
+ $criteria->add(StepSupervisorPeer::STEP_POSITION, $row['STEP_POSITION']);
+ BasePeer::doInsert($criteria, $con);
}
- $oStepSupervisor->create($row);
+ $con->commit();
+ } catch (Exception $e) {
+ $con->rollback();
+ throw $e;
}
}
@@ -2764,26 +2916,31 @@ class Processes
/**
* Get Dynaform Rows from a Process
*
- * @param string $sProUid
- * @return $aDynaform array
+ * @param string $proUid
+ *
+ * @return array
+ * @throws Exception
*/
- public function getDynaformRows($sProUid)
+ public function getDynaformRows($proUid)
{
try {
- $aDynaform = array();
- $oCriteria = new Criteria('workflow');
- $oCriteria->add(DynaformPeer::PRO_UID, $sProUid);
- $oDataset = DynaformPeer::doSelectRS($oCriteria);
- $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- $oDataset->next();
- while ($aRow = $oDataset->getRow()) {
- $oDynaform = new Dynaform();
- $aDynaform[] = $oDynaform->Load($aRow['DYN_UID']);
- $oDataset->next();
+ $dynaformList = [];
+ $criteria = new Criteria('workflow');
+ $criteria->add(DynaformPeer::PRO_UID, $proUid);
+ $dataset = DynaformPeer::doSelectRS($criteria);
+ $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $dataset->next();
+ while ($row = $dataset->getRow()) {
+ $dynaform = new Dynaform();
+ $infoDyn = $dynaform->Load($row['DYN_UID']);
+ unset($infoDyn['DYN_ID']);
+ $dynaformList[] = $infoDyn;
+ $dataset->next();
}
- return $aDynaform;
- } catch (Exception $oError) {
- throw ($oError);
+
+ return $dynaformList;
+ } catch (Exception $error) {
+ throw ($error);
}
}
@@ -2906,22 +3063,53 @@ class Processes
}
/**
- * Create Dynaform Rows for a Process form an array
+ * Create dynaforms for a process
+ *
+ * @param array $dynaforms
*
- * @param array $aDynaform
* @return void
+ * @throws Exception
*/
- public function createDynaformRows($aDynaform)
+ public function createDynaformRows($dynaforms)
{
- foreach ($aDynaform as $key => $row) {
- $oDynaform = new Dynaform();
- //unset ($row['TAS_UID']);
- if ($oDynaform->exists($row['DYN_UID'])) {
- $oDynaform->remove($row['DYN_UID']);
+ try {
+ $con = Propel::getConnection(DynaformPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($dynaforms as $key => $row) {
+ //Prepare the delete
+ $criteria = new Criteria(DynaformPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(DynaformPeer::DYN_UID, $row['DYN_UID']);
+ //Get the DYN_ID column
+ $dataSet = BasePeer::doSelect($criteria, $con);
+ $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ if ($dataSet->next()) {
+ $dynInfo = $dataSet->getRow();
+ $row['DYN_ID'] = $dynInfo['DYN_ID'];
+ } else {
+ $row['DYN_ID'] = null;
+ }
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(DynaformPeer::DATABASE_NAME);
+ $criteria->add(DynaformPeer::DYN_ID, $row['DYN_ID']);
+ $criteria->add(DynaformPeer::DYN_UID, $row['DYN_UID']);
+ $criteria->add(DynaformPeer::DYN_TITLE, $row['DYN_TITLE']);
+ $criteria->add(DynaformPeer::DYN_DESCRIPTION, $row['DYN_DESCRIPTION']);
+ $criteria->add(DynaformPeer::PRO_UID, $row['PRO_UID']);
+ $criteria->add(DynaformPeer::DYN_TYPE, $row['DYN_TYPE']);
+ $criteria->add(DynaformPeer::DYN_FILENAME, $row['DYN_FILENAME']);
+ $criteria->add(DynaformPeer::DYN_CONTENT, $row['DYN_CONTENT']);
+ $criteria->add(DynaformPeer::DYN_LABEL, $row['DYN_LABEL']);
+ $criteria->add(DynaformPeer::DYN_VERSION, $row['DYN_VERSION']);
+ $criteria->add(DynaformPeer::DYN_UPDATE_DATE, $row['DYN_UPDATE_DATE']);
+ BasePeer::doInsert($criteria, $con);
}
- $res = $oDynaform->create($row);
+ $con->commit();
+ } catch (Exception $e) {
+ $con->rollback();
+ throw $e;
}
- return;
}
/**
@@ -3035,20 +3223,38 @@ class Processes
/**
* Create Step Trigger Rows for a Process form an array
*
- * @param array $aTrigger
+ * @param array $trigger
+ *
* @return void
+ * @throws Exception
*/
- public function createTriggerRows($aTrigger)
+ public function createTriggerRows($trigger)
{
- foreach ($aTrigger as $key => $row) {
- $oTrigger = new Triggers();
- //unset ($row['TAS_UID']);
- if ($oTrigger->TriggerExists($row['TRI_UID'])) {
- $oTrigger->remove($row['TRI_UID']);
+ try {
+ $con = Propel::getConnection(TriggersPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($trigger as $key => $row) {
+ //Prepare the delete
+ $criteria = new Criteria(TriggersPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(TriggersPeer::TRI_UID, $row['TRI_UID']);
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(TriggersPeer::DATABASE_NAME);
+ $criteria->add(TriggersPeer::TRI_UID, $row['TRI_UID']);
+ $criteria->add(TriggersPeer::TRI_TITLE, $row['TRI_TITLE']);
+ $criteria->add(TriggersPeer::TRI_DESCRIPTION, $row['TRI_DESCRIPTION']);
+ $criteria->add(TriggersPeer::PRO_UID, $row['PRO_UID']);
+ $criteria->add(TriggersPeer::TRI_TYPE, $row['TRI_TYPE']);
+ $criteria->add(TriggersPeer::TRI_WEBBOT, $row['TRI_WEBBOT']);
+ $criteria->add(TriggersPeer::TRI_PARAM, $row['TRI_PARAM']);
+ BasePeer::doInsert($criteria, $con);
}
- $res = $oTrigger->create($row);
+ $con->commit();
+ } catch (Exception $e) {
+ $con->rollback();
+ throw $e;
}
- return;
}
/**
@@ -3736,21 +3942,40 @@ class Processes
/**
* Get Task User Rows from an array of data
*
- * @param array $aTaskUser
- * @return array $aStepTrigger
+ * @param array $taskUser
+ *
+ * @return void
+ * @throws Exception
*/
- public function createTaskUserRows($aTaskUser)
+ public function createTaskUserRows($taskUser)
{
- if (is_array($aTaskUser)) {
- foreach ($aTaskUser as $key => $row) {
- $oTaskUser = new TaskUser();
- if ($oTaskUser->TaskUserExists($row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION'])) {
- $oTaskUser->remove($row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION']);
+ try {
+ if (is_array($taskUser)) {
+ $con = Propel::getConnection(TaskUserPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($taskUser as $key => $row) {
+ //Prepare the delete
+ $criteria = new Criteria(TaskUserPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(TaskUserPeer::TAS_UID, $row['TAS_UID']);
+ $criteria->add(TaskUserPeer::USR_UID, $row['USR_UID']);
+ $criteria->add(TaskUserPeer::TU_TYPE, $row['TU_TYPE']);
+ $criteria->add(TaskUserPeer::TU_RELATION, $row['TU_RELATION']);
+ $dataSet = BasePeer::doSelect($criteria, $con);
+ if (!$dataSet->next()) {
+ /** The validation added in method TaskUser->create is not required,
+ * because in the current method only assigned GROUPS are present.
+ * if (RBAC::isGuestUserUid($row['USR_UID']) && !$bmWebEntry->isTaskAWebEntry($row['TAS_UID'])) {...
+ */
+ BasePeer::doInsert($criteria, $con, false);
+ }
}
- $res = $oTaskUser->create($row);
+ $con->commit();
}
+ } catch (Exception $e) {
+ $con->rollback();
+ throw $e;
}
- return;
}
/**
@@ -3794,21 +4019,42 @@ class Processes
* @param array $group
*
* @return void
+ * @throws Exception
*/
public function createGroupRow($group)
{
- foreach ($group as $key => $row) {
- $groupInfo = [];
- $groupWf = new Groupwf();
- if ($groupWf->GroupwfExists($row['GRP_UID'])) {
- $groupInfo = $groupWf->Load($row['GRP_UID']);
- $groupWf->remove($row['GRP_UID']);
+ try {
+ $con = Propel::getConnection(GroupwfPeer::DATABASE_NAME);
+ $con->begin();
+ foreach ($group as $key => $row) {
+ //Prepare the delete
+ $criteria = new Criteria(GroupwfPeer::DATABASE_NAME);
+ $criteria->addSelectColumn('*');
+ $criteria->add(GroupwfPeer::GRP_UID, $row['GRP_UID']);
+ //Get the GRP_ID column
+ $dataSet = BasePeer::doSelect($criteria, $con);
+ $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ if ($dataSet->next()) {
+ $groupInfo = $dataSet->getRow();
+ $row['GRP_ID'] = $groupInfo['GRP_ID'];
+ } else {
+ $row['GRP_ID'] = null;
+ }
+ BasePeer::doDelete($criteria, $con);
+ //Prepare the insert
+ $criteria = new Criteria(GroupwfPeer::DATABASE_NAME);
+ $criteria->add(GroupwfPeer::GRP_ID, $row['GRP_ID']);
+ $criteria->add(GroupwfPeer::GRP_UID, $row['GRP_UID']);
+ $criteria->add(GroupwfPeer::GRP_TITLE, $row['GRP_TITLE']);
+ $criteria->add(GroupwfPeer::GRP_STATUS, $row['GRP_STATUS']);
+ $criteria->add(GroupwfPeer::GRP_LDAP_DN, $row['GRP_LDAP_DN']);
+ $criteria->add(GroupwfPeer::GRP_UX, $row['GRP_UX']);
+ BasePeer::doInsert($criteria, $con);
}
- //We will to keep the GRP_ID
- if (!empty($groupInfo['GRP_ID'])) {
- $row['GRP_ID'] = $groupInfo['GRP_ID'];
- }
- $res = $groupWf->create($row);
+ $con->commit();
+ } catch (Exception $e) {
+ $con->rollback();
+ throw $e;
}
}
@@ -4212,7 +4458,8 @@ class Processes
* @param string $processUid Unique id of Process
* @param array $arrayData Data
*
- * return void
+ * @return void
+ * @throws Exception
*/
public function createActionsByEmail($processUid, array $arrayData)
{
@@ -4784,45 +5031,35 @@ class Processes
/**
* function checkExistingGroups
* checkExistingGroups check if any of the groups listed in the parameter
- * array exist and wich are those, that is the result $sFilteredGroups array.
+ * array exist and which are those, that is the result $sFilteredGroups array.
*
- * @author gustavo cruz gustavo-at-colosa.com
- * @param $sGroupList array of a group list
- * @return $existingGroupList array of existing groups or null
+ * @param array $groupList, array of a group list
+ * @return array|null, array of existing groups or null
*/
- public function checkExistingGroups($sGroupList)
+ public function checkExistingGroups($groupList)
{
- $aGroupwf = array();
- $oCriteria = new Criteria('workflow');
- $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID);
- $oCriteria->addSelectColumn(GroupwfPeer::GRP_TITLE);
- $oDataset = GroupwfPeer::doSelectRS($oCriteria);
- $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- $oDataset->next();
- while ($aRow = $oDataset->getRow()) {
- $aGroupwf[] = $aRow;
- $oDataset->next();
- }
- //check if any group name exists in the dbase
- if (is_array($sGroupList)) {
- foreach ($aGroupwf as $groupBase) {
- foreach ($sGroupList as $group) {
- if ($groupBase['GRP_TITLE'] == $group['GRP_TITLE'] && $groupBase['GRP_UID'] != $group['GRP_UID']) {
- $oPro = GroupwfPeer::retrieveByPk( $group['GRP_UID'] );
- if(is_object( $oPro ) && get_class( $oPro ) == 'Groupwf') {
- $group['GRP_UID'] = G::generateUniqueID();
- }
- $existingGroupList[] = $group;
+ $existingGroupList = [];
+ $criteria = new Criteria('workflow');
+ $criteria->addSelectColumn(GroupwfPeer::GRP_UID);
+ $criteria->addSelectColumn(GroupwfPeer::GRP_TITLE);
+ $dataset = GroupwfPeer::doSelectRS($criteria);
+ $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $dataset->next();
+ while ($row = $dataset->getRow()) {
+ foreach ($groupList as $group) {
+ //Check if any group name exists in the database
+ if ($row['GRP_TITLE'] === $group['GRP_TITLE'] && $row['GRP_UID'] !== $group['GRP_UID']) {
+ $groupWf = GroupwfPeer::retrieveByPk($group['GRP_UID']);
+ if (is_object($groupWf) && get_class($groupWf) == 'Groupwf') {
+ $group['GRP_UID'] = G::generateUniqueID();
}
+ $existingGroupList[] = $group;
}
}
+ $dataset->next();
}
- //return $sGroupList;
- if (isset($existingGroupList)) {
- return $existingGroupList;
- } else {
- return null;
- }
+
+ return !empty($existingGroupList) ? $existingGroupList : null;
}
/**
@@ -5499,54 +5736,21 @@ class Processes
$this->createProcessPropertiesFromData($oData);
-// $this->createLaneRows( $oData->lanes );
-//
-//
-// if (isset( $oData->gateways )) {
-// $this->createGatewayRows( $oData->gateways );
-// }
-// $this->createDynaformRows( $oData->dynaforms );
-// $this->createInputRows( $oData->inputs );
-// $this->createOutputRows( $oData->outputs );
-// $this->createStepRows( $oData->steps );
-// $this->createStepSupervisorRows( isset( $oData->stepSupervisor ) ? $oData->stepSupervisor : array () );
-// $this->createTriggerRows( $oData->triggers );
-// $this->createStepTriggerRows( $oData->steptriggers );
-// $this->createTaskUserRows( $oData->taskusers );
-// $this->createGroupRow( $oData->groupwfs );
-// $this->createDBConnectionsRows( isset( $oData->dbconnections ) ? $oData->dbconnections : array () );
-// $this->createReportTables( isset( $oData->reportTables ) ? $oData->reportTables : array (), isset( $oData->reportTablesVars ) ? $oData->reportTablesVars : array () );
-// $this->createSubProcessRows( isset( $oData->subProcess ) ? $oData->subProcess : array () );
-// $this->createCaseTrackerRows( isset( $oData->caseTracker ) ? $oData->caseTracker : array () );
-// $this->createCaseTrackerObjectRows( isset( $oData->caseTrackerObject ) ? $oData->caseTrackerObject : array () );
-// $this->createObjectPermissionsRows( isset( $oData->objectPermissions ) ? $oData->objectPermissions : array () );
-// $this->createStageRows( isset( $oData->stage ) ? $oData->stage : array () );
-//
-// $this->createFieldCondition( isset( $oData->fieldCondition ) ? $oData->fieldCondition : array (), $oData->dynaforms );
-//
-// // Create before to createRouteRows for avoid duplicates
-// $this->createEventRows( isset( $oData->event ) ? $oData->event : array () );
-//
-// $this->createCaseSchedulerRows( isset( $oData->caseScheduler ) ? $oData->caseScheduler : array () );
-//
-// //Create data related to Configuration table
-// $this->createTaskExtraPropertiesRows( isset( $oData->taskExtraProperties ) ? $oData->taskExtraProperties : array () );
-
- // and finally create the files, dynaforms (xml and html), emailTemplates and Public files
$this->createFiles($oData, $pmFilename);
}
+ /**
+ * This function creates a new Process, defined in the object $oData
+ *
+ * @param object $oData
+ *
+ * @return void
+ */
public function createProcessPropertiesFromData($oData)
{
$arrayProcessData = $oData->process;
-
- // (*) Creating process dependencies
- // creating the process category
$this->createProcessCategoryRow(isset($oData->processCategory) ? $oData->processCategory : null);
-
$this->createLaneRows($oData->lanes);
-
-
if (isset($oData->gateways)) {
$this->createGatewayRows($oData->gateways);
}
@@ -5557,8 +5761,8 @@ class Processes
$this->createStepSupervisorRows(isset($oData->stepSupervisor) ? $oData->stepSupervisor : array());
$this->createTriggerRows($oData->triggers);
$this->createStepTriggerRows($oData->steptriggers);
- $this->createTaskUserRows($oData->taskusers);
$this->createGroupRow($oData->groupwfs);
+ $this->createTaskUserRows($oData->taskusers);
$this->createDBConnectionsRows(isset($oData->dbconnections) ? $oData->dbconnections : array());
$this->createReportTables(isset($oData->reportTables) ? $oData->reportTables : array(), isset($oData->reportTablesVars) ? $oData->reportTablesVars : array());
$this->createSubProcessRows(isset($oData->subProcess) ? $oData->subProcess : array());
@@ -5566,17 +5770,14 @@ class Processes
$this->createCaseTrackerObjectRows(isset($oData->caseTrackerObject) ? $oData->caseTrackerObject : array());
$this->createObjectPermissionsRows(isset($oData->objectPermissions) ? $oData->objectPermissions : array());
$this->createStageRows(isset($oData->stage) ? $oData->stage : array());
-
$this->createFieldCondition(isset($oData->fieldCondition) ? $oData->fieldCondition : array(), $oData->dynaforms);
// Create before to createRouteRows for avoid duplicates
$this->createEventRows(isset($oData->event) ? $oData->event : array());
-
$this->createCaseSchedulerRows(isset($oData->caseScheduler) ? $oData->caseScheduler : array());
//Create data related to Configuration table
$this->createTaskExtraPropertiesRows(isset($oData->taskExtraProperties) ? $oData->taskExtraProperties : array());
-
$this->createProcessUser((isset($oData->processUser)) ? $oData->processUser : array());
$this->createProcessVariables((isset($oData->processVariables)) ? $oData->processVariables : array());
$this->createWebEntry($arrayProcessData["PRO_UID"], $arrayProcessData["PRO_CREATE_USER"], (isset($oData->webEntry)) ? $oData->webEntry : array());
@@ -5715,10 +5916,12 @@ class Processes
}
/**
- * this function creates a new Process, defined in the object $oData
+ * This function creates a new Process, defined in the object $oData
*
- * @param string $sProUid
- * @return boolean
+ * @param object $oData
+ * @param string $pmFilename
+ *
+ * @return void
*/
public function updateProcessFromData($oData, $pmFilename)
{
@@ -5736,8 +5939,8 @@ class Processes
$this->createStepSupervisorRows($oData->stepSupervisor);
$this->createTriggerRows($oData->triggers);
$this->createStepTriggerRows($oData->steptriggers);
- $this->createTaskUserRows($oData->taskusers);
$this->createGroupRow($oData->groupwfs);
+ $this->createTaskUserRows($oData->taskusers);
$this->createDBConnectionsRows($oData->dbconnections);
$this->updateReportTables($oData->reportTables, $oData->reportTablesVars);
$this->createFiles($oData, $pmFilename);
diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php
index 0f06b5c6e..95d042a51 100644
--- a/workflow/engine/classes/class.pmFunctions.php
+++ b/workflow/engine/classes/class.pmFunctions.php
@@ -3215,7 +3215,7 @@ function PMFGetGroupName($grpUid, $lang = SYS_LANG) {
* @param string | $text | Text
* @param string | $category | Category
* @param string | $proUid | ProcessUid
- * @param string | $lang | Languaje
+ * @param string | $lang | Language
* @return array
*/
function PMFGetUidFromText($text, $category, $proUid = null, $lang = SYS_LANG)
@@ -3467,14 +3467,28 @@ function PMFCaseLink($caseUid, $workspace = null, $language = null, $skin = null
if ($arrayApplicationData === false) {
return false;
}
+ $conf = new Configurations();
+ $envSkin = defined("SYS_SKIN") ? SYS_SKIN : $conf->getConfiguration('SKIN_CRON', '');
$workspace = (!empty($workspace)) ? $workspace : config("system.workspace");
$language = (!empty($language)) ? $language : SYS_LANG;
- $skin = (!empty($skin)) ? $skin : SYS_SKIN;
+ $skin = (!empty($skin)) ? $skin : $envSkin;
$uri = '/sys' . $workspace . '/' . $language . '/' . $skin . '/cases/opencase/' . $caseUid;
- //Return
- return ((G::is_https()) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $uri;
+ $envHost = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : SERVER_NAME;
+ $envProtocol = defined("REQUEST_SCHEME") && REQUEST_SCHEME === "https";
+ if (isset($_SERVER['SERVER_PORT'])) {
+ $envPort = ($_SERVER['SERVER_PORT'] != "80") ? ":" . $_SERVER['SERVER_PORT'] : "";
+ } else if (defined('SERVER_PORT')) {
+ $envPort = (SERVER_PORT . "" != "80") ? ":" . SERVER_PORT : "";
+ } else {
+ $envPort = "";
+ }
+ if (!empty($envPort) && strpos($envHost, $envPort) === false) {
+ $envHost = $envHost . $envPort;
+ }
+ $link = (G::is_https() || $envProtocol ? 'https://' : 'http://') . $envHost . $uri;
+ return $link;
} catch (Exception $e) {
throw $e;
}
diff --git a/workflow/engine/classes/model/AdditionalTables.php b/workflow/engine/classes/model/AdditionalTables.php
index a80578e2a..1eefa6356 100644
--- a/workflow/engine/classes/model/AdditionalTables.php
+++ b/workflow/engine/classes/model/AdditionalTables.php
@@ -56,8 +56,41 @@ function validateType($value, $type)
class AdditionalTables extends BaseAdditionalTables
{
- public $fields = array();
- public $primaryKeys = array();
+ const FLD_TYPE_VALUES = [
+ 'BIGINT',
+ 'BOOLEAN',
+ 'CHAR',
+ 'DATE',
+ 'DATETIME',
+ 'DECIMAL',
+ 'DOUBLE',
+ 'FLOAT',
+ 'INTEGER',
+ 'LONGVARCHAR',
+ 'REAL',
+ 'SMALLINT',
+ 'TIME',
+ 'TIMESTAMP',
+ 'TINYINT',
+ 'VARCHAR'
+ ];
+ const FLD_TYPE_WITH_AUTOINCREMENT = [
+ 'BIGINT',
+ 'INTEGER',
+ 'SMALLINT',
+ 'TINYINT'
+ ];
+ const FLD_TYPE_WITH_SIZE = [
+ 'BIGINT',
+ 'CHAR',
+ 'DECIMAL',
+ 'FLOAT',
+ 'INTEGER',
+ 'LONGVARCHAR',
+ 'VARCHAR'
+ ];
+ public $fields = [];
+ public $primaryKeys = [];
/**
* Function load
@@ -707,85 +740,84 @@ class AdditionalTables extends BaseAdditionalTables
*/
public function populateReportTable($tableName, $sConnection = 'rp', $type = 'NORMAL', $processUid = '', $gridKey = '', $addTabUid = '')
{
- require_once "classes/model/Application.php";
-
$this->className = $this->getPHPName($tableName);
$this->classPeerName = $this->className . 'Peer';
if (!file_exists(PATH_WORKSPACE . 'classes/' . $this->className . '.php')) {
- throw new Exception("ERROR: " . PATH_WORKSPACE . 'classes/' . $this->className . '.php'
- . " class file doesn't exit!");
+ throw new Exception("ERROR: " . PATH_WORKSPACE . 'classes/' . $this->className . '.php' . " class file doesn't exit!");
}
require_once PATH_WORKSPACE . 'classes/' . $this->className . '.php';
+ //get fields
+ $fieldTypes = [];
+ if ($addTabUid != '') {
+ $criteria = new Criteria('workflow');
+ $criteria->add(FieldsPeer::ADD_TAB_UID, $addTabUid);
+ $dataset = FieldsPeer::doSelectRS($criteria);
+ $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ while ($dataset->next()) {
+ $row = $dataset->getRow();
+ switch ($row['FLD_TYPE']) {
+ case 'FLOAT':
+ case 'DOUBLE':
+ case 'INTEGER':
+ $fieldTypes[] = array($row['FLD_NAME'] => $row['FLD_TYPE']);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ //remove old applications references
+ $connection = Propel::getConnection($sConnection);
+ $statement = $connection->createStatement();
+ $sql = "TRUNCATE " . $tableName;
+ $statement->executeQuery($sql);
+
+ $case = new Cases();
+ $context = Bootstrap::getDefaultContextLog();
+
//select cases for this Process, ordered by APP_NUMBER
- $con = Propel::getConnection($sConnection);
- $stmt = $con->createStatement();
$criteria = new Criteria('workflow');
$criteria->add(ApplicationPeer::PRO_UID, $processUid);
$criteria->addAscendingOrderByColumn(ApplicationPeer::APP_NUMBER);
$dataset = ApplicationPeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
-
while ($dataset->next()) {
$row = $dataset->getRow();
- //remove old applications references
- $deleteSql = "DELETE FROM $tableName WHERE APP_UID = '" . $row['APP_UID'] . "'";
- $rs = $stmt->executeQuery($deleteSql);
- // getting the case data
- $caseData = unserialize($row['APP_DATA']);
- $fieldTypes = array();
+ //getting the case data
+ $appData = $case->unserializeData($row['APP_DATA']);
- if ($addTabUid != '') {
- require_once 'classes/model/Fields.php';
- $criteriaField = new Criteria('workflow');
- $criteriaField->add(FieldsPeer::ADD_TAB_UID, $addTabUid);
- $datasetField = FieldsPeer::doSelectRS($criteriaField);
- $datasetField->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- while ($datasetField->next()) {
- $rowfield = $datasetField->getRow();
- switch ($rowfield['FLD_TYPE']) {
- case 'FLOAT':
- case 'DOUBLE':
- case 'INTEGER':
- $fieldTypes[] = array($rowfield['FLD_NAME'] => $rowfield['FLD_TYPE']);
- break;
- default:
- break;
- }
+ //quick fix, map all empty values as NULL for Database
+ foreach ($appData as $appDataKey => $appDataValue) {
+ if (is_array($appDataValue) && count($appDataValue)) {
+ $j = key($appDataValue);
+ $appDataValue = is_array($appDataValue[$j]) ? $appDataValue : $appDataValue[$j];
}
- }
-
- // quick fix
- // map all empty values as NULL for Database
- foreach ($caseData as $dKey => $dValue) {
- if (is_array($dValue) && count($dValue)) {
- $j = key($dValue);
- $dValue = (is_array($dValue[$j])) ? $dValue : $dValue[$j];
- }
- if (is_string($dValue)) {
+ if (is_string($appDataValue)) {
foreach ($fieldTypes as $key => $fieldType) {
- foreach ($fieldType as $name => $theType) {
- if (strtoupper($dKey) == $name) {
- $caseData[$dKey] = validateType($dValue, $theType);
- unset($name);
+ foreach ($fieldType as $fieldTypeKey => $fieldTypeValue) {
+ if (strtoupper($appDataKey) == $fieldTypeKey) {
+ $appData[$appDataKey] = validateType($appDataValue, $fieldTypeValue);
+ unset($fieldTypeKey);
}
}
}
// normal fields
- if (trim($dValue) === '') {
- $caseData[$dKey] = null;
+ if (trim($appDataValue) === '') {
+ $appData[$appDataKey] = null;
}
} else {
// grids
- if (is_array($caseData[$dKey])) {
- foreach ($caseData[$dKey] as $dIndex => $dRow) {
+ if (is_array($appData[$appDataKey])) {
+ foreach ($appData[$appDataKey] as $dIndex => $dRow) {
if (is_array($dRow)) {
foreach ($dRow as $k => $v) {
if (is_string($v) && trim($v) === '') {
- $caseData[$dKey][$dIndex][$k] = null;
+ $appData[$appDataKey][$dIndex][$k] = null;
}
}
}
@@ -794,33 +826,48 @@ class AdditionalTables extends BaseAdditionalTables
}
}
+ //populate data
+ $className = $this->className;
if ($type === 'GRID') {
list($gridName, $gridUid) = explode('-', $gridKey);
- $gridData = isset($caseData[$gridName]) ? $caseData[$gridName] : array();
-
+ $gridData = isset($appData[$gridName]) ? $appData[$gridName] : [];
foreach ($gridData as $i => $gridRow) {
- eval('$obj = new ' . $this->className . '();');
- $obj->fromArray($caseData, BasePeer::TYPE_FIELDNAME);
+ try {
+ $obj = new $className();
+ $obj->fromArray($appData, BasePeer::TYPE_FIELDNAME);
+ $obj->setAppUid($row['APP_UID']);
+ $obj->setAppNumber($row['APP_NUMBER']);
+ if (method_exists($obj, 'setAppStatus')) {
+ $obj->setAppStatus($row['APP_STATUS']);
+ }
+ $obj->fromArray(array_change_key_case($gridRow, CASE_UPPER), BasePeer::TYPE_FIELDNAME);
+ $obj->setRow($i);
+ $obj->save();
+ } catch (Exception $e) {
+ $context["message"] = $e->getMessage();
+ $context["tableName"] = $tableName;
+ $context["appUid"] = $row['APP_UID'];
+ Bootstrap::registerMonolog("sqlExecution", 500, "Sql Execution", $context, $context["workspace"], "processmaker.log");
+ }
+ unset($obj);
+ }
+ } else {
+ try {
+ $obj = new $className();
+ $obj->fromArray(array_change_key_case($appData, CASE_UPPER), BasePeer::TYPE_FIELDNAME);
$obj->setAppUid($row['APP_UID']);
$obj->setAppNumber($row['APP_NUMBER']);
if (method_exists($obj, 'setAppStatus')) {
$obj->setAppStatus($row['APP_STATUS']);
}
- $obj->fromArray(array_change_key_case($gridRow, CASE_UPPER), BasePeer::TYPE_FIELDNAME);
- $obj->setRow($i);
$obj->save();
- eval('$obj = new ' . $this->className . '();');
+ } catch (Exception $e) {
+ $context["message"] = $e->getMessage();
+ $context["tableName"] = $tableName;
+ $context["appUid"] = $row['APP_UID'];
+ Bootstrap::registerMonolog("sqlExecution", 500, "Sql Execution", $context, $context["workspace"], "processmaker.log");
}
- } else {
- eval('$obj = new ' . $this->className . '();');
- $obj->fromArray(array_change_key_case($caseData, CASE_UPPER), BasePeer::TYPE_FIELDNAME);
- $obj->setAppUid($row['APP_UID']);
- $obj->setAppNumber($row['APP_NUMBER']);
- if (method_exists($obj, 'setAppStatus')) {
- $obj->setAppStatus($row['APP_STATUS']);
- }
- $obj->save();
- $obj = null;
+ unset($obj);
}
}
}
@@ -1022,94 +1069,181 @@ class AdditionalTables extends BaseAdditionalTables
return $reportTables;
}
+ /**
+ * Get all data of AdditionalTables.
+ *
+ * @param int $start
+ * @param int $limit
+ * @param string $filter
+ * @param array $process
+ * @return array
+ */
public function getAll($start = 0, $limit = 20, $filter = '', $process = null)
{
- $oCriteria = new Criteria('workflow');
- $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_UID);
- $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME);
- $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_DESCRIPTION);
- $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TYPE);
- $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TAG);
- $oCriteria->addSelectColumn(AdditionalTablesPeer::PRO_UID);
- $oCriteria->addSelectColumn(AdditionalTablesPeer::DBS_UID);
+ $criteria = new Criteria('workflow');
+ $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_UID);
+ $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME);
+ $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_DESCRIPTION);
+ $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TYPE);
+ $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TAG);
+ $criteria->addSelectColumn(AdditionalTablesPeer::PRO_UID);
+ $criteria->addSelectColumn(AdditionalTablesPeer::DBS_UID);
if (isset($process)) {
foreach ($process as $key => $pro_uid) {
if ($key == 'equal') {
- $oCriteria->add(AdditionalTablesPeer::PRO_UID, $pro_uid, Criteria::EQUAL);
+ $criteria->add(AdditionalTablesPeer::PRO_UID, $pro_uid, Criteria::EQUAL);
} else {
- $oCriteria->add(AdditionalTablesPeer::PRO_UID, $pro_uid, Criteria::NOT_EQUAL);
+ $criteria->add(AdditionalTablesPeer::PRO_UID, $pro_uid, Criteria::NOT_EQUAL);
}
}
}
if ($filter != '' && is_string($filter)) {
- $oCriteria->add(
- $oCriteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_NAME, '%' . $filter . '%', Criteria::LIKE)->addOr(
- $oCriteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_DESCRIPTION, '%' . $filter . '%', Criteria::LIKE)
- )
- );
+ $subCriteria2 = $criteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_DESCRIPTION, '%'
+ . $filter
+ . '%', Criteria::LIKE);
+ $subCriteria1 = $criteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_NAME, '%'
+ . $filter
+ . '%', Criteria::LIKE)
+ ->addOr($subCriteria2);
+ $criteria->add($subCriteria1);
}
- if (isset($_POST['sort'])) {
- if ($_POST['dir'] == 'ASC') {
- eval('$oCriteria->addAscendingOrderByColumn(AdditionalTablesPeer::' . $_POST['sort'] . ');');
- } else {
- eval('$oCriteria->addDescendingOrderByColumn(AdditionalTablesPeer::' . $_POST['sort'] . ');');
+ $criteria->addAsColumn("PRO_TITLE", ProcessPeer::PRO_TITLE);
+ $criteria->addAsColumn("PRO_DESCRIPTION", ProcessPeer::PRO_DESCRIPTION);
+ $criteria->addJoin(AdditionalTablesPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
+
+ $stringBuild = '';
+ $stringSql = "ADDITIONAL_TABLES.ADD_TAB_NAME IN ("
+ . "SELECT TABLE_NAME "
+ . "FROM information_schema.tables "
+ . "WHERE table_schema = DATABASE()"
+ . ")";
+ $buildNumberRows = clone $criteria;
+ $buildNumberRows->clear();
+ $buildNumberRows->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME);
+ $buildNumberRows->addAsColumn("EXISTS_TABLE", $stringSql);
+ $dataset1 = AdditionalTablesPeer::doSelectRS($buildNumberRows);
+ $dataset1->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ while ($dataset1->next()) {
+ $row = $dataset1->getRow();
+ $stringCount = "'" . G::LoadTranslation('ID_TABLE_NOT_FOUND') . "'";
+ if ($row["EXISTS_TABLE"] === "1") {
+ $stringCount = "(SELECT COUNT(*) FROM " . $row["ADD_TAB_NAME"] . ")";
}
+ $stringBuild = $stringBuild
+ . "WHEN '" . $row["ADD_TAB_NAME"]
+ . "' THEN " . $stringCount
+ . " \n";
+ }
+ $clauseRows = empty($stringBuild) ? "''" : "(CASE "
+ . AdditionalTablesPeer::ADD_TAB_NAME
+ . " "
+ . $stringBuild
+ . " END)";
+ $criteria->addAsColumn("NUM_ROWS", $clauseRows);
+
+ if (empty($_POST['sort'])) {
+ $criteria->addAscendingOrderByColumn(AdditionalTablesPeer::ADD_TAB_NAME);
} else {
- $oCriteria->addAscendingOrderByColumn(AdditionalTablesPeer::ADD_TAB_NAME);
+ $column = $_POST["sort"];
+ if (defined('AdditionalTablesPeer::' . $column)) {
+ $column = constant('AdditionalTablesPeer::' . $column);
+ }
+ if ($column === "NUM_ROWS") {
+ $column = "IF(" . $column . "='" . G::LoadTranslation('ID_TABLE_NOT_FOUND') . "',-1," . $column . ")";
+ }
+ if ($_POST['dir'] == 'ASC') {
+ $criteria->addAscendingOrderByColumn($column);
+ } else {
+ $criteria->addDescendingOrderByColumn($column);
+ }
}
- $criteriaCount = clone $oCriteria;
+ $criteriaCount = clone $criteria;
$count = AdditionalTablesPeer::doCount($criteriaCount);
- $oCriteria->setLimit($limit);
- $oCriteria->setOffset($start);
+ $criteria->setLimit($limit);
+ $criteria->setOffset($start);
- $oDataset = AdditionalTablesPeer::doSelectRS($oCriteria);
- $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $dataset = AdditionalTablesPeer::doSelectRS($criteria);
+ $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- $addTables = array();
- $proUids = array();
-
- while ($oDataset->next()) {
- $row = $oDataset->getRow();
- $row['PRO_TITLE'] = $row['PRO_DESCRIPTION'] = '';
+ $addTables = [];
+ while ($dataset->next()) {
+ $row = $dataset->getRow();
$addTables[] = $row;
- if ($row['PRO_UID'] != '') {
- $proUids[] = $row['PRO_UID'];
- }
}
- //process details will have the info about the processes
- $procDetails = array();
+ return [
+ 'rows' => $addTables,
+ 'count' => $count
+ ];
+ }
- if (count($proUids) > 0) {
- //now get the labels for all process, using an array of Uids,
- $c = new Criteria('workflow');
- $c->add(ProcessPeer::PRO_UID, $proUids, Criteria::IN);
- $dt = ProcessPeer::doSelectRS($c);
- $dt->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ /**
+ * Get the table properties
+ *
+ * @param string $tabUid
+ * @param array $tabData
+ * @param boolean $isReportTable
+ *
+ * @return array
+ * @throws Exception
+ */
+ public static function getTableProperties($tabUid, $tabData = [], $isReportTable = false)
+ {
+ $criteria = new Criteria('workflow');
+ $criteria->add(AdditionalTablesPeer::ADD_TAB_UID, $tabUid, Criteria::EQUAL);
+ $dataset = AdditionalTablesPeer::doSelectOne($criteria);
- while ($dt->next()) {
- $row = $dt->getRow();
- $procDetails[$row['PRO_UID']]['PRO_TITLE'] = $row['PRO_TITLE'];
- $procDetails[$row['PRO_UID']]['PRO_DESCRIPTION'] = $row['PRO_DESCRIPTION'];
+ $dataValidate = [];
+ if (!is_null($dataset)) {
+ $dataValidate['rep_tab_uid'] = $tabUid;
+
+ $tableName = $dataset->getAddTabName();
+ if (substr($tableName, 0, 4) === 'PMT_') {
+ $tableNameWithoutPrefixPmt = substr($tableName, 4);
+ } else {
+ $tableNameWithoutPrefixPmt = $tableName;
}
- foreach ($addTables as $i => $addTable) {
- if (isset($procDetails[$addTable['PRO_UID']]['PRO_TITLE'])) {
- $addTables[$i]['PRO_TITLE'] = $procDetails[$addTable['PRO_UID']]['PRO_TITLE'];
- }
+ $dataValidate['rep_tab_name'] = $tableNameWithoutPrefixPmt;
+ $dataValidate['rep_tab_name_old_name'] = $tableName;
+ $dataValidate['pro_uid'] = $dataset->getProUid();
+ $dataValidate['rep_tab_dsc'] = $dataset->getAddTabDescription();
+ $dataValidate['rep_tab_connection'] = $dataset->getDbsUid();
+ $dataValidate['rep_tab_type'] = $dataset->getAddTabType();
+ $dataValidate['rep_tab_grid'] = '';
- if (isset($procDetails[$addTable['PRO_UID']]['PRO_DESCRIPTION'])) {
- $addTables[$i]['PRO_DESCRIPTION'] = $procDetails[$addTable['PRO_UID']]['PRO_DESCRIPTION'];
+ if ($isReportTable) {
+ if (!empty($tabData['pro_uid']) && $dataValidate['pro_uid'] !== $tabData['pro_uid']) {
+ throw (new Exception("The property pro_uid: '". $tabData['pro_uid'] . "' is incorrect."));
+ }
+ if (!empty($tabData['rep_tab_name']) && $tableName !== $tabData['rep_tab_name']) {
+ throw (new Exception("The property rep_tab_name: '". $tabData['rep_tab_name'] . "' is incorrect."));
+ }
+ if (!empty($dataValidate['rep_tab_dsc'])) {
+ $dataValidate['rep_tab_dsc'] = $tabData['rep_tab_dsc'];
+ }
+ $tabGrid = $dataset->getAddTabGrid();
+ if (strpos($tabGrid, '-')) {
+ list($gridName, $gridId) = explode('-', $tabGrid);
+ $dataValidate['rep_tab_grid'] = $gridId;
+ }
+ } else {
+ if (!empty($tabData['rep_tab_name']) && $tableName !== $tabData['pmt_tab_name']) {
+ throw (new Exception("The property pmt_tab_name: '". $tabData['pmt_tab_name'] . "' is incorrect."));
+ }
+ if (!empty($dataValidate['pmt_tab_dsc'])) {
+ $dataValidate['rep_tab_dsc'] = $tabData['pmt_tab_dsc'];
}
}
+ $dataValidate['fields'] = $tabData['fields'];
}
- return array('rows' => $addTables, 'count' => $count);
+ return $dataValidate;
}
/**
diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po
index 8c58d0a38..52ff365a7 100644
--- a/workflow/engine/content/translations/english/processmaker.en.po
+++ b/workflow/engine/content/translations/english/processmaker.en.po
@@ -8975,6 +8975,12 @@ msgstr "No skins to display"
msgid "No users to display"
msgstr "No users to display"
+# TRANSLATION
+# LABEL/ID_GRID_VARIABLE_NAME_ERROR
+#: LABEL/ID_GRID_VARIABLE_NAME_ERROR
+msgid "A valid variable starts with a letter or underscore, followed by any number of letters, numbers, or underscores. Variables with wrong names: {0}"
+msgstr "A valid variable starts with a letter or underscore, followed by any number of letters, numbers, or underscores. Variables with wrong names: {0}"
+
# TRANSLATION
# LABEL/ID_GRID_WIZARD
#: LABEL/ID_GRID_WIZARD
@@ -17981,6 +17987,24 @@ msgstr "The mafe translation file is not writable.
Please give write permis
msgid "Your message has been sent successfully"
msgstr "Your message has been sent successfully"
+# TRANSLATION
+# LABEL/ID_MAIL_STATUS_ERROR
+#: LABEL/ID_MAIL_STATUS_ERROR
+msgid "Error"
+msgstr "Error"
+
+# TRANSLATION
+# LABEL/ID_MAIL_STATUS_PENDING
+#: LABEL/ID_MAIL_STATUS_PENDING
+msgid "Pending"
+msgstr "Pending"
+
+# TRANSLATION
+# LABEL/ID_MAIL_STATUS_SENT
+#: LABEL/ID_MAIL_STATUS_SENT
+msgid "Sent"
+msgstr "Sent"
+
# TRANSLATION
# LABEL/ID_MAIL_TEST_SUCCESS
#: LABEL/ID_MAIL_TEST_SUCCESS
@@ -20705,6 +20729,12 @@ msgstr "File \"{0}\" imported but with errors:"
msgid "The following fields cannot be created because they contain the reserved words \"{0}\""
msgstr "The following fields cannot be created because they contain the reserved words \"{0}\""
+# TRANSLATION
+# LABEL/ID_PMTABLE_INVALID_FIELD_NAME_VARIABLE
+#: LABEL/ID_PMTABLE_INVALID_FIELD_NAME_VARIABLE
+msgid "There is a conflict with some field names: \"{0}\", please rename them avoiding the use of numbers and considering that underscores are ignored when validating unique field names."
+msgstr "There is a conflict with some field names: \"{0}\", please rename them avoiding the use of numbers and considering that underscores are ignored when validating unique field names."
+
# TRANSLATION
# LABEL/ID_PMTABLE_INVALID_FILE
#: LABEL/ID_PMTABLE_INVALID_FILE
diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php
index 0c45b18dd..ed62a64a1 100644
--- a/workflow/engine/controllers/pmTablesProxy.php
+++ b/workflow/engine/controllers/pmTablesProxy.php
@@ -26,68 +26,70 @@ class pmTablesProxy extends HttpProxyController
* @param string $httpData->limit
* @param string $httpData->textFilter
*/
- public function getList ($httpData)
+ public function getList($httpData)
{
$configurations = new Configurations();
$processMap = new ProcessMap();
// setting parameters
- $config = $configurations->getConfiguration( 'additionalTablesList', 'pageSize', '', $_SESSION['USER_LOGGED'] );
- $env = $configurations->getConfiguration( 'ENVIRONMENT_SETTINGS', '' );
- $limit_size = isset( $config->pageSize ) ? $config['pageSize'] : 20;
- $start = isset( $httpData->start ) ? $httpData->start : 0;
- $limit = isset( $httpData->limit ) ? $httpData->limit : $limit_size;
- $filter = isset( $httpData->textFilter ) ? $httpData->textFilter : '';
- $pro_uid = isset( $httpData->pro_uid ) ? $httpData->pro_uid : null;
+ $config = $configurations->getConfiguration('additionalTablesList', 'pageSize', '', $_SESSION['USER_LOGGED']);
+ $env = $configurations->getConfiguration('ENVIRONMENT_SETTINGS', '');
+ $limit_size = isset($config->pageSize) ? $config['pageSize'] : 20;
+ $start = isset($httpData->start) ? $httpData->start : 0;
+ $limit = isset($httpData->limit) ? $httpData->limit : $limit_size;
+ $filter = isset($httpData->textFilter) ? $httpData->textFilter : '';
+ $pro_uid = isset($httpData->pro_uid) ? $httpData->pro_uid : null;
if ($pro_uid !== null) {
- $process = $pro_uid == '' ? array ('not_equal' => $pro_uid
- ) : array ('equal' => $pro_uid);
- $addTables = AdditionalTables::getAll( false, false, $filter, $process );
+ $process = $pro_uid == '' ? ['not_equal' => $pro_uid] : ['equal' => $pro_uid];
+ $addTables = AdditionalTables::getAll(false, false, $filter, $process);
- $c = $processMap->getReportTablesCriteria( $pro_uid );
- $oDataset = RoutePeer::doSelectRS( $c );
- $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
- $reportTablesOldList = array ();
+ $c = $processMap->getReportTablesCriteria($pro_uid);
+ $oDataset = RoutePeer::doSelectRS($c);
+ $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $reportTablesOldList = array();
while ($oDataset->next()) {
$reportTablesOldList[] = $oDataset->getRow();
}
foreach ($reportTablesOldList as $i => $oldRepTab) {
- if($filter != ''){
- if((stripos($oldRepTab['REP_TAB_NAME'], $filter) !== false) || (stripos($oldRepTab['REP_TAB_TITLE'], $filter) !== false)){
- $addTables['rows'][] = array ('ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],'PRO_UID' => $oldRepTab['PRO_UID'],'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],'TYPE' => 'CLASSIC' );
- }
- } else {
- $addTables['rows'][] = array ('ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],'PRO_UID' => $oldRepTab['PRO_UID'],'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],'TYPE' => 'CLASSIC' );
- }
+ if ($filter != '') {
+ if ((stripos($oldRepTab['REP_TAB_NAME'], $filter) !== false) ||
+ (stripos($oldRepTab['REP_TAB_TITLE'], $filter) !== false)) {
+ $addTables['rows'][] = [
+ 'ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],
+ 'PRO_UID' => $oldRepTab['PRO_UID'],
+ 'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),
+ 'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],
+ 'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],
+ 'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],
+ 'TYPE' => 'CLASSIC'
+ ];
+ }
+ } else {
+ $addTables['rows'][] = [
+ 'ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],
+ 'PRO_UID' => $oldRepTab['PRO_UID'],
+ 'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),
+ 'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],
+ 'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],
+ 'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],
+ 'TYPE' => 'CLASSIC'
+ ];
+ }
}
$addTables['count'] = count($addTables['rows']);
- if($start != 0){
- $addTables['rows'] = array_splice($addTables['rows'], $start);
+ if ($start != 0) {
+ $addTables['rows'] = array_splice($addTables['rows'], $start);
}
$addTables['rows'] = array_splice($addTables['rows'], 0, $limit);
} else {
- $addTables = AdditionalTables::getAll( $start, $limit, $filter );
+ $addTables = AdditionalTables::getAll($start, $limit, $filter);
}
foreach ($addTables['rows'] as $i => $table) {
- try {
- $con = Propel::getConnection( PmTable::resolveDbSource( $table['DBS_UID'] ) );
- $stmt = $con->createStatement();
- $rs = $stmt->executeQuery( 'SELECT COUNT(*) AS NUM_ROWS from ' . $table['ADD_TAB_NAME'] );
- if ($rs->next()) {
- $r = $rs->getRow();
- $addTables['rows'][$i]['NUM_ROWS'] = $r['NUM_ROWS'];
- } else {
- $addTables['rows'][$i]['NUM_ROWS'] = 0;
- }
-
- //removing the prefix "PMT" to allow alphabetical order (just in view)
- if (substr( $addTables['rows'][$i]['ADD_TAB_NAME'], 0, 4 ) == 'PMT_') {
- $addTables['rows'][$i]['ADD_TAB_NAME'] = substr( $addTables['rows'][$i]['ADD_TAB_NAME'], 4 );
- }
- } catch (Exception $e) {
- $addTables['rows'][$i]['NUM_ROWS'] = G::LoadTranslation( 'ID_TABLE_NOT_FOUND' );
+ //removing the prefix "PMT" to allow alphabetical order (just in view)
+ if (substr($addTables['rows'][$i]['ADD_TAB_NAME'], 0, 4) == 'PMT_') {
+ $addTables['rows'][$i]['ADD_TAB_NAME'] = substr($addTables['rows'][$i]['ADD_TAB_NAME'], 4);
}
}
@@ -1152,7 +1154,13 @@ class pmTablesProxy extends HttpProxyController
}
}
- public function genDataReport ($httpData)
+ /**
+ * It eliminates and generates the data report from the cases of a process.
+ *
+ * @param object $httpData
+ * @return object
+ */
+ public function genDataReport($httpData)
{
$result = new stdClass();
@@ -1160,12 +1168,26 @@ class pmTablesProxy extends HttpProxyController
$result->success = true;
$additionalTables = new AdditionalTables();
- $table = $additionalTables->load( $httpData->id );
- if ($table['PRO_UID'] != '') {
- $additionalTables->populateReportTable( $table['ADD_TAB_NAME'], PmTable::resolveDbSource( $table['DBS_UID'] ), $table['ADD_TAB_TYPE'], $table['PRO_UID'], $table['ADD_TAB_GRID'], $table['ADD_TAB_UID'] );
- $result->message = 'generated for table ' . $table['ADD_TAB_NAME'];
- }
+ $table = $additionalTables->load($httpData->id);
+ if (!empty($table) && $table['PRO_UID'] != '') {
+ try {
+ $additionalTables->populateReportTable($table['ADD_TAB_NAME'], PmTable::resolveDbSource($table['DBS_UID']), $table['ADD_TAB_TYPE'], $table['PRO_UID'], $table['ADD_TAB_GRID'], $table['ADD_TAB_UID']);
+ $result->message = 'Generated for table ' . $table['ADD_TAB_NAME'];
+ } catch (Exception $e) {
+ $context = Bootstrap::getDefaultContextLog();
+ $context['proUid'] = $table['PRO_UID'];
+ $context['tableName'] = $table['ADD_TAB_NAME'];
+ $context['message'] = $e->getMessage();
+ Bootstrap::registerMonolog('dataReport', 500, 'Generation of data report could not be completed', $context, $context['workspace'], 'processmaker.log');
+
+ $result->message = 'Generation of data report could not be completed. Please check the processmaker.log for more details.';
+ $result->success = false;
+ }
+ } else {
+ $result->message = 'Unable to retrieve the table for this id: ' . $httpData->id . '.';
+ $result->success = false;
+ }
return $result;
}
diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql
index bab798762..202b8e595 100644
--- a/workflow/engine/data/mysql/insert.sql
+++ b/workflow/engine/data/mysql/insert.sql
@@ -58323,6 +58323,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_GRID_PAGE_NO_ROWS_MESSAGE','en','No rows to display','2014-01-15') ,
( 'LABEL','ID_GRID_PAGE_NO_SKIN_MESSAGE','en','No skins to display','2014-01-15') ,
( 'LABEL','ID_GRID_PAGE_NO_USERS_MESSAGE','en','No users to display','2014-01-15') ,
+( 'LABEL','ID_GRID_VARIABLE_NAME_ERROR','en','A valid variable starts with a letter or underscore, followed by any number of letters, numbers, or underscores. Variables with wrong names: {0}','2017-11-16') ,
( 'LABEL','ID_GRID_WIZARD','en','ProcessMaker Grid Wizard','2014-01-15') ,
( 'LABEL','ID_GROUP','en','Group','2014-01-15') ,
( 'LABEL','ID_GROUPS','en','Groups','2014-01-15') ,
@@ -59834,6 +59835,9 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_MAFE_TRANSLATION_DIRECTORY','en','Mafe Translation Directory','2018-07-09') ,
( 'LABEL','ID_MAFE_TRANSLATION_NOT_WRITEABLE','en','The mafe translation file is not writable.
Please give write permission to file:','2018-07-09') ,
( 'LABEL','ID_MAIL_SENT_SUCCESSFULLY','en','Your message has been sent successfully','2014-01-15') ,
+( 'LABEL','ID_MAIL_STATUS_ERROR','en','Error','2018-10-02') ,
+( 'LABEL','ID_MAIL_STATUS_PENDING','en','Pending','2018-10-02') ,
+( 'LABEL','ID_MAIL_STATUS_SENT','en','Sent','2018-10-02') ,
( 'LABEL','ID_MAIL_TEST_SUCCESS','en','Test message sent successfully','2014-01-15') ,
( 'LABEL','ID_MAIL_TO_NOT_VALID_ADDRESS','en','"Mail to" does not contain a valid email address format','2014-01-15') ,
( 'LABEL','ID_MAINTENANCE','en','Maintenance','2014-01-15') ;
@@ -60300,6 +60304,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_PMTABLE_IMPORT_SUCCESS','en','File "{0}" imported successfully.','2014-01-15') ,
( 'LABEL','ID_PMTABLE_IMPORT_WITH_ERRORS','en','File "{0}" imported but with errors:','2016-02-18') ,
( 'LABEL','ID_PMTABLE_INVALID_FIELD_NAME','en','The following fields cannot be created because they contain the reserved words "{0}"','2014-10-21') ,
+( 'LABEL','ID_PMTABLE_INVALID_FIELD_NAME_VARIABLE','en','There is a conflict with some field names: "{0}", please rename them avoiding the use of numbers and considering that underscores are ignored when validating unique field names.','2018-04-03') ,
( 'LABEL','ID_PMTABLE_INVALID_FILE','en','Invalid PM table(s) file, import aborted!','2014-01-15') ,
( 'LABEL','ID_PMTABLE_INVALID_NAME','en','Could not create the table with the name "{0}" because it is a reserved word.','2014-01-15') ,
( 'LABEL','ID_PMTABLE_NOT_FOUND','en','The PM Table associated with this DynaForm could not be found.','2014-11-12') ,
diff --git a/workflow/engine/methods/setup/cronAjax.php b/workflow/engine/methods/setup/cronAjax.php
index a0dcc40a1..7bf5e46a3 100644
--- a/workflow/engine/methods/setup/cronAjax.php
+++ b/workflow/engine/methods/setup/cronAjax.php
@@ -1,117 +1,10 @@
1) {
- $date = (isset( $arrayAux[0] )) ? trim( $arrayAux[0] ) : "";
- $workspace = (isset( $arrayAux[1] )) ? trim( $arrayAux[1] ) : "";
- $action = (isset( $arrayAux[2] )) ? trim( $arrayAux[2] ) : "";
- $status = (isset( $arrayAux[3] )) ? trim( $arrayAux[3] ) : "";
- $description = (isset( $arrayAux[4] )) ? trim( $arrayAux[4] ) : "";
- }
-
- $mktDate = (! empty( $date )) ? mktimeDate( $date ) : 0;
-
- //Filter
- $sw = 1;
-
- if ($filter["workspace"] != "ALL" && $workspace != $filter["workspace"]) {
- $sw = 0;
- }
-
- if ($filter["status"] != "ALL") {
- switch ($filter["status"]) {
- case "COMPLETED":
- if ($status != "action") {
- $sw = 0;
- }
- break;
- case "FAILED":
- if ($status == "action") {
- $sw = 0;
- }
- break;
- }
- }
-
- if (! empty( $filter["dateFrom"] ) && $mktDate > 0) {
- if (! (mktimeDate( $filter["dateFrom"] ) <= $mktDate)) {
- $sw = 0;
- }
- }
-
- if (! empty( $filter["dateTo"] ) && $mktDate > 0) {
- if (! ($mktDate <= mktimeDate( $filter["dateTo"] . " 23:59:59" ))) {
- $sw = 0;
- }
- }
-
- $arrayData = array ();
-
- if ($sw == 1) {
- $arrayData = array ("DATE" => $date, "ACTION" => $action, "STATUS" => $status, "DESCRIPTION" => $description
- );
- }
-
- return $arrayData;
-}
-
-function cronDataGet ($filter, $r, $i)
-{
- $i = $i + 1;
-
- $arrayData = array ();
- $strAux = null;
- $numRec = 0;
- $cont = 0;
-
- $file = PATH_DATA . "log" . PATH_SEP . "cron.log";
-
- if (file_exists($file)) {
- $arrayFileData = file($file);
-
- for ($k = 0; $k <= count($arrayFileData) - 1; $k++) {
- $strAux = $arrayFileData[$k];
-
- if (!empty($strAux)) {
- $arrayAux = cronArraySet($strAux, $filter);
-
- if (count($arrayAux) > 0) {
- $cont = $cont + 1;
-
- if ($cont >= $i && count($arrayData) + 1 <= $r) {
- $arrayData[] = $arrayAux;
- }
- }
- }
- }
- }
-
- $numRec = $cont;
-
- return array($numRec, $arrayData);
-}
-
-$option = (isset( $_REQUEST["option"] )) ? $_REQUEST["option"] : null;
-
-$response = array ();
+$response = [];
switch ($option) {
case "LST":
@@ -121,40 +14,42 @@ switch ($option) {
$dateFrom = $_REQUEST["dateFrom"];
$dateTo = $_REQUEST["dateTo"];
- $arrayFilter = array ("workspace" => $workspace,"status" => $status,"dateFrom" => str_replace( "T00:00:00", null, $dateFrom ),"dateTo" => str_replace( "T00:00:00", null, $dateTo )
- );
+ $filter = [
+ "workspace" => $workspace,
+ "status" => $status,
+ "dateFrom" => str_replace("T00:00:00", null, $dateFrom),
+ "dateTo" => str_replace("T00:00:00", null, $dateTo)
+ ];
- $limit = isset( $_REQUEST["limit"] ) ? $_REQUEST["limit"] : $pageSize;
- $start = isset( $_REQUEST["start"] ) ? $_REQUEST["start"] : 0;
+ $start = (int) isset($_REQUEST["start"]) ? $_REQUEST["start"] : 0;
+ $limit = (int) isset($_REQUEST["limit"]) ? $_REQUEST["limit"] : $pageSize;
- list ($numRec, $data) = cronDataGet( $arrayFilter, $limit, $start );
+ $cron = new Cron();
+ list ($count, $data) = $cron->getData($filter, $start, $limit);
- $response = array ("success" => true,"resultTotal" => $numRec,"resultRoot" => $data
- );
+ $response = [
+ "success" => true,
+ "resultTotal" => $count,
+ "resultRoot" => $data
+ ];
break;
case "EMPTY":
$status = 1;
-
try {
$file = PATH_DATA . "log" . PATH_SEP . "cron.log";
-
- if (file_exists( $file )) {
- //file_put_contents($file, null);
- unlink( $file );
+ if (file_exists($file)) {
+ unlink($file);
}
-
$response["status"] = "OK";
G::auditLog("ClearCron");
} catch (Exception $e) {
$response["message"] = $e->getMessage();
$status = 0;
}
-
if ($status == 0) {
$response["status"] = "ERROR";
}
break;
}
-echo G::json_encode( $response );
-
+echo G::json_encode($response);
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php
index 37de0394e..968335963 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php
@@ -9,6 +9,7 @@ use AbeRequests;
use AbeRequestsPeer;
use AbeResponsesPeer;
use ApplicationPeer;
+use AppDelegation;
use AppDelegationPeer;
use Criteria;
use EmailServerPeer;
@@ -23,6 +24,7 @@ use PMLicensedFeatures;
use ProcessPeer;
use ResultSet;
use SpoolRun;
+use Users as ClassUsers;
use stdClass;
use UsersPeer;
use TaskPeer;
@@ -266,11 +268,18 @@ class ActionsByEmail
return $response;
}
+ /**
+ * Get the information for the log
+ *
+ * @param array $arrayData
+ *
+ * @return array
+ */
public function loadActionByEmail(array $arrayData)
{
+ //Get the total
$criteria = new Criteria();
$criteria->addSelectColumn('COUNT(*)');
-
$criteria->addJoin(AbeConfigurationPeer::ABE_UID, AbeRequestsPeer::ABE_UID);
$criteria->addJoin(AppDelegationPeer::APP_UID, AbeRequestsPeer::APP_UID);
$criteria->addJoin(AppDelegationPeer::DEL_INDEX, AbeRequestsPeer::DEL_INDEX);
@@ -288,7 +297,6 @@ class ActionsByEmail
$criteria->addSelectColumn(AbeConfigurationPeer::ABE_TEMPLATE);
$criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD);
$criteria->addSelectColumn(AbeConfigurationPeer::DYN_UID);
-
$criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_UID);
$criteria->addSelectColumn(AbeRequestsPeer::APP_UID);
$criteria->addSelectColumn(AbeRequestsPeer::DEL_INDEX);
@@ -298,14 +306,10 @@ class ActionsByEmail
$criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_ANSWERED);
$criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_BODY);
$criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_DATE);
-
- $criteria->addSelectColumn(ApplicationPeer::APP_NUMBER);
-
+ $criteria->addSelectColumn(AppDelegationPeer::APP_NUMBER);
$criteria->addSelectColumn(AppDelegationPeer::DEL_PREVIOUS);
-
+ $criteria->addSelectColumn(AppDelegationPeer::USR_UID);
$criteria->addJoin(AbeConfigurationPeer::ABE_UID, AbeRequestsPeer::ABE_UID);
- $criteria->addJoin(ApplicationPeer::APP_UID, AbeRequestsPeer::APP_UID);
-
$criteria->addJoin(AppDelegationPeer::APP_UID, AbeRequestsPeer::APP_UID);
$criteria->addJoin(AppDelegationPeer::DEL_INDEX, AbeRequestsPeer::DEL_INDEX);
$criteria->addDescendingOrderByColumn(AbeRequestsPeer::ABE_REQ_DATE);
@@ -313,66 +317,37 @@ class ActionsByEmail
$criteria->setOffset($arrayData['start']);
$result = AbeConfigurationPeer::doSelectRS($criteria);
$result->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- $data = Array();
- $arrayPro = Array();
- $arrayTAS = Array();
+ $data = [];
$index = 0;
-
while ($result->next()) {
- $data[] = $result->getRow();
- $criteriaRes = new Criteria();
+ $row = $result->getRow();
+ $row['ABE_REQ_STATUS'] = G::LoadTranslation('ID_MAIL_STATUS_' . $row['ABE_REQ_STATUS']);
+ $data[] = $row;
+ //Get the response
+ $abe = new AbeRequests();
+ $dataRes = $abe->load($data[$index]['ABE_REQ_UID']);
+ $data[$index]['ABE_RES_UID'] = !empty($dataRes['ABE_RES_UID']) ? $dataRes['ABE_RES_UID'] : '';
+ $data[$index]['ABE_RES_CLIENT_IP'] = !empty($dataRes['ABE_RES_CLIENT_IP']) ? $dataRes['ABE_RES_CLIENT_IP'] : '';
+ $data[$index]['ABE_RES_DATA'] = !empty($dataRes['ABE_RES_DATA']) ? $dataRes['ABE_RES_DATA'] : '';
+ $data[$index]['ABE_RES_STATUS'] = !empty($dataRes['ABE_RES_STATUS']) ? $dataRes['ABE_RES_STATUS'] : '';
+ $data[$index]['ABE_RES_MESSAGE'] = !empty($dataRes['ABE_RES_UID']) ? $dataRes['ABE_RES_MESSAGE'] : '';
- $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_UID);
- $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_CLIENT_IP);
- $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_DATA);
- $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_STATUS);
- $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_MESSAGE);
-
- $criteriaRes->add(AbeResponsesPeer::ABE_REQ_UID, $data[$index]['ABE_REQ_UID']);
-
- $resultRes = AbeResponsesPeer::doSelectRS($criteriaRes);
- $resultRes->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- $resultRes->next();
- $dataRes = Array();
-
- if ($dataRes = $resultRes->getRow()) {
- $data[$index]['ABE_RES_UID'] = $dataRes['ABE_RES_UID'];
- $data[$index]['ABE_RES_CLIENT_IP'] = $dataRes['ABE_RES_CLIENT_IP'];
- $data[$index]['ABE_RES_DATA'] = $dataRes['ABE_RES_DATA'];
- $data[$index]['ABE_RES_STATUS'] = $dataRes['ABE_RES_STATUS'];
- $data[$index]['ABE_RES_MESSAGE'] = $dataRes['ABE_RES_MESSAGE'];
- } else {
- $data[$index]['ABE_RES_UID'] = '';
- $data[$index]['ABE_RES_CLIENT_IP'] = '';
- $data[$index]['ABE_RES_DATA'] = '';
- $data[$index]['ABE_RES_STATUS'] = '';
- $data[$index]['ABE_RES_MESSAGE'] = '';
- }
-
- $criteriaRes = new Criteria();
-
- $criteriaRes->addSelectColumn(AppDelegationPeer::USR_UID);
- $criteriaRes->addSelectColumn(UsersPeer::USR_FIRSTNAME);
- $criteriaRes->addSelectColumn(UsersPeer::USR_LASTNAME);
-
- $criteria->addJoin(AppDelegationPeer::APP_UID, $data[$index]['APP_UID']);
- $criteria->addJoin(AppDelegationPeer::DEL_INDEX, $data[$index]['DEL_PREVIOUS']);
- $criteria->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID);
- $resultRes = AppDelegationPeer::doSelectRS($criteriaRes);
- $resultRes->setFetchmode(ResultSet::FETCHMODE_ASSOC);
- $resultRes->next();
-
- if ($dataRes = $resultRes->getRow()) {
+ //Get the previous user
+ $appDelegation = new AppDelegation();
+ $usrUid = $appDelegation->getUserAssignedInThread($data[$index]['APP_UID'], $data[$index]['DEL_PREVIOUS']);
+ $users = new ClassUsers();
+ $dataRes = $users->load($usrUid);
+ if (!empty($dataRes)) {
$data[$index]['USER'] = $dataRes['USR_FIRSTNAME'] . ' ' . $dataRes['USR_LASTNAME'];
} else {
$data[$index]['USER'] = '';
}
- $data[$index]['ABE_REQ_ANSWERED'] = ($data[$index]['ABE_REQ_ANSWERED'] == 1) ? 'YES' : 'NO';
+ $data[$index]['ABE_REQ_ANSWERED'] = ($data[$index]['ABE_REQ_ANSWERED'] == 1) ? G::LoadTranslation('ID_YES') : G::LoadTranslation('ID_NO');
$index++;
}
- $response = array();
+ $response = [];
$response['totalCount'] = $totalCount;
$response['data'] = $data;
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php
index ebc9fc2d9..f8e177c1e 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php
@@ -386,11 +386,12 @@ class InputDocument
*
* @param string $applicationUid
* @param string $userUid
+ * @param array $documentsCanAccess
*
* @return array Return an array with data of an InputDocument
* @throws Exception
*/
- public function getCasesInputDocuments($applicationUid, $userUid)
+ public function getCasesInputDocuments($applicationUid, $userUid, $documentsCanAccess = [])
{
try {
//Verify data inbox
@@ -415,7 +416,10 @@ class InputDocument
$criteria = $this->getAppDocumentCriteriaByData($applicationUid);
if (!$flagInbox) {
- $criteria->add(AppDocumentPeer::USR_UID, $userUid, Criteria::EQUAL);
+ $criteria->add(
+ $criteria->getNewCriterion(AppDocumentPeer::USR_UID, $userUid, Criteria::EQUAL)->addOr(
+ $criteria->getNewCriterion(AppDocumentPeer::APP_DOC_UID, $documentsCanAccess, Criteria::IN))
+ );
}
$rsCriteria = AppDocumentPeer::doSelectRS($criteria);
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php
index cea3ed5e7..d2c1bb2a9 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php
@@ -2,7 +2,11 @@
namespace ProcessMaker\BusinessModel;
+use AdditionalTables;
use DynaformHandler;
+use Exception;
+use G;
+use PmDynaform;
class DynaForm
{
@@ -407,6 +411,8 @@ class DynaForm
$this->throwExceptionIfExistsTitle($processUid, $arrayData["DYN_TITLE"], $this->arrayFieldNameForException["dynaFormTitle"]);
+ $this->throwExceptionIfTheColumnIdentifierIsNotValid($arrayData);
+
//Create
$dynaForm = new \Dynaform();
@@ -461,6 +467,8 @@ class DynaForm
$this->throwExceptionIfExistsTitle($processUid, $arrayData["DYN_TITLE"], $this->arrayFieldNameForException["dynaFormTitle"], $dynaFormUid);
}
+ $this->throwExceptionIfTheColumnIdentifierIsNotValid($arrayData);
+
//Update
$arrayData["DYN_UID"] = $dynaFormUid;
@@ -1131,4 +1139,74 @@ class DynaForm
throw $e;
}
}
+
+ /**
+ * Validates if the grid columns tha will be stored have valid names, otherwise
+ * it throws an exception.
+ *
+ * @param array $arrayData, form data that will be saved
+ *
+ * @throws Exception
+ */
+ public function throwExceptionIfTheColumnIdentifierIsNotValid($arrayData)
+ {
+ if (isset($arrayData['DYN_CONTENT'])) {
+ $oldDynaform = $this->getDynaFormRecordByPk($arrayData['DYN_UID'], []);
+ $oldGrids = PmDynaform::getGridsAndFields($oldDynaform['DYN_CONTENT']);
+ $oldColumns = $this->getColumnsOfArrayGrids($oldGrids);
+
+ $grids = PmDynaform::getGridsAndFields($arrayData['DYN_CONTENT']);
+ $columns = $this->getColumnsOfArrayGrids($grids);
+
+ foreach ($oldColumns as $oldField) {
+ foreach ($columns as $key => $field) {
+ if ($oldField->id === $field->id) {
+ unset($columns[$key]);
+ break;
+ }
+ }
+ }
+
+ $invalids = [];
+ $identicals = [];
+ foreach ($columns as $column) {
+ try {
+ Validator::isValidVariableName($column->id);
+ } catch (Exception $e) {
+ $invalids[] = $column->id;
+ }
+ foreach ($oldColumns as $oldColumn) {
+ if (strtolower(AdditionalTables::getPHPName($column->id)) === strtolower(AdditionalTables::getPHPName($oldColumn->id))) {
+ $identicals[] = "'" . $column->id . "' - '" . $oldColumn->id . "'";
+ }
+ }
+ }
+
+ if (count($invalids) > 0) {
+ throw (new Exception(G::LoadTranslation("ID_GRID_VARIABLE_NAME_ERROR", [implode(', ', $invalids)])));
+ }
+
+ if (count($identicals) > 0) {
+ throw (new Exception(G::LoadTranslation("DYNAFIELD_PHPNAME_ALREADY_EXIST", [implode(', ', $identicals)])));
+ }
+ }
+ }
+
+ /**
+ * Gets a list of all columns of the grid array.
+ *
+ * @param array $grids
+ *
+ * @return array
+ */
+ private function getColumnsOfArrayGrids($grids)
+ {
+ $columns = [];
+ foreach ($grids as $grid) {
+ if (isset($grid->columns)) {
+ $columns = array_merge($columns, $grid->columns);
+ }
+ }
+ return $columns;
+ }
}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Files/Cron.php b/workflow/engine/src/ProcessMaker/BusinessModel/Files/Cron.php
new file mode 100644
index 000000000..35d565485
--- /dev/null
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Files/Cron.php
@@ -0,0 +1,146 @@
+setFilepath(PATH_DATA . 'log' . PATH_SEP . 'cron.log');
+ }
+
+ /**
+ * Set the cron file log path.
+ *
+ * @param string $filepath
+ */
+ public function setFilepath($filepath)
+ {
+ $this->filepath = $filepath;
+ }
+
+ /**
+ * Get data from file.
+ *
+ * @param array $filter
+ * @param int $start
+ * @param int $limit
+ * @return array
+ */
+ public function getData($filter, $start = 0, $limit = 20)
+ {
+ if (!file_exists($this->filepath)) {
+ return [0, []];
+ }
+ $result = [];
+ $count = 0;
+ $array = file($this->filepath);
+ foreach ($array as $line) {
+ if (empty($line)) {
+ continue;
+ }
+ $row = $this->getRow($line, $filter);
+ if ($row === null) {
+ continue;
+ }
+ $count = $count + 1;
+ if ($start < $count && count($result) < $limit) {
+ $row['DATE'] = DateTime::convertUtcToTimeZone($row['DATE']);
+ $result[] = $row;
+ }
+ }
+ return [$count, $result];
+ }
+
+ /**
+ * Get registry from string line.
+ *
+ * @param string $line
+ * @param array $filter
+ * @return array
+ */
+ public function getRow($line, $filter)
+ {
+ $row = explode('|', $line);
+ $date = '';
+ $workspace = '';
+ $action = '';
+ $status = '';
+ $description = trim($row[0]);
+
+ if (!empty($row)) {
+ $date = isset($row[0]) ? trim($row[0]) : '';
+ $workspace = isset($row[1]) ? trim($row[1]) : '';
+ $action = isset($row[2]) ? trim($row[2]) : '';
+ $status = isset($row[3]) ? trim($row[3]) : '';
+ $description = isset($row[4]) ? trim($row[4]) : '';
+ }
+
+
+ $isValid = true;
+ if ($filter['workspace'] != 'ALL' && $workspace != $filter['workspace']) {
+ $isValid = false;
+ }
+ if ($filter['status'] != 'ALL') {
+ switch ($filter['status']) {
+ case 'COMPLETED':
+ if ($status != 'action') {
+ $isValid = false;
+ }
+ break;
+ case 'FAILED':
+ if ($status == 'action') {
+ $isValid = false;
+ }
+ break;
+ }
+ }
+
+ $mktDate = !empty($date) ? $this->mktimeDate($date) : 0;
+ if (!empty($filter['dateFrom']) && $mktDate > 0) {
+ if (!($this->mktimeDate($filter['dateFrom']) <= $mktDate)) {
+ $isValid = false;
+ }
+ }
+ if (!empty($filter['dateTo']) && $mktDate > 0) {
+ if (!($mktDate <= $this->mktimeDate($filter['dateTo'] . ' 23:59:59'))) {
+ $isValid = false;
+ }
+ }
+
+ if ($isValid) {
+ return [
+ 'DATE' => $date,
+ 'ACTION' => $action,
+ 'STATUS' => $status,
+ 'DESCRIPTION' => $description
+ ];
+ }
+ return null;
+ }
+
+ /**
+ * Create a timestamp from a string value.
+ *
+ * @param string $date
+ * @return int|false
+ */
+ public function mktimeDate($date)
+ {
+ $array = getdate(strtotime($date));
+ $mktime = mktime($array['hours'], $array['minutes'], $array['seconds'], $array['mon'], $array['mday'], $array['year']);
+ return $mktime;
+ }
+}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ReportTable.php b/workflow/engine/src/ProcessMaker/BusinessModel/ReportTable.php
index 2ea868a00..387257903 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/ReportTable.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/ReportTable.php
@@ -1,8 +1,15 @@
loadByName($tableName);
@@ -122,13 +129,7 @@ class ReportTable
array_multisort($primaryKeyColumn, SORT_ASC, $contentData);
foreach ($contentData as $row) {
- $arrayResult = $this->createRecord(
- [
- 'id' => $arrayAdditionalTableData['ADD_TAB_UID'],
- 'rows' => base64_encode(serialize($row)),
- ],
- 'base64'
- );
+ $arrayResult = $this->createRecord(['id' => $arrayAdditionalTableData['ADD_TAB_UID'], 'rows' => base64_encode(serialize($row)),], 'base64');
if (!$arrayResult['success']) {
$errors .= $arrayResult['message'];
@@ -141,7 +142,7 @@ class ReportTable
//Return
return $errors;
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw $e;
}
}
@@ -157,21 +158,20 @@ class ReportTable
public function createRecord(array $arrayData, $codification = 'json')
{
try {
- $additionalTable = new \AdditionalTables();
+ $additionalTable = new AdditionalTables();
$arrayAdditionalTableData = $additionalTable->load($arrayData['id'], true);
$additionalTableClassName = $arrayAdditionalTableData['ADD_TAB_CLASS_NAME'];
$additionalTableClassPeerName = $additionalTableClassName . 'Peer';
- $row = ($codification == 'base64')?
- unserialize(base64_decode($arrayData['rows'])) : \G::json_decode($arrayData['rows']);
- $row = (array)($row);
+ $row = ($codification == 'base64') ? unserialize(base64_decode($arrayData['rows'])) : G::json_decode($arrayData['rows']);
+ $row = (array) ($row);
$row = array_merge(array_change_key_case($row, CASE_LOWER), array_change_key_case($row, CASE_UPPER));
$flagSave = false;
if (!file_exists(PATH_WORKSPACE . 'classes' . PATH_SEP . $additionalTableClassName . '.php')) {
- throw new Exception(\G::LoadTranslation('ID_PMTABLE_CLASS_DOESNT_EXIST', [$additionalTableClassName]));
+ throw new Exception(G::LoadTranslation('ID_PMTABLE_CLASS_DOESNT_EXIST', [$additionalTableClassName]));
}
require_once(PATH_WORKSPACE . 'classes' . PATH_SEP . $additionalTableClassName . '.php');
@@ -188,17 +188,13 @@ class ReportTable
$primaryKeysValues = [];
foreach ($additionalTable->getPrimaryKeys() as $primaryKey) {
- $method = 'get' . \AdditionalTables::getPHPName($primaryKey['FLD_NAME']);
+ $method = 'get' . AdditionalTables::getPHPName($primaryKey['FLD_NAME']);
$primaryKeysValues[] = $obj->$method();
}
- $index = \G::encrypt(implode(',', $primaryKeysValues), 'pmtable');
+ $index = G::encrypt(implode(',', $primaryKeysValues), 'pmtable');
- \G::auditLog(
- 'AddDataPmtable',
- 'Table Name: ' . $arrayAdditionalTableData['ADD_TAB_NAME'] .
- ' Table ID: (' . $arrayAdditionalTableData['ADD_TAB_UID'] . ')'
- );
+ G::auditLog('AddDataPmtable', 'Table Name: ' . $arrayAdditionalTableData['ADD_TAB_NAME'] . ' Table ID: (' . $arrayAdditionalTableData['ADD_TAB_UID'] . ')');
$flagSave = true;
} else {
@@ -208,10 +204,7 @@ class ReportTable
$msg .= $objValidationFailure->getMessage() . "\n";
}
- throw new Exception(
- \G::LoadTranslation('ID_ERROR_TRYING_INSERT') .
- '"' . $arrayAdditionalTableData['ADD_TAB_NAME'] . "\"\n" . $msg
- );
+ throw new Exception(G::LoadTranslation('ID_ERROR_TRYING_INSERT') . '"' . $arrayAdditionalTableData['ADD_TAB_NAME'] . "\"\n" . $msg);
}
} else {
$flagSave = false;
@@ -220,11 +213,11 @@ class ReportTable
//Return
return [
'success' => $flagSave,
- 'message' => ($flagSave)? \G::LoadTranslation('ID_RECORD_SAVED_SUCCESFULLY') : '',
- 'rows' => ($flagSave)? $obj->toArray(\BasePeer::TYPE_FIELDNAME) : [],
- 'index' => ($flagSave)? $index : '',
+ 'message' => ($flagSave) ? G::LoadTranslation('ID_RECORD_SAVED_SUCCESFULLY') : '',
+ 'rows' => ($flagSave) ? $obj->toArray(\BasePeer::TYPE_FIELDNAME) : [],
+ 'index' => ($flagSave) ? $index : '',
];
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw $e;
}
}
@@ -240,13 +233,8 @@ class ReportTable
*
* @return array
*/
- public function checkPmtFileThrowErrors(
- array $arrayTableSchema,
- $processUid,
- $flagFromAdmin,
- $flagOverwrite,
- $postProUid
- ) {
+ public function checkPmtFileThrowErrors(array $arrayTableSchema, $processUid, $flagFromAdmin, $flagOverwrite, $postProUid)
+ {
try {
$arrayError = [];
@@ -254,7 +242,7 @@ class ReportTable
$processMap = new \ProcessMap();
$arrayProcessUid = [];
- foreach (\G::json_decode($processMap->getAllProcesses()) as $value) {
+ foreach (G::json_decode($processMap->getAllProcesses()) as $value) {
if ($value->value != '') {
$arrayProcessUid[] = $value->value;
}
@@ -266,19 +254,19 @@ class ReportTable
$contentSchema = $value;
//The table exists?
- $additionalTable = new \AdditionalTables();
+ $additionalTable = new AdditionalTables();
$arrayAdditionalTableData = $additionalTable->loadByName($contentSchema['ADD_TAB_NAME']);
- $tableProUid = (isset($contentSchema['PRO_UID']))? $contentSchema['PRO_UID'] : $postProUid;
- $flagIsPmTable = ($contentSchema['PRO_UID'] == '')? true : false;
+ $tableProUid = (isset($contentSchema['PRO_UID'])) ? $contentSchema['PRO_UID'] : $postProUid;
+ $flagIsPmTable = ($contentSchema['PRO_UID'] == '') ? true : false;
if ($flagFromAdmin) {
if ($flagIsPmTable) {
if ($arrayAdditionalTableData && !$flagOverwrite) {
$arrayError[$i]['NAME_TABLE'] = $contentSchema['ADD_TAB_NAME'];
$arrayError[$i]['ERROR_TYPE'] = 1; //ERROR_PM_TABLES_OVERWRITE
- $arrayError[$i]['ERROR_MESS'] = \G::LoadTranslation('ID_OVERWRITE_PMTABLE', [$contentSchema['ADD_TAB_NAME']]);
+ $arrayError[$i]['ERROR_MESS'] = G::LoadTranslation('ID_OVERWRITE_PMTABLE', [$contentSchema['ADD_TAB_NAME']]);
$arrayError[$i]['IS_PMTABLE'] = $flagIsPmTable;
$arrayError[$i]['PRO_UID'] = $tableProUid;
}
@@ -286,14 +274,14 @@ class ReportTable
if (!in_array($tableProUid, $arrayProcessUid)) {
$arrayError[$i]['NAME_TABLE'] = $contentSchema['ADD_TAB_NAME'];
$arrayError[$i]['ERROR_TYPE'] = 2; //ERROR_PROCESS_NOT_EXIST
- $arrayError[$i]['ERROR_MESS'] = \G::LoadTranslation('ID_PROCESS_NOT_EXIST', [$contentSchema['ADD_TAB_NAME']]);
+ $arrayError[$i]['ERROR_MESS'] = G::LoadTranslation('ID_PROCESS_NOT_EXIST', [$contentSchema['ADD_TAB_NAME']]);
$arrayError[$i]['IS_PMTABLE'] = $flagIsPmTable;
$arrayError[$i]['PRO_UID'] = $tableProUid;
} else {
if ($arrayAdditionalTableData && !$flagOverwrite) {
$arrayError[$i]['NAME_TABLE'] = $contentSchema['ADD_TAB_NAME'];
$arrayError[$i]['ERROR_TYPE'] = 3; //ERROR_RP_TABLES_OVERWRITE
- $arrayError[$i]['ERROR_MESS'] = \G::LoadTranslation('ID_OVERWRITE_RPTABLE', [$contentSchema['ADD_TAB_NAME']]);
+ $arrayError[$i]['ERROR_MESS'] = G::LoadTranslation('ID_OVERWRITE_RPTABLE', [$contentSchema['ADD_TAB_NAME']]);
$arrayError[$i]['IS_PMTABLE'] = $flagIsPmTable;
$arrayError[$i]['PRO_UID'] = $tableProUid;
}
@@ -303,21 +291,21 @@ class ReportTable
if ($flagIsPmTable) {
$arrayError[$i]['NAME_TABLE'] = $contentSchema['ADD_TAB_NAME'];
$arrayError[$i]['ERROR_TYPE'] = 4; //ERROR_NO_REPORT_TABLE
- $arrayError[$i]['ERROR_MESS'] = \G::LoadTranslation('ID_NO_REPORT_TABLE', [$contentSchema['ADD_TAB_NAME']]);
+ $arrayError[$i]['ERROR_MESS'] = G::LoadTranslation('ID_NO_REPORT_TABLE', [$contentSchema['ADD_TAB_NAME']]);
$arrayError[$i]['IS_PMTABLE'] = $flagIsPmTable;
$arrayError[$i]['PRO_UID'] = $tableProUid;
} else {
if ($tableProUid !== $processUid) {
$arrayError[$i]['NAME_TABLE'] = $contentSchema['ADD_TAB_NAME'];
$arrayError[$i]['ERROR_TYPE'] = 5; //ERROR_OVERWRITE_RELATED_PROCESS
- $arrayError[$i]['ERROR_MESS'] = \G::LoadTranslation('ID_OVERWRITE_RELATED_PROCESS', [$contentSchema['ADD_TAB_NAME']]);
+ $arrayError[$i]['ERROR_MESS'] = G::LoadTranslation('ID_OVERWRITE_RELATED_PROCESS', [$contentSchema['ADD_TAB_NAME']]);
$arrayError[$i]['IS_PMTABLE'] = $flagIsPmTable;
$arrayError[$i]['PRO_UID'] = $tableProUid;
} else {
if ($arrayAdditionalTableData && !$flagOverwrite) {
$arrayError[$i]['NAME_TABLE'] = $contentSchema['ADD_TAB_NAME'];
$arrayError[$i]['ERROR_TYPE'] = 3; //ERROR_RP_TABLES_OVERWRITE
- $arrayError[$i]['ERROR_MESS'] = \G::LoadTranslation('ID_OVERWRITE_RPTABLE', [$contentSchema['ADD_TAB_NAME']]);
+ $arrayError[$i]['ERROR_MESS'] = G::LoadTranslation('ID_OVERWRITE_RPTABLE', [$contentSchema['ADD_TAB_NAME']]);
$arrayError[$i]['IS_PMTABLE'] = $flagIsPmTable;
$arrayError[$i]['PRO_UID'] = $tableProUid;
}
@@ -330,7 +318,7 @@ class ReportTable
//Return
return $arrayError;
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw $e;
}
}
@@ -351,9 +339,9 @@ class ReportTable
$additionalTableUid = $arrayData['REP_TAB_UID'];
$flagNew = 0;
- $additionalTables = \AdditionalTablesPeer::retrieveByPK($arrayData['REP_TAB_UID']);
+ $additionalTables = AdditionalTablesPeer::retrieveByPK($arrayData['REP_TAB_UID']);
- if (!is_null($additionalTables)){
+ if (!is_null($additionalTables)) {
$arrayData['REP_TAB_NAME'] = 'PMT_' . trim($arrayData['REP_TAB_NAME']);
if ($additionalTables->getAddTabName() != $arrayData['REP_TAB_NAME']) {
@@ -365,7 +353,7 @@ class ReportTable
ob_start();
$arrayData['PRO_UID'] = trim($arrayData['PRO_UID']);
- $arrayData['columns'] = \G::json_decode(stripslashes($arrayData['columns'])); //Decofing data columns
+ $arrayData['columns'] = G::json_decode(stripslashes($arrayData['columns'])); //Decofing data columns
if ($flagNew == 1) {
$arrayNewColumn = [];
@@ -387,27 +375,27 @@ class ReportTable
$arrayData['columns'] = $arrayNewColumn;
}
- $additionalTable = new \AdditionalTables();
+ $additionalTable = new AdditionalTables();
$repTabClassName = $additionalTable->getPHPName($arrayData['REP_TAB_NAME']);
- $flagIsReportTable = ($arrayData['PRO_UID'] != '')? true : false;
+ $flagIsReportTable = ($arrayData['PRO_UID'] != '') ? true : false;
$columns = $arrayData['columns'];
//Reserved Words Table
$reservedWords = [
- 'ALTER', 'CLOSE', 'COMMIT', 'CREATE','DECLARE','DELETE','DROP','FETCH','FUNCTION','GRANT','INDEX',
- 'INSERT','OPEN','REVOKE','ROLLBACK','SELECT','SYNONYM','TABLE','UPDATE','VIEW','APP_UID','ROW','PMTABLE'
+ 'ALTER', 'CLOSE', 'COMMIT', 'CREATE', 'DECLARE', 'DELETE', 'DROP', 'FETCH', 'FUNCTION', 'GRANT', 'INDEX',
+ 'INSERT', 'OPEN', 'REVOKE', 'ROLLBACK', 'SELECT', 'SYNONYM', 'TABLE', 'UPDATE', 'VIEW', 'APP_UID', 'ROW', 'PMTABLE'
];
//Reserved Words Field
$reservedWordsPhp = [
- 'case','catch','cfunction','class','clone','const','continue','declare','default','do','else','elseif',
- 'enddeclare','endfor','endforeach','endif','endswitch','endwhile','extends','final','for','foreach',
- 'function','global','goto','if','implements','interface','instanceof','private','namespace','new',
- 'old_function','or','throw','protected','public','static','switch','xor','try','use','var','while'
+ 'case', 'catch', 'cfunction', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'do', 'else', 'elseif',
+ 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'extends', 'final', 'for', 'foreach',
+ 'function', 'global', 'goto', 'if', 'implements', 'interface', 'instanceof', 'private', 'namespace', 'new',
+ 'old_function', 'or', 'throw', 'protected', 'public', 'static', 'switch', 'xor', 'try', 'use', 'var', 'while'
];
- $reservedWordsSql = \G::reservedWordsSql();
+ $reservedWordsSql = G::reservedWordsSql();
//Verify if exists
if ($arrayData['REP_TAB_UID'] == '' || (isset($arrayData['forceUid']) && $arrayData['forceUid'])) {
@@ -419,23 +407,25 @@ class ReportTable
}
//Validations
- if ($additionalTable->loadByName($arrayData['REP_TAB_NAME'])) {
- throw new \Exception(\G::LoadTranslation('ID_PMTABLE_ALREADY_EXISTS', [$arrayData['REP_TAB_NAME']]));
+ if (is_array($additionalTable->loadByName($arrayData['REP_TAB_NAME']))) {
+ throw new Exception(G::LoadTranslation('ID_PMTABLE_ALREADY_EXISTS', [$arrayData['REP_TAB_NAME']]));
}
if (in_array(strtoupper($arrayData['REP_TAB_NAME']), $reservedWords) ||
- in_array(strtoupper($arrayData['REP_TAB_NAME']), $reservedWordsSql)
+ in_array(strtoupper($arrayData['REP_TAB_NAME']), $reservedWordsSql)
) {
- throw new \Exception(\G::LoadTranslation('ID_PMTABLE_INVALID_NAME', [$arrayData['REP_TAB_NAME']]));
+ throw new Exception(G::LoadTranslation('ID_PMTABLE_INVALID_NAME', [$arrayData['REP_TAB_NAME']]));
}
}
+ $this->validateFieldName($columns);
+
//Backward compatility
foreach ($columns as $i => $column) {
if (in_array(strtoupper($columns[$i]->field_name), $reservedWordsSql) ||
- in_array(strtolower($columns[$i]->field_name), $reservedWordsPhp)
+ in_array(strtolower($columns[$i]->field_name), $reservedWordsPhp)
) {
- throw new \Exception(\G::LoadTranslation('ID_PMTABLE_INVALID_FIELD_NAME', [$columns[$i]->field_name]));
+ throw new Exception(G::LoadTranslation('ID_PMTABLE_INVALID_FIELD_NAME', [$columns[$i]->field_name]));
}
switch ($column->field_type) {
@@ -475,19 +465,19 @@ class ReportTable
}
$pmTable->build();
-
+
$buildResult = ob_get_contents();
ob_end_clean();
//Updating additional table struture information
$addTabData = [
- 'ADD_TAB_UID' => $arrayData['REP_TAB_UID'],
+ 'ADD_TAB_UID' => $arrayData['REP_TAB_UID'],
'ADD_TAB_NAME' => $arrayData['REP_TAB_NAME'],
- 'ADD_TAB_CLASS_NAME' => $repTabClassName,
+ 'ADD_TAB_CLASS_NAME' => $repTabClassName,
'ADD_TAB_DESCRIPTION' => $arrayData['REP_TAB_DSC'],
'ADD_TAB_PLG_UID' => '',
- 'DBS_UID' => ($arrayData['REP_TAB_CONNECTION'])? $arrayData['REP_TAB_CONNECTION'] : 'workflow',
+ 'DBS_UID' => ($arrayData['REP_TAB_CONNECTION']) ? $arrayData['REP_TAB_CONNECTION'] : 'workflow',
'PRO_UID' => $arrayData['PRO_UID'],
'ADD_TAB_TYPE' => $arrayData['REP_TAB_TYPE'],
'ADD_TAB_GRID' => $arrayData['REP_TAB_GRID']
@@ -514,37 +504,30 @@ class ReportTable
foreach ($columns as $i => $column) {
$field->create([
- 'FLD_UID' => $column->uid,
- 'FLD_INDEX' => $i,
+ 'FLD_UID' => $column->uid,
+ 'FLD_INDEX' => $i,
'ADD_TAB_UID' => $addTabUid,
'FLD_NAME' => $column->field_name,
'FLD_DESCRIPTION' => $column->field_label,
'FLD_TYPE' => $column->field_type,
- 'FLD_SIZE' => ($column->field_size == '')? null : $column->field_size,
- 'FLD_NULL' => ($column->field_null)? 1 : 0,
- 'FLD_AUTO_INCREMENT' => ($column->field_autoincrement)? 1 : 0,
- 'FLD_KEY' => ($column->field_key)? 1 : 0,
- 'FLD_TABLE_INDEX' => (isset($column->field_index) && $column->field_index)? 1 : 0,
+ 'FLD_SIZE' => ($column->field_size == '') ? null : $column->field_size,
+ 'FLD_NULL' => ($column->field_null) ? 1 : 0,
+ 'FLD_AUTO_INCREMENT' => ($column->field_autoincrement) ? 1 : 0,
+ 'FLD_KEY' => ($column->field_key) ? 1 : 0,
+ 'FLD_TABLE_INDEX' => (isset($column->field_index) && $column->field_index) ? 1 : 0,
'FLD_FOREIGN_KEY' => 0,
'FLD_FOREIGN_KEY_TABLE' => '',
'FLD_DYN_NAME' => $column->field_dyn,
- 'FLD_DYN_UID' => $column->field_uid,
- 'FLD_FILTER' => (isset($column->field_filter) && $column->field_filter)? 1 : 0
+ 'FLD_DYN_UID' => $column->field_uid,
+ 'FLD_FILTER' => (isset($column->field_filter) && $column->field_filter) ? 1 : 0
]);
}
if ($flagIsReportTable && $flagAlterTable) {
//The table was create successfully but we're catching problems while populating table
try {
- $additionalTable->populateReportTable(
- $arrayData['REP_TAB_NAME'],
- $pmTable->getDataSource(),
- $arrayData['REP_TAB_TYPE'],
- $arrayData['PRO_UID'],
- $arrayData['REP_TAB_GRID'],
- $addTabUid
- );
- } catch (\Exception $e) {
+ $additionalTable->populateReportTable($arrayData['REP_TAB_NAME'], $pmTable->getDataSource(), $arrayData['REP_TAB_TYPE'], $arrayData['PRO_UID'], $arrayData['REP_TAB_GRID'], $addTabUid);
+ } catch (Exception $e) {
$result->message = $result->msg = $e->getMessage();
}
}
@@ -561,10 +544,7 @@ class ReportTable
}
}
- \G::auditLog(
- (isset($arrayData['REP_TAB_UID']) && $arrayData['REP_TAB_UID'] == '')?
- 'CreatePmtable' : 'UpdatePmtable', 'Fields: ' . $fieldsName
- );
+ G::auditLog((isset($arrayData['REP_TAB_UID']) && $arrayData['REP_TAB_UID'] == '') ? 'CreatePmtable' : 'UpdatePmtable', 'Fields: ' . $fieldsName);
$result->success = true;
$result->message = $result->msg = $buildResult;
@@ -575,12 +555,12 @@ class ReportTable
$pmTablesProxy = new \pmTablesProxy();
$obj = new \stdClass();
- $obj->rows = \G::json_encode([['id' => $additionalTableUid, 'type' => '']]);
+ $obj->rows = G::json_encode([['id' => $additionalTableUid, 'type' => '']]);
//Delete Report Table
$resultDeleteReportTable = $pmTablesProxy->delete($obj);
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$buildResult = ob_get_contents();
ob_end_clean();
@@ -593,7 +573,7 @@ class ReportTable
$result->type = ucfirst($pmTable->getDbConfig()->adapter);
} else {
$result->message = $result->msg = $e->getMessage();
- $result->type = \G::LoadTranslation('ID_EXCEPTION');
+ $result->type = G::LoadTranslation('ID_EXCEPTION');
}
$result->trace = $e->getTraceAsString();
@@ -616,15 +596,8 @@ class ReportTable
*
* @return string
*/
- public function createStructureOfTables(
- array $arrayTableSchema,
- array $arrayTableData,
- $processUid,
- $flagFromAdmin,
- $flagOverwrite = true,
- array $arrayTablesToExclude = [],
- array $arrayTablesToCreate = []
- ) {
+ public function createStructureOfTables(array $arrayTableSchema, array $arrayTableData, $processUid, $flagFromAdmin, $flagOverwrite = true, array $arrayTablesToExclude = [], array $arrayTablesToCreate = [])
+ {
try {
$errors = '';
@@ -636,7 +609,7 @@ class ReportTable
$contentSchema = $value;
if (!in_array($contentSchema['ADD_TAB_NAME'], $arrayTablesToExclude)) {
- $additionalTable = new \AdditionalTables();
+ $additionalTable = new AdditionalTables();
$arrayAdditionalTableData = $additionalTable->loadByName($contentSchema['ADD_TAB_NAME']);
@@ -644,7 +617,7 @@ class ReportTable
$tableData = new \stdClass();
- if (isset( $contentSchema['PRO_UID'] )) {
+ if (isset($contentSchema['PRO_UID'])) {
$tableData->PRO_UID = $contentSchema['PRO_UID'];
} else {
$tableData->PRO_UID = $_POST['form']['PRO_UID'];
@@ -673,9 +646,9 @@ class ReportTable
//renaming...
$tNameOld = $contentSchema['ADD_TAB_NAME'];
$newTableName = $contentSchema['ADD_TAB_NAME'] . '_' . date('YmdHis');
- $contentSchema['ADD_TAB_UID'] = \G::generateUniqueID();
+ $contentSchema['ADD_TAB_UID'] = G::generateUniqueID();
$contentSchema['ADD_TAB_NAME'] = $newTableName;
- $contentSchema['ADD_TAB_CLASS_NAME'] = \AdditionalTables::getPHPName($newTableName);
+ $contentSchema['ADD_TAB_CLASS_NAME'] = AdditionalTables::getPHPName($newTableName);
//Mapping the table name for posterior uses
$tableNameMap[$tNameOld] = $contentSchema['ADD_TAB_NAME'];
@@ -691,17 +664,17 @@ class ReportTable
foreach ($contentSchema['FIELDS'] as $field) {
$columns[] = [
- 'uid' => '',
- 'field_uid' => '',
- 'field_name' => $field['FLD_NAME'],
- 'field_dyn' => (isset($field['FLD_DYN_NAME']))? $field['FLD_DYN_NAME'] : '',
- 'field_label' => (isset($field['FLD_DESCRIPTION']))? $field['FLD_DESCRIPTION'] : '',
- 'field_type' => $field['FLD_TYPE'],
- 'field_size' => $field['FLD_SIZE'],
- 'field_key' => (isset($field['FLD_KEY']))? $field['FLD_KEY'] : 0,
- 'field_null' => (isset($field['FLD_NULL']))? $field['FLD_NULL'] : 1,
- 'field_autoincrement' => (isset($field['FLD_AUTO_INCREMENT']))?
- $field['FLD_AUTO_INCREMENT'] : 0
+ 'uid' => '',
+ 'field_uid' => '',
+ 'field_name' => $field['FLD_NAME'],
+ 'field_dyn' => (isset($field['FLD_DYN_NAME'])) ? $field['FLD_DYN_NAME'] : '',
+ 'field_label' => (isset($field['FLD_DESCRIPTION'])) ? $field['FLD_DESCRIPTION'] : '',
+ 'field_type' => $field['FLD_TYPE'],
+ 'field_size' => $field['FLD_SIZE'],
+ 'field_key' => (isset($field['FLD_KEY'])) ? $field['FLD_KEY'] : 0,
+ 'field_null' => (isset($field['FLD_NULL'])) ? $field['FLD_NULL'] : 1,
+ 'field_autoincrement' => (isset($field['FLD_AUTO_INCREMENT'])) ?
+ $field['FLD_AUTO_INCREMENT'] : 0
];
}
@@ -709,23 +682,21 @@ class ReportTable
$tableData->REP_TAB_NAME = $contentSchema['ADD_TAB_NAME'];
$tableData->REP_TAB_DSC = $contentSchema['ADD_TAB_DESCRIPTION'];
$tableData->REP_TAB_CONNECTION = $contentSchema['DBS_UID'];
- $tableData->REP_TAB_TYPE = (isset($contentSchema['ADD_TAB_TYPE']))? $contentSchema['ADD_TAB_TYPE'] : '';
- $tableData->REP_TAB_GRID = (isset($contentSchema['ADD_TAB_GRID']))? $contentSchema['ADD_TAB_GRID'] : '';
- $tableData->columns = \G::json_encode($columns);
+ $tableData->REP_TAB_TYPE = (isset($contentSchema['ADD_TAB_TYPE'])) ? $contentSchema['ADD_TAB_TYPE'] : '';
+ $tableData->REP_TAB_GRID = (isset($contentSchema['ADD_TAB_GRID'])) ? $contentSchema['ADD_TAB_GRID'] : '';
+ $tableData->columns = G::json_encode($columns);
$tableData->forceUid = true;
//Save the table
$alterTable = false;
- $result = $this->saveStructureOfTable((array)($tableData), $alterTable);
+ $result = $this->saveStructureOfTable((array) ($tableData), $alterTable);
if ($result->success) {
- \G::auditLog(
- 'ImportTable', $contentSchema['ADD_TAB_NAME'] . ' (' . $contentSchema['ADD_TAB_UID'] . ')'
- );
+ G::auditLog('ImportTable', $contentSchema['ADD_TAB_NAME'] . ' (' . $contentSchema['ADD_TAB_UID'] . ')');
$processQueueTables[$contentSchema['DBS_UID']][] = $contentSchema['ADD_TAB_NAME'];
} else {
- $errors .= \G::LoadTranslation('ID_ERROR_CREATE_TABLE') . $tableData->REP_TAB_NAME . '-> ' . $result->message . '\n\n';
+ $errors .= G::LoadTranslation('ID_ERROR_CREATE_TABLE') . $tableData->REP_TAB_NAME . '-> ' . $result->message . '\n\n';
}
}
}
@@ -747,9 +718,38 @@ class ReportTable
//Return
return $errors;
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw $e;
}
}
-}
+ /**
+ * Throw an exception if the column is not valid for the creation of the field
+ * in the classes managed by propel.
+ *
+ * @param array $columns
+ * @throws Exception
+ */
+ private function validateFieldName($columns)
+ {
+ $validFields = [];
+ $invalidFields = [];
+ foreach ($columns as $column) {
+ try {
+ $fieldName = $column->field_name;
+ Validator::isValidVariableName($fieldName);
+ $fieldName = strtolower(AdditionalTables::getPHPName($fieldName));
+ if (in_array($fieldName, $validFields)) {
+ $invalidFields[] = $fieldName;
+ } else {
+ $validFields[] = $fieldName;
+ }
+ } catch (Exception $e) {
+ $invalidFields[] = $fieldName;
+ }
+ }
+ if (!empty($invalidFields)) {
+ throw new Exception(G::LoadTranslation('ID_PMTABLE_INVALID_FIELD_NAME_VARIABLE', $invalidFields));
+ }
+ }
+}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Table.php b/workflow/engine/src/ProcessMaker/BusinessModel/Table.php
index c7f5b2e1e..7f85689d6 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Table.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Table.php
@@ -1,10 +1,12 @@
- * @copyright Colosa - Bolivia
+ * @deprecated Method deprecated in Release 3.3.1
*
* @return array
+ * @throws Exception
*/
public function saveTable($tab_data, $pro_uid = '', $reportFlag = false, $createRep = true)
{
@@ -508,59 +511,163 @@ class Table
}
/**
- * Update Data for Table
- * @var string $tab_data. Data for table
- * @var string $pro_uid. Uid for process
- * @var string $reportFlag. If is report table
+ * Update Data for PmTable and Report Table
*
- * @author Brayan Pereyra (Cochalo)
- * @copyright Colosa - Bolivia
+ * @var string $tableData: Data for table
+ * @var string $pro_uid: Uid for process
+ * @var boolean $isReportTable: If is report table
*
- * @return void
+ * @return object
+ * @throws Exception
*/
- public function updateTable($tab_data, $pro_uid = '', $reportFlag = false)
+ public function updateTable($tableData, $proUid = '', $isReportTable = false)
{
- if ($reportFlag) {
- $tab_uid = $tab_data['rep_uid'];
- $pro_uid = $this->validateProUid($pro_uid);
+ $tableDsc = false;
+ $tableFields = false;
+ if ($isReportTable) {
+ $tabUid = $tableData['rep_uid'];
+ $proUid = $this->validateProUid($proUid);
+ $tableData['pro_uid'] = $proUid;
+ $errorMssg = "The property rep_uid: '$tabUid' is incorrect.";
} else {
- $tab_uid = $tab_data['pmt_uid'];
+ $tabUid = $tableData['pmt_uid'];
+ $errorMssg = "The property pmt_uid: '$tabUid' is incorrect.";
+ }
+ $tabUid = $this->validateTabUid($tabUid, $isReportTable);
+ $addTables = new AdditionalTables();
+ $dataValidate = $addTables->getTableProperties($tabUid, $tableData, $isReportTable);
+ if (empty($dataValidate)) {
+ throw (new Exception($errorMssg));
+ }
+ if ($isReportTable) {
+ if (!empty($tableData['rep_tab_dsc'])) {
+ $dataValidate['rep_tab_dsc'] = $tableData['rep_tab_dsc'];
+ $tableDsc = true;
+ }
+ } else {
+ if (!empty($tableData['pmt_tab_dsc'])) {
+ $dataValidate['rep_tab_dsc'] = $tableData['pmt_tab_dsc'];
+ $tableDsc = true;
+ }
+ }
+ if (!empty($tableData['fields'])) {
+ $dataValidate['fields'] = $tableData['fields'];
+ $tableFields = true;
+ } else {
+ throw (new Exception('Body doesn\'t contain fields arguments'));
+ }
+ if (!$tableDsc && !$tableFields) {
+ throw (new Exception('Body doesn\'t contain pmt_tad_dsc or fields arguments'));
}
- $tab_uid = $this->validateTabUid($tab_uid, $reportFlag);
- $dataValidate = array();
- $oCriteria = new \Criteria('workflow');
- $oCriteria->add(\AdditionalTablesPeer::ADD_TAB_UID, $tab_uid, \Criteria::EQUAL);
- $oDataset = \AdditionalTablesPeer::doSelectRS($oCriteria);
- $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
+ //We will validate the fields after update the pmTable structure
+ $result = $this->validateTableBeforeUpdate($dataValidate);
- if ($oDataset->next()) {
- $row = $oDataset->getRow();
- if ($reportFlag) {
- $dataValidate['rep_uid'] = $tab_uid;
- $dataValidate['rep_tab_name'] = $row['ADD_TAB_NAME'];
- $dataValidate['rep_tab_dsc'] = $tab_data['rep_tab_dsc'];
- $dataValidate['rep_tab_connection'] = $row['DBS_UID'];
- $dataValidate['rep_tab_type'] = $row['ADD_TAB_TYPE'];
- $dataValidate['rep_tab_grid'] = '';
- if (strpos($row['ADD_TAB_GRID'], '-')) {
- list($gridName, $gridId) = explode( '-', $row['ADD_TAB_GRID'] );
- $dataValidate['rep_tab_grid'] = $gridId;
+ return $result;
+ }
+
+ /**
+ * Will be validate the fields before saveStructureOfTable
+ *
+ * @param array $tableFields Properties for table
+ *
+ * @return object
+ * @throws Exception
+ */
+ public function validateTableBeforeUpdate($tableFields)
+ {
+ $propertiesUpdate = [];
+ if (!empty($tableFields)){
+ $propertiesUpdate = array_change_key_case($tableFields, CASE_UPPER);
+ $propertiesUpdate['keepData'] = '1';
+ }
+
+ $columnsTable = [];
+ $flagKey = false;
+ if (!empty($propertiesUpdate['FIELDS'])) {
+ $columns = $propertiesUpdate['FIELDS'];
+ foreach ($columns as $i => $column) {
+ $columnsTable[$i] = [];
+ //Required fld_uid
+ if (!empty($columns[$i]['fld_uid'])) {
+ $columnsTable[$i]['field_uid'] = $columnsTable[$i]['uid'] = G::toUpper($columns[$i]['fld_uid']);
+ } else {
+ throw (new Exception(G::LoadTranslation("ID_CAN_NOT_BE_EMPTY", ['fld_uid'])));
}
- } else {
- $dataValidate['pmt_uid'] = $tab_uid;
- $dataValidate['pmt_tab_name'] = $row['ADD_TAB_NAME'];
- $dataValidate['pmt_tab_dsc'] = $tab_data['pmt_tab_dsc'];
- }
- $dataValidate['fields'] = $tab_data['fields'];
- } else {
- if ($reportFlag) {
- throw (new \Exception("The property rep_uid: '$tab_uid' is incorrect."));
- } else {
- throw (new \Exception("The property pmt_uid: '$tab_uid' is incorrect."));
+ //Not required fld_dyn
+ $columnsTable[$i]['field_dyn'] = '';
+ if (!empty($columns[$i]['fld_dyn'])) {
+ $columnsTable[$i]['field_dyn'] = G::toUpper($columns[$i]['fld_dyn']);
+ }
+ //Required fld_name
+ if (!empty($columns[$i]['fld_name'])) {
+ $columnsTable[$i]['field_name'] = G::toUpper($columns[$i]['fld_name']);
+ } else {
+ throw (new Exception(G::LoadTranslation("ID_CAN_NOT_BE_EMPTY", ['fld_name'])));
+ }
+ //Required fld_label
+ if (!empty($columns[$i]['fld_label'])) {
+ $columnsTable[$i]['field_label'] = G::toUpper($columns[$i]['fld_label']);
+ } else {
+ throw (new Exception(G::LoadTranslation("ID_CAN_NOT_BE_EMPTY", ['fld_label'])));
+ }
+
+ //We will to define the autoincrement
+ $columnsTable[$i]['field_autoincrement'] = false;
+
+ //Required fld_type
+ if (!empty($columns[$i]['fld_type'])) {
+ $columnsTable[$i]['field_type'] = G::toUpper($columns[$i]['fld_type']);
+ //Will be validate if is the correct type of column
+ if (!in_array($columnsTable[$i]['field_type'], AdditionalTables::FLD_TYPE_VALUES)) {
+ throw (new Exception("The property fld_type: '" . $columns[$i]['fld_type'] . "' is incorrect."));
+ }
+ //Will be review if the column type has the correct definition with autoincrement
+ if (!empty($columns[$i]['fld_autoincrement']) && $columns[$i]['fld_autoincrement']) {
+ if ($columns[$i]['fld_key'] && in_array($columns[$i]['fld_type'], AdditionalTables::FLD_TYPE_WITH_AUTOINCREMENT)) {
+ $columnsTable[$i]['field_autoincrement'] = true;
+ } else {
+ throw (new Exception("The property field_autoincrement: '" . $columns[$i]['fld_autoincrement'] . "' is incorrect. "));
+ }
+ }
+ } else {
+ throw (new Exception(G::LoadTranslation("ID_CAN_NOT_BE_EMPTY", ['fld_type'])));
+ }
+ //Required fld_size depends of fld_type
+ $columnsTable[$i]['field_size'] = 0;
+ if (in_array($columns[$i]['fld_type'], AdditionalTables::FLD_TYPE_WITH_SIZE)) {
+ if (empty($columns[$i]['fld_size'])) {
+ throw (new Exception(G::LoadTranslation("ID_CAN_NOT_BE_EMPTY", ['fld_size'])));
+ }
+ if ((integer)$columns[$i]['fld_size'] === 0) {
+ throw (new Exception("The property fld_size: '" . $columns[$i]['fld_size'] . "' is incorrect."));
+ }
+ $columnsTable[$i]['field_size'] = (integer)$columns[$i]['fld_size'];
+ }
+ //Required only for one column
+ $columnsTable[$i]['field_key'] = false;
+ if (!empty($columns[$i]['fld_key'])) {
+ $flagKey = true;
+ $columnsTable[$i]['field_key'] = (boolean)$columns[$i]['fld_key'];
+ }
+ //Not required fld_null
+ $columnsTable[$i]['field_null'] = false;
+ if (!empty($columns[$i]['fld_null'])) {
+ $columnsTable[$i]['field_null'] = G::toUpper($columns[$i]['fld_null']);
+ }
+ //Not required fld_filter
+ $columnsTable[$i]['field_filter'] = false;
}
}
- $this->saveTable($dataValidate, $pro_uid, $reportFlag, false);
+ if (!$flagKey) {
+ throw (new Exception("The table doesn't have a primary key 'fld_key'"));
+ }
+
+ $propertiesUpdate['columns'] = G::json_encode($columnsTable);
+ $reportTable = new BusinessModelRpt();
+ $result = $reportTable->saveStructureOfTable($propertiesUpdate);
+
+ return $result;
}
/**
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Validator.php b/workflow/engine/src/ProcessMaker/BusinessModel/Validator.php
index 5c61055ae..54fde9163 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Validator.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Validator.php
@@ -1,6 +1,10 @@
@@ -26,19 +30,19 @@ class Validator
{
$dep_uid = trim($dep_uid);
if ($dep_uid == '') {
- throw (new \Exception(\G::LoadTranslation("ID_DEPARTMENT_NOT_EXIST", array($nameField,''))));
+ throw (new Exception(G::LoadTranslation("ID_DEPARTMENT_NOT_EXIST", array($nameField, ''))));
}
$oDepartment = new \Department();
if (!($oDepartment->existsDepartment($dep_uid))) {
- throw (new \Exception(\G::LoadTranslation("ID_DEPARTMENT_NOT_EXIST", array($nameField,$dep_uid))));
+ throw (new Exception(G::LoadTranslation("ID_DEPARTMENT_NOT_EXIST", array($nameField, $dep_uid))));
}
return $dep_uid;
}
/**
* Validate dep_status
- * @var string $dep_uid. Uid for Departament
- * @var string $nameField. Name of field for message
+ * @var string $dep_uid . Uid for Departament
+ * @var string $nameField . Name of field for message
*
* @access public
* @author Brayan Pereyra (Cochalo)
@@ -51,7 +55,7 @@ class Validator
$dep_status = trim($dep_status);
$values = array('ACTIVE', 'INACTIVE');
if (!in_array($dep_status, $values)) {
- throw (new \Exception(\G::LoadTranslation("ID_DEPARTMENT_NOT_EXIST", array('dep_status',$dep_status))));
+ throw (new Exception(G::LoadTranslation("ID_DEPARTMENT_NOT_EXIST", array('dep_status', $dep_status))));
}
return $dep_status;
}
@@ -59,7 +63,7 @@ class Validator
/**
* Validate usr_uid
*
- * @param string $usr_uid, Uid for user
+ * @param string $usr_uid , Uid for user
* @param string $nameField . Name of field for message
*
* @access public
@@ -72,11 +76,11 @@ class Validator
{
$usr_uid = trim($usr_uid);
if ($usr_uid == '') {
- throw (new \Exception(\G::LoadTranslation("ID_USER_NOT_EXIST", array($nameField,''))));
+ throw (new Exception(G::LoadTranslation("ID_USER_NOT_EXIST", array($nameField, ''))));
}
$oUsers = new \Users();
if (!($oUsers->userExists($usr_uid))) {
- throw (new \Exception(\G::LoadTranslation("ID_USER_NOT_EXIST", array($nameField,$usr_uid))));
+ throw (new Exception(G::LoadTranslation("ID_USER_NOT_EXIST", array($nameField, $usr_uid))));
}
return $usr_uid;
}
@@ -84,7 +88,7 @@ class Validator
/**
* Validate app_uid
*
- * @param string $app_uid, Uid for application
+ * @param string $app_uid , Uid for application
* @param string $nameField . Name of field for message
*
* @access public
@@ -97,11 +101,11 @@ class Validator
{
$app_uid = trim($app_uid);
if ($app_uid == '') {
- throw (new \Exception(\G::LoadTranslation("ID_APPLICATION_NOT_EXIST", array($nameField,''))));
+ throw (new Exception(G::LoadTranslation("ID_APPLICATION_NOT_EXIST", array($nameField, ''))));
}
$oApplication = new \Application();
if (!($oApplication->exists($app_uid))) {
- throw (new \Exception(\G::LoadTranslation("ID_APPLICATION_NOT_EXIST", array($nameField,$app_uid))));
+ throw (new Exception(G::LoadTranslation("ID_APPLICATION_NOT_EXIST", array($nameField, $app_uid))));
}
return $app_uid;
}
@@ -109,7 +113,7 @@ class Validator
/**
* Validate app_uid
*
- * @param string $tri_uid, Uid for trigger
+ * @param string $tri_uid , Uid for trigger
* @param string $nameField . Name of field for message
*
* @access public
@@ -122,11 +126,11 @@ class Validator
{
$tri_uid = trim($tri_uid);
if ($tri_uid == '') {
- throw (new \Exception(\G::LoadTranslation("ID_TRIGGER_NOT_EXIST", array($nameField,''))));
+ throw (new Exception(G::LoadTranslation("ID_TRIGGER_NOT_EXIST", array($nameField, ''))));
}
$oTriggers = new \Triggers();
if (!($oTriggers->TriggerExists($tri_uid))) {
- throw (new \Exception(\G::LoadTranslation("ID_TRIGGER_NOT_EXIST", array($nameField,$tri_uid))));
+ throw (new Exception(G::LoadTranslation("ID_TRIGGER_NOT_EXIST", array($nameField, $tri_uid))));
}
return $tri_uid;
}
@@ -134,7 +138,7 @@ class Validator
/**
* Validate pro_uid
*
- * @param string $pro_uid, Uid for process
+ * @param string $pro_uid , Uid for process
* @param string $nameField . Name of field for message
*
* @access public
@@ -147,11 +151,11 @@ class Validator
{
$pro_uid = trim($pro_uid);
if ($pro_uid == '') {
- throw (new \Exception(\G::LoadTranslation("ID_PROCESS_NOT_EXIST", array($nameField,''))));
+ throw (new Exception(G::LoadTranslation("ID_PROCESS_NOT_EXIST", array($nameField, ''))));
}
$oProcess = new \Process();
if (!($oProcess->exists($pro_uid))) {
- throw (new \Exception(\G::LoadTranslation("ID_PROCESS_NOT_EXIST", array($nameField,$pro_uid))));
+ throw (new Exception(G::LoadTranslation("ID_PROCESS_NOT_EXIST", array($nameField, $pro_uid))));
}
return $pro_uid;
}
@@ -159,7 +163,7 @@ class Validator
/**
* Validate cat_uid
*
- * @param string $cat_uid, Uid for category
+ * @param string $cat_uid , Uid for category
* @param string $nameField . Name of field for message
*
* @access public
@@ -172,11 +176,11 @@ class Validator
{
$cat_uid = trim($cat_uid);
if ($cat_uid == '') {
- throw (new \Exception(\G::LoadTranslation("ID_CATEGORY_NOT_EXIST", array($nameField,''))));
+ throw (new Exception(G::LoadTranslation("ID_CATEGORY_NOT_EXIST", array($nameField, ''))));
}
$oCategory = new \ProcessCategory();
if (!($oCategory->exists($cat_uid))) {
- throw (new \Exception(\G::LoadTranslation("ID_CATEGORY_NOT_EXIST", array($nameField,$cat_uid))));
+ throw (new Exception(G::LoadTranslation("ID_CATEGORY_NOT_EXIST", array($nameField, $cat_uid))));
}
return $cat_uid;
}
@@ -184,7 +188,7 @@ class Validator
/**
* Validate date
*
- * @param string $date, Date for validate
+ * @param string $date , Date for validate
* @param string $nameField . Name of field for message
*
* @access public
@@ -197,18 +201,18 @@ class Validator
{
$date = trim($date);
if ($date == '') {
- throw (new \Exception(\G::LoadTranslation("ID_DATE_NOT_VALID", array('',$format))));
+ throw (new Exception(G::LoadTranslation("ID_DATE_NOT_VALID", array('', $format))));
}
$d = \DateTime::createFromFormat($format, $date);
if (!($d && $d->format($format) == $date)) {
- throw (new \Exception(\G::LoadTranslation("ID_DATE_NOT_VALID", array($date,$format))));
+ throw (new Exception(G::LoadTranslation("ID_DATE_NOT_VALID", array($date, $format))));
}
return $date;
}
/**
* Validate is array
- * @var array $field. Field type array
+ * @var array $field . Field type array
*
* @access public
* @author Brayan Pereyra (Cochalo)
@@ -219,13 +223,13 @@ class Validator
static public function isArray($field, $nameField)
{
if (!is_array($field)) {
- throw (new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_ARRAY", array($nameField))));
+ throw (new Exception(G::LoadTranslation("ID_INVALID_VALUE_ARRAY", array($nameField))));
}
}
/**
* Validate is string
- * @var array $field. Field type string
+ * @var array $field . Field type string
*
* @access public
* @author Brayan Pereyra (Cochalo)
@@ -236,13 +240,13 @@ class Validator
static public function isString($field, $nameField)
{
if (!is_string($field)) {
- throw (new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_STRING", array($nameField))));
+ throw (new Exception(G::LoadTranslation("ID_INVALID_VALUE_STRING", array($nameField))));
}
}
/**
* Validate is integer
- * @var array $field. Field type integer
+ * @var array $field . Field type integer
*
* @access public
* @author Brayan Pereyra (Cochalo)
@@ -253,13 +257,13 @@ class Validator
static public function isInteger($field, $nameField)
{
if (!is_integer($field)) {
- throw (new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_INTEGER", array($nameField))));
+ throw (new Exception(G::LoadTranslation("ID_INVALID_VALUE_INTEGER", array($nameField))));
}
}
/**
* Validate is boolean
- * @var boolean $field. Field type boolean
+ * @var boolean $field . Field type boolean
*
* @access public
* @author Brayan Pereyra (Cochalo)
@@ -270,13 +274,13 @@ class Validator
static public function isBoolean($field, $nameField)
{
if (!is_bool($field)) {
- throw (new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_BOOLEAN", array($nameField))));
+ throw (new Exception(G::LoadTranslation("ID_INVALID_VALUE_BOOLEAN", array($nameField))));
}
}
/**
* Validate is boolean
- * @var boolean $field. Field type boolean
+ * @var boolean $field . Field type boolean
*
* @access public
* @author Brayan Pereyra (Cochalo)
@@ -287,14 +291,28 @@ class Validator
static public function isNotEmpty($field, $nameField)
{
if (empty($field)) {
- throw (new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_IS_EMPTY", array($nameField))));
+ throw (new Exception(G::LoadTranslation("ID_INVALID_VALUE_IS_EMPTY", array($nameField))));
+ }
+ }
+
+ /**
+ * Validate a variable name
+ * @param $nameField
+ * @throws \Exception
+ * @return void
+ */
+ static public function isValidVariableName($nameField)
+ {
+ $resp = preg_match(config('constants.validation.pmVariable.regEx'), $nameField, $matches);
+ if (isset($resp) && $resp === 0) {
+ throw (new Exception(G::LoadTranslation("ID_INVALID_NAME", array($nameField))));
}
}
/**
* Verify if data is array
*
- * @param string $data Data
+ * @param string $data Data
* @param string $dataNameForException Data name for the exception
*
* return void Throw exception if data is not array
@@ -303,9 +321,9 @@ class Validator
{
try {
if (!is_array($data)) {
- throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_THIS_MUST_BE_ARRAY", array($dataNameForException)));
+ throw new Exception(G::LoadTranslation("ID_INVALID_VALUE_THIS_MUST_BE_ARRAY", array($dataNameForException)));
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw $e;
}
}
@@ -313,7 +331,7 @@ class Validator
/**
* Verify if data is empty
*
- * @param string $data Data
+ * @param string $data Data
* @param string $dataNameForException Data name for the exception
*
* return void Throw exception if data is empty
@@ -322,9 +340,9 @@ class Validator
{
try {
if (empty($data)) {
- throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($dataNameForException)));
+ throw new Exception(G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($dataNameForException)));
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw $e;
}
}
@@ -332,7 +350,7 @@ class Validator
/**
* Validate data by ISO 8601 format
*
- * @param mixed $data Data
+ * @param mixed $data Data
* @param mixed $field Fields
*
* @return void Throw exception if data has an invalid value
@@ -352,7 +370,7 @@ class Validator
switch (gettype($data)) {
case 'string':
if (trim($data) != '' && !preg_match('/^' . $regexpIso8601 . '$/', $data)) {
- throw new \Exception(\G::LoadTranslation('ID_ISO8601_INVALID_FORMAT', [(!is_null($field) && is_string($field))? $field : $data]));
+ throw new Exception(G::LoadTranslation('ID_ISO8601_INVALID_FORMAT', [(!is_null($field) && is_string($field)) ? $field : $data]));
}
break;
case 'array':
@@ -360,17 +378,17 @@ class Validator
foreach ($field as $value) {
$fieldName = $value;
- $fieldName = (isset($data[strtoupper($fieldName)]))? strtoupper($fieldName) : $fieldName;
- $fieldName = (isset($data[strtolower($fieldName)]))? strtolower($fieldName) : $fieldName;
+ $fieldName = (isset($data[strtoupper($fieldName)])) ? strtoupper($fieldName) : $fieldName;
+ $fieldName = (isset($data[strtolower($fieldName)])) ? strtolower($fieldName) : $fieldName;
if (isset($data[$fieldName]) && trim($data[$fieldName]) != '' && !preg_match('/^' . $regexpIso8601 . '$/', $data[$fieldName])) {
- throw new \Exception(\G::LoadTranslation('ID_ISO8601_INVALID_FORMAT', [$fieldName]));
+ throw new Exception(G::LoadTranslation('ID_ISO8601_INVALID_FORMAT', [$fieldName]));
}
}
}
break;
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw $e;
}
}
@@ -378,7 +396,7 @@ class Validator
/**
* Validate pager data
*
- * @param array $arrayData Data
+ * @param array $arrayData Data
* @param array $arrayVariableNameForException Variable name for exception
*
* @return mixed Returns TRUE when pager data is valid, Message Error otherwise
@@ -387,7 +405,7 @@ class Validator
{
try {
foreach ($arrayPagerData as $key => $value) {
- $nameForException = (isset($arrayVariableNameForException[$key]))?
+ $nameForException = (isset($arrayVariableNameForException[$key])) ?
$arrayVariableNameForException[$key] : $key;
if (!is_null($value) &&
@@ -403,7 +421,7 @@ class Validator
//Return
return true;
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw $e;
}
}
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php
index 3b2abc685..dd50d7e30 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php
@@ -405,6 +405,7 @@ class Variable
if (isset($aData["VAR_NAME"])) {
Validator::isString($aData['VAR_NAME'], '$var_name');
Validator::isNotEmpty($aData['VAR_NAME'], '$var_name');
+ Validator::isValidVariableName($aData['VAR_NAME']);
}
if (isset($aData["VAR_FIELD_TYPE"])) {
Validator::isString($aData['VAR_FIELD_TYPE'], '$var_field_type');
@@ -462,7 +463,7 @@ class Variable
if ($variableName === $row["VAR_NAME"]) {
throw new Exception(G::LoadTranslation("DYNAFIELD_ALREADY_EXIST"));
}
- if (AdditionalTables::getPHPName($variableName) === AdditionalTables::getPHPName($row["VAR_NAME"])) {
+ if (strtolower(AdditionalTables::getPHPName($variableName)) === strtolower(AdditionalTables::getPHPName($row["VAR_NAME"]))) {
throw new Exception(G::LoadTranslation("DYNAFIELD_PHPNAME_ALREADY_EXIST", array($row["VAR_NAME"])));
}
}
diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php
index 47d0acf02..665aa9e02 100644
--- a/workflow/engine/src/ProcessMaker/Importer/Importer.php
+++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php
@@ -195,7 +195,7 @@ abstract class Importer
} catch (\Exception $e) {
throw $e;
}
- $this->removeProject();
+ $this->removeProject(true);
/*----------------------------------********---------------------------------*/
} else {
$granularObj = new \ProcessMaker\BusinessModel\Migrator\GranularImporter();
@@ -300,8 +300,6 @@ abstract class Importer
$this->preserveEmailEventConfiguration($emailEvent);
}
}
-
- $this->preserveCurrentId($this->importData["tables"]["workflow"]);
$objectList = $granularObj->loadObjectsListSelected($this->importData, $newObjectArray);
if (sizeof($objectList) > 0 && $processGranulate) {
@@ -604,8 +602,6 @@ abstract class Importer
foreach ($arrayWorkflowTables["emailEvent"] as &$emailEvent) {
$this->preserveEmailEventConfiguration($emailEvent);
}
-
- $this->preserveCurrentId($arrayWorkflowTables);
$this->importWfTables($arrayWorkflowTables);
@@ -952,70 +948,4 @@ abstract class Importer
}
}
- /**
- * Restore id values for the dynaforms, input documents and output documents.
- *
- * @param type $arrayWorkflowTables
- */
- private function preserveCurrentId(&$arrayWorkflowTables)
- {
- $currentProcess = $this->getCurrentProcess();
-
- //dynaforms
- foreach ($arrayWorkflowTables["dynaforms"] as &$data) {
- if (!is_object($currentProcess)) {
- unset($data['DYN_ID']);
- continue;
- }
- $currentElements = $currentProcess->dynaforms;
- if (!is_array($currentElements)) {
- unset($data['DYN_ID']);
- continue;
- }
- foreach ($currentElements as $currentElement) {
- if ($currentElement["PRO_UID"] === $data["PRO_UID"] &&
- $currentElement["DYN_UID"] === $data["DYN_UID"]) {
- $data['DYN_ID'] = $currentElement["DYN_ID"];
- }
- }
- }
-
- //input documents
- foreach ($arrayWorkflowTables["inputs"] as &$data) {
- if (!is_object($currentProcess)) {
- unset($data['INP_DOC_ID']);
- continue;
- }
- $currentElements = $currentProcess->inputs;
- if (!is_array($currentElements)) {
- unset($data['INP_DOC_ID']);
- continue;
- }
- foreach ($currentElements as $currentElement) {
- if ($currentElement["PRO_UID"] === $data["PRO_UID"] &&
- $currentElement["INP_DOC_UID"] === $data["INP_DOC_UID"]) {
- $data['INP_DOC_ID'] = $currentElement['INP_DOC_ID'];
- }
- }
- }
-
- //output documents
- foreach ($arrayWorkflowTables["outputs"] as &$data) {
- if (!is_object($currentProcess)) {
- unset($data['OUT_DOC_ID']);
- continue;
- }
- $currentElements = $currentProcess->outputs;
- if (!is_array($currentElements)) {
- unset($data['OUT_DOC_ID']);
- continue;
- }
- foreach ($currentElements as $currentElement) {
- if ($currentElement["PRO_UID"] === $data["PRO_UID"] &&
- $currentElement["OUT_DOC_UID"] === $data["OUT_DOC_UID"]) {
- $data['OUT_DOC_ID'] = $currentElement['OUT_DOC_ID'];
- }
- }
- }
- }
}
diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases/InputDocument.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases/InputDocument.php
index 2aa069f7e..afcec50ae 100644
--- a/workflow/engine/src/ProcessMaker/Services/Api/Cases/InputDocument.php
+++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases/InputDocument.php
@@ -1,10 +1,11 @@
getUserId();
- $inputDocument = new \ProcessMaker\BusinessModel\Cases\InputDocument();
+ //We will to get list of documents that the user can be access
+ $bmCases = new BussinessModelCases();
+ $arrayApplicationData = $bmCases->getApplicationRecordByPk($app_uid, [], false);
+ $userAuthorization = $bmCases->userAuthorization(
+ $userUid,
+ $arrayApplicationData['PRO_UID'],
+ $app_uid,
+ [],
+ ['INPUT_DOCUMENTS' => 'VIEW', 'ATTACHMENTS' => 'VIEW'],
+ true
+ );
+ $documentsCanAccess = array_merge(
+ $userAuthorization['objectPermissions']['INPUT_DOCUMENTS'],
+ $userAuthorization['objectPermissions']['ATTACHMENTS']
+ );
- $response = $inputDocument->getCasesInputDocuments($app_uid, $userUid);
+ //We will to get documents information that the user uploaded and/or that the user has permission
+ $inputDocument = new CasesInputDocument();
+ //@todo we need to review the function getCasesInputDocuments with the ticket HOR-4755
+ $response = $inputDocument->getCasesInputDocuments($app_uid, $userUid, $documentsCanAccess);
- if (empty($response)) {
+ //If the user is a supervisor we will to get the documents can be access
+ if (empty($response) && $userAuthorization['supervisor']) {
$response = $inputDocument->getCasesInputDocumentsBySupervisor($app_uid, $userUid);
}
//Return
return $response;
- } catch (\Exception $e) {
+ } catch (Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light.php b/workflow/engine/src/ProcessMaker/Services/Api/Light.php
index 914c9dc0b..11f126b25 100644
--- a/workflow/engine/src/ProcessMaker/Services/Api/Light.php
+++ b/workflow/engine/src/ProcessMaker/Services/Api/Light.php
@@ -2,28 +2,31 @@
namespace ProcessMaker\Services\Api;
+use AppDelegation;
use Bootstrap;
+use Cases as ClassesCases;
+use Criteria;
+use Exception;
use G;
+use Luracast\Restler\RestException;
+use PmDynaform;
+use Process as ModelProcess;
+use ProcessMaker\BusinessModel\Cases as BusinessModelCases;
+use ProcessMaker\BusinessModel\DynaForm as BusinessModelDynaForm;
+use ProcessMaker\BusinessModel\Light as BusinessModelLight;
+use ProcessMaker\BusinessModel\Lists;
+use ProcessMaker\BusinessModel\Process;
+use ProcessMaker\BusinessModel\ProcessMap;
+use ProcessMaker\BusinessModel\Task;
+use ProcessMaker\BusinessModel\Validator;
use ProcessMaker\Project\Adapter;
use ProcessMaker\Services\Api;
-use Luracast\Restler\RestException;
-use ProcessMaker\BusinessModel\Validator;
+use ProcessMaker\Services\Api\Project\Activity\Step;
use ProcessMaker\Util\DateTime;
-use PmDynaform;
-use Exception;
-use ProcessMaker\BusinessModel\Light as BusinessModelLight;
use RBAC;
-use ProcessMaker\BusinessModel\Cases as BusinessModelCases;
-use Cases as ClassesCases;
-use AppDelegation;
-use ProcessMaker\BusinessModel\Lists;
-use ProcessMaker\BusinessModel\Task;
-use ProcessMaker\BusinessModel\ProcessMap;
-use ProcessMaker\BusinessModel\Process;
-use Criteria;
-use StepPeer;
use stdclass;
-use ProcessMaker\BusinessModel\DynaForm as BusinessModelDynaForm;
+use StepPeer;
+
/**
*
* Process Api Controller
@@ -921,41 +924,57 @@ class Light extends Api
}
/**
+ * Get steps related to the task
+ * If the process is classic we does not return any step, this is not supported by Mobile
+ *
* @url GET /project/:prj_uid/activity/:act_uid/steps
*
* @param string $act_uid {@min 32}{@max 32}
* @param string $prj_uid {@min 32}{@max 32}
+ *
+ * @return array
+ * @throws Exception
*/
public function doGetActivitySteps($act_uid, $prj_uid)
{
try {
- $task = new Task();
- $task->setFormatFieldNameInUppercase(false);
- $task->setArrayParamException(array("taskUid" => "act_uid", "stepUid" => "step_uid"));
+ $response = [];
+ $process = new ModelProcess();
+ $isBpmn = $process->isBpmnProcess($prj_uid);
+ if ($isBpmn) {
+ $task = new Task();
+ $dynaForm = new BusinessModelDynaForm();
+ $mobile = new BusinessModelLight();
+ $step = new Step();
- $activitySteps = $task->getSteps($act_uid);
- $_SESSION['PROCESS'] = $prj_uid;
- $dynaForm = new BusinessModelDynaForm();
- $dynaForm->setFormatFieldNameInUppercase(false);
- $oMobile = new BusinessModelLight();
- $step = new \ProcessMaker\Services\Api\Project\Activity\Step();
- $response = array();
- for ($i = 0; $i < count($activitySteps); $i++) {
- if ($activitySteps[$i]['step_type_obj'] == "DYNAFORM") {
- $dataForm = $dynaForm->getDynaForm($activitySteps[$i]['step_uid_obj']);
- $result = $this->parserDataDynaForm($dataForm);
- $result["formUpdateDate"] = DateTime::convertUtcToIso8601($result["formUpdateDate"]);
- $result['index'] = $i;
- $result['stepId'] = $activitySteps[$i]["step_uid"];
- $result['stepUidObj'] = $activitySteps[$i]["step_uid_obj"];
- $result['stepMode'] = $activitySteps[$i]['step_mode'];
- $result['stepCondition'] = $activitySteps[$i]['step_condition'];
- $result['stepPosition'] = $activitySteps[$i]['step_position'];
- $trigger = $oMobile->statusTriggers($step->doGetActivityStepTriggers($activitySteps[$i]["step_uid"],
- $act_uid, $prj_uid));
- $result["triggers"] = $trigger;
- unset($result["formContent"]);
- $response[] = $result;
+ $task->setFormatFieldNameInUppercase(false);
+ $task->setArrayParamException(["taskUid" => "act_uid", "stepUid" => "step_uid"]);
+ $activitySteps = $task->getSteps($act_uid);
+ $_SESSION['PROCESS'] = $prj_uid;
+ $dynaForm->setFormatFieldNameInUppercase(false);
+
+ for ($i = 0; $i < count($activitySteps); $i++) {
+ if ($activitySteps[$i]['step_type_obj'] == "DYNAFORM") {
+ $dataForm = $dynaForm->getDynaForm($activitySteps[$i]['step_uid_obj']);
+ $result = $this->parserDataDynaForm($dataForm);
+ $result["formUpdateDate"] = DateTime::convertUtcToIso8601($result["formUpdateDate"]);
+ $result['index'] = $i;
+ $result['stepId'] = $activitySteps[$i]["step_uid"];
+ $result['stepUidObj'] = $activitySteps[$i]["step_uid_obj"];
+ $result['stepMode'] = $activitySteps[$i]['step_mode'];
+ $result['stepCondition'] = $activitySteps[$i]['step_condition'];
+ $result['stepPosition'] = $activitySteps[$i]['step_position'];
+ $trigger = $mobile->statusTriggers(
+ $step->doGetActivityStepTriggers(
+ $activitySteps[$i]["step_uid"],
+ $act_uid,
+ $prj_uid
+ )
+ );
+ $result["triggers"] = $trigger;
+ unset($result["formContent"]);
+ $response[] = $result;
+ }
}
}
} catch (Exception $e) {
diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Pmtable.php b/workflow/engine/src/ProcessMaker/Services/Api/Pmtable.php
index 36698c25a..c378f0c71 100644
--- a/workflow/engine/src/ProcessMaker/Services/Api/Pmtable.php
+++ b/workflow/engine/src/ProcessMaker/Services/Api/Pmtable.php
@@ -1,8 +1,10 @@
updateTable($request_data);
- } catch (\Exception $e) {
+ $pmTable = new BusinessModelTable();
+ $response = $pmTable->updateTable($request_data);
+ } catch (Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
diff --git a/workflow/engine/templates/pmTables/data.js b/workflow/engine/templates/pmTables/data.js
index e117afd78..0cd889d64 100644
--- a/workflow/engine/templates/pmTables/data.js
+++ b/workflow/engine/templates/pmTables/data.js
@@ -818,18 +818,27 @@ UpdatePageConfig = function(pageSize){
});
};
-genDataReport = function()
+/**
+ * Regenerate data report
+ *
+ * @returns void
+ */
+genDataReport = function ()
{
- Ext.Ajax.request({
- url: '../pmTablesProxy/genDataReport',
- params: {id: tableDef.ADD_TAB_UID},
- success: function(resp){
- response = Ext.util.JSON.decode(resp.responseText);
- PMExt.notify(_('ID_UPDATE'), response.message)
- Ext.getCmp('infoGrid').store.reload();
- },
- failure: function(obj, resp){
- PMExt.error( _('ID_ERROR'), resp.result.message);
- }
- });
+ genDataReportButton.setDisabled(true);
+ Ext.Ajax.request({
+ url: '../pmTablesProxy/genDataReport',
+ params: {id: tableDef.ADD_TAB_UID},
+ success: function (resp) {
+ genDataReportButton.setDisabled(false);
+ response = Ext.util.JSON.decode(resp.responseText);
+ PMExt.notify(_('ID_UPDATE'), response.message)
+ Ext.getCmp('infoGrid').store.reload();
+
+ },
+ failure: function (obj, resp) {
+ genDataReportButton.setDisabled(false);
+ PMExt.error(_('ID_ERROR'), resp.result.message);
+ }
+ });
}
diff --git a/workflow/engine/templates/pmTables/list.js b/workflow/engine/templates/pmTables/list.js
index dc50178b5..8d3027983 100644
--- a/workflow/engine/templates/pmTables/list.js
+++ b/workflow/engine/templates/pmTables/list.js
@@ -281,7 +281,7 @@ Ext.onReady(function(){
cmodelColumns.push({header: _('ID_NAME'), dataIndex: 'ADD_TAB_NAME', width: 300, align:'left', renderer: function(v,p,r){
return r.get('TYPE') == 'CLASSIC'? v + ' ('+ _('ID_OLD_VERSION') +')' : v;
}});
- cmodelColumns.push({header: _('ID_DESCRIPTION'), dataIndex: 'ADD_TAB_DESCRIPTION', sortable:false, width: 400, hidden:false, align:'left', renderer: function(v,p,r){
+ cmodelColumns.push({header: _('ID_DESCRIPTION'), dataIndex: 'ADD_TAB_DESCRIPTION', sortable: true, width: 400, hidden: false, align: 'left', renderer: function (v, p, r) {
if (r.get('ADD_TAB_TAG')) {
tag = r.get('ADD_TAB_TAG').replace('plugin@', '');
tag = tag.charAt(0).toUpperCase() + tag.slice(1);
@@ -304,7 +304,9 @@ Ext.onReady(function(){
cmodelColumns.push({dataIndex: "DBS_UID", hidden: true, hideable: false});
- cmodelColumns.push({header: _('ID_RECORDS'), dataIndex: 'NUM_ROWS', width: 90, align:'left'});
+ cmodelColumns.push({header: _('ID_RECORDS'), dataIndex: 'NUM_ROWS', width: 90, align:'left', renderer: function (v, p, r) {
+ return '' + v + '
';
+ }});
if (PRO_UID === false) {
cmodelColumns.push({header: _('ID_PROCESS'), dataIndex: 'PRO_TITLE', width: 180, align:'left'});