Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • smradius/smradius
  • centiva-shail/smradius
  • nkukard/smradius
3 results
Show changes
<?php
# Footer of page
# Copyright (C) 2007-2015, AllWorldIT
#
# 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.
?>
<div class="copyright">SMRadius - Copyright &copy; 2007-2011, <a href="http://www.allworldit.com" ?>AllWorldIT</a></div>
<br />
</body>
</html>
<?php
ob_flush();
# vim: ts=4
?>
<?php
# Top part of radius control panel
# Copyright (C) 2007-2015, AllWorldIT
#
# 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.
# Grab version
require_once("include/version.php");
?>
<html>
<title>User Control Panel</title>
<link rel="stylesheet" href="styles.css" type="text/css">
<body>
<div class="pagetitle">User Control Panel</div>
<?php
if ($auth->loggedIn) {
?>
<div class="smallinfo">Logged in as <?php echo $auth->username ?> (<a href="./?logout=1">Logout</a>).</div>
<?php
} else {
?>
<div class="smallinfo">v<?php echo $VERSION ?></div>
<?php
}
?>
<br>
<?php
# vim: ts=4
?>
<?php
# Misc functions we can use
# Copyright (C) 2007-2015, AllWorldIT
#
# 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.
# Display error banner
function displayError($msg)
{
?>
<div class="error"><?php echo $msg; ?></div>
<?php
}
# Display success banner
function displaySuccess($msg)
{
?>
<div class="success"><?php echo $msg; ?></div>
<?php
}
# vim: ts=4
?>
<?php
# Web User UI PRE
# Copyright (C) 2007-2015, AllWorldIT
#
# 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.
ob_start();
require_once("auth.php");
require_once("miscfuncs.php");
# Main authentication object
$auth = new Auth('Radius');
# First of all check if we in maintenance mode
if (file_exists("../maintmode")) {
include("header.php");
?>
<center>System unavailable due to maintenance, sorry for the inconvenience. Please try again in 5 minutes.</center>
<?php
include("include/footer.php");
exit;
}
# If not ... carry on
$auth->setLoginBoxUsername('Username');
# Check if we logged in
if (!$auth->loggedIn) {
$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
# If not, check credentials
if ($auth->checkLogin($username,$password) != 0) {
include("header.php");
$auth->displayLogin();
include("include/footer.php");
exit;
}
} else {
# Log client out
if (isset($_REQUEST['logout']) && $_REQUEST['logout'] == 1) {
$auth->logout("You have been logged out.");
require_once('HTTP.php');
HTTP::Redirect('.');
exit;
}
}
# vim: ts=4
?>
<?php
# Radius term code mappings
# Copyright (C) 2007-2015, AllWorldIT
#
# 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.
# Return string for radius term code
function strRadiusTermCode($errCode) {
if (is_numeric($errCode)) {
# Terminate codes RFC 2866
switch ($errCode) {
case 1:
return "User Request";
case 2:
return "Lost Carrier";
case 3:
return "Lost Service";
case 4:
return "Idle Timeout";
case 5:
return "Session Timeout";
case 6:
return "Admin Reset";
case 7:
return "Admin Reboot";
case 8:
return "Port Error";
case 9:
return "NAS Error";
case 10:
return "NAS Request";
case 11:
return "NAS Reboot";
case 12:
return "Port Unneeded";
case 13:
return "Port Preempted";
case 14:
return "Port Suspended";
case 15:
return "Service Unavailable";
case 16:
return "Callback";
case 17:
return "User Error";
case 18:
return "Host Request";
default:
return "Unkown";
}
} else {
switch ($errCode) {
case NULL:
return "Still logged in";
default:
return "Unkown";
}
}
}
# vim: ts=4
?>
<?php
# Versioning for this interface
# Copyright (C) 2007-2015, AllWorldIT
#
# 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.
$VERSION = "0.0.3a";
# vim: ts=4
?>
<?php
# Main User Control Panel Page
# Copyright (c) 2007-2015, AllWorldIT
#
# 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!
# Displays error
function webuiError($msg) {
echo isset($msg) ? $msg : "Unknown error";
}
# Display details
function displayDetails() {
global $db;
global $DB_TABLE_PREFIX;
# Get user's ID
$sql = "
SELECT
ID, Username
FROM
${DB_TABLE_PREFIX}users
WHERE
Username = ".$db->quote($_SESSION['username'])."
";
$res = $db->query($sql);
if (!(is_object($res))) {
webuiError("Error fetching user information");
}
$row = $res->fetchObject();
# Set user ID
$userID = $row->id;
$username = $row->username;
# Get accounting data
$currentMonth = date("Y-m");
$sql = "
SELECT
SUM(AcctSessionTime) / 60 AS AcctSessionTime,
SUM(AcctInputOctets) / 1024 / 1024 +
SUM(AcctInputGigawords) * 4096 +
SUM(AcctOutputOctets) / 1024 / 1024 +
SUM(AcctOutputGigawords) * 4096 AS TotalTraffic
FROM
${DB_TABLE_PREFIX}accounting
WHERE
Username = ".$db->quote($username)."
AND
PeriodKey = ".$db->quote($currentMonth)."
";
$res = $db->query($sql);
if (!(is_object($res))) {
webuiError("Error fetching user accounting");
}
# Set total traffic and uptime used
$totalTraffic = 0;
$totalUptime = 0;
# Pull in row
$row = $res->fetchObject();
# Traffic
if (isset($row->totaltraffic) && $row->totaltraffic > 0) {
$totalTraffic += $row->totaltraffic;
}
# Uptime
if (isset($row->acctsessiontime) && $row->acctsessiontime > 0) {
$totalUptime += $row->acctsessiontime;
}
# 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)."
AND ${DB_TABLE_PREFIX}group_attributes.Disabled = 0
";
$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)
$sql = "
SELECT
Name, Value
FROM
${DB_TABLE_PREFIX}user_attributes
WHERE
UserID = ".$db->quote($userID)."
AND Disabled = 0
";
$res = $db->query($sql);
if (!(is_object($res))) {
webuiError("Error fetching user attributes");
}
# Override group_attributes with user attributes
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 summary
$sql = "
SELECT
${DB_TABLE_PREFIX}topups_summary.Balance,
${DB_TABLE_PREFIX}topups.Type,
${DB_TABLE_PREFIX}topups.Value,
${DB_TABLE_PREFIX}topups.ValidFrom,
${DB_TABLE_PREFIX}topups.ValidTo
FROM
${DB_TABLE_PREFIX}topups_summary,
${DB_TABLE_PREFIX}topups
WHERE
${DB_TABLE_PREFIX}topups_summary.TopupID = ${DB_TABLE_PREFIX}topups.ID
AND ${DB_TABLE_PREFIX}topups.UserID = ".$db->quote($userID)."
AND ${DB_TABLE_PREFIX}topups_summary.PeriodKey = ".$db->quote($currentMonth)."
AND ${DB_TABLE_PREFIX}topups_summary.Depleted = 0
ORDER BY
${DB_TABLE_PREFIX}topups.Timestamp ASC
";
$res = $db->query($sql);
if (!(is_object($res))) {
webuiError("Error fetching topup summaries");
}
# Store summary topups
$topups = array();
$i = 0;
while ($row = $res->fetchObject()) {
$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
$thisMonthTimestamp = date("Y-m").'-01';
$now = date("Y-m-d");
$sql = "
SELECT
Value, Type, ValidFrom, ValidTo
FROM
topups
WHERE
UserID = ".$db->quote($userID)."
AND ValidFrom = ".$db->quote($thisMonthTimestamp)."
AND ValidTo >= ".$db->quote($now)."
AND Depleted = 0
ORDER BY
Timestamp ASC
";
$res = $db->query($sql);
if (!(is_object($res))) {
webuiError("Error fetching topup");
}
# Store normal topups
while ($row = $res->fetchObject()) {
$topups[$i] = array();
$topups[$i]['Type'] = $row->type;
$topups[$i]['Limit'] = $row->value;
$topups[$i]['ValidFrom'] = $row->validfrom;
$topups[$i]['Expires'] = $row->validto;
$i++;
}
# Calculate topup usage for prepaid and normal users
$totalTrafficTopupsAvail = 0;
if (!(is_numeric($trafficCap) && $trafficCap == 0)) {
# Excess usage
$excess = 0;
if ($trafficCap === "Prepaid") {
$excess = $totalTraffic;
} else {
$excess = $totalTraffic > $trafficCap ? ($totalTraffic - $trafficCap) : 0;
}
# Loop through all valid topups
$trafficRows = array();
$i = 0;
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'];
$i++;
# Topup currently in use
} elseif (!isset($topup['CurrentLimit']) && $excess < $topup['Limit']) {
$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'];
# 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++;
# 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'];
$i++;
}
}
}
}
# Calculate topup usage for prepaid and normal users
$totalUptimeTopupsAvail = 0;
if (!(is_numeric($uptimeCap) && $uptimeCap == 0)) {
# Excess usage
$excess = 0;
if ($uptimeCap === "Prepaid") {
$excess = $totalUptime;
} else {
$excess = $totalUptime > $uptimeCap ? ($totalUptime - $uptimeCap) : 0;
}
# Loop through all valid topups
$uptimeRows = array();
$i = 0;
foreach ($topups as $topup) {
# Uptime topups
if ($topup['Type'] == 2) {
# 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'];
$i++;
# Topup currently in use
} elseif (!isset($topup['CurrentLimit']) && $excess < $topup['Limit']) {
$uptimeRows[$i] = array();
$uptimeRows[$i]['Cap'] = $topup['Limit'];
$uptimeRows[$i]['Used'] = $excess;
$uptimeRows[$i]['ValidFrom'] = $topup['ValidFrom'];
$uptimeRows[$i]['Expires'] = $topup['Expires'];
# 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'];
# 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++;
# 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'];
$i++;
}
}
}
}
# HTML
?>
<table class="blockcenter">
<tr>
<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>
</tr>
<tr>
<td colspan="4" class="section">Uptime 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>
<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>
<?php
# Dont display if we unlimited
if (!(is_numeric($trafficCap) && $trafficCap == 0)) {
?>
<table class="blockcenter">
<tr>
<td width="500" colspan="3" class="section">Topup Overview: Traffic</td>
</tr>
<tr>
<td align="center" class="title">Used</td>
<td align="center" class="title">Valid From</td>
<td align="center" class="title">Valid To</td>
</tr>
<?php
foreach ($trafficRows as $trafficRow) {
?>
<tr>
<td align="center" class="value">
<?php
echo sprintf("%.2f",$trafficRow['Used'])."/".sprintf($trafficRow['Cap'])." MB";
?>
</td>
<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>
</tr>
<?php
}
?>
</table>
<?php
}
# Dont display if we unlimited
if (!(is_numeric($uptimeCap) && $uptimeCap == 0)) {
?>
<p>&nbsp;</p>
<table class="blockcenter">
<tr>
<td width="500" colspan="3" class="section">Topup Overview: Uptime</td>
</tr>
<tr>
<td align="center" class="title">Used</td>
<td align="center" class="title">Valid From</td>
<td align="center" class="title">Valid To</td>
</tr>
<?php
foreach ($uptimeRows as $uptimeRow) {
?>
<tr>
<td align="center" class="value">
<?php
echo sprintf("%.2f",$uptimeRow['Used'])."/".sprintf($uptimeRow['Cap'])." MB";
?>
</td>
<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>
</tr>
<?php
}
?>
</table>
<?php
}
?>
<p>&nbsp;</p>
<p align="center"><a href="logs.php">Usage Logs</a></p>
<?php
}
displayDetails();
# Footer
include("include/footer.php");
# vim: ts=4
?>
<?php
# Radius user logs
# Copyright (C) 2007-2015, AllWorldIT
#
# 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");
# Database
include_once("include/db.php");
# Radius functions
require_once("include/radiuscodes.php");
# NB: We will only end up here if we authenticated!
# Display settings
function displayLogs() {
global $db;
global $DB_TABLE_PREFIX;
?>
<table class="blockcenter" width="750">
<tr>
<td colspan="4" class="title">
<form method="POST">
<p class="middle center">
Display logs between
<?php
# Validate dates before sending
if (isset($_POST['searchFrom'])) {
if (!(preg_match("/^\d{4}\-(0[1-9]|1[0-2])\-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/",$_POST['searchFrom']))) {
unset($_POST['searchFrom']);
}
}
if (isset($_POST['searchFrom'])) {
$searchFrom = date("Y-m-d",strtotime($_POST['searchFrom']));
$_POST['searchFrom'] = $searchFrom;
}
if (isset($_POST['searchFrom'])) {
?>
<input type="text" name="searchFrom" size="11" value="<?php echo $_POST['searchFrom'] ?>"/>
<?php
} else {
?>
<input type="text" name="searchFrom" size="11"/>
<?php
}
?>
and
<?php
# Validate dates before sending
if (isset($_POST['searchTo'])) {
if (!(preg_match("/^\d{4}\-(0[1-9]|1[0-2])\-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/",$_POST['searchTo']))) {
unset($_POST['searchTo']);
}
}
if (isset($_POST['searchTo'])) {
$searchFrom = date("Y-m-d",strtotime($_POST['searchTo']));
$_POST['searchTo'] = $searchFrom;
}
if (isset($_POST['searchTo'])) {
?>
<input type="text" name="searchTo" size="11" value="<?php echo $_POST['searchTo'] ?>"/>
<?php
} else {
?>
<input type="text" name="searchTo" size="11"/>
<?php
}
?>
<input type="submit" value="search">
</p>
</form>
</td>
<td colspan="2" class="section">Connect Speed</td>
<td colspan="2" class="section">Traffic Usage<br> (Mbyte)</td>
</tr>
<tr>
<td class="section">Timestamp</td>
<td class="section">Duration<br> (Min)</td>
<td class="section">Caller ID</td>
<td class="section">Term Reason</td>
<td class="section">Receive</td>
<td class="section">Transmit</td>
<td class="section">Upload</td>
<td class="section">Download</td>
</tr>
<?php
# Extra SQL
$extraSQL = "";
$extraSQLVals = array();
$limitSQL = "";
if (isset($_POST['searchFrom']) && isset($_POST['searchTo'])) {
$extraSQL .= " AND EventTimestamp >= ?";
array_push($extraSQLVals,$_POST['searchFrom']);
$extraSQL .= " AND EventTimestamp <= ?";
array_push($extraSQLVals,$_POST['searchTo']);
# Accounting query FIXME nas receive and transmit rates
$sql = "
SELECT
EventTimestamp,
CallingStationID,
AcctSessionTime / 60 AS AcctSessionTime,
AcctInputOctets / 1024 / 1024 +
AcctInputGigawords * 4096 AS AcctInputMbyte,
AcctOutputOctets / 1024 / 1024 +
AcctOutputGigawords * 4096 AS AcctOutputMbyte,
AcctTerminateCause
FROM
${DB_TABLE_PREFIX}accounting
WHERE
Username = ".$db->quote($_SESSION['username'])."
$extraSQL
ORDER BY
EventTimestamp
DESC
";
$res = $db->prepare($sql);
$res->execute($extraSQLVals);
# Display logs
$totalInput = 0;
$totalOutput = 0;
$totalTime = 0;
while ($row = $res->fetchObject()) {
# Input data calculation
$inputData = 0;
if (isset($row->acctinputmbyte) && $row->acctinputmbyte > 0) {
$inputData += $row->acctinputmbyte;
}
$totalInput += $inputData;
# Output data calculation
$outputData = 0;
if (isset($row->acctoutputmbyte) && $row->acctoutputmbyte > 0) {
$outputData += $row->acctoutputmbyte;
}
$totalOutput += $outputData;
# Uptime calculation
$sessionTime = 0;
if (isset($row->acctsessiontime) && $row->acctsessiontime > 0) {
$sessionTime += $row->acctsessiontime;
}
$totalTime += $sessionTime;
?>
<tr>
<td class="desc"><?php echo $row->eventtimestamp; ?></td>
<td class="desc"><?php printf("%.2f",$sessionTime); ?></td>
<td class="desc"><?php echo $row->callingstationid; ?></td>
<td class="center desc"><?php echo strRadiusTermCode($row->acctterminatecause); ?></td>
<td class="center desc">
<?php
if (isset($row->nastransmitrate)) {
echo $row->nastransmitrate;
}
?>
</td>
<td class="center desc">
<?php
if (isset($row->nasreceiverate)) {
echo $row->nasreceiverate;
}
?>
</td>
<td class="right desc"><?php printf("%.2f",$inputData); ?></td>
<td class="right desc"><?php printf("%.2f",$outputData); ?></td>
</tr>
<?php
}
if ($res->rowCount() == 0) {
?>
<tr>
<td colspan="8" class="info">There are no logs for the selected dates</td>
</tr>
<?php
} else {
$totalTraffic = $totalInput + $totalOutput;
?>
<tr>
<td colspan="6" class="right">Sub Total:</td>
<td class="right desc"><?php printf("%.2f",$totalInput); ?></td>
<td class="right desc"><?php printf("%.2f",$totalOutput); ?></td>
</tr>
<tr>
<td colspan="6" class="right">Total:</td>
<td colspan="2" class="center desc"><?php printf("%.2f",$totalTraffic); ?></td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="8" class="info">Please specify dates above in YYYY-MM-DD format and click "search".</td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
<a href=".">Back</a><br>
<?php
displayLogs();
?>
<a href=".">Back</a><br><br>
<?php
# Footer
include("include/footer.php");
# vim: ts=4
?>
/*
*
* User Control Panel Stylesheet
* Copyright (C) 2007-2015, AllWorldIT
*
* 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.
*/
td.section {
border-style: solid;
border-width: 2px;
color: #ffffff;
background-color: #000066;
text-align: center;
}
td.top {
vertical-align: top;
}
td.middle {
vertical-align: middle;
}
td.right {
text-align: right;
}
td.title,div.title {
border-style: solid;
border-width: 1px;
background-color: #ffffdd;
}
div.pagetitle {
border-style: solid;
border-width: 1px;
border-color: #000000;
font-size: larger;
text-align: center;
}
div.smallinfo {
font-size: 10px;
text-align: center;
}
div.copyright {
border-style: solid;
border-width: 1px;
font-size: 10px;
text-align: center;
}
td.pinfo {
border-style: dotted;
border-width: 1px;
font-size: smaller;
}
td.info {
border-style: dotted;
border-width: 1px;
font-size: smaller;
text-align: center;
}
td.value,div.value {
}
td.desc,div.desc {
background-color: #eeeeee;
}
.blockcenter {
margin-left: auto;
margin-right: auto;
}
.center {
text-align: center;
}
.important {
font-style: italic;
}
body { font-family: verdana; text-align: center; }
a, a:visited {
text-decoration: none;
color: #004D91;
}
a:hover {
text-decoration: underline;
}
.loginform table {
width: 400;
margin-left: auto;
margin-right: auto;
}
.loginformt td {
text-align: center;
}
.loginforms {
text-align: center;
}
.loginformud, .loginformpd {
text-align: right;
}
.mtlisttable {
border: 1px solid #000000;
font-size: 12px;
margin-left: auto; margin-right: auto;
}
.mtlisttabletitle {
text-align: center;
font-size: 12px;
font-weight: bold;
}
.mtlisttablehead {
}
.mtlisttabledata {
}
mtsearchtable {
border: 1px solid #000;
margin-left: auto;
margin-right: auto;
}
mtsearchtabletitle {
font-weight: bold;
}
mtsearchtablehead {
}
mtsearchtabledata {
}
mtsearchtableorder {
}
mtsearchtablesubmit {
font-weight: bold;
}
.graph {
position: relative; /* IE is dumb */
margin: auto;
width: 200px;
border: 1px solid #000066;
padding: 2px;
}
.graph .bar {
display: block;
position: relative;
background: #E6E6FA;
text-align: center;
color: #333;
height: 2em;
line-height: 2em;
}
.graph .bar span { position: absolute; left: 1em; }