﻿£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
<?php
require_once "../include/db.inc.php";
$month = date('MY');
$tb_name = "stat_video_".$month;
$ping_tb_name = 'stat_time_'.$month;
createTable($tb_name,$ping_tb_name);

$dataArr = array();
$finalData = array();

$dataArr['videoCode'] = @$_REQUEST['video_id'];
$dataArr['event'] = @$_REQUEST['event'];
$dataArr['ipAddress'] = @$_REQUEST['ipAddress'];
$dataArr['timeSpent'] = @$_REQUEST['timeSpent'];
$dataArr['session_key'] = trim(@$_REQUEST['session_key']);
$dataArr['videoLength'] = floor((isset($_REQUEST['videoLength']))? $_REQUEST['videoLength'] : '0');
$dataArr['videoIndex'] = (isset($_REQUEST['videoIndex']))? $_REQUEST['videoIndex'] : '0';
$dataArr['video_id'] = 0;
$dataArr['isFirstTime'] = @$_REQUEST['isFirstTime'];
$dataArr['device_name'] = @$_REQUEST['device_name'];
$dataArr['start_time'] = @$_REQUEST['start_time'];
$dataArr['end_time'] = @$_REQUEST['end_time'];
$dataArr['is_new'] = @$_REQUEST['is_new'];

//hetmap data variable
$dataArr['event'] = @$_REQUEST['event'];
$dataArr['video_length'] = @$_REQUEST['video_length'];
$dataArr['timeStamp'] = @$_REQUEST['timeStamp'];
$dataArr['session_key'] = @$_REQUEST['session_key'];

$urls =  parse_url($_REQUEST['referrer']);
$dataArr['domain'] =  $urls['host'];
$dataArr['referrer'] =  $_REQUEST['referrer'];

if($dataArr['referrer'] == "" || $dataArr['referrer'] == "null" || $dataArr['referrer'] == "undefined")
{
	$dataArr['referrer'] = "Unknown";
	$dataArr['domain'] = "Unknown";
}

switch($dataArr['event'])
{
	case "play":
		if(isVideoTrackingOn())
			$finalData = onPlay();
		break;
		
	case "pause":
	case "stop":
		if(isVideoTrackingOn())
			$finalData = onPause();
		break;
		
	case "complete":
		if(isVideoTrackingOn())
			$finalData = onComplete();
		break;
		
	case "videoLength":
		isVideoTrackingOn();
		$finalData = saveVideoLength();
		break;
	
	case "initialData":
		if(isVideoTrackingOn())
			$finalData = getInitialData();
		else { 
			$finalData['flag'] = FALSE;
			$finalData['data'] = array();
			$finalData['msg'] = "Video Tracking off"; 
		}
		break;
	
	case "sessionData":
		$finalData = getSessionData();
		break;
		
	default:
		if(isVideoTrackingOn())
			$finalData = onPing();
		break;
}

DbClose();

echo json_encode($finalData);

function isVideoTrackingOn()
{
	global $ping_tb_name,$tb_name,$dataArr;
	
	if($dataArr['videoCode']!= '')
	{
		$sql = "select VideoTracking,id from videos where code ='".$dataArr['videoCode']."'";
		$resT = mysql_query($sql) or die(mysql_error());
		$rowT = mysql_fetch_array($resT);
		$dataArr['video_id'] = $rowT['id'];
		mysql_free_result($resT);
		
		if($rowT['VideoTracking'] == 'Y')
			return true;
		else
			return false;
	}else
		return false;
}

function onComplete()
{
	global $ping_tb_name,$tb_name,$dataArr;
	$returnData = array();
	
	if($dataArr['timeSpent']!='' && $dataArr['session_key']!='' && $dataArr['video_id']!='' && $dataArr['video_id']!=0 && $dataArr['videoIndex']!='' && $dataArr['start_time']!='' && $dataArr['end_time']!='' && $dataArr['is_new']!='')
	{
		
		$sql = "update $tb_name set isCompleted='Y',timeSpent='".$dataArr['timeSpent']."',event='complete',time='".date('Y-m-d H:i:s',time())."' where video_id='".$dataArr['video_id']."' and session_key='".$dataArr['session_key']."' and event='play' and videoIndex = '".$dataArr['videoIndex']."'";
		$res = mysql_query($sql) or die(mysql_error());
	
		if($res)
		{
			if($dataArr['is_new'] == 'N')
			{
				$sql1 = "update $ping_tb_name set start_time = '".$dataArr['start_time']."',end_time = '".$dataArr['end_time']."' where session_key='".$dataArr['session_key']."' and video_id='".$dataArr['video_id']."' order by created_on desc limit 1";
				
				if(mysql_query($sql1)){ $returnData['flag'] = TRUE; $returnData['msg'] = "Video time updated Successfully"; }
				else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time updation Failed."; }
			}else{
				$sql1 = "INSERT INTO $ping_tb_name (`track_id`, `video_id`, `session_key`, `start_time`, `end_time`, `created_on`) 
							VALUES (NULL, ".$dataArr['video_id'].", '".$dataArr['session_key']."', '".$dataArr['start_time']."', '".$dataArr['end_time']."', '".date('Y-m-d H:i:s',time())."');";
				
				if(mysql_query($sql1)){ $returnData['flag'] = TRUE; $returnData['msg'] = "Video time Inserted Successfully"; }
				else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time inserting Failed."; }
			}
		}else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time updation or insertion Failed.";	}
		
	}else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Incorrect data.";	}
	
	return $returnData;
}

function onPlay()
{
	global $ping_tb_name,$tb_name,$dataArr;
	$returnData = array();

	if($dataArr['timeSpent']!='' && $dataArr['session_key']!='' && $dataArr['video_id']!='' && $dataArr['video_id']!=0 && $dataArr['videoIndex']!='')
	{
		if($dataArr['isFirstTime'] == 'Y')
		{
			if($dataArr['ipAddress'] == "")
				$ip = getIP();
			else
				$ip = $dataArr['ipAddress'];
			
			//$temp = get_country_by_ip($ip);
			$temp = geoCheckIP($ip);
			$temp['country'] = str_replace(",", "", $temp['country']);
			
			$sql = "INSERT INTO ".$tb_name." (`track_id`, `video_id`, `videoIndex`, `event`, `ipAddress`, `timeSpent`, `session_key`, `referrer`, `domain`, `city`, `country`, `device_name`, `time`, created_on, `isCompleted`) 
					VALUES (NULL, '".$dataArr['video_id']."', '".$dataArr['videoIndex']."', 'play', '$ip', '".$dataArr['timeSpent']."', '".$dataArr['session_key']."', '".$dataArr['referrer']."', '".$dataArr['domain']."', '".$temp['town']."', '".$temp['country']."', '".$dataArr['device_name']."', '".date('Y-m-d H:i:s',time())."', '".date('Y-m-d H:i:s',time())."', 'N');";
		}else{
			$sql = "update $tb_name set timeSpent='".$dataArr['timeSpent']."',event='play',time='".date('Y-m-d H:i:s',time())."' 
					where video_id='".$dataArr['video_id']."' and session_key='".$dataArr['session_key']."' and videoIndex = '".$dataArr['videoIndex']."'";
		}
		$res = mysql_query($sql) or die(mysql_error());
		
		if($res){ $returnData['flag'] = TRUE; $returnData['msg'] = "Video time Inserted or Updated Successfully"; }
		else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time insertion or updation Failed."; }
		
	}else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Incorrect data.";	}
	
	return $returnData;
}

function onPing()
{
	global $ping_tb_name,$tb_name,$dataArr;
	$returnData = array();
	
	if($dataArr['timeSpent']!='' && $dataArr['session_key']!='' && $dataArr['video_id']!='' && $dataArr['video_id']!=0 && $dataArr['videoIndex']!='' && $dataArr['start_time']!='' && $dataArr['end_time']!='' && $dataArr['is_new']!='')
	{
		$sql = "update $tb_name set timeSpent = '".$dataArr['timeSpent']."',time = '".date('Y-m-d H:i:s',time())."' where session_key='".$dataArr['session_key']."' and video_id='".$dataArr['video_id']."' and event = 'play' and videoIndex = '".$dataArr['videoIndex']."'";
		$res = mysql_query($sql) or die(mysql_error());
		
		if($res)
		{
			if($dataArr['is_new'] == 'N')
			{
				$sql1 = "update $ping_tb_name set start_time = '".$dataArr['start_time']."',end_time = '".$dataArr['end_time']."' where session_key='".$dataArr['session_key']."' and video_id='".$dataArr['video_id']."' order by created_on desc limit 1";

				if(mysql_query($sql1)){ $returnData['flag'] = TRUE; $returnData['msg'] = "Video time updated Successfully."; }
				else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time updation Failed."; }
			}else{
				$sql1 = "INSERT INTO $ping_tb_name (`track_id`, `video_id`, `session_key`, `start_time`, `end_time`, `created_on`) 
							VALUES (NULL, ".$dataArr['video_id'].", '".$dataArr['session_key']."', '".$dataArr['start_time']."', '".$dataArr['end_time']."', '".date('Y-m-d H:i:s',time())."');";
				
				if(mysql_query($sql1)){ $returnData['flag'] = TRUE; $returnData['msg'] = "Video time Inserted Successfully."; }
				else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time inserting Failed."; }
			}
		}else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time updation or insertion Failed.";	}
		
	}else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Incorrect data.";	}

	return $returnData;
}

function onPause()
{
	global $ping_tb_name,$tb_name,$dataArr;
	$returnData = array();
	
	if($dataArr['timeSpent']!='' && $dataArr['session_key']!='' && $dataArr['video_id']!='' && $dataArr['video_id']!=0 && $dataArr['videoIndex']!='' && $dataArr['start_time']!='' && $dataArr['end_time']!='' && $dataArr['is_new']!='')
	{
		
		$sql = "update $tb_name set timeSpent='".$dataArr['timeSpent']."',event='".$dataArr['event']."',time='".date('Y-m-d H:i:s',time())."' where video_id='".$dataArr['video_id']."' and session_key='".$dataArr['session_key']."' and event='play' and videoIndex = '".$dataArr['videoIndex']."'";
		$res = mysql_query($sql) or die(mysql_error());
	
		if($res)
		{
			if($dataArr['is_new'] == 'N')
			{
				$sql1 = "update $ping_tb_name set start_time = '".$dataArr['start_time']."',end_time = '".$dataArr['end_time']."' where session_key='".$dataArr['session_key']."' and video_id='".$dataArr['video_id']."' order by created_on desc limit 1";
				
				if(mysql_query($sql1)){ $returnData['flag'] = TRUE; $returnData['msg'] = "Video time updated Successfully"; }
				else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time updation Failed."; }
			}else{
				$sql1 = "INSERT INTO $ping_tb_name (`track_id`, `video_id`, `session_key`, `start_time`, `end_time`, `created_on`) 
							VALUES (NULL, ".$dataArr['video_id'].", '".$dataArr['session_key']."', '".$dataArr['start_time']."', '".$dataArr['end_time']."', '".date('Y-m-d H:i:s',time())."');";
				
				if(mysql_query($sql1)){ $returnData['flag'] = TRUE; $returnData['msg'] = "Video time Inserted Successfully"; }
				else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time inserting Failed."; }
			}
		}else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Video time updation or insertion Failed.";	}
		
	}else{ $returnData['flag'] = FALSE; $returnData['msg'] = "Incorrect data.";	}
	
	return $returnData;
}

function saveVideoLength()
{
	global $ping_tb_name,$tb_name,$dataArr;
	$returnData = array();

	if($dataArr['video_id']!= 0 && $dataArr['video_id']!= '' && $dataArr['videoLength']!='')
	{
		$res = mysql_query("update videos set videoLength='".$dataArr['videoLength']."' where id='".$dataArr['video_id']."'") or die(mysql_error());

		if($res) { $returnData['flag'] = TRUE;
			$returnData['msg'] = "VideoLength Saved Successfully.";  }
		else { $returnData['flag'] = FALSE;
			$returnData['msg'] = "VideoLength: SQL error occured."; }

	}else{
		$returnData['flag'] = FALSE;
		$returnData['msg'] = "Incorrect data.";
	}

	return $returnData;
}

function getInitialData()
{
	global $ping_tb_name,$tb_name,$dataArr;
	$returnData = array();
	$temp = array();
	$colorArr = getColorSchemeArr();
	
	$len = DbQuery("select videoLength from videos where code = '".$dataArr['videoCode']."'");
	for($i=1;$i<=$len;$i++)
		$temp[$i] = DbQuery(AnalyticsTableUnion('count(track_id)',$dataArr['video_id'],'stat_time_',"where start_time <= '$i' and end_time >= '$i'"));
	
	if(empty($temp))
		$max = 0;
	else
		$max = max($temp);
	
	if($max < 10)
		$max = 10;
	
	for($i=1;$i<=$len;$i++)
	{
		$arr = array();
		$arr['second'] = $i;
		$arr['color'] = (round(($temp[$i]*100)/$max) == 0)?'':$colorArr[round(($temp[$i]*100)/$max)];
		$arr['views'] = $temp[$i];
		
		$returnData['data'][] = $arr;
	}

	$returnData['flag'] = TRUE;
	$returnData['msg'] = 'Successfully sended data';
	return $returnData;
}

function getSessionData()
{
	global $ping_tb_name,$tb_name,$dataArr;
	
	$returnData = array();
	$colorArr = getColorSchemeArr1();

	$res1 = DbQuery("select start_time,end_time from stat_time_".date('MY',strtotime($dataArr['timeStamp']))." where session_key = '".$dataArr['session_key']."'");

	$temp = array();
	if(count($res1) > 0 && $res1)
	{
		foreach($res1 as $row1)
		{
			$start = $row1['start_time'];
			while($start <= $row1['end_time'])
				$temp[] = $start++;
		}
	}
	
	$MainArr = array();
	$te = array_count_values($temp);
	
	if(empty($te))
		$max = 0;
	else
		$max = max($te);
	
	if($max < 5)
		$max = 5;
	
	for($i=0;$i<=$dataArr['video_length'];$i++)
	{
		$MainArr[$i]['views'] = ($te[$i]=='')?0:$te[$i];
		$MainArr[$i]['second'] = $i;
		$MainArr[$i]['color'] = (round(($te[$i]*100)/$max) == 0)?'#ffffff':$colorArr[round(($te[$i]*100)/$max)];
	}

	$returnData['data'] = $MainArr;

	$returnData['flag'] = TRUE;
	$returnData['msg'] = 'Successfully sended data';
	return $returnData;
}

function getColorSchemeArr()
{
	$color = array('', '#d5f46b', '#a4cc2b', '#f3bb5a', '#ffcc00', '#ff983d', '#D26900', '#FF7171', '#ff5400', '#FF1A1A', '#D50000');
	$colorInterval = array();
	for($i=1; $i<=100; $i++)
		$colorInterval[$i] = $color[floor($i/10)];
	return $colorInterval;
}

function getColorSchemeArr1()
{
	$color = array('', '#d5f46b', '#f3f357', '#f3bb5a', '#e1832b', '#e1832b');
	$colorInterval = array();
	for($i=1; $i<=100; $i++)
		$colorInterval[$i] = $color[floor($i/20)];
	return $colorInterval;
}

function get_country_by_ip($ip)
{
	//$ip =$_SERVER['REMOTE_ADDR'];
	$url='http://api.hostip.info/get_html.php?ip='.$ip.'&position=true';
 
	$data=file_get_contents($url);
	$a=array();
	$keys=array('Country','City','Latitude','Longitude','IP');
	$keycount=count($keys);
	for ($r=0; $r < $keycount ; $r++)
	{
		$sstr= substr ($data, strpos($data, $keys[$r]), strlen($data));
		if ( $r < ($keycount-1))
			$sstr = substr ($sstr, 0, strpos($sstr,$keys[$r+1]));
		$s=explode (':',$sstr);
		$a[$keys[$r]] = trim($s[1]);
	}
 
	return $a;
}

function geoCheckIP($ip)
{
	   //check, if the provided ip is valid
	   if(!filter_var($ip, FILTER_VALIDATE_IP))
	   {
			throw new InvalidArgumentException("IP is not valid");
	   }

	   //contact ip-server
	   $response=@file_get_contents('http://www.netip.de/search?query='.$ip);
	   if (empty($response))
	   {
			throw new InvalidArgumentException("Error contacting Geo-IP-Server");
	   }

	   //Array containing all regex-patterns necessary to extract ip-geoinfo from page
	   $patterns=array();
	   $patterns["domain"] = '#Domain: (.*?)&nbsp;#i';
	   $patterns["country"] = '#Country: (.*?)&nbsp;#i';
	   $patterns["state"] = '#State/Region: (.*?)<br#i';
	   $patterns["town"] = '#City: (.*?)<br#i';

	   //Array where results will be stored
	   $ipInfo=array();

	   //check response from ipserver for above patterns
	   foreach ($patterns as $key => $pattern)
	   {
		   //store the result in array
		   $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found';
	   }

	   return $ipInfo;
}

function getIP()
{
	if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
	  $ip=$_SERVER['HTTP_CLIENT_IP'];

	elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
		  $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
	else
	  $ip=$_SERVER['REMOTE_ADDR'];

	return $ip;
}

function createTable($tb_name,$ping_tb_name)
{
	$sql = "CREATE TABLE IF NOT EXISTS $tb_name (
	  `track_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'auto increment id',
	  `video_id` int(11) NOT NULL COMMENT 'video id of video which is tracked',
	  `videoIndex` int(3) NOT NULL COMMENT 'video index for sub videos',
	  `event` varchar(11) NOT NULL COMMENT 'play , stop, ping, pause and complete',
	  `ipAddress` varchar(20) NOT NULL COMMENT 'request from this ip',
	  `timeSpent` varchar(20) NOT NULL COMMENT 'time upto which user has seen video',
	  `session_key` varchar(50) NOT NULL COMMENT 'unique session key to track how many times video played.',
	  `referrer` varchar(500) NOT NULL COMMENT 'reference url from video has been played.',
	  `domain` varchar(60) NOT NULL COMMENT 'domain from where video is played',
	  `city` varchar(50) NOT NULL COMMENT 'city where video is played',
	  `country` varchar(50) NOT NULL COMMENT 'country where video is played',
	  `device_name` varchar(10) NOT NULL COMMENT 'Windows,Mac,iPhone,iPad,Anroid,Other',
	  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'created date',
	  `created_on` datetime NOT NULL,
	  `isCompleted` char(1) NOT NULL DEFAULT 'N' COMMENT '''Y ''- video is completed &'' N'' video incomplete',
	  PRIMARY KEY (`track_id`),
	  KEY `time` (`time`),
	  KEY `video_id` (`video_id`)
	) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;";

	mysql_query($sql) or die(mysql_error());
	
	$sqll = "CREATE TABLE IF NOT EXISTS $ping_tb_name (
	  `track_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'auto increment id',
	  `video_id` int(11) NOT NULL COMMENT 'video id of video which is tracked',
	  `session_key` varchar(50) NOT NULL COMMENT 'unique session key to track how many times video played.',
	  `start_time` bigint(20) NOT NULL COMMENT 'start time of video in second',
	  `end_time` bigint(20) NOT NULL COMMENT 'end time of video in second',
	  `created_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'created date',
	  PRIMARY KEY (`track_id`),
	  KEY `video_id` (`video_id`),
	  KEY `start_time` (`start_time`),
	  KEY `end_time` (`end_time`)
	) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;";

	mysql_query($sqll) or die(mysql_error());
}
?>