1#!/usr/local/bin/perl 2# Mass schedule or de-schedule a bunch of logs 3 4use strict; 5use warnings; 6our (%text, %config, %gconfig, %access, $module_name, %in, $cron_cmd); 7require './webalizer-lib.pl'; 8&foreign_require("cron", "cron-lib.pl"); 9&ReadParse(); 10&error_setup($text{'mass_err'}); 11$access{'view'} && &error($text{'edit_ecannot'}); 12 13# Validate inputs 14my @d = split(/\0/, $in{'d'}); 15@d || &error($text{'mass_enone'}); 16my @jobs = &cron::list_cron_jobs(); 17my %job; 18foreach my $file (@d) { 19 &can_edit_log($file) || &error($text{'edit_efilecannot'}); 20 ($job{$file}) = grep { $_->{'command'} eq "$cron_cmd $file" } @jobs; 21 } 22 23my $count = 0; 24if ($in{'enable'}) { 25 # Add cron jobs for selected 26 foreach my $file (@d) { 27 my $cfile = &config_file_name($file); 28 my $lconf = &get_log_config($file); 29 if (!$lconf->{'sched'}) { 30 &lock_file($cfile); 31 $lconf->{'sched'} = 1; 32 my $job = $job{$file}; 33 if (!$job) { 34 $job = { 'user' => 'root', 35 'active' => 1, 36 'command' => "$cron_cmd $file" }; 37 &lconf_to_cron($lconf, $job); 38 &lock_file(&cron::cron_file($job)); 39 &cron::create_cron_job($job); 40 &unlock_file(&cron::cron_file($job)); 41 } 42 &save_log_config($file, $lconf); 43 &unlock_file($cfile); 44 $count++; 45 } 46 } 47 &webmin_log("enable", "logs", $count); 48 } 49else { 50 # Cancel cron jobs for selected 51 foreach my $file (@d) { 52 my $cfile = &config_file_name($file); 53 my $lconf = &get_log_config($file); 54 if ($lconf->{'sched'}) { 55 &lock_file($cfile); 56 $lconf->{'sched'} = 0; 57 my $job = $job{$file}; 58 if ($job) { 59 &lock_file(&cron::cron_file($job)); 60 &cron::delete_cron_job($job); 61 &unlock_file(&cron::cron_file($job)); 62 } 63 &save_log_config($file, $lconf); 64 &unlock_file($cfile); 65 $count++; 66 } 67 } 68 &webmin_log("disable", "logs", $count); 69 } 70 71&redirect(""); 72 73