コード例 #1
0
 /**
  * Update case scheduler for a project
  * @param string $sProcessUID
  * @param array  $caseSchedulerData
  * @param string $userUID
  * @param string $sSchUID
  *
  * @access public
  */
 public function updateCaseScheduler($sProcessUID, $caseSchedulerData, $userUID, $sSchUID = '')
 {
     try {
         require_once PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "CaseScheduler.php";
         $caseSchedulerData = array_change_key_case($caseSchedulerData, CASE_UPPER);
         if (empty($caseSchedulerData)) {
             die(\G::LoadTranslation("ID_INFORMATION_EMPTY"));
         }
         $oCaseScheduler = new \CaseScheduler();
         $aFields = $oCaseScheduler->Load($sSchUID);
         if ($caseSchedulerData['SCH_OPTION'] == null) {
             $sOption = $aFields['SCH_OPTION'];
             $caseSchedulerData['SCH_OPTION'] = $sOption;
         } else {
             $sOption = $caseSchedulerData['SCH_OPTION'];
         }
         $caseSchedulerData['sch_repeat_stop_if_running'] = '0';
         $caseSchedulerData['case_sh_plugin_uid'] = null;
         $caseSchedulerData = array_change_key_case($caseSchedulerData, CASE_UPPER);
         $arrayTaskUid = $this->getTaskUid($caseSchedulerData['TAS_UID']);
         if (empty($arrayTaskUid)) {
             throw new \Exception(\G::LoadTranslation("ID_TASK_NOT_FOUND", array($caseSchedulerData['TAS_UID'])));
         }
         if ($caseSchedulerData['SCH_NAME'] == '') {
             throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_EMPTY", array('sch_name')));
         }
         if ($this->existsNameUpdate($sProcessUID, $sSchUID, $caseSchedulerData['SCH_NAME'])) {
             throw new \Exception(\G::LoadTranslation("ID_CASE_SCHEDULER_DUPLICATE"));
         }
         $mUser = $this->getUser($caseSchedulerData['SCH_DEL_USER_NAME'], $caseSchedulerData['TAS_UID']);
         $oUser = \UsersPeer::retrieveByPK($mUser);
         if (is_null($oUser)) {
             throw new \Exception($mUser);
         }
         $oUserPass = $oUser->getUsrPassword();
         $caseSchedulerData['SCH_DEL_USER_PASS'] = $oUserPass;
         if ($sOption != '5') {
             $pattern = "/^([0-1][0-9]|[2][0-3])[\\:]([0-5][0-9])\$/";
             if (!preg_match($pattern, $caseSchedulerData['SCH_START_TIME'])) {
                 throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_TIME"));
             }
         }
         $patternDate = "/^[0-9]{4}-[0-9]{2}-[0-9]{2}\$/";
         if ($sOption == '1' || $sOption == '2' || $sOption == '3') {
             if (!preg_match($patternDate, $caseSchedulerData['SCH_START_DATE'])) {
                 throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_DATE"));
             }
             if ($caseSchedulerData['SCH_START_DATE'] == "") {
                 throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_date')));
             }
         }
         if ($sOption == '2') {
             $caseSchedulerData['SCH_EVERY_DAYS'] = 1;
         } else {
             $caseSchedulerData['SCH_EVERY_DAYS'] = 0;
         }
         $oCaseScheduler = new \CaseScheduler();
         $caseSchedulerData['SCH_UID'] = $sSchUID;
         $caseSchedulerData['PRO_UID'] = $sProcessUID;
         if ($caseSchedulerData['SCH_STATE'] == "" || $caseSchedulerData['SCH_STATE'] == null) {
             throw new \Exception('sch_state can not be null');
         } else {
             if ($caseSchedulerData['SCH_STATE'] == 'ACTIVE') {
                 $caseSchedulerData['SCH_LAST_STATE'] = 'CREATED';
             } else {
                 $caseSchedulerData['SCH_LAST_STATE'] = 'ACTIVE';
             }
         }
         $caseSchedulerData['USR_UID'] = $userUID;
         $caseSchedulerData['SCH_DEL_USER_UID'] = $caseSchedulerData['USR_UID'];
         $sTimeTmp = $caseSchedulerData['SCH_START_TIME'];
         $nActualTime = $caseSchedulerData['SCH_START_TIME'];
         // time();
         $sValue = '';
         $sDaysPerformTask = '';
         $sWeeks = '';
         $sMonths = '';
         $sStartDay = '';
         $caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = '';
         switch ($sOption) {
             case '1':
                 // If the option is zero, set by default 1
                 $caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = '1';
                 $sValue = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
                 switch ($sValue) {
                     case '1':
                         $caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'] . '|1';
                         $caseSchedulerData['SCH_MONTHS'] = '0|0|0|0|0|0|0|0|0|0|0|0';
                         $caseSchedulerData['SCH_WEEK_DAYS'] = '0|0|0|0|0|0|0';
                         break;
                     case '2':
                         $caseSchedulerData['SCH_OPTION'] = '2';
                         $caseSchedulerData['SCH_EVERY_DAYS'] = '1';
                         //check
                         $caseSchedulerData['SCH_WEEK_DAYS'] = '1|2|3|4|5|';
                         //check
                         break;
                     case '3':
                         // Every [n] Days
                         $sDaysPerformTask = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
                         $caseSchedulerData['SCH_DAYS_PERFORM_TASK'] = $caseSchedulerData['SCH_DAYS_PERFORM_TASK'];
                         break;
                 }
                 break;
             case '2':
                 // If the option is zero, set by default 1
                 if ($caseSchedulerData['SCH_WEEK_DAYS'] == "") {
                     throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_week_days')));
                 } else {
                     $weeks = $caseSchedulerData['SCH_WEEK_DAYS'];
                     $weeks = explode("|", $weeks);
                     foreach ($weeks as $row) {
                         if ($row == "1" || $row == "2" || $row == "3" || $row == "4" || $row == "5" || $row == "6" || $row == "7") {
                             $caseSchedulerData['SCH_WEEK_DAYS'] = $caseSchedulerData['SCH_WEEK_DAYS'];
                         } else {
                             throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_week_days')));
                         }
                     }
                 }
                 $caseSchedulerData['SCH_MONTHS'] = '0|0|0|0|0|0|0|0|0|0|0|0';
                 if (empty($caseSchedulerData['SCH_EVERY_DAYS'])) {
                     $nEveryDays = 1;
                 } else {
                     $nEveryDays = $caseSchedulerData['SCH_EVERY_DAYS'];
                 }
                 $caseSchedulerData['SCH_EVERY_DAYS'] = $nEveryDays;
                 if (!empty($caseSchedulerData['SCH_WEEK_DAYS'])) {
                     $aWeekDays = $caseSchedulerData['SCH_WEEK_DAYS'];
                 }
                 $sStartTime = $caseSchedulerData['SCH_START_TIME'];
                 $sWeeks = $caseSchedulerData['SCH_WEEK_DAYS'] . '|';
                 break;
             case '3':
                 $nStartDay = $caseSchedulerData['SCH_START_DAY'];
                 if ($nStartDay == "") {
                     throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day')));
                 }
                 if ($nStartDay == 1) {
                     if ($caseSchedulerData['SCH_START_DAY_OPT_1'] == "") {
                         throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day_opt_1')));
                     }
                     $temp = $caseSchedulerData['SCH_START_DAY_OPT_1'];
                     $temp = (int) $temp;
                     if ($temp >= 1 && $temp <= 31) {
                         $caseSchedulerData['SCH_START_DAY_OPT_1'] = $caseSchedulerData['SCH_START_DAY_OPT_1'];
                     } else {
                         throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_START_DAY_1"));
                     }
                     $caseSchedulerData['SCH_START_DAY'] = $nStartDay . '|' . $caseSchedulerData['SCH_START_DAY_OPT_1'];
                 } else {
                     if ($caseSchedulerData['SCH_START_DAY_OPT_2'] == "") {
                         throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day_opt_2')));
                     }
                     $caseSchedulerData['SCH_START_DAY'] = $nStartDay . '|' . $caseSchedulerData['SCH_START_DAY_OPT_2'];
                     $optionTwo = $caseSchedulerData['SCH_START_DAY_OPT_2'][0];
                     if ($optionTwo == "1" || $optionTwo == "2" || $optionTwo == "3" || $optionTwo == "4" || $optionTwo == "5") {
                         $caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
                     } else {
                         throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
                     }
                     $pipelineTwo = $caseSchedulerData['SCH_START_DAY_OPT_2'][1];
                     if ($pipelineTwo == "|") {
                         $caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
                     } else {
                         throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
                     }
                     $dayTwo = $caseSchedulerData['SCH_START_DAY_OPT_2'][2];
                     if ($dayTwo == "1" || $dayTwo == "2" || $dayTwo == "3" || $dayTwo == "4" || $dayTwo == "5" || $dayTwo == "6" || $dayTwo == "7") {
                         $caseSchedulerData['SCH_START_DAY_OPT_2'] = $caseSchedulerData['SCH_START_DAY_OPT_2'];
                     } else {
                         throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_start_day_opt_2')));
                     }
                 }
                 if ($nStartDay == "") {
                     throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_start_day')));
                 }
                 if ($caseSchedulerData['SCH_MONTHS'] == "") {
                     throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_months')));
                 }
                 if (!empty($caseSchedulerData['SCH_MONTHS'])) {
                     $aMonths = $caseSchedulerData['SCH_MONTHS'];
                     $aMonths = explode("|", $aMonths);
                     foreach ($aMonths as $row) {
                         if ($row == "1" || $row == "2" || $row == "3" || $row == "4" || $row == "5" || $row == "6" || $row == "7" || $row == "8" || $row == "9" || $row == "10" || $row == "11" || $row == "12") {
                             $caseSchedulerData['SCH_MONTHS'] = $caseSchedulerData['SCH_MONTHS'];
                         } else {
                             throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('sch_months')));
                         }
                     }
                 }
                 $sMonths = $caseSchedulerData['SCH_MONTHS'];
                 $sStartDay = $caseSchedulerData['SCH_START_DAY'];
                 $sValue = $nStartDay;
                 break;
         }
         if ($sOption != '1' && $sOption != '4' && $sOption != '5') {
             if ($sStartDay == '') {
                 $sStartDay = date('Y-m-d');
             } else {
                 $size = strlen($caseSchedulerData['SCH_START_DAY']);
                 if ($size > 4) {
                     $aaStartDay = explode("|", $caseSchedulerData['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];
                 }
             }
             $dCurrentDay = date("d");
             $dCurrentMonth = date("m");
             $aStartDay = explode("|", $caseSchedulerData['SCH_START_DAY']);
             $sDateTmp = '';
             if ($sOption == '3' && $aStartDay[0] == '1') {
                 $monthsArray = explode("|", $sMonths);
                 foreach ($monthsArray as $row) {
                     if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) {
                         $startTime = $caseSchedulerData['SCH_START_TIME'] . ":00";
                         $caseSchedulerData['SCH_TIME_NEXT_RUN'] = date('Y') . '-' . $row . '-' . $aStartDay[1] . ' ' . $startTime;
                         break;
                     } else {
                         $caseSchedulerData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun($sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp);
                     }
                 }
             } else {
                 $caseSchedulerData['SCH_TIME_NEXT_RUN'] = $oCaseScheduler->updateNextRun($sOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp);
             }
         } else {
             if ($sOption == '4') {
                 $sDateTmp = date('Y-m-d');
                 $caseSchedulerData['SCH_START_TIME'] = date('Y-m-d', strtotime($sDateTmp)) . ' ' . date('H:i:s', strtotime($sTimeTmp));
                 $caseSchedulerData['SCH_START_DATE'] = $caseSchedulerData['SCH_START_TIME'];
                 $caseSchedulerData['SCH_END_DATE'] = $caseSchedulerData['SCH_START_TIME'];
             }
             $caseSchedulerData['SCH_TIME_NEXT_RUN'] = $caseSchedulerData['SCH_START_TIME'];
             if ($sOption == '5') {
                 if ($caseSchedulerData['SCH_START_DATE'] != '') {
                     $sDateTmp = $caseSchedulerData['SCH_START_DATE'];
                 } else {
                     $sDateTmp = date('Y-m-d');
                     $caseSchedulerData['SCH_START_DATE'] = $sDateTmp;
                 }
                 $caseSchedulerData['SCH_START_TIME'] = time();
                 $caseSchedulerData['SCH_START_DATE'] = $caseSchedulerData['SCH_START_TIME'];
                 if ($caseSchedulerData['SCH_REPEAT_EVERY'] == "") {
                     throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('sch_repeat_every')));
                 }
                 $patternHour = "/^([0-9]|0[0-9]|1[0-9]|2[0-3]).[0-5][0-9]\$/";
                 if (!preg_match($patternHour, $caseSchedulerData['SCH_REPEAT_EVERY'])) {
                     throw new \Exception(\G::LoadTranslation("ID_INVALID_SCH_REPEAT"));
                 }
                 $nextRun = $caseSchedulerData['SCH_REPEAT_EVERY'] * 60 * 60;
                 $caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'];
                 $date = $caseSchedulerData['SCH_START_TIME'];
                 $date += $nextRun;
                 $date = date("Y-m-d H:i", $date);
                 $caseSchedulerData['SCH_TIME_NEXT_RUN'] = $date;
             }
         }
         if (!empty($caseSchedulerData['SCH_REPEAT_TASK_CHK'])) {
             if (trim($caseSchedulerData['SCH_END_DATE']) != '') {
                 $caseSchedulerData['SCH_END_DATE'] = $caseSchedulerData['SCH_END_DATE'];
             }
         }
         if (!empty($caseSchedulerData['SCH_REPEAT_TASK_CHK'])) {
             $nOptEvery = $caseSchedulerData['SCH_REPEAT_EVERY_OPT'];
             if ($nOptEvery == 2) {
                 $caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'] * 60;
             } else {
                 $caseSchedulerData['SCH_REPEAT_EVERY'] = $caseSchedulerData['SCH_REPEAT_EVERY'];
             }
         }
         if (isset($caseSchedulerData['CASE_SH_PLUGIN_UID']) && $caseSchedulerData['CASE_SH_PLUGIN_UID'] != "") {
             $caseSchedulerData['CASE_SH_PLUGIN_UID'] = $caseSchedulerData['CASE_SH_PLUGIN_UID'];
         }
         // check this data
         $caseSchedulerData['SCH_REPEAT_UNTIL'] = '';
         $caseSchedulerData['SCH_REPEAT_STOP_IF_RUNNING'] = '0';
         $caseSchedulerData['CASE_SH_PLUGIN_UID'] = null;
         //
         $oCaseScheduler->Update($caseSchedulerData);
         $oCriteria = $this->getCaseScheduler($sProcessUID, $sSchUID);
         return $oCriteria;
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #2
0
    /**
     * Create/Update CaseScheduler
     *
     * @param string $caseSchedulerUid      Unique id of CaseScheduler
     * @param string $projectUid            Unique id of Project
     * @param string $userUidCreatorUpdater Unique id of creator/updater User
     * @param array  $arrayData             Data
     * @param array  $arrayDataPlugin       Data plugin
     *
     * return void
     */
    public function createUpdate($caseSchedulerUid, $projectUid, $userUidCreatorUpdater, array $arrayData, array $arrayDataPlugin = array())
    {
        try {
            //Set variables
            $flagInsert = ($caseSchedulerUid == "")? true : false;
            $option = ($flagInsert)? "INS" : "UPD";

            //Set data
            if ($flagInsert) {
                $caseSchedulerUid = \ProcessMaker\Util\Common::generateUID();
            }

            foreach ($arrayData as $key => $value) {
                if (is_array($value)) {
                    foreach ($value as $key2 => $value2) {
                        $arrayData[$key][$key2] = trim($value2);
                    }
                } else {
                    $arrayData[$key] = trim($value);
                }
            }

            $arrayCaseSchedulerData = array();
            $arrayCaseSchedulerData["SCH_UID"]  = $caseSchedulerUid;
            $arrayCaseSchedulerData["SCH_NAME"] = $arrayData["SCH_NAME"];
            $arrayCaseSchedulerData["PRO_UID"]  = $projectUid;
            $arrayCaseSchedulerData["TAS_UID"]  = $arrayData["TAS_UID"];

            $arrayCaseSchedulerData["SCH_DEL_USER_UID"] = $arrayData["SCH_USER_UID"];
            $arrayCaseSchedulerData["SCH_DEL_USER_NAME"] = $arrayData["SCH_USER_NAME"];

            switch ($option) {
                case "INS":
                    $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]);

                    $arrayCaseSchedulerData["SCH_STATE"] = "ACTIVE";
                    $arrayCaseSchedulerData["SCH_LAST_STATE"] = "CREATED";

                    $sDateTmp = ($arrayData["SCH_START_DATE"] != "")? $arrayData["SCH_START_DATE"] : date("Y-m-d");
                    break;
                case "UPD":
                    if ($arrayData["SCH_USER_PASSWORD"] != "DefaultPM") {
                        $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]);
                    }

                    $sDateTmp = $arrayData["SCH_START_DATE"];
                    break;
            }

            $caseSchedulerOption = (int)($arrayData["SCH_OPTION"]);

            $arrayCaseSchedulerData["USR_UID"] = $userUidCreatorUpdater;
            $arrayCaseSchedulerData["SCH_OPTION"] = $caseSchedulerOption;
            $arrayCaseSchedulerData["SCH_START_TIME"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"]));
            $arrayCaseSchedulerData["SCH_START_DATE"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"]));

            $sValue = "";
            $sDaysPerformTask = "";
            $sWeeks = "";
            $sMonths = "";
            $sStartDay = "";

            switch ($option) {
                case "INS":
                    $arrayCaseSchedulerData["SCH_START_DAY"] = "";
                    $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = "";
                    $arrayCaseSchedulerData["SCH_REPEAT_UNTIL"] = "";
                    $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = "";
                    break;
                case "UPD":
                    break;
            }

            switch ($caseSchedulerOption) {
                case 1:
                    //Option 1
                    $sValue = $arrayData["SCH_DAYS_PERFORM_TASK"];

                    switch ($sValue) {
                        case "1":
                            $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|1";
                            break;
                        case "2":
                            $arrayCaseSchedulerData["SCH_OPTION"] = "2";
                            $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = "1";
                            $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = "1|2|3|4|5|";
                            break;
                        case "3":
                            //Every [n] Days
                            $sDaysPerformTask = $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"];
                            $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|" . $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"];
                            break;
                    }
                    break;
                case 2:
                    //If the option is zero, set by default 1
                    $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = (empty($arrayData["SCH_EVERY_DAYS"]))? 1 : $arrayData["SCH_EVERY_DAYS"];

                    $sWeeks = "";

                    if (!empty($arrayData["SCH_WEEK_DAYS"])) {
                        $aWeekDays = $arrayData["SCH_WEEK_DAYS"];

                        foreach ($aWeekDays as $value) {
                            $sWeeks = $sWeeks . $value . "|";
                        }
                    }

                    if (!empty($arrayData["SCH_WEEK_DAYS_2"])) {
                        $aWeekDays2 = $arrayData["SCH_WEEK_DAYS_2"];

                        foreach ($aWeekDays2 as $value) {
                            $sWeeks = $sWeeks . $value . "|";
                        }
                    }

                    $sStartTime = $arrayData["SCH_START_TIME"];
                    $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = $sWeeks;
                    break;
                case 3:
                    $nStartDay = $arrayData["SCH_START_DAY"];

                    if ($nStartDay == 1) {
                        $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_1"];
                    } else {
                        $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_2_WEEKS"] . "|" . $arrayData["SCH_START_DAY_OPT_2_DAYS_WEEK"];
                    }

                    $sMonths = "";

                    if (!empty($arrayData["SCH_MONTHS"])) {
                        $aMonths = $arrayData["SCH_MONTHS"];

                        foreach ($aMonths as $value) {
                            $sMonths = $sMonths . $value . "|";
                        }
                    }

                    if (!empty($arrayData["SCH_MONTHS_2"])) {
                        $aMonths2 = $arrayData["SCH_MONTHS_2"];

                        foreach ($aMonths2 as $value) {
                            $sMonths = $sMonths . $value . "|";
                        }
                    }

                    if (!empty($arrayData["SCH_MONTHS_3"])) {
                        $aMonths3 = $arrayData["SCH_MONTHS_3"];

                        foreach ($aMonths3 as $value) {
                            $sMonths = $sMonths . $value . "|";
                        }
                    }

                    $arrayCaseSchedulerData["SCH_MONTHS"] = $sMonths;
                    $sStartDay = $arrayCaseSchedulerData["SCH_START_DAY"];
                    $sValue = $nStartDay;
                    break;
            }

            $caseScheduler = new \CaseScheduler();

            switch ($option) {
                case "INS":
                    break;
                case "UPD":
                    $arrayDataAux = $caseScheduler->load($caseSchedulerUid);

                    if ($arrayData["SCH_END_DATE"] != "") {
                        $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"];
                    }

                    //If the start date has changed then recalculate the next run time
                    $recalculateDate = ($arrayData["SCH_START_DATE"] == $arrayData["PREV_SCH_START_DATE"])? false : true;
                    $recalculateTime = (date("H:i:s", strtotime($arrayData["SCH_START_TIME"])) == date("H:i:s", strtotime($arrayData["PREV_SCH_START_TIME"])))? false : true;
                    break;
            }

            $nActualTime = $arrayData["SCH_START_TIME"];

            if ($caseSchedulerOption != 1 && $caseSchedulerOption != 4 && $caseSchedulerOption != 5) {
                if ($sStartDay == "") {
                    $sStartDay = date("Y-m-d");
                }

                $dCurrentDay = (int)(date("d"));
                $dCurrentMonth = (int)(date("m"));

                $aStartDay = explode("|", $arrayCaseSchedulerData["SCH_START_DAY"]);

                if ($caseSchedulerOption == 3 && $aStartDay[0] == "1") {
                    $monthsArray = explode("|", $sMonths);

                    foreach ($monthsArray as $row) {
                        switch ($option) {
                            case "INS":
                                if ((int)($row) == $dCurrentMonth && $dCurrentDay <= (int)($aStartDay[1])) {
                                    $startTime = $arrayData["SCH_START_TIME"] . ":00";
                                    $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y") . "-" . $row . "-" . $aStartDay[1] . " " . $startTime;
                                    break;
                                } else {
                                    $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
                                }
                                break;
                            case "UPD":
                                if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) {
                                    $startTime = $arrayData["SCH_START_TIME"] . ":00";

                                    if ($recalculateDate) {
                                        $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y") . "-" . $row . "-" . $aStartDay[1] . " " . $startTime;
                                    } else {
                                        if ($recalculateTime) {
                                            $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
                                        }
                                    }
                                    break;
                                } else {
                                    if ($recalculateDate) {
                                        $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
                                    } else {
                                        if ($recalculateTime) {
                                            $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
                                        }
                                    }
                                }
                                break;
                        }
                    }
                } else {
                    switch ($option) {
                        case "INS":
                            $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
                            break;
                        case "UPD":
                            if ($recalculateDate) {
                                $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
                            } else {
                                if ($recalculateTime) {
                                    $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
                                }
                            }
                            break;
                    }
                }
            } else {
                if ($caseSchedulerOption == 4) {
                    $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"];
                }

                switch ($option) {
                    case "INS":
                        $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $arrayCaseSchedulerData["SCH_START_TIME"];
                        break;
                    case "UPD":
                        if ($recalculateDate) {
                            $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $arrayCaseSchedulerData["SCH_START_TIME"];
                        } else {
                            if ($recalculateTime) {
                                $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
                            }
                        }
                        break;
                }

                if ($caseSchedulerOption == 5) {
                    switch ($option) {
                        case "INS":
                            $arrayCaseSchedulerData["SCH_START_TIME"] = time();
                            $arrayCaseSchedulerData["SCH_START_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"];

                            $date = $arrayCaseSchedulerData["SCH_START_TIME"];
                            break;
                        case "UPD":
                            $date = $caseScheduler->getSchLastRunTime();

                            if (is_null($date)) {
                                $date = $caseScheduler->getSchStartTime();
                            }

                            $date = strtotime($date);
                            break;
                    }

                    $arrayCaseSchedulerData["SCH_REPEAT_EVERY"]  = $arrayData["SCH_REPEAT_EVERY"];
                    $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y-m-d H:i", $date + (((int)($arrayData["SCH_REPEAT_EVERY"])) * 60 * 60));
                }
            }

            switch ($option) {
                case "INS":
                    if ($arrayData["SCH_END_DATE"] != "") {
                        $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"];
                    }
                    break;
                case "UPD":
                    break;
            }

            if (!empty($arrayData["SCH_REPEAT_TASK_CHK"])) {
                if ($arrayData["SCH_REPEAT_EVERY_OPT"] . "" == "2") {
                    $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = ((int)($arrayData["SCH_REPEAT_EVERY"])) * 60;
                } else {
                    $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = (int)($arrayData["SCH_REPEAT_EVERY"]);
                }
            }

            //Create/Update
            switch ($option) {
                case "INS":
                    if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") {
                        $arrayCaseSchedulerData["CASE_SH_PLUGIN_UID"] = $arrayData["CASE_SH_PLUGIN_UID"];
                    }

                    $caseScheduler->create($arrayCaseSchedulerData);
                    break;
                case "UPD":
                    $caseScheduler->update($arrayCaseSchedulerData);
                    break;
            }

            //Plugin
            if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") {
                $oPluginRegistry = &\PMPluginRegistry::getSingleton();
                $activePluginsForCaseScheduler = $oPluginRegistry->getCaseSchedulerPlugins();

                $params = explode("--", $arrayData["CASE_SH_PLUGIN_UID"]);

                foreach ($activePluginsForCaseScheduler as $key => $caseSchedulerPluginDetail) {
                    if ($caseSchedulerPluginDetail->sNamespace == $params[0] && $caseSchedulerPluginDetail->sActionId == $params[1]) {
                        $caseSchedulerSelected = $caseSchedulerPluginDetail;
                    }
                }

                if (isset($caseSchedulerSelected) && is_object($caseSchedulerSelected)) {
                    //Save the form
                    $arrayDataPlugin["SCH_UID"] = $arrayCaseSchedulerData["SCH_UID"];
                    $oPluginRegistry->executeMethod($caseSchedulerPluginDetail->sNamespace, $caseSchedulerPluginDetail->sActionSave, $arrayDataPlugin);
                }
            }
        } catch (\Exception $e) {
            throw $e;
        }
    }