Newer
Older
Digital_Repository / Repositories / statistics / includes / inc.fns.cumulative_usage_country.es.php
<?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();
	
		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 ($rs % 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 src="'. $c_flag . '" width="18" height="14" alt="'. $ccode . '" />';
			} else {
				print '<img 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);
			$col_width .= "px";
			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);
			$col_width .= "px";
			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 align="right" style="background-color:#cccccc;">&nbsp;</th>
		<th align="left" style="background-color:#cccccc;"> abstract views';
		if ( $mode == 'country' )
			print ' originating from '.
			count($abstract_countries).
			' distinct countries</td></tr>';
		print '<tr><th align="right" style="background-color:#cccccc;">&nbsp;</th>
		<th align="right" style="background-color:#4477dd;color:#ffffff;">'.
		$total_downloads.
		'</th><th align="left" style="background-color:#cccccc;"> document downloads';
		if ($mode == 'country' )
			print ' originating from '.
			count($download_countries).
			' distinct countries</td></tr>';
	}

?>