Files
luos/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php

1183 lines
61 KiB
PHP
Raw Normal View History

<?php
namespace ProcessMaker\BusinessModel;
use \G;
class CaseScheduler
{
/**
* Return case scheduler of a project
* @param string $sProcessUID
* @return array
*
* @access public
*/
public function getCaseSchedulers($sProcessUID = '')
{
try {
$oCriteria = new \Criteria( 'workflow' );
$oCriteria->clearSelectColumns();
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_NAME );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_DEL_USER_NAME );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_DEL_USER_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::PRO_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::TAS_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_TIME_NEXT_RUN );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_LAST_RUN_TIME );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_STATE );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_LAST_STATE );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::USR_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_OPTION );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_START_TIME );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_START_DATE );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_DAYS_PERFORM_TASK );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_EVERY_DAYS );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_WEEK_DAYS );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_START_DAY );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_MONTHS );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_END_DATE );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_REPEAT_EVERY );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_REPEAT_UNTIL );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_REPEAT_STOP_IF_RUNNING );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::CASE_SH_PLUGIN_UID );
$oCriteria->add( \CaseSchedulerPeer::PRO_UID, $sProcessUID );
$oDataset = \CaseSchedulerPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aRows = array();
while ($aRow = $oDataset->getRow()) {
$aRow = array_change_key_case($aRow, CASE_LOWER);
$aRows[] = $aRow;
$oDataset->next();
}
return $aRows;
} catch (Exception $e) {
throw $e;
}
}
/**
* Return case scheduler of a project
* @param string $sProcessUID
* @param string $sCaseSchedulerUID
* @return array
*
* @access public
*/
public function getCaseScheduler($sProcessUID = '', $sCaseSchedulerUID = '')
{
try {
2014-02-10 14:51:38 -04:00
$oCaseSchedulerTest = \CaseSchedulerPeer::retrieveByPK( $sCaseSchedulerUID );
if (is_null($oCaseSchedulerTest)) {
throw new \Exception(\G::LoadTranslation("ID_CASE_SCHEDULER_DOES_NOT_EXIST", array($sCaseSchedulerUID)));
2014-02-10 14:51:38 -04:00
}
$oCriteria = new \Criteria( 'workflow' );
$oCriteria->clearSelectColumns();
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_NAME );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_DEL_USER_NAME );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_DEL_USER_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::PRO_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::TAS_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_TIME_NEXT_RUN );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_LAST_RUN_TIME );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_STATE );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_LAST_STATE );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::USR_UID );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_OPTION );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_START_TIME );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_START_DATE );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_DAYS_PERFORM_TASK );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_EVERY_DAYS );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_WEEK_DAYS );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_START_DAY );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_MONTHS );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_END_DATE );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_REPEAT_EVERY );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_REPEAT_UNTIL );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_REPEAT_STOP_IF_RUNNING );
$oCriteria->addSelectColumn( \CaseSchedulerPeer::CASE_SH_PLUGIN_UID );
$oCriteria->add( \CaseSchedulerPeer::PRO_UID, $sProcessUID );
$oCriteria->add( \CaseSchedulerPeer::SCH_UID, $sCaseSchedulerUID );
$oDataset = \CaseSchedulerPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aRows = array();
while ($aRow = $oDataset->getRow()) {
$aRow = array_change_key_case($aRow, CASE_LOWER);
$aRows = $aRow;
$oDataset->next();
}
return $aRows;
} catch (Exception $e) {
throw $e;
}
}
/**
* Get data of unique ids of a Task (Unique id of Process)
*
* @param string $taskUid Unique id of Task
*
* return array
*/
public function getTaskUid($taskUid)
{
try {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\TaskPeer::TAS_UID);
$criteria->add(\TaskPeer::TAS_UID, $taskUid, \Criteria::EQUAL);
$rsCriteria = \TaskPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
return $rsCriteria->getRow();
} catch (\Exception $e) {
throw $e;
}
}
/**
* Checks if the name exists in the case Scheduler
*
* @param string $processUid Unique id of Process
* @param string $name Name
*
* return bool Return true if the name exists, false otherwise
*/
public function existsName($processUid, $name)
{
try {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\CaseSchedulerPeer::TAS_UID);
$criteria->add(\CaseSchedulerPeer::SCH_NAME, $name, \Criteria::EQUAL);
$criteria->add(\CaseSchedulerPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$rsCriteria = \CaseSchedulerPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
return $rsCriteria->getRow();
} catch (\Exception $e) {
throw $e;
}
}
/**
* Checks if the name exists in the case Scheduler
*
* @param string $processUid Unique id of Process
* @param string $name Name
*
* return bool Return true if the name exists, false otherwise
*/
public function existsNameUpdate($processUid, $schUid, $name)
{
try {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\CaseSchedulerPeer::TAS_UID);
$criteria->add(\CaseSchedulerPeer::SCH_NAME, $name, \Criteria::EQUAL);
$criteria->add(\CaseSchedulerPeer::SCH_UID, $schUid, \Criteria::NOT_EQUAL);
$criteria->add(\CaseSchedulerPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$rsCriteria = \CaseSchedulerPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
return $rsCriteria->getRow();
} catch (\Exception $e) {
throw $e;
}
}
/**
* Checks if the user exists
*
* @param string $userName Name
* @param string $sTaskUID Task
*
* return message
*/
public function getUser($userName, $sTaskUID)
{
2014-02-10 14:55:22 -04:00
try {
$sTASKS = $sTaskUID;
$sWS_USER = trim( $userName );
$oCriteria = new \Criteria( 'workflow' );
$oCriteria->addSelectColumn( \UsersPeer::USR_UID );
$oCriteria->addSelectColumn( \TaskUserPeer::USR_UID );
$oCriteria->addSelectColumn( \TaskUserPeer::TAS_UID );
$oCriteria->addSelectColumn( \UsersPeer::USR_USERNAME );
$oCriteria->addSelectColumn( \UsersPeer::USR_FIRSTNAME );
$oCriteria->addSelectColumn( \UsersPeer::USR_LASTNAME );
$oCriteria->addJoin( \TaskUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN );
$oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS );
$oCriteria->add( \UsersPeer::USR_USERNAME, $sWS_USER );
$userIsAssigned = \TaskUserPeer::doCount( $oCriteria );
if ($userIsAssigned < 1) {
$oCriteria = new \Criteria( 'workflow' );
$oCriteria->addSelectColumn( \UsersPeer::USR_UID );
$oCriteria->addJoin( \UsersPeer::USR_UID, \GroupUserPeer::USR_UID, \Criteria::LEFT_JOIN );
$oCriteria->addJoin( \GroupUserPeer::GRP_UID, \TaskUserPeer::USR_UID, \Criteria::LEFT_JOIN );
$oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS );
$oCriteria->add( \UsersPeer::USR_USERNAME, $sWS_USER );
$userIsAssigned = \GroupUserPeer::doCount( $oCriteria );
if (! ($userIsAssigned >= 1)) {
throw new \Exception(\G::LoadTranslation("ID_USER_DOES_NOT_HAVE_ACTIVITY_ASSIGNED", array($sWS_USER, $sTASKS)));
}
}
$oDataset = \TaskUserPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$messageCode = $aRow['USR_UID'];
$oDataset->next();
}
return $messageCode;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Create a new case scheduler of a project
* @param string $sProcessUID
* @param array $caseSchedulerData
* @param string $userUID
* @return array
*
* @access public
*/
public function addCaseScheduler($sProcessUID, $caseSchedulerData, $userUID)
{
try {
require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php");
$caseSchedulerData['sch_repeat_stop_if_running'] = '0';
$caseSchedulerData['case_sh_plugin_uid'] = null;
$caseSchedulerData = array_change_key_case($caseSchedulerData, CASE_UPPER);
$sOption = $caseSchedulerData['SCH_OPTION'];
if (empty($caseSchedulerData)) {
die( \G::LoadTranslation("ID_INFORMATION_EMPTY") );
}
$arrayTaskUid = $this->getTaskUid($caseSchedulerData['TAS_UID']);
if (empty($arrayTaskUid)) {
throw (new \Exception( \G::LoadTranslation("ID_TASK_NOT_FOUND", array($caseSchedulerData['TAS_UID']))));
}
if ($caseSchedulerData['SCH_NAME']=='') {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_EMPTY", array ('sch_name')));
}
if ($this->existsName($sProcessUID, $caseSchedulerData['SCH_NAME'])) {
throw new \Exception(\G::LoadTranslation("ID_CASE_SCHEDULER_DUPLICATE"));
}
$mUser = $this->getUser($caseSchedulerData['SCH_DEL_USER_NAME'], $caseSchedulerData['TAS_UID']);
$oUser = \UsersPeer::retrieveByPK( $mUser );
if (is_null($oUser)) {
throw (new \Exception($mUser));
}
$oUserPass = $oUser->getUsrPassword();
$caseSchedulerData['SCH_DEL_USER_PASS'] = $oUserPass;
if ($sOption != '5') {
$pattern="/^([0-1][0-9]|[2][0-3])[\:]([0-5][0-9])$/";
if (!preg_match($pattern, $caseSchedulerData['SCH_START_TIME'])) {
throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_TIME"));
}
}
$patternDate="/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/";
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
if (!preg_match($patternDate, $caseSchedulerData['SCH_START_DATE'])) {
throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_DATE"));
}
if ($caseSchedulerData['SCH_START_DATE'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_date')));
}
}
if ($sOption == '2') {
$caseSchedulerData['SCH_EVERY_DAYS'] = 1;
} else {
$caseSchedulerData['SCH_EVERY_DAYS'] = 0;
}
$oCaseScheduler = new \CaseScheduler();
$caseSchedulerData['SCH_UID'] = \G::generateUniqueID();
$caseSchedulerData['PRO_UID'] = $sProcessUID;
$caseSchedulerData['SCH_STATE'] = 'ACTIVE';
$caseSchedulerData['SCH_LAST_STATE'] = 'CREATED'; // 'ACTIVE';
$caseSchedulerData['USR_UID'] = $userUID;
$caseSchedulerData['SCH_DEL_USER_UID'] = $caseSchedulerData['USR_UID'];
$sTimeTmp = $caseSchedulerData['SCH_START_TIME'];
$nActualTime = $caseSchedulerData['SCH_START_TIME']; // time();
$sValue = '';
$sDaysPerformTask = '';
$sWeeks = '';
$sMonths = '';
$sStartDay = '';
$caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = '';
switch ($sOption) {
case '1': // If the option is zero, set by default 1
$caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = '1';
$sValue = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
switch ($sValue) {
case '1':
$caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'] . '|1';
$caseSchedulerData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
$caseSchedulerData['SCH_WEEK_DAYS'] ='0|0|0|0|0|0|0';
break;
case '2':
$caseSchedulerData['SCH_OPTION'] = '2';
$caseSchedulerData['SCH_EVERY_DAYS'] = '1'; //check
$caseSchedulerData['SCH_WEEK_DAYS'] = '1|2|3|4|5|'; //check
break;
case '3': // Every [n] Days
$sDaysPerformTask = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
$caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
break;
}
break;
case '2': // If the option is zero, set by default 1
if ($caseSchedulerData['SCH_WEEK_DAYS'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_week_days')));
} else {
$weeks = $caseSchedulerData['SCH_WEEK_DAYS'];
$weeks = explode("|", $weeks);
foreach ($weeks as $row) {
if ($row == "1" || $row == "2" || $row == "3" || $row == "4" || $row == "5"|| $row == "6" || $row == "7") {
$caseSchedulerData['SCH_WEEK_DAYS'] = $caseSchedulerData['SCH_WEEK_DAYS'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_week_days')));
}
}
}
$caseSchedulerData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
if (empty( $caseSchedulerData['SCH_EVERY_DAYS'] )) {
$nEveryDays = 1;
} else {
$nEveryDays = $caseSchedulerData['SCH_EVERY_DAYS'];
}
$caseSchedulerData['SCH_EVERY_DAYS'] = $nEveryDays;
if (! empty( $caseSchedulerData['SCH_WEEK_DAYS'] )) {
$aWeekDays = $caseSchedulerData['SCH_WEEK_DAYS'];
}
$sStartTime = $caseSchedulerData['SCH_START_TIME'];
$sWeeks = $caseSchedulerData['SCH_WEEK_DAYS'] . '|';
break;
case '3':
$nStartDay = $caseSchedulerData['SCH_START_DAY'];
if ($nStartDay == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day')));
}
if ($nStartDay == 1) {
if ($caseSchedulerData['SCH_START_DAY_OPT_1'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day_opt_1')));
}
$temp = $caseSchedulerData['SCH_START_DAY_OPT_1'];
$temp = (int)$temp;
if ($temp >= 1 && $temp <= 31) {
$caseSchedulerData['SCH_START_DAY_OPT_1'] = $caseSchedulerData['SCH_START_DAY_OPT_1'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_DAY_1"));
}
$caseSchedulerData['SCH_START_DAY'] = $nStartDay . '|' . $caseSchedulerData['SCH_START_DAY_OPT_1'];
} else {
if ($caseSchedulerData['SCH_START_DAY_OPT_2'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day_opt_2')));
}
$caseSchedulerData['SCH_START_DAY'] = $nStartDay . '|' . $caseSchedulerData['SCH_START_DAY_OPT_2'];
$optionTwo = $caseSchedulerData['SCH_START_DAY_OPT_2']{0};
if ($optionTwo == "1" || $optionTwo == "2" || $optionTwo == "3" || $optionTwo == "4" || $optionTwo == "5") {
$caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
}
$pipelineTwo = $caseSchedulerData['SCH_START_DAY_OPT_2']{1};
if ($pipelineTwo == "|") {
$caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
}
$dayTwo = $caseSchedulerData['SCH_START_DAY_OPT_2']{2};
if ($dayTwo == "1" || $dayTwo == "2" || $dayTwo == "3" || $dayTwo == "4" || $dayTwo == "5" || $dayTwo == "6" || $dayTwo == "7") {
$caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
}
}
if ($nStartDay == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day')));
}
if ($caseSchedulerData['SCH_MONTHS'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_months')));
}
if (! empty( $caseSchedulerData['SCH_MONTHS'] )) {
$aMonths = $caseSchedulerData['SCH_MONTHS'];
$aMonths = explode("|", $aMonths);
foreach ($aMonths as $row) {
if ($row == "1" || $row == "2" || $row == "3" || $row == "4" || $row == "5"|| $row == "6" || $row == "7"|| $row == "8" || $row == "9" || $row == "10"|| $row == "11" || $row == "12") {
$caseSchedulerData['SCH_MONTHS'] = $caseSchedulerData['SCH_MONTHS'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_months')));
}
}
}
$sMonths = $caseSchedulerData['SCH_MONTHS'];
$sStartDay = $caseSchedulerData['SCH_START_DAY'];
$sValue = $nStartDay;
break;
}
if (($sOption != '1') && ($sOption != '4') && ($sOption != '5')) {
2014-02-10 14:51:38 -04:00
$sDateTmp = '';
if ($sStartDay == '') {
2014-02-11 17:08:17 -04:00
$sStartDay = date('Y-m-d');
2014-02-11 12:22:00 -04:00
} else {
$size = strlen($caseSchedulerData['SCH_START_DAY']);
if ($size > 4) {
$aaStartDay = explode( "|", $caseSchedulerData['SCH_START_DAY'] );
2014-02-12 10:58:17 -04:00
$aaStartDay[0] = $aaStartDay[0];
$aaStartDay[1] = $aaStartDay[1];
$aaStartDay[2]= ($aaStartDay[2] == 7 ? 1 : $aaStartDay[2]);
$sStartDay = $aaStartDay[0].'|'.$aaStartDay[1].'|'.$aaStartDay[2];
}
}
2014-02-11 17:08:17 -04:00
$dCurrentDay = date("d");
$dCurrentMonth = date("m");
$aStartDay = explode( "|", $caseSchedulerData['SCH_START_DAY'] );
if ($sOption == '3' && $aStartDay[0] == '1') {
$monthsArray = explode( "|", $sMonths );
foreach ($monthsArray as $row) {
if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) {
$startTime = $caseSchedulerData['SCH_START_TIME'] . ":00";
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = date('Y') . '-' . $row . '-' . $aStartDay[1] . ' ' . $startTime;
break;
} else {
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
}
}
} else {
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
}
} else {
if ($sOption == '4') {
2014-02-11 17:08:17 -04:00
$sDateTmp = date('Y-m-d');
$caseSchedulerData['SCH_START_TIME'] = date('Y-m-d', strtotime( $sDateTmp )) . ' ' . date('H:i:s', strtotime( $sTimeTmp ));
$caseSchedulerData['SCH_START_DATE'] = $caseSchedulerData['SCH_START_TIME'];
$caseSchedulerData['SCH_END_DATE'] = $caseSchedulerData['SCH_START_TIME'];
}
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = $caseSchedulerData['SCH_START_TIME'];
if ($sOption == '5') {
if ($caseSchedulerData['SCH_START_DATE'] != '') {
$sDateTmp = $caseSchedulerData['SCH_START_DATE'];
} else {
2014-02-11 17:08:17 -04:00
$sDateTmp = date('Y-m-d');
$caseSchedulerData['SCH_START_DATE'] = $sDateTmp;
}
$caseSchedulerData['SCH_START_TIME'] = time();
$caseSchedulerData['SCH_START_DATE'] = $caseSchedulerData['SCH_START_TIME'];
if ($caseSchedulerData['SCH_REPEAT_EVERY'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_repeat_every')));
}
$patternHour="/^([0-9]|0[0-9]|1[0-9]|2[0-3]).[0-5][0-9]$/";
if (!preg_match($patternHour, $caseSchedulerData['SCH_REPEAT_EVERY'])) {
throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_REPEAT"));
}
$nextRun = $caseSchedulerData['SCH_REPEAT_EVERY'] * 60 * 60;
$caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'];
$date = $caseSchedulerData['SCH_START_TIME'];
$date += $nextRun;
2014-02-11 17:08:17 -04:00
$date = date("Y-m-d H:i", $date);
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = $date;
}
}
if (! empty( $caseSchedulerData['SCH_REPEAT_TASK_CHK'] )) {
if (trim( $caseSchedulerData['SCH_END_DATE'] ) != '') {
$caseSchedulerData['SCH_END_DATE'] = $caseSchedulerData['SCH_END_DATE'];
}
}
if (! empty( $caseSchedulerData['SCH_REPEAT_TASK_CHK'] )) {
$nOptEvery = $caseSchedulerData['SCH_REPEAT_EVERY_OPT'];
if ($nOptEvery == 2) {
$caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'] * 60;
} else {
$caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'];
}
}
if ((isset( $caseSchedulerData['CASE_SH_PLUGIN_UID'] )) && ($caseSchedulerData['CASE_SH_PLUGIN_UID'] != "")) {
$caseSchedulerData['CASE_SH_PLUGIN_UID'] = $caseSchedulerData['CASE_SH_PLUGIN_UID'];
}
// check this data
$caseSchedulerData['SCH_REPEAT_UNTIL'] = '';
$caseSchedulerData['SCH_REPEAT_STOP_IF_RUNNING'] = '0';
$caseSchedulerData['CASE_SH_PLUGIN_UID'] = null;
//
$oCaseScheduler->create( $caseSchedulerData );
$oCriteria = $this->getCaseScheduler($sProcessUID, $caseSchedulerData['SCH_UID']);
return $oCriteria;
} catch (Exception $oException) {
die( $oException->getMessage() );
}
}
/**
* Update case scheduler for a project
* @param string $sProcessUID
* @param array $caseSchedulerData
* @param string $userUID
* @param string $sSchUID
*
* @access public
*/
public function updateCaseScheduler($sProcessUID, $caseSchedulerData, $userUID, $sSchUID = '')
{
try {
require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php");
$caseSchedulerData = array_change_key_case($caseSchedulerData, CASE_UPPER);
if (empty( $caseSchedulerData )) {
die( \G::LoadTranslation("ID_INFORMATION_EMPTY") );
}
$oCaseScheduler = new \CaseScheduler();
$aFields = $oCaseScheduler->Load($sSchUID);
if ($caseSchedulerData['SCH_OPTION'] == null) {
$sOption = $aFields['SCH_OPTION'];
$caseSchedulerData['SCH_OPTION'] = $sOption;
} else {
$sOption = $caseSchedulerData['SCH_OPTION'];
}
$caseSchedulerData['sch_repeat_stop_if_running'] = '0';
$caseSchedulerData['case_sh_plugin_uid'] = null;
$caseSchedulerData = array_change_key_case($caseSchedulerData, CASE_UPPER);
$arrayTaskUid = $this->getTaskUid($caseSchedulerData['TAS_UID']);
if (empty($arrayTaskUid)) {
throw new \Exception(\G::LoadTranslation("ID_TASK_NOT_FOUND", array($caseSchedulerData['TAS_UID'])));
}
if ($caseSchedulerData['SCH_NAME']=='') {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_EMPTY", array ('sch_name')));
}
if ($this->existsNameUpdate($sProcessUID, $sSchUID, $caseSchedulerData['SCH_NAME'])) {
throw new \Exception(\G::LoadTranslation("ID_CASE_SCHEDULER_DUPLICATE"));
}
$mUser = $this->getUser($caseSchedulerData['SCH_DEL_USER_NAME'], $caseSchedulerData['TAS_UID']);
$oUser = \UsersPeer::retrieveByPK( $mUser );
if (is_null($oUser)) {
throw (new \Exception($mUser));
}
$oUserPass = $oUser->getUsrPassword();
$caseSchedulerData['SCH_DEL_USER_PASS'] = $oUserPass;
if ($sOption != '5') {
$pattern="/^([0-1][0-9]|[2][0-3])[\:]([0-5][0-9])$/";
if (!preg_match($pattern, $caseSchedulerData['SCH_START_TIME'])) {
throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_TIME"));
}
}
$patternDate="/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/";
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
if (!preg_match($patternDate, $caseSchedulerData['SCH_START_DATE'])) {
throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_DATE"));
}
if ($caseSchedulerData['SCH_START_DATE'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_date')));
}
}
if ($sOption == '2') {
$caseSchedulerData['SCH_EVERY_DAYS'] = 1;
} else {
$caseSchedulerData['SCH_EVERY_DAYS'] = 0;
}
$oCaseScheduler = new \CaseScheduler();
$caseSchedulerData['SCH_UID'] = $sSchUID;
$caseSchedulerData['PRO_UID'] = $sProcessUID;
if ($caseSchedulerData['SCH_STATE'] == "" || $caseSchedulerData['SCH_STATE'] == null) {
throw (new \Exception( 'sch_state can not be null'));
} else {
if ($caseSchedulerData['SCH_STATE'] == 'ACTIVE') {
$caseSchedulerData['SCH_LAST_STATE'] = 'CREATED';
} else {
$caseSchedulerData['SCH_LAST_STATE'] = 'ACTIVE';
}
}
$caseSchedulerData['USR_UID'] = $userUID;
$caseSchedulerData['SCH_DEL_USER_UID'] = $caseSchedulerData['USR_UID'];
$sTimeTmp = $caseSchedulerData['SCH_START_TIME'];
$nActualTime = $caseSchedulerData['SCH_START_TIME']; // time();
$sValue = '';
$sDaysPerformTask = '';
$sWeeks = '';
$sMonths = '';
$sStartDay = '';
$caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = '';
switch ($sOption) {
case '1': // If the option is zero, set by default 1
$caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = '1';
$sValue = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
switch ($sValue) {
case '1':
$caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'] . '|1';
$caseSchedulerData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
$caseSchedulerData['SCH_WEEK_DAYS'] ='0|0|0|0|0|0|0';
break;
case '2':
$caseSchedulerData['SCH_OPTION'] = '2';
$caseSchedulerData['SCH_EVERY_DAYS'] = '1'; //check
$caseSchedulerData['SCH_WEEK_DAYS'] = '1|2|3|4|5|'; //check
break;
case '3': // Every [n] Days
$sDaysPerformTask = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
$caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
break;
}
break;
case '2': // If the option is zero, set by default 1
if ($caseSchedulerData['SCH_WEEK_DAYS'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_week_days')));
} else {
$weeks = $caseSchedulerData['SCH_WEEK_DAYS'];
$weeks = explode("|", $weeks);
foreach ($weeks as $row) {
if ($row == "1" || $row == "2" || $row == "3" || $row == "4" || $row == "5"|| $row == "6" || $row == "7") {
$caseSchedulerData['SCH_WEEK_DAYS'] = $caseSchedulerData['SCH_WEEK_DAYS'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_week_days')));
}
}
}
$caseSchedulerData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
if (empty( $caseSchedulerData['SCH_EVERY_DAYS'] )) {
$nEveryDays = 1;
} else {
$nEveryDays = $caseSchedulerData['SCH_EVERY_DAYS'];
}
$caseSchedulerData['SCH_EVERY_DAYS'] = $nEveryDays;
if (! empty( $caseSchedulerData['SCH_WEEK_DAYS'] )) {
$aWeekDays = $caseSchedulerData['SCH_WEEK_DAYS'];
}
$sStartTime = $caseSchedulerData['SCH_START_TIME'];
$sWeeks = $caseSchedulerData['SCH_WEEK_DAYS'] . '|';
break;
case '3':
$nStartDay = $caseSchedulerData['SCH_START_DAY'];
if ($nStartDay == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day')));
}
if ($nStartDay == 1) {
if ($caseSchedulerData['SCH_START_DAY_OPT_1'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day_opt_1')));
}
$temp = $caseSchedulerData['SCH_START_DAY_OPT_1'];
$temp = (int)$temp;
if ($temp >= 1 && $temp <= 31) {
$caseSchedulerData['SCH_START_DAY_OPT_1'] = $caseSchedulerData['SCH_START_DAY_OPT_1'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_DAY_1"));
}
$caseSchedulerData['SCH_START_DAY'] = $nStartDay . '|' . $caseSchedulerData['SCH_START_DAY_OPT_1'];
} else {
if ($caseSchedulerData['SCH_START_DAY_OPT_2'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day_opt_2')));
}
$caseSchedulerData['SCH_START_DAY'] = $nStartDay . '|' . $caseSchedulerData['SCH_START_DAY_OPT_2'];
$optionTwo = $caseSchedulerData['SCH_START_DAY_OPT_2']{0};
if ($optionTwo == "1" || $optionTwo == "2" || $optionTwo == "3" || $optionTwo == "4" || $optionTwo == "5") {
$caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
}
$pipelineTwo = $caseSchedulerData['SCH_START_DAY_OPT_2']{1};
if ($pipelineTwo == "|") {
$caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
}
$dayTwo = $caseSchedulerData['SCH_START_DAY_OPT_2']{2};
if ($dayTwo == "1" || $dayTwo == "2" || $dayTwo == "3" || $dayTwo == "4" || $dayTwo == "5" || $dayTwo == "6" || $dayTwo == "7") {
$caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
}
}
if ($nStartDay == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day')));
}
if ($caseSchedulerData['SCH_MONTHS'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_months')));
}
if (! empty( $caseSchedulerData['SCH_MONTHS'] )) {
$aMonths = $caseSchedulerData['SCH_MONTHS'];
$aMonths = explode("|", $aMonths);
foreach ($aMonths as $row) {
if ($row == "1" || $row == "2" || $row == "3" || $row == "4" || $row == "5"|| $row == "6" || $row == "7"|| $row == "8" || $row == "9" || $row == "10"|| $row == "11" || $row == "12") {
$caseSchedulerData['SCH_MONTHS'] = $caseSchedulerData['SCH_MONTHS'];
} else {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_months')));
}
}
}
$sMonths = $caseSchedulerData['SCH_MONTHS'];
$sStartDay = $caseSchedulerData['SCH_START_DAY'];
$sValue = $nStartDay;
break;
}
if (($sOption != '1') && ($sOption != '4') && ($sOption != '5')) {
if ($sStartDay == '') {
2014-02-11 17:08:17 -04:00
$sStartDay = date('Y-m-d');
2014-02-11 12:22:00 -04:00
} else {
$size = strlen($caseSchedulerData['SCH_START_DAY']);
if ($size > 4) {
$aaStartDay = explode( "|", $caseSchedulerData['SCH_START_DAY'] );
2014-02-12 10:58:17 -04:00
$aaStartDay[0] = $aaStartDay[0];
$aaStartDay[1] = $aaStartDay[1];
$aaStartDay[2]= ($aaStartDay[2] == 7 ? 1 : $aaStartDay[2]);
$sStartDay = $aaStartDay[0].'|'.$aaStartDay[1].'|'.$aaStartDay[2];
}
}
2014-02-11 17:08:17 -04:00
$dCurrentDay = date("d");
$dCurrentMonth = date("m");
$aStartDay = explode( "|", $caseSchedulerData['SCH_START_DAY'] );
2014-02-11 09:33:04 -04:00
$sDateTmp = '';
if ($sOption == '3' && $aStartDay[0] == '1') {
$monthsArray = explode( "|", $sMonths );
foreach ($monthsArray as $row) {
if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) {
$startTime = $caseSchedulerData['SCH_START_TIME'] . ":00";
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = date('Y') . '-' . $row . '-' . $aStartDay[1] . ' ' . $startTime;
break;
} else {
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
}
}
} else {
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
}
} else {
if ($sOption == '4') {
2014-02-11 17:08:17 -04:00
$sDateTmp = date('Y-m-d');
$caseSchedulerData['SCH_START_TIME'] = date('Y-m-d', strtotime( $sDateTmp )) . ' ' . date('H:i:s', strtotime( $sTimeTmp ));
$caseSchedulerData['SCH_START_DATE'] = $caseSchedulerData['SCH_START_TIME'];
$caseSchedulerData['SCH_END_DATE'] = $caseSchedulerData['SCH_START_TIME'];
}
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = $caseSchedulerData['SCH_START_TIME'];
if ($sOption == '5') {
if ($caseSchedulerData['SCH_START_DATE'] != '') {
$sDateTmp = $caseSchedulerData['SCH_START_DATE'];
} else {
2014-02-11 17:08:17 -04:00
$sDateTmp = date('Y-m-d');
$caseSchedulerData['SCH_START_DATE'] = $sDateTmp;
}
$caseSchedulerData['SCH_START_TIME'] = time();
$caseSchedulerData['SCH_START_DATE'] = $caseSchedulerData['SCH_START_TIME'];
if ($caseSchedulerData['SCH_REPEAT_EVERY'] == "") {
throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_repeat_every')));
}
$patternHour="/^([0-9]|0[0-9]|1[0-9]|2[0-3]).[0-5][0-9]$/";
if (!preg_match($patternHour, $caseSchedulerData['SCH_REPEAT_EVERY'])) {
throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_REPEAT"));
}
$nextRun = $caseSchedulerData['SCH_REPEAT_EVERY'] * 60 * 60;
$caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'];
$date = $caseSchedulerData['SCH_START_TIME'];
$date += $nextRun;
2014-02-11 17:08:17 -04:00
$date = date("Y-m-d H:i", $date);
$caseSchedulerData['SCH_TIME_NEXT_RUN'] = $date;
}
}
if (! empty( $caseSchedulerData['SCH_REPEAT_TASK_CHK'] )) {
if (trim( $caseSchedulerData['SCH_END_DATE'] ) != '') {
$caseSchedulerData['SCH_END_DATE'] = $caseSchedulerData['SCH_END_DATE'];
}
}
if (! empty( $caseSchedulerData['SCH_REPEAT_TASK_CHK'] )) {
$nOptEvery = $caseSchedulerData['SCH_REPEAT_EVERY_OPT'];
if ($nOptEvery == 2) {
$caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'] * 60;
} else {
$caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'];
}
}
if ((isset( $caseSchedulerData['CASE_SH_PLUGIN_UID'] )) && ($caseSchedulerData['CASE_SH_PLUGIN_UID'] != "")) {
$caseSchedulerData['CASE_SH_PLUGIN_UID'] = $caseSchedulerData['CASE_SH_PLUGIN_UID'];
}
// check this data
$caseSchedulerData['SCH_REPEAT_UNTIL'] = '';
$caseSchedulerData['SCH_REPEAT_STOP_IF_RUNNING'] = '0';
$caseSchedulerData['CASE_SH_PLUGIN_UID'] = null;
//
$oCaseScheduler->Update($caseSchedulerData);
$oCriteria = $this->getCaseScheduler($sProcessUID, $sSchUID);
return $oCriteria;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Delete a case scheduler of a project
*
* @param string $sSchUID
*
* @access public
*/
public function deleteCaseScheduler($sSchUID)
{
try {
require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php");
$oCaseScheduler = new \CaseScheduler();
if (!isset($sSchUID)) {
return;
}
2014-06-16 15:38:07 -04:00
$event = \BpmnEventPeer::retrieveByPK($sSchUID);
if (is_object($event)) {
$event->delete();
}
$oCaseScheduler->remove($sSchUID);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Create/Update CaseScheduler
*
* @param string $caseSchedulerUid Unique id of CaseScheduler
* @param string $projectUid Unique id of Project
* @param string $userUidCreatorUpdater Unique id of creator/updater User
* @param array $arrayData Data
* @param array $arrayDataPlugin Data plugin
*
* return void
*/
public function createUpdate($caseSchedulerUid, $projectUid, $userUidCreatorUpdater, array $arrayData, array $arrayDataPlugin = array())
{
try {
//Set variables
$flagInsert = ($caseSchedulerUid == "")? true : false;
$option = ($flagInsert)? "INS" : "UPD";
//Set data
if ($flagInsert) {
$caseSchedulerUid = \ProcessMaker\Util\Common::generateUID();
}
foreach ($arrayData as $key => $value) {
if (is_array($value)) {
foreach ($value as $key2 => $value2) {
$arrayData[$key][$key2] = trim($value2);
}
} else {
$arrayData[$key] = trim($value);
}
}
$arrayCaseSchedulerData = array();
$arrayCaseSchedulerData["SCH_UID"] = $caseSchedulerUid;
$arrayCaseSchedulerData["SCH_NAME"] = $arrayData["SCH_NAME"];
$arrayCaseSchedulerData["PRO_UID"] = $projectUid;
$arrayCaseSchedulerData["TAS_UID"] = $arrayData["TAS_UID"];
$arrayCaseSchedulerData["SCH_DEL_USER_UID"] = $arrayData["SCH_USER_UID"];
$arrayCaseSchedulerData["SCH_DEL_USER_NAME"] = $arrayData["SCH_USER_NAME"];
switch ($option) {
case "INS":
$arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]);
$arrayCaseSchedulerData["SCH_STATE"] = "ACTIVE";
$arrayCaseSchedulerData["SCH_LAST_STATE"] = "CREATED";
$sDateTmp = ($arrayData["SCH_START_DATE"] != "")? $arrayData["SCH_START_DATE"] : date("Y-m-d");
break;
case "UPD":
if ($arrayData["SCH_USER_PASSWORD"] != "DefaultPM") {
$arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]);
}
$sDateTmp = $arrayData["SCH_START_DATE"];
break;
}
$caseSchedulerOption = (int)($arrayData["SCH_OPTION"]);
$arrayCaseSchedulerData["USR_UID"] = $userUidCreatorUpdater;
$arrayCaseSchedulerData["SCH_OPTION"] = $caseSchedulerOption;
$arrayCaseSchedulerData["SCH_START_TIME"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"]));
$arrayCaseSchedulerData["SCH_START_DATE"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"]));
$sValue = "";
$sDaysPerformTask = "";
$sWeeks = "";
$sMonths = "";
$sStartDay = "";
switch ($option) {
case "INS":
$arrayCaseSchedulerData["SCH_START_DAY"] = "";
$arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = "";
$arrayCaseSchedulerData["SCH_REPEAT_UNTIL"] = "";
$arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = "";
break;
case "UPD":
break;
}
switch ($caseSchedulerOption) {
case 1:
//Option 1
$sValue = $arrayData["SCH_DAYS_PERFORM_TASK"];
switch ($sValue) {
case "1":
$arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|1";
break;
case "2":
$arrayCaseSchedulerData["SCH_OPTION"] = "2";
$arrayCaseSchedulerData["SCH_EVERY_DAYS"] = "1";
$arrayCaseSchedulerData["SCH_WEEK_DAYS"] = "1|2|3|4|5|";
break;
case "3":
//Every [n] Days
$sDaysPerformTask = $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"];
$arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|" . $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"];
break;
}
break;
case 2:
//If the option is zero, set by default 1
$arrayCaseSchedulerData["SCH_EVERY_DAYS"] = (empty($arrayData["SCH_EVERY_DAYS"]))? 1 : $arrayData["SCH_EVERY_DAYS"];
$sWeeks = "";
if (!empty($arrayData["SCH_WEEK_DAYS"])) {
$aWeekDays = $arrayData["SCH_WEEK_DAYS"];
foreach ($aWeekDays as $value) {
$sWeeks = $sWeeks . $value . "|";
}
}
if (!empty($arrayData["SCH_WEEK_DAYS_2"])) {
$aWeekDays2 = $arrayData["SCH_WEEK_DAYS_2"];
foreach ($aWeekDays2 as $value) {
$sWeeks = $sWeeks . $value . "|";
}
}
$sStartTime = $arrayData["SCH_START_TIME"];
$arrayCaseSchedulerData["SCH_WEEK_DAYS"] = $sWeeks;
break;
case 3:
$nStartDay = $arrayData["SCH_START_DAY"];
if ($nStartDay == 1) {
$arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_1"];
} else {
$arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_2_WEEKS"] . "|" . $arrayData["SCH_START_DAY_OPT_2_DAYS_WEEK"];
}
$sMonths = "";
if (!empty($arrayData["SCH_MONTHS"])) {
$aMonths = $arrayData["SCH_MONTHS"];
foreach ($aMonths as $value) {
$sMonths = $sMonths . $value . "|";
}
}
if (!empty($arrayData["SCH_MONTHS_2"])) {
$aMonths2 = $arrayData["SCH_MONTHS_2"];
foreach ($aMonths2 as $value) {
$sMonths = $sMonths . $value . "|";
}
}
if (!empty($arrayData["SCH_MONTHS_3"])) {
$aMonths3 = $arrayData["SCH_MONTHS_3"];
foreach ($aMonths3 as $value) {
$sMonths = $sMonths . $value . "|";
}
}
$arrayCaseSchedulerData["SCH_MONTHS"] = $sMonths;
$sStartDay = $arrayCaseSchedulerData["SCH_START_DAY"];
$sValue = $nStartDay;
break;
}
$caseScheduler = new \CaseScheduler();
switch ($option) {
case "INS":
break;
case "UPD":
$arrayDataAux = $caseScheduler->load($caseSchedulerUid);
$arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"];
//If the start date has changed then recalculate the next run time
$recalculateDate = ($arrayData["SCH_START_DATE"] == $arrayData["PREV_SCH_START_DATE"])? false : true;
$recalculateTime = (date("H:i:s", strtotime($arrayData["SCH_START_TIME"])) == date("H:i:s", strtotime($arrayData["PREV_SCH_START_TIME"])))? false : true;
break;
}
$nActualTime = $arrayData["SCH_START_TIME"];
if ($caseSchedulerOption != 1 && $caseSchedulerOption != 4 && $caseSchedulerOption != 5) {
if ($sStartDay == "") {
$sStartDay = date("Y-m-d");
}
$dCurrentDay = (int)(date("d"));
$dCurrentMonth = (int)(date("m"));
$aStartDay = explode("|", $arrayCaseSchedulerData["SCH_START_DAY"]);
if ($caseSchedulerOption == 3 && $aStartDay[0] == "1") {
$monthsArray = explode("|", $sMonths);
foreach ($monthsArray as $row) {
switch ($option) {
case "INS":
if ((int)($row) == $dCurrentMonth && $dCurrentDay <= (int)($aStartDay[1])) {
$startTime = $arrayData["SCH_START_TIME"] . ":00";
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y") . "-" . $row . "-" . $aStartDay[1] . " " . $startTime;
break;
} else {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
}
break;
case "UPD":
if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) {
$startTime = $arrayData["SCH_START_TIME"] . ":00";
if ($recalculateDate) {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y") . "-" . $row . "-" . $aStartDay[1] . " " . $startTime;
} else {
if ($recalculateTime) {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
}
}
break;
} else {
if ($recalculateDate) {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
} else {
if ($recalculateTime) {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
}
}
}
break;
}
}
} else {
switch ($option) {
case "INS":
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
break;
case "UPD":
if ($recalculateDate) {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
} else {
if ($recalculateTime) {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
}
}
break;
}
}
} else {
if ($caseSchedulerOption == 4) {
$arrayCaseSchedulerData["SCH_END_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"];
}
switch ($option) {
case "INS":
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $arrayCaseSchedulerData["SCH_START_TIME"];
break;
case "UPD":
if ($recalculateDate) {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $arrayCaseSchedulerData["SCH_START_TIME"];
} else {
if ($recalculateTime) {
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
}
}
break;
}
if ($caseSchedulerOption == 5) {
switch ($option) {
case "INS":
$arrayCaseSchedulerData["SCH_START_TIME"] = time();
$arrayCaseSchedulerData["SCH_START_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"];
$date = $arrayCaseSchedulerData["SCH_START_TIME"];
break;
case "UPD":
$date = $caseScheduler->getSchLastRunTime();
if (is_null($date)) {
$date = $caseScheduler->getSchStartTime();
}
$date = strtotime($date);
break;
}
$arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = $arrayData["SCH_REPEAT_EVERY"];
$arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y-m-d H:i", $date + (((int)($arrayData["SCH_REPEAT_EVERY"])) * 60 * 60));
}
}
switch ($option) {
case "INS":
if ($arrayData["SCH_END_DATE"] != "") {
$arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"];
}
break;
case "UPD":
break;
}
if (!empty($arrayData["SCH_REPEAT_TASK_CHK"])) {
if ($arrayData["SCH_REPEAT_EVERY_OPT"] . "" == "2") {
$arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = ((int)($arrayData["SCH_REPEAT_EVERY"])) * 60;
} else {
$arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = (int)($arrayData["SCH_REPEAT_EVERY"]);
}
}
//Create/Update
switch ($option) {
case "INS":
if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") {
$arrayCaseSchedulerData["CASE_SH_PLUGIN_UID"] = $arrayData["CASE_SH_PLUGIN_UID"];
}
$caseScheduler->create($arrayCaseSchedulerData);
break;
case "UPD":
$caseScheduler->update($arrayCaseSchedulerData);
break;
}
//Plugin
if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") {
$oPluginRegistry = &\PMPluginRegistry::getSingleton();
$activePluginsForCaseScheduler = $oPluginRegistry->getCaseSchedulerPlugins();
$params = explode("--", $arrayData["CASE_SH_PLUGIN_UID"]);
foreach ($activePluginsForCaseScheduler as $key => $caseSchedulerPluginDetail) {
if ($caseSchedulerPluginDetail->sNamespace == $params[0] && $caseSchedulerPluginDetail->sActionId == $params[1]) {
$caseSchedulerSelected = $caseSchedulerPluginDetail;
}
}
if (isset($caseSchedulerSelected) && is_object($caseSchedulerSelected)) {
//Save the form
$arrayDataPlugin["SCH_UID"] = $arrayCaseSchedulerData["SCH_UID"];
$oPluginRegistry->executeMethod($caseSchedulerPluginDetail->sNamespace, $caseSchedulerPluginDetail->sActionSave, $arrayDataPlugin);
}
}
} catch (\Exception $e) {
throw $e;
}
}
}