Skip to content
This repository has been archived by the owner on Apr 24, 2019. It is now read-only.

Commit

Permalink
Adding dedicated download tracker table. Based on SPF stats class.
Browse files Browse the repository at this point in the history
  • Loading branch information
Tyler Hall committed Aug 18, 2009
1 parent 2e09042 commit 2d31d61
Show file tree
Hide file tree
Showing 4 changed files with 204 additions and 20 deletions.
5 changes: 4 additions & 1 deletion download.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,8 @@
$v = DBObject::glob('Version', 'SELECT * FROM versions WHERE app_id = $app_id ORDER BY dt DESC LIMIT 1');
$v = array_pop($v);
$v->downloads++;
$v->update();
$v->update();

Download::track();

header('Location: ' . $v->url);
151 changes: 151 additions & 0 deletions includes/class.download.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
<?PHP
// Track your page with...
// Stats::track($some_page_title);

class Download
{
private static $me;

private function __construct()
{

}

public static function track($page_title = '')
{
$db = Database::getDatabase();

$dt = dater();
$referer = getenv('HTTP_REFERER');
$referer_is_local = self::refererIsLocal($referer);
$url = full_url();
$search_terms = self::searchTerms();
$img_search = '';
$ip = self::getIP();
$info = self::browserInfo();
$browser_family = $info['browser'];
$browser_version = $info['version'];
$os = $info['platform'];
$os_version = '';
$user_agent = $info['useragent'];

$exec_time = defined('START_TIME') ? microtime(true) - START_TIME : 0;
$num_queries = $db->numQueries();

$sql = "INSERT INTO downloads (dt, referer, referer_is_local, url, page_title, search_terms, img_search, browser_family, browser_version, os, os_version, ip, user_agent, exec_time, num_queries)
VALUES (:dt, :referer, :referer_is_local, :url, :page_title, :search_terms, :img_search, :browser_family, :browser_version, :os, :os_version, :ip, :user_agent, :exec_time, :num_queries)";
$vals = array('dt' => $dt,
'referer_is_local' => $referer_is_local,
'referer' => $referer,
'url' => $url,
'page_title' => $page_title,
'search_terms' => $search_terms,
'img_search' => $img_search,
'ip' => $ip,
'browser_family' => $browser_family,
'browser_version' => $browser_version,
'os_version' => $os_version,
'os' => $os,
'user_agent' => $user_agent,
'exec_time' => $exec_time,
'num_queries' => $num_queries);
$db->query($sql, $vals);
}

public static function refererIsLocal($referer = null)
{
if(is_null($referer)) $referer = getenv('HTTP_REFERER');
if(!strlen($referer)) return 0;
$regex_host = preg_quote(getenv('HTTP_HOST'));
return (preg_match("!^https?://$regex_host!i", $referer) !== false) ? 1 : 0;
}

public static function getIP()
{
$ip = getenv('HTTP_X_FORWARDED_FOR');
if(!$ip) $ip = getenv('HTTP_CLIENT_IP');
if(!$ip) $ip = getenv('REMOTE_ADDR');
return $ip;
}

public static function searchTerms($url = null)
{
if(is_null($url)) $url = full_url();
// if(self::refererIsLocal($url)) return;

$arr = array();
parse_str(parse_url($url, PHP_URL_QUERY), $arr);

return isset($arr['q']) ? $arr['q'] : '';
}

// From http://us3.php.net/get_browser comments
public static function browserInfo($a_browser = false, $a_version = false, $name = false)
{
$browser_list = 'msie firefox konqueror safari netscape navigator opera mosaic lynx amaya omniweb chrome avant camino flock seamonkey aol mozilla gecko';
$user_browser = strtolower(getenv('HTTP_USER_AGENT'));
$this_version = $this_browser = '';

$browser_limit = strlen($user_browser);
foreach(explode(' ', $browser_list) as $row)
{
$row = ($a_browser !== false) ? $a_browser : $row;
$n = stristr($user_browser, $row);
if(!$n || !empty($this_browser)) continue;

$this_browser = $row;
$j = strpos($user_browser, $row) + strlen($row) + 1;
for(; $j <= $browser_limit; $j++)
{
$s = trim(substr($user_browser, $j, 1));
$this_version .= $s;

if($s === '') break;
}
}

if($a_browser !== false)
{
$ret = false;
if(strtolower($a_browser) == $this_browser)
{
$ret = true;

if($a_version !== false && !empty($this_version))
{
$a_sign = explode(' ', $a_version);
if(version_compare($this_version, $a_sign[1], $a_sign[0]) === false)
{
$ret = false;
}
}
}

return $ret;
}

$this_platform = '';
if(strpos($user_browser, 'linux'))
{
$this_platform = 'linux';
}
elseif(strpos($user_browser, 'macintosh') || strpos($user_browser, 'mac platform x'))
{
$this_platform = 'mac';
}
elseif(strpos($user_browser, 'windows') || strpos($user_browser, 'win32'))
{
$this_platform = 'windows';
}

if($name !== false)
{
return $this_browser . ' ' . $this_version;
}

return array("browser" => $this_browser,
"version" => $this_version,
"platform" => $this_platform,
"useragent" => $user_browser);
}
}
6 changes: 5 additions & 1 deletion ipn.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
{
$app = new Application();
$app->select($_POST['item_number']);
if(!$app->ok()) error_log("Application {$_POST['item_name']} not found!");
if(!$app->ok())
{
error_log("Application {$_POST['item_name']} {$_POST['item_number']} not found!");
exit;
}

$o = new Order();
$o->load($_POST);
Expand Down
62 changes: 44 additions & 18 deletions mysql.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Aug 07, 2009 at 05:49 PM
-- Generation Time: Aug 17, 2009 at 10:12 PM
-- Server version: 5.0.51
-- PHP Version: 5.2.4-2ubuntu5.6
--
Expand Down Expand Up @@ -37,7 +37,33 @@ CREATE TABLE `applications` (
`license_type` enum('ap','custom') character set utf8 collate utf8_unicode_ci NOT NULL,
`return_url` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `downloads`
--

CREATE TABLE `downloads` (
`id` int(11) NOT NULL auto_increment,
`dt` datetime NOT NULL default '0000-00-00 00:00:00',
`referer` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`referer_is_local` tinyint(4) NOT NULL default '0',
`url` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`page_title` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`search_terms` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`img_search` tinyint(4) NOT NULL default '0',
`browser_family` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`browser_version` varchar(15) collate utf8_unicode_ci NOT NULL default '',
`os` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`os_version` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`ip` varchar(15) collate utf8_unicode_ci NOT NULL default '',
`user_agent` varchar(255) collate utf8_unicode_ci NOT NULL default '',
`exec_time` float NOT NULL default '0',
`num_queries` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

Expand All @@ -64,7 +90,19 @@ CREATE TABLE `feedback` (
`reguser` varchar(255) NOT NULL,
`regmail` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `options`
--

CREATE TABLE `options` (
`key` varchar(255) collate utf8_unicode_ci NOT NULL,
`value` varchar(255) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

Expand Down Expand Up @@ -102,7 +140,7 @@ CREATE TABLE `orders` (
`mc_gross` float NOT NULL,
`custom` varchar(255) character set latin1 NOT NULL,
`license` text character set latin1 NOT NULL,
`type` enum('PayPal','Manual','Student') character set latin1 NOT NULL,
`type` enum('PayPal','Manual','Student','MUPromo') character set latin1 NOT NULL,
`deleted` tinyint(4) NOT NULL,
`hash` varchar(5) character set latin1 NOT NULL,
`claimed` tinyint(4) NOT NULL,
Expand Down Expand Up @@ -133,7 +171,7 @@ CREATE TABLE `sparkle_data` (
`key` varchar(128) NOT NULL,
`data` varchar(128) NOT NULL,
KEY `sparkle_id` (`sparkle_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

Expand All @@ -146,7 +184,7 @@ CREATE TABLE `sparkle_reports` (
`dt` datetime NOT NULL,
`ip` varchar(15) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

Expand Down Expand Up @@ -183,15 +221,3 @@ CREATE TABLE `versions` (
`signature` varchar(65) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `options`
--

CREATE TABLE `options` (
`key` varchar(255) collate utf8_unicode_ci NOT NULL,
`value` varchar(255) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

0 comments on commit 2d31d61

Please sign in to comment.