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