<?php
function cs_get_views_by_date()
{
$start_date=getPost('start_date','');
$end_date=getPost('end_date','');
if(!isset($start_date[2]) || !isset($end_date[2]))
{
return 'ERROR';
}
$result=[];
$queryStr='';
$db=new Database();
$queryStr=" select CAST(ent_dt as date) as work_date,count(*) as total";
$queryStr.=" from cs_visitor_data";
$queryStr.=" where CAST(ent_dt as date) BETWEEN '".$start_date."' AND '".$end_date."'";
$queryStr.=" group by CAST(ent_dt as date)";
$queryStr.=" order by CAST(ent_dt as date) asc";
$result['views_by_date']=$db->query($queryStr);
$queryStr=" select work_date,count(*) as total";
$queryStr.=" from (";
$queryStr.=" select CAST(ent_dt as date) as work_date,ip_add";
$queryStr.=" from cs_visitor_data";
$queryStr.=" where CAST(ent_dt as date) BETWEEN '".$start_date."' AND '".$end_date."'";
$queryStr.=" group by CAST(ent_dt as date),ip_add";
$queryStr.=" ) as a";
$queryStr.=" group by work_date";
$queryStr.=" order by work_date asc";
$result['visitor_by_date']=$db->query($queryStr);
// $queryStr=" select DATE_FORMAT(ent_dt, '%m/%Y') as work_date,count(*) as total";
// $queryStr.=" from cs_visitor_data";
// $queryStr.=" where CAST(ent_dt as date) BETWEEN '".date("Y-m-d", strtotime('-12 months'))."' AND '".date("Y-m-d")."'";
// $queryStr.=" group by DATE_FORMAT(ent_dt, '%m/%Y')";
// $queryStr.=" order by DATE_FORMAT(ent_dt, '%m/%Y') asc";
// $result['views_by_month']=$db->query($queryStr);
// $queryStr=" select work_date,count(*) as total";
// $queryStr.=" from (";
// $queryStr.=" select DATE_FORMAT(ent_dt, '%m/%Y') as work_date,ip_add";
// $queryStr.=" from cs_visitor_data";
// $queryStr.=" where CAST(ent_dt as date) BETWEEN '".date("Y-m-d", strtotime('-12 months'))."' AND '".date("Y-m-d")."'";
// $queryStr.=" group by DATE_FORMAT(ent_dt, '%m/%Y'),ip_add";
// $queryStr.=" ) as a";
// $queryStr.=" group by work_date";
// $queryStr.=" order by work_date asc";
// $result['visitor_by_month']=$db->query($queryStr);
$queryStr=" select referrer_site,count(*) as total";
$queryStr.=" from cs_visitor_data";
$queryStr.=" where CAST(ent_dt as date) BETWEEN '".$start_date."' AND '".$end_date."'";
$queryStr.=" group by referrer_site";
$queryStr.=" order by referrer_site asc";
$result['traffic_source_by_referrer']=$db->query($queryStr);
$queryStr=" select browser_title,count(*) as total";
$queryStr.=" from cs_visitor_data";
$queryStr.=" where CAST(ent_dt as date) BETWEEN '".$start_date."' AND '".$end_date."'";
$queryStr.=" group by browser_title";
$queryStr.=" order by browser_title asc";
$result['traffic_source_by_browsers']=$db->query($queryStr);
$queryStr=" select os_title,count(*) as total";
$queryStr.=" from cs_visitor_data";
$queryStr.=" where CAST(ent_dt as date) BETWEEN '".$start_date."' AND '".$end_date."'";
$queryStr.=" group by os_title";
$queryStr.=" order by os_title asc";
$result['traffic_source_by_os']=$db->query($queryStr);
$queryStr=" SELECT page_url,count(*) as total";
$queryStr.=" FROM cs_visitor_page_data";
$queryStr.=" WHERE CAST(ent_dt as date) BETWEEN '".$start_date."' AND '".$end_date."'";
$queryStr.=" group by page_url";
$queryStr.=" order by total desc";
$queryStr.=" limit 0,30";
$result['top_page_views_by_date']=$db->query($queryStr);
$queryStr=" select page_url,count(*) as total";
$queryStr.=" from (";
$queryStr.=" select a.session_id,b.page_url";
$queryStr.=" FROM cs_visitor_data as a join cs_visitor_page_data as b ON a.session_id=b.session_id";
$queryStr.=" WHERE CAST(a.ent_dt as date) BETWEEN '".$start_date."' AND '".$end_date."' AND a.referrer_site<>'direct'";
$queryStr.=" ) as d";
$queryStr.=" group by page_url";
$queryStr.=" order by total DESC";
$queryStr.=" limit 0,30";
$result['top_page_ref_by_date']=$db->query($queryStr);
return $result;
}
function cs_add_new_tracking()
{
$username=isset(Configs::$_['user_data']['user_id'])?Configs::$_['user_data']['user_id']:'';
try {
isValidAccessAPI();
} catch (\Exception $e) {
echo responseData($e->getMessage(),'yes');return false;
}
$tracking_id=randAlpha(8);
$insertData=array(
'tracking_id'=>$tracking_id,
'title'=>addslashes(getPost('title')),
'user_id'=>$username,
);
$db=new Database();
$queryStr=arrayToInsertStr('cs_tracking_data',$insertData);
$db->nonquery($queryStr);
saveActivities('coffeestats_add_post','Add new tracking id',$username);
return $tracking_id;
}
function cs_tracking()
{
$tracking_id=getGet('tracking_id','');
if(!isset($tracking_id[2]))
{
return '';
}
useClass('UserAgent');
useClass('Mobile_Detect');
$useragent = UserAgentFactory::analyze($_SERVER['HTTP_USER_AGENT']);
$referrer=isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'';
$referrer=is_null($referrer)?'':$referrer;
$referrer=isset($referrer[5])?$referrer:'direct';
$referrer_site='';
if(preg_match('/^http/i',$referrer))
{
$url_data=parse_url($referrer);
$referrer_site=$url_data['host'];
}
$ip_add=$_SERVER['REMOTE_ADDR'];
$ent_dt=date('Y-m-d H:i:s');
$user_agent=isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:'';
$user_agent=is_null($user_agent)?'':$user_agent;
$session_hash=md5($ip_add.$user_agent.$ent_dt);
$is_mobile='0';
$is_tablet='0';
$is_windows='0';
$is_ios='0';
$is_android='0';
$detect = new Mobile_Detect;
if ( $detect->isMobile() ) {
$is_mobile='1';
}
if ( $detect->isTablet() ) {
$is_tablet='1';
}
if ( $detect->isiOS() ) {
$is_ios='1';
}
if ( $detect->isAndroidOS() ) {
$is_android='1';
}
if ( $detect->isWindowsMobileOS() ) {
$is_windows='1';
}
if ( $detect->isWindowsPhoneOS() ) {
$is_windows='1';
}
$os_title=$useragent->platform['name'];
$os_version=$useragent->platform['version'];
$browser_title=$useragent->browser['name'];
$browser_version=$useragent->browser['version'];
// $browser_version=$useragent->browser['name'];
if(strtoupper($os_title)=='WINDOWS')
{
$is_windows='1';
}
$referrer_type='website';
$insertData=array(
'session_id'=>$session_hash,
'tracking_id'=>$tracking_id,
'ip_add'=>$ip_add,
'ip_long'=>ip2long($ip_add),
'user_agent'=>$user_agent,
'referrer_url'=>$referrer,
'referrer_site'=>$referrer_site,
'referrer_type'=>$referrer_type,
'os_title'=>$os_title,
'os_version'=>$os_version,
'browser_title'=>$browser_title,
'browser_version'=>$browser_version,
'is_mobile'=>$is_mobile,
'is_tablet'=>$is_tablet,
'is_ios'=>$is_ios,
'is_android'=>$is_android,
'is_windows'=>$is_windows,
'ent_dt'=>$ent_dt,
'upd_dt'=>$ent_dt,
);
$db=new Database();
$queryStr=arrayToInsertStr('cs_visitor_data',$insertData);
$db->nonquery($queryStr);
$result="
var cs_tracking_id='".$tracking_id."';
var cs_tracking_api_url='".SITE_URL."api/plugin_api?plugin=CoffeeStats&func=cs_update_tracking';
var cs_tracking_url='".$tracking_id."';
var cs_new_page='yes';
var cs_session_id='".$session_hash."';
var cs_page_url=location.href;
function genSendVar(inputList) {
if(inputList==null)
{
return '';
}
var listKey = Object.keys(inputList);
var li = '';
// console.log(listKey);
var total = listKey.length;
for (var i = 0; i < total; i++) {
li .= listKey[i] + '=' + encodeURIComponent(inputList[listKey[i]]) + '&';
}
li = li.substring(0, li.length - 1);
return li;
}
async function postData(url = '', data = {}) {
// Default options are marked with *
var sendData=genSendVar(data);
const response = await fetch(url, {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
mode: 'cors', // no-cors, *cors, same-origin
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'same-origin', // include, *same-origin, omit
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
redirect: 'follow',
body: sendData
});
return response.json(); // parses JSON response into native JavaScript objects
}
function cs_update_tracking()
{
postData(cs_tracking_api_url+'&session_hash=".$session_hash."&tracking_id=".$tracking_id."',{
'page_url':cs_page_url,
'new_page':cs_new_page
});
cs_new_page='no';
}
setInterval( function() { cs_update_tracking(); }, 5000 );
";
header("Access-Control-Allow-Origin: *");
echo $result;die();
}
function cs_update_tracking()
{
$tracking_id=getGet('tracking_id','');
$page_url=getPost('page_url','');
$new_page=getPost('new_page','no');
$session_hash=getGet('session_hash','');
if(!isset($tracking_id[2]))
{
return 'ERROR';
}
if(!isset($session_hash[2]))
{
return 'ERROR';
}
$db=new Database();
$queryStr="update cs_visitor_data";
$queryStr.=" set live_time=live_time+5, upd_dt=now()";
$queryStr.=" where session_id='".$session_hash."';";
if($new_page=='yes')
{
$queryStr.="insert into cs_visitor_page_data(session_id,page_url) VALUES('".$session_hash."','".addslashes($page_url)."');";
}
else
{
$queryStr.="update cs_visitor_page_data";
$queryStr.=" set live_time=live_time+5, upd_dt=now()";
$queryStr.=" where session_id='".$session_hash."';";
}
$db->nonquery($queryStr);
header("Access-Control-Allow-Origin: *");
return 'OK';
}
|