[if-mm !advanced affiliate=v]
[calc]
$CGI->{affiliate} = $Session->{username};
return;
[/calc]
[/if-mm]
[seti page_title][if cgi affiliate]
Traffic by Affiliate:
[either][data table=affiliate col=name key="[cgi affiliate]"][or][cgi affiliate][/either] ([cgi affiliate])
[else]
Traffic statistics
[/else]
[/if][/seti]
[set icon_name]admin/icon_stats.gif[/set]
[set help_name]stats.traffic[/set]
@_UI_STD_HEAD_@
|
Date
|
Affiliate
|
Visits
|
Hits
|
Pages
|
Prod. Views
|
Items in cart
|
Orders
|
|
|
[perl tables=affiliate]
my $file = $Config->{TrackFile};
$Scratch->{$file} = 1;
%opts = (
rf => [ 0 .. 6 ],
hs => 0,
fi => $file,
ml => 999999,
);
%names = qw/
01 January
02 February
03 March
04 April
05 May
06 June
07 July
08 August
09 September
10 October
11 November
12 December
/;
if($Session->{arg}) {
my $beg = $CGI->{ui_begin_date};
$opts{dl} = $beg++;
$opts{de} = $beg;
}
elsif ($CGI->{ui_begin_date}) {
for (qw/ ui_begin_date ui_end_date /) {
$CGI->{$_} = $Tag->filter( {
op => 'date_change',
body => $CGI->{$_}
});
}
my $end;
if( $end = $CGI->{ui_end_date}) {
$end++;
$opts{de} = $end;
}
$opts{dl} = $CGI->{ui_begin_date};
}
if ($CGI->{affiliate}) {
$opts{sf} = [ 5 ];
$opts{se} = [ $CGI->{affiliate} ];
}
else {
$opts{ra} = 1;
}
my $ary = $TextSearch->array(\%opts);
my $timeout = '__VISIT_TIMEOUT__' || (30 * 10);
my $by_day = $CGI->{ui_by_day};
my $len;
$len = $by_day ? 8 : 6;
$prev = substr($ary->[0][0], 0, $len);
$break_check = sub {
return if $_[0] eq $prev;
$prev = $_[0];
return 1;
};
BREAK: {
my %action_by_tag = ();
my %action_by_visit = ();
my %action_by_visit_number = ();
my %actions_per_visit_boolean = ();
my $hits;
my %hits_by_item = ();
my %hits_by_page = ();
my %hits_by_session = ();
my $interval_count = 0;
my $interval_total = 0;
my %last_access = ();
my $max_interval = 0;
my $min_interval = 9999999;
my $out = '';
my %session_by_order = ();
my %session_by_page = ();
my %visit_by_aff = ();
my %visit_by_ip = ();
my %visit_by_session = ();
my %visit_by_user = ();
my %visit_number = ();
my $visits;
COUNT:
while ($_ = shift @$ary) {
my $per = substr($_->[0], 0, $len);
$break_check->($per)
and do {
unshift @$ary, $_;
last COUNT;
};
my $update_visit;
my $interval;
$hits++;
$hits_by_period{$per}++;
$hits_by_day{$_->[0]}++;
$hits_by_session{$_->[1]}++
or $update_visit = 1;
$interval = $_->[4] - $last_access{$_->[1]}
if $last_access{$_->[1]};
if($interval) {
$max_interval = $interval
if $interval > $max_interval;
$min_interval = $interval
if $interval < $min_interval;
$interval_total += $interval;
$interval_count++;
$update_visit = 1 if $interval > $timeout;
}
$last_access{$_->[1]} = $_->[4];
if($update_visit) {
$visits++;
$visit_number = "$_->[1]:" . $visit_by_session{$_->[1]}++;
$visit_by_period{$per}++;
$visit_by_day{$_->[0]}++;
$visit_by_user{$_->[2]}++;
$visit_by_ip{$_->[3]}++;
$visit_by_aff{$_->[5]}++;
$visit_by_aff_by_period{$per}{$_->[5]}++;
$visit_by_aff_by_day{$_->[0]}{$_->[5]}++;
}
my (@items) = split /\&/, $_->[6];
foreach $it (@items) {
my($tag, $val) = split /=/, $it, 2;
$action_by_visit{$tag}++
unless $action_by_visit_number{$visit_number}{$tag}++;
$action_by_tag{$tag}{$val}++;
$action_by_aff{$_->[5]}{$tag}++;
$action_by_period{$per}{$tag}++;
$action_by_day{$_->[0]}{$tag}++;
}
}
foreach my $one (sort keys %visit_by_period) {
my ($yr, $mon, $day) = $one =~ /(\d\d\d\d)(\d\d)(\d\d)?/;
my $date;
$date = $day ? "$names{$mon} $day, $yr" : "$names{$mon} $yr";
$out = <
$date
|
EOF
my (@number) = grep /\S/, keys %{ $visit_by_aff_by_period{$one} };
my $count = scalar(@number);
$out .= <
$count
$visit_by_period{$one}
|
$hits_by_period{$one}
|
EOF
for(qw/ VIEWPAGE VIEWPROD ADDITEM ORDER /) {
$count = $action_by_period{$one}{$_} || 0;
$pct = '';
$pct = $action_by_visit{$_} / $visit_by_period{$one} * 100
if $visit_by_period{$one};
$pct = $pct <= 0 ? '' : sprintf( "
%.2f%%", $pct);
$out .= <
$count$pct
EOF
}
$out .= '';
}
[comment]
for(keys %action_by_tag) {
#$out .= "$_: " . $Tag->uneval( { ref => $action_by_tag{$_} });
$out .= "\n";
$out .= "Percent of visits with $_: " . $action_by_visit{$_} / $visits * 100;
$out .= "\n";
}
for(sort keys %visit_by_period) {
$out .= "$_: visits=$visit_by_period{$_}, " ;
$out .= "hits=$hits_by_period{$_}\n" ;
}
$out .= "Minimum interval: $min_interval\n";
$out .= "Maximum interval: $max_interval\n";
$out .= "Average interval: " . $interval_total / $interval_count . "\n"
if $interval_count;
[/comment]
push @out, $out;
redo BREAK if scalar (@$ary);
}
return join "\n\n", @out;
[/perl]
|
@_UI_STD_FOOTER_@