From 393501a7ca52108984aafc272c4a98d1a718031c Mon Sep 17 00:00:00 2001 From: spiderr Date: Wed, 30 Mar 2022 15:11:06 -0400 Subject: major refactor of referrer stats --- css/stats.css | 4 ++ includes/bit_setup_inc.php | 4 +- referrers.php | 98 +++++++++++++++++++++++------------- templates/referrer_stats.tpl | 50 ++++-------------- templates/referrer_stats_ctm_inc.tpl | 28 +++++++++++ 5 files changed, 109 insertions(+), 75 deletions(-) create mode 100644 css/stats.css create mode 100644 templates/referrer_stats_ctm_inc.tpl diff --git a/css/stats.css b/css/stats.css new file mode 100644 index 0000000..6fdbd5e --- /dev/null +++ b/css/stats.css @@ -0,0 +1,4 @@ +.referrer-stats .depth-1 { background-color:#fff; } +.referrer-stats .depth-2 { background-color:#eee; } +.referrer-stats .depth-3 { background-color:#ddd; } +.referrer-stats .depth-4 { background-color:#ccc; } diff --git a/includes/bit_setup_inc.php b/includes/bit_setup_inc.php index 2ccdf02..0ceff6a 100644 --- a/includes/bit_setup_inc.php +++ b/includes/bit_setup_inc.php @@ -68,7 +68,7 @@ if( $gBitSystem->isPackageActive( 'stats' )) { function stats_referer_display_short( $pRefererUrl ) { $ret = ''; - if( $urlHash = parse_url( $pRefererUrl ) ) { + if( ($urlHash = parse_url( $pRefererUrl )) && !empty( $urlHash['host'] ) ) { $ret = $urlHash['host']; // q= google and bing search param, p= yahoo search param $searchStrings = array( 'q', 'p' ); @@ -82,7 +82,7 @@ if( $gBitSystem->isPackageActive( 'stats' )) { } } } else { - $ret = tra( 'Unknown URL' ); +// $ret = tra( 'Unknown URL' ); } return $ret; } diff --git a/referrers.php b/referrers.php index 0897f8d..7936b03 100644 --- a/referrers.php +++ b/referrers.php @@ -10,7 +10,7 @@ * required setup */ require_once( '../kernel/includes/setup_inc.php' ); -include_once ( STATS_PKG_PATH.'Statistics.php'); +include_once ( STATS_PKG_CLASS_PATH.'Statistics.php'); $gBitSystem->verifyPackage( 'stats' ); $gBitSystem->verifyFeature( 'stats_referers' ); @@ -46,52 +46,82 @@ foreach( array_keys( $referers ) as $k ) { require_once( BITCOMMERCE_PKG_CLASS_PATH.'CommerceStatistics.php' ); $revenue = $gCommerceStatistics->getCustomerRevenue( array( 'customers_id' => $referers[$k][$r]['user_id'] ) ); $referers[$k][$r]['revenue'] = $revenue; - } - if( !empty( $url['query'] ) ) { - $urlParams = array(); - parse_str( $url['query'], $urlParams ); - if( !empty( $urlParams['adurl'] ) ) { - $adUrl = parse_url( $urlParams['adurl'] ); - if( !empty( $adUrl['query'] ) ) { - $adParams = array(); - parse_str( $adUrl['query'], $adParams ); - foreach( $adParams as $key => $value ) { + if( !empty( $url['query'] ) ) { + $urlParams = array(); + parse_str( $url['query'], $urlParams ); + if( !empty( $urlParams['adurl'] ) ) { + $adUrl = parse_url( $urlParams['adurl'] ); + if( !empty( $adUrl['query'] ) ) { + $adParams = array(); + computeStatsTree( $aggregateStats, $k, $adUrl['query'], $revenue, $referers[$k][$r] ); + } else { + $key = 'Paid'; + $value = $adUrl['path']; computeStats( $aggregateStats, $k, $key, $value, $revenue, $referers[$k][$r] ); } } else { - $key = 'Paid'; - $value = $adUrl['path']; - computeStats( $aggregateStats, $k, $key, $value, $revenue, $referers[$k][$r] ); - } - } else { - // bing paid query - foreach( array( 'pq' => 'Paid', 'q' => 'Organic', 'p' => 'Organic', 'unknown' => 'Unknown' ) as $key=>$title ) { - if( $key == 'unknown' || isset( $urlParams[$key] ) ) { - $value = BitBase::getParameter( $urlParams, $key, 'unknown' ); - computeStats( $aggregateStats, $k, $title, $value, $revenue, $referers[$k][$r] ); - break; + // bing paid query + foreach( array( 'pq' => 'Paid', 'q' => 'Organic', 'p' => 'Organic', 'unknown' => 'Unknown' ) as $key=>$title ) { + if( $key == 'unknown' || isset( $urlParams[$key] ) ) { + $value = BitBase::getParameter( $urlParams, $key, 'unknown' ); + computeStats( $aggregateStats, $k, $title, $value, $revenue, $referers[$k][$r], BitBase::getParameter( $urlParams, $key, $key ) ); + break; + } } } } + @$aggregateStats[$k]['info']['revenue'] += $revenue['total_revenue']; + @$aggregateStats[$k]['info']['orders'] += $revenue['total_orders']; } - if( !empty( $revenue['total_orders'] ) ) { - @$aggregateStats[$k]['revenue'] += $revenue['total_revenue']; - @$aggregateStats[$k]['orders'] += $revenue['total_orders']; + } +} + +function computeStatsTree( &$aggregateStats, $k, $queryUrl, $revenue, &$userHash ) { + parse_str( $queryUrl, $adParams ); + if( isset( $adParams['ctm_campaign'] ) && isset( $adParams['ctm_adgroup'] ) && isset( $adParams['ctm_term'] ) ) { + $key = 'PPC'; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['values'][$adParams['ctm_term']]['info']['title'] = $adParams['ctm_term']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['values'][$adParams['ctm_term']]['info']['revenue'] += $revenue['total_revenue']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['values'][$adParams['ctm_term']]['info']['orders'] += $revenue['total_orders']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['values'][$adParams['ctm_term']]['info']['users'][] = $userHash; + + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['info']['title'] = $adParams['ctm_adgroup']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['info']['revenue'] += $revenue['total_revenue']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['info']['orders'] += $revenue['total_orders']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['values'][$adParams['ctm_adgroup']]['info']['users'][] = $userHash; + + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['info']['title'] = $adParams['ctm_campaign']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['info']['revenue'] += $revenue['total_revenue']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['info']['orders'] += $revenue['total_orders']; + @$aggregateStats[$k]['values'][$key]['values'][$adParams['ctm_campaign']]['info']['users'][] = $userHash; + + @$aggregateStats[$k]['values'][$key]['info']['title'] = $key; + @$aggregateStats[$k]['values'][$key]['info']['revenue'] += $revenue['total_revenue']; + @$aggregateStats[$k]['values'][$key]['info']['orders'] += $revenue['total_orders']; + @$aggregateStats[$k]['values'][$key]['info']['users'][] = $userHash; + } else { + foreach( $adParams as $key => $value ) { + computeStats( $aggregateStats, $k, $key, $value, $revenue, $userHash ); } } } -function computeStats( &$aggregateStats, $k, $key, $value, $revenue, $userHash ) { - if( !empty( $revenue['total_orders'] ) ) { - @$aggregateStats[$k]['values'][$key]['values'][$value]['revenue'] += $revenue['total_revenue']; - @$aggregateStats[$k]['values'][$key]['values'][$value]['orders'] += $revenue['total_orders']; - @$aggregateStats[$k]['values'][$key]['revenue'] += $revenue['total_revenue']; - @$aggregateStats[$k]['values'][$key]['orders'] += $revenue['total_orders']; +function computeStats( &$aggregateStats, $k, $key, $value, $revenue, &$userHash, $subKey = NULL ) { + @$aggregateStats[$k]['values'][$key]['info']['title'] = $key; + @$aggregateStats[$k]['values'][$key]['info']['revenue'] += $revenue['total_revenue']; + @$aggregateStats[$k]['values'][$key]['info']['orders'] += $revenue['total_orders']; + @$aggregateStats[$k]['values'][$key]['info']['users'][] = $userHash; + + if( $subKey ) { + @$aggregateStats[$k]['values'][$key]['values'][$subKey]['info']['title'] = $subKey; + @$aggregateStats[$k]['values'][$key]['values'][$subKey]['info']['revenue'] += $revenue['total_revenue']; + @$aggregateStats[$k]['values'][$key]['values'][$subKey]['info']['orders'] += $revenue['total_orders']; + @$aggregateStats[$k]['values'][$key]['values'][$subKey]['info']['users'][] = $userHash; } - $aggregateStats[$k]['values'][$key]['values'][$value]['users'][] = $userHash; - @$aggregateStats[$k]['values'][$key]['registrations']++; + } +$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'); @@ -101,4 +131,4 @@ $gBitSmarty->assign( 'totalRegistrations', $totalRegistrations ); $gBitSmarty->assign( 'maxRegistrations', $maxRegistrations ); $gBitSmarty->assign( 'listInfo', $_REQUEST['listInfo'] ); $gBitSystem->display( 'bitpackage:stats/referrer_stats.tpl', tra( 'Referer Statistics' ), array( 'display_mode' => 'display' )); -?> + diff --git a/templates/referrer_stats.tpl b/templates/referrer_stats.tpl index fd513bc..1067f98 100644 --- a/templates/referrer_stats.tpl +++ b/templates/referrer_stats.tpl @@ -24,7 +24,7 @@
- +
{assign var=refCount value=0} {foreach from=$referers key=host item=reg} {assign var=hostKey value=$host|strip:'.':''} @@ -37,8 +37,8 @@ {if $aggregateStats.$host} - - + + {/if} @@ -48,47 +48,19 @@ {foreach from=$aggregateStats.$host.values item=paramValues key=paramKey}
{if $paramValues.values}
-
-
-
[{math equation="round((x / y) * 100)" x=$reg|@count y=$totalRegistrations}% ] {booticon iname='icon-clock'}
{$reg|@count} {booticon iname="icon-user"}{$aggregateStats.$host.orders|default:"0"} {booticon iname="icon-shopping-cart"}{$gCommerceCurrencies->format($aggregateStats.$host.revenue|default:"0.00")}{$aggregateStats.$host.info.orders|default:"0"} {booticon iname="icon-shopping-cart"}{$gCommerceCurrencies->format($aggregateStats.$host.info.revenue|default:"0.00")}
- - - - - - - - - - {foreach from=$paramValues.values item=valueHash key=valueKey name=paramval} - - - - - - - {/foreach} - +
+
{$paramKey}{booticon iname="icon-user"}{booticon iname="icon-shopping-cart"}Revenue
{$valueKey|default:"unknown"} - - {if $valueHash.users}{$valueHash.users|count}{/if}{if $valueHash.orders}{$valueHash.orders}{/if}{if $valueHash.revenue}{$gCommerceCurrencies->format($valueHash.revenue)}{/if}
+ {foreach from=$paramValues.values item=subHash} + {include file="bitpackage:stats/referrer_stats_ctm_inc.tpl" tableHash=$subHash depth=1} + {/foreach}
-
{/if} @@ -108,7 +80,7 @@ {if $reg}
-
+
@@ -124,7 +96,7 @@ - + {/foreach} diff --git a/templates/referrer_stats_ctm_inc.tpl b/templates/referrer_stats_ctm_inc.tpl new file mode 100644 index 0000000..bb30742 --- /dev/null +++ b/templates/referrer_stats_ctm_inc.tpl @@ -0,0 +1,28 @@ +{assign var="titleHash" value="`$parentHash``$tableHash.info.title`"|md5} + + + + + + + + + + + +{if $tableHash.values} + {foreach from=$tableHash.values item=subHash} + {include file="bitpackage:stats/referrer_stats_ctm_inc.tpl" tableHash=$subHash depth=$depth+1 parentHash=$titleHash} + {/foreach} +{/if} -- cgit v1.3
{$user.registration_date|bit_date_format} {displayname hash=$user}{if $user.referer_url}
{$user.referer_url|stats_referer_display_short}{/if}
{if $user.revenue.total_orders}{$user.revenue.total_orders}{/if}{if $user.revenue.total_orders}{$user.revenue.total_orders}{/if} {if $user.revenue.total_revenue}{$gCommerceCurrencies->format($user.revenue.total_revenue)}{/if}
{$tableHash.info.title|default:"unknown"}{$tableHash.info.users|count|default:"0"} {booticon iname="icon-user"}{$tableHash.info.orders|default:"0"} {booticon iname="icon-shopping-cart"}{$gCommerceCurrencies->format($tableHash.info.revenue)}