<?php

define('IN_COPPERMINE', true);
define('INDEX_PHP', true);

require('include/init.inc.php');


if (!USER_ID && $CONFIG['allow_unlogged_access'] == 0) {
    $redirect = $redirect . "login.php";
    header("Location: $redirect");
    exit();
}


function makezeros(&$stats){

	if (empty($stats['comments'])) $stats['comments'] = 0;
	if (empty($stats['pictures'])) $stats['pictures'] = 0;
	if (empty($stats['users'])) $stats['users'] = 0;
}

function getbars($data){

	$max = array('comments' => 0, 'users' => 0, 'pictures' => 0);

	foreach ($data as $period => $stats){
		foreach($stats as $param => $value){
			$max[$param] = max($max[$param], $value);
		}
	}

	$bars = array();

	foreach ($data as $period => $stats){
		foreach($stats as $param => $value){
			$bars[$period][$param] = floor(($value / $max[$param]) * 100);
			if ($value) $bars[$period][$param] = max($bars[$period][$param], 1);
		}
	}

	return $bars;
}

pageheader('Statistik');

starttable('100%');

echo <<< EOT

<tr>
	<td class="tableh1">Datum</td>
	<td class="tableh1">Kommentare</td>
	<td class="tableh1">Bilder</td>
	<td class="tableh1">Neue Mitglieder</td>
</tr>

EOT;

$years = array();

$sql = "SELECT YEAR(msg_date) AS period, COUNT(*) AS number
FROM {$CONFIG['TABLE_COMMENTS']}
GROUP BY period
ORDER BY period DESC";

$result = cpg_db_query($sql);
while ($row = mysql_fetch_assoc($result)) $years[$row['period']]['comments'] = $row['number'];
mysql_free_result($result);

$sql = "SELECT YEAR(FROM_UNIXTIME(ctime)) AS period, COUNT(*) AS number
FROM {$CONFIG['TABLE_PICTURES']}
GROUP BY period
ORDER BY period DESC";

$result = cpg_db_query($sql);
while ($row = mysql_fetch_assoc($result)) $years[$row['period']]['pictures'] = $row['number'];
mysql_free_result($result);

$sql = "SELECT YEAR(FROM_UNIXTIME({$cpg_udb->field['regdate']})) AS period, COUNT(*) AS number
FROM {$cpg_udb->usertable}
GROUP BY period
ORDER BY period DESC";

$result = cpg_db_query($sql);
while ($row = mysql_fetch_assoc($result)) $years[$row['period']]['users'] = $row['number'];
mysql_free_result($result);

krsort($years);

$ybars = getbars($years);

foreach ($years as $year => $stats){

	makezeros($stats);
	makezeros($ybars[$year]);

	if (isset($_GET['year']) && $_GET['year'] == $year){
		$type = 'collapse';
		$y = '';
	} else {
		$type = 'expand';
		$y = "?year=$year";
	}

	echo <<< EOT

<tr>
	<td class="tableb"><a href="stats.php$y"><img src="images/$type.gif" border="0">&nbsp;$year</a></td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$ybars[$year]['comments']}">&nbsp;{$stats['comments']}</td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$ybars[$year]['pictures']}">&nbsp;{$stats['pictures']}</td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$ybars[$year]['users']}">&nbsp;{$stats['users']}</td>
</tr>

EOT;

	if (isset($_GET['year']) && $_GET['year'] == $year){

		$months = array();

		$sql = "SELECT MONTH(msg_date) AS period, COUNT(*) AS number
		FROM {$CONFIG['TABLE_COMMENTS']}
		WHERE YEAR(msg_date) = $year
		GROUP BY period
		ORDER BY period DESC";

		$result = cpg_db_query($sql);
		while ($row = mysql_fetch_assoc($result)) $months[$row['period']]['comments'] = $row['number'];
		mysql_free_result($result);

		$sql = "SELECT MONTH(FROM_UNIXTIME(ctime)) AS period, COUNT(*) AS number
		FROM  {$CONFIG['TABLE_PICTURES']}
		WHERE YEAR(FROM_UNIXTIME(ctime)) = $year
		GROUP BY period
		ORDER BY period DESC";

		$result = cpg_db_query($sql);
		while ($row = mysql_fetch_assoc($result)) $months[$row['period']]['pictures'] = $row['number'];
		mysql_free_result($result);

		$sql = "SELECT MONTH(FROM_UNIXTIME({$cpg_udb->field['regdate']})) AS period, COUNT(*) AS number
		FROM {$cpg_udb->usertable}
		WHERE YEAR(FROM_UNIXTIME({$cpg_udb->field['regdate']})) = $year
		GROUP BY period
		ORDER BY period DESC";

		$result = cpg_db_query($sql);
		while ($row = mysql_fetch_assoc($result)) $months[$row['period']]['users'] = $row['number'];
		mysql_free_result($result);

		krsort($months);

		$mbars = getbars($months);

		foreach ($months as $month => $stats){

			makezeros($stats);
			makezeros($mbars[$month]);

			$monthname = date('F', strtotime("$month/01/$year"));

			if (isset($_GET['month']) && $_GET['month'] == $month){
				$type = 'collapse';
				$m = '';
			} else {
				$type = 'expand';
				$m = "&amp;month=$month";
			}

			echo <<< EOT

<tr>
	<td class="tableb">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="stats.php?year=$year$m"><img src="images/$type.gif" border="0">&nbsp;$monthname</a></td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$mbars[$month]['comments']}">&nbsp;{$stats['comments']}</td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$mbars[$month]['pictures']}">&nbsp;{$stats['pictures']}</td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$mbars[$month]['users']}">&nbsp;{$stats['users']}</td>
</tr>

EOT;

			if (isset($_GET['month']) && $_GET['month'] == $month){

				$days = array();

				$sql = "SELECT DAY(msg_date) AS period, COUNT(*) AS number
				FROM {$CONFIG['TABLE_COMMENTS']}
				WHERE YEAR(msg_date) = $year
				AND MONTH(msg_date) = $month
				GROUP BY period
				ORDER BY period DESC";

				$result = cpg_db_query($sql);
				while ($row = mysql_fetch_assoc($result)) $days[$row['period']]['comments'] = $row['number'];
				mysql_free_result($result);

				$sql = "SELECT DAY(FROM_UNIXTIME(ctime)) AS period, COUNT(*) AS number
				FROM  {$CONFIG['TABLE_PICTURES']}
				WHERE YEAR(FROM_UNIXTIME(ctime)) = $year
				AND MONTH(FROM_UNIXTIME(ctime)) = $month
				GROUP BY period
				ORDER BY period DESC";

				$result = cpg_db_query($sql);
				while ($row = mysql_fetch_assoc($result)) $days[$row['period']]['pictures'] = $row['number'];
				mysql_free_result($result);

				$sql = "SELECT DAY(FROM_UNIXTIME({$cpg_udb->field['regdate']})) AS period, COUNT(*) AS number
				FROM {$cpg_udb->usertable}
				WHERE YEAR(FROM_UNIXTIME({$cpg_udb->field['regdate']})) = $year
				AND MONTH(FROM_UNIXTIME({$cpg_udb->field['regdate']})) = $month
				GROUP BY period
				ORDER BY period DESC";

				$result = cpg_db_query($sql);
				while ($row = mysql_fetch_assoc($result)) $days[$row['period']]['users'] = $row['number'];
				mysql_free_result($result);

				krsort($days);

				$dbars = getbars($days);

				foreach ($days as $day => $stats){

					$dayname = date('Y-m-d', strtotime("$month/$day/$year"));

					makezeros($stats);
					makezeros($dbars[$day]);

					echo <<< EOT

<tr>
	<td class="tableb">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dayname</td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$dbars[$day]['comments']}">&nbsp;{$stats['comments']}</td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$dbars[$day]['pictures']}">&nbsp;{$stats['pictures']}</td>
	<td class="tableb"><img src="images/bar.gif" height="8" width="{$dbars[$day]['users']}">&nbsp;{$stats['users']}</td>
</tr>

EOT;
				}
			}
		}
	}
}

//Activity Graph Function
function activityGraph($cellName, $tableName, $title, $barTile, $notCtime=false)
{
	starttable(643, $title, 1);
	$query = "SELECT $cellName FROM $tableName";
	$result = cpg_db_query($query);
	$rowset = cpg_db_fetch_rowset($result);
	mysql_free_result($result);
	$uploadTimes = array();
	$total = 0;
	foreach($rowset as $row)
	{
		if($notCtime)
		{
			//Get hours from date/time string
			$split1 = explode(' ', $row[0]);
			$split2 = explode(':', $split1[1]);
			$hour = $split2[0];
		}
		else
		{
			$hour = strftime("%H",$row[0]);
		}
		switch($hour)
		{
			case '00':
			$index = 0;
			break;
			case '01':
			$index = 1;
			break;
			case '02':
			$index = 2;
			break;
			case '03':
			$index = 3;
			break;
			case '04':
			$index = 4;
			break;
			case '05':
			$index = 5;
			break;
			case '06':
			$index = 6;
			break;
			case '07':
			$index = 7;
			break;
			case '08':
			$index = 8;
			break;
			case '09':
			$index = 9;
			break;
			default:
			$index = $hour;
		}
		$uploadTimes[$index] = @$uploadTimes[$index] + 1;
		$total++;
	}

	ksort($uploadTimes, SORT_NUMERIC);

	print('<tr><td align="center" colspan="26" bgcolor="#E0E2D5"><b>Uhrzeit (GMT+2'.$CONFIG['time_offset'].')</b></td></tr>');
	print('<tr><td align="center" colspan="26" height="1" bgcolor="#E0E2D5"></td></tr>');
	print('<tr><td align="center" colspan="26" height="2"></td></tr>');
	print('<tr><td align="center" colspan="26" height="1" bgcolor="#E0E2D5"></td></tr>');
	print('<tr><td height="100" width="1" valign="bottom" bgcolor="#E0E2D5"><img src="images/spacer.gif" width="1" height="200" /></td>');
	for($i = '0'; $i <= '23'; $i++)
	{
		if(isset($uploadTimes[$i]))
		{
			print('<td height="100" width="4%" valign="bottom" align="center" style="font-size: 100%" bgcolor="#E0E2D5">'.round($uploadTimes[$i]/$total*'100',0).'%<br /><img src="'.$barTile.'" border="1" alt="" width="15" height="'.round($uploadTimes[$i]/$total*'200',0).'" /></td>');
		}
		else
		{
			print('<td height="100" width="4%" bgcolor="#E0E2D5"></td>');
		}
	}
	print('<td height="100" width="1" valign="bottom" bgcolor="#E0E2D5"><img src="images/spacer.gif" width="1" height="200" /></td></tr>');
	print('<tr><td align="center" colspan="26" height="1"></td></tr>');
	print('<tr><td align="center" colspan="26" height="2" bgcolor="#E0E2D5"></td></tr>');
	print('<tr><td align="center" colspan="26" height="1"></td></tr>');
	print('<tr><td></td>');
	for($i = '0'; $i <= '23'; $i++)
	{
		#if(isset($uploadTimes[$i]))
		#{
		#	print('<td width="15">'.$i.' ('.round($uploadTimes[$i]/$total*'200',0).'%)</td>');
		#}
		#else
		#{
			print('<td width="4%" align="center">'.$i.'</td>');
		#}
	}
	print('<td></td></tr>');

	endtable();
}


//Start Most Viewed
starttable("99%", "Am meisten gesehene Bilder", 1);
$query = "SELECT pid, hits FROM {$CONFIG['TABLE_PICTURES']}";
$result = cpg_db_query($query);
$rowset = cpg_db_fetch_rowset($result);
mysql_free_result($result);

foreach($rowset as $row)
{
	$mostViewed[$row[0]] = $row[1];
}

arsort($mostViewed, SORT_NUMERIC);
echo <<<EOT
<table width="99%" height="100%" align="center" border="0" cellpadding="0" cellspacing="0" bgcolor="FFFFFF" class="sTableB">
<tr>
EOT;
foreach(array_slice(array_keys($mostViewed),0,4) as $image)
{
	$query = "SELECT filepath, filename, owner_name, owner_id FROM {$CONFIG['TABLE_PICTURES']} as p WHERE p.pid = '$image' ";
	$result = cpg_db_query($query);
	$rowset = cpg_db_fetch_rowset($result);
	mysql_free_result($result);

	$file = $rowset[0];

	echo <<<EOT
        <td valign="top" class="thumbnails" width ="150" align="center">
                <table width="150" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                                <td align="center" width ="150">
EOT;

	print("<a href=\"displayimage.php?pos=-$image\"><img src=\"albums/" . $file[0] . 'thumb_' . $file[1] . "\" class=\"image\" border=\"0\" alt=\"\" /></a><br /><a href =\"profile.php?uid={$file[3]}\">{$file[2]}</a><span class=\"thumb_caption\">{$mostViewed[$image]} x angesehen</span>");

	echo <<<EOT
                                </td>
                        </tr>
                </table>
        </td>
EOT;


}

endtable();
//End Most Viewed


//Start Album Most Viewed
starttable("99%", "Am meisten besuchte Alben", 1);
$query = "SELECT aid, hits FROM {$CONFIG['TABLE_PICTURES']}";
$result = cpg_db_query($query);
$rowset = cpg_db_fetch_rowset($result);
mysql_free_result($result);

foreach($rowset as $row)
{
	$mostViewedAlbum[$row[0]] = @$mostViewedAlbum[$row[0]] + $row[1];
}

arsort($mostViewedAlbum, SORT_NUMERIC);
echo <<<EOT
<table width="99%" height="100%" align="center" border="0" cellpadding="0" cellspacing="0" bgcolor="FFFFFF" class="sTableB">
<tr>
EOT;
foreach(array_slice(array_keys($mostViewedAlbum),0,4) as $album)
{
	$query = "SELECT filepath, filename, owner_name, owner_id FROM {$CONFIG['TABLE_PICTURES']} as p WHERE p.aid = '$album' ";
	$result = cpg_db_query($query);
	$rowset = cpg_db_fetch_rowset($result);
	mysql_free_result($result);

	$file = $rowset[0];

	echo <<<EOT
        <td valign="top" class="thumbnails" width ="150" align="center">
                <table width="150" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                                <td align="center" width ="150">
EOT;

	print("<a href=\"thumbnails.php?album=$album\"><img src=\"albums/" . $file[0] . 'thumb_' . $file[1] . "\" class=\"image\" border=\"0\" alt=\"\" /></a><br /><a href =\"profile.php?uid={$file[3]}\">{$file[2]}</a><span class=\"thumb_caption\">{$mostViewedAlbum[$album]} x angesehen</span>");

	echo <<<EOT
                                </td>
                        </tr>
                </table>
        </td>
EOT;


}

endtable();
//End Album Most Viewed


//Start User Most Viewed
starttable("99%", "Mitglieder mit den meisten Besuchen in Ihren Alben", 1);
$query = "SELECT owner_id, hits FROM {$CONFIG['TABLE_PICTURES']}";
$result = cpg_db_query($query);
$rowset = cpg_db_fetch_rowset($result);
mysql_free_result($result);

foreach($rowset as $row)
{
	$mostViewedUser[$row[0]] = @$mostViewedUser[$row[0]] + $row[1];
}

arsort($mostViewedUser, SORT_NUMERIC);
echo <<<EOT
<table width="99%" height="100%" align="center" border="0" cellpadding="0" cellspacing="0" bgcolor="FFFFFF" class="sTableB">
<tr>
EOT;
foreach(array_slice(array_keys($mostViewedUser),0,4) as $user)
{
	$query = "SELECT filepath, filename, owner_name, owner_id FROM {$CONFIG['TABLE_PICTURES']} as p WHERE p.owner_id = '$user' ";
	$result = cpg_db_query($query);
	$rowset = cpg_db_fetch_rowset($result);
	mysql_free_result($result);

	$file = $rowset[0];

	echo <<<EOT
        <td valign="top" class="thumbnails" width ="150" align="center">
                <table width="150" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                                <td align="center" width ="150">
EOT;

	$cat = explode('/', $file[0]);

	print("<a href=\"index.php?cat={$cat[1]}\"><img src=\"albums/" . $file[0] . 'thumb_' . $file[1] . "\" class=\"image\" border=\"0\" alt=\"\" /></a><br /><a href =\"profile.php?uid={$file[3]}\">{$file[2]}</a><span class=\"thumb_caption\">{$mostViewedUser[$user]} x angesehen</span>");

	echo <<<EOT
                                </td>
                        </tr>
                </table>
        </td>
EOT;


}

endtable();
//End User Most Viewed


//Start Most Commented
starttable("99%", "Am meisten kommentierte Bilder", 1);
$query = "SELECT pid FROM {$CONFIG['TABLE_COMMENTS']}";
$result = cpg_db_query($query);
$rowset = cpg_db_fetch_rowset($result);
mysql_free_result($result);

foreach($rowset as $row)
{
	$index = $row[0];
	$mostCommented[$index] = @$mostCommented[$index] + 1;
}

arsort($mostCommented, SORT_NUMERIC);
echo <<<EOT
<table width="99%" height="100%" align="center" border="0" cellpadding="0" cellspacing="0" bgcolor="FFFFFF" class="sTableB">
<tr>
EOT;
foreach(array_slice(array_keys($mostCommented),0,4) as $image)
{
	$query = "SELECT filepath, filename, owner_name, owner_id FROM {$CONFIG['TABLE_PICTURES']} as p WHERE p.pid = '$image' ";
	$result = cpg_db_query($query);
	$rowset = cpg_db_fetch_rowset($result);
	mysql_free_result($result);

	$file = $rowset[0];

	echo <<<EOT
        <td valign="top" class="thumbnails" width ="150" align="center">
                <table width="150" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                                <td align="center" width ="150">
EOT;

	print("<a href=\"displayimage.php?pos=-$image\"><img src=\"albums/" . $file[0] . 'thumb_' . $file[1] . "\" class=\"image\" border=\"0\" alt=\"\" /></a><br /><a href =\"profile.php?uid={$file[3]}\">{$file[2]}</a><span class=\"thumb_caption\">{$mostCommented[$image]} Kommentare</span>");

	echo <<<EOT
                                </td>
                        </tr>
                </table>
        </td>
EOT;


}

endtable();
//End Most Commented


//Start Album Most Commented
starttable("99%", "Am meisten kommentierte Alben", 1);
$query = "SELECT aid FROM {$CONFIG['TABLE_COMMENTS']} as c, {$CONFIG['TABLE_PICTURES']} as p WHERE c.pid = p.pid";
$result = cpg_db_query($query);
$rowset = cpg_db_fetch_rowset($result);
mysql_free_result($result);

foreach($rowset as $row)
{
	$index = $row[0];
	$mostCommentedAlbum[$index] = @$mostCommentedAlbum[$index] + 1;
}

arsort($mostCommentedAlbum, SORT_NUMERIC);
echo <<<EOT
<table width="99%" height="100%" align="center" border="0" cellpadding="0" cellspacing="0" bgcolor="FFFFFF" class="sTableB">
<tr>
EOT;
foreach(array_slice(array_keys($mostCommentedAlbum),0,4) as $album)
{
	$query = "SELECT filepath, filename, owner_name, owner_id, pid FROM {$CONFIG['TABLE_PICTURES']} as p WHERE p.aid = '$album' ";
	$result = cpg_db_query($query);
	$rowset = cpg_db_fetch_rowset($result);
	mysql_free_result($result);

	$file = $rowset[0];

	echo <<<EOT
        <td valign="top" class="thumbnails" width ="150" align="center">
                <table width="150" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                                <td align="center" width ="150">
EOT;

	print("<a href=\"thumbnails.php?album=$album\"><img src=\"albums/" . $file[0] . 'thumb_' . $file[1] . "\" class=\"image\" border=\"0\" alt=\"\" /></a><br /><a href =\"profile.php?uid={$file[3]}\">{$file[2]}</a><span class=\"thumb_caption\">{$mostCommentedAlbum[$album]} Kommentare</span>");

	echo <<<EOT
                                </td>
                        </tr>
                </table>
        </td>
EOT;


}

endtable();
//End Album Most Commented


//Start User Most Commenting
starttable("99%", "Top-Kommentatoren", 1);
$query = "SELECT author_id FROM {$CONFIG['TABLE_COMMENTS']} as c, {$CONFIG['TABLE_PICTURES']} as p WHERE c.pid = p.pid";
$result = cpg_db_query($query);
$rowset = cpg_db_fetch_rowset($result);
mysql_free_result($result);

foreach($rowset as $row)
{
	$index = $row[0];
	$mostCommentingUser[$index] = @$mostCommentingUser[$index] + 1;
}

arsort($mostCommentingUser, SORT_NUMERIC);
echo <<<EOT
<table width="99%" height="100%" align="center" border="0" cellpadding="0" cellspacing="0" bgcolor="FFFFFF" class="sTableB">
<tr>
EOT;
foreach(array_slice(array_keys($mostCommentingUser),0,4) as $user)
{
	$query = "SELECT filepath, filename, owner_name, owner_id, pid FROM {$CONFIG['TABLE_PICTURES']} as p WHERE p.owner_id = '$user' ";
	$result = cpg_db_query($query);
	$rowset = cpg_db_fetch_rowset($result);
	mysql_free_result($result);

	$file = $rowset[0];

	echo <<<EOT
        <td valign="top" class="thumbnails" width ="150" align="center">
                <table width="150" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                                <td align="center" width ="150">
EOT;

	$cat = explode('/', $file[0]);

	print("<a href=\"index.php?cat={$cat[1]}\"><img src=\"albums/" . $file[0] . 'thumb_' . $file[1] . "\" class=\"image\" border=\"0\" alt=\"\" /></a><br /><a href =\"profile.php?uid={$file[3]}\">{$file[2]}</a><span class=\"thumb_caption\">{$mostCommentingUser[$user]} Kommentare</span>");

	echo <<<EOT
                                </td>
                        </tr>
                </table>
        </td>
EOT;


}

endtable();
//End User Most Commenting



//Start Viewing Activity By Time
activityGraph("sdate", $CONFIG['TABLE_HIT_STATS'], "Besuchs- Aktivität", "images/bar.gif");
//End Viewing Activity By Time

//Start Upload Activity By Time
activityGraph("ctime", $CONFIG['TABLE_PICTURES'], "Upload- Aktivität", "images/bar.gif");
//End Upload Activity By Time

//Start Comment Activity By Time
activityGraph("msg_date", $CONFIG['TABLE_COMMENTS'], "Kommentar- Aktivität", "images/bar.gif", true);
//End Comment Activity By Time


pagefooter();

$signature = 'Coppermine Photo Gallery ' . COPPERMINE_VERSION . ' ('. COPPERMINE_VERSION_STATUS . ')';

?>