Merged in darojas/processmaker (pull request #98)
Se modifican los metodos POST y PUT para case scheduler, se adicionan validaciones. Behat para Case scheduler. Se mofifican algunas descripciones en output-documents. Validaciones process supervisor
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
@ProcessMakerMichelangelo @RestAPI
|
||||
Feature: Case Scheduler Resources
|
||||
|
||||
Background:
|
||||
Given that I have a valid access_token
|
||||
|
||||
Scenario: Create a new case scheduler for a project
|
||||
Given POST this data:
|
||||
"""
|
||||
{
|
||||
"sch_option": "3",
|
||||
"sch_name": "Test scheduler #1",
|
||||
"sch_del_user_name": "admin",
|
||||
"sch_del_user_pass": "admin",
|
||||
"tas_uid": "46941969352af5be2ab3f39001216717",
|
||||
"sch_start_time": "18:00",
|
||||
"sch_start_date": "2014-01-20",
|
||||
"sch_end_date": "2014-01-20",
|
||||
"sch_every_days": "",
|
||||
"sch_week_days": "",
|
||||
"sch_start_day": "1",
|
||||
"sch_start_day_opt_1": "2",
|
||||
"sch_start_day_opt_2": "",
|
||||
"sch_months": "1|6|12",
|
||||
"sch_repeat_every": "",
|
||||
"sch_repeat_until": ""
|
||||
}
|
||||
"""
|
||||
And I request "project/1265557095225ff5c688f46031700471/case-scheduler"
|
||||
Then the response status code should be 201
|
||||
And the response charset is "UTF-8"
|
||||
And the content type is "application/json"
|
||||
And the type is "object"
|
||||
And store "sch_uid" in session array as variable "sch_uid"
|
||||
|
||||
Scenario: Get a List of case scheduler of a project
|
||||
Given I request "project/1265557095225ff5c688f46031700471/case-schedulers"
|
||||
Then the response status code should be 200
|
||||
And the response charset is "UTF-8"
|
||||
And the content type is "application/json"
|
||||
And the type is "array"
|
||||
And the response has 1 record
|
||||
|
||||
Scenario: Get a single case scheduler of a project
|
||||
Given that I want to get a resource with the key "sch_uid" stored in session array
|
||||
And I request "project/1265557095225ff5c688f46031700471/case-scheduler"
|
||||
Then the response status code should be 200
|
||||
And the content type is "application/json"
|
||||
And the type is "object"
|
||||
|
||||
Scenario: Update a case scheduler for a project
|
||||
Given PUT this data:
|
||||
"""
|
||||
{
|
||||
"sch_name": "Test scheduler #1 modify",
|
||||
"sch_del_user_name": "admin",
|
||||
"sch_del_user_pass": "admin",
|
||||
"tas_uid": "46941969352af5be2ab3f39001216717",
|
||||
"sch_start_time": "20:00",
|
||||
"sch_start_date": "2014-02-01",
|
||||
"sch_end_date": "2014-02-01",
|
||||
"sch_every_days": "",
|
||||
"sch_week_days": "",
|
||||
"sch_start_day": "1",
|
||||
"sch_start_day_opt_1": "2",
|
||||
"sch_start_day_opt_2": "",
|
||||
"sch_months": "1|6|12",
|
||||
"sch_repeat_every": "",
|
||||
"sch_repeat_until": ""
|
||||
}
|
||||
"""
|
||||
And that I want to update a resource with the key "sch_uid" stored in session array
|
||||
And I request "project/1265557095225ff5c688f46031700471/case-scheduler"
|
||||
And the content type is "application/json"
|
||||
Then the response status code should be 200
|
||||
And the response charset is "UTF-8"
|
||||
And the type is "object"
|
||||
|
||||
Scenario: Delete a case scheduler of a project
|
||||
Given that I want to delete a resource with the key "sch_uid" stored in session array
|
||||
And I request "project/1265557095225ff5c688f46031700471/case-scheduler"
|
||||
Then the response status code should be 200
|
||||
And the response charset is "UTF-8"
|
||||
@@ -113,6 +113,98 @@ class CaseScheduler
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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();
|
||||
} 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($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();
|
||||
} catch (\Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the user exists
|
||||
*
|
||||
* @param string $userName Name
|
||||
* @param string $userPass Password
|
||||
*
|
||||
* return bool Return true if the user exists, false otherwise
|
||||
*/
|
||||
public function getUser($userName, $userPass)
|
||||
{
|
||||
try {
|
||||
$criteria = new \Criteria("workflow");
|
||||
$criteria->addSelectColumn(\UsersPeer::USR_UID);
|
||||
$criteria->add(\UsersPeer::USR_USERNAME, $userName, \Criteria::EQUAL);
|
||||
$criteria->add(\UsersPeer::USR_PASSWORD, $userPass, \Criteria::EQUAL);
|
||||
$rsCriteria = \UsersPeer::doSelectRS($criteria);
|
||||
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
$rsCriteria->next();
|
||||
return $rsCriteria->getRow();
|
||||
} catch (\Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new case scheduler of a project
|
||||
@@ -127,26 +219,55 @@ class CaseScheduler
|
||||
{
|
||||
try {
|
||||
require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes". PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php");
|
||||
$aData['sch_repeat_stop_if_running'] = '0';
|
||||
$aData['case_sh_plugin_uid'] = null;
|
||||
$aData = array_change_key_case($aData, CASE_UPPER);
|
||||
$oCaseScheduler = new \CaseScheduler();
|
||||
$sOption = $aData['SCH_OPTION'];
|
||||
if (empty($aData)) {
|
||||
die( 'The information sended is empty!' );
|
||||
}
|
||||
$aData['SCH_UID'] = \G::generateUniqueID();
|
||||
die( 'the information sended is empty!' );
|
||||
}
|
||||
$arrayTaskUid = $this->getTaskUid($aData['TAS_UID']);
|
||||
if (empty($arrayTaskUid)) {
|
||||
throw (new \Exception( 'task not found for id: '. $aData['TAS_UID']));
|
||||
}
|
||||
if ($this->existsName($sProcessUID, $aData['SCH_NAME'])) {
|
||||
throw (new \Exception( 'duplicate Case Scheduler name'));
|
||||
}
|
||||
$aData['SCH_DEL_USER_PASS'] = md5( $aData['SCH_DEL_USER_PASS']);
|
||||
$arrayUser = $this->getUser($aData['SCH_DEL_USER_NAME'], $aData['SCH_DEL_USER_PASS']);
|
||||
if (empty($arrayUser)) {
|
||||
throw (new \Exception( 'invalid user or password'));
|
||||
}
|
||||
if ($sOption != '5') {
|
||||
$pattern="/^([0-1][0-9]|[2][0-3])[\:]([0-5][0-9])$/";
|
||||
if(!preg_match($pattern, $aData['SCH_START_TIME'])) {
|
||||
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)'));
|
||||
}
|
||||
}
|
||||
$patternDate="/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/";
|
||||
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
|
||||
if(!preg_match($patternDate, $aData['SCH_START_DATE'])) {
|
||||
throw (new \Exception( 'invalid value specified for `sch_start_date`. Expecting date in `YYYY-MM-DD` format, such as `2014-01-01`'));
|
||||
}
|
||||
}
|
||||
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
|
||||
if(!preg_match($patternDate, $aData['SCH_END_DATE'])) {
|
||||
throw (new \Exception( 'invalid value specified for `sch_end_date`. Expecting date in `YYYY-MM-DD` format, such as `2014-01-01`'));
|
||||
}
|
||||
}
|
||||
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
|
||||
if($aData['SCH_START_DATE'] == "") {
|
||||
throw (new \Exception( '`sch_start_date` can`t be null'));
|
||||
}
|
||||
}
|
||||
$oCaseScheduler = new \CaseScheduler();
|
||||
$aData['SCH_UID'] = \G::generateUniqueID();
|
||||
$aData['PRO_UID'] = $sProcessUID;
|
||||
$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' );
|
||||
}
|
||||
$aData['SCH_DEL_USER_UID'] = $aData['USR_UID'];
|
||||
$sTimeTmp = $aData['SCH_START_TIME'];
|
||||
//echo $sDateTmp ." ------- " .$sTimeTmp; die();
|
||||
// $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 = '';
|
||||
@@ -155,12 +276,16 @@ class CaseScheduler
|
||||
$sMonths = '';
|
||||
$sStartDay = '';
|
||||
$nSW = 0;
|
||||
$aData['SCH_DAYS_PERFORM_TASK'] = '';
|
||||
switch ($sOption) {
|
||||
case '1': // Option 1
|
||||
$aData['SCH_DAYS_PERFORM_TASK'] = '1';
|
||||
$sValue = $aData['SCH_DAYS_PERFORM_TASK'];
|
||||
switch ($sValue) {
|
||||
case '1':
|
||||
$aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'] . '|1';
|
||||
$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';
|
||||
break;
|
||||
case '2':
|
||||
$aData['SCH_OPTION'] = '2';
|
||||
@@ -174,6 +299,20 @@ class CaseScheduler
|
||||
}
|
||||
break;
|
||||
case '2': // If the option is zero, set by default 1
|
||||
if($aData['SCH_WEEK_DAYS'] == "") {
|
||||
throw (new \Exception( '`sch_week_days` can`t be null'));
|
||||
} 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") {
|
||||
$aData['SCH_WEEK_DAYS'] = $aData['SCH_WEEK_DAYS'];
|
||||
} else {
|
||||
throw (new \Exception( 'invalid value specified for `sch_week_days`'));
|
||||
}
|
||||
}
|
||||
}
|
||||
$aData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
|
||||
if (empty( $aData['SCH_EVERY_DAYS'] )) {
|
||||
$nEveryDays = 1;
|
||||
} else {
|
||||
@@ -185,16 +324,38 @@ class CaseScheduler
|
||||
$aWeekDays = $aData['SCH_WEEK_DAYS'];
|
||||
}
|
||||
$sStartTime = $aData['SCH_START_TIME'];
|
||||
$sWeeks = $aData['SCH_WEEK_DAYS'];
|
||||
$sWeeks = $aData['SCH_WEEK_DAYS'] . '|';
|
||||
break;
|
||||
case '3':
|
||||
$nStartDay = $aData['SCH_START_DAY'];
|
||||
if ($nStartDay == "") {
|
||||
throw (new \Exception( '`sch_start_day` can`t be null'));
|
||||
}
|
||||
if ($nStartDay == 1) {
|
||||
if ($aData['SCH_START_DAY_OPT_1'] == "") {
|
||||
throw (new \Exception( '`sch_start_day_opt_1` can`t be null'));
|
||||
}
|
||||
$temp = $aData['SCH_START_DAY_OPT_1'];
|
||||
$temp = (int)$temp;
|
||||
if($temp >= 1 && $temp <= 31) {
|
||||
$aData['SCH_START_DAY_OPT_1'] = $aData['SCH_START_DAY_OPT_1'];
|
||||
} else {
|
||||
throw (new \Exception( 'invalid value specified for `sch_start_day_opt_1`. Must be between 1 and 31'));
|
||||
}
|
||||
$aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_1'];
|
||||
} else {
|
||||
if ($aData['SCH_START_DAY_OPT_2'] == "") {
|
||||
throw (new \Exception( '`sch_start_day_opt_2` can`t be null'));
|
||||
}
|
||||
$aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_2'];
|
||||
}
|
||||
if ($nStartDay == "") {
|
||||
throw (new \Exception( '`sch_start_day` can`t be null'));
|
||||
}
|
||||
$sMonths = '';
|
||||
if ($aData['SCH_MONTHS'] == "") {
|
||||
throw (new \Exception( '`sch_months` can`t be null'));
|
||||
}
|
||||
if (! empty( $aData['SCH_MONTHS'] )) {
|
||||
$aMonths = $aData['SCH_MONTHS'];
|
||||
}
|
||||
@@ -222,21 +383,33 @@ class CaseScheduler
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
echo "1*".$sOption." 2*". $sValue." 3*". $nActualTime." 4*". $sDaysPerformTask." 5*". $sWeeks." 6*". $sStartDay ." 7*". $sMonths."<br>";
|
||||
$aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
|
||||
echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($sOption == '4') {
|
||||
$sDateTmp = date( 'Y-m-d' );
|
||||
$aData['SCH_START_TIME'] = date( 'Y-m-d', strtotime( $sDateTmp ) ) . ' ' . date( 'H:i:s', strtotime( $sTimeTmp ) );
|
||||
$aData['SCH_START_DATE'] = $aData['SCH_START_TIME'];
|
||||
$aData['SCH_END_DATE'] = $aData['SCH_START_TIME'];
|
||||
}
|
||||
|
||||
$aData['SCH_TIME_NEXT_RUN'] = $aData['SCH_START_TIME'];
|
||||
|
||||
if ($sOption == 5) {
|
||||
if ($sOption == '5') {
|
||||
if ($aData['SCH_START_DATE'] != '') {
|
||||
$sDateTmp = $aData['SCH_START_DATE'];
|
||||
} else {
|
||||
$sDateTmp = date( 'Y-m-d' );
|
||||
$aData['SCH_START_DATE'] = $sDateTmp;
|
||||
}
|
||||
$aData['SCH_END_DATE'] = date( 'Y-m-d', strtotime( $sDateTmp ) ) . ' ' . date( 'H:i:s', strtotime( $sTimeTmp ) );
|
||||
$aData['SCH_START_TIME'] = time();
|
||||
$aData['SCH_START_DATE'] = $aData['SCH_START_TIME'];
|
||||
if ($aData['SCH_REPEAT_EVERY'] == "") {
|
||||
throw (new \Exception( '`sch_repeat_every` can`t be null'));
|
||||
}
|
||||
$patternHour="/^([0-1][0-9]|[2][0-3])[\.]([0-5][0-9])$/";
|
||||
if(!preg_match($patternHour, $aData['SCH_REPEAT_EVERY'])) {
|
||||
throw (new \Exception( 'invalid value specified for `sch_repeat_every`. Expecting time in HH.MM format (The time can not be increased to 23.59)'));
|
||||
}
|
||||
$nextRun = $aData['SCH_REPEAT_EVERY'] * 60 * 60;
|
||||
$aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY'];
|
||||
$date = $aData['SCH_START_TIME'];
|
||||
@@ -259,6 +432,11 @@ echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
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;
|
||||
//
|
||||
$oCaseScheduler->create( $aData );
|
||||
$oCriteria = $this->getCaseScheduler($sProcessUID, $aData['SCH_UID']);
|
||||
return $oCriteria;
|
||||
@@ -285,21 +463,58 @@ echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
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'] );
|
||||
$aFields = $oCaseScheduler->Load($sSchUID);
|
||||
$sOption = $aFields['SCH_OPTION'];
|
||||
$aData['SCH_OPTION'] = $sOption;
|
||||
$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!' );
|
||||
}
|
||||
$aData['SCH_DEL_USER_UID'] = $aData['SCH_USER_UID'];
|
||||
$arrayTaskUid = $this->getTaskUid($aData['TAS_UID']);
|
||||
if (empty($arrayTaskUid)) {
|
||||
throw (new \Exception( 'task not found for id: '. $aData['TAS_UID']));
|
||||
}
|
||||
if ($this->existsNameUpdate($sSchUID, $aData['SCH_NAME'])) {
|
||||
throw (new \Exception( 'duplicate Case Scheduler name'));
|
||||
}
|
||||
$aData['SCH_DEL_USER_PASS'] = md5( $aData['SCH_DEL_USER_PASS']);
|
||||
$arrayUser = $this->getUser($aData['SCH_DEL_USER_NAME'], $aData['SCH_DEL_USER_PASS']);
|
||||
if (empty($arrayUser)) {
|
||||
throw (new \Exception( 'invalid user or password'));
|
||||
}
|
||||
if ($sOption != '5') {
|
||||
$pattern="/^([0-1][0-9]|[2][0-3])[\:]([0-5][0-9])$/";
|
||||
if(!preg_match($pattern, $aData['SCH_START_TIME'])) {
|
||||
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)'));
|
||||
}
|
||||
}
|
||||
$patternDate="/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/";
|
||||
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
|
||||
if(!preg_match($patternDate, $aData['SCH_START_DATE'])) {
|
||||
throw (new \Exception( 'invalid value specified for `sch_start_date`. Expecting date in `YYYY-MM-DD` format, such as `2014-01-01`'));
|
||||
}
|
||||
}
|
||||
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
|
||||
if(!preg_match($patternDate, $aData['SCH_END_DATE'])) {
|
||||
throw (new \Exception( 'invalid value specified for `sch_end_date`. Expecting date in `YYYY-MM-DD` format, such as `2014-01-01`'));
|
||||
}
|
||||
}
|
||||
if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
|
||||
if($aData['SCH_START_DATE'] == "") {
|
||||
throw (new \Exception( '`sch_start_date` can`t be null'));
|
||||
}
|
||||
}
|
||||
$oCaseScheduler = new \CaseScheduler();
|
||||
$aData['SCH_UID'] = $sSchUID;
|
||||
$aData['PRO_UID'] = $sProcessUID;
|
||||
$aData['SCH_STATE'] = 'ACTIVE';
|
||||
$aData['SCH_LAST_STATE'] = 'CREATED'; // 'ACTIVE';
|
||||
$aData['USR_UID'] = $userUID;
|
||||
$sOption = $aData['SCH_OPTION'];
|
||||
$sDateTmp = $aData['SCH_START_DATE'];
|
||||
$aData['SCH_DEL_USER_UID'] = $aData['USR_UID'];
|
||||
$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'] ) );
|
||||
$nActualTime = $aData['SCH_START_TIME']; // time();
|
||||
$sValue = '';
|
||||
$sDaysPerformTask = '';
|
||||
$sWeeks = '';
|
||||
@@ -307,18 +522,21 @@ echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
$sMonths = '';
|
||||
$sStartDay = '';
|
||||
$nSW = 0;
|
||||
$aData['SCH_DAYS_PERFORM_TASK'] = '';
|
||||
switch ($sOption) {
|
||||
case '1':
|
||||
// Option 1
|
||||
case '1': // Option 1
|
||||
$aData['SCH_DAYS_PERFORM_TASK'] = '1';
|
||||
$sValue = $aData['SCH_DAYS_PERFORM_TASK'];
|
||||
switch ($sValue) {
|
||||
case '1':
|
||||
$aData['SCH_DAYS_PERFORM_TASK'] = $aData['SCH_DAYS_PERFORM_TASK'] . '|1';
|
||||
$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';
|
||||
break;
|
||||
case '2':
|
||||
$aData['SCH_OPTION'] = '2';
|
||||
$aData['SCH_EVERY_DAYS'] = '1';
|
||||
$aData['SCH_WEEK_DAYS'] = '1|2|3|4|5|';
|
||||
$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'];
|
||||
@@ -326,8 +544,21 @@ echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case '2':
|
||||
// If the option is zero, set by default 1
|
||||
case '2': // If the option is zero, set by default 1
|
||||
if($aData['SCH_WEEK_DAYS'] == "") {
|
||||
throw (new \Exception( '`sch_week_days` can`t be null'));
|
||||
} 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") {
|
||||
$aData['SCH_WEEK_DAYS'] = $aData['SCH_WEEK_DAYS'];
|
||||
} else {
|
||||
throw (new \Exception( 'invalid value specified for `sch_week_days`'));
|
||||
}
|
||||
}
|
||||
}
|
||||
$aData['SCH_MONTHS'] ='0|0|0|0|0|0|0|0|0|0|0|0';
|
||||
if (empty( $aData['SCH_EVERY_DAYS'] )) {
|
||||
$nEveryDays = 1;
|
||||
} else {
|
||||
@@ -337,42 +568,48 @@ echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
$sWeeks = '';
|
||||
if (! empty( $aData['SCH_WEEK_DAYS'] )) {
|
||||
$aWeekDays = $aData['SCH_WEEK_DAYS'];
|
||||
}
|
||||
}
|
||||
$sStartTime = $aData['SCH_START_TIME'];
|
||||
$sWeeks = $aData['SCH_WEEK_DAYS'];
|
||||
$sWeeks = $aData['SCH_WEEK_DAYS'] . '|';
|
||||
break;
|
||||
case '3':
|
||||
$nStartDay = $aData['SCH_START_DAY'];
|
||||
/* if ($nStartDay == 1) {
|
||||
$aData['SCH_START_DAY'] = $nStartDay;
|
||||
if ($nStartDay == "") {
|
||||
throw (new \Exception( '`sch_start_day` can`t be null'));
|
||||
}
|
||||
if ($nStartDay == 1) {
|
||||
if ($aData['SCH_START_DAY_OPT_1'] == "") {
|
||||
throw (new \Exception( '`sch_start_day_opt_1` can`t be null'));
|
||||
}
|
||||
$temp = $aData['SCH_START_DAY_OPT_1'];
|
||||
$temp = (int)$temp;
|
||||
if($temp >= 1 && $temp <= 31) {
|
||||
$aData['SCH_START_DAY_OPT_1'] = $aData['SCH_START_DAY_OPT_1'];
|
||||
} else {
|
||||
throw (new \Exception( 'invalid value specified for `sch_start_day_opt_1`. Must be between 1 and 31'));
|
||||
}
|
||||
$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'];
|
||||
}*/
|
||||
if ($aData['SCH_START_DAY_OPT_2'] == "") {
|
||||
throw (new \Exception( '`sch_start_day_opt_2` can`t be null'));
|
||||
}
|
||||
$aData['SCH_START_DAY'] = $nStartDay . '|' . $aData['SCH_START_DAY_OPT_2'];
|
||||
}
|
||||
if ($nStartDay == "") {
|
||||
throw (new \Exception( '`sch_start_day` can`t be null'));
|
||||
}
|
||||
$sMonths = '';
|
||||
if ($aData['SCH_MONTHS'] == "") {
|
||||
throw (new \Exception( '`sch_months` can`t be null'));
|
||||
}
|
||||
if (! empty( $aData['SCH_MONTHS'] )) {
|
||||
$aMonths = $aData['SCH_MONTHS'];
|
||||
}
|
||||
$aData['SCH_MONTHS'] = $sMonths;
|
||||
$sMonths = $aData['SCH_MONTHS'];
|
||||
$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' );
|
||||
@@ -384,50 +621,52 @@ echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
$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";
|
||||
}
|
||||
$startTime = $aData['SCH_START_TIME'] . ":00";
|
||||
$aData['SCH_TIME_NEXT_RUN'] = date( 'Y' ) . '-' . $row . '-' . $aStartDay[1] . ' ' . $startTime;
|
||||
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";
|
||||
}
|
||||
$aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
|
||||
}
|
||||
}
|
||||
} 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";
|
||||
}
|
||||
$aData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun( $sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp );
|
||||
}
|
||||
} else {
|
||||
if ($sOption == '4') {
|
||||
$sDateTmp = date( 'Y-m-d' );
|
||||
$aData['SCH_START_TIME'] = date( 'Y-m-d', strtotime( $sDateTmp ) ) . ' ' . date( 'H:i:s', strtotime( $sTimeTmp ) );
|
||||
$aData['SCH_START_DATE'] = $aData['SCH_START_TIME'];
|
||||
$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";
|
||||
}
|
||||
$aData['SCH_TIME_NEXT_RUN'] = $aData['SCH_START_TIME'];
|
||||
if ($sOption == '5') {
|
||||
$date = $oCaseScheduler->getSchLastRunTime();
|
||||
if ($date == null) {
|
||||
$date = $oCaseScheduler->getSchStartTime();
|
||||
if ($aData['SCH_START_DATE'] != '') {
|
||||
$sDateTmp = $aData['SCH_START_DATE'];
|
||||
} else {
|
||||
$sDateTmp = date( 'Y-m-d' );
|
||||
$aData['SCH_START_DATE'] = $sDateTmp;
|
||||
}
|
||||
$aData['SCH_END_DATE'] = date( 'Y-m-d', strtotime( $sDateTmp ) ) . ' ' . date( 'H:i:s', strtotime( $sTimeTmp ) );
|
||||
$aData['SCH_START_TIME'] = time();
|
||||
$aData['SCH_START_DATE'] = $aData['SCH_START_TIME'];
|
||||
if ($aData['SCH_REPEAT_EVERY'] == "") {
|
||||
throw (new \Exception( '`sch_repeat_every` can`t be null'));
|
||||
}
|
||||
$patternHour="/^([0-1][0-9]|[2][0-3])[\.]([0-5][0-9])$/";
|
||||
if(!preg_match($patternHour, $aData['SCH_REPEAT_EVERY'])) {
|
||||
throw (new \Exception( 'invalid value specified for `sch_repeat_every`. Expecting time in HH.MM format (The time can not be increased to 23.59)'));
|
||||
}
|
||||
$date = strtotime( $date );
|
||||
$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) {
|
||||
@@ -436,7 +675,14 @@ echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
$aData['SCH_REPEAT_EVERY'] = $aData['SCH_REPEAT_EVERY'];
|
||||
}
|
||||
}
|
||||
$aData["SCH_UID"] = $sSchUID;
|
||||
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;
|
||||
//
|
||||
$oCaseScheduler->Update($aData);
|
||||
$oCriteria = $this->getCaseScheduler($sProcessUID, $sSchUID);
|
||||
return $oCriteria;
|
||||
@@ -466,6 +712,4 @@ echo "<br> SCH_TIME_NEXT_RUN ".$aData['SCH_TIME_NEXT_RUN'];
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -362,13 +362,13 @@ class OutputDocument
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the title exists in the InputDocuments of Process
|
||||
* Checks if the title exists in the OutputDocuments of Process
|
||||
*
|
||||
* @param string $processUid Unique id of Process
|
||||
* @param string $title Title
|
||||
* @param string $inputDocumentUidExclude Unique id of InputDocument to exclude
|
||||
* @param string $outputDocumentUidExclude Unique id of InputDocument to exclude
|
||||
*
|
||||
* return bool Return true if the title exists in the InputDocuments of Process, false otherwise
|
||||
* return bool Return true if the title exists in the OutputDocuments of Process, false otherwise
|
||||
*/
|
||||
public function existsTitle($processUid, $title)
|
||||
{
|
||||
|
||||
@@ -63,6 +63,9 @@ class ProcessSupervisor
|
||||
'usr_email' => $aRow['USR_EMAIL'] );
|
||||
$oDataset->next();
|
||||
}
|
||||
if ($aResp == null){
|
||||
$aResp = array();
|
||||
}
|
||||
return $aResp;
|
||||
} catch (Exception $e) {
|
||||
throw $e;
|
||||
@@ -215,6 +218,7 @@ class ProcessSupervisor
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_EMAIL);
|
||||
$oCriteria->add(\UsersPeer::USR_UID, $aUIDS, \Criteria::IN);
|
||||
$oCriteria->addAscendingOrderByColumn(\UsersPeer::USR_FIRSTNAME);
|
||||
$oCriteria->add(\UsersPeer::USR_ROLE, 'PROCESSMAKER_ADMIN', \Criteria::EQUAL);
|
||||
$oDataset = \UsersPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
$oDataset->next();
|
||||
@@ -295,6 +299,10 @@ class ProcessSupervisor
|
||||
public function getProcessSupervisorDynaform($sProcessUID = '', $sPudUID = '')
|
||||
{
|
||||
try {
|
||||
$oDynaformSupervisor = \StepSupervisorPeer::retrieveByPK( $sPudUID );
|
||||
if (is_null( $oDynaformSupervisor ) ) {
|
||||
throw (new \Exception( 'This id: '. $sPudUID .' do not correspond to a registered process supervisor '));
|
||||
}
|
||||
$sDelimiter = \DBAdapter::getStringDelimiter();
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_UID);
|
||||
@@ -440,6 +448,10 @@ class ProcessSupervisor
|
||||
public function getProcessSupervisorInputDocument($sProcessUID = '', $sPuiUID = '')
|
||||
{
|
||||
try {
|
||||
$oInputDocumentSupervisor = \StepSupervisorPeer::retrieveByPK( $sPuiUID );
|
||||
if (is_null( $oInputDocumentSupervisor ) ) {
|
||||
throw (new \Exception( 'This id: '. $sPuiUID .' do not correspond to a registered process supervisor '));
|
||||
}
|
||||
$sDelimiter = \DBAdapter::getStringDelimiter();
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_UID);
|
||||
@@ -610,7 +622,7 @@ class ProcessSupervisor
|
||||
{
|
||||
$oTypeDynaform = \DynaformPeer::retrieveByPK($sDynUID);
|
||||
if (is_null( $oTypeDynaform )) {
|
||||
throw (new \Exception( 'This id: '. $sDynUID .' do not correspond to a registered Dynaform'));
|
||||
throw (new \Exception( 'This id for `dyn_uid`: '. $sDynUID .' do not correspond to a registered Dynaform'));
|
||||
}
|
||||
$sDelimiter = \DBAdapter::getStringDelimiter();
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
@@ -691,7 +703,7 @@ class ProcessSupervisor
|
||||
{
|
||||
$oTypeInputDocument= \InputDocumentPeer::retrieveByPK($sInputDocumentUID);
|
||||
if (is_null( $oTypeInputDocument )) {
|
||||
throw (new \Exception( 'This id: '. $sInputDocumentUID .' do not correspond to a registered InputDocument'));
|
||||
throw (new \Exception( 'This id for `inp_doc_uid`: '. $sInputDocumentUID .' do not correspond to a registered InputDocument'));
|
||||
}
|
||||
$sDelimiter = \DBAdapter::getStringDelimiter();
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
|
||||
@@ -175,7 +175,7 @@ class CaseSchedulerStructure
|
||||
public $usr_uid;
|
||||
|
||||
/**
|
||||
* @var string {@from body}
|
||||
* @var string {@from body} {@choice 1,2,3,4,5}
|
||||
*/
|
||||
public $sch_option;
|
||||
|
||||
@@ -205,7 +205,7 @@ class CaseSchedulerStructure
|
||||
public $sch_week_days;
|
||||
|
||||
/**
|
||||
* @var string {@from body} {@choice 1,2}
|
||||
* @var string {@from body} {@choice 1,2,}
|
||||
*/
|
||||
public $sch_start_day;
|
||||
|
||||
@@ -233,19 +233,5 @@ class CaseSchedulerStructure
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user