commit
e534dd216c
16
README.md
16
README.md
|
@ -16,4 +16,18 @@ cd /var/www/html/include
|
||||||
sudo cp config.inc.php.dist config.inc.php
|
sudo cp config.inc.php.dist config.inc.php
|
||||||
```
|
```
|
||||||
|
|
||||||
- **include/config.inc.php** - At a minimum set your email address, IPv4, IPv6, country and comment. **Do not** enable the calling home feature. This feature is not appropriate for mrefd.
|
### Customizations
|
||||||
|
- Homepage link
|
||||||
|
- edit config.ini.php to change the logo to link to your homepage. Defaults to the M17 website.
|
||||||
|
- Logo file
|
||||||
|
- place your logo in /images (SVG preferred) and edit config.ini.php to change the logo image. Defaults to the M17 logo.
|
||||||
|
|
||||||
|
### Files to edit
|
||||||
|
- **include/config.inc.php**
|
||||||
|
- ContactEmail - set this to the sysop's email address
|
||||||
|
- IPV4 - set this to the IPv4 address of the reflector
|
||||||
|
- IPV6 - set this to the IPv6 address of the reflector, if not used, enter NONE
|
||||||
|
- Homepage - set this to your homepage, defaults to m17project
|
||||||
|
- Logo - set this to the filename of your logo, defaults to M17 logo
|
||||||
|
|
||||||
|
**Do not** enable the calling home feature. This feature is not appropriate for mrefd.
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,15 +0,0 @@
|
||||||
/*!
|
|
||||||
* IE10 viewport hack for Surface/desktop Windows 8 bug
|
|
||||||
* Copyright 2014-2015 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See the Getting Started docs for more information:
|
|
||||||
* http://getbootstrap.com/getting-started/#support-ie10-width
|
|
||||||
*/
|
|
||||||
@-webkit-viewport { width: device-width; }
|
|
||||||
@-moz-viewport { width: device-width; }
|
|
||||||
@-ms-viewport { width: device-width; }
|
|
||||||
@-o-viewport { width: device-width; }
|
|
||||||
@viewport { width: device-width; }
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
/* Show it is fixed to the top */
|
||||||
|
body {
|
||||||
|
min-height: 75rem;
|
||||||
|
padding-top: 4.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
main > .container {
|
||||||
|
padding: 60px 15px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer > .container {
|
||||||
|
padding-right: 15px;
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
|
@ -17,8 +17,10 @@ $PageOptions = array();
|
||||||
$PageOptions['ContactEmail'] = 'your_email'; // Support E-Mail address
|
$PageOptions['ContactEmail'] = 'your_email'; // Support E-Mail address
|
||||||
$PageOptions['IPV4'] = 'refl_ipv4_address'; // Reflector IPV4 Address
|
$PageOptions['IPV4'] = 'refl_ipv4_address'; // Reflector IPV4 Address
|
||||||
$PageOptions['IPV6'] = 'refl_ipv6_address'; // Reflector IPV6 Address - if none use NONE
|
$PageOptions['IPV6'] = 'refl_ipv6_address'; // Reflector IPV6 Address - if none use NONE
|
||||||
|
$PageOptions['Homepage'] = 'https://m17project.org'; // Link to homepage for logo
|
||||||
|
$PageOptions['Logo'] = 'm17_logo.svg'; // Logo image - SVG preferred - place in /images/
|
||||||
|
|
||||||
$PageOptions['DashboardVersion'] = '1.0.1'; // Dashboard Version
|
$PageOptions['DashboardVersion'] = '1.1.0'; // Dashboard Version
|
||||||
|
|
||||||
$PageOptions['PageRefreshActive'] = true; // Activate automatic refresh
|
$PageOptions['PageRefreshActive'] = true; // Activate automatic refresh
|
||||||
$PageOptions['PageRefreshDelay'] = '10000'; // Page refresh time in miliseconds
|
$PageOptions['PageRefreshDelay'] = '10000'; // Page refresh time in miliseconds
|
||||||
|
@ -46,7 +48,7 @@ $PageOptions['ModuleNames']['D'] = '';
|
||||||
|
|
||||||
$PageOptions['MetaDescription'] = 'MREFD is an M17 Reflector System for Ham Radio Operators.'; // Meta Tag Values, useful for Search Engines
|
$PageOptions['MetaDescription'] = 'MREFD is an M17 Reflector System for Ham Radio Operators.'; // Meta Tag Values, useful for Search Engines
|
||||||
$PageOptions['MetaKeywords'] = 'Ham Radio, M17, XReflector, '; // Meta Tag Values, useful for Search Engines
|
$PageOptions['MetaKeywords'] = 'Ham Radio, M17, XReflector, '; // Meta Tag Values, useful for Search Engines
|
||||||
$PageOptions['MetaAuthor'] = 'N7TAE'; // Meta Tag Values, useful for Search Engines
|
$PageOptions['MetaAuthor'] = 'N7TAE, KC1AWV'; // Meta Tag Values, useful for Search Engines
|
||||||
$PageOptions['MetaRevisit'] = 'After 30 Days'; // Meta Tag Values, useful for Search Engines
|
$PageOptions['MetaRevisit'] = 'After 30 Days'; // Meta Tag Values, useful for Search Engines
|
||||||
$PageOptions['MetaRobots'] = 'index,follow'; // Meta Tag Values, useful for Search Engines
|
$PageOptions['MetaRobots'] = 'index,follow'; // Meta Tag Values, useful for Search Engines
|
||||||
|
|
||||||
|
@ -55,6 +57,7 @@ $PageOptions['UserPage']['ShowFilter'] = true;
|
||||||
$Service['PIDFile'] = '/var/run/mrefd.pid';
|
$Service['PIDFile'] = '/var/run/mrefd.pid';
|
||||||
$Service['XMLFile'] = '/var/log/mrefd.xml';
|
$Service['XMLFile'] = '/var/log/mrefd.xml';
|
||||||
|
|
||||||
|
/* Do we really want to keep this? Let's disable it for now.
|
||||||
$CallingHome['Active'] = false; // xlx phone home, true or false
|
$CallingHome['Active'] = false; // xlx phone home, true or false
|
||||||
$CallingHome['MyDashBoardURL'] = 'http://your_dashboard'; // dashboard url
|
$CallingHome['MyDashBoardURL'] = 'http://your_dashboard'; // dashboard url
|
||||||
$CallingHome['ServerURL'] = 'http://xlxapi.rlx.lu/api.php'; // database server, do not change !!!!
|
$CallingHome['ServerURL'] = 'http://xlxapi.rlx.lu/api.php'; // database server, do not change !!!!
|
||||||
|
@ -64,7 +67,7 @@ $CallingHome['Comment'] = "your_comment";
|
||||||
$CallingHome['HashFile'] = "/tmp/callinghome.php"; // Make sure the apache user has read and write permissions in this folder.
|
$CallingHome['HashFile'] = "/tmp/callinghome.php"; // Make sure the apache user has read and write permissions in this folder.
|
||||||
$CallingHome['OverrideIPAddress'] = ""; // Insert your IP address here. Leave blank for autodetection. No need to enter a fake address.
|
$CallingHome['OverrideIPAddress'] = ""; // Insert your IP address here. Leave blank for autodetection. No need to enter a fake address.
|
||||||
$CallingHome['InterlinkFile'] = "/usr/local/etc/mrefd.linklist"; // Path to interlink file
|
$CallingHome['InterlinkFile'] = "/usr/local/etc/mrefd.linklist"; // Path to interlink file
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
include an extra config file for people who dont like to mess with shipped config.inc.php
|
include an extra config file for people who dont like to mess with shipped config.inc.php
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
<table class="table table-striped table-hover">
|
<table class="table table-sm table-striped table-hover">
|
||||||
<tr class="table-center">
|
<tr class="table-center">
|
||||||
<th class="col-md-1">#</th>
|
<th>#</th>
|
||||||
<th class="col-md-1">Flag</th>
|
<th>Flag</th>
|
||||||
<th class="col-md-2">DV Station</th>
|
<th>DV Station</th>
|
||||||
<th class="col-md-1">Band</th>
|
<th>Band</th>
|
||||||
<th class="col-md-2">Last Heard</th>
|
<th>Last Heard</th>
|
||||||
<th class="col-md-2">Linked for</th>
|
<th>Linked for</th>
|
||||||
<th class="col-md-1">Protocol</th>
|
<th>Protocol</th>
|
||||||
<th class="col-md-1">Module</th><?php
|
<th>Module</th><?php
|
||||||
|
|
||||||
if ($PageOptions['RepeatersPage']['IPModus'] != 'HideIP') {
|
if ($PageOptions['RepeatersPage']['IPModus'] != 'HideIP') {
|
||||||
echo '
|
echo '
|
||||||
<th class="col-md-1">IP</th>';
|
<th>IP</th>';
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
@ -25,8 +25,8 @@ for ($i=0;$i<$Reflector->NodeCount();$i++) {
|
||||||
<td>'.($i+1).'</td>
|
<td>'.($i+1).'</td>
|
||||||
<td>';
|
<td>';
|
||||||
list ($Flag, $Name) = $Reflector->GetFlag($Reflector->Nodes[$i]->GetCallSign());
|
list ($Flag, $Name) = $Reflector->GetFlag($Reflector->Nodes[$i]->GetCallSign());
|
||||||
if (file_exists("./images/flags/".$Flag.".png")) {
|
if (file_exists("./images/flags/".$Flag.".svg")) {
|
||||||
echo '<a href="#" class="tip"><img src="./images/flags/'.$Flag.'.png" class="table-flag" alt="'.$Name.'"><span>'.$Name.'</span></a>';
|
echo '<a href="#" class="tip"><img src="./images/flags/'.$Flag.'.svg" class="table-flag" alt="'.$Name.'"><span>'.$Name.'</span></a>';
|
||||||
}
|
}
|
||||||
echo '</td>
|
echo '</td>
|
||||||
<td><a href="http://www.aprs.fi/'.$Reflector->Nodes[$i]->GetCallSign();
|
<td><a href="http://www.aprs.fi/'.$Reflector->Nodes[$i]->GetCallSign();
|
||||||
|
|
|
@ -47,162 +47,142 @@ if (isset($_GET['do'])) {
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="row">
|
<div class="col-md-9">
|
||||||
<div class="col-md-9">
|
<table class="table table-sm table-striped table-hover">
|
||||||
<table class="table table-striped table-hover">
|
<?php
|
||||||
<?php
|
if ($PageOptions['UserPage']['ShowFilter']) {
|
||||||
if ($PageOptions['UserPage']['ShowFilter']) {
|
echo '
|
||||||
echo '
|
<tr>
|
||||||
<tr>
|
<th colspan="8">
|
||||||
<th colspan="8">
|
<table width="100%" border="0">
|
||||||
<table width="100%" border="0">
|
<tr>
|
||||||
<tr>
|
<td align="left">
|
||||||
<td align="left">
|
<form name="frmFilterCallSign" method="post" action="./index.php">
|
||||||
<form name="frmFilterCallSign" method="post" action="./index.php">
|
<input type="hidden" name="do" value="SetFilter" />
|
||||||
<input type="hidden" name="do" value="SetFilter" />
|
<input type="text" class="FilterField" value="'.$_SESSION['FilterCallSign'].'" name="txtSetCallsignFilter" placeholder="Callsign" onfocus="SuspendPageRefresh();" onblur="setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');" />
|
||||||
<input type="text" class="FilterField" value="'.$_SESSION['FilterCallSign'].'" name="txtSetCallsignFilter" placeholder="Callsign" onfocus="SuspendPageRefresh();" onblur="setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');" />
|
<input type="submit" value="Apply" class="FilterSubmit" />
|
||||||
<input type="submit" value="Apply" class="FilterSubmit" />
|
</form>
|
||||||
</form>
|
</td>';
|
||||||
</td>';
|
if (($_SESSION['FilterModule'] != null) || ($_SESSION['FilterCallSign'] != null)) {
|
||||||
if (($_SESSION['FilterModule'] != null) || ($_SESSION['FilterCallSign'] != null)) {
|
echo '
|
||||||
echo '
|
<td><a href="./index.php?do=resetfilter" class="smalllink">Disable filters</a></td>';
|
||||||
<td><a href="./index.php?do=resetfilter" class="smalllink">Disable filters</a></td>';
|
}
|
||||||
}
|
echo '
|
||||||
echo '
|
<td align="right" style="padding-right:3px;">
|
||||||
<td align="right" style="padding-right:3px;">
|
<form name="frmFilterModule" method="post" action="./index.php">
|
||||||
<form name="frmFilterModule" method="post" action="./index.php">
|
<input type="hidden" name="do" value="SetFilter" />
|
||||||
<input type="hidden" name="do" value="SetFilter" />
|
<input type="text" class="FilterField" value="'.$_SESSION['FilterModule'].'" name="txtSetModuleFilter" placeholder="Module" onfocus="SuspendPageRefresh();" onblur="setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');" />
|
||||||
<input type="text" class="FilterField" value="'.$_SESSION['FilterModule'].'" name="txtSetModuleFilter" placeholder="Module" onfocus="SuspendPageRefresh();" onblur="setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');" />
|
<input type="submit" value="Apply" class="FilterSubmit" />
|
||||||
<input type="submit" value="Apply" class="FilterSubmit" />
|
</form>
|
||||||
</form>
|
</td>
|
||||||
</td>
|
</table>
|
||||||
</table>
|
</th>
|
||||||
</th>
|
</tr>';
|
||||||
</tr>';
|
}
|
||||||
}
|
?>
|
||||||
?>
|
|
||||||
<tr class="table-center">
|
<tr class="table-center">
|
||||||
<th class="col-md-1">#</th>
|
<th>#</th>
|
||||||
<th class="col-md-1">Flag</th>
|
<th>Flag</th>
|
||||||
<th class="col-md-2">Callsign</th>
|
<th>Callsign</th>
|
||||||
<th class="col-md-2">Suffix</th>
|
<th>Suffix</th>
|
||||||
<th class="col-md-1">DPRS</th>
|
<th>DPRS</th>
|
||||||
<th class="col-md-2">Via / Peer</th>
|
<th>Via / Peer</th>
|
||||||
<th class="col-md-2">Last heard</th>
|
<th>Last heard (UTC)</th>
|
||||||
<th class="col-md-1"><img src="./images/ear.png" alt="Listening on" /></th>
|
<th><img src="./images/ear.png" alt="Listening on" /></th>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
|
$Reflector->LoadFlags();
|
||||||
$Reflector->LoadFlags();
|
for ($i=0;$i<$Reflector->StationCount();$i++) {
|
||||||
for ($i=0;$i<$Reflector->StationCount();$i++) {
|
$ShowThisStation = true;
|
||||||
$ShowThisStation = true;
|
if ($PageOptions['UserPage']['ShowFilter']) {
|
||||||
if ($PageOptions['UserPage']['ShowFilter']) {
|
$CS = true;
|
||||||
$CS = true;
|
if ($_SESSION['FilterCallSign'] != null) {
|
||||||
if ($_SESSION['FilterCallSign'] != null) {
|
if (!fnmatch($_SESSION['FilterCallSign'], $Reflector->Stations[$i]->GetCallSign(), FNM_CASEFOLD)) {
|
||||||
if (!fnmatch($_SESSION['FilterCallSign'], $Reflector->Stations[$i]->GetCallSign(), FNM_CASEFOLD)) {
|
$CS = false;
|
||||||
$CS = false;
|
}
|
||||||
|
}
|
||||||
|
$MO = true;
|
||||||
|
if ($_SESSION['FilterModule'] != null) {
|
||||||
|
if (trim(strtolower($_SESSION['FilterModule'])) != strtolower($Reflector->Stations[$i]->GetModule())) {
|
||||||
|
$MO = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$ShowThisStation = ($CS && $MO);
|
||||||
|
}
|
||||||
|
if ($ShowThisStation) {
|
||||||
|
echo '
|
||||||
|
<tr class="table-center">
|
||||||
|
<td>';
|
||||||
|
if ($i == 0 && $Reflector->Stations[$i]->GetLastHeardTime() > (time() - 60)) {
|
||||||
|
echo '<img src="./images/tx.gif" style="margin-top:3px;" height="20"/>';
|
||||||
|
} else {
|
||||||
|
echo($i + 1);
|
||||||
|
}
|
||||||
|
echo '</td>
|
||||||
|
<td>';
|
||||||
|
list ($Flag, $Name) = $Reflector->GetFlag($Reflector->Stations[$i]->GetCallSign());
|
||||||
|
if (file_exists("./images/flags/" . $Flag . ".svg")) {
|
||||||
|
echo '<a href="#" class="tip"><img src="./images/flags/' . $Flag . '.svg" class="table-flag" alt="' . $Name . '"><span>' . $Name . '</span></a>';
|
||||||
|
}
|
||||||
|
echo '</td>
|
||||||
|
<td><a href="https://www.qrz.com/db/' . $Reflector->Stations[$i]->GetCallsignOnly() . '" class="pl" target="_blank">' . $Reflector->Stations[$i]->GetCallsignOnly() . '</a></td>
|
||||||
|
<td>' . $Reflector->Stations[$i]->GetSuffix() . '</td>
|
||||||
|
<td><a href="http://www.aprs.fi/' . $Reflector->Stations[$i]->GetCallsignOnly() . '" class="pl" target="_blank"><img src="./images/sat.png" alt=""></a></td>
|
||||||
|
<td>' . $Reflector->Stations[$i]->GetVia();
|
||||||
|
if ($Reflector->Stations[$i]->GetPeer() != $Reflector->GetReflectorName()) {
|
||||||
|
echo ' / ' . $Reflector->Stations[$i]->GetPeer();
|
||||||
|
}
|
||||||
|
echo '</td>
|
||||||
|
<td>' . @date("d.m.Y H:i", $Reflector->Stations[$i]->GetLastHeardTime()) . '</td>
|
||||||
|
<td>' . $Reflector->Stations[$i]->GetModule() . '</td>
|
||||||
|
</tr>';
|
||||||
|
}
|
||||||
|
if ($i == $PageOptions['LastHeardPage']['LimitTo']) {
|
||||||
|
$i = $Reflector->StationCount() + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
?>
|
||||||
$MO = true;
|
</table>
|
||||||
if ($_SESSION['FilterModule'] != null) {
|
</div>
|
||||||
if (trim(strtolower($_SESSION['FilterModule'])) != strtolower($Reflector->Stations[$i]->GetModule())) {
|
|
||||||
$MO = false;
|
<div class="col-md-3">
|
||||||
|
<?php echo '<a href="' . $PageOptions['Homepage'] . '"><img class="mx-auto d-none d-md-block" src="./images/' . $PageOptions['Logo'] . '" width="50%"></a>'; ?>
|
||||||
|
<!-- <a href="https://m17project.org"><img class="mx-auto d-none d-md-block" src="./images/m17_logo.svg" width="50%"></a> -->
|
||||||
|
<table class="table table-sm table-striped table-hover">
|
||||||
|
<?php
|
||||||
|
$Modules = $Reflector->GetModules();
|
||||||
|
sort($Modules, SORT_STRING);
|
||||||
|
echo '<tr>';
|
||||||
|
for ($i=0;$i<count($Modules);$i++) {
|
||||||
|
if (isset($PageOptions['ModuleNames'][$Modules[$i]])) {
|
||||||
|
echo '<th>'.$PageOptions['ModuleNames'][$Modules[$i]];
|
||||||
|
if (trim($PageOptions['ModuleNames'][$Modules[$i]]) != "") {
|
||||||
|
echo '<br />';
|
||||||
|
}
|
||||||
|
echo $Modules[$i].'</th>';
|
||||||
|
} else {
|
||||||
|
echo '
|
||||||
|
<th>'.$Modules[$i].'</th>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
echo '</tr><tr>';
|
||||||
|
$GlobalPositions = array();
|
||||||
$ShowThisStation = ($CS && $MO);
|
for ($i=0;$i<count($Modules);$i++) {
|
||||||
}
|
$Users = $Reflector->GetNodesInModulesByID($Modules[$i]);
|
||||||
|
echo '<td><table class="table table-hover">';
|
||||||
if ($ShowThisStation) {
|
$UserCheckedArray = array();
|
||||||
|
for ($j=0;$j<count($Users);$j++) {
|
||||||
echo '
|
$Displayname = $Reflector->GetCallsignAndSuffixByID($Users[$j]);
|
||||||
<tr class="table-center">
|
echo '
|
||||||
<td>';
|
<tr>
|
||||||
if ($i == 0 && $Reflector->Stations[$i]->GetLastHeardTime() > (time() - 60)) {
|
<td><a href="http://www.aprs.fi/'.$Displayname.'" class="pl" target="_blank">'.$Displayname.'</a> </td>
|
||||||
echo '<img src="./images/tx.gif" style="margin-top:3px;" height="20"/>';
|
</tr>';
|
||||||
} else {
|
$UserCheckedArray[] = $Users[$j];
|
||||||
echo($i + 1);
|
}
|
||||||
}
|
echo '</table></td>';
|
||||||
|
}
|
||||||
|
echo '</tr>';
|
||||||
echo '</td>
|
?>
|
||||||
<td>';
|
</table>
|
||||||
|
</div>
|
||||||
list ($Flag, $Name) = $Reflector->GetFlag($Reflector->Stations[$i]->GetCallSign());
|
|
||||||
if (file_exists("./images/flags/" . $Flag . ".svg")) {
|
|
||||||
echo '<a href="#" class="tip"><img src="./images/flags/' . $Flag . '.svg" class="table-flag" alt="' . $Name . '"><span>' . $Name . '</span></a>';
|
|
||||||
}
|
|
||||||
echo '</td>
|
|
||||||
<td><a href="https://www.qrz.com/db/' . $Reflector->Stations[$i]->GetCallsignOnly() . '" class="pl" target="_blank">' . $Reflector->Stations[$i]->GetCallsignOnly() . '</a></td>
|
|
||||||
<td>' . $Reflector->Stations[$i]->GetSuffix() . '</td>
|
|
||||||
<td><a href="http://www.aprs.fi/' . $Reflector->Stations[$i]->GetCallsignOnly() . '" class="pl" target="_blank"><img src="./images/sat.png" alt=""></a></td>
|
|
||||||
<td>' . $Reflector->Stations[$i]->GetVia();
|
|
||||||
if ($Reflector->Stations[$i]->GetPeer() != $Reflector->GetReflectorName()) {
|
|
||||||
echo ' / ' . $Reflector->Stations[$i]->GetPeer();
|
|
||||||
}
|
|
||||||
echo '</td>
|
|
||||||
<td>' . @date("d.m.Y H:i", $Reflector->Stations[$i]->GetLastHeardTime()) . '</td>
|
|
||||||
<td>' . $Reflector->Stations[$i]->GetModule() . '</td>
|
|
||||||
</tr>';
|
|
||||||
}
|
|
||||||
if ($i == $PageOptions['LastHeardPage']['LimitTo']) {
|
|
||||||
$i = $Reflector->StationCount() + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3">
|
|
||||||
<a href="https://m17project.org"><img class="hidden-xs hidden-sm" src="./images/m17_logo.svg" width="100%"></a>
|
|
||||||
<table class="table table-striped table-hover">
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$Modules = $Reflector->GetModules();
|
|
||||||
sort($Modules, SORT_STRING);
|
|
||||||
echo '<tr>';
|
|
||||||
for ($i=0;$i<count($Modules);$i++) {
|
|
||||||
|
|
||||||
if (isset($PageOptions['ModuleNames'][$Modules[$i]])) {
|
|
||||||
echo '<th>'.$PageOptions['ModuleNames'][$Modules[$i]];
|
|
||||||
if (trim($PageOptions['ModuleNames'][$Modules[$i]]) != "") {
|
|
||||||
echo '<br />';
|
|
||||||
}
|
|
||||||
echo $Modules[$i].'</th>';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
echo '
|
|
||||||
|
|
||||||
<th>'.$Modules[$i].'</th>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
echo '</tr><tr>';
|
|
||||||
|
|
||||||
$GlobalPositions = array();
|
|
||||||
|
|
||||||
for ($i=0;$i<count($Modules);$i++) {
|
|
||||||
|
|
||||||
$Users = $Reflector->GetNodesInModulesByID($Modules[$i]);
|
|
||||||
echo '<td><table class="table table-hover">';
|
|
||||||
|
|
||||||
$UserCheckedArray = array();
|
|
||||||
|
|
||||||
for ($j=0;$j<count($Users);$j++) {
|
|
||||||
$Displayname = $Reflector->GetCallsignAndSuffixByID($Users[$j]);
|
|
||||||
echo '
|
|
||||||
<tr>
|
|
||||||
<td><a href="http://www.aprs.fi/'.$Displayname.'" class="pl" target="_blank">'.$Displayname.'</a> </td>
|
|
||||||
</tr>';
|
|
||||||
$UserCheckedArray[] = $Users[$j];
|
|
||||||
}
|
|
||||||
echo '</table></td>';
|
|
||||||
}
|
|
||||||
|
|
||||||
echo '</tr>';
|
|
||||||
|
|
||||||
?>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
120
index.php
120
index.php
|
@ -6,6 +6,8 @@
|
||||||
* The dashboard is based of the Bootstrap dashboard template.
|
* The dashboard is based of the Bootstrap dashboard template.
|
||||||
*
|
*
|
||||||
* This code is further edited by KC1AWV for the M17 Reflector M17-M17
|
* This code is further edited by KC1AWV for the M17 Reflector M17-M17
|
||||||
|
*
|
||||||
|
* version 1.1.0 - Bootstrap 4.5
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (file_exists("./include/functions.php")) {
|
if (file_exists("./include/functions.php")) {
|
||||||
|
@ -96,11 +98,13 @@ if ($CallingHome['Active']) {
|
||||||
<!-- Bootstrap core CSS -->
|
<!-- Bootstrap core CSS -->
|
||||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug
|
||||||
<link href="css/ie10-viewport-bug-workaround.css" rel="stylesheet">
|
<link href="css/ie10-viewport-bug-workaround.css" rel="stylesheet">
|
||||||
|
-->
|
||||||
|
|
||||||
<!-- Custom styles for this template -->
|
<!-- Custom styles for this template -->
|
||||||
<link href="css/dashboard.css" rel="stylesheet">
|
<link href="css/dashboard.css" rel="stylesheet">
|
||||||
|
<link href="css/navbar-top-fixed.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
|
@ -147,82 +151,68 @@ if ($CallingHome['Active']) {
|
||||||
<?php if (file_exists("./tracking.php")) {
|
<?php if (file_exists("./tracking.php")) {
|
||||||
include_once("tracking.php");
|
include_once("tracking.php");
|
||||||
} ?>
|
} ?>
|
||||||
<nav class="navbar navbar-inverse navbar-fixed-top">
|
<nav class="navbar navbar-expand-lg navbar-dark fixed-top bg-dark">
|
||||||
<div class="container-fluid">
|
<a class="navbar-brand" href="#"><?php echo $Reflector->GetReflectorName(); ?> Reflector</a>
|
||||||
<div class="navbar-header">
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
|
<span class="navbar-toggler-icon"></span>
|
||||||
aria-expanded="false" aria-controls="navbar">
|
</button>
|
||||||
<span class="sr-only">Toggle navigation</span>
|
<div id="navbarCollapse" class="collapse navbar-collapse">
|
||||||
<span class="icon-bar"></span>
|
<ul class="navbar-nav mr-auto">
|
||||||
<span class="icon-bar"></span>
|
<li<?php echo (($_GET['show'] == "users") || ($_GET['show'] == "")) ? ' class="nav-item active"' : ''; ?>><a class="nav-link" href="./index.php">Last Heard</a></li>
|
||||||
<span class="icon-bar"></span>
|
<li<?php echo ($_GET['show'] == "repeaters") ? ' class="nav-item active"' : ''; ?>><a class="nav-link" href="./index.php?show=repeaters">Links (<?php echo $Reflector->NodeCount(); ?>)</a></li>
|
||||||
</button>
|
</ul>
|
||||||
<span class="navbar-brand"><?php echo $Reflector->GetReflectorName(); ?> Reflector | IPv4: <?php echo $PageOptions['IPV4']; ?> | IPv6: <?php echo $PageOptions['IPV6']; ?></span>
|
<span class="navbar-text px-2">mrefd v<?php echo $Reflector->GetVersion(); ?> - Dashboard v<?php echo $PageOptions['DashboardVersion']; ?></span>
|
||||||
</div>
|
<span class="navbar-text px-2">Service uptime: <?php echo FormatSeconds($Reflector->GetServiceUptime()); ?></span>
|
||||||
<div id="navbar" class="navbar-collapse collapse">
|
|
||||||
<ul class="nav navbar-nav navbar-right">
|
|
||||||
<li class="navbar-info">mrefd v<?php echo $Reflector->GetVersion(); ?> - Dashboard
|
|
||||||
v<?php echo $PageOptions['DashboardVersion']; ?></li>
|
|
||||||
<li class="navbar-info">Service
|
|
||||||
uptime: <?php echo FormatSeconds($Reflector->GetServiceUptime()); ?></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
<main role="main">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-3 col-md-2 sidebar">
|
<?php
|
||||||
<ul class="nav nav-sidebar">
|
/* Do we really want to keep calling home?
|
||||||
<li<?php echo (($_GET['show'] == "users") || ($_GET['show'] == "")) ? ' class="active"' : ''; ?>><a
|
if ($CallingHome['Active']) {
|
||||||
href="./index.php">Last Heard</a></li>
|
if (!is_readable($CallingHome['HashFile']) && (!is_writeable($CallingHome['HashFile']))) {
|
||||||
<li<?php echo ($_GET['show'] == "repeaters") ? ' class="active"' : ''; ?>><a
|
echo '
|
||||||
href="./index.php?show=repeaters">Links (<?php echo $Reflector->NodeCount(); ?>)</a></li>
|
<div class="error">
|
||||||
</ul>
|
your private hash in ' . $CallingHome['HashFile'] . ' could not be created, please check your config file and the permissions for the defined folder.
|
||||||
</div>
|
</div>';
|
||||||
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
|
}
|
||||||
|
}
|
||||||
<?php
|
*/
|
||||||
if ($CallingHome['Active']) {
|
switch ($_GET['show']) {
|
||||||
if (!is_readable($CallingHome['HashFile']) && (!is_writeable($CallingHome['HashFile']))) {
|
case 'users' :
|
||||||
echo '
|
require_once("./include/users.php");
|
||||||
<div class="error">
|
break;
|
||||||
your private hash in ' . $CallingHome['HashFile'] . ' could not be created, please check your config file and the permissions for the defined folder.
|
case 'repeaters' :
|
||||||
</div>';
|
require_once("./include/repeaters.php");
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
require_once("./include/users.php");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
switch ($_GET['show']) {
|
|
||||||
case 'users' :
|
|
||||||
require_once("./include/users.php");
|
|
||||||
break;
|
|
||||||
case 'repeaters' :
|
|
||||||
require_once("./include/repeaters.php");
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
require_once("./include/users.php");
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
|
|
||||||
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</main>
|
||||||
|
<footer class="container-fluid">
|
||||||
<footer class="footer">
|
<nav class="navbar navbar-expand-lg navbar-light fixed-bottom" style="background-color: #e3f2fd;">
|
||||||
<div class="container">
|
<div id="navbarCollapse" class="collapse navbar-collapse">
|
||||||
<p><a href="mailto:<?php echo $PageOptions['ContactEmail']; ?>"><?php echo $PageOptions['ContactEmail']; ?></a>
|
<span class="navbar-text px-2">IPv4: <?php echo $PageOptions['IPV4']; ?></span>
|
||||||
</p>
|
<span class="navbar-text px-2">IPv6: <?php echo $PageOptions['IPV6']; ?></span>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="navbar-text px-2"><a href="mailto:<?php echo $PageOptions['ContactEmail']; ?>">Sysop Email: <?php echo $PageOptions['ContactEmail']; ?></a></span>
|
||||||
|
</nav>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- Bootstrap core JavaScript
|
<!-- Bootstrap core JavaScript
|
||||||
================================================== -->
|
================================================== -->
|
||||||
<!-- Placed at the end of the document so the pages load faster -->
|
<!-- Placed at the end of the document so the pages load faster -->
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==" crossorigin="anonymous"></script>
|
||||||
|
<!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> -->
|
||||||
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
|
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
|
||||||
<script src="js/bootstrap.min.js"></script>
|
<script src="js/bootstrap.bundle.min.js"></script>
|
||||||
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug
|
||||||
<script src="js/ie10-viewport-bug-workaround.js"></script>
|
<script src="js/ie10-viewport-bug-workaround.js"></script>
|
||||||
|
-->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,23 +0,0 @@
|
||||||
/*!
|
|
||||||
* IE10 viewport hack for Surface/desktop Windows 8 bug
|
|
||||||
* Copyright 2014-2015 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
||||||
*/
|
|
||||||
|
|
||||||
// See the Getting Started docs for more information:
|
|
||||||
// http://getbootstrap.com/getting-started/#support-ie10-width
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
|
|
||||||
var msViewportStyle = document.createElement('style')
|
|
||||||
msViewportStyle.appendChild(
|
|
||||||
document.createTextNode(
|
|
||||||
'@-ms-viewport{width:auto!important}'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
document.querySelector('head').appendChild(msViewportStyle)
|
|
||||||
}
|
|
||||||
|
|
||||||
})();
|
|
Loading…
Reference in New Issue