<?php
/*
Usage by countries
*/
/* -----------------------merge_countries----------------------- */
// NJS 2006-06-14: Added archive name as argument.
$country_downloads = $sql->getCumulativeUsageCountryType($GLOBALS["config_vars"]["archivename"],"download");
$country_abstracts = $sql->getCumulativeUsageCountryType($GLOBALS["config_vars"]["archivename"],"abstract");
$GLOBALS["db_values"] = merge_countries($country_abstracts,$country_downloads);
// $debug->setDebug($GLOBALS["db_values"],__LINE__,__FILE__,'','','');
/* NJS 2007-01-31
Calculate the length of the largest bar for the country
downloads histogram.
This was refactored from inc.html.cumulative_usage_country.php.
Arguments: $mode either 'country' (count only real countries)
or 'bot' (count only bots/crawlers)
Returns: integer
*/
function getMaxCount ( $mode )
{
$max = 0;
for ( $rs = 0; $rs < count( $GLOBALS["db_values"] ); $rs++ )
{
/* If we're in country mode, skip all bot entries (country
code starts with 'X@'). If we're in bot mode, skip
all country entries (country code *doesn't* start with
'X@').
*/
$cc = substr( $GLOBALS["db_values"][$rs]["country_code"], 0, 2 );
if ( ( $mode == 'country' ) && ( $cc == 'X@' ) ) continue;
if ( ( $mode == 'bot' ) && ( $cc != 'X@' ) ) continue;
// Check abstracts...
$abs = $GLOBALS["db_values"][$rs]["country_abstracts"];
if ( $abs > $max )
{
$max = $abs;
}
// ...then downloads.
$dl = $GLOBALS["db_values"][$rs]["country_downloads"];
if ( $dl > $max )
{
$max = $dl;
}
}
return $max;
}
/* NJS 2007-01-31
Output a "country" downloads histogram. This function only
generates rows (<tr>) of the table; the enclosing <table> element
must be output by the caller.
This was refactored from inc.html.cumulative_usage_country.php.
Arguments: $mode either 'country' (display only real countries)
or 'bot' (display only bots/crawlers)
$max_count length (number of hits) of longest bar
$max_width maximum width in pixels of a bar
Returns: void
*/
function generateCountryTable ( $mode, $max_count, $max_width )
{
// NJS 2006-01-18: Accumulate total number of downloads and views.
$total_downloads = 0;
$total_abstracts = 0;
$abstract_countries = array();
$download_countries = array();
/* NJS 2007-02-07
Keep an independent count of the row number so that we can
highlight them properly. We can't just use the loop counter
$rs below because we skip certain rows according to which
mode we're in, so $rs will appear to skip unpredictably.
*/
$row = 0;
for ( $rs = 0; $rs < count( $GLOBALS["db_values"] ); $rs++ )
{
/* If we're in country mode, skip all bot entries (country
code starts with 'X@'). If we're in bot mode, skip
all country entries (country code *doesn't* start with
'X@').
*/
$ccode = $GLOBALS["db_values"][$rs]["country_code"];
$cc = substr( $ccode, 0, 2 );
if ( ( $mode == 'country' ) && ( $cc == 'X@' ) ) continue;
if ( ( $mode == 'bot' ) && ( $cc != 'X@' ) ) continue;
// NJS 2006-01-18: Accumulate total number of downloads and views.
// NJS 2007-01-31: Record countries in a bitmap so we can easily count them later.
$abs = $GLOBALS["db_values"][$rs]["country_abstracts"];
$dl = $GLOBALS["db_values"][$rs]["country_downloads"];
$total_abstracts += $abs;
$total_downloads += $dl;
if ( $abs > 0 )
{
$abstract_countries[$ccode] = 1;
}
if ( $dl > 0 )
{
$download_countries[$ccode] = 1;
}
if ($GLOBALS["db_values"][$rs]["country_name"]=='') { $GLOBALS["db_values"][$rs]["country_name"]='unknown'; }
if ($GLOBALS["db_values"][$rs]["country_name"]=='N/A') { $GLOBALS["db_values"][$rs]["country_name"]='unknown'; }
// NJS 2005-12-15: subtly highlight every alternate row
print '<tr';
if ($row++ % 2) print ' style="background-color:#EDF3FE;"';
print '><td>';
// select a flag
// NJS 2005-12-15 make flags and country names links to detail page
$ccode = strtolower($ccode);
$c_flag = 'flags18x14/' . $ccode . '.png';
// NJS 2006-06-14: Only generate a link if there are actually
// some downloads.
if ( $dl > 0 )
print '<a href="' . $_SERVER['PHP_SELF'] .
'?action=show_detail_country;code=' . $ccode . '">';
if (file_exists($c_flag)) {
print '<img border="0" src="'. $c_flag . '" width="18" height="14" alt="'. $ccode . '" />';
} else {
print '<img border="0" src="flags18x14/unknown.png" width="18" height="14" alt="' . $ccode . '" />';
};
if ( $dl > 0 )
print '</a>';
print '</td><td style="font-size:small;border-right:1px solid #dddddd;">';
// NJS 2006-06-14: Only generate a link if there are actually
// some downloads.
if ( $dl > 0 )
print '<a href="' . $_SERVER['PHP_SELF'] .
'?action=show_detail_country;code=' . $ccode . '">';
print $GLOBALS["db_values"][$rs]["country_name"];
if ( $dl > 0 )
print '</a>';
print '</td><td align="right" style="font-size:small;border-right:1px solid #dddddd;">'.
( ( $abs > 0 ) ? $abs : '' ).
'</td><td align="right" style="font-size:small;border-right:1px solid #dddddd;">' .
( ( $dl > 0 ) ? $dl : '' ).
'</td>';
$cur_count = $abs;
$col_width = (int) ($cur_count/$max_count * $max_width);
if ( $abs > 0 ) $col_width = max($col_width,1);
print '<td align="left"><img src="bars/hh.png" alt="views" height="9" width="'.
$col_width .
'" /><br />';
$cur_count = $dl;
$col_width = (int) ($cur_count/$max_count * $max_width);
if ($dl > 0) $col_width = max($col_width,1);
print '<img src="bars/hp.png" alt="views" height="9" width="'.
$col_width .
'" /></td></tr>';
}
// NJS 2006-01-18: Display grand totals.
print '<tr><th rowspan="2" colspan="2" style="background-color:#cccccc;">Grand Totals:</th>
<th align="right" style="background-color:#66ddee;">'.
$total_abstracts.
'</th>
<th colspan="2" align="left" style="background-color:#cccccc;"> abstract';
if ( $mode == 'country' )
{
print ' views originating from '.
count($abstract_countries).
' distinct countries</th></tr>';
}
else
{
print 's indexed</th></tr>';
}
print '<tr><th align="right" style="background-color:#cccccc;"> </th>
<th align="right" style="background-color:#4477dd;color:#ffffff;">'.
$total_downloads.
'</th><th align="left" style="background-color:#cccccc;"> full text ';
if ($mode == 'country' )
{
print 'downloads originating from '.
count($download_countries).
' distinct countries</th></tr>';
}
else
{
print 'documents indexed</th></tr>';
}
}
?>