#!/usr/local/bin/perl
# richg@cpanel.net

package Cpanel::StatSelect;

use strict;
use Carp;

use vars qw(@ISA @EXPORT $VERSION);

require Exporter;
require DynaLoader;

@ISA = qw(Exporter DynaLoader);
@EXPORT = qw(StatSelect_init StatSelect_doForm StatSelect_updateUserConfig);
$VERSION = '1.0';

require 5.004;

my %STAT_CONFIG;
my @LOGGERS = (); 
my @DEFAULT_LOGGERS = ();


loadConfig();

# Init..
if (findurchin() eq "") {
   @LOGGERS = grep(!/^URCHIN$/,@LOGGERS);
   $Cpanel::CONF{'skipurchin'} = 1;
}


if (defined($Cpanel::CPDATA{'STATGENS'})) {
   @LOGGERS = split(/,/,$Cpanel::CPDATA{'STATGENS'});
   foreach my $log (@LOGGERS) {
      if ($Cpanel::CONF{'skip'.lc($log)} == 1) {
         @LOGGERS = grep(!/^${log}$/i,@LOGGERS);
      }
   }
}
else {
   for my $log (qw(webalizer analog awstats urchin)) {
      if ($Cpanel::CONF{'skip'.$log} == 0) {
         push @LOGGERS, uc($log);
      }
   }
}

if (defined($STAT_CONFIG{'DEFAULTGENS'})) {
	@DEFAULT_LOGGERS = split(/,/,$STAT_CONFIG{'DEFAULTGENS'});	
} else {
	@DEFAULT_LOGGERS = @LOGGERS;
}

###########################################################
#
##########################################################
sub StatSelect_init {
    return 1;
}



##########################################################
#
##########################################################
sub findurchin {
   my(@LOC,$loc);

   @LOC = ("/usr/local/urchin",
           "/usr/local/urchin5",
           "/usr/local/urchin4");
   foreach $loc (@LOC) {
      if (-e $loc) { return $loc; }
   }
   return "";
}


##########################################################
#
##########################################################
sub loadConfig {
   if (! -e "/etc/stats.conf" ) {
      return 0;
   }
   open(SCONF,"<","/etc/stats.conf");
   while (<SCONF>) {
      chomp;
      my ($var,$val) = split(/=/,$_);
      $STAT_CONFIG{uc($var)} = $val;
   }
}

###########################################################
#
###########################################################
sub isValid {
   if (!defined($STAT_CONFIG{'VALIDUSERS'}) || ($Cpanel::CONF{'userstatsoverride'} == 0)) {
         print "Your administrator has not enabled this feature.\n";
         return 0;
   }
   else {
      my @users = split(/,/,$STAT_CONFIG{'VALIDUSERS'});
      if (!grep(/^$Cpanel::user$/,@users)) {
          print "You do not have permission to access this feature.";
          return 0;
      }
   }
   return 1;
}

###########################################################
#
###########################################################
sub loadUserConfig {
   my $home = $Cpanel::homedir;
   my %conf;

   # Init-Configure based on the cpanel.conf values.
   my %cpconf = %Cpanel::CONF;
   my @domains= @Cpanel::DOMAINS;
   foreach my $dom (@domains) {
      foreach my $log (@LOGGERS) {
         if ($cpconf{"skip".lc($log)} == 1) {
            $conf{uc($dom)}->{uc($log)} = 'no';
         } 
         elsif (grep(/^${log}$/,@DEFAULT_LOGGERS) )
         { 
				$conf{uc($dom)}->{uc($log)} = 'yes'; 
         }
      }
   }
   if (! -e $home."/tmp/stats.conf") { return %conf; }
   # Configure based on user's stats.conf
   open(CONF,"<",$home."/tmp/stats.conf");
   while (<CONF>) {
      chomp();
      my ($logdom,$val) = split(/=/,uc($_),2);
      my ($log,$dom) = split(/-/,$logdom,2); 
      $conf{$dom}->{$log} = $val;
   }
   close(CONF);
   return %conf;
}

###########################################################
#
###########################################################
sub StatSelect_doForm {
   my @domains = @Cpanel::DOMAINS;

   if (isValid() != 1) { return 0; }
   my %user_conf = loadUserConfig();
   
   print <<'EOF';
     <table align="center" width="100%" cellspacing="0" border="0" cellpadding="0">\n
        <tr bgcolor="#EEEEEE"><td>Domain</td>\n
EOF
   foreach my $log (@LOGGERS) {
       print "<td align=\"center\">",ucfirst(lc($log)),"</td>\n";
   }
   print "</tr>\n";
   foreach my $dom (@domains) {
       print "<tr><td>${dom}</td>\n";
       foreach my $logger (@LOGGERS) {
          my $string = "<td align=\"center\"><input type=\"checkbox\" name=\"${logger}-${dom}\" value=\"yes\" ";
          if (lc($user_conf{uc($dom)}->{uc($logger)}) eq "yes") { $string .= "CHECKED"; }
          $string .= ">";
          print $string."</td>\n";
       }
       print "</tr>";
   }
   print "</table>\n";
   print "<br/><br/><div align=\"center\"><input type=\"submit\" value=\"Submit\"></div>\n";
}

###########################################################
#
###########################################################
sub StatSelect_updateUserConfig {
   my ($FORM) = @_;
   my %CONFIG;
   my @domains = @Cpanel::DOMAINS;
   my $home = $Cpanel::homedir;
   
   foreach my $domain (@domains) {
      foreach my $logger (@LOGGERS) {
          $CONFIG{uc($domain)}->{uc($logger)} = 'no';
      }
   }
   foreach my $key (keys %$FORM) {
      my ($log,$dom) = split(/-/,$key,2);
      $CONFIG{uc($dom)}->{uc($log)} = $$FORM{$key};
   } 

   if (! -d $home."/tmp/") {
      print "Unable to save settings, please create ${home}/tmp/";
      return 0;
   }

   open(CONF,">",$home."/tmp/stats.conf") or die "Unable to open config file.";
   foreach my $dom (keys %CONFIG) {
      foreach my $log (keys %{$CONFIG{$dom}}) {
          print CONF uc($log),"-",uc($dom),"=",$CONFIG{$dom}->{$log},"\n";
      }
   }
   close(CONF);
   print "Configuration saved successfully.";
}

1;
