summaryrefslogtreecommitdiff
path: root/referrers.php
blob: 684a7a85279dd62c213024729666101a6f41a6f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?php
/**
 * $Header$
 *
 * $Id$
 * @package stats
 */

/**
 * required setup
 */
use Bitweaver\BitBase;
use Bitweaver\KernelTools;
use Bitweaver\Stats\Statistics;
 
require_once '../kernel/includes/setup_inc.php';

$gBitSystem->verifyPackage( 'stats' );
$gBitSystem->verifyFeature( 'stats_referers' );
$gBitSystem->verifyPermission( 'p_stats_view_referer' );

$gStats = new Statistics();

if( empty( $_REQUEST['period'] ) || empty( $_REQUEST['timeframe'] ) ) {
	KernelTools::bit_redirect( STATS_PKG_URL.'users.php' );
}

// get rid of all referers in the database
if( isset( $_REQUEST["clear"] )) {
	$gStats->expungeReferers();
}
$referers = $gStats->getRefererList( $_REQUEST );
$totalRegistrations = 0;
$maxRegistrations = 0;

$aggregateStats = [];
foreach( array_keys( $referers ) as $refSite ) {
	$refSiteCount = count( $referers[$refSite] );
	$totalRegistrations += $refSiteCount;
	if( $refSiteCount > $maxRegistrations ) {
		$maxRegistrations = $refSiteCount;
	}

	foreach( array_keys( $referers[$refSite] ) as $r ) {
		$url = parse_url( $referers[$refSite][$r]['referer_url'] );
		$revenue = [];
		if( $gBitSystem->isPackageActive( 'bitcommerce' ) ) {
			require_once BITCOMMERCE_PKG_INCLUDE_PATH . 'bitcommerce_start_inc.php';
			require_once BITCOMMERCE_PKG_CLASS_PATH . 'CommerceStatistics.php';
			$revenue = $gCommerceStatistics->getCustomerRevenue( [ 'customers_id' => $referers[$refSite][$r]['user_id'] ] );
			$referers[$refSite][$r]['revenue'] = $revenue;
			$subVals = [ $refSite ];
			if( !empty( $url['query'] ) ) {
			$urlParams = [];
				parse_str( $url['query'], $urlParams );
				if( !empty( $urlParams['adurl'] ) ) {
					$adUrl = parse_url( $urlParams['adurl'] );
					if( !empty( $adUrl['query'] ) ) {
						array_push( $subVals, 'PPC' );
					$adParams = [];
						parse_str( $adUrl['query'], $adParams );
						foreach( [ 'ctm_campaign', 'ctm_adgroup', 'ctm_term' ] as $subKey ) {
							if( isset( $adParams[$subKey] ) ) {
								$subKeyVal = !empty( $adParams[$subKey] ) ? $adParams[$subKey] : 'unknown' ;
								array_push( $subVals, $subKeyVal );
							}
						}
					} else {
						array_push( $subVals, 'Paid', $adUrl['path'] );
					}
				} else {
					// bing paid query
					foreach( array( 'pq' => 'Paid', 'q' => 'Organic', 'p' => 'Organic', 'unknown' => 'Unknown' ) as $key=>$title ) {
						if( $key == 'unknown' || isset( $urlParams[$key] ) ) {
							array_push( $subVals, $title, BitBase::getParameter( $urlParams, $key, 'unknown' ) );
							break;
						}
					}
				}
			} else {
if( !empty( $url['path'] ) && $url['path'] != '/' ) {
	array_push( $subVals, $url['path'] );
}

			}
			computeStats( $aggregateStats, $subVals, $revenue, $referers[$refSite][$r] );
		}
	}
}

function computeStats( &$pAggregateStats, &$subStats, $revenue, &$userHash ) {
				do {
					$subStatKey = array_shift( $subStats );
					@$pAggregateStats[$subStatKey]['info']['title'] = $subStatKey;
					@$pAggregateStats[$subStatKey]['info']['revenue'] += $revenue['total_revenue'];
					@$pAggregateStats[$subStatKey]['info']['orders'] += $revenue['total_orders'];
					@$pAggregateStats[$subStatKey]['info']['users'][] = $userHash;
					if( empty( $pAggregateStats[$subStatKey]['values'] ) ) {
						$pAggregateStats[$subStatKey]['values'] = array();
					}
					if( $subStats ) {
						computeStats( $pAggregateStats[$subStatKey]['values'], $subStats, $revenue, $userHash );
					}
				} while( !empty( $subStats ) );
//global $aggregateStats; eb( $subStatKey, $pTitle, $subStats, $revenue, $userHash, $aggregateStats );
/*
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['values'][$adParams['ctm_term']]['info']['title'] = $adParams['ctm_term'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['values'][$adParams['ctm_term']]['info']['revenue'] += $revenue['total_revenue'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['values'][$adParams['ctm_term']]['info']['orders'] += $revenue['total_orders'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['values'][$adParams['ctm_term']]['info']['users'][] = $userHash;

			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['info']['title'] = $adParams['ctm_adgroup'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['info']['revenue'] += $revenue['total_revenue'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['info']['orders'] += $revenue['total_orders'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['info']['users'][] = $userHash;

			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['info']['title'] = $adParams['ctm_campaign'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['info']['revenue'] += $revenue['total_revenue'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['info']['orders'] += $revenue['total_orders'];
			@$pAggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['info']['users'][] = $userHash;

	} else {
		foreach( $adParams as $key => $value ) {
			computeStats( $pAggregateStats, $k, $key, $value, $revenue, $userHash );
		}
	}
*/
}
/*
function computeStats( &$pAggregateStats, $k, $key, $value, $revenue, &$userHash, $subKey = NULL ) {
	@$pAggregateStats[$k]['values'][$key]['info']['title'] = $key;
	@$pAggregateStats[$k]['values'][$key]['info']['revenue'] += $revenue['total_revenue'];
	@$pAggregateStats[$k]['values'][$key]['info']['orders'] += $revenue['total_orders'];
	@$pAggregateStats[$k]['values'][$key]['info']['users'][] = $userHash;

	if( $subKey ) {
		@$pAggregateStats[$k]['values'][$key]['values'][$subKey]['info']['title'] = $subKey;
		@$pAggregateStats[$k]['values'][$key]['values'][$subKey]['info']['revenue'] += $revenue['total_revenue'];
		@$pAggregateStats[$k]['values'][$key]['values'][$subKey]['info']['orders'] += $revenue['total_orders'];
		@$pAggregateStats[$k]['values'][$key]['values'][$subKey]['info']['users'][] = $userHash;
	}

}
*/

$gBitThemes->loadCss( STATS_PKG_PATH.'css/stats.css');
$gBitThemes->loadCss( CONFIG_PKG_PATH.'themes/bootstrap/bootstrap-table/bootstrap-table.css');
$gBitThemes->loadJavascript( CONFIG_PKG_PATH.'themes/bootstrap/bootstrap-table/bootstrap-table.js');

$gBitSmarty->assign( 'aggregateStats', $aggregateStats );
$gBitSmarty->assign( 'referers', $referers );
$gBitSmarty->assign( 'totalRegistrations', $totalRegistrations );
$gBitSmarty->assign( 'maxRegistrations', $maxRegistrations );
$gBitSmarty->assign( 'listInfo', $_REQUEST['listInfo'] );
$gBitSystem->display( 'bitpackage:stats/referrer_stats.tpl', KernelTools::tra( 'Referer Statistics' ), [ 'display_mode' => 'display' ]);