<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include("_projectCommon.php");    # All on the same line to unclutter the user's desktop'

    #*****************************************************************************
    #
    # download.php
    #
    # Author:       Denis Roy
    # Date:         2004-11-23
    #
    # Description:  Clean download logs.
    #
    #*****************************************************************************
    
	error_reporting(E_ALL); ini_set("display_errors", true);
	header("Content-type: text/plain");
	require_once "/home/data/httpd/eclipse-php-classes/system/dbconnection_rw.class.php";
	
	$app = new App();
	
	
	$dbc_RW 	= new DBConnectionRW();
	$dbh_RW		= $dbc_RW->connect();
	
	# Get the current downloads table
	$SQL = "SELECT key_value FROM SYS_variables WHERE key_name = 'download_table'";
	$rs = mysql_query($SQL, $dbh_RW);
	$myrow = mysql_fetch_assoc($rs);
	$download_table = "downloads" . $myrow['key_value'];
	echo "Using " . $download_table . "\n";

	# HAS TO BE ASCENDING@
	$SQL = "SELECT * FROM download_file_index ORDER BY file_id  ";
	echo $SQL . "\n";
	$rs 	= mysql_query($SQL, $dbh_RW);
	
	while($myrow = mysql_fetch_assoc($rs)) {
		echo $myrow['file_id'] . " " . $myrow['file_name'];
		
		# Find duplicate files
		$SQL = "SELECT file_id from download_file_index where file_id > " . $myrow['file_id'] . " AND file_name = " . $app->returnQuotedString($myrow['file_name']);
		$rs2 = mysql_query($SQL, $dbh_RW);
		$str_dupes = "";
		while($myrow2 = mysql_fetch_assoc($rs2)) {
			if($str_dupes != "") {
				$str_dupes .= ",";
			}
			$str_dupes .= $myrow2['file_id'];
		}
		
		if($str_dupes != "") {
			echo "--> Dupes: " . $str_dupes . "\n\n";
			# move downloads for the dupes
			$SQL = "UPDATE downloads SET file_id = " . $myrow['file_id'] . " WHERE file_id IN ($str_dupes)";
			echo $SQL . "\n";
			mysql_query($SQL, $dbh_RW);
			$SQL = "UPDATE " . $download_table . " SET file_id = " . $myrow['file_id'] . " WHERE file_id IN ($str_dupes)";
			echo $SQL . "\n";
			mysql_query($SQL, $dbh_RW);
			$SQL = "DELETE FROM download_file_index where file_id IN ($str_dupes)";
			echo $SQL . "\n";
			mysql_query($SQL, $dbh_RW);
		}
				

		$download_count = 0;
		$SQL = "SELECT COUNT(*) AS RecordCount FROM downloads WHERE file_id = " . $myrow['file_id'];
		$rs2 = mysql_query($SQL, $dbh_RW);
		$myrow2 = mysql_fetch_assoc($rs2);
		$download_count += $myrow2['RecordCount'];
		echo " Download count main table: " . $download_count; 

		$SQL = "SELECT COUNT(*) AS RecordCount FROM " . $download_table . " WHERE file_id = " . $myrow['file_id'];
		$rs2 = mysql_query($SQL, $dbh_RW);
		$myrow2 = mysql_fetch_assoc($rs2);
		$download_count += $myrow2['RecordCount'];
		echo "  Download count table $download_table : " . $myrow2['RecordCount'];
		
		echo " TOTAL: " . $download_count . "\n";
		$SQL = "UPDATE download_file_index SET download_count = " . $download_count . " WHERE file_id = " . $myrow['file_id'];
		mysql_query($SQL, $dbh_RW);
		
		
		
		if($download_count == 0) {
			$SQL = "DELETE FROM download_file_index WHERE file_id = " . $myrow['file_id'];
			echo "----->" . $SQL . "\n";
			$rs3 = mysql_query($SQL, $dbh_RW);
		}
	}

	$dbc_RW->disconnect();  # disconnects all pending DB connections
	$rs 	= null;
	$dbh_RW	= null;
	$dbc_RW = null;
?>