Pi-hole web v5.18.4 (#2523)

This commit is contained in:
Adam Warner
2023-02-10 18:59:13 +00:00
committed by GitHub
9 changed files with 246 additions and 165 deletions
+11
View File
@@ -75,6 +75,17 @@ if (isset($_GET['enable']) && $auth) {
$data = array_merge($data, $current);
$data = array_merge($data, $latest);
$data = array_merge($data, $branches);
} elseif (isset($_GET['setTempUnit'])) {
$unit = strtolower($_GET['setTempUnit']);
if ($unit == 'c' || $unit == 'f' || $unit == 'k') {
pihole_execute('-a -'.$unit);
$result = 'success';
} else {
// invalid unit
$result = 'error';
}
$data = array_merge($data, array('result' => $result));
} elseif (isset($_GET['list'])) {
if (!$auth) {
exit('Not authorized!');
+15 -15
View File
@@ -83,6 +83,19 @@ require 'scripts/pi-hole/php/header_authenticated.php';
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-aqua no-user-select">
<div class="inner">
<h3 class="statistic" id="dns_queries">---</h3>
<p>Total Queries</p>
</div>
<div class="icon">
<i class="fas fa-globe-americas"></i>
</div>
</div>
</div>
<!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-red no-user-select">
<div class="inner">
<h3 class="statistic" id="queries_blocked_exact">---</h3>
<p>Queries Blocked</p>
@@ -95,7 +108,7 @@ require 'scripts/pi-hole/php/header_authenticated.php';
<!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-aqua no-user-select">
<div class="small-box bg-red no-user-select">
<div class="inner">
<h3 class="statistic" id="queries_wildcard_blocked">---</h3>
<p>Queries Blocked (Wildcards)</p>
@@ -106,25 +119,12 @@ require 'scripts/pi-hole/php/header_authenticated.php';
</div>
</div>
<!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-green no-user-select">
<div class="inner">
<h3 class="statistic" id="dns_queries">---</h3>
<p>Queries Total</p>
</div>
<div class="icon">
<i class="fas fa-globe-americas"></i>
</div>
</div>
</div>
<!-- ./col -->
<div class="col-lg-3 col-xs-12">
<!-- small box -->
<div class="small-box bg-yellow no-user-select">
<div class="inner">
<h3 class="statistic" id="queries_percentage_today">---</h3>
<p>Queries Blocked</p>
<p>Percentage Blocked</p>
</div>
<div class="icon">
<i class="fas fa-chart-pie"></i>
+27 -8
View File
@@ -160,10 +160,6 @@ function initCheckboxRadioStyle() {
function initCPUtemp() {
function setCPUtemp(unit) {
if (localStorage) {
localStorage.setItem("tempunit", tempunit);
}
var temperature = parseFloat($("#rawtemp").text());
var displaytemp = $("#tempdisplay");
if (!isNaN(temperature)) {
@@ -185,10 +181,30 @@ function initCPUtemp() {
}
}
// Read from local storage, initialize if needed
var tempunit = localStorage ? localStorage.getItem("tempunit") : null;
if (tempunit === null) {
tempunit = "C";
function setSetupvarsTempUnit(unit, showmsg = true) {
var token = encodeURIComponent($("#token").text());
$.getJSON("api.php?setTempUnit=" + unit + "&token=" + token, function (data) {
if (showmsg === true) {
if ("result" in data && data.result === "success") {
utils.showAlert("success", "", "Temperature unit set to " + unit, "");
} else {
utils.showAlert("error", "", "", "Temperature unit not set");
}
}
});
}
// Read the temperature unit from HTML code
var tempunit = $("#tempunit").text();
if (!tempunit) {
// if no value was set in setupVars.conf, tries to retrieve the old config from localstorage
tempunit = localStorage ? localStorage.getItem("tempunit") : null;
if (tempunit === null) {
tempunit = "C";
} else {
// if some value was found on localstorage, set the value in setupVars.conf
setSetupvarsTempUnit(tempunit, false);
}
}
setCPUtemp(tempunit);
@@ -200,6 +216,9 @@ function initCPUtemp() {
tempunitSelector.on("change", function () {
tempunit = $(this).val();
setCPUtemp(tempunit);
// store the selected value on setupVars.conf
setSetupvarsTempUnit(tempunit);
});
}
}
+6 -4
View File
@@ -220,7 +220,7 @@ function getCustomDNSEntries()
return $entries;
}
function addCustomDNSEntry($ip = '', $domain = '', $reload = '', $json = true)
function addCustomDNSEntry($ip = '', $domain = '', $reload = '', $json = true, $teleporter = false)
{
try {
if (isset($_REQUEST['ip'])) {
@@ -279,7 +279,8 @@ function addCustomDNSEntry($ip = '', $domain = '', $reload = '', $json = true)
foreach ($domains as $domain) {
pihole_execute('-a addcustomdns '.$ip.' '.$domain.' '.$reload);
}
if ($num > 0) {
// restart only if not called from teleporter.php as it handles restarts itself
if (($num > 0) && (!$teleporter)) {
pihole_execute('restartdns');
}
@@ -397,7 +398,7 @@ function getCustomCNAMEEntries()
return $entries;
}
function addCustomCNAMEEntry($domain = '', $target = '', $reload = '', $json = true)
function addCustomCNAMEEntry($domain = '', $target = '', $reload = '', $json = true, $teleporter = false)
{
try {
if (isset($_REQUEST['domain'])) {
@@ -460,7 +461,8 @@ function addCustomCNAMEEntry($domain = '', $target = '', $reload = '', $json = t
pihole_execute('-a addcustomcname '.$d.' '.$target.' '.$reload);
}
if ($num > 0) {
// restart only if not called from teleporter.php as it handles restarts itself
if (($num > 0) && (!$teleporter)) {
pihole_execute('restartdns');
}
+18 -2
View File
@@ -98,7 +98,23 @@ function getTemperature()
$limit = null;
}
return array($celsius, $limit);
// Get user-defined temperature limit if set
if (isset($setupVars['TEMPERATUREUNIT'])) {
switch (strtoupper($setupVars['TEMPERATUREUNIT'])) {
case 'F':
case 'K':
$unit = strtoupper($setupVars['TEMPERATUREUNIT']);
break;
default:
$unit = 'C';
}
} else {
// no value is set in setupVars.conf
$unit = '';
}
return array($celsius, $limit, $unit);
}
check_cors();
@@ -113,7 +129,7 @@ $token = $_SESSION['token'];
$maxlifetime = ini_get('session.gc_maxlifetime');
// Get temperature
list($celsius, $temperaturelimit) = getTemperature();
list($celsius, $temperaturelimit, $temperatureunit) = getTemperature();
// Get CPU load
$loaddata = sys_getloadavg();
+1
View File
@@ -57,6 +57,7 @@
}
echo '<span id="temperature"><i class="fa fa-w fa-fire '.$tempcolor.'" style="width: 1em !important"></i> ';
echo 'Temp:&nbsp;<span id="rawtemp" hidden>'.$celsius.'</span>';
echo '<span id="tempunit" hidden>'.$temperatureunit.'</span>';
echo '<span id="tempdisplay"></span></span>';
}
?>
+4 -2
View File
@@ -493,6 +493,7 @@ if (isset($_POST['action'])) {
if (isset($_POST['localdnsrecords']) && $file->getFilename() === 'custom.list') {
ob_start();
$reload = 'false';
$teleporter = true;
if ($flushtables) {
// Defined in func.php included via auth.php
// passing reload="false" will not restart Pi-hole
@@ -502,7 +503,7 @@ if (isset($_POST['action'])) {
$localdnsrecords = process_file(file_get_contents($file));
foreach ($localdnsrecords as $record) {
list($ip, $domain) = explode(' ', $record);
if (addCustomDNSEntry($ip, $domain, $reload, false)) {
if (addCustomDNSEntry($ip, $domain, $reload, false, $teleporter)) {
++$num;
}
}
@@ -517,6 +518,7 @@ if (isset($_POST['action'])) {
if (isset($_POST['localcnamerecords']) && $file->getFilename() === '05-pihole-custom-cname.conf') {
ob_start();
$reload = 'false';
$teleporter = true;
if ($flushtables) {
// Defined in func.php included via auth.php
// passing reload="false" will not restart Pi-hole
@@ -534,7 +536,7 @@ if (isset($_POST['action'])) {
$domain = implode(',', array_slice($explodedLine, 0, -1));
$target = $explodedLine[count($explodedLine) - 1];
if (addCustomCNAMEEntry($domain, $target, $reload, false)) {
if (addCustomCNAMEEntry($domain, $target, $reload, false, $teleporter)) {
++$num;
}
}
+160 -134
View File
@@ -196,7 +196,7 @@ if (isset($setupVars['API_QUERY_LOG_SHOW'])) {
?>
<?php
if (isset($_GET['tab']) && in_array($_GET['tab'], array('sysadmin', 'dns', 'piholedhcp', 'api', 'privacy', 'teleporter'))) {
if (isset($_GET['tab']) && in_array($_GET['tab'], array('sysadmin', 'dns', 'piholedhcp', 'web', 'api', 'privacy', 'teleporter'))) {
$tab = $_GET['tab'];
} else {
$tab = 'sysadmin';
@@ -215,8 +215,11 @@ if (isset($_GET['tab']) && in_array($_GET['tab'], array('sysadmin', 'dns', 'piho
<li role="presentation"<?php if ($tab === 'piholedhcp') { ?> class="active"<?php } ?>>
<a href="#piholedhcp" aria-controls="piholedhcp" aria-expanded="<?php echo $tab === 'piholedhcp' ? 'true' : 'false'; ?>" role="tab" data-toggle="tab">DHCP</a>
</li>
<li role="presentation"<?php if ($tab === 'web') { ?> class="active"<?php } ?>>
<a href="#web" aria-controls="web" aria-expanded="<?php echo $tab === 'web' ? 'true' : 'false'; ?>" role="tab" data-toggle="tab">Web interface</a>
</li>
<li role="presentation"<?php if ($tab === 'api') { ?> class="active"<?php } ?>>
<a href="#api" aria-controls="api" aria-expanded="<?php echo $tab === 'api' ? 'true' : 'false'; ?>" role="tab" data-toggle="tab">API / Web interface</a>
<a href="#api" aria-controls="api" aria-expanded="<?php echo $tab === 'api' ? 'true' : 'false'; ?>" role="tab" data-toggle="tab">API</a>
</li>
<li role="presentation"<?php if ($tab === 'privacy') { ?> class="active"<?php } ?>>
<a href="#privacy" aria-controls="privacy" aria-expanded="<?php echo $tab === 'privacy' ? 'true' : 'false'; ?>" role="tab" data-toggle="tab">Privacy</a>
@@ -1026,10 +1029,162 @@ if (isset($piholeFTLConf['RATE_LIMIT'])) {
</div>
</form>
</div>
<!-- ######################################################### API and Web ######################################################### -->
<div id="api" class="tab-pane fade<?php if ($tab === 'api') { ?> in active<?php } ?>">
<!-- ######################################################## Web Interface ######################################################## -->
<div id="web" class="tab-pane fade<?php if ($tab === 'web') { ?> in active<?php } ?>">
<div class="row">
<div class="col-md-6">
<form role="form" method="post">
<div class="box box-warning">
<div class="box-header with-border">
<h3 class="box-title">Theme and Layout</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-md-12">
<?php theme_selection(); ?>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<input type="checkbox" name="boxedlayout" id="boxedlayout" value="yes" <?php if ($boxedlayout) { ?>checked<?php } ?>>
<label for="boxedlayout"><strong>Use boxed layout (for large screens)</strong></label>
</div>
</div>
</div>
<input type="hidden" name="field" value="webUI">
<input type="hidden" name="token" value="<?php echo $token; ?>">
</div>
<div class="box-footer clearfix">
<button type="submit" class="btn btn-primary pull-right">Save</button>
</div>
</div>
</form>
</div>
<div class="col-md-6">
<div class="box box-warning">
<div class="box-header with-border">
<h3 class="box-title">Interface settings (auto saved)</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-md-12">
<h4>Global Settings</h4>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="icheck-default">
<label for="tempunit-selector"><strong>CPU Temperature Unit:</strong> </label>
<select id="tempunit-selector">
<option value="C">Celsius</option>
<option value="K">Kelvin</option>
<option value="F">Fahrenheit</option>
</select>
</div>
</div>
</div>
<hr class="faint-border">
<div class="row">
<div class="col-md-12">
<h4>Per Browser Settings</h4>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="icheck-default">
<label for="iCheckStyle"><strong>Checkbox and radio buttons: </strong> </label>
<select id="iCheckStyle">
<option>default</option>
<option>primary</option>
<option>success</option>
<option>info</option>
<option>warning</option>
<option>danger</option>
<option>turquoise</option>
<option>emerland</option>
<option>peterriver</option>
<option>amethyst</option>
<option>wetasphalt</option>
<option>greensea</option>
<option>nephritis</option>
<option>belizehole</option>
<option>wisteria</option>
<option>midnightblue</option>
<option>sunflower</option>
<option>carrot</option>
<option>alizarin</option>
<option>clouds</option>
<option>concrete</option>
<option>orange</option>
<option>pumpkin</option>
<option>pomegranate</option>
<option>silver</option>
<option>asbestos</option>
<option>material-red</option>
<option>material-pink</option>
<option>material-purple</option>
<option>material-deeppurple</option>
<option>material-indigo</option>
<option>material-blue</option>
<option>material-lightblue</option>
<option>material-cyan</option>
<option>material-teal</option>
<option>material-green</option>
<option>material-lightgreen</option>
<option>material-lime</option>
<option>material-yellow</option>
<option>material-amber</option>
<option>material-orange</option>
<option>material-deeporange</option>
<option>material-brown</option>
<option>material-grey</option>
<option>material-bluegrey</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<input type="checkbox" name="bargraphs" id="bargraphs" value="yes">
<label for="bargraphs"><strong>Use new Bar charts on dashboard</strong></label>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<input type="checkbox" name="colorfulQueryLog" id="colorfulQueryLog" value="no">
<label for="colorfulQueryLog"><strong>Colorful Query Log</strong></label>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<input type="checkbox" name="hideNonfatalDnsmasqWarnings" id="hideNonfatalDnsmasqWarnings" value="no">
<label for="hideNonfatalDnsmasqWarnings"><strong>Hide non-fatal <code>dnsmasq</code> warnings (warnings listed <a target="_blank" href="https://docs.pi-hole.net/ftldns/dnsmasq_warn">here</a>)</strong></label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- ############################################################# API ############################################################# -->
<div id="api" class="tab-pane fade<?php if ($tab === 'api') { ?> in active<?php } ?>">
<div class="row">
<div class="col-md-12">
<form role="form" method="post">
<div class="box box-warning">
<div class="box-header with-border">
@@ -1109,138 +1264,9 @@ if (isset($piholeFTLConf['RATE_LIMIT'])) {
</div>
</div>
</div>
<div class="col-md-6">
<form role="form" method="post">
<div class="box box-warning">
<div class="box-header with-border">
<h3 class="box-title">Web interface settings</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-md-12">
<h4>Interface appearance</h4>
<?php theme_selection(); ?>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<input type="checkbox" name="boxedlayout" id="boxedlayout" value="yes" <?php if ($boxedlayout) { ?>checked<?php } ?>>
<label for="boxedlayout"><strong>Use boxed layout (for large screens)</strong></label>
</div>
</div>
</div>
<input type="hidden" name="field" value="webUI">
<input type="hidden" name="token" value="<?php echo $token; ?>">
</div>
<div class="box-footer clearfix">
<button type="submit" class="btn btn-primary pull-right">Save</button>
</div>
</div>
</form>
</div>
<div class="col-md-6">
<div class="box box-warning">
<div class="box-header with-border">
<h3 class="box-title">Per-browser settings (auto saved)</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-md-6">
<p>Checkbox and radio buttons</p>
</div>
<div class="col-md-6">
<select id="iCheckStyle">
<option>default</option>
<option>primary</option>
<option>success</option>
<option>info</option>
<option>warning</option>
<option>danger</option>
<option>turquoise</option>
<option>emerland</option>
<option>peterriver</option>
<option>amethyst</option>
<option>wetasphalt</option>
<option>greensea</option>
<option>nephritis</option>
<option>belizehole</option>
<option>wisteria</option>
<option>midnightblue</option>
<option>sunflower</option>
<option>carrot</option>
<option>alizarin</option>
<option>clouds</option>
<option>concrete</option>
<option>orange</option>
<option>pumpkin</option>
<option>pomegranate</option>
<option>silver</option>
<option>asbestos</option>
<option>material-red</option>
<option>material-pink</option>
<option>material-purple</option>
<option>material-deeppurple</option>
<option>material-indigo</option>
<option>material-blue</option>
<option>material-lightblue</option>
<option>material-cyan</option>
<option>material-teal</option>
<option>material-green</option>
<option>material-lightgreen</option>
<option>material-lime</option>
<option>material-yellow</option>
<option>material-amber</option>
<option>material-orange</option>
<option>material-deeporange</option>
<option>material-brown</option>
<option>material-grey</option>
<option>material-bluegrey</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-6">
<p>CPU Temperature Unit</p>
</div>
<div class="col-md-6">
<select id="tempunit-selector">
<option value="C">Celsius</option>
<option value="K">Kelvin</option>
<option value="F">Fahrenheit</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<input type="checkbox" name="bargraphs" id="bargraphs" value="yes">
<label for="bargraphs"><strong>Use new Bar charts on dashboard</strong></label>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<input type="checkbox" name="colorfulQueryLog" id="colorfulQueryLog" value="no">
<label for="colorfulQueryLog"><strong>Colorful Query Log</strong></label>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<input type="checkbox" name="hideNonfatalDnsmasqWarnings" id="hideNonfatalDnsmasqWarnings" value="no">
<label for="hideNonfatalDnsmasqWarnings"><strong>Hide non-fatal <code>dnsmasq</code> warnings (warnings listed <a target="_blank" href="https://docs.pi-hole.net/ftldns/dnsmasq_warn">here</a>)</strong></label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- ######################################################### Privacy (may be expanded further later on) ######################################################### -->
<?php
// Get privacy level from piholeFTL config array
+4
View File
@@ -1042,3 +1042,7 @@ table.dataTable tbody > tr > .selected {
left: 50%;
translate: -50% -50%;
}
.faint-border {
border-color: rgba(127, 127, 127, 0.1);
}