Merged in victorsl/processmaker/PM-2576 (pull request #2414)

PM-2576 "Support for Timer-Event (End-points and Backend)" SOLVED
This commit is contained in:
Julio Cesar Laura Avendaño
2015-07-10 18:26:30 -04:00
11 changed files with 967 additions and 68 deletions

View File

@@ -0,0 +1,147 @@
<?php
try {
//Set variables
$osIsLinux = strtoupper(substr(PHP_OS, 0, 3)) != "WIN";
//Defines constants
define("PATH_SEP", ($osIsLinux)? "/" : "\\");
$arrayPathToCron = array();
$flagPathToCron = false;
//Path to CRON by __FILE__
$arrayAux = explode(PATH_SEP, str_replace("engine" . PATH_SEP . "bin", "", dirname(__FILE__)));
array_pop($arrayAux);
if (count($arrayAux) > 0 && $arrayAux[count($arrayAux) - 1] == "workflow") {
$arrayPathToCron = $arrayAux;
$flagPathToCron = true;
}
if (!$flagPathToCron) {
throw new Exception("Error: Unable to execute the Timer-Event CRON, the path is incorrect");
}
$pathHome = implode(PATH_SEP, $arrayPathToCron) . PATH_SEP;
array_pop($arrayPathToCron);
$pathTrunk = implode(PATH_SEP, $arrayPathToCron) . PATH_SEP;
array_pop($arrayPathToCron);
$pathOutTrunk = implode(PATH_SEP, $arrayPathToCron) . PATH_SEP;
define("PATH_HOME", $pathHome);
define("PATH_TRUNK", $pathTrunk);
define("PATH_OUTTRUNK", $pathOutTrunk);
//Include files
require_once(PATH_HOME . "engine" . PATH_SEP . "config" . PATH_SEP . "paths.php");
G::LoadClass("system");
$config = System::getSystemConfiguration();
G::LoadSystem('inputfilter');
$filter = new InputFilter();
$config['time_zone'] = $filter->validateInput($config['time_zone']);
ini_set("date.timezone", $config["time_zone"]);
//CRON command options
$arrayCommandOption = array(
"force" => "+force"
);
//CRON status
$flagIsRunning = false;
$lastExecution = "";
$processcTimeProcess = 0;
$processcTimeStart = 0;
$force = in_array($arrayCommandOption["force"], $argv);
if (!$force && file_exists(PATH_DATA . "timereventcron")) {
//Windows flag
//Get data of CRON file
$arrayCron = unserialize(trim(file_get_contents(PATH_DATA . "timereventcron")));
$flagIsRunning = (boolean)($arrayCron["flagIsRunning"]);
$lastExecution = $arrayCron["lastExecution"];
$processcTimeProcess = (isset($arrayCron["processcTimeProcess"]))? (int)($arrayCron["processcTimeProcess"]) : 10; //Minutes
$processcTimeStart = (isset($arrayCron["processcTimeStart"]))? $arrayCron["processcTimeStart"] : 0;
}
if (!$force && $osIsLinux) {
//Linux flag
//Check if CRON it's running
exec("ps -fea | grep timereventcron.php | grep -v grep", $arrayOutput);
if (count($arrayOutput) > 1) {
$flagIsRunning = true;
}
}
if ($force || !$flagIsRunning) {
//Start CRON
$arrayCron = array("flagIsRunning" => "1", "lastExecution" => date("Y-m-d H:i:s"));
file_put_contents(PATH_DATA . "timereventcron", serialize($arrayCron));
try {
$messageEventCronSinglePath = PATH_CORE . "bin" . PATH_SEP . "timereventcron_single.php";
$workspace = "";
for ($i = 1; $i <= count($argv) - 1; $i++) {
if (preg_match("/^\+w(.+)$/", $argv[$i], $arrayMatch)) {
$workspace = $arrayMatch[1];
break;
}
}
$countw = 0;
if ($workspace == "") {
$d = dir(PATH_DB);
while (($entry = $d->read()) !== false) {
if ($entry != "" && $entry != "." && $entry != "..") {
if (is_dir(PATH_DB . $entry)) {
if (file_exists(PATH_DB . $entry . PATH_SEP . "db.php")) {
$countw++;
passthru("php -f \"$messageEventCronSinglePath\" $entry \"" . base64_encode(PATH_HOME) . "\" \"" . base64_encode(PATH_TRUNK) . "\" \"" . base64_encode(PATH_OUTTRUNK) . "\"");
}
}
}
}
} else {
if (!is_dir(PATH_DB . $workspace) || !file_exists(PATH_DB . $workspace . PATH_SEP . "db.php")) {
throw new Exception("Error: The workspace \"$workspace\" does not exist");
}
$countw++;
passthru("php -f \"$messageEventCronSinglePath\" $workspace \"" . base64_encode(PATH_HOME) . "\" \"" . base64_encode(PATH_TRUNK) . "\" \"" . base64_encode(PATH_OUTTRUNK) . "\"");
}
eprintln("Finished $countw workspaces processed");
} catch (Exception $e) {
throw $e;
}
//End CRON
$arrayCron = array("flagIsRunning" => "0", "lastExecution" => date("Y-m-d H:i:s"));
file_put_contents(PATH_DATA . "timereventcron", serialize($arrayCron));
} else {
eprintln("The Timer-Event CRON is running, please wait for it to finish\nStarted in $lastExecution");
eprintln("If do you want force the execution use the option \"" . $arrayCommandOption["force"] . "\", example: php -f timereventcron.php +wworkflow " . $arrayCommandOption["force"] ,"green");
}
echo "Done!\n";
} catch (Exception $e) {
echo $e->getMessage() . "\n";
}

View File

@@ -0,0 +1,243 @@
<?php
register_shutdown_function(
create_function(
"",
"
if (class_exists(\"Propel\")) {
Propel::close();
}
"
)
);
ini_set("memory_limit", "512M");
try {
//Verify data
if (count($argv) != 5) {
throw new Exception("Error: Invalid number of arguments");
}
for ($i = 2; $i <= count($argv) - 1; $i++) {
$argv[$i] = base64_decode($argv[$i]);
if (!is_dir($argv[$i])) {
throw new Exception("Error: The path \"" . $argv[$i] . "\" is invalid");
}
}
//Set variables
$osIsLinux = strtoupper(substr(PHP_OS, 0, 3)) != "WIN";
$pathHome = $argv[2];
$pathTrunk = $argv[3];
$pathOutTrunk = $argv[4];
//Defines constants
define("PATH_SEP", ($osIsLinux)? "/" : "\\");
define("PATH_HOME", $pathHome);
define("PATH_TRUNK", $pathTrunk);
define("PATH_OUTTRUNK", $pathOutTrunk);
define("PATH_CLASSES", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP);
define("SYS_LANG", "en");
require_once(PATH_HOME . "engine" . PATH_SEP . "config" . PATH_SEP . "paths.php");
require_once(PATH_TRUNK . "framework" . PATH_SEP . "src" . PATH_SEP . "Maveriks" . PATH_SEP . "Util" . PATH_SEP . "ClassLoader.php");
//Class Loader - /ProcessMaker/BusinessModel
$classLoader = \Maveriks\Util\ClassLoader::getInstance();
$classLoader->add(PATH_TRUNK . "framework" . PATH_SEP . "src" . PATH_SEP, "Maveriks");
$classLoader->add(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "src" . PATH_SEP, "ProcessMaker");
$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->addModelClassPath(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP);
//Load classes
G::LoadThirdParty("pear/json", "class.json");
G::LoadThirdParty("smarty/libs", "Smarty.class");
G::LoadSystem("error");
G::LoadSystem("dbconnection");
G::LoadSystem("dbsession");
G::LoadSystem("dbrecordset");
G::LoadSystem("dbtable");
G::LoadSystem("rbac" );
G::LoadSystem("publisher");
G::LoadSystem("templatePower");
G::LoadSystem("xmlDocument");
G::LoadSystem("xmlform");
G::LoadSystem("xmlformExtension");
G::LoadSystem("form");
G::LoadSystem("menu");
G::LoadSystem("xmlMenu");
G::LoadSystem("dvEditor");
G::LoadSystem("table");
G::LoadSystem("pagedTable");
G::LoadClass("system");
require_once("propel/Propel.php");
require_once("creole/Creole.php");
$config = System::getSystemConfiguration();
$e_all = (defined("E_DEPRECATED"))? E_ALL & ~E_DEPRECATED : E_ALL;
$e_all = (defined("E_STRICT"))? $e_all & ~E_STRICT : $e_all;
$e_all = ($config["debug"])? $e_all : $e_all & ~E_NOTICE;
G::LoadSystem('inputfilter');
$filter = new InputFilter();
$config['debug'] = $filter->validateInput($config['debug']);
$config['wsdl_cache'] = $filter->validateInput($config['wsdl_cache'],'int');
$config['time_zone'] = $filter->validateInput($config['time_zone']);
//Do not change any of these settings directly, use env.ini instead
ini_set("display_errors", $config["debug"]);
ini_set("error_reporting", $e_all);
ini_set("short_open_tag", "On");
ini_set("default_charset", "UTF-8");
//ini_set("memory_limit", $config["memory_limit"]);
ini_set("soap.wsdl_cache_enabled", $config["wsdl_cache"]);
ini_set("date.timezone", $config["time_zone"]);
define("DEBUG_SQL_LOG", $config["debug_sql"]);
define("DEBUG_TIME_LOG", $config["debug_time"]);
define("DEBUG_CALENDAR_LOG", $config["debug_calendar"]);
define("MEMCACHED_ENABLED", $config["memcached"]);
define("MEMCACHED_SERVER", $config["memcached_server"]);
define("TIME_ZONE", $config["time_zone"]);
//require_once(PATH_GULLIVER . PATH_SEP . "class.bootstrap.php");
//define("PATH_GULLIVER_HOME", PATH_TRUNK . "gulliver" . PATH_SEP);
spl_autoload_register(array("Bootstrap", "autoloadClass"));
//DATABASE propel classes used in "Cases" Options
Bootstrap::registerClass("PMLicensedFeatures", PATH_CLASSES . "class.licensedFeatures.php");
Bootstrap::registerClass("calendar", PATH_CLASSES . "class.calendar.php");
Bootstrap::registerClass("wsResponse", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.wsResponse.php");
G::LoadClass("processes");
G::LoadClass("derivation");
G::LoadClass("dates"); //Load Criteria
//Workflow
$workflow = $argv[1];
if (is_dir(PATH_DB . $workflow) && file_exists(PATH_DB . $workflow . PATH_SEP . "db.php")) {
define("SYS_SYS", $workflow);
include_once(PATH_HOME . "engine" . PATH_SEP . "config" . PATH_SEP . "paths_installed.php");
include_once(PATH_HOME . "engine" . PATH_SEP . "config" . PATH_SEP . "paths.php");
//PM Paths DATA
define("PATH_DATA_SITE", PATH_DATA . "sites/" . SYS_SYS . "/");
define("PATH_DOCUMENT", PATH_DATA_SITE . "files/");
define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates/");
define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public/");
define("PATH_DATA_REPORTS", PATH_DATA_SITE . "reports/");
define("PATH_DYNAFORM", PATH_DATA_SITE . "xmlForms/");
define("PATH_IMAGES_ENVIRONMENT_FILES", PATH_DATA_SITE . "usersFiles" . PATH_SEP);
define("PATH_IMAGES_ENVIRONMENT_USERS", PATH_DATA_SITE . "usersPhotographies" . PATH_SEP);
if (is_file(PATH_DATA_SITE.PATH_SEP . ".server_info")) {
$SERVER_INFO = file_get_contents(PATH_DATA_SITE.PATH_SEP.".server_info");
$SERVER_INFO = unserialize($SERVER_INFO);
define("SERVER_NAME", $SERVER_INFO ["SERVER_NAME"]);
define("SERVER_PORT", $SERVER_INFO ["SERVER_PORT"]);
} else {
eprintln("WARNING! No server info found!", "red");
}
//DB
$phpCode = "";
$fileDb = fopen(PATH_DB . $workflow . PATH_SEP . "db.php", "r");
if ($fileDb) {
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);
}
fclose($fileDb);
}
$phpCode = str_replace(array("<?php", "<?", "?>"), array("", "", ""), $phpCode);
eval($phpCode);
$dsn = $DB_ADAPTER . "://" . $DB_USER . ":" . $DB_PASS . "@" . $DB_HOST . "/" . $DB_NAME;
$dsnRbac = $DB_ADAPTER . "://" . $DB_RBAC_USER . ":" . $DB_RBAC_PASS . "@" . $DB_RBAC_HOST . "/" . $DB_RBAC_NAME;
$dsnRp = $DB_ADAPTER . "://" . $DB_REPORT_USER . ":" . $DB_REPORT_PASS . "@" . $DB_REPORT_HOST . "/" . $DB_REPORT_NAME;
switch ($DB_ADAPTER) {
case "mysql":
$dsn .= "?encoding=utf8";
$dsnRbac .= "?encoding=utf8";
break;
case "mssql":
//$dsn .= "?sendStringAsUnicode=false";
//$dsnRbac .= "?sendStringAsUnicode=false";
break;
default:
break;
}
$pro = array();
$pro["datasources"]["workflow"]["connection"] = $dsn;
$pro["datasources"]["workflow"]["adapter"] = $DB_ADAPTER;
$pro["datasources"]["rbac"]["connection"] = $dsnRbac;
$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, "<?php global \$pro; return \$pro; ?>");
fclose($oFile);
Propel::init(PATH_CORE . "config" . PATH_SEP . "_databases_.php");
//Creole::registerDriver("dbarray", "creole.contrib.DBArrayConnection");
//Enable RBAC
Bootstrap::LoadSystem("rbac");
$rbac = &RBAC::getSingleton(PATH_DATA, session_id());
$rbac->sSystem = "PROCESSMAKER";
if (!defined("DB_ADAPTER")) {
define("DB_ADAPTER", $DB_ADAPTER);
}
eprintln("Processing workspace: " . $workflow, "green");
try {
$timerEvent = new \ProcessMaker\BusinessModel\TimerEvent();
$timerEvent->startContinueCaseByTimerEvent(date("Y-m-d H:i:s"), true);
} catch (Exception $e) {
echo $e->getMessage() . "\n";
eprintln("Problem in workspace: " . $workflow . " it was omitted.", "red");
}
eprintln();
}
if (file_exists(PATH_CORE . "config" . PATH_SEP . "_databases_.php")) {
unlink(PATH_CORE . "config" . PATH_SEP . "_databases_.php");
}
} catch (Exception $e) {
echo $e->getMessage() . "\n";
}

View File

@@ -2028,16 +2028,21 @@ class Cases
{
if ($sTasUid != '') {
try {
$this->Task = new Task;
$Fields = $this->Task->Load($sTasUid);
$task = TaskPeer::retrieveByPK($sTasUid);
if (is_null($task)) {
throw new Exception(G::LoadTranslation("ID_TASK_NOT_EXIST", array("TAS_UID", $sTasUid)));
}
//To allow Self Service as the first task
if (($Fields['TAS_ASSIGN_TYPE'] != 'SELF_SERVICE') && ($sUsrUid == '')) {
$arrayTaskTypeToExclude = array("START-TIMER-EVENT");
if (!is_null($task) && !in_array($task->getTasType(), $arrayTaskTypeToExclude) && $task->getTasAssignType() != "SELF_SERVICE" && $sUsrUid == "") {
throw (new Exception('You tried to start a new case without send the USER UID!'));
}
//Process
$sProUid = $this->Task->getProUid();
$sProUid = $task->getProUid();
$this->Process = new Process;
$proFields = $this->Process->Load($sProUid);

View File

@@ -439,20 +439,21 @@ class Derivation
*/
function getNextAssignedUser ($tasInfo)
{
$oUser = new Users();
//$oUser = new Users();
$nextAssignedTask = $tasInfo['NEXT_TASK'];
$lastAssigned = $tasInfo['NEXT_TASK']['TAS_LAST_ASSIGNED'];
$sTasUid = $tasInfo['NEXT_TASK']['TAS_UID'];
// to do: we can increase the LOCATION by COUNTRY, STATE and LOCATION
/* Verify if the next Task is set with the option "TAS_ASSIGN_LOCATION == TRUE" */
$assignLocation = '';
if ($tasInfo['NEXT_TASK']['TAS_ASSIGN_LOCATION'] == 'TRUE') {
$oUser->load( $tasInfo['USER_UID'] );
krumo( $oUser->getUsrLocation() );
//to do: assign for location
//$assignLocation = " AND USR_LOCATION = " . $oUser->Fields['USR_LOCATION'];
}
/* End - Verify if the next Task is set with the option "TAS_ASSIGN_LOCATION == TRUE" */
//// to do: we can increase the LOCATION by COUNTRY, STATE and LOCATION
///* Verify if the next Task is set with the option "TAS_ASSIGN_LOCATION == TRUE" */
//$assignLocation = '';
//if ($tasInfo['NEXT_TASK']['TAS_ASSIGN_LOCATION'] == 'TRUE') {
// $oUser->load( $tasInfo['USER_UID'] );
// krumo( $oUser->getUsrLocation() );
// //to do: assign for location
// //$assignLocation = " AND USR_LOCATION = " . $oUser->Fields['USR_LOCATION'];
//}
///* End - Verify if the next Task is set with the option "TAS_ASSIGN_LOCATION == TRUE" */
$uidUser = '';
switch ($nextAssignedTask['TAS_ASSIGN_TYPE']) {
@@ -507,7 +508,7 @@ class Derivation
$userFields['USR_EMAIL'] = '';
//get the report_to user & its full info
$useruid = $this->checkReplacedByUser( $this->getDenpendentUser( $tasInfo['USER_UID'] ) );
$useruid = ($tasInfo["USER_UID"] != "")? $this->checkReplacedByUser($this->getDenpendentUser($tasInfo["USER_UID"])) : "";
if (isset( $useruid ) && $useruid != '') {
$userFields = $this->getUsersFullNameFromArray( $useruid );

View File

@@ -1985,7 +1985,11 @@ class wsBase
}
}
if ($founded == '') {
$task = TaskPeer::retrieveByPK($taskId);
$arrayTaskTypeToExclude = array("START-TIMER-EVENT");
if (!is_null($task) && !in_array($task->getTasType(), $arrayTaskTypeToExclude) && $founded == "") {
$result = new wsResponse( 14, G::loadTranslation( 'ID_TASK_INVALID_USER_NOT_ASSIGNED_TASK' ) );
$g->sessionVarRestore();
@@ -2227,6 +2231,7 @@ class wsBase
}
}
$aData = array();
$aData['APP_UID'] = $caseId;
$aData['DEL_INDEX'] = $delIndex;
$aData['USER_UID'] = $userId;
@@ -2482,14 +2487,20 @@ class wsBase
}
}
$oUser = new Users();
$aUser = $oUser->load( $userId );
$sFromName = "";
if (trim( $aUser['USR_EMAIL'] ) == '') {
$aUser['USR_EMAIL'] = 'info@' . $_SERVER['HTTP_HOST'];
if ($userId != "") {
$user = new Users();
$arrayUserData = $user->load($userId);
if (trim($arrayUserData["USR_EMAIL"]) == "") {
$arrayUserData["USR_EMAIL"] = "info@" . $_SERVER["HTTP_HOST"];
}
$sFromName = "\"" . $arrayUserData["USR_FIRSTNAME"] . " " . $arrayUserData["USR_LASTNAME"] . "\" <" . $arrayUserData["USR_EMAIL"] . ">";
}
$sFromName = '"' . $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME'] . '" <' . $aUser['USR_EMAIL'] . '>';
$oCase->sendNotifications( $appdel['TAS_UID'], $nextDelegations, $appFields['APP_DATA'], $caseId, $delIndex, $sFromName );
//Save data - Start

View File

@@ -113,6 +113,10 @@ class ListParticipatedLast extends BaseListParticipatedLast
{
$data['APP_STATUS'] = (empty($data['APP_STATUS'])) ? 'TO_DO' : $data['APP_STATUS'];
if (!$isSelfService) {
if ($data["USR_UID"] == "") {
return;
}
$criteria = new Criteria();
$criteria->addSelectColumn(UsersPeer::USR_USERNAME);
$criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME);

View File

@@ -261,7 +261,7 @@ class Users extends BaseUsers
//Calendar
$calendar = new Calendar();
$calendarInfo = $calendar->getCalendarFor( $userUid, $userUid, $userUid );
$aFields["USR_CALENDAR"] = ($calendarInfo["CALENDAR_APPLIED"] != "DEFAULT") ? $calendarInfo["CALENDAR_UID"] : "";
$aFields["USR_CALENDAR"] = ($calendarInfo["CALENDAR_APPLIED"] != "DEFAULT") ? $calendarInfo["CALENDAR_UID"] : "";
//Photo
$pathPhoto = PATH_IMAGES_ENVIRONMENT_USERS . $userUid . ".gif";
@@ -290,12 +290,12 @@ class Users extends BaseUsers
if(strlen($arrayData["replacedby"] != 0)){
$oUser = UsersPeer::retrieveByPK( $arrayData["replacedby"] );
$arrayData["replacedbyfullname"] = $oUser->getUsrFirstname() . ' ' . $oUser->getUsrLastname();
}
}
$arrayData["duedate"] = $aFields["USR_DUE_DATE"];
$arrayData["calendar"] = $aFields["USR_CALENDAR"];
if(strlen($aFields["USR_CALENDAR"] != 0)){
$arrayData["calendarname"] = $calendar->calendarName( $aFields["USR_CALENDAR"] );
}
$arrayData["calendarname"] = $calendar->calendarName( $aFields["USR_CALENDAR"] );
}
$arrayData["status"] = $aFields["USR_STATUS"];
$arrayData["department"] = $aFields["DEP_UID"];
if (strlen($arrayData["department"]) != 0) {
@@ -399,6 +399,10 @@ class Users extends BaseUsers
public function refreshTotal ($userId, $type = 'add', $list = "inbox", $total = 1)
{
if ($userId == "") {
return;
}
$nameList = self::getNameTotal($list);
$criteria = new Criteria();
$criteria->addSelectColumn( $nameList );

View File

@@ -77,11 +77,11 @@ class TimerEventMapBuilder
$tMap->addColumn('TMREVN_END_DATE', 'TmrevnEndDate', 'int', CreoleTypes::DATE, false, null);
$tMap->addColumn('TMREVN_DAY', 'TmrevnDay', 'string', CreoleTypes::VARCHAR, true, 2);
$tMap->addColumn('TMREVN_DAY', 'TmrevnDay', 'string', CreoleTypes::VARCHAR, true, 5);
$tMap->addColumn('TMREVN_HOUR', 'TmrevnHour', 'string', CreoleTypes::VARCHAR, true, 2);
$tMap->addColumn('TMREVN_HOUR', 'TmrevnHour', 'string', CreoleTypes::VARCHAR, true, 5);
$tMap->addColumn('TMREVN_MINUTE', 'TmrevnMinute', 'string', CreoleTypes::VARCHAR, true, 2);
$tMap->addColumn('TMREVN_MINUTE', 'TmrevnMinute', 'string', CreoleTypes::VARCHAR, true, 5);
$tMap->addColumn('TMREVN_CONFIGURATION_DATA', 'TmrevnConfigurationData', 'string', CreoleTypes::LONGVARCHAR, true, null);

View File

@@ -5098,9 +5098,9 @@
<column name="TMREVN_OPTION" type="VARCHAR" size="50" required="true" default="DAILY" />
<column name="TMREVN_START_DATE" type="DATE" required="false" />
<column name="TMREVN_END_DATE" type="DATE" required="false" />
<column name="TMREVN_DAY" type="VARCHAR" size="2" required="true" default="" />
<column name="TMREVN_HOUR" type="VARCHAR" size="2" required="true" default="" />
<column name="TMREVN_MINUTE" type="VARCHAR" size="2" required="true" default="" />
<column name="TMREVN_DAY" type="VARCHAR" size="5" required="true" default="" />
<column name="TMREVN_HOUR" type="VARCHAR" size="5" required="true" default="" />
<column name="TMREVN_MINUTE" type="VARCHAR" size="5" required="true" default="" />
<column name="TMREVN_CONFIGURATION_DATA" type="LONGVARCHAR" required="true" default="" />
<column name="TMREVN_NEXT_RUN_DATE" type="TIMESTAMP" required="false" />
<column name="TMREVN_LAST_RUN_DATE" type="TIMESTAMP" required="false" />

View File

@@ -2861,9 +2861,9 @@ CREATE TABLE TIMER_EVENT
TMREVN_OPTION VARCHAR(50) default 'DAILY' NOT NULL,
TMREVN_START_DATE DATE,
TMREVN_END_DATE DATE,
TMREVN_DAY VARCHAR(2) default '' NOT NULL,
TMREVN_HOUR VARCHAR(2) default '' NOT NULL,
TMREVN_MINUTE VARCHAR(2) default '' NOT NULL,
TMREVN_DAY VARCHAR(5) default '' NOT NULL,
TMREVN_HOUR VARCHAR(5) default '' NOT NULL,
TMREVN_MINUTE VARCHAR(5) default '' NOT NULL,
TMREVN_CONFIGURATION_DATA MEDIUMTEXT default '' NOT NULL,
TMREVN_NEXT_RUN_DATE DATETIME,
TMREVN_LAST_RUN_DATE DATETIME,

File diff suppressed because it is too large Load Diff