diff --git a/actions/admin/settings/150.mail.php b/actions/admin/settings/150.mail.php index 70186169..b8e9b904 100644 --- a/actions/admin/settings/150.mail.php +++ b/actions/admin/settings/150.mail.php @@ -81,6 +81,7 @@ return array( 'varname' => 'autoresponder_active', 'type' => 'bool', 'default' => false, + 'cronmodule' => 'froxlor/autoresponder', 'save_method' => 'storeSettingField', ), 'systen_last_autoresponder_run' => array( diff --git a/actions/admin/settings/190.ticket.php b/actions/admin/settings/190.ticket.php index 581d4520..9a50d452 100644 --- a/actions/admin/settings/190.ticket.php +++ b/actions/admin/settings/190.ticket.php @@ -28,6 +28,7 @@ return array( 'varname' => 'enabled', 'type' => 'bool', 'default' => false, + 'cronmodule' => 'froxlor/ticket', 'save_method' => 'storeSettingField', ), 'ticket_noreply_email' => array( diff --git a/actions/admin/settings/200.aps.php b/actions/admin/settings/200.aps.php index 5b71ca52..7961f324 100644 --- a/actions/admin/settings/200.aps.php +++ b/actions/admin/settings/200.aps.php @@ -28,6 +28,7 @@ return array( 'varname' => 'aps_active', 'type' => 'bool', 'default' => false, + 'cronmodule' => 'froxlor/aps', 'save_method' => 'storeSettingField', ), 'aps_items_per_page' => array( diff --git a/admin_cronjobs.php b/admin_cronjobs.php index 5da2cd92..00225e7e 100644 --- a/admin_cronjobs.php +++ b/admin_cronjobs.php @@ -47,7 +47,7 @@ if($page == 'cronjobs' * @TODO Fix sorting */ $crons = ''; - $result = $db->query("SELECT `c`.* FROM `" . TABLE_PANEL_CRONRUNS . "` `c` ORDER BY `cronfile` ASC " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $result = $db->query("SELECT `c`.* FROM `" . TABLE_PANEL_CRONRUNS . "` `c` ORDER BY `cronfile` ASC"); $paging->setEntries($db->num_rows($result)); $sortcode = $paging->getHtmlSortCode($lng); $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); @@ -73,6 +73,8 @@ if($page == 'cronjobs' { $row['isactive'] = $lng['panel']['no']; } + + $description = $lng['crondesc'][$row['desc_lng_key']]; eval("\$crons.=\"" . getTemplate("cronjobs/cronjobs_cronjob") . "\";"); $count++; diff --git a/admin_index.php b/admin_index.php index fe141f97..acfd11b6 100644 --- a/admin_index.php +++ b/admin_index.php @@ -129,32 +129,7 @@ if($page == 'overview') $userinfo['traffic_used'] = round($userinfo['traffic_used'] / (1024 * 1024), $settings['panel']['decimal_places']); $userinfo = str_replace_array('-1', $lng['customer']['unlimited'], $userinfo, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps tickets subdomains aps_packages'); - if($settings['system']['last_tasks_run'] == 0) - { - $cronlastrun = $lng['cronjobs']['notyetrun']; - } - else - { - $cronlastrun = date("d.m.Y H:i:s", $settings['system']['last_tasks_run']); - } - - if($settings['system']['last_traffic_run'] == 0) - { - $trafficlastrun = $lng['cronjobs']['notyetrun']; - } - else - { - $trafficlastrun = date("d.m.Y H:i:s", $settings['system']['last_traffic_run']); - } - - if($settings['system']['last_archive_run'] == 0) - { - $archivelastrun = $lng['cronjobs']['notyetrun']; - } - else - { - $archivelastrun = date("d.m.Y H:i:s", $settings['system']['last_archive_run']); - } + $cron_last_runs = getCronjobsLastRun(); $opentickets = 0; $opentickets = $db->query_first('SELECT COUNT(`id`) as `count` FROM `' . TABLE_PANEL_TICKETS . '` diff --git a/install/froxlor.sql b/install/froxlor.sql index d3e1521c..f329b287 100644 --- a/install/froxlor.sql +++ b/install/froxlor.sql @@ -971,10 +971,12 @@ CREATE TABLE IF NOT EXISTS `aps_temp_settings` ( CREATE TABLE IF NOT EXISTS `cronjobs_run` ( `id` bigint(20) NOT NULL auto_increment, + `module` varchar(250) NOT NULL, `cronfile` varchar(250) NOT NULL, `lastrun` int(15) NOT NULL DEFAULT '0', - `interval` varchar(100) DEFAULT '5 MINUTE', + `interval` varchar(100) NOT NULL DEFAULT '5 MINUTE', `isactive` tinyint(1) DEFAULT '1', + `desc_lng_key` varchar(100) NOT NULL DEFAULT 'cron_unknown_desc', PRIMARY KEY (`id`) ) ENGINE=MyISAM; @@ -982,11 +984,11 @@ CREATE TABLE IF NOT EXISTS `cronjobs_run` ( # Dumping data for table `panel_phpconfigs` # -INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (1, 'cron_tasks.php', '5 MINUTE'); -INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (2, 'cron_legacy.php', '5 MINUTE'); -INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (3, 'cron_apsinstaller.php', '5 MINUTE'); -INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (4, 'cron_autoresponder.php', '5 MINUTE'); -INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (5, 'cron_apsupdater.php', '1 HOUR'); -INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (6, 'cron_traffic.php', '1 DAY'); -INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (7, 'cron_used_tickets_reset.php', '1 MONTH'); -INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (8, 'cron_ticketarchive.php', '1 MONTH'); +INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (1, 'froxlor/core', 'cron_tasks.php', '5 MINUTE', 'cron_tasks'); +INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (2, 'froxlor/core', 'cron_legacy.php', '5 MINUTE', 'cron_legacy'); +INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (3, 'froxlor/aps', 'cron_apsinstaller.php', '5 MINUTE', 'cron_apsinstaller'); +INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (4, 'froxlor/autoresponder', 'cron_autoresponder.php', '5 MINUTE', 'cron_autoresponder'); +INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (5, 'froxlor/aps', 'cron_apsupdater.php', '1 HOUR', 'cron_apsupdater'); +INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (6, 'froxlor/core', 'cron_traffic.php', '1 DAY', 'cron_traffic'); +INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (7, 'froxlor/ticket', 'cron_used_tickets_reset.php', '1 MONTH', 'cron_ticketsreset'); +INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (8, 'froxlor/ticket', 'cron_ticketarchive.php', '1 MONTH', 'cron_ticketarchive'); diff --git a/install/updates/froxlor/0.9/update_0.9.inc.php b/install/updates/froxlor/0.9/update_0.9.inc.php index b9c3827b..4ab05fd4 100644 --- a/install/updates/froxlor/0.9/update_0.9.inc.php +++ b/install/updates/froxlor/0.9/update_0.9.inc.php @@ -269,24 +269,26 @@ if(isFroxlorVersion('0.9-r3')) $db->query("CREATE TABLE IF NOT EXISTS `cronjobs_run` ( `id` bigint(20) NOT NULL auto_increment, + `module` varchar(250) NOT NULL, `cronfile` varchar(250) NOT NULL, `lastrun` int(15) NOT NULL DEFAULT '0', - `interval` varchar(100) DEFAULT '5 MINUTE', + `interval` varchar(100) NOT NULL DEFAULT '5 MINUTE', `isactive` tinyint(1) DEFAULT '1', + `desc_lng_key` varchar(100) NOT NULL DEFAULT 'cron_unknown_desc', PRIMARY KEY (`id`) ) ENGINE=MyISAM;"); lastStepStatus(0); showUpdateStep("Inserting new values into table"); - $db->query("INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (1, 'cron_tasks.php', '5 MINUTE');"); - $db->query("INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (2, 'cron_legacy.php', '5 MINUTE');"); - $db->query("INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (3, 'cron_apsinstaller.php', '5 MINUTE');"); - $db->query("INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (4, 'cron_autoresponder.php', '5 MINUTE');"); - $db->query("INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (5, 'cron_apsupdater.php', '1 HOUR');"); - $db->query("INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (6, 'cron_traffic.php', '1 DAY');"); - $db->query("INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (7, 'cron_used_tickets_reset.php', '1 MONTH');"); - $db->query("INSERT INTO `cronjobs_run` (`id`, `cronfile`, `interval`) VALUES (8, 'cron_ticketarchive.php', '1 MONTH');"); + $db->query("INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (1, 'froxlor/core', 'cron_tasks.php', '5 MINUTE', 'cron_tasks');"); + $db->query("INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (2, 'froxlor/core', 'cron_legacy.php', '5 MINUTE', 'cron_legacy');"); + $db->query("INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (3, 'froxlor/aps', 'cron_apsinstaller.php', '5 MINUTE', 'cron_apsinstaller');"); + $db->query("INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (4, 'froxlor/autoresponder', 'cron_autoresponder.php', '5 MINUTE', 'cron_autoresponder');"); + $db->query("INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (5, 'froxlor/aps', 'cron_apsupdater.php', '1 HOUR', 'cron_apsupdater');"); + $db->query("INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (6, 'froxlor/core', 'cron_traffic.php', '1 DAY', 'cron_traffic');"); + $db->query("INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (7, 'froxlor/ticket', 'cron_used_tickets_reset.php', '1 MONTH', 'cron_ticketsreset');"); + $db->query("INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `desc_lng_key`) VALUES (8, 'froxlor/ticket', 'cron_ticketarchive.php', '1 MONTH', 'cron_ticketarchive');"); lastStepStatus(0); showUpdateStep("Updating old settings values"); diff --git a/lib/functions/froxlor/function.CronjobFunctions.php b/lib/functions/froxlor/function.CronjobFunctions.php new file mode 100644 index 00000000..0549aa9c --- /dev/null +++ b/lib/functions/froxlor/function.CronjobFunctions.php @@ -0,0 +1,146 @@ + (2010-) + * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.includeCronjobs.php 138 2010-01-27 08:54:31Z Dessa $ + */ + +/* + * Function getNextCronjobs + * + * checks which cronjobs have to be executed + * + * @return array array of cron-files which are to be executed + */ +function getNextCronjobs() +{ + global $db; + + $query = "SELECT `id`, `cronfile` FROM `".TABLE_PANEL_CRONRUNS."` WHERE `interval` <> '0' AND `isactive` = '1' AND ("; + + $intervals = getIntervalOptions(); + + $x = 0; + foreach($intervals as $name => $ival) + { + if($name == '0') continue; + + if($x == 0) { + $query.= 'UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(`lastrun`), INTERVAL '.$ival.')) <= UNIX_TIMESTAMP()'; + } else { + $query.= ' OR UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(`lastrun`), INTERVAL '.$ival.')) <= UNIX_TIMESTAMP()'; + } + $x++; + } + + $query.= ');'; + + $result = $db->query($query); + + $cron_files = array(); + while($row = $db->fetch_array($result)) + { + $cron_files[] = $row['cronfile']; + $db->query("UPDATE `".TABLE_PANEL_CRONRUNS."` SET `lastrun` = UNIX_TIMESTAMP() WHERE `id` ='".(int)$row['id']."';"); + } + + return $cron_files; +} + + +function includeCronjobs($debugHandler, $pathtophpfiles) +{ + $cronjobs = getNextCronjobs(); + + $jobs_to_run = array(); + + if($cronjobs !== false + && is_array($cronjobs) + && isset($cronjobs[0])) + { + $cron_path = makeCorrectDir($pathtophpfiles.'/scripts/jobs/'); + + foreach($cronjobs as $cronjob) + { + $cron_file = makeCorrectFile($cron_path.$cronjob); + $jobs_to_run[] = $cron_file; + } + } + + return $jobs_to_run; +} + + +function getIntervalOptions() +{ + global $db, $lng, $cronlog; + + $query = "SELECT DISTINCT `interval` FROM `" . TABLE_PANEL_CRONRUNS . "` ORDER BY `interval` ASC;"; + $result = $db->query($query); + $cron_intervals = array(); + + $cron_intervals['0'] = $lng['panel']['off']; + + while($row = $db->fetch_array($result)) + { + if(validateSqlInterval($row['interval'])) + { + $cron_intervals[$row['interval']] = $row['interval']; + } + else + { + $cronlog->logAction(CRON_ACTION, LOG_ERROR, "Invalid SQL-Interval ".$row['interval']." detected. Please fix this in the database."); + } + } + + return $cron_intervals; +} + + +function getCronjobsLastRun() +{ + global $db, $lng; + + $query = "SELECT `lastrun`, `desc_lng_key` FROM `".TABLE_PANEL_CRONRUNS."` WHERE `isactive` = '1' ORDER BY `cronfile` ASC"; + $result = $db->query($query); + + $cronjobs_last_run = ''; + + while($row = $db->fetch_array($result)) + { + $lastrun = $lng['cronjobs']['notyetrun']; + if($row['lastrun'] > 0) { + $lastrun = date('d.m.Y H:i:s', $row['lastrun']); + } + + $cronjobs_last_run .= '
{$lng['admin']['cron']['cronsettings']} |
+ {$lng['admin']['cron']['cronsettings']} |
{$searchcode} | ||||||||||
| {$lng['cron']['lastrun']} {$arrowcode['c.lastrun']} | {$lng['cron']['interval']} {$arrowcode['c.interval']} | {$lng['cron']['isactive']} {$arrowcode['c.isactive']} | +{$lng['cron']['description']} | {$sortcode} | ||||||||
| {$pagingcode} | +{$pagingcode} | |||||||||||
| {$lng['admin']['cron']['add']} | +{$lng['admin']['cron']['add']} | |||||||||||
{$lng['admin']['froxlordetails']}