#!/usr/bin/perl

# Vergelijk eerst IP met bezoekers van het afgelopen uur en werk bezoekers bestand bij:

$zelfde_bezoeker = 0;
$deze_bezoeker = $ENV{'REMOTE_ADDR'};
for (0..(15-length($deze_bezoeker))) {$streepjes = "-$streepjes";}
$deze_bezoeker = "$streepjes$deze_bezoeker";
$bezoekers_bestand = "stats/visitors.txt";
if (open (BESTAND, "<$bezoekers_bestand") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $bezoekers = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$nu = time;
$recente_bezoekers = "$deze_bezoeker:$nu#";
$aantal = (int(length($bezoekers) / 28))-1;
for (0..$aantal){
     $bezoeker_nummer = 28*$_;
     $bezoeker = substr($bezoekers, $bezoeker_nummer, 28);
     $IP = substr($bezoeker, 0, 16);
     $tijd = substr($bezoeker, 17, 10);
     if (($nu - $tijd) < 3600) {
           $recente_bezoekers = "$recente_bezoekers$IP:$tijd#";
           if ($IP =~ $deze_bezoeker) {$zelfde_bezoeker = 1;}
           }
     }
open (BESTAND, ">$bezoekers_bestand");
flock (BESTAND, 1);
print BESTAND "$recente_bezoekers";
flock (BESTAND, 8);
close (BESTAND);

# Tel nu de bezoeker en start website:

$joris_IP = "-----86.87.9.102";
$cucosa_IP = "---80.57.110.198";

if ($deze_bezoeker =~ $joris_IP || $deze_bezoeker =~ $cucosa_IP || $zelfde_bezoeker == 1)
    {
    $starter = 0;
    &initialiseer_variabelen;
    &lees_data;
    &tel_bezoeker;
    &schrijf_data;
    }
else
   {
   $starter = 1;
   &initialiseer_variabelen;
   &lees_data;
   &tel_bezoeker;
   &schrijf_data;
   &wijzig_laatste_bezoek;
   }

exit;

sub wijzig_laatste_bezoek {
$laatste_bezoek = "stats/lastvist.txt";
if (open (BESTAND, "<$laatste_bezoek") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $laatste_datum = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$laatste_datum = substr($laatste_datum, 0, 17);
open (BESTAND, ">$laatste_bezoek");
flock (BESTAND, 1);
print BESTAND "$deze_dag-$deze_maand-$dit_jaar, $uur:$minuten$laatste_datum";
flock (BESTAND, 8);
close (BESTAND);
}

sub initialiseer_variabelen          {
$timeoffset = 0;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time + (3600*$timeoffset));
$dit_jaar = 2000 + ($year - 100);
$deze_maand = $mon + 1;
$deze_maand = "0$deze_maand" if ($deze_maand < 10);
$deze_dag = $mday;
$deze_dag = "0$deze_dag" if ($deze_dag < 10);
$weekdag = $wday;
$dagnr = $yday;
#

if(($dit_jaar-1)%4==0 && ($dit_jaar-1)%100!=0){$schrikkeldagvj=1} else {$schrikkeldagvj=0}
$deze_week=int($dagnr/7);
if (($dagnr%7) > 2) {$deze_week=$deze_week+1;}
if($deze_week==0) {
        $dagnr = 358+$schrikkeldagvj+$dagnr;
        $deze_week = int($dagnr/7);
        if (($dagnr%7) > 2) {$deze_week=$deze_week+1;}
        }
$deze_week = "0$deze_week" if ($deze_week < 10);

$uur = $hour+int($isdst);
$uur = "0$uur" if ($uur < 10);
$minuten = $min;
$minuten = "0$minuten" if ($minuten < 10);
}

sub lees_data   {
$t_tel_bestand = "stats/tteller.txt";
$t_tel = 0;
if (open (BESTAND, "<$t_tel_bestand") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $t_tel = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$j_tel_bestand = "stats/jteller.txt";
$j_tel = 0;
if (open (BESTAND, "<$j_tel_bestand") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $j_tel = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$m_tel_bestand = "stats/mteller.txt";
$m_tel = 0;
if (open (BESTAND, "<$m_tel_bestand") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $m_tel = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$w_tel_bestand = "stats/wteller.txt";
$w_tel = 0;
if (open (BESTAND, "<$w_tel_bestand") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $w_tel = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$data_jaar = substr($j_tel, 0, 4);
$data_maand = substr($m_tel, 0, 2);
$data_week = substr($w_tel, 0, 2);
$j_tel = substr($j_tel, 4);
$m_tel = substr($m_tel, 2);
$w_tel = substr($w_tel, 2);
}

sub tel_bezoeker        {
$t_tel = $t_tel + $starter;
if ($dit_jaar > $data_jaar)
     {
     &update_jr_stats;
     &update_mnd_stats;
     $j_tel = "    $starter";
     $m_tel = "   $starter";
     }
else
     {
     $j_tel = $j_tel + $starter;
     if ($deze_maand > $data_maand)
          {
          &update_mnd_stats;
          $m_tel = "   $starter";
          }
     else
          {
          $m_tel = $m_tel + $starter;
          }
     }
if ($deze_week != $data_week)
     {
     &update_wk_stats;
     $w_tel = "  $starter";
     }
else
     {
     $w_tel = $w_tel + $starter;
     }
}

sub schrijf_data        {
$j_tel = "$dit_jaar$j_tel";
$m_tel = "$deze_maand$m_tel";
$w_tel = "$deze_week$w_tel";
open (BESTAND, ">$t_tel_bestand");
flock (BESTAND, 1);
print BESTAND $t_tel;
flock (BESTAND, 8);
close (BESTAND);
open (BESTAND, ">$j_tel_bestand");
flock (BESTAND, 1);
print BESTAND $j_tel;
flock (BESTAND, 8);
close (BESTAND);
open (BESTAND, ">$m_tel_bestand");
flock (BESTAND, 1);
print BESTAND $m_tel;
flock (BESTAND, 8);
close (BESTAND);
open (BESTAND, ">$w_tel_bestand");
flock (BESTAND, 1);
print BESTAND $w_tel;
flock (BESTAND, 8);
close (BESTAND);
}

sub update_jr_stats   {
$jr_stats_bestand = "stats/jrstats.txt";
$jr_stats = 0;
if (open (BESTAND, "<$jr_stats_bestand") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $jr_stats = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$jaar = substr($data_jaar, 2,2);
$jaar_tal = "    $j_tel" if ($j_tel < 10);
$jaar_tal = "   $j_tel" if ($j_tel >= 10) && ($j_tel < 100);
$jaar_tal = "  $j_tel" if ($j_tel >= 100) && ($j_tel < 1000);
$jaar_tal = " $j_tel" if ($j_tel >= 1000) && ($j_tel < 10000);
$jaar_tal = "$j_tel" if ($j_tel >= 10000);
$jr_stats_nieuw = "$jaar$jaar_tal";
$jr_stats = "$jr_stats_nieuw$jr_stats";
open (BESTAND, ">$jr_stats_bestand");
flock (BESTAND, 1);
print BESTAND $jr_stats;
flock (BESTAND, 8);
close (BESTAND);
# De volgende routine stuurt de nieuwe stats naar jrs@rx.nt:
$mailprog = "/usr/sbin/sendmail";
$four='net';
$two='@';
$three='rockx.';
$one='joris';
$mailadres="$one$two$three$four";
$adres=$mailadres;
$naam='CFW-site';
open (MAIL,"|$mailprog -t -i -f $adres");
print MAIL "To: $mailadres\n";
print MAIL "From: $adres ($naam)\n";
print MAIL "Subject: CFW Jaar-stats backup $jaar.\n\n";
print MAIL "$jr_stats\n";
close (MAIL);
}

sub update_mnd_stats   {
$mnd_stats_bestand = "stats/mndstats.txt";
$mnd_stats = 0;
if (open (BESTAND, "<$mnd_stats_bestand") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $mnd_stats = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$jaar = substr($data_jaar, 2,2);
$maand_tal = "   $m_tel" if ($m_tel < 10);
$maand_tal = "  $m_tel" if ($m_tel >= 10) && ($m_tel < 100);
$maand_tal = " $m_tel" if ($m_tel >= 100) && ($m_tel < 1000);
$maand_tal = "$m_tel" if ($m_tel >= 1000);
$mnd_stats_nieuw = "$data_maand$jaar$maand_tal";
$mnd_stats = "$mnd_stats_nieuw$mnd_stats";
open (BESTAND, ">$mnd_stats_bestand");
flock (BESTAND, 1);
print BESTAND $mnd_stats;
flock (BESTAND, 8);
close (BESTAND);
# De volgende routine stuurt de nieuwe stats naar jrs@rx.nt:
$mailprog = "/usr/sbin/sendmail";
$four='net';
$two='@';
$three='rockx.';
$one='joris';
$mailadres="$one$two$three$four";
$adres=$mailadres;
$naam='CFW-site';
open (MAIL,"|$mailprog -t -i -f $adres");
print MAIL "To: $mailadres\n";
print MAIL "From: $adres ($naam)\n";
print MAIL "Subject: CFW Maand-stats backup $data_maand/$jaar.\n\n";
print MAIL "$mnd_stats\n";
close (MAIL);
}

sub update_wk_stats   {
$jaar = substr($data_jaar, 2, 2);
$wk_stats_bestand = "stats/wkstats.txt";
$wk_stats = 0;
if (open (BESTAND, "<$wk_stats_bestand") != false)
    {
    flock (BESTAND, 2);
    while (<BESTAND>)
            {
            $wk_stats = $_;
            }
    flock (BESTAND, 8);
    close (BESTAND);
    }
$week_tal = "  $w_tel" if ($w_tel < 10);
$week_tal = " $w_tel" if ($w_tel >= 10) && ($w_tel < 100);
$week_tal = "$w_tel" if ($w_tel >= 100);
$jaar_vorige_week = substr($wk_stats, 2, 2);
if ($data_week == "52" && $jaar != $jaar_vorige_week) {$jaar = $jaar_vorige_week}
$wk_stats_nieuw = "$data_week$jaar$week_tal";
$wk_stats= "$wk_stats_nieuw$wk_stats";
if (length($wk_stats) > 384) {$wk_stats = substr($wk_stats, 0, 384)}
open (BESTAND, ">$wk_stats_bestand");
flock (BESTAND, 1);
print BESTAND $wk_stats;
flock (BESTAND, 8);
close (BESTAND);
# De volgende routine stuurt de nieuwe stats naar jrs@rx.nt:
$mailprog = "/usr/sbin/sendmail";
$four='net';
$two='@';
$three='rockx.';
$one='joris';
$mailadres="$one$two$three$four";
$adres=$mailadres;
$naam='CFW-site';
open (MAIL,"|$mailprog -t -i -f $adres");
print MAIL "To: $mailadres\n";
print MAIL "From: $adres ($naam)\n";
print MAIL "Subject: CFW Week-stats backup $data_week/$jaar.\n\n";
print MAIL "$wk_stats\n";
close (MAIL);
}