/**
  * Update job schedule
  * 
  * @param ilCronJob $a_job
  * @param int $a_schedule_type
  * @param int $a_schedule_value
  */
 public static function updateJobSchedule(ilCronJob $a_job, $a_schedule_type, $a_schedule_value)
 {
     global $ilDB;
     if ($a_schedule_type === null || $a_job->hasFlexibleSchedule() && in_array($a_schedule_type, $a_job->getValidScheduleTypes())) {
         $sql = "UPDATE cron_job SET " . " schedule_type = " . $ilDB->quote($a_schedule_type, "integer") . " , schedule_value = " . $ilDB->quote($a_schedule_value, "integer") . " WHERE job_id = " . $ilDB->quote($a_job->getId(), "text");
         $ilDB->manipulate($sql);
     }
 }
 protected function parseJobToData(array $a_item, ilCronJob $job)
 {
     global $lng;
     $res = $a_item;
     $res["title"] = $job->getTitle();
     $res["description"] = $job->getDescription();
     $res["has_settings"] = $job->hasCustomSettings();
     if (!$res["title"]) {
         $res["title"] = $a_item["job_id"];
     }
     // schedule
     if (!$job->hasFlexibleSchedule()) {
         // schedule type changed
         if ($a_item["schedule_type"]) {
             ilCronManager::updateJobSchedule($job, null, null);
         }
         $a_item["schedule_type"] = $job->getDefaultScheduleType();
         $a_item["schedule_value"] = $job->getDefaultScheduleValue();
         $res["editable_schedule"] = false;
     } else {
         // schedule type changed
         if (!$a_item["schedule_type"]) {
             $a_item["schedule_type"] = $job->getDefaultScheduleType();
             $a_item["schedule_value"] = $job->getDefaultScheduleValue();
             ilCronManager::updateJobSchedule($job, $a_item["schedule_type"], $a_item["schedule_value"]);
         }
         $res["editable_schedule"] = true;
     }
     switch ($a_item["schedule_type"]) {
         case ilCronJob::SCHEDULE_TYPE_DAILY:
             $schedule = $lng->txt("cron_schedule_daily");
             break;
         case ilCronJob::SCHEDULE_TYPE_WEEKLY:
             $schedule = $lng->txt("cron_schedule_weekly");
             break;
         case ilCronJob::SCHEDULE_TYPE_MONTHLY:
             $schedule = $lng->txt("cron_schedule_monthly");
             break;
         case ilCronJob::SCHEDULE_TYPE_QUARTERLY:
             $schedule = $lng->txt("cron_schedule_quarterly");
             break;
         case ilCronJob::SCHEDULE_TYPE_YEARLY:
             $schedule = $lng->txt("cron_schedule_yearly");
             break;
         case ilCronJob::SCHEDULE_TYPE_IN_MINUTES:
             $schedule = sprintf($lng->txt("cron_schedule_in_minutes"), $a_item["schedule_value"]);
             break;
         case ilCronJob::SCHEDULE_TYPE_IN_HOURS:
             $schedule = sprintf($lng->txt("cron_schedule_in_hours"), $a_item["schedule_value"]);
             break;
         case ilCronJob::SCHEDULE_TYPE_IN_DAYS:
             $schedule = sprintf($lng->txt("cron_schedule_in_days"), $a_item["schedule_value"]);
             break;
     }
     $res["schedule"] = $schedule;
     // status
     if ($a_item["job_status"]) {
         $res["status"] = $lng->txt("cron_status_active");
     } else {
         $res["status"] = $lng->txt("cron_status_inactive");
     }
     $status_info = array();
     if ($a_item["job_status_ts"]) {
         $status_info[] = ilDatePresentation::formatDate(new ilDateTime($a_item["job_status_ts"], IL_CAL_UNIX));
     }
     if (!$a_item["job_status_type"]) {
         $status_info[] = $lng->txt("cron_changed_by_crontab");
     } else {
         $status_info[] = ilUserUtil::getNamePresentation($a_item["job_status_user_id"]);
     }
     $res["status_info"] = implode("<br />", $status_info);
     // result
     $result = "-";
     if ($a_item["job_result_status"]) {
         switch ($a_item["job_result_status"]) {
             case ilCronJobResult::STATUS_INVALID_CONFIGURATION:
                 $result = $lng->txt("cron_result_status_invalid_configuration");
                 break;
             case ilCronJobResult::STATUS_NO_ACTION:
                 $result = $lng->txt("cron_result_status_no_action");
                 break;
             case ilCronJobResult::STATUS_OK:
                 $result = $lng->txt("cron_result_status_ok");
                 break;
             case ilCronJobResult::STATUS_CRASHED:
                 $result = $lng->txt("cron_result_status_crashed");
                 break;
             case ilCronJobResult::STATUS_RESET:
                 $result = $lng->txt("cron_result_status_reset");
                 break;
         }
     }
     $res["result"] = $result;
     $result_info = array();
     if ($a_item["job_result_dur"]) {
         $result_info[] = $a_item["job_result_dur"] / 1000 . " sec";
     }
     if ($a_item["job_result_message"]) {
         $result_info[] = $a_item["job_result_message"];
     }
     if (DEVMODE && $a_item["job_result_code"]) {
         $result_info[] = $a_item["job_result_code"];
     }
     if (!$a_item["job_result_type"]) {
         $result_info[] = $lng->txt("cron_changed_by_crontab");
     } else {
         $result_info[] = ilUserUtil::getNamePresentation($a_item["job_result_user_id"]);
     }
     $res["result_info"] = implode("<br />", $result_info);
     if ($a_item["running_ts"]) {
         $res["last_run"] = strtotime("+1year", $a_item["running_ts"]);
     } else {
         if ($a_item["job_result_ts"]) {
             $res["last_run"] = $a_item["job_result_ts"];
         } else {
             $res["last_run"] = null;
         }
     }
     $res['is_manually_executable'] = $job->isManuallyExecutable();
     return $res;
 }