<?php /* Usage by dates, countries, totals. */ // If no id default to front page. if(!isset($_REQUEST["id"])) { return "pub_default"; } // Get detail given year/month $show_date = 'all years'; if(isset($_REQUEST["year"]) and $_REQUEST["year"]>2002) { if(isset($_REQUEST["month"]) and $_REQUEST["month"]>=1 and $_REQUEST["month"]<=12) { $dt = strtotime($_REQUEST["month"]."/1/".$_REQUEST["year"]); $show_date = date("F Y",$dt); } else { $show_date = $_REQUEST["year"]; $_REQUEST["month"] = 0; } } else { $_REQUEST["year"] = 0; $_REQUEST["month"] = 0; } if(isset($_REQUEST["range"])) { // Work out current date if($_REQUEST["range"]=='4w') { $show_date = 'past 4 weeks'; } } else { $_REQUEST["range"] = ''; } // by country // NJS 2006-06-14: Added archive name as argument. $country_abstracts = $sql->getCountryEprintType($GLOBALS["config_vars"]["archivename"],$_REQUEST["year"], $_REQUEST["month"], $_REQUEST["range"], 'abstract', $_REQUEST["id"]); $country_downloads = $sql->getCountryEprintType($GLOBALS["config_vars"]["archivename"],$_REQUEST["year"], $_REQUEST["month"], $_REQUEST["range"], 'download', $_REQUEST["id"]); // NJS 2006-01-18: Calculate total number of countries. $total_download_countries = count($country_downloads); $total_abstract_countries = count($country_abstracts); $GLOBALS["db_values"] = merge_countries($country_abstracts, $country_downloads); // title // NJS 2006-06-14: Added archive name as argument. $title = $sql->getTitle($GLOBALS["config_vars"]["archivename"],$_REQUEST["id"]); // by type $type_count = $sql->getAbstractDownload($GLOBALS["config_vars"]["archivename"],$_REQUEST["year"], $_REQUEST["month"], $_REQUEST["range"], 'download', $_REQUEST["id"]); // by date // NJS 2006-06-14: Added archive name as argument. $month_downloads = $sql->getCumulativeUsageType($GLOBALS["config_vars"]["archivename"],$_REQUEST["id"],'download'); $month_abstracts = $sql->getCumulativeUsageType($GLOBALS["config_vars"]["archivename"],$_REQUEST["id"],'abstract'); $month_tally = merge_dates($month_abstracts,$month_downloads); /* NJS 2007-01-31 Calculate the length of the largest bar for the country downloads histogram. This was refactored from inc.html.show_detail_eprint.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-02-02 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.show_detail_eprint.php. Note that while this is *very* similar to the equivalent function in inc.fns.cumulative_usage_country.php, it is not *quite* identical! (A good candidate for future refactoring?) In particular, the "count" columns in this table span two columns each, not one. 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 colspan="2" align="right" style="font-size:small;border-right:1px solid #dddddd;">'. ( ( $abs > 0 ) ? $abs : '' ). '</td><td colspan="2" 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 colspan="2" align="right" style="background-color:#66ddee;">'. $total_abstracts. '</th> <th colspan="3" 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 colspan="2" align="right" style="background-color:#cccccc;"> </th> <th colspan="2" 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>'; } } ?>