From b1a6a5a3991cec5cd08873b01376e45d0b247f18 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Thu, 14 Nov 2013 09:05:33 -0500
Subject: [PATCH] Cleaning up code to match coding guidelines
---
server/lib/classes/cron.inc.php | 475 ++++++++++++++++++++++++++++++-----------------------------
1 files changed, 240 insertions(+), 235 deletions(-)
diff --git a/server/lib/classes/cron.inc.php b/server/lib/classes/cron.inc.php
index c7bea32..48ca093 100644
--- a/server/lib/classes/cron.inc.php
+++ b/server/lib/classes/cron.inc.php
@@ -29,243 +29,248 @@
*/
class cron {
-
- /**#@+
+
+ /**#@+
* @access private
*/
- private $_sMinute = '';
- private $_sHour = '';
- private $_sDay = '';
- private $_sMonth = '';
- private $_sWDay = '';
- private $_bParsed = false;
- private $_iNextRun = null;
- private $_aValidValues;
-
- public function __construct() {
- // empty
- $this->_sMinute = '';
- $this->_sHour = '';
- $this->_sDay = '';
- $this->_sMonth = '';
- $this->_sWDay = '';
- $this->_bParsed = false;
- $this->_aValidValues = array('minute' => array(),
- 'hour' => array(),
- 'day' => array(),
- 'month' => array(),
- 'weekday' => array());
- }
-
- private function _calcValidValues() {
- // minute field
- $this->_aValidValues['minute'] = $this->_calcFieldValues('minute', $this->_sMinute);
- $this->_aValidValues['hour'] = $this->_calcFieldValues('hour', $this->_sHour);
- $this->_aValidValues['day'] = $this->_calcFieldValues('day', $this->_sDay);
- $this->_aValidValues['month'] = $this->_calcFieldValues('month', $this->_sMonth);
- $this->_aValidValues['weekday'] = $this->_calcFieldValues('weekday', $this->_sWDay);
- $this->_bParsed = true;
- }
-
- private function _calcFieldValues($sField, $sValue) {
- global $app;
-
- $aValidValues = array();
-
- // global checks
- $iFrom = 0;
- $iTo = 0;
- switch($sField) {
- case 'minute':
- $iTo = 59;
- break;
- case 'hour':
- $iTo = 23;
- break;
- case 'day':
- $iFrom = 1;
- $iTo = 31;
- break;
- case 'month':
- $sValue = strtr($sValue, array('JAN' => 1,
- 'FEB' => 2,
- 'MAR' => 3,
- 'APR' => 4,
- 'MAY' => 5,
- 'JUN' => 6,
- 'JUL' => 7,
- 'AUG' => 8,
- 'SEP' => 9,
- 'OCT' => 10,
- 'NOV' => 11,
- 'DEC' => 12)
- );
- $iFrom = 1;
- $iTo = 12;
- break;
- case 'weekday':
- $sValue = strtr($sValue, array('SUN' => 0,
- 'MON' => 1,
- 'TUE' => 2,
- 'WED' => 3,
- 'THU' => 4,
- 'FRI' => 5,
- 'SAT' => 6,
- '7' => 0)
- );
- $iTo = 6;
- break;
- }
- $aParts = explode(',', $sValue);
- for($a = 0; $a < count($aParts); $a++) {
- $sValue = $aParts[$a];
- $iValue = $app->functions->intval($sValue);
-
- if($sValue === '*') {
- // everything is valid
- for($i = $iFrom; $i <= $iTo; $i++) {
- $aValidValues[] = $i;
- }
- break; // no need to go any further
- } elseif((string)$iValue == $sValue) {
- if($iValue >= $iFrom && $iValue <= $iTo) $aValidValues[] = $iValue;
- } elseif(preg_match('/^([0-9]+)-([0-9]+)(\/([1-9][0-9]*))?$/', $sValue, $aMatch)) {
- if($aMatch[1] < $iFrom) $aMatch[1] = $iFrom;
- if($aMatch[2] > $iTo) $aMatch[2] = $iTo;
- if(isset($aMatch[3])) {
- for($i = $aMatch[1]; $i <= $aMatch[2]; $i++) {
- if(($i - $aMatch[1]) % $aMatch[4] == 0) $aValidValues[] = $i;
- }
- } else {
- for($i = $aMatch[1]; $i <= $aMatch[2]; $i++) $aValidValues[] = $i;
- }
- } elseif(preg_match('/^\*\/([1-9][0-9]*)$/', $sValue, $aMatch)) {
- for($i = $iFrom; $i <= $iTo; $i++) {
- if($i % $aMatch[1] == 0) $aValidValues[] = $i;
- }
- }
- }
-
- $aValidValues = array_unique($aValidValues);
- sort($aValidValues);
-
- return $aValidValues;
- }
-
- /**#@-*/
-
- /**
- * Set the cron field values
- *
- * @param string $sMinute the minute field value
- * @param string $sHour the hour field value
- * @param string $sDay the day field value
- * @param string $sWDay the weekday field value
- * @param string $sMonth the month field value
- */
- public function setCronFields($sMinute = '*', $sHour = '*', $sDay = '*', $sMonth = '*', $sWDay = '*') {
- $this->_sMinute = $sMinute;
- $this->_sHour = $sHour;
- $this->_sDay = $sDay;
- $this->_sMonth = $sMonth;
- $this->_sWDay = $sWDay;
- $this->_bParsed = false;
- }
-
- /**
- * Parse a line of a cron and set the internal field values
- *
- * @param string $sLine cron line
- */
- public function parseCronLine($sLine) {
- $aFields = preg_split('/[ \t]+/', trim($sLine));
- for($i = 0; $i < 5; $i++) {
- if(!isset($aFields[$i])) $aFields[$i] = '*';
- }
- if($aFields[0] == '@yearly' || $aFields[0] == '@annually') $aFields = array(0, 0, 1, 1, '*');
- elseif($aFields[0] == '@monthly') $aFields = array(0, 0, 1, '*', '*');
- elseif($aFields[0] == '@weekly') $aFields = array(0, 0, '*', '*', 0);
- elseif($aFields[0] == '@daily' || $aFields[0] == '@midnight') $aFields = array(0, 0, '*', '*', '*');
- elseif($aFields[0] == '@hourly') $aFields = array(0, '*', '*', '*', '*');
-
- $this->setCronFields($aFields[0], $aFields[1], $aFields[2], $aFields[3], $aFields[4]);
- }
-
- public function getNextRun($vDate) {
- global $app;
-
- $iTimestamp = ISPConfigDatetime::to_timestamp($vDate);
- if($iTimestamp === false) return $iTimestamp;
-
- if($this->_bParsed == false) $this->_calcValidValues();
-
- // get the field values for the given Date.
- list($iMinute, $iHour, $iDay, $iWDay, $iMonth, $iYear) = explode(':', ISPConfigDateTime::to_string($vDate, 'custom:%M:%H:%d:%w:%m:%Y'));
-
- $bValid = false;
- $iStartYear = $iYear;
- while($bValid == false) {
- $iCurMinute = $this->_getNextValue('minute', $iMinute, true);
- $iCurHour = $this->_getNextValue('hour', $iHour, true);
- $iCurDay = $this->_getNextValue('day', $iDay, true);
- $iCurMonth = $this->_getNextValue('month', $iMonth, true);
- $iCurWDay = $this->_getNextValue('weekday', $iWDay, true);
-
- $iNextMinute = $this->_getNextValue('minute', $iMinute);
- $iNextHour = $this->_getNextValue('hour', $iHour);
- $iNextDay = $this->_getNextValue('day', $iDay);
- $iNextMonth = $this->_getNextValue('month', $iMonth);
- $iNextWDay = $this->_getNextValue('weekday', $iWDay);
-
- if($iNextMinute > $iMinute && $iHour == $iCurHour && $iDay == $iCurDay && $iWDay == $iCurWDay && $iMonth == $iCurMonth) {
- $iMinute = $iNextMinute;
- } elseif($iNextHour > $iHour && $iDay == $iCurDay && $iWDay == $iCurWDay && $iMonth == $iCurMonth) {
- $iMinute = reset($this->_aValidValues['minute']);
- $iHour = $iNextHour;
- } elseif($iNextDay > $iDay && ISPConfigDateTime::last_day($iMonth) >= $iNextDay && $iMonth == $iCurMonth) {
- $iMinute = reset($this->_aValidValues['minute']);
- $iHour = reset($this->_aValidValues['hour']);
- $iDay = $iNextDay;
- } elseif($iNextMonth > $iMonth) {
- $iMinute = reset($this->_aValidValues['minute']);
- $iHour = reset($this->_aValidValues['hour']);
- $iDay = reset($this->_aValidValues['day']);
- $iMonth = $iNextMonth;
- } else {
- $iMinute = reset($this->_aValidValues['minute']);
- $iHour = reset($this->_aValidValues['hour']);
- $iDay = reset($this->_aValidValues['day']);
- $iMonth = reset($this->_aValidValues['month']);
- $iYear++;
- }
-
- $ts = mktime($iHour, $iMinute, 0, $iMonth, $iDay, $iYear);
- //print strftime('%d.%m.%Y (%A) %H:%M', $ts) . "\n";
- //var_dump($iCurMinute, $iCurHour, $iCurDay, $iCurMonth, $iCurWDay, '--', $iNextMinute, $iNextHour, $iNextDay, $iNextMonth, $iNextWDay);
- if(ISPConfigDateTime::last_day($iMonth, $iYear) >= $iDay && in_array($app->functions->intval(strftime('%w', $ts)), $this->_aValidValues['weekday'], true) === true) {
- $bValid = true;
- } else {
- if($iYear - $iStartYear > 5) {
- if(LOG_PRIORITY <= PRIO_ERROR) $portal->log('No valid run dates for schedule ' . $this->_sMinute . ' ' . $this->_sHour . ' ' . $this->_sDay . ' ' . $this->_sMonth . ' ' . $this->_sWDay . ' in the next 5 years!', PRIO_ERROR, __FILE__, __LINE__);
- return false;
- }
- }
- }
-
- //var_dump($vDate, implode('-', array($iYear, $iMonth, $iDay, $iHour, $iNextMinute, 0)), $this->_sMinute, $this->_sHour, $this->_sDay, $this->_sWDay, $this->_sMonth, $this->_aValidValues);
- return $iYear . '-' . $iMonth . '-' . $iDay . ' ' . $iHour . ':' . $iNextMinute . ':0';
- }
-
- private function _getNextValue($sField, $iValue, $bIncludeCurrent = false) {
- if(!array_key_exists($sField, $this->_aValidValues)) return false;
-
- reset($this->_aValidValues[$sField]);
- while(($cur = each($this->_aValidValues[$sField])) !== false) {
- if($bIncludeCurrent == true && $cur['value'] >= $iValue) return $cur['value'];
- elseif($cur['value'] > $iValue) return $cur['value'];
- }
- return reset($this->_aValidValues[$sField]);
- }
+ private $_sMinute = '';
+ private $_sHour = '';
+ private $_sDay = '';
+ private $_sMonth = '';
+ private $_sWDay = '';
+ private $_bParsed = false;
+ private $_iNextRun = null;
+ private $_aValidValues;
+
+ public function __construct() {
+ // empty
+ $this->_sMinute = '';
+ $this->_sHour = '';
+ $this->_sDay = '';
+ $this->_sMonth = '';
+ $this->_sWDay = '';
+ $this->_bParsed = false;
+ $this->_aValidValues = array('minute' => array(),
+ 'hour' => array(),
+ 'day' => array(),
+ 'month' => array(),
+ 'weekday' => array());
+ }
+
+ private function _calcValidValues() {
+ // minute field
+ $this->_aValidValues['minute'] = $this->_calcFieldValues('minute', $this->_sMinute);
+ $this->_aValidValues['hour'] = $this->_calcFieldValues('hour', $this->_sHour);
+ $this->_aValidValues['day'] = $this->_calcFieldValues('day', $this->_sDay);
+ $this->_aValidValues['month'] = $this->_calcFieldValues('month', $this->_sMonth);
+ $this->_aValidValues['weekday'] = $this->_calcFieldValues('weekday', $this->_sWDay);
+ $this->_bParsed = true;
+ }
+
+ private function _calcFieldValues($sField, $sValue) {
+ global $app;
+
+ $aValidValues = array();
+
+ // global checks
+ $iFrom = 0;
+ $iTo = 0;
+ switch($sField) {
+ case 'minute':
+ $iTo = 59;
+ break;
+ case 'hour':
+ $iTo = 23;
+ break;
+ case 'day':
+ $iFrom = 1;
+ $iTo = 31;
+ break;
+ case 'month':
+ $sValue = strtr($sValue, array('JAN' => 1,
+ 'FEB' => 2,
+ 'MAR' => 3,
+ 'APR' => 4,
+ 'MAY' => 5,
+ 'JUN' => 6,
+ 'JUL' => 7,
+ 'AUG' => 8,
+ 'SEP' => 9,
+ 'OCT' => 10,
+ 'NOV' => 11,
+ 'DEC' => 12)
+ );
+ $iFrom = 1;
+ $iTo = 12;
+ break;
+ case 'weekday':
+ $sValue = strtr($sValue, array('SUN' => 0,
+ 'MON' => 1,
+ 'TUE' => 2,
+ 'WED' => 3,
+ 'THU' => 4,
+ 'FRI' => 5,
+ 'SAT' => 6,
+ '7' => 0)
+ );
+ $iTo = 6;
+ break;
+ }
+ $aParts = explode(',', $sValue);
+ for($a = 0; $a < count($aParts); $a++) {
+ $sValue = $aParts[$a];
+ $iValue = $app->functions->intval($sValue);
+
+ if($sValue === '*') {
+ // everything is valid
+ for($i = $iFrom; $i <= $iTo; $i++) {
+ $aValidValues[] = $i;
+ }
+ break; // no need to go any further
+ } elseif((string)$iValue == $sValue) {
+ if($iValue >= $iFrom && $iValue <= $iTo) $aValidValues[] = $iValue;
+ } elseif(preg_match('/^([0-9]+)-([0-9]+)(\/([1-9][0-9]*))?$/', $sValue, $aMatch)) {
+ if($aMatch[1] < $iFrom) $aMatch[1] = $iFrom;
+ if($aMatch[2] > $iTo) $aMatch[2] = $iTo;
+ if(isset($aMatch[3])) {
+ for($i = $aMatch[1]; $i <= $aMatch[2]; $i++) {
+ if(($i - $aMatch[1]) % $aMatch[4] == 0) $aValidValues[] = $i;
+ }
+ } else {
+ for($i = $aMatch[1]; $i <= $aMatch[2]; $i++) $aValidValues[] = $i;
+ }
+ } elseif(preg_match('/^\*\/([1-9][0-9]*)$/', $sValue, $aMatch)) {
+ for($i = $iFrom; $i <= $iTo; $i++) {
+ if($i % $aMatch[1] == 0) $aValidValues[] = $i;
+ }
+ }
+ }
+
+ $aValidValues = array_unique($aValidValues);
+ sort($aValidValues);
+
+ return $aValidValues;
+ }
+
+ /**#@-*/
+
+ /**
+ * Set the cron field values
+ *
+ * @param string $sMinute the minute field value
+ * @param string $sHour the hour field value
+ * @param string $sDay the day field value
+ * @param string $sWDay the weekday field value
+ * @param string $sMonth the month field value
+ */
+
+
+ public function setCronFields($sMinute = '*', $sHour = '*', $sDay = '*', $sMonth = '*', $sWDay = '*') {
+ $this->_sMinute = $sMinute;
+ $this->_sHour = $sHour;
+ $this->_sDay = $sDay;
+ $this->_sMonth = $sMonth;
+ $this->_sWDay = $sWDay;
+ $this->_bParsed = false;
+ }
+
+
+
+ /**
+ * Parse a line of a cron and set the internal field values
+ *
+ * @param string $sLine cron line
+ */
+ public function parseCronLine($sLine) {
+ $aFields = preg_split('/[ \t]+/', trim($sLine));
+ for($i = 0; $i < 5; $i++) {
+ if(!isset($aFields[$i])) $aFields[$i] = '*';
+ }
+ if($aFields[0] == '@yearly' || $aFields[0] == '@annually') $aFields = array(0, 0, 1, 1, '*');
+ elseif($aFields[0] == '@monthly') $aFields = array(0, 0, 1, '*', '*');
+ elseif($aFields[0] == '@weekly') $aFields = array(0, 0, '*', '*', 0);
+ elseif($aFields[0] == '@daily' || $aFields[0] == '@midnight') $aFields = array(0, 0, '*', '*', '*');
+ elseif($aFields[0] == '@hourly') $aFields = array(0, '*', '*', '*', '*');
+
+ $this->setCronFields($aFields[0], $aFields[1], $aFields[2], $aFields[3], $aFields[4]);
+ }
+
+ public function getNextRun($vDate) {
+ global $app;
+
+ $iTimestamp = ISPConfigDatetime::to_timestamp($vDate);
+ if($iTimestamp === false) return $iTimestamp;
+
+ if($this->_bParsed == false) $this->_calcValidValues();
+
+ // get the field values for the given Date.
+ list($iMinute, $iHour, $iDay, $iWDay, $iMonth, $iYear) = explode(':', ISPConfigDateTime::to_string($vDate, 'custom:%M:%H:%d:%w:%m:%Y'));
+
+ $bValid = false;
+ $iStartYear = $iYear;
+ while($bValid == false) {
+ $iCurMinute = $this->_getNextValue('minute', $iMinute, true);
+ $iCurHour = $this->_getNextValue('hour', $iHour, true);
+ $iCurDay = $this->_getNextValue('day', $iDay, true);
+ $iCurMonth = $this->_getNextValue('month', $iMonth, true);
+ $iCurWDay = $this->_getNextValue('weekday', $iWDay, true);
+
+ $iNextMinute = $this->_getNextValue('minute', $iMinute);
+ $iNextHour = $this->_getNextValue('hour', $iHour);
+ $iNextDay = $this->_getNextValue('day', $iDay);
+ $iNextMonth = $this->_getNextValue('month', $iMonth);
+ $iNextWDay = $this->_getNextValue('weekday', $iWDay);
+
+ if($iNextMinute > $iMinute && $iHour == $iCurHour && $iDay == $iCurDay && $iWDay == $iCurWDay && $iMonth == $iCurMonth) {
+ $iMinute = $iNextMinute;
+ } elseif($iNextHour > $iHour && $iDay == $iCurDay && $iWDay == $iCurWDay && $iMonth == $iCurMonth) {
+ $iMinute = reset($this->_aValidValues['minute']);
+ $iHour = $iNextHour;
+ } elseif($iNextDay > $iDay && ISPConfigDateTime::last_day($iMonth) >= $iNextDay && $iMonth == $iCurMonth) {
+ $iMinute = reset($this->_aValidValues['minute']);
+ $iHour = reset($this->_aValidValues['hour']);
+ $iDay = $iNextDay;
+ } elseif($iNextMonth > $iMonth) {
+ $iMinute = reset($this->_aValidValues['minute']);
+ $iHour = reset($this->_aValidValues['hour']);
+ $iDay = reset($this->_aValidValues['day']);
+ $iMonth = $iNextMonth;
+ } else {
+ $iMinute = reset($this->_aValidValues['minute']);
+ $iHour = reset($this->_aValidValues['hour']);
+ $iDay = reset($this->_aValidValues['day']);
+ $iMonth = reset($this->_aValidValues['month']);
+ $iYear++;
+ }
+
+ $ts = mktime($iHour, $iMinute, 0, $iMonth, $iDay, $iYear);
+ //print strftime('%d.%m.%Y (%A) %H:%M', $ts) . "\n";
+ //var_dump($iCurMinute, $iCurHour, $iCurDay, $iCurMonth, $iCurWDay, '--', $iNextMinute, $iNextHour, $iNextDay, $iNextMonth, $iNextWDay);
+ if(ISPConfigDateTime::last_day($iMonth, $iYear) >= $iDay && in_array($app->functions->intval(strftime('%w', $ts)), $this->_aValidValues['weekday'], true) === true) {
+ $bValid = true;
+ } else {
+ if($iYear - $iStartYear > 5) {
+ if(LOG_PRIORITY <= PRIO_ERROR) $portal->log('No valid run dates for schedule ' . $this->_sMinute . ' ' . $this->_sHour . ' ' . $this->_sDay . ' ' . $this->_sMonth . ' ' . $this->_sWDay . ' in the next 5 years!', PRIO_ERROR, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ }
+
+ //var_dump($vDate, implode('-', array($iYear, $iMonth, $iDay, $iHour, $iNextMinute, 0)), $this->_sMinute, $this->_sHour, $this->_sDay, $this->_sWDay, $this->_sMonth, $this->_aValidValues);
+ return $iYear . '-' . $iMonth . '-' . $iDay . ' ' . $iHour . ':' . $iNextMinute . ':0';
+ }
+
+ private function _getNextValue($sField, $iValue, $bIncludeCurrent = false) {
+ if(!array_key_exists($sField, $this->_aValidValues)) return false;
+
+ reset($this->_aValidValues[$sField]);
+ while(($cur = each($this->_aValidValues[$sField])) !== false) {
+ if($bIncludeCurrent == true && $cur['value'] >= $iValue) return $cur['value'];
+ elseif($cur['value'] > $iValue) return $cur['value'];
+ }
+ return reset($this->_aValidValues[$sField]);
+ }
+
}
?>
--
Gitblit v1.9.1