#!/usr/bin/perl

#use strict;
require 'ref.pl';

# アクセス情報を記録し、そのページのリンク元ランキングを出力する CGI

# アクセスがあまり多くないサイト用です。
# 記録の時点で referrer 集計を実行するので、リアルタイムに反映されます。

# QUERY_STRING に以下の値をセットして呼び出します。
# document.URL + "%09%09" + document.referrer + "%09%09" + title
# 呼び出しには refer.js の refer() 関数を用いるとよいでしょう。

# *** HTML を出力する JavaScript 文を返します ***
#################################################

my ($url, $referrer, $title) = split(/%09%09/, $ENV{'QUERY_STRING'});

if (&is_owner) {
    $referrer = 'owner';
}

&check_url($url);

$url = &correct_url($url);

&append_log($url, $referrer, $title);

my $filename = &generate_filename($url);

if (&need_recording_ref($referrer)) {
    $key = &normalize($referrer);
    $ref_count{$key} = 1;
    &merge_referrer_list($filename, %ref_count);
}

print "Content-type: text/javascript; charset=UTF-8\n\n";

$s = &get_referrer_list($filename);
$s =~ s/'/\\'/g;
print "document.write('$s');";

exit(0);

sub is_owner {
    my %cookie = &get_cookie;
    if ($password && $cookie{'by_owner'} eq $password) {
        $referrer = 'owner';
    }
}

sub get_cookie {
    my %cookie, @list, $key, $val;
    @list = split(/; */, $ENV{'HTTP_COOKIE'});
    foreach (@list) {
        ($key, $val) = split(/=/);
        $cookie{$key} = $val;
    }
    return %cookie;
}

sub append_log {
    my ($url, $referrer, $title) = @_;
    ($sec,$min,$hour,$day,$mon,$year)=localtime(time);
    $year += 1900;$mon++;
    $mon ="0$mon"  if $mon  < 10;
    $day ="0$day"  if $day  < 10;
    $hour="0$hour" if $hour < 10;
    $min ="0$min"  if $min  < 10;
    $sec ="0$sec"  if $sec  < 10;
    open(OUT, ">>$log") || die("cannot open log file");
    print OUT "$year/$mon/$day $hour:$min:$sec $url $title $referrer\n";
    close(OUT);
}

