2015-06-30 12:04:53 -04:00
|
|
|
<?php
|
2020-08-10 17:11:55 -04:00
|
|
|
|
2015-06-30 12:04:53 -04:00
|
|
|
namespace ProcessMaker\BusinessModel;
|
|
|
|
|
|
2020-08-10 17:11:55 -04:00
|
|
|
use Bootstrap;
|
|
|
|
|
use Illuminate\Support\Facades\Log;
|
2020-11-17 20:07:35 -04:00
|
|
|
use ProcessMaker\Model\Task;
|
2020-08-10 17:11:55 -04:00
|
|
|
|
2015-06-30 12:04:53 -04:00
|
|
|
class TimerEvent
|
|
|
|
|
{
|
|
|
|
|
private $arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventUid"),
|
|
|
|
|
|
|
|
|
|
"EVN_UID" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "eventUid"),
|
|
|
|
|
"TMREVN_OPTION" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("HOURLY", "DAILY", "MONTHLY", "EVERY", "ONE-DATE-TIME", "WAIT-FOR", "WAIT-UNTIL-SPECIFIED-DATE-TIME"), "fieldNameAux" => "timerEventOption"),
|
|
|
|
|
"TMREVN_START_DATE" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventStartDate"),
|
|
|
|
|
"TMREVN_END_DATE" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventEndDate"),
|
|
|
|
|
"TMREVN_DAY" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventDay"),
|
|
|
|
|
"TMREVN_HOUR" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventHour"),
|
|
|
|
|
"TMREVN_MINUTE" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute"),
|
|
|
|
|
"TMREVN_CONFIGURATION_DATA" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventConfigurationData"),
|
|
|
|
|
"TMREVN_NEXT_RUN_DATE" => array("type" => "datetime", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventNextRunDate"),
|
|
|
|
|
"TMREVN_STATUS" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array("ACTIVE", "INACTIVE", "PROCESSED"), "fieldNameAux" => "timerEventStatus")
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
private $formatFieldNameInUppercase = true;
|
|
|
|
|
|
|
|
|
|
private $arrayFieldNameForException = array(
|
|
|
|
|
"projectUid" => "PRJ_UID"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Constructor of the class
|
|
|
|
|
*
|
|
|
|
|
* return void
|
|
|
|
|
*/
|
|
|
|
|
public function __construct()
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
foreach ($this->arrayFieldDefinition as $key => $value) {
|
|
|
|
|
$this->arrayFieldNameForException[$value["fieldNameAux"]] = $key;
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set the format of the fields name (uppercase, lowercase)
|
|
|
|
|
*
|
|
|
|
|
* @param bool $flag Value that set the format
|
|
|
|
|
*
|
|
|
|
|
* return void
|
|
|
|
|
*/
|
|
|
|
|
public function setFormatFieldNameInUppercase($flag)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$this->formatFieldNameInUppercase = $flag;
|
|
|
|
|
|
|
|
|
|
$this->setArrayFieldNameForException($this->arrayFieldNameForException);
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set exception messages for fields
|
|
|
|
|
*
|
|
|
|
|
* @param array $arrayData Data with the fields
|
|
|
|
|
*
|
|
|
|
|
* return void
|
|
|
|
|
*/
|
|
|
|
|
public function setArrayFieldNameForException(array $arrayData)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
foreach ($arrayData as $key => $value) {
|
|
|
|
|
$this->arrayFieldNameForException[$key] = $this->getFieldNameByFormatFieldName($value);
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get the name of the field according to the format
|
|
|
|
|
*
|
|
|
|
|
* @param string $fieldName Field name
|
|
|
|
|
*
|
|
|
|
|
* return string Return the field name according the format
|
|
|
|
|
*/
|
|
|
|
|
public function getFieldNameByFormatFieldName($fieldName)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
return ($this->formatFieldNameInUppercase)? strtoupper($fieldName) : strtolower($fieldName);
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get year, month, day, hour, minute and second by datetime
|
|
|
|
|
*
|
|
|
|
|
* @param string $datetime Datetime (yyyy-mm-dd hh:ii:ss)
|
|
|
|
|
*
|
|
|
|
|
* return array Return data
|
|
|
|
|
*/
|
|
|
|
|
public function getYearMonthDayHourMinuteSecondByDatetime($datetime)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$arrayData = array();
|
|
|
|
|
|
2015-07-13 16:58:36 -04:00
|
|
|
if (preg_match("/^([1-9]\d{3})\-(0[1-9]|1[0-2])\-(0[1-9]|[12][0-9]|3[01])(?:\s([0-1]\d|2[0-3])\:([0-5]\d)\:([0-5]\d))?$/", $datetime, $arrayMatch)) {
|
2015-06-30 12:04:53 -04:00
|
|
|
$arrayData[] = $arrayMatch[1]; //Year
|
|
|
|
|
$arrayData[] = $arrayMatch[2]; //Month
|
|
|
|
|
$arrayData[] = $arrayMatch[3]; //Day
|
|
|
|
|
$arrayData[] = (isset($arrayMatch[4]))? $arrayMatch[4] : "00"; //Hour
|
2015-07-07 11:51:12 -04:00
|
|
|
$arrayData[] = (isset($arrayMatch[5]))? $arrayMatch[5] : "00"; //Minute
|
|
|
|
|
$arrayData[] = (isset($arrayMatch[6]))? $arrayMatch[6] : "00"; //Second
|
2015-06-30 12:04:53 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $arrayData;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get valid Next Run Date
|
|
|
|
|
*
|
|
|
|
|
* @param array $arrayTimerEventData Timer-Event data
|
|
|
|
|
* @param string $datetime Datetime
|
|
|
|
|
* @param bool $flagIncludeDatetime Flag
|
|
|
|
|
*
|
|
|
|
|
* return string Return the valid Next Run Date
|
|
|
|
|
*/
|
|
|
|
|
public function getValidNextRunDateByDataAndDatetime(array $arrayTimerEventData, $datetime, $flagIncludeDatetime = true)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$nextRunDate = $datetime;
|
|
|
|
|
|
|
|
|
|
//Get Next Run Date
|
|
|
|
|
list($year, $month, $day, $hour, $minute, $second) = $this->getYearMonthDayHourMinuteSecondByDatetime($datetime);
|
|
|
|
|
|
|
|
|
|
$arrayMonthsShort = array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
|
|
|
|
|
$arrayWeekdays = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
|
|
|
|
|
|
|
|
|
|
switch ($arrayTimerEventData["TMREVN_OPTION"]) {
|
|
|
|
|
case "HOURLY":
|
|
|
|
|
$hhmmss = "$hour:" . $arrayTimerEventData["TMREVN_MINUTE"] . ":00";
|
|
|
|
|
|
|
|
|
|
$nextRunDate = "$year-$month-$day $hhmmss";
|
|
|
|
|
|
|
|
|
|
if (!$flagIncludeDatetime) {
|
|
|
|
|
$nextRunDate = date("Y-m-d H:i:s", strtotime("$nextRunDate +1 hour"));
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "DAILY":
|
|
|
|
|
$hhmmss = $arrayTimerEventData["TMREVN_HOUR"] . ":" . $arrayTimerEventData["TMREVN_MINUTE"] . ":00";
|
|
|
|
|
|
|
|
|
|
$arrayWeekdaysData = $arrayTimerEventData["TMREVN_CONFIGURATION_DATA"];
|
|
|
|
|
|
|
|
|
|
if (!empty($arrayWeekdaysData)) {
|
|
|
|
|
sort($arrayWeekdaysData);
|
|
|
|
|
|
|
|
|
|
$weekday = (int)(date("w", strtotime($datetime)));
|
|
|
|
|
$weekday = ($weekday == 0)? 7 : $weekday;
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
$firstWeekday = $arrayWeekdaysData[0];
|
2015-06-30 12:04:53 -04:00
|
|
|
|
|
|
|
|
$nextWeekday = $firstWeekday;
|
|
|
|
|
$typeStatement = "this";
|
|
|
|
|
$flag = false;
|
|
|
|
|
|
|
|
|
|
foreach ($arrayWeekdaysData as $value) {
|
2015-07-07 11:51:12 -04:00
|
|
|
$d = $value;
|
2015-06-30 12:04:53 -04:00
|
|
|
|
|
|
|
|
if (($flagIncludeDatetime && $d >= $weekday) || (!$flagIncludeDatetime && $d > $weekday)) {
|
|
|
|
|
$nextWeekday = $d;
|
|
|
|
|
$flag = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$flag) {
|
|
|
|
|
$typeStatement = "next";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$nextRunDate = date("Y-m-d", strtotime("$year-$month-$day $typeStatement " . $arrayWeekdays[$nextWeekday - 1])) . " $hhmmss";
|
|
|
|
|
} else {
|
|
|
|
|
$nextRunDate = "$year-$month-$day $hhmmss";
|
|
|
|
|
|
|
|
|
|
if (!$flagIncludeDatetime) {
|
|
|
|
|
$nextRunDate = date("Y-m-d", strtotime("$nextRunDate +1 day")) . " $hhmmss";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "MONTHLY":
|
|
|
|
|
$hhmmss = $arrayTimerEventData["TMREVN_HOUR"] . ":" . $arrayTimerEventData["TMREVN_MINUTE"] . ":00";
|
|
|
|
|
|
|
|
|
|
$arrayMonthsData = $arrayTimerEventData["TMREVN_CONFIGURATION_DATA"];
|
|
|
|
|
|
|
|
|
|
if (!empty($arrayMonthsData)) {
|
|
|
|
|
sort($arrayMonthsData);
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
$firstMonth = $arrayMonthsData[0];
|
2015-06-30 12:04:53 -04:00
|
|
|
|
|
|
|
|
$nextMonth = $firstMonth;
|
|
|
|
|
$flag = false;
|
|
|
|
|
|
|
|
|
|
foreach ($arrayMonthsData as $value) {
|
2015-07-07 11:51:12 -04:00
|
|
|
$m = $value;
|
2015-06-30 12:04:53 -04:00
|
|
|
|
|
|
|
|
if (($flagIncludeDatetime && $m >= $month) || (!$flagIncludeDatetime && $m > $month)) {
|
|
|
|
|
$nextMonth = $m;
|
|
|
|
|
$flag = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$flag) {
|
|
|
|
|
$year++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (checkdate((int)($nextMonth), (int)($arrayTimerEventData["TMREVN_DAY"]), (int)($year))) {
|
|
|
|
|
$nextRunDate = "$year-$nextMonth-" . $arrayTimerEventData["TMREVN_DAY"] . " $hhmmss";
|
|
|
|
|
} else {
|
|
|
|
|
$nextRunDate = date("Y-m-d", strtotime("last day of " . $arrayMonthsShort[((int)($nextMonth)) - 1] . " $year")) . " $hhmmss";
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (checkdate((int)($month), (int)($arrayTimerEventData["TMREVN_DAY"]), (int)($year))) {
|
|
|
|
|
$nextRunDate = "$year-$month-" . $arrayTimerEventData["TMREVN_DAY"] . " $hhmmss";
|
|
|
|
|
} else {
|
|
|
|
|
$nextRunDate = date("Y-m-d", strtotime("last day of " . $arrayMonthsShort[((int)($month)) - 1] . " $year")) . " $hhmmss";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$flagIncludeDatetime) {
|
|
|
|
|
list($yearAux, $monthAux) = $this->getYearMonthDayHourMinuteSecondByDatetime(date("Y-m-d", strtotime("$year-$month-01 next month")));
|
|
|
|
|
|
|
|
|
|
if (checkdate((int)($monthAux), (int)($arrayTimerEventData["TMREVN_DAY"]), (int)($yearAux))) {
|
|
|
|
|
$nextRunDate = "$yearAux-$monthAux-" . $arrayTimerEventData["TMREVN_DAY"] . " $hhmmss";
|
|
|
|
|
} else {
|
|
|
|
|
$nextRunDate = date("Y-m-d", strtotime("last day of " . $arrayMonthsShort[((int)($monthAux)) - 1] . " $yearAux")) . " $hhmmss";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "EVERY":
|
|
|
|
|
if ($arrayTimerEventData["TMREVN_HOUR"] . "" != "") {
|
|
|
|
|
$nextRunDate = date("Y-m-d H:i:s", strtotime("$nextRunDate +" . ((int)($arrayTimerEventData["TMREVN_HOUR"])) . " hours"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($arrayTimerEventData["TMREVN_MINUTE"] . "" != "") {
|
|
|
|
|
$nextRunDate = date("Y-m-d H:i:s", strtotime("$nextRunDate +" . ((int)($arrayTimerEventData["TMREVN_MINUTE"])) . " minutes"));
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Return
|
2015-07-07 11:51:12 -04:00
|
|
|
return date("Y-m-d H:i:s", strtotime($nextRunDate));
|
2015-06-30 12:04:53 -04:00
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get Next Run Date
|
|
|
|
|
*
|
|
|
|
|
* @param array $arrayTimerEventData Timer-Event data
|
|
|
|
|
* @param string $datetime Datetime
|
|
|
|
|
* @param bool $flagIncludeDatetime Flag
|
|
|
|
|
*
|
|
|
|
|
* return string Return the Next Run Date
|
|
|
|
|
*/
|
|
|
|
|
public function getNextRunDateByDataAndDatetime(array $arrayTimerEventData, $datetime, $flagIncludeDatetime = true)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$nextRunDate = $datetime;
|
|
|
|
|
|
|
|
|
|
//Get Next Run Date
|
|
|
|
|
if (!is_array($arrayTimerEventData["TMREVN_CONFIGURATION_DATA"])) {
|
|
|
|
|
$arrayTimerEventData["TMREVN_CONFIGURATION_DATA"] = unserialize($arrayTimerEventData["TMREVN_CONFIGURATION_DATA"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$timeDatetime = strtotime($datetime);
|
|
|
|
|
|
|
|
|
|
$flagNextRunDate = true;
|
|
|
|
|
|
|
|
|
|
switch ($arrayTimerEventData["TMREVN_OPTION"]) {
|
|
|
|
|
case "HOURLY":
|
|
|
|
|
case "DAILY":
|
|
|
|
|
case "MONTHLY":
|
|
|
|
|
//case "EVERY":
|
|
|
|
|
$nextRunDate = $this->getValidNextRunDateByDataAndDatetime($arrayTimerEventData, $arrayTimerEventData["TMREVN_START_DATE"] . " 00:00:00", $flagIncludeDatetime);
|
|
|
|
|
$timeNextRunDate = strtotime($nextRunDate);
|
|
|
|
|
|
|
|
|
|
if ($timeNextRunDate > $timeDatetime) {
|
|
|
|
|
$flagNextRunDate = false;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($flagNextRunDate) {
|
|
|
|
|
switch ($arrayTimerEventData["TMREVN_OPTION"]) {
|
|
|
|
|
case "HOURLY":
|
|
|
|
|
case "DAILY":
|
|
|
|
|
case "MONTHLY":
|
|
|
|
|
case "EVERY":
|
|
|
|
|
$nextRunDate = $this->getValidNextRunDateByDataAndDatetime($arrayTimerEventData, $datetime, $flagIncludeDatetime);
|
|
|
|
|
$timeNextRunDate = strtotime($nextRunDate);
|
|
|
|
|
|
|
|
|
|
if ($timeNextRunDate < $timeDatetime) {
|
|
|
|
|
$nextRunDate = $this->getValidNextRunDateByDataAndDatetime($arrayTimerEventData, $datetime, false);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $nextRunDate;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
/**
|
|
|
|
|
* Unset fields
|
|
|
|
|
*
|
|
|
|
|
* @param array $arrayData Data with the fields
|
|
|
|
|
*
|
|
|
|
|
* return array Return data with the fields
|
|
|
|
|
*/
|
|
|
|
|
public function unsetFields(array $arrayData)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
unset($arrayData["TMREVN_UID"]);
|
|
|
|
|
unset($arrayData["PRJ_UID"]);
|
|
|
|
|
unset($arrayData["TMREVN_LAST_RUN_DATE"]);
|
|
|
|
|
unset($arrayData["TMREVN_LAST_EXECUTION_DATE"]);
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $arrayData;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-30 12:04:53 -04:00
|
|
|
/**
|
|
|
|
|
* Verify if exists the Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $timerEventUid Unique id of Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* return bool Return true if exists the Timer-Event, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
public function exists($timerEventUid)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$obj = \TimerEventPeer::retrieveByPK($timerEventUid);
|
|
|
|
|
|
|
|
|
|
return (!is_null($obj))? true : false;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Verify if exists the Event of a Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $projectUid Unique id of Project
|
|
|
|
|
* @param string $eventUid Unique id of Event
|
|
|
|
|
* @param string $timerEventUidToExclude Unique id of Timer-Event to exclude
|
|
|
|
|
*
|
|
|
|
|
* return bool Return true if exists the Event of a Timer-Event, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
public function existsEvent($projectUid, $eventUid, $timerEventUidToExclude = "")
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$criteria = new \Criteria("workflow");
|
|
|
|
|
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_UID);
|
|
|
|
|
$criteria->add(\TimerEventPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
if ($timerEventUidToExclude != "") {
|
|
|
|
|
$criteria->add(\TimerEventPeer::TMREVN_UID, $timerEventUidToExclude, \Criteria::NOT_EQUAL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$criteria->add(\TimerEventPeer::EVN_UID, $eventUid, \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$rsCriteria = \TimerEventPeer::doSelectRS($criteria);
|
|
|
|
|
|
|
|
|
|
return ($rsCriteria->next())? true : false;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Verify if does not exists the Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $timerEventUid Unique id of Timer-Event
|
|
|
|
|
* @param string $fieldNameForException Field name for the exception
|
|
|
|
|
*
|
|
|
|
|
* return void Throw exception if does not exists the Timer-Event
|
|
|
|
|
*/
|
|
|
|
|
public function throwExceptionIfNotExistsTimerEvent($timerEventUid, $fieldNameForException)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
if (!$this->exists($timerEventUid)) {
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_TIMER_EVENT_DOES_NOT_EXIST", array($fieldNameForException, $timerEventUid)));
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Verify if is registered the Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $projectUid Unique id of Project
|
|
|
|
|
* @param string $eventUid Unique id of Event
|
|
|
|
|
* @param string $fieldNameForException Field name for the exception
|
|
|
|
|
* @param string $timerEventUidToExclude Unique id of Timer-Event to exclude
|
|
|
|
|
*
|
|
|
|
|
* return void Throw exception if is registered the Event
|
|
|
|
|
*/
|
|
|
|
|
public function throwExceptionIfEventIsRegistered($projectUid, $eventUid, $fieldNameForException, $timerEventUidToExclude = "")
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
if ($this->existsEvent($projectUid, $eventUid, $timerEventUidToExclude)) {
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_TIMER_EVENT_ALREADY_REGISTERED", array($fieldNameForException, $eventUid)));
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Validate the data if they are invalid (INSERT and UPDATE)
|
|
|
|
|
*
|
|
|
|
|
* @param string $timerEventUid Unique id of Timer-Event
|
|
|
|
|
* @param string $projectUid Unique id of Project
|
|
|
|
|
* @param array $arrayData Data
|
|
|
|
|
*
|
|
|
|
|
* return void Throw exception if data has an invalid value
|
|
|
|
|
*/
|
|
|
|
|
public function throwExceptionIfDataIsInvalid($timerEventUid, $projectUid, array $arrayData)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
//Set variables
|
|
|
|
|
$arrayTimerEventData = ($timerEventUid == "")? array() : $this->getTimerEvent($timerEventUid, true);
|
|
|
|
|
$flagInsert = ($timerEventUid == "")? true : false;
|
|
|
|
|
|
|
|
|
|
$arrayFinalData = array_merge($arrayTimerEventData, $arrayData);
|
|
|
|
|
|
|
|
|
|
//Verify data - Field definition
|
|
|
|
|
$process = new \ProcessMaker\BusinessModel\Process();
|
|
|
|
|
|
|
|
|
|
$process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert);
|
|
|
|
|
|
|
|
|
|
//Verify data
|
|
|
|
|
if (isset($arrayData["EVN_UID"])) {
|
|
|
|
|
$arrayEventType = array("START", "INTERMEDIATE");
|
|
|
|
|
$arrayEventMarker = array("TIMER");
|
|
|
|
|
|
|
|
|
|
$bpmnEvent = \BpmnEventPeer::retrieveByPK($arrayData["EVN_UID"]);
|
|
|
|
|
|
|
|
|
|
if (is_null($bpmnEvent)) {
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_EXIST", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"])));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!in_array($bpmnEvent->getEvnType(), $arrayEventType) || !in_array($bpmnEvent->getEvnMarker(), $arrayEventMarker)) {
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_IS_TIMER_EVENT", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"])));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($bpmnEvent->getPrjUid() != $projectUid) {
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_EVENT_EVENT_NOT_BELONG_TO_PROJECT", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"], $this->arrayFieldNameForException["projectUid"], $projectUid)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->throwExceptionIfEventIsRegistered($projectUid, $arrayData["EVN_UID"], $this->arrayFieldNameForException["eventUid"], $timerEventUid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Verify data - Field definition
|
|
|
|
|
$arrayFieldDefinition = array();
|
|
|
|
|
|
|
|
|
|
$bpmnEvent = \BpmnEventPeer::retrieveByPK($arrayFinalData["EVN_UID"]);
|
|
|
|
|
|
|
|
|
|
switch ($bpmnEvent->getEvnType()) {
|
|
|
|
|
case "START":
|
|
|
|
|
$arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_OPTION" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("HOURLY", "DAILY", "MONTHLY", "EVERY", "ONE-DATE-TIME"), "fieldNameAux" => "timerEventOption")
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
case "INTERMEDIATE":
|
|
|
|
|
$arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_OPTION" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("WAIT-FOR", "WAIT-UNTIL-SPECIFIED-DATE-TIME"), "fieldNameAux" => "timerEventOption")
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!empty($arrayFieldDefinition)) {
|
|
|
|
|
$process->throwExceptionIfDataNotMetFieldDefinition($arrayFinalData, $arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$arrayFieldDefinition = array();
|
2015-07-07 11:51:12 -04:00
|
|
|
$arrayValidateData = array(
|
2015-07-13 16:58:36 -04:00
|
|
|
"TMREVN_DAY" => array("/^(?:0[1-9]|[12][0-9]|3[01])$/", $this->arrayFieldNameForException["timerEventDay"]),
|
|
|
|
|
"TMREVN_HOUR" => array("/^(?:[0-1]\d|2[0-3])$/", $this->arrayFieldNameForException["timerEventHour"]),
|
|
|
|
|
"TMREVN_MINUTE" => array("/^(?:[0-5]\d)$/", $this->arrayFieldNameForException["timerEventMinute"])
|
2015-07-07 11:51:12 -04:00
|
|
|
);
|
2015-06-30 12:04:53 -04:00
|
|
|
|
|
|
|
|
switch ($arrayFinalData["TMREVN_OPTION"]) {
|
|
|
|
|
case "HOURLY":
|
|
|
|
|
$arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_START_DATE" => array("type" => "date", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventStartDate"),
|
|
|
|
|
"TMREVN_END_DATE" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventEndDate"),
|
|
|
|
|
"TMREVN_MINUTE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute")
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
case "DAILY":
|
|
|
|
|
$arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_START_DATE" => array("type" => "date", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventStartDate"),
|
|
|
|
|
"TMREVN_END_DATE" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventEndDate"),
|
|
|
|
|
"TMREVN_HOUR" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventHour"),
|
|
|
|
|
"TMREVN_MINUTE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute"),
|
|
|
|
|
"TMREVN_CONFIGURATION_DATA" => array("type" => "array", "required" => false, "empty" => true, "defaultValues" => array(1, 2, 3, 4, 5, 6, 7), "fieldNameAux" => "timerEventConfigurationData")
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
case "MONTHLY":
|
|
|
|
|
$arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_START_DATE" => array("type" => "date", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventStartDate"),
|
|
|
|
|
"TMREVN_END_DATE" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventEndDate"),
|
|
|
|
|
"TMREVN_DAY" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventDay"),
|
|
|
|
|
"TMREVN_HOUR" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventHour"),
|
|
|
|
|
"TMREVN_MINUTE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute"),
|
|
|
|
|
"TMREVN_CONFIGURATION_DATA" => array("type" => "array", "required" => false, "empty" => true, "defaultValues" => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), "fieldNameAux" => "timerEventConfigurationData")
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
case "EVERY":
|
|
|
|
|
$arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_HOUR" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventHour"),
|
|
|
|
|
"TMREVN_MINUTE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute")
|
|
|
|
|
);
|
2015-07-07 11:51:12 -04:00
|
|
|
|
2015-07-13 16:58:36 -04:00
|
|
|
$arrayValidateData["TMREVN_HOUR"][0] = "/^(?:0?\d|[1-9]\d*)$/";
|
|
|
|
|
$arrayValidateData["TMREVN_MINUTE"][0] = "/^(?:0?\d|[1-9]\d*)$/";
|
2015-06-30 12:04:53 -04:00
|
|
|
break;
|
|
|
|
|
case "ONE-DATE-TIME":
|
|
|
|
|
$arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_NEXT_RUN_DATE" => array("type" => "datetime", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventNextRunDate")
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
case "WAIT-FOR":
|
|
|
|
|
//TMREVN_DAY
|
|
|
|
|
//TMREVN_HOUR
|
|
|
|
|
//TMREVN_MINUTE
|
2015-07-13 16:58:36 -04:00
|
|
|
$arrayValidateData["TMREVN_DAY"][0] = "/^(?:0?\d|[1-9]\d*)$/";
|
|
|
|
|
$arrayValidateData["TMREVN_HOUR"][0] = "/^(?:0?\d|[1-9]\d*)$/";
|
|
|
|
|
$arrayValidateData["TMREVN_MINUTE"][0] = "/^(?:0?\d|[1-9]\d*)$/";
|
2015-06-30 12:04:53 -04:00
|
|
|
break;
|
|
|
|
|
case "WAIT-UNTIL-SPECIFIED-DATE-TIME":
|
|
|
|
|
$arrayFieldDefinition = array(
|
|
|
|
|
"TMREVN_CONFIGURATION_DATA" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventConfigurationData")
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!empty($arrayFieldDefinition)) {
|
|
|
|
|
$process->throwExceptionIfDataNotMetFieldDefinition($arrayFinalData, $arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($arrayValidateData as $key => $value) {
|
|
|
|
|
if (isset($arrayData[$key]) && !preg_match($value[0], $arrayData[$key])) {
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE", array($value[1])));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create Timer-Event for a Project
|
|
|
|
|
*
|
|
|
|
|
* @param string $projectUid Unique id of Project
|
|
|
|
|
* @param array $arrayData Data
|
|
|
|
|
*
|
|
|
|
|
* return array Return data of the new Timer-Event created
|
|
|
|
|
*/
|
|
|
|
|
public function create($projectUid, array $arrayData)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
//Verify data
|
|
|
|
|
$process = new \ProcessMaker\BusinessModel\Process();
|
|
|
|
|
$validator = new \ProcessMaker\BusinessModel\Validator();
|
|
|
|
|
|
|
|
|
|
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
|
|
|
|
|
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
|
|
|
|
|
|
|
|
|
|
//Set data
|
|
|
|
|
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
|
|
|
|
|
|
|
|
|
|
//Verify data
|
|
|
|
|
$process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]);
|
|
|
|
|
|
|
|
|
|
$this->throwExceptionIfDataIsInvalid("", $projectUid, $arrayData);
|
|
|
|
|
|
|
|
|
|
//Create
|
|
|
|
|
$cnn = \Propel::getConnection("workflow");
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
$arrayData = $this->unsetFields($arrayData);
|
|
|
|
|
|
2015-06-30 12:04:53 -04:00
|
|
|
try {
|
|
|
|
|
$timerEvent = new \TimerEvent();
|
|
|
|
|
$bpmnEvent = \BpmnEventPeer::retrieveByPK($arrayData["EVN_UID"]);
|
|
|
|
|
|
|
|
|
|
$timerEventUid = \ProcessMaker\Util\Common::generateUID();
|
|
|
|
|
|
|
|
|
|
$arrayData["TMREVN_START_DATE"] = (isset($arrayData["TMREVN_START_DATE"]) && $arrayData["TMREVN_START_DATE"] . "" != "")? $arrayData["TMREVN_START_DATE"] : null;
|
|
|
|
|
$arrayData["TMREVN_END_DATE"] = (isset($arrayData["TMREVN_END_DATE"]) && $arrayData["TMREVN_END_DATE"] . "" != "")? $arrayData["TMREVN_END_DATE"] : null;
|
|
|
|
|
$arrayData["TMREVN_NEXT_RUN_DATE"] = (isset($arrayData["TMREVN_NEXT_RUN_DATE"]) && $arrayData["TMREVN_NEXT_RUN_DATE"] . "" != "")? $arrayData["TMREVN_NEXT_RUN_DATE"] : null;
|
|
|
|
|
$arrayData["TMREVN_CONFIGURATION_DATA"] = serialize((isset($arrayData["TMREVN_CONFIGURATION_DATA"]))? $arrayData["TMREVN_CONFIGURATION_DATA"] : "");
|
|
|
|
|
|
|
|
|
|
$timerEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
|
|
|
|
|
|
|
|
|
|
$timerEvent->setTmrevnUid($timerEventUid);
|
|
|
|
|
$timerEvent->setPrjUid($projectUid);
|
|
|
|
|
|
|
|
|
|
if ($bpmnEvent->getEvnType() == "START") {
|
|
|
|
|
switch ($arrayData["TMREVN_OPTION"]) {
|
|
|
|
|
case "HOURLY":
|
|
|
|
|
case "DAILY":
|
|
|
|
|
case "MONTHLY":
|
|
|
|
|
case "EVERY":
|
|
|
|
|
$timerEvent->setTmrevnNextRunDate($this->getNextRunDateByDataAndDatetime($arrayData, date("Y-m-d H:i:s")));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($timerEvent->validate()) {
|
|
|
|
|
$cnn->begin();
|
|
|
|
|
|
|
|
|
|
$result = $timerEvent->save();
|
|
|
|
|
|
|
|
|
|
$cnn->commit();
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $this->getTimerEvent($timerEventUid);
|
|
|
|
|
} else {
|
|
|
|
|
$msg = "";
|
|
|
|
|
|
|
|
|
|
foreach ($timerEvent->getValidationFailures() as $validationFailure) {
|
|
|
|
|
$msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . (($msg != "")? "\n" . $msg : ""));
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
$cnn->rollback();
|
|
|
|
|
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Single create Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $projectUid Unique id of Project
|
|
|
|
|
* @param array $arrayData Data
|
|
|
|
|
*
|
|
|
|
|
* return string Return unique id of Timer-Event
|
|
|
|
|
*/
|
|
|
|
|
public function singleCreate($projectUid, array $arrayData)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$cnn = \Propel::getConnection("workflow");
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
$timerEvent = new \TimerEvent();
|
|
|
|
|
|
|
|
|
|
$timerEventUid = \ProcessMaker\Util\Common::generateUID();
|
|
|
|
|
|
|
|
|
|
$timerEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
|
|
|
|
|
|
|
|
|
|
$timerEvent->setTmrevnUid($timerEventUid);
|
|
|
|
|
$timerEvent->setPrjUid($projectUid);
|
|
|
|
|
|
|
|
|
|
if ($timerEvent->validate()) {
|
|
|
|
|
$cnn->begin();
|
|
|
|
|
|
|
|
|
|
$result = $timerEvent->save();
|
|
|
|
|
|
|
|
|
|
$cnn->commit();
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $timerEventUid;
|
|
|
|
|
} else {
|
|
|
|
|
$msg = "";
|
|
|
|
|
|
|
|
|
|
foreach ($timerEvent->getValidationFailures() as $validationFailure) {
|
|
|
|
|
$msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . (($msg != "")? "\n" . $msg : ""));
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
$cnn->rollback();
|
|
|
|
|
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $timerEventUid Unique id of Timer-Event
|
|
|
|
|
* @param array $arrayData Data
|
|
|
|
|
*
|
2015-07-07 11:51:12 -04:00
|
|
|
* return int Return the number of rows affected by this update
|
2015-06-30 12:04:53 -04:00
|
|
|
*/
|
|
|
|
|
public function update($timerEventUid, array $arrayData)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
//Verify data
|
|
|
|
|
$process = new \ProcessMaker\BusinessModel\Process();
|
|
|
|
|
$validator = new \ProcessMaker\BusinessModel\Validator();
|
|
|
|
|
|
|
|
|
|
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
|
|
|
|
|
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
|
|
|
|
|
|
|
|
|
|
//Set data
|
|
|
|
|
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
|
|
|
|
|
|
|
|
|
|
//Set variables
|
|
|
|
|
$arrayTimerEventData = $this->getTimerEvent($timerEventUid, true);
|
|
|
|
|
|
|
|
|
|
$arrayFinalData = array_merge($arrayTimerEventData, $arrayData);
|
|
|
|
|
|
|
|
|
|
//Verify data
|
|
|
|
|
$this->throwExceptionIfNotExistsTimerEvent($timerEventUid, $this->arrayFieldNameForException["timerEventUid"]);
|
|
|
|
|
|
|
|
|
|
$this->throwExceptionIfDataIsInvalid($timerEventUid, $arrayTimerEventData["PRJ_UID"], $arrayData);
|
|
|
|
|
|
|
|
|
|
//Update
|
|
|
|
|
$cnn = \Propel::getConnection("workflow");
|
|
|
|
|
|
2020-11-17 20:07:35 -04:00
|
|
|
$evnUid = $arrayData['EVN_UID'];
|
|
|
|
|
$caseTitle = $arrayData['CASETITLE'];
|
|
|
|
|
Task::setTaskDefTitle($evnUid, $caseTitle);
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
$arrayData = $this->unsetFields($arrayData);
|
|
|
|
|
|
2015-06-30 12:04:53 -04:00
|
|
|
try {
|
|
|
|
|
$timerEvent = \TimerEventPeer::retrieveByPK($timerEventUid);
|
|
|
|
|
$bpmnEvent = \BpmnEventPeer::retrieveByPK($arrayFinalData["EVN_UID"]);
|
|
|
|
|
|
|
|
|
|
if (isset($arrayData["TMREVN_START_DATE"])) {
|
|
|
|
|
$arrayData["TMREVN_START_DATE"] = ($arrayData["TMREVN_START_DATE"] . "" != "")? $arrayData["TMREVN_START_DATE"] : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($arrayData["TMREVN_END_DATE"])) {
|
|
|
|
|
$arrayData["TMREVN_END_DATE"] = ($arrayData["TMREVN_END_DATE"] . "" != "")? $arrayData["TMREVN_END_DATE"] : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($arrayData["TMREVN_NEXT_RUN_DATE"])) {
|
|
|
|
|
$arrayData["TMREVN_NEXT_RUN_DATE"] = ($arrayData["TMREVN_NEXT_RUN_DATE"] . "" != "")? $arrayData["TMREVN_NEXT_RUN_DATE"] : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($arrayData["TMREVN_CONFIGURATION_DATA"])) {
|
|
|
|
|
$arrayData["TMREVN_CONFIGURATION_DATA"] = serialize($arrayData["TMREVN_CONFIGURATION_DATA"]);
|
|
|
|
|
}
|
2017-06-14 11:28:01 -04:00
|
|
|
|
|
|
|
|
$oldValues = $timerEvent->toArray();
|
2015-06-30 12:04:53 -04:00
|
|
|
|
|
|
|
|
$timerEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
|
|
|
|
|
|
2017-06-14 11:28:01 -04:00
|
|
|
$nowValues = $timerEvent->toArray();
|
|
|
|
|
//If the timer event undergoes any editing, the value of the 'TMREVN_STATUS'
|
|
|
|
|
//field must be changed to 'ACTIVE', otherwise the 'ONE-DATE-TIME'
|
|
|
|
|
//option will prevent execution.
|
|
|
|
|
if (!($oldValues == $nowValues)) {
|
|
|
|
|
$timerEvent->setTmrevnStatus("ACTIVE");
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-30 12:04:53 -04:00
|
|
|
if ($bpmnEvent->getEvnType() == "START") {
|
|
|
|
|
switch ($arrayFinalData["TMREVN_OPTION"]) {
|
|
|
|
|
case "HOURLY":
|
|
|
|
|
case "DAILY":
|
|
|
|
|
case "MONTHLY":
|
|
|
|
|
case "EVERY":
|
|
|
|
|
$flagUpdateNextRunDate = false;
|
|
|
|
|
|
|
|
|
|
$arrayFieldsToCheck = array();
|
|
|
|
|
|
|
|
|
|
switch ($arrayFinalData["TMREVN_OPTION"]) {
|
|
|
|
|
case "HOURLY":
|
|
|
|
|
$arrayFieldsToCheck = array("TMREVN_START_DATE", "TMREVN_END_DATE", "TMREVN_MINUTE");
|
|
|
|
|
break;
|
|
|
|
|
case "DAILY":
|
|
|
|
|
$arrayFieldsToCheck = array("TMREVN_START_DATE", "TMREVN_END_DATE", "TMREVN_HOUR", "TMREVN_MINUTE", "TMREVN_CONFIGURATION_DATA");
|
|
|
|
|
break;
|
|
|
|
|
case "MONTHLY":
|
|
|
|
|
$arrayFieldsToCheck = array("TMREVN_START_DATE", "TMREVN_END_DATE", "TMREVN_DAY", "TMREVN_HOUR", "TMREVN_MINUTE", "TMREVN_CONFIGURATION_DATA");
|
|
|
|
|
break;
|
|
|
|
|
case "EVERY":
|
|
|
|
|
$arrayFieldsToCheck = array("TMREVN_HOUR", "TMREVN_MINUTE");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($arrayFieldsToCheck as $value) {
|
|
|
|
|
if (isset($arrayData[$value])) {
|
|
|
|
|
if ($value == "TMREVN_CONFIGURATION_DATA") {
|
|
|
|
|
$arrayAux = unserialize($arrayData[$value]);
|
|
|
|
|
|
|
|
|
|
$array1 = array_diff($arrayAux, $arrayTimerEventData[$value]);
|
|
|
|
|
$array2 = array_diff($arrayTimerEventData[$value], $arrayAux);
|
|
|
|
|
|
|
|
|
|
$flagUpdateNextRunDate = !empty($array1) || !empty($array2);
|
|
|
|
|
} else {
|
|
|
|
|
$flagUpdateNextRunDate = $arrayData[$value] != $arrayTimerEventData[$value];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($flagUpdateNextRunDate) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($flagUpdateNextRunDate) {
|
|
|
|
|
$timerEvent->setTmrevnNextRunDate($this->getNextRunDateByDataAndDatetime($arrayFinalData, date("Y-m-d H:i:s")));
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($timerEvent->validate()) {
|
|
|
|
|
$cnn->begin();
|
|
|
|
|
|
|
|
|
|
$result = $timerEvent->save();
|
|
|
|
|
|
|
|
|
|
$cnn->commit();
|
|
|
|
|
|
|
|
|
|
//Return
|
2015-07-07 11:51:12 -04:00
|
|
|
return $result;
|
|
|
|
|
} else {
|
|
|
|
|
$msg = "";
|
2015-06-30 12:04:53 -04:00
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
foreach ($timerEvent->getValidationFailures() as $validationFailure) {
|
|
|
|
|
$msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage();
|
2015-06-30 12:04:53 -04:00
|
|
|
}
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
throw new \Exception(\G::LoadTranslation("ID_REGISTRY_CANNOT_BE_UPDATED") . (($msg != "")? "\n" . $msg : ""));
|
|
|
|
|
}
|
2020-11-17 20:07:35 -04:00
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
$cnn->rollback();
|
|
|
|
|
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Single update Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $timerEventUid Unique id of Timer-Event
|
|
|
|
|
* @param array $arrayData Data
|
|
|
|
|
*
|
|
|
|
|
* return int Return integer
|
|
|
|
|
*/
|
|
|
|
|
public function singleUpdate($timerEventUid, array $arrayData)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$cnn = \Propel::getConnection("workflow");
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
$timerEvent = \TimerEventPeer::retrieveByPK($timerEventUid);
|
|
|
|
|
|
|
|
|
|
$timerEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
|
|
|
|
|
|
|
|
|
|
if ($timerEvent->validate()) {
|
|
|
|
|
$cnn->begin();
|
|
|
|
|
|
|
|
|
|
$result = $timerEvent->save();
|
|
|
|
|
|
|
|
|
|
$cnn->commit();
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $result;
|
2015-06-30 12:04:53 -04:00
|
|
|
} else {
|
|
|
|
|
$msg = "";
|
|
|
|
|
|
|
|
|
|
foreach ($timerEvent->getValidationFailures() as $validationFailure) {
|
|
|
|
|
$msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_REGISTRY_CANNOT_BE_UPDATED") . (($msg != "")? "\n" . $msg : ""));
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
$cnn->rollback();
|
|
|
|
|
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $timerEventUid Unique id of Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* return void
|
|
|
|
|
*/
|
|
|
|
|
public function delete($timerEventUid)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
//Verify data
|
|
|
|
|
$this->throwExceptionIfNotExistsTimerEvent($timerEventUid, $this->arrayFieldNameForException["timerEventUid"]);
|
|
|
|
|
|
|
|
|
|
//Delete
|
|
|
|
|
$criteria = new \Criteria("workflow");
|
|
|
|
|
|
|
|
|
|
$criteria->add(\TimerEventPeer::TMREVN_UID, $timerEventUid, \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$result = \TimerEventPeer::doDelete($criteria);
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param array $arrayCondition Conditions
|
|
|
|
|
*
|
|
|
|
|
* return void
|
|
|
|
|
*/
|
|
|
|
|
public function deleteWhere(array $arrayCondition)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
//Delete
|
|
|
|
|
$criteria = new \Criteria("workflow");
|
|
|
|
|
|
|
|
|
|
foreach ($arrayCondition as $key => $value) {
|
|
|
|
|
if (is_array($value)) {
|
|
|
|
|
$criteria->add($key, $value[0], $value[1]);
|
|
|
|
|
} else {
|
|
|
|
|
$criteria->add($key, $value, \Criteria::EQUAL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$result = \TimerEventPeer::doDelete($criteria);
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get criteria for Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* return object
|
|
|
|
|
*/
|
|
|
|
|
public function getTimerEventCriteria()
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$criteria = new \Criteria("workflow");
|
|
|
|
|
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_UID);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::PRJ_UID);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::EVN_UID);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_OPTION);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_START_DATE);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_END_DATE);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_DAY);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_HOUR);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_MINUTE);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_CONFIGURATION_DATA);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_NEXT_RUN_DATE);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_LAST_RUN_DATE);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_LAST_EXECUTION_DATE);
|
|
|
|
|
$criteria->addSelectColumn(\TimerEventPeer::TMREVN_STATUS);
|
|
|
|
|
|
|
|
|
|
return $criteria;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get data of a Timer-Event from a record
|
|
|
|
|
*
|
|
|
|
|
* @param array $record Record
|
|
|
|
|
*
|
|
|
|
|
* return array Return an array with data Timer-Event
|
|
|
|
|
*/
|
|
|
|
|
public function getTimerEventDataFromRecord(array $record)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
return array(
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_UID") => $record["TMREVN_UID"],
|
|
|
|
|
$this->getFieldNameByFormatFieldName("EVN_UID") => $record["EVN_UID"],
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_OPTION") => $record["TMREVN_OPTION"],
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_START_DATE") => $record["TMREVN_START_DATE"] . "",
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_END_DATE") => $record["TMREVN_END_DATE"] . "",
|
2015-07-07 11:51:12 -04:00
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_DAY") => $record["TMREVN_DAY"],
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_HOUR") => $record["TMREVN_HOUR"],
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_MINUTE") => $record["TMREVN_MINUTE"],
|
2015-06-30 12:04:53 -04:00
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_CONFIGURATION_DATA") => $record["TMREVN_CONFIGURATION_DATA"],
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_NEXT_RUN_DATE") => $record["TMREVN_NEXT_RUN_DATE"] . "",
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_LAST_RUN_DATE") => $record["TMREVN_LAST_RUN_DATE"] . "",
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_LAST_EXECUTION_DATE") => $record["TMREVN_LAST_EXECUTION_DATE"] . "",
|
|
|
|
|
$this->getFieldNameByFormatFieldName("TMREVN_STATUS") => $record["TMREVN_STATUS"]
|
|
|
|
|
);
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get all Timer-Events
|
|
|
|
|
*
|
|
|
|
|
* @param string $projectUid Unique id of Project
|
|
|
|
|
*
|
|
|
|
|
* return array Return an array with all Timer-Events
|
|
|
|
|
*/
|
|
|
|
|
public function getTimerEvents($projectUid)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$arrayTimerEvent = array();
|
|
|
|
|
|
|
|
|
|
//Verify data
|
|
|
|
|
$process = new \ProcessMaker\BusinessModel\Process();
|
|
|
|
|
|
|
|
|
|
$process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]);
|
|
|
|
|
|
|
|
|
|
//Get data
|
|
|
|
|
$criteria = $this->getTimerEventCriteria();
|
|
|
|
|
|
|
|
|
|
$criteria->add(\TimerEventPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$rsCriteria = \TimerEventPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
|
|
|
|
|
while ($rsCriteria->next()) {
|
|
|
|
|
$row = $rsCriteria->getRow();
|
|
|
|
|
$row["TMREVN_CONFIGURATION_DATA"] = unserialize($row["TMREVN_CONFIGURATION_DATA"]);
|
|
|
|
|
|
|
|
|
|
$arrayTimerEvent[] = $this->getTimerEventDataFromRecord($row);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return $arrayTimerEvent;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get data of a Timer-Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $timerEventUid Unique id of Timer-Event
|
|
|
|
|
* @param bool $flagGetRecord Value that set the getting
|
|
|
|
|
*
|
|
|
|
|
* return array Return an array with data of a Timer-Event
|
|
|
|
|
*/
|
|
|
|
|
public function getTimerEvent($timerEventUid, $flagGetRecord = false)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
//Verify data
|
|
|
|
|
$this->throwExceptionIfNotExistsTimerEvent($timerEventUid, $this->arrayFieldNameForException["timerEventUid"]);
|
|
|
|
|
|
|
|
|
|
//Get data
|
|
|
|
|
$criteria = $this->getTimerEventCriteria();
|
|
|
|
|
|
|
|
|
|
$criteria->add(\TimerEventPeer::TMREVN_UID, $timerEventUid, \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$rsCriteria = \TimerEventPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
|
|
|
|
|
$result = $rsCriteria->next();
|
|
|
|
|
|
|
|
|
|
$row = $rsCriteria->getRow();
|
|
|
|
|
$row["TMREVN_CONFIGURATION_DATA"] = unserialize($row["TMREVN_CONFIGURATION_DATA"]);
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return (!$flagGetRecord)? $this->getTimerEventDataFromRecord($row) : $row;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get data of a Timer-Event by unique id of Event
|
|
|
|
|
*
|
|
|
|
|
* @param string $projectUid Unique id of Project
|
|
|
|
|
* @param string $eventUid Unique id of Event
|
|
|
|
|
* @param bool $flagGetRecord Value that set the getting
|
|
|
|
|
*
|
|
|
|
|
* return array Return an array with data of a Timer-Event by unique id of Event
|
|
|
|
|
*/
|
|
|
|
|
public function getTimerEventByEvent($projectUid, $eventUid, $flagGetRecord = false)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
//Verify data
|
|
|
|
|
$process = new \ProcessMaker\BusinessModel\Process();
|
|
|
|
|
$bpmnEvent = \BpmnEventPeer::retrieveByPK($eventUid);
|
|
|
|
|
|
|
|
|
|
$process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]);
|
|
|
|
|
|
|
|
|
|
if (is_null($bpmnEvent)) {
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_EXIST", array($this->arrayFieldNameForException["eventUid"], $eventUid)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($bpmnEvent->getPrjUid() != $projectUid) {
|
|
|
|
|
throw new \Exception(\G::LoadTranslation("ID_EVENT_EVENT_NOT_BELONG_TO_PROJECT", array($this->arrayFieldNameForException["eventUid"], $eventUid, $this->arrayFieldNameForException["projectUid"], $projectUid)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Get data
|
|
|
|
|
if (!$this->existsEvent($projectUid, $eventUid)) {
|
|
|
|
|
//Return
|
|
|
|
|
return array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$criteria = $this->getTimerEventCriteria();
|
|
|
|
|
|
|
|
|
|
$criteria->add(\TimerEventPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
|
|
|
|
|
$criteria->add(\TimerEventPeer::EVN_UID, $eventUid, \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$rsCriteria = \TimerEventPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
|
|
|
|
|
$result = $rsCriteria->next();
|
|
|
|
|
|
|
|
|
|
$row = $rsCriteria->getRow();
|
|
|
|
|
$row["TMREVN_CONFIGURATION_DATA"] = unserialize($row["TMREVN_CONFIGURATION_DATA"]);
|
|
|
|
|
|
|
|
|
|
//Return
|
|
|
|
|
return (!$flagGetRecord)? $this->getTimerEventDataFromRecord($row) : $row;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log
|
|
|
|
|
*
|
|
|
|
|
* @param string $action Action
|
|
|
|
|
* @param string $value Value
|
|
|
|
|
*
|
|
|
|
|
* return void
|
|
|
|
|
*/
|
2016-11-25 10:33:26 -05:00
|
|
|
private function log($action, $value = "", $status = "action")
|
2015-07-07 11:51:12 -04:00
|
|
|
{
|
|
|
|
|
try {
|
2017-11-10 17:04:56 -04:00
|
|
|
$workspace = (!empty(config("system.workspace")))? config("system.workspace") : "Undefined Workspace";
|
2015-07-07 11:51:12 -04:00
|
|
|
$ipClient = \G::getIpAddress();
|
|
|
|
|
|
2016-10-13 11:56:43 -04:00
|
|
|
$actionTimer = "timereventcron: ";
|
2015-07-07 11:51:12 -04:00
|
|
|
|
2016-10-13 11:56:43 -04:00
|
|
|
\G::log("|". $workspace ."|". $actionTimer . $action ."|". $status . "|" . $value , PATH_DATA, "timerevent.log");
|
2015-07-07 11:51:12 -04:00
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Start/Continue case by Timer-Event
|
2019-02-13 15:53:21 -04:00
|
|
|
*
|
2015-07-07 11:51:12 -04:00
|
|
|
* @param string $datetime Datetime (yyyy-mm-dd hh:ii:ss)
|
2019-02-13 15:53:21 -04:00
|
|
|
* @param bool $frontEnd Flag to represent the terminal front-end
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
*
|
|
|
|
|
* @see workflow/engine/bin/cron_single.php
|
|
|
|
|
* @link https://wiki.processmaker.com/3.3/Actions_by_Email
|
|
|
|
|
* @link https://wiki.processmaker.com/3.2/Executing_cron.php
|
2015-07-07 11:51:12 -04:00
|
|
|
*/
|
|
|
|
|
public function startContinueCaseByTimerEvent($datetime, $frontEnd = false)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
//Set variables
|
2017-08-11 14:10:44 -04:00
|
|
|
$ws = new \WsBase();
|
2015-07-07 11:51:12 -04:00
|
|
|
$case = new \Cases();
|
|
|
|
|
$common = new \ProcessMaker\Util\Common();
|
2017-10-10 12:33:25 -04:00
|
|
|
$sysSys = (!empty(config("system.workspace")))? config("system.workspace") : "Undefined";
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
$common->setFrontEnd($frontEnd);
|
|
|
|
|
|
|
|
|
|
list($year, $month, $day, $hour, $minute) = $this->getYearMonthDayHourMinuteSecondByDatetime($datetime);
|
|
|
|
|
|
|
|
|
|
$date = "$year-$month-$day";
|
|
|
|
|
$dateIni = "$year-$month-$day 00:00:00";
|
|
|
|
|
$dateEnd = "$year-$month-$day 23:59:59";
|
|
|
|
|
|
|
|
|
|
//Start Timer-Event (start new case) ///////////////////////////////////////////////////////////////////////
|
|
|
|
|
$common->frontEndShow("START");
|
|
|
|
|
|
2019-11-04 14:05:42 -04:00
|
|
|
$this->log("START-NEW-CASES", "Start new cases");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => 'START-NEW-CASES'
|
|
|
|
|
,'timeZone' => $datetime
|
|
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = 'Start new cases';
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->info($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
//Query
|
|
|
|
|
$criteria = $this->getTimerEventCriteria();
|
|
|
|
|
|
|
|
|
|
$criteria->addSelectColumn(\BpmnEventPeer::EVN_NAME);
|
|
|
|
|
$criteria->addSelectColumn(\ElementTaskRelationPeer::TAS_UID);
|
|
|
|
|
|
2015-07-13 18:39:59 -04:00
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\TimerEventPeer::PRJ_UID, \ProcessPeer::PRO_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteria->add(\ProcessPeer::PRO_STATUS, "ACTIVE", \Criteria::EQUAL);
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\TimerEventPeer::PRJ_UID, \ElementTaskRelationPeer::PRJ_UID, \Criteria::EQUAL);
|
|
|
|
|
$arrayCondition[] = array(\TimerEventPeer::EVN_UID, \ElementTaskRelationPeer::ELEMENT_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteria->add(\ElementTaskRelationPeer::ELEMENT_TYPE, "bpmnEvent", \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\ElementTaskRelationPeer::PRJ_UID, \TaskPeer::PRO_UID, \Criteria::EQUAL);
|
|
|
|
|
$arrayCondition[] = array(\ElementTaskRelationPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteria->add(\TaskPeer::TAS_TYPE, "START-TIMER-EVENT", \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\TimerEventPeer::PRJ_UID, \BpmnEventPeer::PRJ_UID, \Criteria::EQUAL);
|
|
|
|
|
$arrayCondition[] = array(\TimerEventPeer::EVN_UID, \BpmnEventPeer::EVN_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteria->add(\BpmnEventPeer::EVN_TYPE, "START", \Criteria::EQUAL);
|
|
|
|
|
$criteria->add(\BpmnEventPeer::EVN_MARKER, "TIMER", \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$criteria->add(\TimerEventPeer::TMREVN_OPTION, array("HOURLY", "DAILY", "MONTHLY", "EVERY", "ONE-DATE-TIME"), \Criteria::IN);
|
|
|
|
|
$criteria->add(\TimerEventPeer::TMREVN_STATUS, "ACTIVE", \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$criteria->add(
|
|
|
|
|
$criteria->getNewCriterion(\TimerEventPeer::TMREVN_NEXT_RUN_DATE, $dateIni, \Criteria::GREATER_EQUAL)->addAnd(
|
|
|
|
|
$criteria->getNewCriterion(\TimerEventPeer::TMREVN_NEXT_RUN_DATE, $dateEnd, \Criteria::LESS_EQUAL))->addOr(
|
|
|
|
|
$criteria->getNewCriterion(\TimerEventPeer::TMREVN_NEXT_RUN_DATE, $dateIni, \Criteria::LESS_THAN))
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$criteria->add(
|
|
|
|
|
$criteria->getNewCriterion(\TimerEventPeer::TMREVN_END_DATE, $date, \Criteria::GREATER_EQUAL)->addOr(
|
|
|
|
|
$criteria->getNewCriterion(\TimerEventPeer::TMREVN_END_DATE, null, \Criteria::EQUAL))
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$rsCriteria = \TimerEventPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
|
|
|
|
|
$flagRecord = false;
|
|
|
|
|
|
|
|
|
|
while ($rsCriteria->next()) {
|
|
|
|
|
$row = $rsCriteria->getRow();
|
|
|
|
|
$row["TMREVN_CONFIGURATION_DATA"] = unserialize($row["TMREVN_CONFIGURATION_DATA"]);
|
|
|
|
|
|
|
|
|
|
//Set variables
|
|
|
|
|
$arrayTimerEventData = $row;
|
|
|
|
|
|
|
|
|
|
$bpmnEventName = $row["EVN_NAME"];
|
|
|
|
|
$taskUid = $row["TAS_UID"];
|
|
|
|
|
|
|
|
|
|
//Create the new case
|
|
|
|
|
$timerEventNextRunDate = $arrayTimerEventData["TMREVN_NEXT_RUN_DATE"];
|
|
|
|
|
$timerEventNextRunDateNew = "";
|
|
|
|
|
|
|
|
|
|
$flagCase = false;
|
|
|
|
|
|
|
|
|
|
if (strtotime($timerEventNextRunDate) < strtotime($dateIni)) {
|
|
|
|
|
$timerEventNextRunDateNew = $this->getNextRunDateByDataAndDatetime($arrayTimerEventData, $datetime); //Generate new date for old TMREVN_NEXT_RUN_DATE
|
|
|
|
|
|
|
|
|
|
$flagCase = true; //Create the old case
|
|
|
|
|
} else {
|
|
|
|
|
list( , , , $hourCase, $minuteCase) = $this->getYearMonthDayHourMinuteSecondByDatetime($timerEventNextRunDate);
|
|
|
|
|
|
|
|
|
|
if ((int)($hour . $minute) <= (int)($hourCase . $minuteCase)) {
|
|
|
|
|
$flagCase = $hourCase == $hour && $minuteCase == $minute;
|
|
|
|
|
} else {
|
2015-07-13 18:39:59 -04:00
|
|
|
$timerEventNextRunDateNew = $this->getNextRunDateByDataAndDatetime($arrayTimerEventData, $datetime); //Generate new date for old TMREVN_NEXT_RUN_DATE
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
$flagCase = true; //Create the old case
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($flagCase) {
|
2016-06-22 17:21:16 -04:00
|
|
|
//Update Timer-Event
|
|
|
|
|
$arrayData = [];
|
|
|
|
|
|
|
|
|
|
switch ($arrayTimerEventData['TMREVN_OPTION']) {
|
|
|
|
|
case 'HOURLY':
|
|
|
|
|
case 'DAILY':
|
|
|
|
|
case 'MONTHLY':
|
|
|
|
|
case 'EVERY':
|
|
|
|
|
if ($timerEventNextRunDateNew == '') {
|
|
|
|
|
$timerEventNextRunDateNew = $this->getNextRunDateByDataAndDatetime(
|
|
|
|
|
$arrayTimerEventData, $timerEventNextRunDate, false
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($arrayTimerEventData['TMREVN_OPTION'] != 'EVERY' &&
|
|
|
|
|
$arrayTimerEventData['TMREVN_END_DATE'] . '' != '' &&
|
|
|
|
|
strtotime($timerEventNextRunDateNew) > strtotime($arrayTimerEventData['TMREVN_END_DATE'] . ' 23:59:59')
|
|
|
|
|
) {
|
|
|
|
|
$arrayData['TMREVN_STATUS'] = 'PROCESSED';
|
|
|
|
|
} else {
|
|
|
|
|
$arrayData['TMREVN_NEXT_RUN_DATE'] = $timerEventNextRunDateNew;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'ONE-DATE-TIME':
|
|
|
|
|
$arrayData['TMREVN_STATUS'] = 'PROCESSED';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$arrayData['TMREVN_LAST_RUN_DATE'] = $timerEventNextRunDate;
|
|
|
|
|
$arrayData['TMREVN_LAST_EXECUTION_DATE'] = date('Y-m-d H:i:s');
|
|
|
|
|
|
|
|
|
|
$result = $this->singleUpdate($arrayTimerEventData['TMREVN_UID'], $arrayData);
|
|
|
|
|
|
|
|
|
|
//Show info in terminal
|
2015-07-07 11:51:12 -04:00
|
|
|
if ($flagRecord) {
|
|
|
|
|
$common->frontEndShow("TEXT", "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($bpmnEventName != "") {
|
|
|
|
|
$common->frontEndShow("TEXT", "> Name Timer-Event: $bpmnEventName");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$common->frontEndShow("TEXT", "> Creating the new case...");
|
|
|
|
|
|
|
|
|
|
//Start new case
|
|
|
|
|
$result = $ws->newCase($arrayTimerEventData["PRJ_UID"], "", $taskUid, array());
|
|
|
|
|
|
2016-07-14 16:43:56 -04:00
|
|
|
$arrayResult = \G::json_decode(\G::json_encode($result), true);
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
if ($arrayResult["status_code"] == 0) {
|
|
|
|
|
$applicationUid = $arrayResult["caseId"];
|
|
|
|
|
$applicationNumber = $arrayResult["caseNumber"];
|
|
|
|
|
|
|
|
|
|
$common->frontEndShow("TEXT", " - OK case #$applicationNumber was created");
|
|
|
|
|
$common->frontEndShow("TEXT", "> Routing the case #$applicationNumber...");
|
|
|
|
|
|
2016-10-13 11:56:43 -04:00
|
|
|
$this->log("CREATED-NEW-CASE", "Case #$applicationNumber created, APP_UID: $applicationUid");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => 'CREATED-NEW-CASE'
|
|
|
|
|
,'timeZone' => $datetime
|
|
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
,'proUid' => $arrayTimerEventData["PRJ_UID"]
|
|
|
|
|
,'tasUid' => $taskUid
|
|
|
|
|
,'appUid' => $applicationUid
|
|
|
|
|
,'appNumber'=> $applicationNumber
|
|
|
|
|
,'evnUid' => $row['EVN_UID']
|
|
|
|
|
,'evnName' => $row['EVN_NAME']
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = "Case #$applicationNumber created";
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->info($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
//Derivate new case
|
|
|
|
|
$result = $ws->derivateCase("", $applicationUid, 1);
|
|
|
|
|
|
2016-07-14 16:43:56 -04:00
|
|
|
$arrayResult = \G::json_decode(\G::json_encode($result), true);
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
if ($arrayResult["status_code"] == 0) {
|
|
|
|
|
$common->frontEndShow("TEXT", " - OK");
|
|
|
|
|
|
2016-10-13 11:56:43 -04:00
|
|
|
$this->log("ROUTED-NEW-CASE", "Case #$applicationNumber routed, APP_UID: $applicationUid");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => 'ROUTED-NEW-CASE'
|
|
|
|
|
,'timeZone' => $datetime
|
|
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
,'proUid' => $arrayTimerEventData["PRJ_UID"]
|
|
|
|
|
,'tasUid' => $taskUid
|
|
|
|
|
,'appUid' => $applicationUid
|
|
|
|
|
,'appNumber'=> $applicationNumber
|
|
|
|
|
,'delIndex' => '1'
|
|
|
|
|
,'evnUid' => $row['EVN_UID']
|
|
|
|
|
,'evnName' => $row['EVN_NAME']
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = "Case #$applicationNumber routed";
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->info($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
} else {
|
|
|
|
|
$common->frontEndShow("TEXT", " - Failed: " . $arrayResult["message"]);
|
|
|
|
|
|
2016-10-13 11:56:43 -04:00
|
|
|
$this->log("ROUTED-NEW-CASE", $arrayResult["message"] . ", Case: #$applicationNumber, APP_UID: $applicationUid, PRO_UID: " . $arrayTimerEventData["PRJ_UID"], "Failed");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => 'ROUTED-NEW-CASE'
|
|
|
|
|
,'timeZone' => $datetime
|
|
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
,'proUid' => $arrayTimerEventData["PRJ_UID"]
|
|
|
|
|
,'tasUid' => $taskUid
|
|
|
|
|
,'appUid' => $applicationUid
|
|
|
|
|
,'appNumber'=> $applicationNumber
|
|
|
|
|
,'delIndex' => '1'
|
|
|
|
|
,'evnUid' => $row['EVN_UID']
|
|
|
|
|
,'evnName' => $row['EVN_NAME']
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = "Failed case #$applicationNumber. " . $arrayResult["message"];
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->critical($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$common->frontEndShow("TEXT", " - Failed: " . $arrayResult["message"]);
|
|
|
|
|
|
2016-10-13 11:56:43 -04:00
|
|
|
$this->log("CREATED-NEW-CASE", $arrayResult["message"] . ", PRO_UID: " . $arrayTimerEventData["PRJ_UID"], "Failed");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => 'ROUTED-NEW-CASE'
|
|
|
|
|
,'timeZone' => $datetime
|
|
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
,'proUid' => $arrayTimerEventData["PRJ_UID"]
|
|
|
|
|
,'tasUid' => $taskUid
|
|
|
|
|
,'evnUid' => $row['EVN_UID']
|
|
|
|
|
,'evnName' => $row['EVN_NAME']
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = "Failed case #$applicationNumber. " . $arrayResult["message"];
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->critical($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$flagRecord = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-06-14 11:28:01 -04:00
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
if (!$flagRecord) {
|
2016-03-30 13:04:55 -04:00
|
|
|
$common->frontEndShow("TEXT", "Not exists any record to start a new case, on date \"$datetime (UTC +00:00)\"");
|
2017-06-14 11:28:01 -04:00
|
|
|
$action = "NO-RECORDS";
|
|
|
|
|
$this->log($action, "Not exists any record to start a new case");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => $action
|
2020-08-21 14:00:43 -04:00
|
|
|
,'timeZone' => $datetime
|
2016-11-07 13:04:02 -05:00
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = 'Not exists any record to start a new case';
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->info($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$common->frontEndShow("END");
|
|
|
|
|
|
|
|
|
|
//Intermediate Catch Timer-Event (continue the case) ///////////////////////////////////////////////////////
|
2017-06-14 11:28:01 -04:00
|
|
|
$action = "START-CONTINUE-CASES";
|
2019-11-04 14:05:42 -04:00
|
|
|
$this->log($action, "Start continue the cases");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => $action
|
2020-08-21 14:00:43 -04:00
|
|
|
,'timeZone' => $datetime
|
2016-11-07 13:04:02 -05:00
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = 'Start continue the cases';
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->info($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
//Query
|
|
|
|
|
$criteriaMain = $this->getTimerEventCriteria();
|
|
|
|
|
|
|
|
|
|
$criteriaMain->addSelectColumn(\AppDelegationPeer::APP_UID);
|
|
|
|
|
$criteriaMain->addSelectColumn(\AppDelegationPeer::DEL_INDEX);
|
|
|
|
|
$criteriaMain->addSelectColumn(\AppDelegationPeer::DEL_DELEGATE_DATE);
|
|
|
|
|
$criteriaMain->addSelectColumn(\BpmnEventPeer::EVN_NAME);
|
|
|
|
|
|
2015-07-13 18:39:59 -04:00
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\AppDelegationPeer::PRO_UID, \ProcessPeer::PRO_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteriaMain->add(\ProcessPeer::PRO_STATUS, "ACTIVE", \Criteria::EQUAL);
|
|
|
|
|
|
2015-07-07 11:51:12 -04:00
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\AppDelegationPeer::APP_UID, \ApplicationPeer::APP_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteriaMain->add(\ApplicationPeer::APP_STATUS, "DRAFT", \Criteria::NOT_EQUAL);
|
|
|
|
|
|
|
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\AppDelegationPeer::PRO_UID, \TaskPeer::PRO_UID, \Criteria::EQUAL);
|
|
|
|
|
$arrayCondition[] = array(\AppDelegationPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteriaMain->add(\TaskPeer::TAS_TYPE, "INTERMEDIATE-CATCH-TIMER-EVENT", \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\TaskPeer::PRO_UID, \ElementTaskRelationPeer::PRJ_UID, \Criteria::EQUAL);
|
|
|
|
|
$arrayCondition[] = array(\TaskPeer::TAS_UID, \ElementTaskRelationPeer::TAS_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteriaMain->add(\ElementTaskRelationPeer::ELEMENT_TYPE, "bpmnEvent", \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\ElementTaskRelationPeer::PRJ_UID, \TimerEventPeer::PRJ_UID, \Criteria::EQUAL);
|
|
|
|
|
$arrayCondition[] = array(\ElementTaskRelationPeer::ELEMENT_UID, \TimerEventPeer::EVN_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$arrayCondition = array();
|
|
|
|
|
$arrayCondition[] = array(\TimerEventPeer::PRJ_UID, \BpmnEventPeer::PRJ_UID, \Criteria::EQUAL);
|
|
|
|
|
$arrayCondition[] = array(\TimerEventPeer::EVN_UID, \BpmnEventPeer::EVN_UID, \Criteria::EQUAL);
|
|
|
|
|
$criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN);
|
|
|
|
|
|
|
|
|
|
$criteriaMain->add(\BpmnEventPeer::EVN_TYPE, "INTERMEDIATE", \Criteria::EQUAL);
|
|
|
|
|
$criteriaMain->add(\BpmnEventPeer::EVN_MARKER, "TIMER", \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$criteriaMain->add(\TimerEventPeer::TMREVN_OPTION, array("WAIT-FOR", "WAIT-UNTIL-SPECIFIED-DATE-TIME"), \Criteria::IN);
|
|
|
|
|
$criteriaMain->add(\TimerEventPeer::TMREVN_STATUS, "ACTIVE", \Criteria::EQUAL);
|
|
|
|
|
|
|
|
|
|
$criteriaMain->add(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", \Criteria::EQUAL);
|
|
|
|
|
$criteriaMain->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL);
|
|
|
|
|
|
|
|
|
|
//Number records total
|
|
|
|
|
$criteriaCount = clone $criteriaMain;
|
|
|
|
|
|
|
|
|
|
$criteriaCount->clearSelectColumns();
|
|
|
|
|
$criteriaCount->addSelectColumn("COUNT(" . \AppDelegationPeer::APP_UID . ") AS NUM_REC");
|
|
|
|
|
|
|
|
|
|
$rsCriteriaCount = \AppDelegationPeer::doSelectRS($criteriaCount);
|
|
|
|
|
$rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
|
|
|
|
|
$result = $rsCriteriaCount->next();
|
|
|
|
|
$row = $rsCriteriaCount->getRow();
|
|
|
|
|
|
|
|
|
|
$numRecTotal = $row["NUM_REC"];
|
|
|
|
|
|
|
|
|
|
//Query
|
|
|
|
|
$total = $numRecTotal;
|
|
|
|
|
$counter = 0;
|
|
|
|
|
|
|
|
|
|
$start = 0;
|
|
|
|
|
$limit = 1000;
|
|
|
|
|
|
|
|
|
|
$flagRecord = false;
|
|
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
$flagNextRecord = false;
|
|
|
|
|
|
|
|
|
|
$criteria = clone $criteriaMain;
|
|
|
|
|
|
|
|
|
|
$criteria->setOffset($start);
|
|
|
|
|
$criteria->setLimit($limit);
|
|
|
|
|
|
|
|
|
|
$rsCriteria = \AppDelegationPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
|
|
|
|
|
while ($rsCriteria->next()) {
|
|
|
|
|
if ($counter + 1 > $total) {
|
|
|
|
|
$flagNextRecord = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$row = $rsCriteria->getRow();
|
|
|
|
|
$row["TMREVN_CONFIGURATION_DATA"] = unserialize($row["TMREVN_CONFIGURATION_DATA"]);
|
|
|
|
|
|
|
|
|
|
//Set variables
|
|
|
|
|
$arrayTimerEventData = $row;
|
|
|
|
|
$arrayApplicationData = $case->loadCase($row["APP_UID"]);
|
|
|
|
|
|
|
|
|
|
$applicationUid = $row["APP_UID"];
|
|
|
|
|
$applicationNumber = $arrayApplicationData["APP_NUMBER"];
|
|
|
|
|
$delIndex = $row["DEL_INDEX"];
|
|
|
|
|
$delDelegateDate = $row["DEL_DELEGATE_DATE"];
|
|
|
|
|
$bpmnEventName = $row["EVN_NAME"];
|
2019-02-13 15:53:21 -04:00
|
|
|
$taskUid = !empty($arrayApplicationData['APP_DATA']) && !empty($arrayApplicationData['APP_DATA']['TASK']) ?
|
|
|
|
|
$arrayApplicationData['APP_DATA']['TASK'] : '';
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
//Continue the case
|
|
|
|
|
$continueCaseDate = $delDelegateDate;
|
|
|
|
|
|
|
|
|
|
switch ($arrayTimerEventData["TMREVN_OPTION"]) {
|
|
|
|
|
case "WAIT-FOR":
|
|
|
|
|
if ($arrayTimerEventData["TMREVN_DAY"] . "" != "") {
|
|
|
|
|
$continueCaseDate = date("Y-m-d H:i:s", strtotime("$continueCaseDate +" . ((int)($arrayTimerEventData["TMREVN_DAY"])) . " days"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($arrayTimerEventData["TMREVN_HOUR"] . "" != "") {
|
|
|
|
|
$continueCaseDate = date("Y-m-d H:i:s", strtotime("$continueCaseDate +" . ((int)($arrayTimerEventData["TMREVN_HOUR"])) . " hours"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($arrayTimerEventData["TMREVN_MINUTE"] . "" != "") {
|
|
|
|
|
$continueCaseDate = date("Y-m-d H:i:s", strtotime("$continueCaseDate +" . ((int)($arrayTimerEventData["TMREVN_MINUTE"])) . " minutes"));
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "WAIT-UNTIL-SPECIFIED-DATE-TIME":
|
|
|
|
|
$continueCaseDate = \G::replaceDataField($arrayTimerEventData["TMREVN_CONFIGURATION_DATA"], $arrayApplicationData["APP_DATA"]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$arrayContinueCaseDateData = $this->getYearMonthDayHourMinuteSecondByDatetime($continueCaseDate);
|
|
|
|
|
|
|
|
|
|
if (!empty($arrayContinueCaseDateData)) {
|
|
|
|
|
$flagCase = false;
|
|
|
|
|
|
|
|
|
|
if (strtotime($continueCaseDate) < strtotime($dateIni)) {
|
|
|
|
|
$flagCase = true; //Continue the old case
|
|
|
|
|
} else {
|
|
|
|
|
$yearCase = $arrayContinueCaseDateData[0];
|
|
|
|
|
$monthCase = $arrayContinueCaseDateData[1];
|
|
|
|
|
$dayCase = $arrayContinueCaseDateData[2];
|
|
|
|
|
$hourCase = $arrayContinueCaseDateData[3];
|
|
|
|
|
$minuteCase = $arrayContinueCaseDateData[4];
|
|
|
|
|
|
|
|
|
|
if ("$yearCase-$monthCase-$dayCase" == "$year-$month-$day") {
|
|
|
|
|
if ((int)($hour . $minute) <= (int)($hourCase . $minuteCase)) {
|
|
|
|
|
$flagCase = $hourCase == $hour && $minuteCase == $minute;
|
|
|
|
|
} else {
|
|
|
|
|
$flagCase = true; //Continue the old case
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($flagCase) {
|
2016-06-22 17:21:16 -04:00
|
|
|
//Show info in terminal
|
2015-07-07 11:51:12 -04:00
|
|
|
if ($flagRecord) {
|
|
|
|
|
$common->frontEndShow("TEXT", "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($bpmnEventName != "") {
|
|
|
|
|
$common->frontEndShow("TEXT", "> Name Timer-Event: $bpmnEventName");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$common->frontEndShow("TEXT", "> Continue the case #$applicationNumber");
|
|
|
|
|
$common->frontEndShow("TEXT", "> Routing the case #$applicationNumber...");
|
|
|
|
|
|
|
|
|
|
//Continue the case
|
|
|
|
|
//Derivate case
|
|
|
|
|
$result = $ws->derivateCase("", $applicationUid, $delIndex);
|
|
|
|
|
|
2016-07-14 16:43:56 -04:00
|
|
|
$arrayResult = \G::json_decode(\G::json_encode($result), true);
|
2015-07-07 11:51:12 -04:00
|
|
|
|
|
|
|
|
if ($arrayResult["status_code"] == 0) {
|
|
|
|
|
$common->frontEndShow("TEXT", " - OK");
|
|
|
|
|
|
2016-10-13 11:56:43 -04:00
|
|
|
$this->log("CONTINUED-CASE", "Case #$applicationNumber continued, APP_UID: $applicationUid");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => 'CONTINUED-CASE'
|
|
|
|
|
,'timeZone' => $datetime
|
|
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
,'proUid' => $arrayTimerEventData["PRJ_UID"]
|
|
|
|
|
,'tasUid' => $taskUid
|
|
|
|
|
,'appUid' => $applicationUid
|
|
|
|
|
,'appNumber'=> $applicationNumber
|
|
|
|
|
,'evnUid' => $row['EVN_UID']
|
|
|
|
|
,'evnName' => $row['EVN_NAME']
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = "Case #$applicationNumber continued";
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->info($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
} else {
|
|
|
|
|
$common->frontEndShow("TEXT", " - Failed: " . $arrayResult["message"]);
|
|
|
|
|
|
2016-10-13 11:56:43 -04:00
|
|
|
$this->log("CONTINUED-CASE", $arrayResult["message"] . ", Case: #$applicationNumber, APP_UID: $applicationUid, PRO_UID: " . $arrayTimerEventData["PRJ_UID"], "Failed");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => 'CONTINUED-CASE'
|
|
|
|
|
,'timeZone' => $datetime
|
|
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
,'proUid' => $arrayTimerEventData["PRJ_UID"]
|
|
|
|
|
,'tasUid' => $taskUid
|
|
|
|
|
,'appUid' => $applicationUid
|
|
|
|
|
,'appNumber'=> $applicationNumber
|
|
|
|
|
,'evnUid' => $row['EVN_UID']
|
|
|
|
|
,'evnName' => $row['EVN_NAME']
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = "Failed case #$applicationUid. " . $arrayResult["message"];
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->critical($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$flagRecord = true;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$this->log("INVALID-CONTINUE-DATE", "Continue date: $continueCaseDate, Case: #$applicationNumber, APP_UID: $applicationUid, PRO_UID: " . $arrayTimerEventData["PRJ_UID"]);
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => 'INVALID-CONTINUE-DATE'
|
|
|
|
|
,'timeZone' => $datetime
|
|
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
,'proUid' => $arrayTimerEventData["PRJ_UID"]
|
|
|
|
|
,'tasUid' => $taskUid
|
|
|
|
|
,'appUid' => $applicationUid
|
|
|
|
|
,'appNumber'=> $applicationNumber
|
|
|
|
|
,'evnUid' => $row['EVN_UID']
|
|
|
|
|
,'evnName' => $row['EVN_NAME']
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = 'Invalid date to continue ' . $continueCaseDate;
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->info($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$counter++;
|
|
|
|
|
|
|
|
|
|
$flagNextRecord = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$start = $start + $limit;
|
|
|
|
|
} while ($flagNextRecord);
|
|
|
|
|
|
|
|
|
|
if (!$flagRecord) {
|
2017-05-23 09:34:56 -04:00
|
|
|
$common->frontEndShow("TEXT", "No existing records to continue a case, on date \"$datetime (UTC +00:00)\"");
|
2015-07-07 11:51:12 -04:00
|
|
|
|
2017-05-23 09:34:56 -04:00
|
|
|
$this->log("NO-RECORDS", "No existing records to continue a case");
|
2016-11-07 13:04:02 -05:00
|
|
|
$aInfo = array(
|
|
|
|
|
'ip' => \G::getIpAddress()
|
|
|
|
|
,'action' => $action
|
2020-08-21 14:00:43 -04:00
|
|
|
,'timeZone' => $datetime
|
2016-11-07 13:04:02 -05:00
|
|
|
,'workspace'=> $sysSys
|
|
|
|
|
);
|
2020-08-10 17:11:55 -04:00
|
|
|
$message = 'No existing records to continue a case';
|
|
|
|
|
$context = $aInfo;
|
|
|
|
|
Log::channel(':TimerEventCron')->info($message, Bootstrap::context($context));
|
2015-07-07 11:51:12 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$common->frontEndShow("END");
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-06-30 12:04:53 -04:00
|
|
|
}
|