#!/usr/bin/perl
##############################################################################
# Countdown                         Version 2.1                              #
# Copyright 1998-2000 Edward Preble scripts@datatrendsoftware.com            #
# Created 11/30/98                  Last Modified 01/28/00                   #
# Datatrend Software                http://www.datatrendsoftware.com/cgi.html#
##############################################################################
# This script will do the following:                                         #
# 1. Is activated by a link of the following form,                           #
#    http://www.yoursite.com/yourdir/countdown.cgi?yourfile.anything         #
# 2. Updates a text log file and an HTML file with the counts of the         #
#    downloads made so far, ordered greatest to least.                       #
# 3. Creates 2 HTML tables, one with all the download counts, and another    #
#    with just the top ten downloads. These are great to let site visitors   #
#    see the most popular downloads available on your site.                  #
# 3. Will auto-forward the web surfer to "file.anything" for download.       #
# 4. The interface is seamless, there are no user prompts.                   #
##############################################################################
# COPYRIGHT NOTICE                                                           #
# Copyright 1999-2000 Edward Preble  All Rights Reserved.                    #
#                                                                            #
# This script is free.  You may use and modify this script as you please.    #
# Do not remove this header, as it is the only thing that gives me credit    #
# for my work in writing this code. If you wish to sell this code, you       #
# must obtain permission from the authors first.                             #
#                                                                            #
# Scripts provided by Datatrend Software are supplied "as-is". You agree     #
# to indemnify the author's from any liability that may arise from the use   #
# of this script.                                                            #
#                                                                            #
# Obtain permission before redistributing this software over the Internet or #
# in any other medium.	In all cases copyright and header must remain intact.#
##############################################################################
#                                                                            #
# You must modify the the location of PERL in the first line above to match  #
# the location on your server.                                               #
# You must also modify the following variables to match your preferences.    #

#Location and name of the CountDown Script on your server
$CountDownLocation = 'http://maba.dev.openstreetmap.org/cgi-bin/countdown.cgi';

# This is the directory location of the file(s) that will be downloaded
$DownloadFileDir = 'http://maba.dev.openstreetmap.org/GpsMid/';

# This is the counter log filename
$Counter = '/home/maba/public_html/GpsMid/log/countdown.log';

#This is the HTML output filename
$HTMLFile = '/home/maba/public_html/GpsMid/log/countdownlog.htm';

#This is the HTML output filename for the Top Ten List only
$TopTenFile = '/home/maba/public_html/GpsMid/log/countdowntopten.htm';

##########################################################
# No changes need to be made after these lines
##########################################################
$File = $ENV{'QUERY_STRING'};
# Strip off anything up to, and including, the last "/", if present
if ($File =~ /\//) { ($File) = $File =~ /^.*\/([^\/]+)$/g; }
$DownloadFile = "$DownloadFileDir/$File";

# Add hit to main counter

open (CNT,"+<$Counter") || &endIt;
flock (CNT,2); 
seek (CNT,0,0);
@infile = <CNT>;

# This will put the hits in order from max to min for each file added
$record = 0;		# Starting record in the log is always 0
$correctspot = 'N';	# Tells script if this record is the one that was hit

# Proceeds as long as the record number is less than the total 
# number of records in the file and the correct record hasn't been found yet.
while (($correctspot eq 'N') && ($record <= $#infile))  
{ ($count,$filename,$eol) = split(/\|/,$infile[$record]);
  if ($filename eq $File)  #if this is the right record, hit it, trip correctspot
    {$count++;
    $infile[$record] = join ("\|",$count,$filename,"\n");
    $correctspot = 'Y';
    }
  $record++;
}
if ($correctspot eq 'N')
{ $count = 1;
  $newrecord = join ("\|",$count,$File,"\n");
  push @infile, $newrecord;
}

@outfile = sort {($b =~ /(\d+)/)[0] <=> ($a =~ /(\d+)/)[0]} @infile;

seek (CNT,0,0);
print (CNT @outfile);
truncate (CNT,tell(CNT));
close (CNT);

#Create HTML File - Whole List
open (Out,"+>$HTMLFile") || &endIt;
flock (Out,2); 
print {Out} <<TextOut;
<html>
<head>
<title>CountDown Log File Contents</title>
</head>
<body>
<table border="0" cellspacing="4">
  <tr>
    <td><strong>Downloads - </strong></td>
    <td><strong>File</strong></td>
  </tr>
TextOut

foreach (@outfile) {
($count,$filename,$eol) = split(/\|/,$_);
print {Out} <<TextOut;
  <tr>
    <td align="right">$count - </td>
    <td><a href="$CountDownLocation?$filename">$filename</a></td>
  </tr>
TextOut
}
print {Out} <<TextOut;
</table>
<hr noshade color="#0000FF">
<p><font face="Arial" size="1">Log created with <a href="http://www.datatrendsoftware.com/cgi.html">CountDown</a> by <a href="http://www.datatrendsoftware.com">Datatrend Software</a>.</font></p></body>
</html>
TextOut

#Create HTML File - Top Ten List
open (Out,"+>$TopTenFile") || &endIt;
flock (Out,2); 
print {Out} <<TextOut;
<html>
<head>
<title>CountDown Log File Top Ten List</title>
</head>
<body>
<table border="0" cellspacing="4">
  <tr>
    <td><strong>Downloads - </strong></td>
    <td><strong>File</strong></td>
  </tr>
TextOut

if ($#outfile < 9) {
	for ($i = 0; $i <= $#outfile; $i++) {
	($count,$filename,$eol) = split(/\|/,$outfile[$i]);
print {Out} <<TextOut;
  <tr>
    <td align="right">$count - </td>
    <td><a href="$CountDownLocation?$filename">$filename</a></td>
  </tr>
TextOut
	}
} else {
for ($i = 0; $i <=9; $i++) {
($count,$filename,$eol) = split(/\|/,$outfile[$i]);
print {Out} <<TextOut;
  <tr>
    <td align="right">$count - </td>
    <td><a href="$CountDownLocation?$filename">$filename</a></td>
  </tr>
TextOut
	}
}

print {Out} <<TextOut;
</table>
<hr noshade color="#0000FF">
<p><font face="Arial" size="1">Log created with <a href="http://www.datatrendsoftware.com/countdown.html">CountDown</a> by <a href="http://www.datatrendsoftware.com/cgi.html">Datatrend Software</a>.</font></p>
</body>
</html>
TextOut

	print "Content-type: text/html\n";
	print "Location: $DownloadFile\n\n";

sub endIt # exit on error
{ 
exit;
} # end endIt
