<?php
/**
* Project: ePrintstats
* File: inc.class.mysql.es.php
* Description: All SQL interactions via this object.
* This includes connections, adding, updating, inserting.
*/
class sqlconn {
var $_mysql_error = array();
var $_database;
var $_host_info;
var $_debug = FALSE;
var $_debugAll = array();
function doConnectServer($sqlserver,$sqluser,$sqlpass)
{
$connect = mysql_pconnect ($sqlserver,$sqluser,$sqlpass)
or sqlconn::_setError(mysql_errno(),mysql_error());
$db_list = mysql_list_dbs($connect);
while ($row = mysql_fetch_object($db_list)) {
$this->_db_list[] = $row->Database;
}
$this->_host_info = sprintf ("MySQL host info: %s\n", mysql_get_host_info());
return $connect;
}
function doConnectDb($sqldatabase)
{
$db = mysql_select_db($sqldatabase)
or sqlconn::_setError(mysql_errno(),mysql_error());
sqlconn::_setError(mysql_errno(),mysql_error());
$this->_database = $sqldatabase;
return $db;
}
function closeConnection()
{
mysql_close();
}
function getHostInfo()
{
return $this->_host_info;
}
function setDebug($debuglevel)
{
$this->_debug = $debuglevel;
}
function getDebug()
{
$_outstring = '';
foreach ($this->_debugAll as $k=>$v) {
$_outstring .= $v;
}
return $_outstring;
}
function getError()
{
return $this->_mysql_error;
}
/*
* @return void
* @param $input unknown
* @desc HTML output debug info
* @usage sqlconn::_debug($this->_db_schema);
*/
function _debug($output,$line,$file,$function,$class)
{
ob_start();
print "<div class=\"debug\">\n";
print "<pre>\n";
if (!empty($line)) { print "LINE: $line\n"; };
if (!empty($file)) { print "FILE: $file\n"; };
if (!empty($function)) { print "FUNCTION: $function\n"; };
if (!empty($class)) { print "CLASS: $class\n"; };
//if (!empty($method)) { print "METHOD: $method\n"; }; // Only > PHP5
print_r($output);
print "</ pre></div>";
$ret_str = ob_get_contents();
ob_end_clean();
$this->_debugAll[] = $ret_str;
}
function _setError($mysql_errno,$mysql_error)
{
/*
* May be of limited use where a method makes multiple calls
* and one error message is replaced by another.
*/
$this->_mysql_error["code"] = $mysql_errno;
$this->_mysql_error["text"] = $mysql_error;
}
/********************************************
*
*
* Program specific
*
**********************************************/
/* ------------------------------------------------------------------------------
This function is a rewritten version of getCumulativeUsage, to optionally
select the view_type.
(c) Copyright 2004 Arthur Sale, University of Tasmania
Parameters:
id # of eprint
strings 'abstract', 'download' or anything else acts as view=abstract+download
Returns:
Result array from query or failure
------------------------------------------------------------------------------ */
function getCumulativeUsageType($id,$type)
{
// Formulate the id part of the select
$id = (int) $id;
$part1 = ($id > 1);
if ($part1) {
$limit1 = "archiveid = $id";
} else {
$limit1 = '';
}
// Formulate the view part of the select
if ($type == 'download') {
$limit2 = 'view_type = "download"';
$part2 = true;
} elseif ($type == 'abstract') {
$limit2 = 'view_type = "abstract"';
$part2 = true;
} else {
$limit2 = '';
$part2 = false;
}
// Combine the parts as needed
if ($part1 and $part2) {
$limit = $limit1 . ' AND ' . $limit2;
} else {
$limit = $limit1 . $limit2;
}
if ($part1 or $part2) {
$limit = 'WHERE ' . $limit;
}
// Create a result array
$records = array();
//Build up the query
$query = "
select count(*) as count,month(request_date) as monthnum,date_format(request_date,'%b') as month,year(request_date) as year from view
$limit
group by year(request_date),month(request_date) order by request_date desc
";
// Make the query
$result = mysql_query($query);
if (!$result) {
sqlconn::_setError(mysql_errno(),mysql_error());
return mysql_error();
} else {
while ($row = mysql_fetch_assoc($result)) {
$records[] = $row;
}
return $records;
}
}
/* ------------------------------------------------------------------------------
This function is a rewritten version of getCumulativeUsageCountry, to optionally
select the view_type.
(c) Copyright 2004 Arthur Sale, University of Tasmania
Parameters:
id # of eprint
strings 'abstract', 'download' or anything else acts as view=abstract+download
Returns:
Result array from query or failure
------------------------------------------------------------------------------ */
function getCumulativeUsageCountryType($type)
{
// Formulate the view part of the select
if ($type == 'download') {
$limit2 = 'WHERE view_type = "download" ';
} elseif ($type == 'abstract') {
$limit2 = 'WHERE view_type = "abstract" ';
} else {
$limit2 = '';
}
// Create a result array
$records = array();
//Build up the query
$query = 'select count(*) as count,country_name,country_code from view ' .
$limit2 .
'group by country_name order by count desc';
$result = mysql_query($query);
if (!$result) {
sqlconn::_setError(mysql_errno(),mysql_error());
return mysql_error();
} else {
while ($row = mysql_fetch_assoc($result)) {
$records[] = $row;
}
return $records;
}
}
/* ------------------------------------------------------------------------------ */
function getArchiveCountDate($year,$month,$range,$type='download')
{
$year = (int) $year;
$month = (int) $month;
$records = array();
// create a date based limit
$date_range = '';
if($year>=2002 and $year<2100) {
if($month>0 and $month<=12) {
$date_range = "WHERE year(request_date) = $year and month(request_date) = $month";
} else {
$date_range = "WHERE year(request_date) = $year";
}
}
if($range=='4w') {
$date_range = "WHERE request_date >= date_sub(curdate(),INTERVAL 1 MONTH)";
}
// Constrain the view to downloads - Arthur Sale addition -----------
if ($date_range != '') {
$date_range = $date_range . ' AND view_type = "download"';
} else { // empty
$date_range = 'WHERE view_type = "download"';
}
// End of addition --------------------------------------------------
$query = "
select count(*) as count,archiveid,eprint_name from view
$date_range
group by archiveid order by count desc
";
$result = mysql_query($query);
if (!$result) {
sqlconn::_setError(mysql_errno(),mysql_error());
return mysql_error();
} else {
while ($row = mysql_fetch_assoc($result)) {
$records[] = $row;
}
return $records;
}
}
/* New */
function getCountryEprintType($year,$month,$rnge,$type,$id)
{
$year = (int) $year;
$month = (int) $month;
$records = array();
// Generate type enquiry
if ($type == 'download') {
$limit2 = ' AND view_type = "download" ';
} elseif ($type == 'abstract') {
$limit2 = ' AND view_type = "abstract" ';
} else {
$limit2 = '';
}
// generate date enquiry
$date_range = '';
if($year>=2002 and $year<2100) {
if($month>0 and $month<=12) {
$date_range = " AND year(request_date) = $year AND month(request_date) = $month";
} else {
$date_range = " AND year(request_date) = $year";
}
}
if($rnge=='4w') {
$date_range = " AND request_date >= date_sub(curdate(),INTERVAL 1 MONTH)";
}
$query =
'select count(*) as count,country_name,country_code from view WHERE archiveid = ' .
$id .
$limit2 .
$date_range .
' GROUP BY country_name ORDER BY count DESC';
$result = mysql_query($query);
if (!$result) {
sqlconn::_setError(mysql_errno(),mysql_error());
return mysql_error();
} else {
while ($row = mysql_fetch_assoc($result)) {
$records[] = $row;
}
return $records;
}
}
function getTitle($id)
{
// Get the title of an eprint given its id
$query = "SELECT eprint_name FROM view WHERE archiveid = '$id'";
$result = mysql_query($query);
if (!$result) {
sqlconn::_setError(mysql_errno(),mysql_error());
return;
} else {
$row = mysql_fetch_assoc($result);
return $row["eprint_name"];
}
}
function getAbstractDownload($year,$month,$range,$type='download',$id)
{
$year = (int) $year;
$month = (int) $month;
$records = array();
$date_range = '';
if($year>=2002 and $year<2005) {
if($month>0 and $month<=12) {
$date_range = "AND year(request_date) = $year and month(request_date) = $month";
} else {
$date_range = "AND year(request_date) = $year";
}
}
if($range=='4w') {
$date_range = "AND request_date >= date_sub(curdate(),INTERVAL 1 MONTH)";
}
$query = "
select count(*) as count,view_type from view
WHERE archiveid = $id
$date_range
group by view_type order by count desc
";
$result = mysql_query($query);
if (!$result) {
sqlconn::_setError(mysql_errno(),mysql_error());
return mysql_error();
} else {
while ($row = mysql_fetch_assoc($result)) {
$records[] = $row;
}
return $records;
}
}
function getLastProc()
{
// Get the time that the stats were last processed.
$query = "SELECT timeinsert FROM lastproc ORDER BY timeinsert DESC LIMIT 1;";
$result = mysql_query($query);
if (!$result) {
sqlconn::_setError(mysql_errno(),mysql_error());
return;
} else {
$row = mysql_fetch_assoc($result);
return $row["timeinsert"];
}
}
}
?>