diff --git a/workflow/engine/src/BusinessModel/CaseScheduler.php b/workflow/engine/src/BusinessModel/CaseScheduler.php new file mode 100644 index 000000000..190aa2c2e --- /dev/null +++ b/workflow/engine/src/BusinessModel/CaseScheduler.php @@ -0,0 +1,526 @@ +clearSelectColumns(); + $oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_UID ); + $oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_NAME ); + $oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_DEL_USER_NAME ); + $oCriteria->addSelectColumn( \CaseSchedulerPeer::SCH_DEL_USER_PASS ); + $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 { + $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_PASS ); + $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; + } + } + + + /** + * 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 { + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes". PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php"); + $aData = array_change_key_case($aData, CASE_UPPER); + $oCaseScheduler = new \CaseScheduler(); + if (empty($aData)) { + die( 'The information sended is empty!' ); + } + $aData['SCH_UID'] = \G::generateUniqueID(); + $aData['SCH_DEL_USER_PASS'] = md5( $aData['SCH_DEL_USER_PASS']); + $aData['SCH_STATE'] = 'ACTIVE'; + $aData['SCH_LAST_STATE'] = 'CREATED'; // 'ACTIVE'; + $aData['USR_UID'] = $userUID; + $sOption = $aData['SCH_OPTION']; + if ($aData['SCH_START_DATE'] != '') { + $sDateTmp = $aData['SCH_START_DATE']; + } else { + $sDateTmp = date( 'Y-m-d' ); + } + $sTimeTmp = $aData['SCH_START_TIME']; + // $aData['SCH_START_TIME'] = date( 'Y-m-d', strtotime( $sDateTmp ) ) . ' ' . date( 'H:i:s', strtotime( $sTimeTmp ) ); + // $aData['SCH_START_DATE'] = date( 'Y-m-d', strtotime( $sDateTmp ) ) . ' ' . date( 'H:i:s', strtotime( $sTimeTmp ) ); + $nActualTime = $aData['SCH_START_TIME']; // time(); + $sValue = ''; + $sDaysPerformTask = ''; + $sWeeks = ''; + $sMonths = ''; + $sMonths = ''; + $sStartDay = ''; + $nSW = 0; + switch ($sOption) { + case '1': // Option 1 + $sValue = $aData['SCH_DAYS_PERFORM_TASK']; + switch ($sValue) { + case '1': + $aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'] . '|1'; + 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 + $sDaysPerformTask = $aData['SCH_DAYS_PERFORM_TASK_OPT_3']; + $aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'] . '|' . $aData['SCH_DAYS_PERFORM_TASK_OPT_3']; + break; + } + break; + case '2': // If the option is zero, set by default 1 + if (empty( $aData['SCH_EVERY_DAYS'] )) { + $nEveryDays = 1; + } else { + $nEveryDays = $aData['SCH_EVERY_DAYS']; + } + $aData['SCH_EVERY_DAYS'] = $nEveryDays; + $sWeeks = ''; + if (! empty( $aData['SCH_WEEK_DAYS'] )) { + $aWeekDays = $aData['SCH_WEEK_DAYS']; + foreach ($aWeekDays as $value) { + $sWeeks = $sWeeks . $value . '|'; + } + } + if (! empty( $aData['SCH_WEEK_DAYS_2'] )) { + $aWeekDays2 = $aData['SCH_WEEK_DAYS_2']; + foreach ($aWeekDays2 as $value) { + $sWeeks = $sWeeks . $value . '|'; + } + } + $sStartTime = $aData['SCH_START_TIME']; + $aData['SCH_WEEK_DAYS'] = $sWeeks; + break; + case '3': + $nStartDay = $aData['SCH_START_DAY']; + if ($nStartDay == 1) { + $aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_1']; + } else { + $aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_2_WEEKS'] . '|' . $aData['SCH_START_DAY_OPT_2_DAYS_WEEK']; + } + + $sMonths = ''; + if (! empty( $aData['SCH_MONTHS'] )) { + $aMonths = $aData['SCH_MONTHS']; + foreach ($aMonths as $value) { + $sMonths = $sMonths . $value . '|'; + } + } + if (! empty( $aData['SCH_MONTHS_2'] )) { + $aMonths2 = $aData['SCH_MONTHS_2']; + foreach ($aMonths2 as $value) { + $sMonths = $sMonths . $value . '|'; + } + } + if (! empty( $aData['SCH_MONTHS_3'] )) { + $aMonths3 = $aData['SCH_MONTHS_3']; + foreach ($aMonths3 as $value) { + $sMonths = $sMonths . $value . '|'; + } + } + $aData['SCH_MONTHS'] = $sMonths; + $sStartDay = $aData['SCH_START_DAY']; + $sValue = $nStartDay; + break; + } + if (($sOption != '1') && ($sOption != '4') && ($sOption != '5')) { + if ($sStartDay == '') { + $sStartDay = date( 'Y-m-d' ); + } + $dCurrentDay = date( "d" ); + $dCurrentMonth = date( "m" ); + $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"; + $aData['SCH_TIME_NEXT_RUN'] = date( 'Y' ) . '-' . $row . '-' . $aStartDay[1] . ' ' . $startTime; + break; + } else { + $aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp ); + } + } + } else { +/* echo $sOption; echo " - "; + echo $sValue; echo " - "; echo $nActualTime; echo " - "; echo $sDaysPerformTask; echo " - "; echo $sWeeks; + echo " - "; echo $sStartDay; echo " - "; echo $sMonths; echo " - "; echo $sDateTmp; die(); + + */ + echo $sOption."*". $sValue."*". $nActualTime."*". $sDaysPerformTask."*". $sWeeks."*". $sStartDay ."*". $sMonths."
"; + $aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp ); + echo $aData['SCH_TIME_NEXT_RUN']; die (); + } + + } else { + if ($sOption == '4') { + $aData['SCH_END_DATE'] = $aData['SCH_START_TIME']; + } + + $aData['SCH_TIME_NEXT_RUN'] = $aData['SCH_START_TIME']; + + if ($sOption == 5) { + $aData['SCH_START_TIME'] = time(); + $aData['SCH_START_DATE'] = $aData['SCH_START_TIME']; + $nextRun = $aData['SCH_REPEAT_EVERY'] * 60 * 60; + $aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY']; + $date = $aData['SCH_START_TIME']; + $date += $nextRun; + $date = date( "Y-m-d H:i", $date ); + $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']; + } + $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 string $sSchUID + * @param array $aData + * @param string $userUID + * + * @access public + */ + public function updateCaseScheduler($sProcessUID, $sSchUID = '', $aData, $userUID) + { + try { + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes". PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php"); + $aData = array_change_key_case($aData, CASE_UPPER); + if (empty( $aData )) { + die( 'The information sended is empty!' ); + } + $oCaseScheduler = new \CaseScheduler(); + + $oCaseScheduler->Load($sSchUID); + $aData['SCH_DEL_USER_NAME'] = $aData['SCH_USER_NAME']; + if ($aData['SCH_USER_PASSWORD'] != 'DefaultPM') { + $aData['SCH_DEL_USER_PASS'] = md5( $aData['SCH_USER_PASSWORD'] ); + } + $aData['SCH_DEL_USER_UID'] = $aData['SCH_USER_UID']; + $aData['USR_UID'] = $userUID; + $sOption = $aData['SCH_OPTION']; + $sDateTmp = $aData['SCH_START_DATE']; + $sTimeTmp = $aData['SCH_START_TIME']; +// $aData['SCH_START_TIME'] = date( 'Y-m-d', strtotime( $sDateTmp ) ) . ' ' . date( 'H:i:s', strtotime( $sTimeTmp ) ); +// $aData['SCH_START_DATE'] = date( 'Y-m-d', strtotime( $sDateTmp ) ) . ' ' . date( 'H:i:s', strtotime( $sTimeTmp ) ); + $previousStartTime = date( 'Y-m-d', strtotime( $aData['PREV_SCH_START_DATE'] ) ) . ' ' . date( 'H:i:s', strtotime( $aData['PREV_SCH_START_TIME'] ) ); + $previousStartDate = date( 'Y-m-d', strtotime( $aData['PREV_SCH_START_DATE'] ) ) . ' ' . date( 'H:i:s', strtotime( $aData['PREV_SCH_START_TIME'] ) ); + $sValue = ''; + $sDaysPerformTask = ''; + $sWeeks = ''; + $sMonths = ''; + $sMonths = ''; + $sStartDay = ''; + $nSW = 0; + switch ($sOption) { + case '1': + // Option 1 + $sValue = $aData['SCH_DAYS_PERFORM_TASK']; + switch ($sValue) { + case '1': + $aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'] . '|1'; + break; + case '2': + $aData['SCH_OPTION'] = '2'; + $aData['SCH_EVERY_DAYS'] = '1'; + $aData['SCH_WEEK_DAYS'] = '1|2|3|4|5|'; + break; + case '3': // Every [n] Days + $sDaysPerformTask = $aData['SCH_DAYS_PERFORM_TASK_OPT_3']; + $aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'] . '|' . $aData['SCH_DAYS_PERFORM_TASK_OPT_3']; + break; + } + break; + case '2': + // If the option is zero, set by default 1 + if (empty( $aData['SCH_EVERY_DAYS'] )) { + $nEveryDays = 1; + } else { + $nEveryDays = $aData['SCH_EVERY_DAYS']; + } + $aData['SCH_EVERY_DAYS'] = $nEveryDays; + $sWeeks = ''; + if (! empty( $aData['SCH_WEEK_DAYS'] )) { + $aWeekDays = $aData['SCH_WEEK_DAYS']; + foreach ($aWeekDays as $value) { + $sWeeks = $sWeeks . $value . '|'; + } + } + if (! empty( $aData['SCH_WEEK_DAYS_2'] )) { + $aWeekDays2 = $aData['SCH_WEEK_DAYS_2']; + foreach ($aWeekDays2 as $value) { + $sWeeks = $sWeeks . $value . '|'; + } + } + $sStartTime = $aData['SCH_START_TIME']; + $aData['SCH_WEEK_DAYS'] = $sWeeks; + break; + case '3': + $nStartDay = $aData['SCH_START_DAY']; + if ($nStartDay == 1) { + $aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_1']; + } else { + $aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_2_WEEKS'] . '|' . $aData['SCH_START_DAY_OPT_2_DAYS_WEEK']; + } + + $sMonths = ''; + if (! empty( $aData['SCH_MONTHS'] )) { + $aMonths = $aData['SCH_MONTHS']; + foreach ($aMonths as $value) { + $sMonths = $sMonths . $value . '|'; + } + } + if (! empty( $aData['SCH_MONTHS_2'] )) { + $aMonths2 = $aData['SCH_MONTHS_2']; + foreach ($aMonths2 as $value) { + $sMonths = $sMonths . $value . '|'; + } + } + if (! empty( $aData['SCH_MONTHS_3'] )) { + $aMonths3 = $aData['SCH_MONTHS_3']; + foreach ($aMonths3 as $value) { + $sMonths = $sMonths . $value . '|'; + } + } + $aData['SCH_MONTHS'] = $sMonths; + $sStartDay = $aData['SCH_START_DAY']; + $sValue = $nStartDay; + break; + + } + if (trim( $aData['SCH_END_DATE'] ) != '') { + $aData['SCH_END_DATE'] = $aData['SCH_END_DATE']; + } + // if the start date has changed then recalculate the next run time + if ($aData['SCH_START_DATE'] == $aData['PREV_SCH_START_DATE']) { + $recalculateDate = false; + } else { + $recalculateDate = true; + } + if (date( 'H:i:s', strtotime( $aData['SCH_START_TIME'] ) ) == date( 'H:i:s', strtotime( $aData['PREV_SCH_START_TIME'] ) )) { + $recalculateTime = false; + } else { + $recalculateTime = true; + } + // if the start date has changed then recalculate the next run time + $nActualTime = $aData['SCH_START_TIME']; + if (($sOption != '1') && ($sOption != '4') && ($sOption != '5')) { + if ($sStartDay == '') { + $sStartDay = date( 'Y-m-d' ); + } + $dCurrentDay = date( "d" ); + $dCurrentMonth = date( "m" ); + $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 = $_POST['form']['SCH_START_TIME'] . ":00"; + if ($recalculateDate) { + $aData['SCH_TIME_NEXT_RUN'] = date( 'Y' ) . '-' . $row . '-' . $aStartDay[1] . ' ' . $startTime; + } elseif ($recalculateTime) { + $aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->getSchTimeNextRun( "Y-m-d" ) . " " . $_POST['form']['SCH_START_TIME'] . ":00"; + } + break; + } else { + if ($recalculateDate) { + $aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp ); + } elseif ($recalculateTime) { + $aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->getSchTimeNextRun( "Y-m-d" ) . " " . $_POST['form']['SCH_START_TIME'] . ":00"; + } + } + } + } else { + if ($recalculateDate) { + $aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp ); + } elseif ($recalculateTime) { + $aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->getSchTimeNextRun( "Y-m-d" ) . " " . $_POST['form']['SCH_START_TIME'] . ":00"; + } + } + } else { + if ($sOption == '4') { + $aData['SCH_END_DATE'] = $aData['SCH_START_TIME']; + } + if ($recalculateDate) { + $aData['SCH_TIME_NEXT_RUN'] = $aData['SCH_START_TIME']; + } elseif ($recalculateTime) { + $aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->getSchTimeNextRun( "Y-m-d" ) . " " . $aData['SCH_START_TIME'] . ":00"; + } + if ($sOption == '5') { + $date = $oCaseScheduler->getSchLastRunTime(); + if ($date == null) { + $date = $oCaseScheduler->getSchStartTime(); + } + $date = strtotime( $date ); + $nextRun = $aData['SCH_REPEAT_EVERY'] * 60 * 60; + $aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY']; + $date += $nextRun; + $date = date( "Y-m-d H:i", $date ); + $aData['SCH_TIME_NEXT_RUN'] = $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']; + } + } + $aData["SCH_UID"] = $sSchUID; + $oCaseScheduler->Update($aData); + $oCriteria = $this->getCaseScheduler($sProcessUID, $sSchUID); + return $oCriteria; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Delete a case scheduler of a project + * + * @param string $sProcessUID + * @param string $sSchUID + * + * @access public + */ + public function deleteCaseScheduler($sProcessUID, $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; + } + $oCaseScheduler->remove($sSchUID); + } catch (\Exception $e) { + throw $e; + } + } + +} + diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseScheduler.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseScheduler.php new file mode 100644 index 000000000..f1959c7c9 --- /dev/null +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseScheduler.php @@ -0,0 +1,242 @@ +getCaseSchedulers($prjUid); + //Response + $response = $arrayData; + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + + /** + * @param string $prjUid {@min 32} {@max 32} + * @param string $caseSchedulerUid {@min 32} {@max 32} + * + * @url GET /:prjUid/case-scheduler/:caseSchedulerUid + */ + public function doGetProjectCaseScheduler($prjUid, $caseSchedulerUid) + { + try { + $caseScheduler = new \BusinessModel\CaseScheduler(); + $objectData = $caseScheduler->getCaseScheduler($prjUid, $caseSchedulerUid); + //Response + $response = $objectData; + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + + /** + * @param string $prjUid {@min 32} {@max 32} + * @param CaseSchedulerStructure $request_data + * + * @url POST /:prjUid/case-scheduler + * + * @status 201 + */ + public function doPostProjectCaseScheduler($prjUid, CaseSchedulerStructure $request_data = null) + { + try { + $userUid = $this->getUserId(); + $request_data = (array)($request_data); + $caseScheduler = new \BusinessModel\CaseScheduler(); + $objectData = $caseScheduler->addCaseScheduler($prjUid, $request_data, $userUid); + //Response + $response = $objectData; + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + + /** + * @url PUT /:prjUid/case-scheduler/:schUid + * + * @param string $prjUid {@min 32} {@max 32} + * @param string $schUid {@min 32} {@max 32} + * @param CaseSchedulerStructure $request_data + * + */ + public function doPutProjectCaseScheduler($prjUid, $schUid, CaseSchedulerStructure $request_data) + { + try { + $userUid = $this->getUserId(); + $request_data = (array)($request_data); + $caseScheduler = new \BusinessModel\CaseScheduler(); + $objectData = $caseScheduler->updateCaseScheduler($prjUid, $schUid, $request_data, $userUid); + //Response + $response = $objectData; + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + + /** + * @url DELETE /:prjUid/case-scheduler/:schUid + * @param string $prjUid {@min 32} {@max 32} + * @param string $schUid {@min 32} {@max 32} + * + */ + public function doDeleteProjectCaseScheduler($prjUid, $schUid) + { + try { + $caseScheduler = new \BusinessModel\CaseScheduler(); + $caseScheduler->deleteCaseScheduler($prjUid, $schUid); + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + +} + +class CaseSchedulerStructure +{ /** + * @var string {@from body} {@min 0} {@max 100} + */ + public $sch_name; + + /** + * @var string {@from body} {@min 0} {@max 100} + */ + public $sch_del_user_name; + + /** + * @var string {@from body} {@min 0} {@max 100} + */ + public $sch_del_user_pass; + + /** + * @var string {@from body} {@min 0} {@max 100} + */ + public $sch_del_user_uid; + + /** + * @var string {@from body} {@min 32} {@max 32} + */ + public $pro_uid; + + /** + * @var string {@from body} {@min 32} {@max 32} + */ + public $tas_uid; + + /** + * @var string {@from body} + */ + public $sch_time_next_run; + + /** + * @var string {@from body} + */ + public $sch_last_run_time; + + /** + * @var string {@from body} {@min 0} {@max 15} + */ + public $sch_state; + + /** + * @var string {@from body} {@min 0} {@max 15} + */ + public $sch_last_state; + + /** + * @var string {@from body} {@min 32} {@max 32} + */ + public $usr_uid; + + /** + * @var string {@from body} + */ + public $sch_option; + + /** + * @var string {@from body} + */ + public $sch_start_time; + + /** + * @var string {@from body} + */ + public $sch_start_date; + + /** + * @var string {@from body} {@min 0} {@max 5} + */ + public $sch_days_perform_task; + + /** + * @var string {@from body} {@min 0} {@max 4} + */ + public $sch_every_days; + + /** + * @var string {@from body} {@min 0} {@max 14} + */ + public $sch_week_days; + + /** + * @var string {@from body} {@min 0} {@max 6} + */ + public $sch_start_day; + + /** + * @var string {@from body} {@min 0} {@max 24} + */ + public $sch_months; + + /** + * @var string {@from body} + */ + public $sch_end_date; + + /** + * @var string {@from body} {@min 0} {@max 15} + */ + public $sch_repeat_every; + + /** + * @var string {@from body} {@min 0} {@max 15} + */ + public $sch_repeat_until; + + /** + * @var string {@from body} {@min 0} {@max 4} + */ + public $sch_repeat_stop_if_running; + + /** + * @var string {@from body} {@min 0} {@max 100} + */ + public $case_sh_plugin_uid; +} + \ No newline at end of file