@ -8,104 +8,104 @@
*/
class StatsUtils
{
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc return one result from a sql query (1 single result)
*/
public static function getOneResult($sql)
{
$query = Database::query($sql);
if ($query !== false) {
$res = @Database::fetch_array($query, 'NUM');
} else {
$res = array();
}
return $res[0];
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc return one result from a sql query (1 single result)
*/
public static function getOneResult($sql)
{
$query = Database::query($sql);
if ($query !== false) {
$res = @Database::fetch_array($query, 'NUM');
} else {
$res = array();
}
return $res[0];
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc Return many results of a query in a 1 column tab
*/
public static function getManyResults1Col($sql)
{
$res = Database::query($sql);
if ($res !== false) {
$i = 0;
while ($resA = Database::fetch_array($res, 'NUM')) {
$resu[$i++] = $resA[0];
}
}
return $resu;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc Return many results of a query in a 1 column tab
*/
public static function getManyResults1Col($sql)
{
$res = Database::query($sql);
if ($res !== false) {
$i = 0;
while ($resA = Database::fetch_array($res, 'NUM')) {
$resu[$i++] = $resA[0];
}
}
return $resu;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc Return many results of a query
*/
public static function getManyResults2Col($sql)
{
$res = Database::query($sql);
if ($res !== false) {
$i = 0;
while ($resA = Database::fetch_array($res, 'NUM')) {
$resu[$i][0] = $resA[0];
$resu[$i][1] = $resA[1];
$i++;
}
}
return $resu;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc Return many results of a query
*/
public static function getManyResults2Col($sql)
{
$res = Database::query($sql);
if ($res !== false) {
$i = 0;
while ($resA = Database::fetch_array($res, 'NUM')) {
$resu[$i][0] = $resA[0];
$resu[$i][1] = $resA[1];
$i++;
}
}
return $resu;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc Return many results of a query in a 3 column tab
* in $resu[$i][0], $resu[$i][1],$resu[$i][2]
*/
public static function getManyResults3Col($sql)
{
$res = Database::query($sql);
if ($res !== false) {
$i = 0;
while ($resA = Database::fetch_array($res, 'NUM')) {
$resu[$i][0] = $resA[0];
$resu[$i][1] = $resA[1];
$resu[$i][2] = $resA[2];
$i++;
}
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc Return many results of a query in a 3 column tab
* in $resu[$i][0], $resu[$i][1],$resu[$i][2]
*/
public static function getManyResults3Col($sql)
{
$res = Database::query($sql);
if ($res !== false) {
$i = 0;
while ($resA = Database::fetch_array($res, 'NUM')) {
$resu[$i][0] = $resA[0];
$resu[$i][1] = $resA[1];
$resu[$i][2] = $resA[2];
$i++;
}
}
return $resu;
}
return $resu;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc Return many results of a query in a X column tab
* in $resu[$i][0], $resu[$i][1],$resu[$i][2],...
* this function is more 'standard' but use a little
* more ressources
* So I encourage to use the dedicated for 1, 2 or 3
* columns of results
*/
public static function getManyResultsXCol($sql, $X)
{
$res = Database::query($sql);
if ($res !== false) {
$i = 0;
while ($resA = Database::fetch_array($res, 'NUM')) {
for ($j = 0; $j < $X; $j++) {
$resu[$i][$j] = $resA[$j];
}
$i++;
}
}
return $resu;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @desc Return many results of a query in a X column tab
* in $resu[$i][0], $resu[$i][1],$resu[$i][2],...
* this function is more 'standard' but use a little
* more ressources
* So I encourage to use the dedicated for 1, 2 or 3
* columns of results
*/
public static function getManyResultsXCol($sql, $X)
{
$res = Database::query($sql);
if ($res !== false) {
$i = 0;
while ($resA = Database::fetch_array($res, 'NUM')) {
for ($j = 0; $j < $X; $j++) {
$resu[$i][$j] = $resA[$j];
}
$i++;
}
}
return $resu;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
@ -115,170 +115,169 @@ class StatsUtils
* the number of time this hours was found.
* key 'total' return the sum of all number of time hours
* appear
*/
public static function hoursTab($sql)
{
$hours_array = array('total' => 0);
$res = Database::query($sql);
if ($res !== false) {
$last_hours = -1;
while ($row = Database::fetch_row($res)) {
$date_array = getdate($row[0]);
if ($date_array['hours'] == $last_hours) {
$hours_array[$date_array['hours']]++;
} else {
$hours_array[$date_array['hours']] = 1;
$last_hours = $date_array['hours'];
}
$hours_array['total']++;
}
Database::free_result($res);
}
return $hours_array;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @return days_array
* @desc Return an assoc array. Keys are the days, values are
* the number of time this hours was found.
* key "total" return the sum of all number of time days
* appear
*/
public static function daysTab($sql)
{
$MonthsShort = api_get_months_short();
$days_array = array('total' => 0);
$res = Database::query($sql);
if ($res !== false) {
$last_day = -1;
while ($row = Database::fetch_row($res)) {
$date_array = getdate($row[0]);
$display_date = $date_array['mday'] . ' ' . $MonthsShort[$date_array['mon'] - 1] . ' ' . $date_array['year'];
if ($date_array['mday'] == $last_day) {
$days_array[$display_date]++;
} else {
$days_array[$display_date] = 1;
$last_day = $display_date;
}
$days_array['total']++;
}
Database::free_result($res);
}
return $days_array;
}
*/
public static function hoursTab($sql)
{
$hours_array = array('total' => 0);
$res = Database::query($sql);
if ($res !== false) {
$last_hours = -1;
while ($row = Database::fetch_row($res)) {
$date_array = getdate($row[0]);
if ($date_array['hours'] == $last_hours) {
$hours_array[$date_array['hours']]++;
} else {
$hours_array[$date_array['hours']] = 1;
$last_hours = $date_array['hours'];
}
$hours_array['total']++;
}
Database::free_result($res);
}
return $hours_array;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @return month_array
* @desc Return an assoc array. Keys are the days, values are
* the number of time this hours was found.
* key "total" return the sum of all number of time days
* appear
*/
public static function monthTab($sql)
{
$MonthsLong = api_get_months_long();
$month_array = array('total' => 0);
$res = Database::query($sql);
if ($res !== false) {
// init tab with all months
for ($i = 0; $i < 12 ; $ i + + ) {
$month_array[$MonthsLong[$i]] = 0;
}
while ($row = Database::fetch_row($res)) {
$date_array = getdate($row[0]);
$month_array[$MonthsLong[$date_array['mon'] - 1]]++;
$month_array['total']++;
}
Database::free_result($res);
}
return $month_array;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @return days_array
* @desc Return an assoc array. Keys are the days, values are
* the number of time this hours was found.
* key "total" return the sum of all number of time days
* appear
*/
public static function daysTab($sql)
{
$MonthsShort = api_get_months_short();
$days_array = array('total' => 0);
$res = Database::query($sql);
if ($res !== false) {
$last_day = -1;
while ($row = Database::fetch_row($res)) {
$date_array = getdate($row[0]);
$display_date = $date_array['mday'] . ' ' . $MonthsShort[$date_array['mon'] - 1] . ' ' . $date_array['year'];
if ($date_array['mday'] == $last_day) {
$days_array[$display_date]++;
} else {
$days_array[$display_date] = 1;
$last_day = $display_date;
}
$days_array['total']++;
}
Database::free_result($res);
}
return $days_array;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param period_array : an array provided by hoursTab($sql) or daysTab($sql)
* @param periodTitle : title of the first column, type of period
* @param linkOnPeriod :
* @desc Display a 4 column array
* Columns are : hour of day, graph, number of hits and %
* First line are titles
* next are informations
* Last is total number of hits
*/
public static function makeHitsTable($period_array, $periodTitle, $linkOnPeriod = '???')
{
echo "< table width = '100%' cellpadding = '0' cellspacing = '1' border = '0' align = center class = 'minitext' > ";
// titles
echo "< tr bgcolor = '#E6E6E6' align = 'center' >
< td width = '15%' >
< b > $periodTitle< / b >
< / td >
< td width = '60%' >
< / td >
< td width = '10%' >
< b > " . get_lang('Hits') . "< / b >
< / td >
< td width = '15%' >
< b > %< / b >
< / td >
< / tr >
";
$factor = 4;
$maxSize = $factor * 100; //pixels
while (list($periodPiece, $cpt) = each($period_array)) {
if ($periodPiece != 'total') {
$pourcent = round(100 * $cpt / $period_array['total']);
$barwidth = $factor * $pourcent;
echo "< tr >
< td align = 'center' width = '15%' > ";
echo $periodPiece;
echo "< / td >
< td width = '60%' style = 'padding-top: 3px;' align = 'center' > "
// display hitbar
. "< img src = '../img/bar_1.gif' width = '1' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / > ";
if ($pourcent != 0) {
echo "< img src = '../img/bar_1u.gif' width = '$barwidth' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / > ";
}
// display 100% bar
if ($pourcent != 100 & & $pourcent != 0) {
echo "< img src = '../img/bar_1m.gif' width = '1' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / > ";
}
if ($pourcent != 100) {
echo "< img src = '../img/bar_1r.gif' width = '" . ($maxSize - $barwidth) . "' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / > ";
}
echo "< img src = '../img/bar_1.gif' width = '1' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / >
< / td >
< td align = 'center' width = '10%' >
$cpt
< / td >
< td align = 'center' width = '15%' >
$pourcent %
< / td >
< / tr >
";
}
}
echo "< tr bgcolor = '#E6E6E6' >
< td width = '15%' align = 'center' >
" . get_lang('Total') . "
< / td >
< td align = 'right' width = '60%' >
< / td >
< td align = 'center' width = '10%' >
" . $period_array['total'] . "
< / td >
< td width = '15%' >
< / td >
< / tr >
";
echo "< / table > ";
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param sql : a sql query (as a string)
* @return month_array
* @desc Return an assoc array. Keys are the days, values are
* the number of time this hours was found.
* key "total" return the sum of all number of time days
* appear
*/
public static function monthTab($sql)
{
$MonthsLong = api_get_months_long();
$month_array = array('total' => 0);
$res = Database::query($sql);
if ($res !== false) {
// init tab with all months
for ($i = 0; $i < 12 ; $ i + + ) {
$month_array[$MonthsLong[$i]] = 0;
}
while ($row = Database::fetch_row($res)) {
$date_array = getdate($row[0]);
$month_array[$MonthsLong[$date_array['mon'] - 1]]++;
$month_array['total']++;
}
Database::free_result($res);
}
return $month_array;
}
/**
* @author Sebastien Piraux < piraux_seb @ hotmail . com >
* @param period_array : an array provided by hoursTab($sql) or daysTab($sql)
* @param periodTitle : title of the first column, type of period
* @param linkOnPeriod :
* @desc Display a 4 column array
* Columns are : hour of day, graph, number of hits and %
* First line are titles
* next are informations
* Last is total number of hits
*/
public static function makeHitsTable($period_array, $periodTitle, $linkOnPeriod = '???')
{
echo "< table width = '100%' cellpadding = '0' cellspacing = '1' border = '0' align = center class = 'minitext' > ";
// titles
echo "< tr bgcolor = '#E6E6E6' align = 'center' >
< td width = '15%' >
< b > $periodTitle< / b >
< / td >
< td width = '60%' >
< / td >
< td width = '10%' >
< b > " . get_lang('Hits') . "< / b >
< / td >
< td width = '15%' >
< b > %< / b >
< / td >
< / tr >
";
$factor = 4;
$maxSize = $factor * 100; //pixels
while (list($periodPiece, $cpt) = each($period_array)) {
if ($periodPiece != 'total') {
$pourcent = round(100 * $cpt / $period_array['total']);
$barwidth = $factor * $pourcent;
echo "< tr >
< td align = 'center' width = '15%' > ";
echo $periodPiece;
echo "< / td >
< td width = '60%' style = 'padding-top: 3px;' align = 'center' > "
// display hitbar
. "< img src = '../img/bar_1.gif' width = '1' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / > ";
if ($pourcent != 0) {
echo "< img src = '../img/bar_1u.gif' width = '$barwidth' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / > ";
}
// display 100% bar
if ($pourcent != 100 & & $pourcent != 0) {
echo "< img src = '../img/bar_1m.gif' width = '1' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / > ";
}
if ($pourcent != 100) {
echo "< img src = '../img/bar_1r.gif' width = '" . ($maxSize - $barwidth) . "' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / > ";
}
echo "< img src = '../img/bar_1.gif' width = '1' height = '12' alt = '$periodPiece : $cpt hits – $pourcent %' / >
< / td >
< td align = 'center' width = '10%' >
$cpt
< / td >
< td align = 'center' width = '15%' >
$pourcent %
< / td >
< / tr >
";
}
}
echo "< tr bgcolor = '#E6E6E6' >
< td width = '15%' align = 'center' >
" . get_lang('Total') . "
< / td >
< td align = 'right' width = '60%' >
< / td >
< td align = 'center' width = '10%' >
" . $period_array['total'] . "
< / td >
< td width = '15%' >
< / td >
< / tr >
";
echo "< / table > ";
}
}