2014-01-14 16:30:34 -04:00
|
|
|
<?php
|
2014-04-02 16:51:28 -04:00
|
|
|
namespace ProcessMaker\BusinessModel;
|
2014-01-14 16:30:34 -04:00
|
|
|
|
|
|
|
|
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)) {
|
2014-03-05 10:31:03 -04:00
|
|
|
throw (new \Exception( 'This id: '. $sCaseSchedulerUID .' does not correspond to a registered case scheduler'));
|
2014-02-10 14:51:38 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-21 12:14:14 -04:00
|
|
|
/**
|
|
|
|
|
* 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);
|
|
|
|
|
$rsCriteria = \CaseSchedulerPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$rsCriteria->next();
|
|
|
|
|
return $rsCriteria->getRow();
|
2014-01-24 08:32:08 -04:00
|
|
|
} catch (\Exception $e) {
|
2014-01-21 12:14:14 -04:00
|
|
|
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($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);
|
|
|
|
|
$rsCriteria = \CaseSchedulerPeer::doSelectRS($criteria);
|
|
|
|
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$rsCriteria->next();
|
|
|
|
|
return $rsCriteria->getRow();
|
2014-01-24 08:32:08 -04:00
|
|
|
} catch (\Exception $e) {
|
2014-01-21 12:14:14 -04:00
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks if the user exists
|
|
|
|
|
*
|
|
|
|
|
* @param string $userName Name
|
2014-03-18 11:22:54 -04:00
|
|
|
* @param string $sTaskUID Task
|
2014-01-21 12:14:14 -04:00
|
|
|
*
|
2014-01-29 13:09:08 -04:00
|
|
|
* return message
|
2014-01-21 12:14:14 -04:00
|
|
|
*/
|
2014-03-18 11:22:54 -04:00
|
|
|
public function getUser($userName, $sTaskUID)
|
2014-01-21 12:14:14 -04:00
|
|
|
{
|
2014-02-10 14:55:22 -04:00
|
|
|
try {
|
2014-01-29 13:09:08 -04:00
|
|
|
$sTASKS = $sTaskUID;
|
|
|
|
|
$sWS_USER = trim( $userName );
|
2014-03-18 11:22:54 -04:00
|
|
|
$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) {
|
2014-01-21 17:05:38 -04:00
|
|
|
$oCriteria = new \Criteria( 'workflow' );
|
2014-01-29 13:09:08 -04:00
|
|
|
$oCriteria->addSelectColumn( \UsersPeer::USR_UID );
|
2014-03-18 11:22:54 -04:00
|
|
|
$oCriteria->addJoin( \UsersPeer::USR_UID, \GroupUserPeer::USR_UID, \Criteria::LEFT_JOIN );
|
|
|
|
|
$oCriteria->addJoin( \GroupUserPeer::GRP_UID, \TaskUserPeer::USR_UID, \Criteria::LEFT_JOIN );
|
2014-01-29 13:09:08 -04:00
|
|
|
$oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS );
|
2014-01-21 17:05:38 -04:00
|
|
|
$oCriteria->add( \UsersPeer::USR_USERNAME, $sWS_USER );
|
2014-03-18 11:22:54 -04:00
|
|
|
$userIsAssigned = \GroupUserPeer::doCount( $oCriteria );
|
|
|
|
|
if (! ($userIsAssigned >= 1)) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( "The User " . $sWS_USER . " doesn't have the activity " . $sTASKS . " assigned"));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
2014-03-18 11:22:54 -04:00
|
|
|
}
|
|
|
|
|
$oDataset = \TaskUserPeer::doSelectRS($oCriteria);
|
|
|
|
|
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$oDataset->next();
|
|
|
|
|
while ($aRow = $oDataset->getRow()) {
|
|
|
|
|
$messageCode = $aRow['USR_UID'];
|
2014-01-29 13:09:08 -04:00
|
|
|
$oDataset->next();
|
2014-01-21 17:05:38 -04:00
|
|
|
}
|
2014-01-29 13:09:08 -04:00
|
|
|
return $messageCode;
|
2014-01-24 08:32:08 -04:00
|
|
|
} catch (\Exception $e) {
|
2014-01-21 12:14:14 -04:00
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create a new case scheduler of a project
|
|
|
|
|
* @param string $sProcessUID
|
|
|
|
|
* @param array $aData
|
|
|
|
|
* @param string $userUID
|
|
|
|
|
* @return array
|
|
|
|
|
*
|
|
|
|
|
* @access public
|
|
|
|
|
*/
|
|
|
|
|
public function addCaseScheduler($sProcessUID, $aData, $userUID)
|
|
|
|
|
{
|
|
|
|
|
try {
|
2014-04-02 16:51:28 -04:00
|
|
|
require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php");
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['sch_repeat_stop_if_running'] = '0';
|
|
|
|
|
$aData['case_sh_plugin_uid'] = null;
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData = array_change_key_case($aData, CASE_UPPER);
|
2014-01-21 12:14:14 -04:00
|
|
|
$sOption = $aData['SCH_OPTION'];
|
2014-01-14 16:30:34 -04:00
|
|
|
if (empty($aData)) {
|
2014-01-21 12:14:14 -04:00
|
|
|
die( 'the information sended is empty!' );
|
|
|
|
|
}
|
|
|
|
|
$arrayTaskUid = $this->getTaskUid($aData['TAS_UID']);
|
|
|
|
|
if (empty($arrayTaskUid)) {
|
2014-03-05 10:31:03 -04:00
|
|
|
throw (new \Exception( 'Task not found for id: '. $aData['TAS_UID']));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-29 13:09:08 -04:00
|
|
|
if ($aData['SCH_NAME']=='') {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_name can not be empty'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($this->existsName($sProcessUID, $aData['SCH_NAME'])) {
|
2014-03-05 10:31:03 -04:00
|
|
|
throw (new \Exception( 'Duplicate Case Scheduler name'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-03-18 11:22:54 -04:00
|
|
|
$mUser = $this->getUser($aData['SCH_DEL_USER_NAME'], $aData['TAS_UID']);
|
2014-01-29 13:09:08 -04:00
|
|
|
$oUser = \UsersPeer::retrieveByPK( $mUser );
|
|
|
|
|
if (is_null($oUser)) {
|
2014-01-21 17:05:38 -04:00
|
|
|
throw (new \Exception($mUser));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-03-18 11:22:54 -04:00
|
|
|
$oUserPass = $oUser->getUsrPassword();
|
|
|
|
|
$aData['SCH_DEL_USER_PASS'] = $oUserPass;
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($sOption != '5') {
|
|
|
|
|
$pattern="/^([0-1][0-9]|[2][0-3])[\:]([0-5][0-9])$/";
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!preg_match($pattern, $aData['SCH_START_TIME'])) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_time. Expecting time in HH:MM format (The time can not be increased to 23:59)'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$patternDate="/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/";
|
|
|
|
|
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!preg_match($patternDate, $aData['SCH_START_DATE'])) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_date. Expecting date in YYYY-MM-DD format, such as 2014-01-01'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!preg_match($patternDate, $aData['SCH_END_DATE'])) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_end_date. Expecting date in YYYY-MM-DD format, such as 2014-01-01'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-24 08:32:08 -04:00
|
|
|
if ($aData['SCH_START_DATE'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_date can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
}
|
2014-01-29 13:09:08 -04:00
|
|
|
if ($sOption == '2') {
|
|
|
|
|
$aData['SCH_EVERY_DAYS'] = 1;
|
|
|
|
|
} else {
|
|
|
|
|
$aData['SCH_EVERY_DAYS'] = 0;
|
|
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
$oCaseScheduler = new \CaseScheduler();
|
|
|
|
|
$aData['SCH_UID'] = \G::generateUniqueID();
|
|
|
|
|
$aData['PRO_UID'] = $sProcessUID;
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData['SCH_STATE'] = 'ACTIVE';
|
|
|
|
|
$aData['SCH_LAST_STATE'] = 'CREATED'; // 'ACTIVE';
|
|
|
|
|
$aData['USR_UID'] = $userUID;
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_DEL_USER_UID'] = $aData['USR_UID'];
|
2014-01-14 16:30:34 -04:00
|
|
|
$sTimeTmp = $aData['SCH_START_TIME'];
|
|
|
|
|
$nActualTime = $aData['SCH_START_TIME']; // time();
|
|
|
|
|
$sValue = '';
|
|
|
|
|
$sDaysPerformTask = '';
|
|
|
|
|
$sWeeks = '';
|
|
|
|
|
$sMonths = '';
|
|
|
|
|
$sStartDay = '';
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_DAYS_PERFORM_TASK'] = '';
|
2014-01-14 16:30:34 -04:00
|
|
|
switch ($sOption) {
|
2014-02-26 16:22:23 -04:00
|
|
|
case '1': // If the option is zero, set by default 1
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_DAYS_PERFORM_TASK'] = '1';
|
2014-01-14 16:30:34 -04:00
|
|
|
$sValue = $aData['SCH_DAYS_PERFORM_TASK'];
|
|
|
|
|
switch ($sValue) {
|
|
|
|
|
case '1':
|
|
|
|
|
$aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'] . '|1';
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
|
|
|
|
|
$aData['SCH_WEEK_DAYS'] ='0|0|0|0|0|0|0';
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
case '2':
|
|
|
|
|
$aData['SCH_OPTION'] = '2';
|
|
|
|
|
$aData['SCH_EVERY_DAYS'] = '1'; //check
|
|
|
|
|
$aData['SCH_WEEK_DAYS'] = '1|2|3|4|5|'; //check
|
|
|
|
|
break;
|
|
|
|
|
case '3': // Every [n] Days
|
2014-01-16 09:35:11 -04:00
|
|
|
$sDaysPerformTask = $aData['SCH_DAYS_PERFORM_TASK'];
|
|
|
|
|
$aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'];
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case '2': // If the option is zero, set by default 1
|
2014-01-24 08:32:08 -04:00
|
|
|
if ($aData['SCH_WEEK_DAYS'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_week_days can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
} else {
|
|
|
|
|
$weeks = $aData['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") {
|
2014-01-25 06:10:24 -04:00
|
|
|
$aData['SCH_WEEK_DAYS'] = $aData['SCH_WEEK_DAYS'];
|
2014-01-21 12:14:14 -04:00
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_week_days'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$aData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
|
2014-01-14 16:30:34 -04:00
|
|
|
if (empty( $aData['SCH_EVERY_DAYS'] )) {
|
|
|
|
|
$nEveryDays = 1;
|
|
|
|
|
} else {
|
|
|
|
|
$nEveryDays = $aData['SCH_EVERY_DAYS'];
|
|
|
|
|
}
|
|
|
|
|
$aData['SCH_EVERY_DAYS'] = $nEveryDays;
|
|
|
|
|
if (! empty( $aData['SCH_WEEK_DAYS'] )) {
|
|
|
|
|
$aWeekDays = $aData['SCH_WEEK_DAYS'];
|
2014-01-24 08:32:08 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
$sStartTime = $aData['SCH_START_TIME'];
|
2014-01-21 12:14:14 -04:00
|
|
|
$sWeeks = $aData['SCH_WEEK_DAYS'] . '|';
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
case '3':
|
|
|
|
|
$nStartDay = $aData['SCH_START_DAY'];
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($nStartDay == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_day can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
if ($nStartDay == 1) {
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($aData['SCH_START_DAY_OPT_1'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_day_opt_1 can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
$temp = $aData['SCH_START_DAY_OPT_1'];
|
|
|
|
|
$temp = (int)$temp;
|
2014-01-24 08:32:08 -04:00
|
|
|
if ($temp >= 1 && $temp <= 31) {
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_START_DAY_OPT_1'] = $aData['SCH_START_DAY_OPT_1'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_day_opt_1. Must be between 1 and 31'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_1'];
|
|
|
|
|
} else {
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($aData['SCH_START_DAY_OPT_2'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_day_opt_2 can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-16 09:35:11 -04:00
|
|
|
$aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_2'];
|
2014-01-29 13:09:08 -04:00
|
|
|
$optionTwo = $aData['SCH_START_DAY_OPT_2']{0};
|
|
|
|
|
if ($optionTwo == "1" || $optionTwo == "2" || $optionTwo == "3" || $optionTwo == "4" || $optionTwo == "5") {
|
|
|
|
|
$aData['SCH_START_DAY_OPT_2'] = $aData['SCH_START_DAY_OPT_2'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_day_opt_2'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
|
|
|
|
$pipelineTwo = $aData['SCH_START_DAY_OPT_2']{1};
|
|
|
|
|
if ($pipelineTwo == "|") {
|
|
|
|
|
$aData['SCH_START_DAY_OPT_2'] = $aData['SCH_START_DAY_OPT_2'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_day_opt_2'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
|
|
|
|
$dayTwo = $aData['SCH_START_DAY_OPT_2']{2};
|
|
|
|
|
if ($dayTwo == "1" || $dayTwo == "2" || $dayTwo == "3" || $dayTwo == "4" || $dayTwo == "5" || $dayTwo == "6" || $dayTwo == "7") {
|
|
|
|
|
$aData['SCH_START_DAY_OPT_2'] = $aData['SCH_START_DAY_OPT_2'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_day_opt_2'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($nStartDay == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_day can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
if ($aData['SCH_MONTHS'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_months can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
if (! empty( $aData['SCH_MONTHS'] )) {
|
|
|
|
|
$aMonths = $aData['SCH_MONTHS'];
|
2014-01-29 13:09:08 -04:00
|
|
|
$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") {
|
|
|
|
|
$aData['SCH_MONTHS'] = $aData['SCH_MONTHS'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_months'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
|
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
2014-01-16 09:35:11 -04:00
|
|
|
$sMonths = $aData['SCH_MONTHS'];
|
2014-01-14 16:30:34 -04:00
|
|
|
$sStartDay = $aData['SCH_START_DAY'];
|
|
|
|
|
$sValue = $nStartDay;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (($sOption != '1') && ($sOption != '4') && ($sOption != '5')) {
|
2014-02-10 14:51:38 -04:00
|
|
|
$sDateTmp = '';
|
2014-01-14 16:30:34 -04:00
|
|
|
if ($sStartDay == '') {
|
2014-02-11 17:08:17 -04:00
|
|
|
$sStartDay = date('Y-m-d');
|
2014-02-11 12:22:00 -04:00
|
|
|
} else {
|
2014-02-12 10:58:17 -04:00
|
|
|
$size = strlen($aData['SCH_START_DAY']);
|
2014-02-14 09:39:24 -04:00
|
|
|
if ($size > 4) {
|
2014-02-12 10:58:17 -04:00
|
|
|
$aaStartDay = explode( "|", $aData['SCH_START_DAY'] );
|
|
|
|
|
$aaStartDay[0] = $aaStartDay[0];
|
|
|
|
|
$aaStartDay[1] = $aaStartDay[1];
|
|
|
|
|
$aaStartDay[2]= ($aaStartDay[2] == 7 ? 1 : $aaStartDay[2]);
|
|
|
|
|
$sStartDay = $aaStartDay[0].'|'.$aaStartDay[1].'|'.$aaStartDay[2];
|
|
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
2014-02-11 17:08:17 -04:00
|
|
|
$dCurrentDay = date("d");
|
|
|
|
|
$dCurrentMonth = date("m");
|
2014-01-14 16:30:34 -04:00
|
|
|
$aStartDay = explode( "|", $aData['SCH_START_DAY'] );
|
|
|
|
|
if ($sOption == '3' && $aStartDay[0] == '1') {
|
|
|
|
|
$monthsArray = explode( "|", $sMonths );
|
|
|
|
|
foreach ($monthsArray as $row) {
|
|
|
|
|
if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) {
|
|
|
|
|
$startTime = $aData['SCH_START_TIME'] . ":00";
|
2014-02-11 17:08:17 -04:00
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = date('Y') . '-' . $row . '-' . $aStartDay[1] . ' ' . $startTime;
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
} else {
|
|
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
} else {
|
|
|
|
|
if ($sOption == '4') {
|
2014-02-11 17:08:17 -04:00
|
|
|
$sDateTmp = date('Y-m-d');
|
|
|
|
|
$aData['SCH_START_TIME'] = date('Y-m-d', strtotime( $sDateTmp )) . ' ' . date('H:i:s', strtotime( $sTimeTmp ));
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_START_DATE'] = $aData['SCH_START_TIME'];
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData['SCH_END_DATE'] = $aData['SCH_START_TIME'];
|
|
|
|
|
}
|
|
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = $aData['SCH_START_TIME'];
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($sOption == '5') {
|
|
|
|
|
if ($aData['SCH_START_DATE'] != '') {
|
|
|
|
|
$sDateTmp = $aData['SCH_START_DATE'];
|
|
|
|
|
} else {
|
2014-02-11 17:08:17 -04:00
|
|
|
$sDateTmp = date('Y-m-d');
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_START_DATE'] = $sDateTmp;
|
|
|
|
|
}
|
2014-02-11 17:08:17 -04:00
|
|
|
$aData['SCH_END_DATE'] = date('Y-m-d', strtotime( $sDateTmp )) . ' ' . date('H:i:s', strtotime( $sTimeTmp ));
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData['SCH_START_TIME'] = time();
|
|
|
|
|
$aData['SCH_START_DATE'] = $aData['SCH_START_TIME'];
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($aData['SCH_REPEAT_EVERY'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_repeat_every can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
$patternHour="/^([0-1][0-9]|[2][0-3])[\.]([0-5][0-9])$/";
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!preg_match($patternHour, $aData['SCH_REPEAT_EVERY'])) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_repeat_every. Expecting time in HH.MM format'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
$nextRun = $aData['SCH_REPEAT_EVERY'] * 60 * 60;
|
|
|
|
|
$aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY'];
|
|
|
|
|
$date = $aData['SCH_START_TIME'];
|
|
|
|
|
$date += $nextRun;
|
2014-02-11 17:08:17 -04:00
|
|
|
$date = date("Y-m-d H:i", $date);
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = $date;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (trim( $aData['SCH_END_DATE'] ) != '') {
|
|
|
|
|
$aData['SCH_END_DATE'] = $aData['SCH_END_DATE'];
|
|
|
|
|
}
|
|
|
|
|
if (! empty( $aData['SCH_REPEAT_TASK_CHK'] )) {
|
|
|
|
|
$nOptEvery = $aData['SCH_REPEAT_EVERY_OPT'];
|
|
|
|
|
if ($nOptEvery == 2) {
|
|
|
|
|
$aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY'] * 60;
|
|
|
|
|
} else {
|
|
|
|
|
$aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ((isset( $aData['CASE_SH_PLUGIN_UID'] )) && ($aData['CASE_SH_PLUGIN_UID'] != "")) {
|
|
|
|
|
$aData['CASE_SH_PLUGIN_UID'] = $aData['CASE_SH_PLUGIN_UID'];
|
|
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
// check this data
|
|
|
|
|
$aData['SCH_REPEAT_UNTIL'] = '';
|
|
|
|
|
$aData['SCH_REPEAT_STOP_IF_RUNNING'] = '0';
|
|
|
|
|
$aData['CASE_SH_PLUGIN_UID'] = null;
|
|
|
|
|
//
|
2014-01-14 16:30:34 -04:00
|
|
|
$oCaseScheduler->create( $aData );
|
|
|
|
|
$oCriteria = $this->getCaseScheduler($sProcessUID, $aData['SCH_UID']);
|
|
|
|
|
return $oCriteria;
|
|
|
|
|
} catch (Exception $oException) {
|
|
|
|
|
die( $oException->getMessage() );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update case scheduler for a project
|
|
|
|
|
* @param string $sProcessUID
|
|
|
|
|
* @param array $aData
|
|
|
|
|
* @param string $userUID
|
2014-01-30 12:01:54 -04:00
|
|
|
* @param string $sSchUID
|
2014-01-14 16:30:34 -04:00
|
|
|
*
|
|
|
|
|
* @access public
|
|
|
|
|
*/
|
2014-01-30 12:01:54 -04:00
|
|
|
public function updateCaseScheduler($sProcessUID, $aData, $userUID, $sSchUID = '')
|
2014-01-14 16:30:34 -04:00
|
|
|
{
|
|
|
|
|
try {
|
2014-04-02 16:51:28 -04:00
|
|
|
require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php");
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData = array_change_key_case($aData, CASE_UPPER);
|
|
|
|
|
if (empty( $aData )) {
|
|
|
|
|
die( 'The information sended is empty!' );
|
|
|
|
|
}
|
|
|
|
|
$oCaseScheduler = new \CaseScheduler();
|
2014-01-21 12:14:14 -04:00
|
|
|
$aFields = $oCaseScheduler->Load($sSchUID);
|
2014-04-28 10:48:34 -04:00
|
|
|
//$sOption = $aFields['SCH_OPTION'];
|
|
|
|
|
$sOption = $aData['SCH_OPTION'];
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['sch_repeat_stop_if_running'] = '0';
|
|
|
|
|
$aData['case_sh_plugin_uid'] = null;
|
|
|
|
|
$aData = array_change_key_case($aData, CASE_UPPER);
|
|
|
|
|
if (empty($aData)) {
|
|
|
|
|
die( 'the information sended is empty!' );
|
|
|
|
|
}
|
|
|
|
|
$arrayTaskUid = $this->getTaskUid($aData['TAS_UID']);
|
|
|
|
|
if (empty($arrayTaskUid)) {
|
2014-03-05 10:31:03 -04:00
|
|
|
throw (new \Exception( 'Task not found for id: '. $aData['TAS_UID']));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-29 13:09:08 -04:00
|
|
|
if ($aData['SCH_NAME']=='') {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_name can not be empty'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($this->existsNameUpdate($sSchUID, $aData['SCH_NAME'])) {
|
2014-03-05 10:31:03 -04:00
|
|
|
throw (new \Exception( 'Duplicate Case Scheduler name'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-03-18 11:22:54 -04:00
|
|
|
$mUser = $this->getUser($aData['SCH_DEL_USER_NAME'], $aData['TAS_UID']);
|
2014-01-29 13:09:08 -04:00
|
|
|
$oUser = \UsersPeer::retrieveByPK( $mUser );
|
|
|
|
|
if (is_null($oUser)) {
|
2014-01-21 17:05:38 -04:00
|
|
|
throw (new \Exception($mUser));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-03-18 11:22:54 -04:00
|
|
|
$oUserPass = $oUser->getUsrPassword();
|
|
|
|
|
$aData['SCH_DEL_USER_PASS'] = $oUserPass;
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($sOption != '5') {
|
|
|
|
|
$pattern="/^([0-1][0-9]|[2][0-3])[\:]([0-5][0-9])$/";
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!preg_match($pattern, $aData['SCH_START_TIME'])) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_time. Expecting time in HH:MM format (The time can not be increased to 23:59)'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$patternDate="/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/";
|
|
|
|
|
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!preg_match($patternDate, $aData['SCH_START_DATE'])) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_date. Expecting date in YYYY-MM-DD format, such as 2014-01-01'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!preg_match($patternDate, $aData['SCH_END_DATE'])) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_end_date. Expecting date in YYYY-MM-DD format, such as 2014-01-01'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-24 08:32:08 -04:00
|
|
|
if ($aData['SCH_START_DATE'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_date can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
}
|
2014-01-29 13:09:08 -04:00
|
|
|
if ($sOption == '2') {
|
|
|
|
|
$aData['SCH_EVERY_DAYS'] = 1;
|
|
|
|
|
} else {
|
|
|
|
|
$aData['SCH_EVERY_DAYS'] = 0;
|
|
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
$oCaseScheduler = new \CaseScheduler();
|
|
|
|
|
$aData['SCH_UID'] = $sSchUID;
|
|
|
|
|
$aData['PRO_UID'] = $sProcessUID;
|
2014-03-17 10:45:49 -04:00
|
|
|
if ($aData['SCH_STATE'] == "" || $aData['SCH_STATE'] == null) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_state can not be null'));
|
2014-03-17 10:45:49 -04:00
|
|
|
} else {
|
|
|
|
|
if ($aData['SCH_STATE'] == 'ACTIVE') {
|
|
|
|
|
$aData['SCH_LAST_STATE'] = 'CREATED';
|
|
|
|
|
} else {
|
|
|
|
|
$aData['SCH_LAST_STATE'] = 'ACTIVE';
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData['USR_UID'] = $userUID;
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_DEL_USER_UID'] = $aData['USR_UID'];
|
2014-01-14 16:30:34 -04:00
|
|
|
$sTimeTmp = $aData['SCH_START_TIME'];
|
2014-01-21 12:14:14 -04:00
|
|
|
$nActualTime = $aData['SCH_START_TIME']; // time();
|
2014-01-14 16:30:34 -04:00
|
|
|
$sValue = '';
|
|
|
|
|
$sDaysPerformTask = '';
|
|
|
|
|
$sWeeks = '';
|
|
|
|
|
$sMonths = '';
|
|
|
|
|
$sStartDay = '';
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_DAYS_PERFORM_TASK'] = '';
|
2014-01-14 16:30:34 -04:00
|
|
|
switch ($sOption) {
|
2014-02-26 16:22:23 -04:00
|
|
|
case '1': // If the option is zero, set by default 1
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_DAYS_PERFORM_TASK'] = '1';
|
2014-01-14 16:30:34 -04:00
|
|
|
$sValue = $aData['SCH_DAYS_PERFORM_TASK'];
|
|
|
|
|
switch ($sValue) {
|
|
|
|
|
case '1':
|
|
|
|
|
$aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'] . '|1';
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
|
|
|
|
|
$aData['SCH_WEEK_DAYS'] ='0|0|0|0|0|0|0';
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
case '2':
|
|
|
|
|
$aData['SCH_OPTION'] = '2';
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_EVERY_DAYS'] = '1'; //check
|
|
|
|
|
$aData['SCH_WEEK_DAYS'] = '1|2|3|4|5|'; //check
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
case '3': // Every [n] Days
|
2014-01-16 09:35:11 -04:00
|
|
|
$sDaysPerformTask = $aData['SCH_DAYS_PERFORM_TASK'];
|
|
|
|
|
$aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'];
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
2014-01-21 12:14:14 -04:00
|
|
|
case '2': // If the option is zero, set by default 1
|
2014-01-24 08:32:08 -04:00
|
|
|
if ($aData['SCH_WEEK_DAYS'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_week_days can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
} else {
|
|
|
|
|
$weeks = $aData['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") {
|
2014-01-30 12:01:54 -04:00
|
|
|
$aData['SCH_WEEK_DAYS'] = $aData['SCH_WEEK_DAYS'];
|
2014-01-21 12:14:14 -04:00
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_week_days'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$aData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
|
2014-01-14 16:30:34 -04:00
|
|
|
if (empty( $aData['SCH_EVERY_DAYS'] )) {
|
|
|
|
|
$nEveryDays = 1;
|
|
|
|
|
} else {
|
|
|
|
|
$nEveryDays = $aData['SCH_EVERY_DAYS'];
|
|
|
|
|
}
|
|
|
|
|
$aData['SCH_EVERY_DAYS'] = $nEveryDays;
|
|
|
|
|
if (! empty( $aData['SCH_WEEK_DAYS'] )) {
|
|
|
|
|
$aWeekDays = $aData['SCH_WEEK_DAYS'];
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
$sStartTime = $aData['SCH_START_TIME'];
|
2014-01-21 12:14:14 -04:00
|
|
|
$sWeeks = $aData['SCH_WEEK_DAYS'] . '|';
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
case '3':
|
|
|
|
|
$nStartDay = $aData['SCH_START_DAY'];
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($nStartDay == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_day can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
if ($nStartDay == 1) {
|
|
|
|
|
if ($aData['SCH_START_DAY_OPT_1'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_day_opt_1 can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
$temp = $aData['SCH_START_DAY_OPT_1'];
|
|
|
|
|
$temp = (int)$temp;
|
2014-01-24 08:32:08 -04:00
|
|
|
if ($temp >= 1 && $temp <= 31) {
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_START_DAY_OPT_1'] = $aData['SCH_START_DAY_OPT_1'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_day_opt_1. Must be between 1 and 31'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
$aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_1'];
|
2014-01-14 16:30:34 -04:00
|
|
|
} else {
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($aData['SCH_START_DAY_OPT_2'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_day_opt_2 can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
$aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_2'];
|
2014-01-30 12:01:54 -04:00
|
|
|
$optionTwo = $aData['SCH_START_DAY_OPT_2']{0};
|
2014-01-29 13:09:08 -04:00
|
|
|
if ($optionTwo == "1" || $optionTwo == "2" || $optionTwo == "3" || $optionTwo == "4" || $optionTwo == "5") {
|
|
|
|
|
$aData['SCH_START_DAY_OPT_2'] = $aData['SCH_START_DAY_OPT_2'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_day_opt_2'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
|
|
|
|
$pipelineTwo = $aData['SCH_START_DAY_OPT_2']{1};
|
|
|
|
|
if ($pipelineTwo == "|") {
|
|
|
|
|
$aData['SCH_START_DAY_OPT_2'] = $aData['SCH_START_DAY_OPT_2'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_day_opt_2'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
|
|
|
|
$dayTwo = $aData['SCH_START_DAY_OPT_2']{2};
|
|
|
|
|
if ($dayTwo == "1" || $dayTwo == "2" || $dayTwo == "3" || $dayTwo == "4" || $dayTwo == "5" || $dayTwo == "6" || $dayTwo == "7") {
|
|
|
|
|
$aData['SCH_START_DAY_OPT_2'] = $aData['SCH_START_DAY_OPT_2'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_start_day_opt_2'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
if ($nStartDay == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_start_day can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
if ($aData['SCH_MONTHS'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_months can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
if (! empty( $aData['SCH_MONTHS'] )) {
|
|
|
|
|
$aMonths = $aData['SCH_MONTHS'];
|
2014-01-29 13:09:08 -04:00
|
|
|
$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") {
|
|
|
|
|
$aData['SCH_MONTHS'] = $aData['SCH_MONTHS'];
|
|
|
|
|
} else {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_months'));
|
2014-01-29 13:09:08 -04:00
|
|
|
}
|
|
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
$sMonths = $aData['SCH_MONTHS'];
|
2014-01-14 16:30:34 -04:00
|
|
|
$sStartDay = $aData['SCH_START_DAY'];
|
|
|
|
|
$sValue = $nStartDay;
|
|
|
|
|
break;
|
|
|
|
|
}
|
2014-04-28 10:48:34 -04:00
|
|
|
|
2014-01-14 16:30:34 -04:00
|
|
|
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 {
|
2014-02-12 10:58:17 -04:00
|
|
|
$size = strlen($aData['SCH_START_DAY']);
|
2014-02-14 09:39:24 -04:00
|
|
|
if ($size > 4) {
|
2014-02-12 10:58:17 -04:00
|
|
|
$aaStartDay = explode( "|", $aData['SCH_START_DAY'] );
|
|
|
|
|
$aaStartDay[0] = $aaStartDay[0];
|
|
|
|
|
$aaStartDay[1] = $aaStartDay[1];
|
|
|
|
|
$aaStartDay[2]= ($aaStartDay[2] == 7 ? 1 : $aaStartDay[2]);
|
|
|
|
|
$sStartDay = $aaStartDay[0].'|'.$aaStartDay[1].'|'.$aaStartDay[2];
|
|
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
2014-02-11 17:08:17 -04:00
|
|
|
$dCurrentDay = date("d");
|
|
|
|
|
$dCurrentMonth = date("m");
|
2014-01-14 16:30:34 -04:00
|
|
|
$aStartDay = explode( "|", $aData['SCH_START_DAY'] );
|
2014-02-11 09:33:04 -04:00
|
|
|
$sDateTmp = '';
|
2014-01-14 16:30:34 -04:00
|
|
|
if ($sOption == '3' && $aStartDay[0] == '1') {
|
|
|
|
|
$monthsArray = explode( "|", $sMonths );
|
|
|
|
|
foreach ($monthsArray as $row) {
|
|
|
|
|
if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) {
|
2014-01-21 12:14:14 -04:00
|
|
|
$startTime = $aData['SCH_START_TIME'] . ":00";
|
2014-02-11 17:08:17 -04:00
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = date('Y') . '-' . $row . '-' . $aStartDay[1] . ' ' . $startTime;
|
2014-01-14 16:30:34 -04:00
|
|
|
break;
|
|
|
|
|
} else {
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if ($sOption == '4') {
|
2014-02-11 17:08:17 -04:00
|
|
|
$sDateTmp = date('Y-m-d');
|
|
|
|
|
$aData['SCH_START_TIME'] = date('Y-m-d', strtotime( $sDateTmp )) . ' ' . date('H:i:s', strtotime( $sTimeTmp ));
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_START_DATE'] = $aData['SCH_START_TIME'];
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData['SCH_END_DATE'] = $aData['SCH_START_TIME'];
|
|
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = $aData['SCH_START_TIME'];
|
2014-01-14 16:30:34 -04:00
|
|
|
if ($sOption == '5') {
|
2014-01-21 12:14:14 -04:00
|
|
|
if ($aData['SCH_START_DATE'] != '') {
|
|
|
|
|
$sDateTmp = $aData['SCH_START_DATE'];
|
|
|
|
|
} else {
|
2014-02-11 17:08:17 -04:00
|
|
|
$sDateTmp = date('Y-m-d');
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_START_DATE'] = $sDateTmp;
|
|
|
|
|
}
|
2014-01-24 08:32:08 -04:00
|
|
|
$aData['SCH_END_DATE'] = date('Y-m-d', strtotime($sDateTmp)) . ' ' . date('H:i:s', strtotime($sTimeTmp));
|
2014-01-21 12:14:14 -04:00
|
|
|
$aData['SCH_START_TIME'] = time();
|
|
|
|
|
$aData['SCH_START_DATE'] = $aData['SCH_START_TIME'];
|
|
|
|
|
if ($aData['SCH_REPEAT_EVERY'] == "") {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'sch_repeat_every can not be null'));
|
2014-01-21 12:14:14 -04:00
|
|
|
}
|
|
|
|
|
$patternHour="/^([0-1][0-9]|[2][0-3])[\.]([0-5][0-9])$/";
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!preg_match($patternHour, $aData['SCH_REPEAT_EVERY'])) {
|
2014-04-28 10:48:34 -04:00
|
|
|
throw (new \Exception( 'Invalid value specified for sch_repeat_every. Expecting time in HH.MM format'));
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
|
|
|
|
$nextRun = $aData['SCH_REPEAT_EVERY'] * 60 * 60;
|
|
|
|
|
$aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY'];
|
2014-01-21 12:14:14 -04:00
|
|
|
$date = $aData['SCH_START_TIME'];
|
2014-01-14 16:30:34 -04:00
|
|
|
$date += $nextRun;
|
2014-02-11 17:08:17 -04:00
|
|
|
$date = date("Y-m-d H:i", $date);
|
2014-01-14 16:30:34 -04:00
|
|
|
$aData['SCH_TIME_NEXT_RUN'] = $date;
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
if (trim( $aData['SCH_END_DATE'] ) != '') {
|
|
|
|
|
$aData['SCH_END_DATE'] = $aData['SCH_END_DATE'];
|
|
|
|
|
}
|
2014-01-14 16:30:34 -04:00
|
|
|
if (! empty( $aData['SCH_REPEAT_TASK_CHK'] )) {
|
|
|
|
|
$nOptEvery = $aData['SCH_REPEAT_EVERY_OPT'];
|
|
|
|
|
if ($nOptEvery == 2) {
|
|
|
|
|
$aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY'] * 60;
|
|
|
|
|
} else {
|
|
|
|
|
$aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY'];
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-21 12:14:14 -04:00
|
|
|
if ((isset( $aData['CASE_SH_PLUGIN_UID'] )) && ($aData['CASE_SH_PLUGIN_UID'] != "")) {
|
|
|
|
|
$aData['CASE_SH_PLUGIN_UID'] = $aData['CASE_SH_PLUGIN_UID'];
|
|
|
|
|
}
|
|
|
|
|
// check this data
|
|
|
|
|
$aData['SCH_REPEAT_UNTIL'] = '';
|
|
|
|
|
$aData['SCH_REPEAT_STOP_IF_RUNNING'] = '0';
|
|
|
|
|
$aData['CASE_SH_PLUGIN_UID'] = null;
|
|
|
|
|
//
|
2014-01-14 16:30:34 -04:00
|
|
|
$oCaseScheduler->Update($aData);
|
|
|
|
|
$oCriteria = $this->getCaseScheduler($sProcessUID, $sSchUID);
|
|
|
|
|
return $oCriteria;
|
|
|
|
|
} catch (\Exception $e) {
|
2014-01-24 08:32:08 -04:00
|
|
|
throw $e;
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete a case scheduler of a project
|
|
|
|
|
*
|
|
|
|
|
* @param string $sSchUID
|
|
|
|
|
*
|
|
|
|
|
* @access public
|
|
|
|
|
*/
|
2014-03-18 11:22:54 -04:00
|
|
|
public function deleteCaseScheduler($sSchUID)
|
2014-01-24 08:32:08 -04:00
|
|
|
{
|
2014-01-14 16:30:34 -04:00
|
|
|
try {
|
2014-04-02 16:51:28 -04:00
|
|
|
require_once(PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php");
|
2014-01-14 16:30:34 -04:00
|
|
|
$oCaseScheduler = new \CaseScheduler();
|
2014-01-24 08:32:08 -04:00
|
|
|
if (!isset($sSchUID)) {
|
2014-01-14 16:30:34 -04:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$oCaseScheduler->remove($sSchUID);
|
|
|
|
|
} catch (\Exception $e) {
|
2014-01-24 08:32:08 -04:00
|
|
|
throw $e;
|
2014-01-14 16:30:34 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-25 06:10:24 -04:00
|
|
|
|