Skip to content
Snippets Groups Projects
index.php 15.5 KiB
Newer Older
Robert Anderson's avatar
Robert Anderson committed
<?php
Nigel Kukard's avatar
Nigel Kukard committed
# Main User Control Panel Page
# Copyright (c) 2007-2009, AllWorldIT
Robert Anderson's avatar
Robert Anderson committed
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.


# pre takes care of authentication and creates soap object we need
include("include/pre.php");
# Page header
include("include/header.php");

# NB: We will only end up here if we authenticated!


Robert Anderson's avatar
Robert Anderson committed
# Displays error
function webuiError($msg) {
	echo isset($msg) ? $msg : "Unknown error";
}


Robert Anderson's avatar
Robert Anderson committed
# Display details
function displayDetails() { 
	global $db;
	global $DB_TABLE_PREFIX;

	# Get user's ID
	$sql = "
		SELECT
Robert Anderson's avatar
Robert Anderson committed
			ID, Username
Robert Anderson's avatar
Robert Anderson committed
		FROM
Robert Anderson's avatar
Robert Anderson committed
			${DB_TABLE_PREFIX}users
Robert Anderson's avatar
Robert Anderson committed
		WHERE
			Username = ".$db->quote($_SESSION['username'])."
Robert Anderson's avatar
Robert Anderson committed
	";
Robert Anderson's avatar
Robert Anderson committed
	$res = $db->query($sql);
Robert Anderson's avatar
Robert Anderson committed
	if (!(is_object($res))) {
		webuiError("Error fetching user information");
	}

Robert Anderson's avatar
Robert Anderson committed
	$row = $res->fetchObject();
Robert Anderson's avatar
Robert Anderson committed
	$userID = $row->id;
Robert Anderson's avatar
Robert Anderson committed
	$username = $row->username;
Robert Anderson's avatar
Robert Anderson committed

	# Get accounting data
	$currentMonth = date("Y-m");

	$sql = "
		SELECT
			SUM(AcctSessionTime) / 60 AS AcctSessionTime,
			SUM(AcctInputOctets) / 1024 / 1024 +
Robert Anderson's avatar
Robert Anderson committed
			SUM(AcctInputGigawords) * 4096 +
Robert Anderson's avatar
Robert Anderson committed
			SUM(AcctOutputGigawords) * 4096 AS TotalTraffic
Robert Anderson's avatar
Robert Anderson committed
		FROM
Robert Anderson's avatar
Robert Anderson committed
			${DB_TABLE_PREFIX}accounting
Robert Anderson's avatar
Robert Anderson committed
		WHERE
Robert Anderson's avatar
Robert Anderson committed
			Username = ".$db->quote($username)."
Robert Anderson's avatar
Robert Anderson committed
		AND
Robert Anderson's avatar
Robert Anderson committed
			PeriodKey = ".$db->quote($currentMonth)."
Robert Anderson's avatar
Robert Anderson committed
	";
Robert Anderson's avatar
Robert Anderson committed
	$res = $db->query($sql);
Robert Anderson's avatar
Robert Anderson committed
	if (!(is_object($res))) {
		webuiError("Error fetching user accounting");
	}
	# Set total traffic and uptime used
	$totalTraffic = 0;
	$totalUptime = 0;
Robert Anderson's avatar
Robert Anderson committed
	# Traffic
	if (isset($row->totaltraffic) && $row->totaltraffic > 0) {
		$totalTraffic += $row->totaltraffic;
	}
	# Uptime
	if (isset($row->acctsessiontime) && $row->acctsessiontime > 0) {
		$totalUptime += $row->acctsessiontime;
Robert Anderson's avatar
Robert Anderson committed
	# Fetch user uptime and traffic cap (group attributes)
	$sql = "
		SELECT
			${DB_TABLE_PREFIX}group_attributes.Name, ${DB_TABLE_PREFIX}group_attributes.Value
		FROM
			${DB_TABLE_PREFIX}group_attributes, ${DB_TABLE_PREFIX}users_to_groups
		WHERE
			${DB_TABLE_PREFIX}users_to_groups.GroupID = ${DB_TABLE_PREFIX}group_attributes.GroupID
			AND ${DB_TABLE_PREFIX}users_to_groups.UserID = ".$db->quote($userID)."
	";
	$res = $db->query($sql);
	if (!(is_object($res))) {
		webuiError("Error fetching user attributes");
	}

	# Initial values
	$trafficCap = "Prepaid";
	$uptimeCap = "Prepaid";
	while ($row = $res->fetchObject()) {
		if ($row->name === "SMRadius-Capping-Traffic-Limit") {
			$trafficCap = (int)$row->value;
		}
		if ($row->name === "SMRadius-Capping-Uptime-Limit") {
			$uptimeCap = (int)$row->value;
		}
	}

	# Fetch user uptime and traffic cap (user attributes)
Robert Anderson's avatar
Robert Anderson committed
	$sql = "
Robert Anderson's avatar
Robert Anderson committed
		SELECT
			Name, Value
		FROM
			${DB_TABLE_PREFIX}user_attributes
		WHERE
Robert Anderson's avatar
Robert Anderson committed
			UserID = ".$db->quote($userID)."
Robert Anderson's avatar
Robert Anderson committed
	";
Robert Anderson's avatar
Robert Anderson committed
	$res = $db->query($sql);
Robert Anderson's avatar
Robert Anderson committed
	if (!(is_object($res))) {
		webuiError("Error fetching user attributes");
	}
Robert Anderson's avatar
Robert Anderson committed
	# Override group_attributes with user attributes
Robert Anderson's avatar
Robert Anderson committed
	while ($row = $res->fetchObject()) {
Robert Anderson's avatar
Robert Anderson committed
		if ($row->name === "SMRadius-Capping-Traffic-Limit") {
			$trafficCap = (int)$row->value;
Robert Anderson's avatar
Robert Anderson committed
		if ($row->name === "SMRadius-Capping-Uptime-Limit") {
			$uptimeCap = (int)$row->value;
	# Fetch user uptime and traffic summary
	$sql = "
Robert Anderson's avatar
Robert Anderson committed
		SELECT
			${DB_TABLE_PREFIX}topups_summary.Balance,
			${DB_TABLE_PREFIX}topups.Type,
Robert Anderson's avatar
Robert Anderson committed
			${DB_TABLE_PREFIX}topups.Value,
			${DB_TABLE_PREFIX}topups.ValidFrom,
			${DB_TABLE_PREFIX}topups.ValidTo
Robert Anderson's avatar
Robert Anderson committed
		FROM
			${DB_TABLE_PREFIX}topups_summary,
			${DB_TABLE_PREFIX}topups
		WHERE
			${DB_TABLE_PREFIX}topups_summary.TopupID = ${DB_TABLE_PREFIX}topups.ID
Robert Anderson's avatar
Robert Anderson committed
			AND ${DB_TABLE_PREFIX}topups.UserID = ".$db->quote($userID)."
			AND ${DB_TABLE_PREFIX}topups_summary.PeriodKey = ".$db->quote($currentMonth)."
Robert Anderson's avatar
Robert Anderson committed
			AND ${DB_TABLE_PREFIX}topups_summary.Depleted = 0
Robert Anderson's avatar
Robert Anderson committed
			${DB_TABLE_PREFIX}topups.Timestamp ASC
	";
	$res = $db->query($sql);
Robert Anderson's avatar
Robert Anderson committed
	if (!(is_object($res))) {
		webuiError("Error fetching topup summaries");
	}
	# Store summary topups
Robert Anderson's avatar
Robert Anderson committed
	$i = 0;
	while ($row = $res->fetchObject()) {
Robert Anderson's avatar
Robert Anderson committed

		$topups[$i] = array();

		$topups[$i]['Type'] = $row->type;
		$topups[$i]['CurrentLimit'] = $row->balance;
		$topups[$i]['Limit'] = $row->value;
		$topups[$i]['ValidFrom'] = $row->validfrom;
		$topups[$i]['Expires'] = $row->validto;

		$i++;
	# Fetch user uptime and traffic topups
Robert Anderson's avatar
Robert Anderson committed
	$thisMonthTimestamp = date("Y-m").'-01';
	$now = date("Y-m-d");
	$sql = "
Robert Anderson's avatar
Robert Anderson committed
		SELECT
Robert Anderson's avatar
Robert Anderson committed
			Value, Type, ValidFrom, ValidTo
Robert Anderson's avatar
Robert Anderson committed
		FROM
Robert Anderson's avatar
Robert Anderson committed
			topups
Robert Anderson's avatar
Robert Anderson committed
		WHERE
Robert Anderson's avatar
Robert Anderson committed
			UserID = ".$db->quote($userID)."
			AND ValidFrom = ".$db->quote($thisMonthTimestamp)."
			AND ValidTo >= ".$db->quote($now)."
			AND Depleted = 0
Robert Anderson's avatar
Robert Anderson committed
			Timestamp ASC
	";
	$res = $db->query($sql);
Robert Anderson's avatar
Robert Anderson committed
	if (!(is_object($res))) {
		webuiError("Error fetching topup");
	}
	# Store normal topups
	while ($row = $res->fetchObject()) {
Robert Anderson's avatar
Robert Anderson committed
		$topups[$i] = array();
		$topups[$i]['Type'] = $row->type;
		$topups[$i]['Limit'] = $row->value;
		$topups[$i]['ValidFrom'] = $row->validfrom;
		$topups[$i]['Expires'] = $row->validto;
Robert Anderson's avatar
Robert Anderson committed

Robert Anderson's avatar
Robert Anderson committed
		$i++;
Robert Anderson's avatar
Robert Anderson committed
	# Calculate topup usage for prepaid and normal users
Robert Anderson's avatar
Robert Anderson committed
	$totalTrafficTopupsAvail = 0;
	if (!(is_numeric($trafficCap) && $trafficCap == 0)) {
Robert Anderson's avatar
Robert Anderson committed
		# Excess usage
		$excess = 0;
		if ($trafficCap === "Prepaid") {
			$excess = $totalTraffic;
		} else {
			$excess = $totalTraffic > $trafficCap ? ($totalTraffic - $trafficCap) : 0;
		}
Robert Anderson's avatar
Robert Anderson committed
		# Loop through all valid topups
		$trafficRows = array();
Robert Anderson's avatar
Robert Anderson committed
		foreach ($topups as $topup) {

			# Traffic topups
			if ($topup['Type'] == 1) {

				# Topup not currently in use
				if ($excess <= 0) {
					$trafficRows[$i] = array();

					$trafficRows[$i]['Cap'] = $topup['Limit'];
					$trafficRows[$i]['Used'] = isset($topup['CurrentLimit']) ? ($topup['Limit'] - $topup['CurrentLimit']) : 0;
					$trafficRows[$i]['ValidFrom'] = $topup['ValidFrom'];
					$trafficRows[$i]['Expires'] = $topup['Expires'];

					# Set total available topups
					$totalTrafficTopupsAvail += isset($topup['CurrentLimit']) ? $topup['CurrentLimit'] : $topup['Limit'];
Robert Anderson's avatar
Robert Anderson committed

					$i++;

				# Topup currently in use
				} elseif (!isset($topup['CurrentLimit']) && $excess < $topup['Limit']) {
Robert Anderson's avatar
Robert Anderson committed
					$trafficRows[$i] = array();

					$trafficRows[$i]['Cap'] = $topup['Limit'];
					$trafficRows[$i]['Used'] = $excess;
					$trafficRows[$i]['ValidFrom'] = $topup['ValidFrom'];
					$trafficRows[$i]['Expires'] = $topup['Expires'];

					# Set total available topups
					$totalTrafficTopupsAvail += $topup['Limit'];

					# Set current topup
					$currentTrafficTopup = array();
					$currentTrafficTopup['Used'] = $excess;
					$currentTrafficTopup['Cap'] = $topup['Limit'];

					# If we hit this topup then all the rest of them are available
					$excess = 0;

					$i++;

				} elseif (isset($topup['CurrentLimit']) && $excess < $topup['CurrentLimit']) {
					$trafficRows[$i] = array();

					$trafficRows[$i]['Cap'] = $topup['Limit'];
					$trafficRows[$i]['Expires'] = $topup['Expires'];
					$trafficRows[$i]['ValidFrom'] = $topup['ValidFrom'];

					$trafficRows[$i]['Used'] = ($topup['Limit'] - $topup['CurrentLimit']) + $excess;

					# Set total available topups
					$totalTrafficTopupsAvail += $topup['CurrentLimit'];
Robert Anderson's avatar
Robert Anderson committed
					# Set current topup
					$currentTrafficTopup = array();
					$currentTrafficTopup['Used'] = ($topup['Limit'] - $topup['CurrentLimit']) + $excess;
					$currentTrafficTopup['Cap'] = $topup['Limit'];

					# If we hit this topup then all the rest of them are available
					$excess = 0;

					$i++;

Robert Anderson's avatar
Robert Anderson committed
				# Topup has been used up
				} else {
					$trafficRows[$i] = array();

					$trafficRows[$i]['Cap'] = $topup['Limit'];
					$trafficRows[$i]['Used'] = $topup['Limit'];
					$trafficRows[$i]['ValidFrom'] = $topup['ValidFrom'];
					$trafficRows[$i]['Expires'] = $topup['Expires'];

					# Subtract this topup from excess usage
					$excess -= isset($topup['CurrentLimit']) ? $topup['CurrentLimit'] : $topup['Limit'];
Robert Anderson's avatar
Robert Anderson committed

Robert Anderson's avatar
Robert Anderson committed
	# Calculate topup usage for prepaid and normal users
Robert Anderson's avatar
Robert Anderson committed
	$totalUptimeTopupsAvail = 0;
	if (!(is_numeric($uptimeCap) && $uptimeCap == 0)) {
Robert Anderson's avatar
Robert Anderson committed

		# Excess usage
		$excess = 0;
		if ($uptimeCap === "Prepaid") {
			$excess = $totalUptime;
Robert Anderson's avatar
Robert Anderson committed
			$excess = $totalUptime > $uptimeCap ? ($totalUptime - $uptimeCap) : 0;
Robert Anderson's avatar
Robert Anderson committed
		# Loop through all valid topups
		$uptimeRows = array();
		$i = 0;
		foreach ($topups as $topup) {
Robert Anderson's avatar
Robert Anderson committed
			# Uptime topups
			if ($topup['Type'] == 2) {
Robert Anderson's avatar
Robert Anderson committed
				# Topup not currently in use
				if ($excess <= 0) {
					$uptimeRows[$i] = array();

					$uptimeRows[$i]['Cap'] = $topup['Limit'];
					$uptimeRows[$i]['Used'] = isset($topup['CurrentLimit']) ? ($topup['Limit'] - $topup['CurrentLimit']) : 0;
					$uptimeRows[$i]['ValidFrom'] = $topup['ValidFrom'];
					$uptimeRows[$i]['Expires'] = $topup['Expires'];

					# Set total available topups
					$totalUptimeTopupsAvail += isset($topup['CurrentLimit']) ? $topup['CurrentLimit'] : $topup['Limit'];
Robert Anderson's avatar
Robert Anderson committed

					$i++;

				# Topup currently in use
				} elseif (!isset($topup['CurrentLimit']) && $excess < $topup['Limit']) {
Robert Anderson's avatar
Robert Anderson committed
					$uptimeRows[$i] = array();
Robert Anderson's avatar
Robert Anderson committed
					$uptimeRows[$i]['Cap'] = $topup['Limit'];
					$uptimeRows[$i]['Used'] = $excess;
					$uptimeRows[$i]['ValidFrom'] = $topup['ValidFrom'];
					$uptimeRows[$i]['Expires'] = $topup['Expires'];
Robert Anderson's avatar
Robert Anderson committed
					# Set total available topups
					$totalUptimeTopupsAvail += $topup['Limit'];

					# Set current topup
					$currentUptimeTopup = array();
					$currentUptimeTopup['Used'] = $excess;
					$currentUptimeTopup['Cap'] = $topup['Limit'];

					# If we hit this topup then all the rest of them are available
					$excess = 0;

					$i++;

				} elseif (isset($topup['CurrentLimit']) && $excess < $topup['CurrentLimit']) {
					$uptimeRows[$i] = array();

					$uptimeRows[$i]['Cap'] = $topup['Limit'];
					$uptimeRows[$i]['Expires'] = $topup['Expires'];
					$uptimeRows[$i]['ValidFrom'] = $topup['ValidFrom'];

					$uptimeRows[$i]['Used'] = ($topup['Limit'] - $topup['CurrentLimit']) + $excess;

					# Set total available topups
					$totalUptimeTopupsAvail += $topup['CurrentLimit'];
Robert Anderson's avatar
Robert Anderson committed
					# Set current topup
					$currentUptimeTopup = array();
					$currentUptimeTopup['Used'] = ($topup['Limit'] - $topup['CurrentLimit']) + $excess;
					$currentUptimeTopup['Cap'] = $topup['Limit'];

					# If we hit this topup then all the rest of them are available
					$excess = 0;

					$i++;

Robert Anderson's avatar
Robert Anderson committed
				# Topup has been used up
				} else {
					$uptimeRows[$i] = array();

					$uptimeRows[$i]['Cap'] = $topup['Limit'];
					$uptimeRows[$i]['Used'] = $topup['Limit'];
					$uptimeRows[$i]['ValidFrom'] = $topup['ValidFrom'];
					$uptimeRows[$i]['Expires'] = $topup['Expires'];

					# Subtract this topup from excess usage
					$excess -= isset($topup['CurrentLimit']) ? $topup['CurrentLimit'] : $topup['Limit'];
Robert Anderson's avatar
Robert Anderson committed
?>
	<table class="blockcenter">
		<tr>
Robert Anderson's avatar
Robert Anderson committed
			<td width="500" colspan="4" class="section">Account Information</td>
		</tr>
		<tr>
			<td align="center" class="title">Username</td>
			<td align="center" class="title">Traffic Cap</td>
			<td align="center" class="title">Uptime Cap</td>
		</tr>
		<tr>
			<td align="center" class="value"><?php echo $username; ?></td>
			<td align="center" class="value">
				<?php
					if (is_numeric($trafficCap) && $trafficCap == 0) {
						echo "Unlimited";
					} elseif (is_string($trafficCap) && $trafficCap === "Prepaid") {
						echo $trafficCap;
					} else {
						echo $trafficCap." MB";
					}
				?>
			</td>
			<td align="center" class="value">
				<?php
					if (is_numeric($uptimeCap) && $uptimeCap == 0) {
						echo "Unlimited";
					} elseif (is_string($uptimeCap) && $uptimeCap === "Prepaid") {
						echo $uptimeCap;
					} else {
						echo $uptimeCap." MB";
					}
				?>
			</td>
		</tr>
		<tr>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<td colspan="4" class="section">Traffic Usage</td>
		</tr>
		<tr>
			<td align="center" class="title">Active Topup</td>
			<td align="center" class="title">Total Topup</td>
			<td align="center" class="title">Total Usage</td>
		</tr>
			<td align="center" class="value">
				<?php
					if (isset($currentTrafficTopup) && (!(is_numeric($trafficCap) && $trafficCap == 0))) {
						echo sprintf("%.2f",$currentTrafficTopup['Used'])."/".sprintf($currentTrafficTopup['Cap'])." MB";
					} else {
						echo "None";
					}
				?>
			</td>
			<td align="center" class="value"><?php echo $totalTrafficTopupsAvail." MB"; ?></td>
			<td align="center" class="value"><?php echo sprintf("%.2f",$totalTraffic)." MB"; ?></td>
		<tr>
		</tr>
		<tr>
			<td>&nbsp;</td>
Robert Anderson's avatar
Robert Anderson committed
		</tr>
		<tr>
Robert Anderson's avatar
Robert Anderson committed
			<td colspan="4" class="section">Uptime Usage</td>
Robert Anderson's avatar
Robert Anderson committed
		</tr>
		<tr>
Robert Anderson's avatar
Robert Anderson committed
			<td align="center" class="title">Active Topup</td>
			<td align="center" class="title">Total Topup</td>
			<td align="center" class="title">Total Usage</td>
Robert Anderson's avatar
Robert Anderson committed
		</tr>
Robert Anderson's avatar
Robert Anderson committed
		<tr>
			<td align="center" class="value">
				<?php
					if (isset($currentUptimeTopup) && (!(is_numeric($uptimeCap) && $uptimeCap == 0))) {
						echo sprintf("%.2f",$currentUptimeTopup['Used'])."/".sprintf($currentUptimeTopup['Cap'])." MB";
					} else {
						echo "None";
					}
				?>
			</td>
			<td align="center" class="value"><?php echo $totalUptimeTopupsAvail." MB"; ?></td>
			<td align="center" class="value"><?php echo sprintf("%.2f",$totalUptime)." Min"; ?></td>
		</tr>
	</table>
	<p>&nbsp;</p>
Robert Anderson's avatar
Robert Anderson committed
<?php
Robert Anderson's avatar
Robert Anderson committed
	# Dont display if we unlimited
	if (!(is_numeric($trafficCap) && $trafficCap == 0)) {
Robert Anderson's avatar
Robert Anderson committed
		<table class="blockcenter">
Robert Anderson's avatar
Robert Anderson committed
			<tr>
Robert Anderson's avatar
Robert Anderson committed
				<td width="500" colspan="3" class="section">Topup Overview: Traffic</td>
Robert Anderson's avatar
Robert Anderson committed
			</tr>
			<tr>
Robert Anderson's avatar
Robert Anderson committed
				<td align="center" class="title">Used</td>
				<td align="center" class="title">Valid From</td>
				<td align="center" class="title">Valid To</td>
Robert Anderson's avatar
Robert Anderson committed
			</tr>
Robert Anderson's avatar
Robert Anderson committed
			foreach ($trafficRows as $trafficRow) {
Robert Anderson's avatar
Robert Anderson committed
				<tr>
					<td align="center" class="value">
Robert Anderson's avatar
Robert Anderson committed
							echo sprintf("%.2f",$trafficRow['Used'])."/".sprintf($trafficRow['Cap'])." MB";
					<td align="center" class="value"><?php $validFrom = strtotime($trafficRow['ValidFrom']); echo date("Y-m-d",$validFrom);?></td>
					<td align="center" class="value"><?php $validTo = strtotime($trafficRow['Expires']); echo date("Y-m-d",$validTo);?></td>
Robert Anderson's avatar
Robert Anderson committed
				</tr>
Robert Anderson's avatar
Robert Anderson committed
			}
Robert Anderson's avatar
Robert Anderson committed
		</table>
Robert Anderson's avatar
Robert Anderson committed
	}

	# Dont display if we unlimited
	if (!(is_numeric($uptimeCap) && $uptimeCap == 0)) {
Robert Anderson's avatar
Robert Anderson committed
		<p>&nbsp;</p>
		<table class="blockcenter">
Robert Anderson's avatar
Robert Anderson committed
				<td width="500" colspan="3" class="section">Topup Overview: Uptime</td>
Robert Anderson's avatar
Robert Anderson committed
			<tr>
Robert Anderson's avatar
Robert Anderson committed
				<td align="center" class="title">Used</td>
				<td align="center" class="title">Valid From</td>
				<td align="center" class="title">Valid To</td>
Robert Anderson's avatar
Robert Anderson committed
			</tr>
Robert Anderson's avatar
Robert Anderson committed
			foreach ($uptimeRows as $uptimeRow) {
Robert Anderson's avatar
Robert Anderson committed
				<tr>
					<td align="center" class="value">
Robert Anderson's avatar
Robert Anderson committed
						echo sprintf("%.2f",$uptimeRow['Used'])."/".sprintf($uptimeRow['Cap'])." MB";
					<td align="center" class="value"><?php $validFrom = strtotime($uptimeRow['ValidFrom']); echo date("Y-m-d",$validFrom);?></td>
					<td align="center" class="value"><?php $validTo = strtotime($uptimeRow['Expires']); echo date("Y-m-d",$validTo);?></td>
Robert Anderson's avatar
Robert Anderson committed
				</tr>
Robert Anderson's avatar
Robert Anderson committed
			}
Robert Anderson's avatar
Robert Anderson committed
		</table>
Robert Anderson's avatar
Robert Anderson committed
	}
Robert Anderson's avatar
Robert Anderson committed
	<p>&nbsp;</p>
	<p align="center"><a href="logs.php">Usage Logs</a></p>
Robert Anderson's avatar
Robert Anderson committed
<?php
}

displayDetails();

# Footer
include("include/footer.php");

# vim: ts=4
?>