[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]trafficstats.view[/set] @_UI_STD_HEAD_@ [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 = < EOF my (@number) = grep /\S/, keys %{ $visit_by_aff_by_period{$one} }; my $count = scalar(@number); $out .= < $count 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( "
%.1f%%
", $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]
Date Affiliate Visits Hits Pages Product Views Items in cart Orders
$date $visit_by_period{$one} $hits_by_period{$one}
@_UI_STD_FOOTER_@