1#!/usr/local/bin/perl
2# save_global.cgi
3# Save options to a webalizer.conf file
4
5use strict;
6use warnings;
7our (%text, %config, %gconfig, %access, $module_name, %in, $remote_user);
8require './webalizer-lib.pl';
9&error_setup($text{'global_err'});
10$access{'view'} && &error($text{'edit_ecannot'});
11&ReadParse();
12!$in{'file'} || &can_edit_log($in{'file'}) || &error($text{'edit_ecannot'});
13$in{'file'} || $access{'global'} || &error($text{'edit_ecannot'});
14
15my $cfile = &config_file_name($in{'file'}) if ($in{'file'});
16if ($in{'delete'}) {
17	# Just delete the configuration for this logfile
18	&unlink_logged($cfile);
19	&redirect("");
20	exit;
21	}
22
23&lock_file($cfile || $config{'webalizer_conf'});
24my $conf = &get_config($in{'file'});
25
26# Validate and store inputs
27if ($in{'report_def'}) {
28	&save_directive($conf, "ReportTitle");
29	}
30else {
31	$in{'report'} =~ /\S/ || &error($text{'global_ereport'});
32	&save_directive($conf, "ReportTitle", $in{'report'});
33	}
34
35if ($in{'host_def'}) {
36	&save_directive($conf, "HostName");
37	}
38elsif (defined($in{'host'})) {
39	$in{'host'} =~ /^\S+$/ || &error($text{'global_ehost'});
40	&save_directive($conf, "HostName", $in{'host'});
41	}
42
43my @pages = split(/\s+/, $in{'page'});
44&save_directive($conf, "PageType", @pages);
45
46my @index = split(/\s+/, $in{'index'});
47&save_directive($conf, "IndexAlias", @index);
48
49if ($in{'gmt'}) {
50	&save_directive($conf, "GMTTime", "yes");
51	}
52else {
53	&save_directive($conf, "GMTTime");
54	}
55
56if ($in{'fold'}) {
57	&save_directive($conf, "FoldSeqErr", "yes");
58	}
59else {
60	&save_directive($conf, "FoldSeqErr");
61	}
62
63if ($in{'visit_def'}) {
64	&save_directive($conf, "VisitTimeout");
65	}
66else {
67	$in{'visit'} =~ /^\d+$/ || &error($text{'global_evisit'});
68	&save_directive($conf, "VisitTimeout", $in{'visit'});
69	}
70
71if ($in{'dns_def'}) {
72	&save_directive($conf, "DNSChildren");
73	}
74else {
75	$in{'dns'} =~ /^\d+$/ || &error($text{'global_edns'});
76	&save_directive($conf, "DNSChildren", $in{'dns'});
77	}
78
79if ($in{'history_def'}) {
80	&save_directive($conf, "HistoryName");
81	}
82else {
83	$in{'history'} =~ /^\S+$/ || &error($text{'global_ehistory'});
84	&save_directive($conf, "HistoryName", $in{'history'});
85	}
86
87if ($in{'current_def'}) {
88	&save_directive($conf, "IncrementalName");
89	}
90else {
91	$in{'current'} =~ /^\S+$/ || &error($text{'global_ecurrent'});
92	&save_directive($conf, "IncrementalName", $in{'current'});
93	}
94
95if ($in{'cache_def'}) {
96	&save_directive($conf, "DNSCache");
97	}
98else {
99	$in{'cache'} =~ /^\S+$/ || &error($text{'global_ecache'});
100	&save_directive($conf, "DNSCache", $in{'cache'});
101	}
102
103foreach my $g ('DailyGraph', 'DailyStats', 'HourlyGraph',
104	       'HourlyStats', 'CountryGraph', 'GraphLegend') {
105	if ($in{$g}) {
106		&save_directive($conf, $g);
107		}
108	else {
109		&save_directive($conf, $g, "no");
110		}
111	}
112
113foreach my $t ('TopSites', 'TopKSites', 'TopURLs', 'TopKURLs', 'TopReferrers',
114	       'TopAgents', 'TopCountries', 'TopEntry', 'TopExit',
115	       'TopSearch', 'TopUsers') {
116	if ($in{"${t}_def"} == 1) {
117		&save_directive($conf, $t);
118		}
119	elsif ($in{"${t}_def"} == 2) {
120		&save_directive($conf, $t, "0");
121		}
122	else {
123		$in{$t} =~ /^\d+$/ || &error(&text('global_etable',
124						   $text{"global_$t"}));
125		&save_directive($conf, $t, $in{$t});
126		}
127	}
128
129foreach my $a ('AllSites', 'AllURLs', 'AllReferrers', 'AllAgents',
130	       'AllSearchStr', 'AllUsers') {
131	if ($in{$a}) {
132		&save_directive($conf, $a, "yes");
133		}
134	else {
135		&save_directive($conf, $a);
136		}
137	}
138
139foreach my $hid ("HideURL", "HideSite", "HideReferrer",
140	         "HideUser", "HideAgent") {
141	my @hidv = split(/\s+/, $in{lc($hid)});
142	&save_directive($conf, $hid, @hidv);
143	}
144
145foreach my $ign ("IgnoreURL", "IgnoreSite", "IgnoreReferrer",
146	         "IgnoreUser", "IgnoreAgent") {
147	my @ignv = split(/\s+/, $in{lc($ign)});
148	&save_directive($conf, $ign, @ignv);
149	}
150
151foreach my $inc ("IncludeURL", "IncludeSite", "IncludeReferrer",
152	         "IncludeUser", "IncludeAgent") {
153	my @incv = split(/\s+/, $in{lc($inc)});
154	&save_directive($conf, $inc, @incv);
155	}
156
157&flush_file_lines();
158&unlock_file($cfile || $config{'webalizer_conf'});
159&webmin_log("modify", "global", $in{'file'});
160&redirect($in{'file'} ? "edit_log.cgi?file=".&urlize($in{'file'}).
161		        "&type=$in{'type'}&custom=$in{'custom'}" : "");
162
163