| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 2015 Eclipse Foundation and others. | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * | |
| * Contributors: | |
| * Eric Poirier (Eclipse Foundation) - initial API and implementation | |
| * Christopher Guindon (Eclipse Foundation) | |
| *******************************************************************************/ | |
| require_once(realpath(dirname(__FILE__) . "/../../system/app.class.php")); | |
| require_once("webmaster.class.php"); | |
| class Jobs extends Webmaster{ | |
| private $job_status = NULL; | |
| private $pending_jobs = NULL; | |
| private $rsync_config_job = "/home/admin/rsync.configs.sh"; | |
| public function __construct(App $App){ | |
| parent::__construct($App); | |
| if ($this->getFormName() === 'webmaster-jobs') { | |
| if ($this->getState() === 'add_job') { | |
| $this->_addScheduledJobs(); | |
| } | |
| } | |
| } | |
| /** | |
| * This function gets the Jobs status | |
| * | |
| * @return array | |
| * */ | |
| public function getJobStatus() { | |
| if (is_null($this->job_status)) { | |
| $this->_fetchJobStatus(); | |
| } | |
| return $this->job_status; | |
| } | |
| /** | |
| * This function gets the Pending Jobs | |
| * | |
| * @return array | |
| * */ | |
| public function getPendingJobs() { | |
| if (is_null($this->pending_jobs)) { | |
| $this->_fetchPendingJobs(); | |
| } | |
| return $this->pending_jobs; | |
| } | |
| /** | |
| * This function fetches the 5 latest Jobs status | |
| * | |
| * @return array | |
| * */ | |
| private function _fetchJobStatus() { | |
| $sql = "SELECT | |
| sj.job_id as job_id, | |
| sj.job as job, | |
| sj.options as options, | |
| sjs.job_status as job_status, | |
| sjs.node as node, | |
| sjs.run_when as run_when | |
| FROM scheduled_jobs as sj | |
| LEFT JOIN scheduled_jobs_status as sjs | |
| ON sj.job_id = sjs.job_id | |
| WHERE sj.date_code < " . time() . " | |
| AND sj.job_id IN | |
| ( | |
| select DISTINCT job_id | |
| FROM scheduled_jobs_status | |
| ORDER BY run_when DESC | |
| ) | |
| ORDER BY sj.job_id DESC | |
| LIMIT 5"; | |
| $result = $this->App->eclipse_sql($sql); | |
| $status = array(); | |
| while ($row = mysql_fetch_array($result)) { | |
| $status[] = $row; | |
| } | |
| $this->job_status = $status; | |
| return $status; | |
| } | |
| /** | |
| * This function fetches the 25 latest pending jobs | |
| * | |
| * @return array | |
| * */ | |
| private function _fetchPendingJobs() { | |
| $sql = "SELECT | |
| job_id, | |
| job, | |
| options, | |
| date_code | |
| FROM scheduled_jobs | |
| WHERE job_id NOT IN (SELECT DISTINCT job_id FROM scheduled_jobs_status) | |
| ORDER BY job_id | |
| DESC LIMIT 25"; | |
| $result = $this->App->eclipse_sql($sql); | |
| $pending_jobs = array(); | |
| while ($row = mysql_fetch_array($result)) { | |
| $row['date_code'] = date("F j, Y, g:i a", $row['date_code']); | |
| $pending_jobs[] = $row; | |
| } | |
| $this->pending_jobs = $pending_jobs; | |
| return $pending_jobs; | |
| } | |
| /** | |
| * This function adds new scheduled jobs to the scheduled_jobs table | |
| * */ | |
| private function _addScheduledJobs() { | |
| $rsync = filter_var($this->App->getHTTPParameter('rsync', 'POST'), FILTER_SANITIZE_STRING); | |
| $postfix = filter_var($this->App->getHTTPParameter('postfix', 'POST'), FILTER_SANITIZE_STRING); | |
| $nscd = filter_var($this->App->getHTTPParameter('nscd', 'POST'), FILTER_SANITIZE_STRING); | |
| $newaliases = filter_var($this->App->getHTTPParameter('newaliases', 'POST'), FILTER_SANITIZE_STRING); | |
| $options = ''; | |
| if ($rsync == 'on') { | |
| $options .= "rsync,"; | |
| } | |
| if ($postfix == 'on') { | |
| $options .= "postfix,"; | |
| } | |
| if ($nscd == 'on') { | |
| $options .= "nscd,"; | |
| } | |
| if ($newaliases == 'on') { | |
| $options .= "newaliases,"; | |
| } | |
| // trim any trailing commas | |
| $options = rtrim($options, ","); | |
| // Default status message | |
| $msg = "The new job couldn't be created"; | |
| $msg_type = 'danger'; | |
| if (empty($options)) { | |
| $msg .= "<br>- You need at least one rsync configs job option"; | |
| } | |
| if (empty($this->rsync_config_job)) { | |
| $msg .= "<br>- You need to enter a valid path for the rsync config job"; | |
| } | |
| if (!empty($this->rsync_config_job) && !empty($options)) { | |
| $sql = "INSERT INTO scheduled_jobs | |
| (job,options,date_code) | |
| VALUES ( | |
| '" . $this->App->sqlSanitize($this->rsync_config_job) . "', | |
| " . $this->App->returnQuotedString($options) . ", | |
| UNIX_TIMESTAMP() | |
| )"; | |
| $result = $this->App->eclipse_sql($sql); | |
| // Set Success System Message | |
| $msg = 'You have successfully added a new job.'; | |
| $msg_type = 'success'; | |
| } | |
| $this->App->setSystemMessage('add_job', $msg, $msg_type); | |
| } | |
| } |