Merge pull request #1212 from bergware/master

PHP 8.1 support (round 1)
This commit is contained in:
tom mortensen
2022-12-04 06:02:14 -08:00
committed by GitHub
25 changed files with 239 additions and 235 deletions
@@ -41,7 +41,7 @@ $runtime = $_POST['runtime'] ?: 5;
if (file_exists("/var/run/apcupsd.pid")) {
exec("/sbin/apcaccess 2>/dev/null", $rows);
for ($i=0; $i<count($rows); $i++) {
[$key,$val] = array_map('trim', explode(':', $rows[$i], 2));
[$key,$val] = array_map('trim',array_pad(explode(':',$rows[$i],2),2,''));
switch ($key) {
case 'MODEL':
$status[0] = "<td $green>$val</td>";
@@ -151,7 +151,7 @@ _(Enable Docker)_:
:docker_enable_help:
_(Docker Stop Timeout)_:
: <input class='narrow' id="DOCKER_TIMEOUT" type="number" name="DOCKER_TIMEOUT" min='1' value="<?=$dockercfg['DOCKER_TIMEOUT']?>">_(seconds)_
: <input class='narrow' id="DOCKER_TIMEOUT" type="number" name="DOCKER_TIMEOUT" min='1' value="<?=$dockercfg['DOCKER_TIMEOUT']??''?>">_(seconds)_
:docker_timeout_help:
@@ -168,15 +168,15 @@ _(Docker data-root)_:
<div markdown="1" id="vdisk_file" style="display:none">
_(Docker vDisk size)_:
: <input id="DOCKER_IMAGE_SIZE" type="number" name="DOCKER_IMAGE_SIZE" value="<?=$dockercfg['DOCKER_IMAGE_SIZE']?>" class="narrow" required>GB<span id="SIZE_ERROR" class="errortext"></span>
: <input id="DOCKER_IMAGE_SIZE" type="number" name="DOCKER_IMAGE_SIZE" value="<?=$dockercfg['DOCKER_IMAGE_SIZE']??''?>" class="narrow" required>GB<span id="SIZE_ERROR" class="errortext"></span>
:docker_vdisk_size_help:
_(Docker vDisk location)_:
: <input type="text" id="DOCKER_IMAGE_FILE1" name="DOCKER_IMAGE_FILE1" autocomplete="off" spellcheck="false" value="<?=$dockercfg['DOCKER_IMAGE_FILE']?>" placeholder="_(e.g.)_ /mnt/user/system/docker.img" data-pickcloseonfile="true" data-pickfilter="img" data-pickroot="/mnt" data-pickfolders="true" disabled required pattern="^[^\\]*(docker-xfs\.img|docker\.img)$">
: <input type="text" id="DOCKER_IMAGE_FILE1" name="DOCKER_IMAGE_FILE1" autocomplete="off" spellcheck="false" value="<?=$dockercfg['DOCKER_IMAGE_FILE']??''?>" placeholder="_(e.g.)_ /mnt/user/system/docker.img" data-pickcloseonfile="true" data-pickfilter="img" data-pickroot="/mnt" data-pickfolders="true" disabled required pattern="^[^\\]*(docker-xfs\.img|docker\.img)$">
<span class="deleteLabel"><label><input type="checkbox" class="deleteCheckbox"> _(Delete vDisk file)_</label></span>
<?if ($var['fsState'] != "Started"):?><span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span>
<?elseif (!is_dir(dirname($dockercfg['DOCKER_IMAGE_FILE']))):?><span class="nonexist"><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span>
<?elseif (!is_dir(dirname($dockercfg['DOCKER_IMAGE_FILE']??''))):?><span class="nonexist"><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span>
<?endif;?><span id="IMAGE_ERROR1" class="errortext"></span>
:docker_vdisk_location_help:
@@ -184,20 +184,20 @@ _(Docker vDisk location)_:
</div>
<div markdown="1" id="vdisk_dir" style="display:none">
_(Docker directory)_:
: <input type="text" id="DOCKER_IMAGE_FILE2" name="DOCKER_IMAGE_FILE2" autocomplete="off" spellcheck="false" value="<?=$dockercfg['DOCKER_IMAGE_FILE']?>" placeholder="_(e.g.)_ /mnt/user/system/docker" data-pickcloseonfile="true" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="/mnt" data-pickfolders="true" disabled required pattern="^[^\\]*/$">
: <input type="text" id="DOCKER_IMAGE_FILE2" name="DOCKER_IMAGE_FILE2" autocomplete="off" spellcheck="false" value="<?=$dockercfg['DOCKER_IMAGE_FILE']??''?>" placeholder="_(e.g.)_ /mnt/user/system/docker" data-pickcloseonfile="true" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="/mnt" data-pickfolders="true" disabled required pattern="^[^\\]*/$">
<span class="deleteLabel"><label><input type="checkbox" class="deleteCheckbox"> _(Delete directory)_</label></span>
<?if ($var['fsState'] != "Started"):?><span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span>
<?elseif (!is_dir(dirname($dockercfg['DOCKER_IMAGE_FILE']))):?><span class="nonexist"><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span>
<?elseif (!is_dir(dirname($dockercfg['DOCKER_IMAGE_FILE']??''))):?><span class="nonexist"><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span>
<?endif;?><span id="IMAGE_ERROR2" class="errortext"></span>
:docker_vdisk_directory_help:
</div>
_(Default appdata storage location)_:
: <input type="text" id="DOCKER_APP_CONFIG_PATH" name="DOCKER_APP_CONFIG_PATH" autocomplete="off" spellcheck="false" value="<?=$dockercfg['DOCKER_APP_CONFIG_PATH']?>" placeholder="_(e.g.)_ /mnt/user/appdata/" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="<?=is_dir('/mnt/user')?'/mnt/user':'/mnt'?>" data-pickfolders="true" pattern="^[^\\]*/$">
: <input type="text" id="DOCKER_APP_CONFIG_PATH" name="DOCKER_APP_CONFIG_PATH" autocomplete="off" spellcheck="false" value="<?=$dockercfg['DOCKER_APP_CONFIG_PATH']??''?>" placeholder="_(e.g.)_ /mnt/user/appdata/" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="<?=is_dir('/mnt/user')?'/mnt/user':'/mnt'?>" data-pickfolders="true" pattern="^[^\\]*/$">
<?if ($var['fsState'] != "Started"):?>
<span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span>
<?elseif (!is_dir($dockercfg['DOCKER_APP_CONFIG_PATH'])):?>
<?elseif (!is_dir($dockercfg['DOCKER_APP_CONFIG_PATH']??'')):?>
<span class="nonexist"><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span>
<?endif;?>
@@ -274,11 +274,11 @@ $docker_auto = "DOCKER_AUTO_$net";
$docker_dhcp = "DOCKER_DHCP_$net";
?>
<input type="hidden" name="<?=$docker_auto?>" value="<?=$dockercfg[$docker_auto]?>">
<input type="hidden" name="<?=$docker_auto?>" value="<?=$dockercfg[$docker_auto]??''?>">
_(IPv4 custom network on interface)_ <?=$network?> (_(optional)_):
<?
$auto = $dockercfg[$docker_auto]!='no';
$auto = $dockercfg[$docker_auto]??''!='no';
$autoDisabled = $auto ? '':'disabled';
$dhcp = $dockercfg[$docker_dhcp] ?? false;
$dhcpDisabled = ($auto && $dhcp) ? '':'disabled';
@@ -328,8 +328,8 @@ _(IPv4 custom network on interface)_ <?=$network?> (_(optional)_):
<?foreach ($unset as $network):?>
<?
$port = normalize($network);
[$subnet,$mask] = my_explode('/',$dockercfg["DOCKER_SUBNET_$port"] ?? '');
[$range,$size] = my_explode('/',$dockercfg["DOCKER_RANGE_$port"] ?? '');
[$subnet,$mask] = my_explode('/',$dockercfg["DOCKER_SUBNET_$port"]??'');
[$range,$size] = my_explode('/',$dockercfg["DOCKER_RANGE_$port"]??'');
$disabled = $subnet ? '':'disabled';
$dhcpDisabled = $range ? '':'disabled';
?>
@@ -341,7 +341,7 @@ _(IPv4 custom network on interface)_ <?=$network?> (_(optional)_):
<select id="DOCKER_CUSTOM_<?=$port?>_mask" name="DOCKER_MASK_<?=$port?>" class="mask"<?=$disabled?>>
<?for ($m=16; $m<=30; $m++) echo mk_option($mask?:24,$m,$m)?></select>
</span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <input type="text" id="DOCKER_CUSTOM_<?=$port?>_gw" name="DOCKER_GATEWAY_<?=$port?>" class="ip4" value="<?=$dockercfg["DOCKER_GATEWAY_$port"]?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>></span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <input type="text" id="DOCKER_CUSTOM_<?=$port?>_gw" name="DOCKER_GATEWAY_<?=$port?>" class="ip4" value="<?=$dockercfg["DOCKER_GATEWAY_$port"]??''?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>></span>
<input type="checkbox" id="DOCKER_CUSTOM_<?=$port?>_dhcp" onchange="customDHCP(this.id,4)"<?=$subnet?'checked':''?><?=$dhcpDisabled?>>
**_(DHCP pool)_:** <input type="text" id="DOCKER_CUSTOM_<?=$port?>_pool" name="DOCKER_RANGE_<?=$port?>" class="ip4" value="<?=$range?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>>/
<select id="DOCKER_CUSTOM_<?=$port?>_size" name="DOCKER_SIZE_<?=$port?>" class="mask" onchange="changeHosts(this.id,this.value)"<?=$disabled?>>
@@ -366,7 +366,7 @@ $docker_dhcp6 = "DOCKER_DHCP6_$net";
_(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
<?
$auto6 = $dockercfg[$docker_auto]!='no';
$auto6 = $dockercfg[$docker_auto]??''!='no';
$auto6Disabled = $auto6 ? '':'disabled';
$dhcp6 = $dockercfg[$docker_dhcp6] ?? false;
$dhcp6Disabled = ($auto6 && $dhcp6) ? '':'disabled';
@@ -396,8 +396,8 @@ _(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
<?foreach ($unset as $network):?>
<?
$port = normalize($network);
[$subnet6,$mask6] = my_explode('/',$dockercfg["DOCKER_SUBNET6_$port"] ?? '');
[$range6,$size6] = my_explode('/',$dockercfg["DOCKER_RANGE6_$port"] ?? '');
[$subnet6,$mask6] = my_explode('/',$dockercfg["DOCKER_SUBNET6_$port"]??'');
[$range6,$size6] = my_explode('/',$dockercfg["DOCKER_RANGE6_$port"]??'');
$disabled = $subnet6 ? '':'disabled';
$dhcpDisabled = $range6 ? '':'disabled';
?>
@@ -408,7 +408,7 @@ _(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
<span class="ip6">**_(Subnet)_:**<input type="text" id="DOCKER_CUSTOM6_<?=$port?>_net" name="DOCKER_SUBNET6_<?=$port?>" class="ip6" value="<?=$subnet6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_"<?=$disabled?>>/
<select id="DOCKER_CUSTOM6_<?=$port?>_mask" name="DOCKER_MASK6_<?=$port?>" class="mask"<?=$disabled?>>
<?for ($m=64; $m<=120; $m+=8) echo mk_option($mask6?:64,$m,$m)?></select></span>
<span class="gw6">**_(Gateway)_:**<input type="text" id="DOCKER_CUSTOM6_<?=$port?>_gw" name="DOCKER_GATEWAY6_<?=$port?>" class="gw6" value="<?=$dockercfg["DOCKER_GATEWAY6_$port"]?>" title="_(IPv6 address nnnn:xxxx::yyyy)_"<?=$disabled?>></span>
<span class="gw6">**_(Gateway)_:**<input type="text" id="DOCKER_CUSTOM6_<?=$port?>_gw" name="DOCKER_GATEWAY6_<?=$port?>" class="gw6" value="<?=$dockercfg["DOCKER_GATEWAY6_$port"]??''?>" title="_(IPv6 address nnnn:xxxx::yyyy)_"<?=$disabled?>></span>
<input type="checkbox" id="DOCKER_CUSTOM6_<?=$port?>_dhcp" onchange="customDHCP(this.id,6)"<?=$subnet6?'checked':''?><?=$dhcpDisabled?>>
**_(DHCP pool)_:**<input type="text" id="DOCKER_CUSTOM6_<?=$port?>_pool" name="DOCKER_RANGE6_<?=$port?>" class="ip6" value="<?=$range6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_"<?=$disabled?>>/
<select id="DOCKER_CUSTOM6_<?=$port?>_size" name="DOCKER_SIZE6_<?=$port?>" class="mask"<?=$disabled?>>
@@ -428,39 +428,39 @@ _(Docker version)_:
:docker_version_help:
<?if (($dockercfg['DOCKER_IMAGE_TYPE'] ?? '')!='folder'):?>
<?if ($dockercfg['DOCKER_IMAGE_TYPE']??''!='folder'):?>
_(Docker vDisk location)_:
: <?=$dockercfg['DOCKER_IMAGE_FILE']?>
: <?=$dockercfg['DOCKER_IMAGE_FILE']??''?>
<?else:?>
_(Docker directory)_:
: <?=$dockercfg['DOCKER_IMAGE_FILE']?>
: <?=$dockercfg['DOCKER_IMAGE_FILE']??''?>
<?endif;?>
:docker_vdisk_location_active_help:
_(Default appdata storage location)_:
: <?=$dockercfg['DOCKER_APP_CONFIG_PATH']?>
: <?=$dockercfg['DOCKER_APP_CONFIG_PATH']??''?>
:docker_appdata_location_active_help:
<div markdown="1" class="advanced">
_(Docker LOG rotation)_:
: <?=$dockercfg['DOCKER_LOG_ROTATION']=='yes' ? _('Enabled') : _('Disabled')?>
: <?=$dockercfg['DOCKER_LOG_ROTATION']??''=='yes' ? _('Enabled') : _('Disabled')?>
:docker_log_rotation_active_help:
_(Docker custom network type)_:
: <?=$dockercfg['DOCKER_NETWORK_TYPE']=='' ? _('macvlan') : _('ipvlan')?>
: <?=$dockercfg['DOCKER_NETWORK_TYPE']??''=='' ? _('macvlan') : _('ipvlan')?>
:docker_custom_network_type_help:
_(Host access to custom networks)_:
: <?=$dockercfg['DOCKER_ALLOW_ACCESS']=='yes' ? _('Enabled') : _('Disabled')?>
: <?=$dockercfg['DOCKER_ALLOW_ACCESS']??''=='yes' ? _('Enabled') : _('Disabled')?>
:docker_custom_network_access_help:
_(Preserve user defined networks)_:
: <?=$dockercfg['DOCKER_USER_NETWORKS']=='preserve' ? _('Yes') : _('No')?>
: <?=$dockercfg['DOCKER_USER_NETWORKS']??''=='preserve' ? _('Yes') : _('No')?>
:docker_user_defined_network_help:
@@ -489,13 +489,13 @@ if (!$vlan) {
if (strpos($key,'VLANID')!==false && $value==$vlan) {$protocol = $$eth[str_replace('VLANID','PROTOCOL',$key)] ?? 'ipv4'; break;}
}
}
[$subnet,$mask] = my_explode('/',$dockercfg["DOCKER_SUBNET_$port"] ?? '');
[$range,$size] = my_explode('/',$dockercfg["DOCKER_RANGE_$port"] ?? '');
[$subnet,$mask] = my_explode('/',$dockercfg["DOCKER_SUBNET_$port"]??'');
[$range,$size] = my_explode('/',$dockercfg["DOCKER_RANGE_$port"]??'');
?>
<?if ($protocol != 'ipv6' && $subnet):?>
_(IPv4 custom network on interface)_ <?=$network?>:
: <span class="<?=$gw4class?>">**_(Subnet)_:** <?=$subnet?>/<?=$mask?></span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <?=$dockercfg["DOCKER_GATEWAY_$port"]?></span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <?=$dockercfg["DOCKER_GATEWAY_$port"]??''?></span>
**_(DHCP pool)_:** <?=$range ? "$range/$size" : "_(not set)_"?><?if ($range):?>&nbsp;&nbsp;(<?=pow(2,32-($size?:25))?> _(hosts)_)<?endif;?>
<?endif;?>
@@ -525,13 +525,13 @@ if (!$vlan) {
if (strpos($key,'VLANID')!==false && $value==$vlan) {$protocol = $$eth[str_replace('VLANID','PROTOCOL',$key)] ?? 'ipv4'; break;}
}
}
[$subnet6,$mask6] = my_explode('/',$dockercfg["DOCKER_SUBNET6_$port"] ?? '');
[$range6,$size6] = my_explode('/',$dockercfg["DOCKER_RANGE6_$port"] ?? '');
[$subnet6,$mask6] = my_explode('/',$dockercfg["DOCKER_SUBNET6_$port"]??'');
[$range6,$size6] = my_explode('/',$dockercfg["DOCKER_RANGE6_$port"]??'');
?>
<?if ($protocol != 'ipv4' && $subnet6):?>
_(IPv6 custom network on interface)_ <?=$network?>:
: <span class="gw6">**_(Subnet)_:** <?=$subnet6?>/<?=$mask6?></span>
<span class="gw6">**_(Gateway)_:** <?=$dockercfg["DOCKER_GATEWAY6_$port"]?></span>
<span class="gw6">**_(Gateway)_:** <?=$dockercfg["DOCKER_GATEWAY6_$port"]??''?></span>
**_(DHCP pool)_:** <?=$range6 ? "$range6/$size6" : "_(not set)_"?>
<?endif;?>
<?endforeach;?>
@@ -561,10 +561,10 @@
],
"deviceCount" => $var['deviceCount'],
"email" => $remote['email'] ?? '',
"extraOrigins" => $api['extraOrigins'] ? explode(',', $api['extraOrigins']) : [],
"extraOrigins" => explode(',', $api['extraOrigins']??''),
"flashproduct" => $var['flashProduct'],
"flashvendor" => $var['flashVendor'],
"flashBackupActivated" => $flashBackup['activated'] ? 'true' : '',
"flashBackupActivated" => isset($flashBackup['activated']) ? 'true' : '',
"guid" => $var['flashGUID'],
"hasRemoteApikey" => !empty($remote['apikey']),
"internalip" => ipaddr(),
+3 -3
View File
@@ -4,8 +4,8 @@ Tag="address-card-o"
Cond="strpos($disks[$name]['status'],'_NP')===false"
---
<?PHP
/* Copyright 2005-2020, Lime Technology
* Copyright 2012-2020, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -17,7 +17,7 @@ Cond="strpos($disks[$name]['status'],'_NP')===false"
?>
<script>
$(function() {
$.post("/webGui/include/SmartInfo.php",{cmd:'attributes',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'}, function(data) {
$.post("/webGui/include/SmartInfo.php",{cmd:'attributes',port:'<?=$dev?>',name:'<?=$name?>'}, function(data) {
$('#disk_attributes').html(data);
});
});
+3 -3
View File
@@ -4,8 +4,8 @@ Tag="building"
Cond="strpos($disks[$name]['status'],'_NP')===false"
---
<?PHP
/* Copyright 2005-2020, Lime Technology
* Copyright 2012-2020, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -17,7 +17,7 @@ Cond="strpos($disks[$name]['status'],'_NP')===false"
?>
<script>
$(function() {
$.post("/webGui/include/SmartInfo.php",{cmd:'capabilities',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'}, function(data) {
$.post("/webGui/include/SmartInfo.php",{cmd:'capabilities',port:'<?=$dev?>',name:'<?=$name?>'}, function(data) {
$('#disk_capabilities_div').html(data);
});
});
+3 -3
View File
@@ -4,8 +4,8 @@ Tag="user"
Cond="strpos($disks[$name]['status'],'_NP')===false"
---
<?PHP
/* Copyright 2005-2020, Lime Technology
* Copyright 2012-2020, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -24,7 +24,7 @@ function disklog(disk,key,value) {
$.post('/webGui/include/DiskLog.php',{disk:disk,key:key,value:value});
}
$(function() {
$.post("/webGui/include/SmartInfo.php",{cmd:'identify',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'}, function(data) {
$.post("/webGui/include/SmartInfo.php",{cmd:'identify',port:'<?=$dev?>',name:'<?=$name?>'}, function(data) {
$('#disk_identify').html(data);
});
});
+45 -47
View File
@@ -67,7 +67,7 @@ if ($.cookie('deletepool')!=null) {
$.removeCookie('deletepool');
done();
}
<?if (strpos($disk['fsType'],"btrfs")!==false):?>
<?if (strpos($disk['fsType']??'',"btrfs")!==false):?>
function presetBTRFS(form,hour) {
var mode = form.mode.value;
form.min.disabled = mode==0;
@@ -173,7 +173,7 @@ function setGlue(form,reset) {
$('input[name="smDevice"]').val('').hide();
$('#helptext').hide();
}
form.smGlue.value = form.smType.selectedIndex>0 ? data[n]['glue'] : "<?=$var['smGlue']?>";
form.smGlue.value = form.smType.selectedIndex>0 ? data[n]['glue'] : "<?=$var['smGlue']??''?>";
}
function prepareFS(form,cookie,value) {
if ($(form).find('input[type="submit"]').val()=='Cancel') $.removeCookie(cookie); else $.cookie(cookie,value);
@@ -466,12 +466,12 @@ _(Minimum free space)_:
<?endif;?>
_(Warning disk utilization threshold)_ (%):
: <input type="number" min="0" max="100" name="diskWarning.<?=$disk['idx']?>" class="narrow" value="<?=strlen($disk['warning'])?$disk['warning']:''?>" placeholder="<?=$display['warning']?>">
: <input type="number" min="0" max="100" name="diskWarning.<?=$disk['idx']?>" class="narrow" value="<?=$disk['warning']??''?>" placeholder="<?=$display['warning']?>">
:info_warning_utilization_help:
_(Critical disk utilization threshold)_ (%):
: <input type="number" min="0" max="100" name="diskCritical.<?=$disk['idx']?>" class="narrow" value="<?=strlen($disk['critical'])?$disk['critical']:''?>" placeholder="<?=$display['critical']?>")>
: <input type="number" min="0" max="100" name="diskCritical.<?=$disk['idx']?>" class="narrow" value="<?=$disk['critical']??''?>" placeholder="<?=$display['critical']?>")>
:info_critical_utilization_help:
@@ -500,7 +500,7 @@ _(Critical disk utilization threshold)_ (%):
<?endif;?>
</form>
<?if (strpos($disk['fsType'],"btrfs")!==false):?>
<?if (strpos($disk['fsType']??'',"btrfs")!==false):?>
<div id="title" class="nocontrol"><span class="left"><i class="title fa fa-balance-scale"></i>_(Balance Status)_</span></div>
<form markdown="1" method="POST" action="/update.php" target="progressFrame" onsubmit="prepareFS(this,'btrfs-balance-<?=$tag?>','/mnt/<?=$tag?>')">
<?if ($disk['fsStatus']=="Mounted"):?>
@@ -571,54 +571,53 @@ _(btrfs balance status)_:
_(Balance schedule)_:
: <select name="mode" onchange="presetBTRFS(this.form,'#balance-hour')">
<?for ($m=0; $m<count($mode); $m++):?>
<?=mk_option($$balance['mode'], strval($m), _($mode[$m]).($m<4 ? '': ' ('._('recommended').')'))?>
<?=mk_option($$balance['mode']??'', strval($m), _($mode[$m]).($m<4 ? '': ' ('._('recommended').')'))?>
<?endfor;?>
</select>
_(Day of the week)_:
: <select name="day">
<?for ($d=0; $d<count($days); $d++):?>
<?=mk_option($$balance['day'], strval($d), _($days[$d]),0)?>
<?=mk_option($$balance['day']??'', strval($d), _($days[$d]),0)?>
<?endfor;?>
<?=mk_option($$balance['day'], "*", "--------", _("disabled"))?>
<?=mk_option($$balance['day']??'', "*", "--------", _("disabled"))?>
</select>
_(Day of the month)_:
: <select name="dotm">
<?for ($d=1; $d<=31; $d++):?>
<?=mk_option($$balance['dotm'], strval($d), sprintf("%02d", $d))?>
<?=mk_option($$balance['dotm']??'', strval($d), sprintf("%02d", $d))?>
<?endfor;?>
<?=mk_option($$balance['dotm'], "*", "--------", _("disabled"))?>
<?=mk_option($$balance['dotm']??'', "*", "--------", _("disabled"))?>
</select>
_(Time of the day)_:
: <span id="balance-hour1" style="display:none"><select name="hour1" class="narrow">
<?for ($d=0; $d<=23; $d++):?>
<?=mk_option($$balance['hour'], strval($d), sprintf("%02d", $d))?>
<?=mk_option($$balance['hour']??'', strval($d), sprintf("%02d", $d))?>
<?endfor;?>
</select>
<select name="min" class="narrow">
<?for ($d=0; $d<=55; $d+=5):?>
<?=mk_option($$balance['min'], strval($d), sprintf("%02d", $d))?>
<?=mk_option($$balance['min']??'', strval($d), sprintf("%02d", $d))?>
<?endfor;?>
</select>&nbsp;&nbsp;_(HH:MM)_</span>
: <span id="balance-hour2" style="display:none"><select name="hour2">
<?=mk_option($$balance['hour'], "*/1", _("Every hour"))?>
<?=mk_option($$balance['hour'], "*/2", _("Every 2 hours"))?>
<?=mk_option($$balance['hour'], "*/3", _("Every 3 hours"))?>
<?=mk_option($$balance['hour'], "*/4", _("Every 4 hours"))?>
<?=mk_option($$balance['hour'], "*/6", _("Every 6 hours"))?>
<?=mk_option($$balance['hour'], "*/8", _("Every 8 hours"))?>
<?=mk_option($$balance['hour']??'', "*/1", _("Every hour"))?>
<?=mk_option($$balance['hour']??'', "*/2", _("Every 2 hours"))?>
<?=mk_option($$balance['hour']??'', "*/3", _("Every 3 hours"))?>
<?=mk_option($$balance['hour']??'', "*/4", _("Every 4 hours"))?>
<?=mk_option($$balance['hour']??'', "*/6", _("Every 6 hours"))?>
<?=mk_option($$balance['hour']??'', "*/8", _("Every 8 hours"))?>
</select></span>
_(Block group usage)_ (%):
: <input type="number" name="usage" class="narrow" min="0" max="100" value="<?=$$balance['usage']?>" placeholder="50">
: <input type="number" name="usage" class="narrow" min="0" max="100" value="<?=$$balance['usage']??''?>" placeholder="50">
&nbsp;
: <input type="submit" name="#apply" value="_(Apply)_"><input type="button" value="_(Done)_" onclick="done()">
</form>
<?endif;?>
<?if (strpos($disk['fsType'],"btrfs")!==false):?>
<div id="title" class="nocontrol"><span class="left"><i class="title fa fa-paint-brush"></i>_(Scrub Status)_</span></div>
<form markdown="1" method="POST" action="/update.php" target="progressFrame" onsubmit="prepareFS(this,'btrfs-scrub-<?=$tag?>','/mnt/<?=$tag?>')">
<?if ($disk['fsStatus']=="Mounted"):?>
@@ -667,51 +666,50 @@ _(btrfs scrub status)_:
_(Scrub schedule)_:
: <select name="mode" onchange="presetBTRFS(this.form,'#scrub-hour')">
<?for ($m=0; $m<count($mode); $m++):?>
<?=mk_option($$scrub['mode'], strval($m), _($mode[$m]))?>
<?=mk_option($$scrub['mode']??'', strval($m), _($mode[$m]))?>
<?endfor;?>
</select>
_(Day of the week)_:
: <select name="day">
<?for ($d=0; $d<count($days); $d++):?>
<?=mk_option($$scrub['day'], strval($d), _($days[$d]),0)?>
<?=mk_option($$scrub['day']??'', strval($d), _($days[$d]),0)?>
<?endfor;?>
<?=mk_option($$scrub['day'], "*", "--------", _("disabled"))?>
<?=mk_option($$scrub['day']??'', "*", "--------", _("disabled"))?>
</select>
_(Day of the month)_:
: <select name="dotm">
<?for ($d=1; $d<=31; $d++):?>
<?=mk_option($$scrub['dotm'], strval($d), sprintf("%02d", $d))?>
<?=mk_option($$scrub['dotm']??'', strval($d), sprintf("%02d", $d))?>
<?endfor;?>
<?=mk_option($scrub['dotm'], "*", "--------", _("disabled"))?>
<?=mk_option($$scrub['dotm']??'', "*", "--------", _("disabled"))?>
</select>
_(Time of the day)_:
: <span id="scrub-hour1" style="display:none"><select name="hour1" class="narrow">
<?for ($d=0; $d<=23; $d++):?>
<?=mk_option($$scrub['hour'], strval($d), sprintf("%02d", $d))?>
<?=mk_option($$scrub['hour']??'', strval($d), sprintf("%02d", $d))?>
<?endfor;?>
</select>
<select name="min" class="narrow">
<?for ($d=0; $d<=55; $d+=5):?>
<?=mk_option($$scrub['min'], strval($d), sprintf("%02d", $d))?>
<?=mk_option($$scrub['min']??'', strval($d), sprintf("%02d", $d))?>
<?endfor;?>
</select>&nbsp;&nbsp;_(HH:MM)_</span>
: <span id="scrub-hour2" style="display:none"><select name="hour2">
<?=mk_option($$scrub['hour'], "*/1", _("Every hour"))?>
<?=mk_option($$scrub['hour'], "*/2", _("Every 2 hours"))?>
<?=mk_option($$scrub['hour'], "*/3", _("Every 3 hours"))?>
<?=mk_option($$scrub['hour'], "*/4", _("Every 4 hours"))?>
<?=mk_option($$scrub['hour'], "*/6", _("Every 6 hours"))?>
<?=mk_option($$scrub['hour'], "*/8", _("Every 8 hours"))?>
<?=mk_option($$scrub['hour']??'', "*/1", _("Every hour"))?>
<?=mk_option($$scrub['hour']??'', "*/2", _("Every 2 hours"))?>
<?=mk_option($$scrub['hour']??'', "*/3", _("Every 3 hours"))?>
<?=mk_option($$scrub['hour']??'', "*/4", _("Every 4 hours"))?>
<?=mk_option($$scrub['hour']??'', "*/6", _("Every 6 hours"))?>
<?=mk_option($$scrub['hour']??'', "*/8", _("Every 8 hours"))?>
</select></span>
&nbsp;
: <input type="submit" name="#apply" value="_(Apply)_"><input type="button" value="_(Done)_" onclick="done()">
</form>
<?endif?>
<?if (strpos($disk['fsType'],"btrfs")!==false):?>
<div id="title" class="nocontrol"><span class="left"><i class="title fa fa-shield"></i>_(Check Filesystem Status)_</span></div>
<form markdown="1" method="POST" action="/update.php" target="progressFrame" onsubmit="prepareFS(this,'btrfs-check-<?=$tag?>','/dev/<?=$disk['deviceSb']?> <?=$id?>')">
<?if (maintenance_mode()):?>
@@ -757,7 +755,7 @@ _(btrfs check status)_:
<?endif;?>
</form>
<?endif;?>
<?if (strpos($disk['fsType'],"reiserfs")!==false):?>
<?if (strpos($disk['fsType']??'',"reiserfs")!==false):?>
<div id="title" class="nocontrol"><span class="left"><i class="title fa fa-shield"></i>_(Check Filesystem Status)_</span></div>
<form markdown="1" method="POST" action="/update.php" target="progressFrame" onsubmit="prepareFS(this,'rfs-check-<?=$tag?>','/dev/<?=$disk['deviceSb']?> <?=$id?>')">
<?if (maintenance_mode()):?>
@@ -797,7 +795,7 @@ _(reiserfsck status)_:
<?endif;?>
</form>
<?endif;?>
<?if (strpos($disk['fsType'],"xfs")!==false):?>
<?if (strpos($disk['fsType']??'',"xfs")!==false):?>
<div id="title" class="nocontrol"><span class="left"><i class="title fa fa-shield"></i>_(Check Filesystem Status)_</span></div>
<form markdown="1" method="POST" action="/update.php" target="progressFrame" onsubmit="prepareFS(this,'xfs-check-<?=$tag?>','/dev/<?=$disk['deviceSb']?> <?=$id?>')">
<?if (maintenance_mode()):?>
@@ -846,14 +844,14 @@ _(xfs_repair status)_:
<input type="hidden" name="#section" value="<?=$id?>">
<input type="hidden" name="#cleanup" value="true">
<input type="hidden" name="smEvents" value="">
<input type="hidden" name="smGlue" value="<?=$var['smGlue']?>">
<input type="hidden" name="smGlue" value="<?=$var['smGlue']??''?>">
_(Warning disk temperature threshold)_ (&deg;<?=$display['unit']?>):
: <input type="number" min="0" max="300" name="hotTemp" class="narrow" value="<?=strlen($disk['hotTemp'])?displayTemp($disk['hotTemp']):''?>" placeholder="<?=displayTemp($display['hot'])?>">
: <input type="number" min="0" max="300" name="hotTemp" class="narrow" value="<?=displayTemp($disk['hotTemp']??'')?>" placeholder="<?=displayTemp($display['hot'])?>">
:info_warning_temp_help:
_(Critical disk temperature threshold)_ (&deg;<?=$display['unit']?>):
: <input type="number" min="0" max="300" name="maxTemp" class="narrow" value="<?=strlen($disk['maxTemp'])?displayTemp($disk['maxTemp']):''?>" placeholder="<?=displayTemp($display['max'])?>">
: <input type="number" min="0" max="300" name="maxTemp" class="narrow" value="<?=displayTemp($disk['maxTemp']??'')?>" placeholder="<?=displayTemp($display['max'])?>">
:info_critical_temp_help:
@@ -896,15 +894,15 @@ _(SMART controller type)_:
<?=mk_option($disk['smType'], "-d marvell", "Marvell")?>
<?=mk_option($disk['smType'], "-d megaraid", "MegaRAID")?>
</select>
<input type="text" name="smPort1" value="<?=$disk['smPort1']?>" class="option"><select name="smPort1" class="narrow option" disabled></select>
<input type="text" name="smPort2" value="<?=$disk['smPort2']?>" class="option"><select name="smPort2" class="narrow option" disabled></select>
<input type="text" name="smPort3" value="<?=$disk['smPort3']?>" class="option"><select name="smPort3" class="narrow option" disabled></select><span id="devtext">/dev/</span>
<input type="text" name="smDevice" value="<?=$disk['smDevice']?>" class="option" placeholder="<?=$dev?>"><span id="helptext">_(enter disk index and device name as applicable to your controller)_</span>
<input type="text" name="smPort1" value="<?=$disk['smPort1']??''?>" class="option"><select name="smPort1" class="narrow option" disabled></select>
<input type="text" name="smPort2" value="<?=$disk['smPort2']??''?>" class="option"><select name="smPort2" class="narrow option" disabled></select>
<input type="text" name="smPort3" value="<?=$disk['smPort3']??''?>" class="option"><select name="smPort3" class="narrow option" disabled></select><span id="devtext">/dev/</span>
<input type="text" name="smDevice" value="<?=$disk['smDevice']??''?>" class="option" placeholder="<?=$dev?>"><span id="helptext">_(enter disk index and device name as applicable to your controller)_</span>
:info_controller_type_help:
_(SMART attribute notifications)_:
: <input type="text" name="smCustom" value="<?=$disk['smCustom']??$var['smCustom']?>" class="narrow">_(Custom attributes (use comma to separate numbers))_
: <input type="text" name="smCustom" value="<?=$disk['smCustom']??$var['smCustom']??''?>" class="narrow">_(Custom attributes (use comma to separate numbers))_
<?for ($x=0; $x < count($preselect); $x++):?>
&nbsp;
@@ -937,7 +935,7 @@ _(Name)_:
<input type='hidden' name='csrf_token' value='<?=$var['csrf_token']?>'>
</form>
<?if (strpos($disk['fsType'],"btrfs")!==false):?>
<?if (strpos($disk['fsType']??'',"btrfs")!==false):?>
<script>
$(function(){
presetBTRFS(document.balance_schedule,'#balance-hour');
+32 -32
View File
@@ -3,8 +3,8 @@ Title="_(Interface)_ eth0"
Tag="icon-ethernet"
---
<?PHP
/* Copyright 2005-2020, Lime Technology
* Copyright 2012-2020, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -450,7 +450,7 @@ $(function() {
<input type="hidden" name="BRFD" value="0">
_(Interface description)_:
: <span class="status vshift"><i id="tag-eth0" class="fa fa-fw fa-chevron-down" style="cursor:pointer" onclick="viewToggle('eth0')"></i></span>
<input type="text" name="DESCRIPTION:0" maxlength="80" value="<?=htmlspecialchars($eth0["DESCRIPTION:0"])?>" onchange="exitCode(this.form,true)">
<input type="text" name="DESCRIPTION:0" maxlength="80" value="<?=htmlspecialchars($eth0["DESCRIPTION:0"]??'')?>" onchange="exitCode(this.form,true)">
:eth_interface_description_help:
@@ -534,7 +534,7 @@ _(IPv4 address assignment)_:
<div markdown="1" class="more-ipv4-eth0-0" style="display:none">
_(IPv4 address)_:
: <input type="text" name="IPADDR:0" maxlength="15" value="<?=$eth0["IPADDR:0"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:0" class="slim">
: <input type="text" name="IPADDR:0" maxlength="15" value="<?=$eth0["IPADDR:0"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:0" class="slim">
<?=mk_option($eth0["NETMASK:0"], "255.0.0.0", "8")?>
<?=mk_option($eth0["NETMASK:0"], "255.255.0.0", "16")?>
<?=mk_option($eth0["NETMASK:0"], "255.255.128.0", "17")?>
@@ -556,8 +556,8 @@ _(IPv4 address)_:
:eth_ipv4_address_help:
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:0" maxlength="15" value="<?=$eth0["GATEWAY:0"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:0" min="0" max="9999" value="<?=$eth0["METRIC:0"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY:0" maxlength="15" value="<?=$eth0["GATEWAY:0"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:0" min="0" max="9999" value="<?=$eth0["METRIC:0"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:eth_ipv4_default_gateway_help:
@@ -571,20 +571,20 @@ _(IPv4 DNS server assignment)_:
:eth_ipv4_dns_server_assignment_help:
_(IPv4 DNS server)_:
: <input type="text" name="DNS_SERVER1" maxlength="15" value="<?=$eth0['DNS_SERVER1']?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
: <input type="text" name="DNS_SERVER1" maxlength="15" value="<?=$eth0['DNS_SERVER1']??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
:eth_ipv4_dns_server_help:
<div markdown="1" id="dnsserver2" style="display:none">
_(IPv4 DNS server)_ 2:
: <input type="text" name="DNS_SERVER2" maxlength="15" value="<?=$eth0['DNS_SERVER2']?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
: <input type="text" name="DNS_SERVER2" maxlength="15" value="<?=$eth0['DNS_SERVER2']??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
:eth_ipv4_dns_server2_help:
</div>
<div markdown="1" id="dnsserver3" style="display:none">
_(IPv4 DNS server)_ 3:
: <input type="text" name="DNS_SERVER3" maxlength="15" value="<?=$eth0['DNS_SERVER3']?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
: <input type="text" name="DNS_SERVER3" maxlength="15" value="<?=$eth0['DNS_SERVER3']??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
:eth_ipv4_dns_server3_help:
@@ -601,13 +601,13 @@ _(IPv6 address assignment)_:
<div markdown="1" class="more-ipv6-eth0-0" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:0" maxlength="39" value="<?=$eth0["IPADDR6:0"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:0" min="1" max="128" value="<?=$eth0["NETMASK6:0"]?>" class="slim">
: <input type="text" name="IPADDR6:0" maxlength="39" value="<?=$eth0["IPADDR6:0"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:0" min="1" max="128" value="<?=$eth0["NETMASK6:0"]??''?>" class="slim">
:eth_ipv6_address_help:
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:0" maxlength="39" value="<?=$eth0["GATEWAY6:0"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:0" min="0" max="9999" value="<?=$eth0["METRIC6:0"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY6:0" maxlength="39" value="<?=$eth0["GATEWAY6:0"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:0" min="0" max="9999" value="<?=$eth0["METRIC6:0"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:eth_ipv6_default_gateway_help:
@@ -630,28 +630,28 @@ _(IPv6 DNS server assignment)_:
:eth_ipv6_dns_server_assignment_help:
_(IPv6 DNS server)_:
: <input type="text" name="DNS6_SERVER1" maxlength="39" value="<?=$eth0['DNS6_SERVER1']?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
: <input type="text" name="DNS6_SERVER1" maxlength="39" value="<?=$eth0['DNS6_SERVER1']??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
:eth_ipv6_dns_server_help:
</div>
<div markdown="1" id="dns6server2" style="display:none">
_(IPv6 DNS server)_ 2:
: <input type="text" name="DNS6_SERVER2" maxlength="39" value="<?=$eth0['DNS6_SERVER2']?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
: <input type="text" name="DNS6_SERVER2" maxlength="39" value="<?=$eth0['DNS6_SERVER2']??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
:eth_ipv6_dns_server2_help:
</div>
<div markdown="1" id="dns6server3" style="display:none">
_(IPv6 DNS server)_ 3:
: <input type="text" name="DNS6_SERVER3" maxlength="39" value="<?=$eth0['DNS6_SERVER3']?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
: <input type="text" name="DNS6_SERVER3" maxlength="39" value="<?=$eth0['DNS6_SERVER3']??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
:eth_ipv6_dns_server3_help:
</div>
</div>
_(Desired MTU)_:
: <input type="number" name="MTU" min="68" max="9198" value="<?=$eth0['MTU']?>" class="narrow" placeholder="1500">
: <input type="number" name="MTU" min="68" max="9198" value="<?=$eth0['MTU']??''?>" class="narrow" placeholder="1500">
:eth_desired_mtu_help:
@@ -669,13 +669,13 @@ _(Enable VLANs)_:
<div markdown="1" id="index-eth0-<?=$i?>" class="access-eth0 shade-<?=$display['theme']?>" style="display:none">
_(Interface description)_:
: <span class="status vshift"><i id="tag-eth0-<?=$i?>" class="fa fa-fw fa-chevron-down" style="cursor:pointer" onclick="viewToggle('eth0','<?=$i?>')"></i></span>
<input type="text" name="DESCRIPTION:<?=$i?>" maxlength="80" value="<?=htmlspecialchars($eth0["DESCRIPTION:$i"])?>" onchange="exitCode(this.form,true)">
<input type="text" name="DESCRIPTION:<?=$i?>" maxlength="80" value="<?=htmlspecialchars($eth0["DESCRIPTION:$i"]??'')?>" onchange="exitCode(this.form,true)">
:eth_interface_description_help:
<div markdown="1" id="view-eth0-<?=$i?>" style="display:none">
_(VLAN number)_:
: <input type="number" name="VLANID:<?=$i?>" min="1" max="4095" value="<?=$eth0["VLANID:$i"]?>" class="narrow gap" required>
: <input type="number" name="VLANID:<?=$i?>" min="1" max="4095" value="<?=$eth0["VLANID:$i"]??''?>" class="narrow gap" required>
<?if (!$service):?><input type="button" class="form" value="_(Delete VLAN)_" onclick="removeVLAN($('#index-eth0-<?=$i?>'))"><?endif;?>
:eth_vlan_number_help:
@@ -703,7 +703,7 @@ _(IPv4 address assignment)_:
<div markdown="1" class="more-ipv4-eth0-<?=$i?>" style="display:none">
_(IPv4 address)_:
: <input type="text" name="IPADDR:<?=$i?>" maxlength="15" value="<?=$eth0["IPADDR:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:<?=$i?>" class="slim">
: <input type="text" name="IPADDR:<?=$i?>" maxlength="15" value="<?=$eth0["IPADDR:$i"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:<?=$i?>" class="slim">
<?=mk_option($eth0["NETMASK:$i"], "255.0.0.0", "8")?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.0.0", "16")?>
<?=mk_option($eth0["NETMASK:$i"], "255.255.128.0", "17")?>
@@ -725,8 +725,8 @@ _(IPv4 address)_:
:eth_ipv4_address_help:
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:<?=$i?>" maxlength="15" value="<?=$eth0["GATEWAY:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:<?=$i?>" min="0" max="9999" value="<?=$eth0["METRIC:$i"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY:<?=$i?>" maxlength="15" value="<?=$eth0["GATEWAY:$i"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:<?=$i?>" min="0" max="9999" value="<?=$eth0["METRIC:$i"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:eth_ipv4_default_gateway_help:
@@ -746,13 +746,13 @@ _(IPv6 address assignment)_:
<div markdown="1" class="more-ipv6-eth0-<?=$i?>" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:<?=$i?>" maxlength="39" value="<?=$eth0["IPADDR6:$i"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:<?=$i?>" min="1" max="128" value="<?=$eth0["NETMASK6:$i"]?>" class="slim">
: <input type="text" name="IPADDR6:<?=$i?>" maxlength="39" value="<?=$eth0["IPADDR6:$i"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:<?=$i?>" min="1" max="128" value="<?=$eth0["NETMASK6:$i"]??''?>" class="slim">
:eth_ipv6_address_help:
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:<?=$i?>" maxlength="39" value="<?=$eth0["GATEWAY6:$i"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:<?=$i?>" min="0" max="9999" value="<?=$eth0["METRIC6:$i"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY6:<?=$i?>" maxlength="39" value="<?=$eth0["GATEWAY6:$i"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:<?=$i?>" min="0" max="9999" value="<?=$eth0["METRIC6:$i"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:eth_ipv6_default_gateway_help:
@@ -781,11 +781,11 @@ _(IPv6 privacy extensions)_:
<div markdown="1" id="index-eth0-INDEX" class="access-eth0 shade-<?=$display['theme']?>">
_(Interface description)_:
: <span class="status vshift"><i id="tag-eth0-INDEX" class="fa fa-fw fa-chevron-up" style="cursor:pointer" onclick="viewToggle('eth0','INDEX')"></i></span>
<input type="text" name="DESCRIPTION:INDEX" maxlength="80" value="<?=htmlspecialchars($eth0["DESCRIPTION:INDEX"])?>" onchange="exitCode(this.form,true)">
<input type="text" name="DESCRIPTION:INDEX" maxlength="80" value="<?=htmlspecialchars($eth0["DESCRIPTION:INDEX"]??'')?>" onchange="exitCode(this.form,true)">
<div markdown="1" id="view-eth0-INDEX">
_(VLAN number)_:
: <input type="number" name="VLANID:INDEX" min="1" max="4095" value="<?=$eth0["VLANID:INDEX"]?>" class="narrow gap" required>
: <input type="number" name="VLANID:INDEX" min="1" max="4095" value="<?=$eth0["VLANID:INDEX"]??''?>" class="narrow gap" required>
<input type="button" class="form" value="_(Delete VLAN)_" onclick="removeVLAN($('#index-eth0-INDEX'))">
_(Network protocol)_:
@@ -805,7 +805,7 @@ _(IPv4 address assignment)_:
<div markdown="1" class="more-ipv4-eth0-INDEX" style="display:none">
_(IPv4 address)_:
: <input type="text" name="IPADDR:INDEX" maxlength="15" value="<?=$eth0["IPADDR:INDEX"]?>" class="narrow" pattern="<?=$validIP4?>" title="=_(IPv4 address A.B.C.D)_">/<select name="NETMASK:INDEX" class="slim">
: <input type="text" name="IPADDR:INDEX" maxlength="15" value="<?=$eth0["IPADDR:INDEX"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="=_(IPv4 address A.B.C.D)_">/<select name="NETMASK:INDEX" class="slim">
<?=mk_option($eth0["NETMASK:INDEX"], "255.0.0.0", "8")?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.0.0", "16")?>
<?=mk_option($eth0["NETMASK:INDEX"], "255.255.128.0", "17")?>
@@ -825,8 +825,8 @@ _(IPv4 address)_:
</select>
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:INDEX" maxlength="15" value="<?=$eth0["GATEWAY:INDEX"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:INDEX" min="1" max="9999" value="<?=$eth0["METRIC:INDEX"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY:INDEX" maxlength="15" value="<?=$eth0["GATEWAY:INDEX"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:INDEX" min="1" max="9999" value="<?=$eth0["METRIC:INDEX"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
</div>
</div>
@@ -840,11 +840,11 @@ _(IPv6 address assignment)_:
<div markdown="1" class="more-ipv6-eth0-INDEX" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:INDEX" maxlength="39" value="<?=$eth0["IPADDR6:INDEX"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:INDEX" min="1" max="128" value="<?=$eth0["NETMASK6:INDEX"]?>" class="slim">
: <input type="text" name="IPADDR6:INDEX" maxlength="39" value="<?=$eth0["IPADDR6:INDEX"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:INDEX" min="1" max="128" value="<?=$eth0["NETMASK6:INDEX"]??''?>" class="slim">
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:INDEX" maxlength="39" value="<?=$eth0["GATEWAY6:INDEX"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:INDEX" min="1" max="9999" value="<?=$eth0["METRIC6:INDEX"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY6:INDEX" maxlength="39" value="<?=$eth0["GATEWAY6:INDEX"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:INDEX" min="1" max="9999" value="<?=$eth0["METRIC6:INDEX"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
_(IPv6 privacy extensions)_:
: <select name="PRIVACY6:INDEX">
+27 -27
View File
@@ -3,8 +3,8 @@ Title="_(Interface)_ ethX"
Tag="icon-ethernet"
---
<?PHP
/* Copyright 2005-2020, Lime Technology
* Copyright 2012-2020, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -72,7 +72,7 @@ $(function() {
if ($(this).text().indexOf('Interface ethX')==0) $(this).find('span.left').append(ctrl);
});
<?endif;?>
<?if ($master_ethX):?>
<?if (isset($master_ethX)):?>
$('div.slave-ethX').hide();
disableForm(form);
<?elseif ($service):?>
@@ -98,7 +98,7 @@ $(function() {
_(Interface description)_:
: <span class="status vshift"><i id="tag-ethX" class="fa fa-fw fa-chevron-down" style="cursor:pointer" onclick="viewToggle('ethX')"></i></span>
<?if (!$more):?>
<input type="text" name="DESCRIPTION:0" maxlength="80" value="<?=htmlspecialchars($ethX["DESCRIPTION:0"])?>" onchange="exitCode(this.form,true)">
<input type="text" name="DESCRIPTION:0" maxlength="80" value="<?=htmlspecialchars($ethX["DESCRIPTION:0"]??'')?>" onchange="exitCode(this.form,true)">
<?else:?>
<span class="<?=$class?>"><?=$reason?></span>
<?endif;?>
@@ -187,7 +187,7 @@ _(IPv4 address assignment)_:
<div markdown="1" class="more-ipv4-ethX-0" style="display:none">
_(IPv4 address)_:
: <input type="text" name="IPADDR:0" maxlength="15" value="<?=$ethX["IPADDR:0"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:0" class="slim">
: <input type="text" name="IPADDR:0" maxlength="15" value="<?=$ethX["IPADDR:0"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:0" class="slim">
<?=mk_option($ethX["NETMASK:0"], "255.0.0.0", "8")?>
<?=mk_option($ethX["NETMASK:0"], "255.255.0.0", "16")?>
<?=mk_option($ethX["NETMASK:0"], "255.255.128.0", "17")?>
@@ -209,8 +209,8 @@ _(IPv4 address)_:
:eth_ipv4_address_help:
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:0" maxlength="15" value="<?=$ethX["GATEWAY:0"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:0" min="0" max="9999" value="<?=$ethX["METRIC:0"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY:0" maxlength="15" value="<?=$ethX["GATEWAY:0"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:0" min="0" max="9999" value="<?=$ethX["METRIC:0"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:eth_ipv4_default_gateway_help:
@@ -228,13 +228,13 @@ _(IPv6 address assignment)_:
<div markdown="1" class="more-ipv6-ethX-0" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:0" maxlength="39" value="<?=$ethX["IPADDR6:0"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:0" min="1" max="128" value="<?=$ethX["NETMASK6:0"]?>" class="slim">
: <input type="text" name="IPADDR6:0" maxlength="39" value="<?=$ethX["IPADDR6:0"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:0" min="1" max="128" value="<?=$ethX["NETMASK6:0"]??''?>" class="slim">
:eth_ipv6_address_help:
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:0" maxlength="39" value="<?=$ethX["GATEWAY6:0"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:0" min="0" max="9999" value="<?=$ethX["METRIC6:0"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY6:0" maxlength="39" value="<?=$ethX["GATEWAY6:0"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:0" min="0" max="9999" value="<?=$ethX["METRIC6:0"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:eth_ipv6_default_gateway_help:
@@ -249,7 +249,7 @@ _(IPv6 privacy extensions)_:
</div>
</div>
_(Desired MTU)_:
: <input type="number" name="MTU" min="68" max="9198" value="<?=$locked?$ethX['MTU']:$ethX['MTU']?>" class="narrow" placeholder="1500">
: <input type="number" name="MTU" min="68" max="9198" value="<?=$ethX['MTU']??''?>" class="narrow" placeholder="1500">
:eth_desired_mtu_help:
@@ -268,13 +268,13 @@ _(Enable VLANs)_:
<div markdown="1" id="index-ethX-<?=$i?>" class="access-ethX shade-<?=$display['theme']?>" style="display:none">
_(Interface description)_:
: <span class="status vshift"><i id="tag-ethX-<?=$i?>" class="fa fa-fw fa-chevron-down" style="cursor:pointer" onclick="viewToggle('ethX','<?=$i?>')"></i></span>
<input type="text" name="DESCRIPTION:<?=$i?>" maxlength="80" value="<?=htmlspecialchars($ethX["DESCRIPTION:$i"])?>" onchange="exitCode(this.form,true)">
<input type="text" name="DESCRIPTION:<?=$i?>" maxlength="80" value="<?=htmlspecialchars($ethX["DESCRIPTION:$i"]??'')?>" onchange="exitCode(this.form,true)">
:eth_interface_description_help:
<div markdown="1" id="view-ethX-<?=$i?>" style="display:none">
_(VLAN number)_:
: <input type="number" name="VLANID:<?=$i?>" min="1" max="4095" value="<?=$ethX["VLANID:$i"]?>" class="narrow gap" required>
: <input type="number" name="VLANID:<?=$i?>" min="1" max="4095" value="<?=$ethX["VLANID:$i"]??''?>" class="narrow gap" required>
<?if (!$service):?><input type="button" class="form" value="_(Delete VLAN)_" onclick="removeVLAN($('#index-ethX-<?=$i?>'))"><?endif;?>
:eth_vlan_number_help:
@@ -300,7 +300,7 @@ _(IPv4 address assignment)_:
<div markdown="1" class="more-ipv4-ethX-<?=$i?>" style="display:none">
_(IPv4 address)_:
: <input type="text" name="IPADDR:<?=$i?>" maxlength="15" value="<?=$ethX["IPADDR:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:<?=$i?>" class="slim">
: <input type="text" name="IPADDR:<?=$i?>" maxlength="15" value="<?=$ethX["IPADDR:$i"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:<?=$i?>" class="slim">
<?=mk_option($ethX["NETMASK:$i"], "255.0.0.0", "8")?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.0.0", "16")?>
<?=mk_option($ethX["NETMASK:$i"], "255.255.128.0", "17")?>
@@ -322,8 +322,8 @@ _(IPv4 address)_:
:eth_ipv4_address_help:
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:<?=$i?>" maxlength="15" value="<?=$ethX["GATEWAY:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:<?=$i?>" min="0" max="9999" value="<?=$ethX["METRIC:$i"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY:<?=$i?>" maxlength="15" value="<?=$ethX["GATEWAY:$i"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:<?=$i?>" min="0" max="9999" value="<?=$ethX["METRIC:$i"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:eth_ipv4_default_gateway_help:
@@ -341,13 +341,13 @@ _(IPv6 address assignment)_:
<div markdown="1" class="more-ipv6-ethX-<?=$i?>" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:<?=$i?>" maxlength="39" value="<?=$ethX["IPADDR6:$i"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:<?=$i?>" min="1" max="128" value="<?=$ethX["NETMASK6:$i"]?>" class="slim">
: <input type="text" name="IPADDR6:<?=$i?>" maxlength="39" value="<?=$ethX["IPADDR6:$i"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:<?=$i?>" min="1" max="128" value="<?=$ethX["NETMASK6:$i"]??''?>" class="slim">
:eth_ipv6_address_help:
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:<?=$i?>" maxlength="39" value="<?=$ethX["GATEWAY6:$i"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:<?=$i?>" min="0" max="9999" value="<?=$ethX["METRIC6:$i"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY6:<?=$i?>" maxlength="39" value="<?=$ethX["GATEWAY6:$i"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:<?=$i?>" min="0" max="9999" value="<?=$ethX["METRIC6:$i"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:eth_ipv6_default_gateway_help:
@@ -377,11 +377,11 @@ _(IPv6 privacy extensions)_:
<div markdown="1" id="index-ethX-INDEX" class="access-ethX shade-<?=$display['theme']?>">
_(Interface description)_:
: <span class="status vshift"><i id="tag-ethX-INDEX" class="fa fa-fw fa-chevron-up" style="cursor:pointer" onclick="viewToggle('ethX','INDEX')"></i></span>
<input type="text" name="DESCRIPTION:INDEX" maxlength="80" value="<?=htmlspecialchars($ethX["DESCRIPTION:INDEX"])?>" onchange="exitCode(this.form,true)">
<input type="text" name="DESCRIPTION:INDEX" maxlength="80" value="<?=htmlspecialchars($ethX["DESCRIPTION:INDEX"]??'')?>" onchange="exitCode(this.form,true)">
<div markdown="1" id="view-ethX-INDEX">
_(VLAN number)_:
: <input type="number" name="VLANID:INDEX" min="1" max="4095" value="<?=$ethX["VLANID:INDEX"]?>" class="narrow gap" required>
: <input type="number" name="VLANID:INDEX" min="1" max="4095" value="<?=$ethX["VLANID:INDEX"]??''?>" class="narrow gap" required>
<input type="button" class="form" value="_(Delete VLAN)_" onclick="removeVLAN($('#index-ethX-INDEX'))">
_(Network protocol)_:
@@ -401,7 +401,7 @@ _(IPv4 address assignment)_:
<div markdown="1" class="more-ipv4-ethX-INDEX" style="display:none">
_(IPv4 address)_:
: <input type="text" name="IPADDR:INDEX" maxlength="15" value="<?=$ethX["IPADDR:INDEX"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:INDEX" class="slim">
: <input type="text" name="IPADDR:INDEX" maxlength="15" value="<?=$ethX["IPADDR:INDEX"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">/<select name="NETMASK:INDEX" class="slim">
<?=mk_option($ethX["NETMASK:INDEX"], "255.0.0.0", "8")?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.0.0", "16")?>
<?=mk_option($ethX["NETMASK:INDEX"], "255.255.128.0", "17")?>
@@ -421,8 +421,8 @@ _(IPv4 address)_:
</select>
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:INDEX" maxlength="15" value="<?=$ethX["GATEWAY:INDEX"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:INDEX" min="1" max="9999" value="<?=$ethX["METRIC:INDEX"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY:INDEX" maxlength="15" value="<?=$ethX["GATEWAY:INDEX"]??''?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:INDEX" min="1" max="9999" value="<?=$ethX["METRIC:INDEX"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
</div>
</div>
@@ -436,11 +436,11 @@ _(IPv6 address assignment)_:
<div markdown="1" class="more-ipv6-ethX-INDEX" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:INDEX" maxlength="39" value="<?=$ethX["IPADDR6:INDEX"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:INDEX" min="1" max="128" value="<?=$ethX["NETMASK6:INDEX"]?>" class="slim">
: <input type="text" name="IPADDR6:INDEX" maxlength="39" value="<?=$ethX["IPADDR6:INDEX"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:INDEX" min="1" max="128" value="<?=$ethX["NETMASK6:INDEX"]??''?>" class="slim">
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:INDEX" maxlength="39" value="<?=$ethX["GATEWAY6:INDEX"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:INDEX" min="1" max="9999" value="<?=$ethX["METRIC6:INDEX"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
: <input type="text" name="GATEWAY6:INDEX" maxlength="39" value="<?=$ethX["GATEWAY6:INDEX"]??''?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:INDEX" min="1" max="9999" value="<?=$ethX["METRIC6:INDEX"]??''?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
_(IPv6 privacy extensions)_:
: <select name="PRIVACY6:INDEX">
+6 -6
View File
@@ -22,22 +22,22 @@ $name_regex = '^[A-Za-z0-9]([A-Za-z0-9\-\.]{0,13}[A-Za-z0-9])?$';
$name_warn = preg_match('/'.$name_regex.'/', $var['NAME']) ? 'none' : 'block';
?>
<form markdown="1" name="NameSettings" method="POST" action="/update.htm" target="progressFrame">
<input type="hidden" name="server_https" value="<?=$_SERVER['HTTPS']?>">
<input type="hidden" name="server_name" value="<?=$_SERVER['HTTP_HOST']?>">
<input type="hidden" name="server_addr" value="<?=$_SERVER['SERVER_ADDR']?>">
<input type="hidden" name="server_https" value="<?=$_SERVER['HTTPS']??''?>">
<input type="hidden" name="server_name" value="<?=$_SERVER['HTTP_HOST']??''?>">
<input type="hidden" name="server_addr" value="<?=$_SERVER['SERVER_ADDR']??''?>">
_(Server name)_:
: <input type="text" name="NAME" id="NAME" maxlength="15" pattern="<?=$name_regex?>" value="<?=htmlspecialchars($var['NAME'])?>" title="_(Only alphanumeric characters)_ (&quot;A-Z&quot;, &quot;a-z&quot;, and &quot;0-9&quot;), dashes (&quot;-&quot;), and dots (&quot;.&quot;); _(and, the first and last characters must be alphanumeric)_" <?=$disabled?> required> <span id="name_warning" style="display:<?=$name_warn?>"><i class="fa fa-warning icon warning"></i> _(Not compatible with NetBIOS)_</span>
: <input type="text" name="NAME" id="NAME" maxlength="15" pattern="<?=$name_regex?>" value="<?=htmlspecialchars($var['NAME']??'')?>" title="_(Only alphanumeric characters)_ (&quot;A-Z&quot;, &quot;a-z&quot;, and &quot;0-9&quot;), dashes (&quot;-&quot;), and dots (&quot;.&quot;); _(and, the first and last characters must be alphanumeric)_" <?=$disabled?> required> <span id="name_warning" style="display:<?=$name_warn?>"><i class="fa fa-warning icon warning"></i> _(Not compatible with NetBIOS)_</span>
:id_server_name_help:
_(Description)_:
: <input type="text" name="COMMENT" value="<?=htmlspecialchars($var['COMMENT'])?>" <?=$disabled?>>
: <input type="text" name="COMMENT" value="<?=htmlspecialchars($var['COMMENT']??'')?>" <?=$disabled?>>
:id_description_help:
_(Model)_:
: <input type="text" name="SYS_MODEL" value="<?=htmlspecialchars($var['SYS_MODEL'])?>" <?=$disabled?>>
: <input type="text" name="SYS_MODEL" value="<?=htmlspecialchars($var['SYS_MODEL']??'')?>" <?=$disabled?>>
:id_model_help:
+8 -6
View File
@@ -53,9 +53,11 @@ function acceptableCert($certFile, $hostname, $expectedURL) {
}
$tasks = find_tasks();
$ethX = 'eth0';
#$addr = ipaddr($ethX);
$addr = $_SERVER['SERVER_ADDR'];
#$addr = ipaddr($ethX);
$addr = $_SERVER['SERVER_ADDR']??'';
$keyfile = @file_get_contents($var['regFILE']);
$cert2Issuer = '';
$isLEcert = false;
if ($keyfile !== false) $keyfile = base64_encode($keyfile);
// self-signed or user-provided cert
@@ -357,8 +359,8 @@ _(Local access URLs)_:
$n = 0;
foreach($urls as $url) {
$msg = "";
$url0 = substr_count($url[0],':')>3 ? preg_replace('#(://)(.+)(/$)#','$1[$2]$3',$url[0]) : $url[0]; // IPv6 - IPv4 notation
$url1 = substr_count($url[1],':')>3 ? preg_replace('#(://)(.+)(/$)#','$1[$2]$3',$url[1]) : $url[1]; // IPv6 - IPv4 notation
$url0 = substr_count($url[0]??'',':')>3 ? preg_replace('#(://)(.+)(/$)#','$1[$2]$3',$url[0]) : $url[0]; // IPv6 - IPv4 notation
$url1 = substr_count($url[1]??'',':')>3 ? preg_replace('#(://)(.+)(/$)#','$1[$2]$3',$url[1]) : $url[1]; // IPv6 - IPv4 notation
if ($url[1]) $msg .= " "._("redirects to")." <a href='$url1'>$url1</a>";
if ($url[2]) $msg .= " "._("uses")." ".$url[2];
if ($url[3]) $msg .= "<span class='warning'> <i class='fa fa-warning fa-fw'></i> "._("is a self-signed certificate, ignore the browser's warning and proceed to the GUI")."</span>";
@@ -389,7 +391,7 @@ _(Certificate issuer)_:
<?endif;?>
_(Certificate expiration)_:
: <?=_(strftime($cert_time_format, strtotime($cert1Expires)),0)?>
: <?=_(my_date($cert_time_format, strtotime($cert1Expires)),0)?>
<?else:?>
_(Self-signed certificate file)_:
@@ -410,7 +412,7 @@ _(Certificate issuer)_:
: <?=$cert2Issuer?>
_(Certificate expiration)_:
: <?=_(strftime($cert_time_format, strtotime($cert2Expires)),0)?>
: <?=_(my_date($cert_time_format, strtotime($cert2Expires)),0)?>
<?if ($dnsRebindingProtection):?>
&nbsp;
+4 -5
View File
@@ -3,8 +3,8 @@ Title="Notification Agents"
Tag="rss-square"
---
<?PHP
/* Copyright 2005-2021, Lime Technology
* Copyright 2012-2021, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -93,6 +93,7 @@ function initDropdown() {
$fields = ['Event','Subject','Timestamp','Description','Importance','Content','Link'];
$xml_file = "webGui/include/NotificationAgents.xml";
$xml = @simplexml_load_file($xml_file) or die(_("Failed to open")." $xml_file");
$i = 1;
foreach ($xml->Agent as $agent) {
$name = str_replace(' ','_',$agent->Name);
$enabledAgent = agent_fullname("$name.sh", "enabled");
@@ -130,7 +131,6 @@ foreach ($xml->Agent as $agent) {
echo mk_option(is_file($enabledAgent), 'yes', _('Enabled'));
echo '</select></dd></dl>';
echo '<script>scripts["'.$name.'"]='.json_encode($script).';enabledAgents["'.$name.'"]="'.$enabledAgent.'";disabledAgents["'.$name.'"]="'.$disabledAgent.'";</script>';
$i = 1;
foreach ($agent->Variables->children() as $v) {
$vName = preg_replace('#\[([^\]]*)\]#', '<$1>', (string) $v);
$vDesc = ucfirst(strtolower(preg_replace('#\[([^\]]*)\]#', '<$1>', $v->attributes()->Desc)));
@@ -138,8 +138,7 @@ foreach ($xml->Agent as $agent) {
$vHelp = preg_replace('#\[([^\]]*)\]#', '<$1>', $v->attributes()->Help);
echo "<dl><dt>$vDesc:</dt><dd>";
if (preg_match('/title|message/', $vDesc)) {
echo '<select id="slot_'.$i.'" name="'.$vName.'" multiple style="display:none">';
$i++;
echo '<select id="slot_'.$i++.'" name="'.$vName.'" multiple style="display:none">';
$value = str_replace('\n',',',isset($values[$vName]) ? $values[$vName] : $vDefault);
foreach ($fields as $field) echo mk_option_check($value,'$'.strtoupper($field),_($field));
echo '</select>';
+3 -3
View File
@@ -5,8 +5,8 @@ Icon="icon-notifications"
Tag="phone-square"
---
<?PHP
/* Copyright 2005-2021, Lime Technology
* Copyright 2012-2021, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
* Copyright 2012, Andrew Hamer-Adams, http://www.pixeleyes.co.nz.
*
* This program is free software; you can redistribute it and/or
@@ -281,5 +281,5 @@ _(Notification entity)_:
:notifications_classification_help:
<input type="submit" name="#default" value="_(Default)_">
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()"></td>
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">
</form>
+14 -14
View File
@@ -65,7 +65,7 @@ function cleanUp() {
}
function saveSMART() {
$('input[value="_(Download)_"]').val('_(Downloading)_...').prop('disabled',true);
$.post('/webGui/include/SmartInfo.php',{cmd:'save',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>',file:'<?=addslashes(htmlspecialchars($file))?>'}, function() {
$.post('/webGui/include/SmartInfo.php',{cmd:'save',port:'<?=$dev?>',name:'<?=$name?>',file:'<?=addslashes(htmlspecialchars($file))?>'}, function() {
$.post('/webGui/include/Download.php',{cmd:'save',source:'<?=addslashes(htmlspecialchars($file))?>',file:'<?=addslashes(htmlspecialchars($zip))?>'},function(zip) {
location = zip;
setTimeout(cleanUp,4000);
@@ -73,7 +73,7 @@ function saveSMART() {
});
}
function testUpdate(init) {
$.post('/webGui/include/SmartInfo.php',{cmd:'update',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>',type:'<?=addslashes(htmlspecialchars($type))?>',csrf:'<?=$var['csrf_token']?>'},function(data) {
$.post('/webGui/include/SmartInfo.php',{cmd:'update',port:'<?=$dev?>',name:'<?=$name?>',csrf:'<?=$var['csrf_token']?>'},function(data) {
$('#test_result').html(data);
if (data.indexOf('%')>=0) {
if ($('#smart_selftest').length) {
@@ -85,7 +85,7 @@ function testUpdate(init) {
$('#short_test').val("_(Start)_");
$('#long_test').val("_(Start)_");
if (!init) {
$.removeCookie('test.<?=addslashes(htmlspecialchars($dev))?>');
$.removeCookie('test.<?=$dev?>');
}
}
});
@@ -104,31 +104,31 @@ function startShortTest() {
if ($('#short_test').val()=="_(Start)_") {
$('#short_test').val("_(Stop)_");
$('#long_test').attr('disabled','disabled');
$.cookie('test.<?=addslashes(htmlspecialchars($dev))?>','short',{expires:365});
$.post('/webGui/include/SmartInfo.php',{cmd:'short',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'},function(){timers.testUpdate = setTimeout(testUpdate,0);});
$.cookie('test.<?=$dev?>','short',{expires:365});
$.post('/webGui/include/SmartInfo.php',{cmd:'short',port:'<?=$dev?>',name:'<?=$name?>'},function(){timers.testUpdate = setTimeout(testUpdate,0);});
} else {
clearTimeout(timers.testUpdate);
$.removeCookie('test.<?=addslashes(htmlspecialchars($dev))?>');
$.post('/webGui/include/SmartInfo.php',{cmd:'stop',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'},function(){setTimeout(testUpdate,0);});
$.removeCookie('test.<?=$dev?>');
$.post('/webGui/include/SmartInfo.php',{cmd:'stop',port:'<?=$dev?>',name:'<?=$name?>'},function(){setTimeout(testUpdate,0);});
}
}
function startLongTest() {
if ($('#long_test').val()=="_(Start)_") {
$('#long_test').val("_(Stop)_");
$('#short_test').attr('disabled','disabled');
$.cookie('test.<?=addslashes(htmlspecialchars($dev))?>','long',{expires:365});
$.post('/webGui/include/SmartInfo.php',{cmd:'long',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'},function(){timers.testUpdate = setTimeout(testUpdate,0);});
$.cookie('test.<?=$dev?>','long',{expires:365});
$.post('/webGui/include/SmartInfo.php',{cmd:'long',port:'<?=$dev?>',name:'<?=$name?>'},function(){timers.testUpdate = setTimeout(testUpdate,0);});
} else {
clearTimeout(timers.testUpdate);
$.removeCookie('test.<?=addslashes(htmlspecialchars($dev))?>');
$.post('/webGui/include/SmartInfo.php',{cmd:'stop',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'},function(){setTimeout(testUpdate,0);});
$.removeCookie('test.<?=$dev?>');
$.post('/webGui/include/SmartInfo.php',{cmd:'stop',port:'<?=$dev?>',name:'<?=$name?>'},function(){setTimeout(testUpdate,0);});
}
}
$(function() {
var smarttest = $.cookie('test.<?=addslashes(htmlspecialchars($dev))?>');
var smarttest = $.cookie('test.<?=$dev?>');
testUpdate(smarttest===undefined);
if (smarttest !== undefined) $('#'+smarttest+'_test').val("_(Stop)_").removeAttr('disabled');
$.post('/webGui/include/SmartInfo.php',{cmd:'selftest',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'},function(data){$('#selftest').html(data);});
$.post('/webGui/include/SmartInfo.php',{cmd:'errorlog',port:'<?=addslashes(htmlspecialchars($dev))?>',name:'<?=addslashes(htmlspecialchars($name))?>'},function(data){$('#errorlog').html(data);});
$.post('/webGui/include/SmartInfo.php',{cmd:'selftest',port:'<?=$dev?>',name:'<?=$name?>'},function(data){$('#selftest').html(data);});
$.post('/webGui/include/SmartInfo.php',{cmd:'errorlog',port:'<?=$dev?>',name:'<?=$name?>'},function(data){$('#errorlog').html(data);});
});
</script>
+6 -6
View File
@@ -4,8 +4,8 @@ Icon="icon-eula"
Tag="file-text-o"
---
<?PHP
/* Copyright 2005-2021, Lime Technology
* Copyright 2012-2021, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -52,7 +52,7 @@ $(function(){
});
function validatePort(form) {
var portsInUse = JSON.parse('<?=json_encode($portsInUse)?>');
var currentPort = "<?=($syslog['local_server'] && $syslog['server_protocol'] != "udp") ? $syslog['server_port'] : "0"?>";
var currentPort = "<?=(isset($syslog['local_server']) && $syslog['server_protocol']??''!='udp') ? $syslog['server_port']??'0' : '0'?>";
var port = $(form).find('input[name="server_port"]');
var remotePort = $(form).find('input[name="remote_port"]');
var protocol = $(form).find('select[name="server_protocol"]').val();
@@ -98,7 +98,7 @@ _(Local syslog server)_:
<?=mk_option($syslog['server_protocol'], "tcp", _("TCP"))?>
<?=mk_option($syslog['server_protocol'], "both", _("Both"))?>
</select>
<input type="text" name="server_port" class="trim" value="<?=$syslog['server_port']?>" maxlength="5" placeholder="514">
<input type="text" name="server_port" class="trim" value="<?=$syslog['server_port']??''?>" maxlength="5" placeholder="514">
:syslog_local_server_help:
@@ -149,12 +149,12 @@ _(Local syslog number of files)_:
</div>
_(Remote syslog server)_:
: <span class="span"><input type="text" name="remote_server" class="narrow" value="<?=$syslog['remote_server']?>" maxlength="23" placeholder="_(name or ip address)_"></span>
: <span class="span"><input type="text" name="remote_server" class="narrow" value="<?=$syslog['remote_server']??''?>" maxlength="23" placeholder="_(name or ip address)_"></span>
<select name="remote_protocol" class="narrow" size="1">
<?=mk_option($syslog['remote_protocol'], "udp", _("UDP"))?>
<?=mk_option($syslog['remote_protocol'], "tcp", _("TCP"))?>
</select>
<input type="number" name="remote_port" class="trim" value="<?=$syslog['remote_port']?>" maxlength="5" placeholder="514" pattern="([0-9]{1,5})">
<input type="number" name="remote_port" class="trim" value="<?=$syslog['remote_port']??''?>" maxlength="5" placeholder="514" pattern="([0-9]{1,5})">
:syslog_remote_server_help:
+15 -15
View File
@@ -114,8 +114,8 @@ function readConf(&$peer_wg,&$wg,$vtun) {
}
}
$wg = array_merge($wg,$more);
[$subnet,$mask] = my_explode('/',$wg['Network:0']);
[$subnet6,$mask6] = my_explode('/',$wg['Network6:0']);
[$subnet,$mask] = my_explode('/',$wg['Network:0']??'');
[$subnet6,$mask6] = my_explode('/',$wg['Network6:0']??'');
$netbase[$vtun] = ip2long($subnet) & (0x100000000-2**(32-$mask));
$netbase6[$vtun] = $subnet6 ?: $netpool6[$vtun];
} else {
@@ -1282,38 +1282,38 @@ _(Network protocol)_:
<div markdown="1" class="ipv4 wg0" style="display:none">
_(Local tunnel network pool)_:
<input type="hidden" name="Network:0" value="">
: <span class="input"><input type="text" name="gui:Network:0" class="subnet" maxlength="15" value="<?=explode('/',$wg0['Network:0'])[0]?>" onchange="setPool($(document.wg0),'wg0')" pattern="<?=$validIP4?>" title="_(IPv4 network)_" placeholder="<?=$netpool['wg0']?>">/
<input type="number" name="gui:Mask:0" class="mask" min="1" max="32" value="<?=explode('/',$wg0['Network:0'])[1]?>" onchange="if(quickValidate(this)) {setPool($(document.wg0),'wg0')}" placeholder="24"></span>
: <span class="input"><input type="text" name="gui:Network:0" class="subnet" maxlength="15" value="<?=explode('/',$wg0['Network:0']??'')[0]?>" onchange="setPool($(document.wg0),'wg0')" pattern="<?=$validIP4?>" title="_(IPv4 network)_" placeholder="<?=$netpool['wg0']?>">/
<input type="number" name="gui:Mask:0" class="mask" min="1" max="32" value="<?=my_explode('/',$wg0['Network:0']??'')[1]?>" onchange="if(quickValidate(this)) {setPool($(document.wg0),'wg0')}" placeholder="24"></span>
</div>
<div markdown="1" class="ipv6 wg0" style="display:none">
_(Local tunnel network pool IPv6)_:
<input type="hidden" name="Network6:0" value="">
: <span class="input"><input type="text" name="gui:Network6:0" class="subnet" maxlength="40" value="<?=explode('/',$wg0['Network6:0'])[0]?>" onchange="setPool6($(document.wg0),'wg0')" pattern="<?=$validIP6?>" title="_(IPv6 network)_" placeholder="<?=$netpool6['wg0']?>">/
<input type="number" name="gui:Mask6:0" class="mask" min="1" max="128" value="<?=explode('/',$wg0['Network6:0'])[1]?>" onchange="if(quickValidate(this)) {setPool6($(document.wg0),'wg0')}" placeholder="64"></span>
: <span class="input"><input type="text" name="gui:Network6:0" class="subnet" maxlength="40" value="<?=explode('/',$wg0['Network6:0']??'')[0]?>" onchange="setPool6($(document.wg0),'wg0')" pattern="<?=$validIP6?>" title="_(IPv6 network)_" placeholder="<?=$netpool6['wg0']?>">/
<input type="number" name="gui:Mask6:0" class="mask" min="1" max="128" value="<?=my_explode('/',$wg0['Network6:0']??'')[1]?>" onchange="if(quickValidate(this)) {setPool6($(document.wg0),'wg0')}" placeholder="64"></span>
</div>
:wg_local_tunnel_network_pool_help:
<div markdown="1" class="ipv4 wg0" style="display:none">
_(Local tunnel address)_:
: <span class="input"><input type="text" name="Address:0" class="subnet" maxlength="15" value="<?=$wg0['Address:0']?:long2ip($netbase['wg0']+1)?>" onchange="verifyInSubnet(this)" pattern="<?=$validIP4?>" title="_(IPv4 address)_"></span>
: <span class="input"><input type="text" name="Address:0" class="subnet" maxlength="15" value="<?=$wg0['Address:0']??long2ip($netbase['wg0']+1)?>" onchange="verifyInSubnet(this)" pattern="<?=$validIP4?>" title="_(IPv4 address)_"></span>
:wg_local_tunnel_address_help:
</div>
<div markdown="1" class="ipv6 wg0" style="display:none">
_(Local tunnel address IPv6)_:
: <span class="input"><input type="text" name="Address6:0" class="subnet" maxlength="40" value="<?=$wg0['Address6:0']?:($netbase6['wg0'].'1')?>" onchange="verifyInSubnet6(this)" pattern="<?=$validIP6?>" title="_(IPv6 address)_"></span>
: <span class="input"><input type="text" name="Address6:0" class="subnet" maxlength="40" value="<?=$wg0['Address6:0']??($netbase6['wg0'].'1')?>" onchange="verifyInSubnet6(this)" pattern="<?=$validIP6?>" title="_(IPv6 address)_"></span>
:wg_local_tunnel_address_help:
</div>
</div>
_(Local endpoint)_:
: <span class="input"><input type="text" id="endpoint-wg0" name="Endpoint:0" class="subnet" value="<?=$vpn_wg0?'':$wg0['Endpoint:0']?>" onchange="toLC(this);quickValidate(this);" pattern="<?=$validText?>" title="_(IP address or FQDN)_" placeholder="<?=$vpn_wg0?'(_(not used)_)':preg_replace('/^(.+?\.)[0-9a-zA-Z]+(\.(my)?unraid.net)$/','$1<hash>$2',$public)?>">:
<input type="number" name="gui:ListenPort:0" class="port" min="1" max="65535" value="<?=$vpn_wg0?'':$wg0['ListenPort:0']?>" onchange="if(quickValidate(this)) {portRemark($(document.wg0),'wg0',this.value)}" placeholder="<?=$vpn_wg0?'':$netport['wg0']?>"></span>
<span class="remark block" style="display:none">_(Remark)_: _(configure your router with port forwarding of port)_ **<span id="my-port-wg0"><?=$wg0['ListenPort:0']?:$netport['wg0']?></span>/_(UDP)_** _(to)_ **<?=$server?>:<?=$wg0['ListenPort:0']?:$netport['wg0']?>**</span><span class="upnp wg0 block"></span>
: <span class="input"><input type="text" id="endpoint-wg0" name="Endpoint:0" class="subnet" value="<?=$vpn_wg0?'':$wg0['Endpoint:0']??''?>" onchange="toLC(this);quickValidate(this);" pattern="<?=$validText?>" title="_(IP address or FQDN)_" placeholder="<?=$vpn_wg0?'(_(not used)_)':preg_replace('/^(.+?\.)[0-9a-zA-Z]+(\.(my)?unraid.net)$/','$1<hash>$2',$public)?>">:
<input type="number" name="gui:ListenPort:0" class="port" min="1" max="65535" value="<?=$vpn_wg0?'':$wg0['ListenPort:0']??''?>" onchange="if(quickValidate(this)) {portRemark($(document.wg0),'wg0',this.value)}" placeholder="<?=$vpn_wg0?'':$netport['wg0']?>"></span>
<span class="remark block" style="display:none">_(Remark)_: _(configure your router with port forwarding of port)_ **<span id="my-port-wg0"><?=$wg0['ListenPort:0']??$netport['wg0']??''?></span>/_(UDP)_** _(to)_ **<?=$server?>:<?=$wg0['ListenPort:0']??$netport['wg0']??''?>**</span><span class="upnp wg0 block"></span>
<input type="hidden" name="ListenPort:0" value=""><dl id="endpoint4-wg0" style="display:none"></dl><dl id="endpoint6-wg0" style="display:none"></dl>
:wg_local_endpoint_help:
@@ -1421,13 +1421,13 @@ _(Peer preshared key)_:
<div markdown="1" class="ipv4 wg0" style="display:none">
_(Peer tunnel address)_:
: <span class="input"><input type="text" name="Address:<?=$i?>" class="subnet" maxlength="15" value="<?=$wg0["Address:$i"]??''?>" onchange="if(verifyInSubnet(this)){setAllow($(document.wg0),this.value,<?=$i?>)}" pattern="<?=$validIP4?>" title="_(IPv4 address)_"></span>
<input type="button" class="form ping-button1-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wg0),this,'input[name=&quot;Address:<?=$i?>&quot;]')"<?=$wg0["Address:$i"]?'':' disabled'?>>
<input type="button" class="form ping-button1-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wg0),this,'input[name=&quot;Address:<?=$i?>&quot;]')"<?=isset($wg0["Address:$i"])?'':' disabled'?>>
</div>
<div markdown="1" class="ipv6 wg0" style="display:none">
_(Peer tunnel address IPv6)_:
: <span class="input"><input type="text" name="Address6:<?=$i?>" class="subnet" maxlength="40" value="<?=$wg0["Address6:$i"]??''?>" onchange="if(verifyInSubnet6(this)){setAllow6($(document.wg0),this.value,<?=$i?>)}" pattern="<?=$validIP6?>" title="_(IPv6 address)_"></span>
<input type="button" class="form ping-button6-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wg0),this,'input[name=&quot;Address6:<?=$i?>&quot;]')"<?=$wg0["Address6:$i"]?'':' disabled'?>>
<input type="button" class="form ping-button6-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wg0),this,'input[name=&quot;Address6:<?=$i?>&quot;]')"<?=isset($wg0["Address6:$i"])?'':' disabled'?>>
</div>
:wg_peer_tunnel_address_help:
@@ -1435,8 +1435,8 @@ _(Peer tunnel address IPv6)_:
_(Peer endpoint)_:
<input type="hidden" name="Endpoint:<?=$i?>" value="">
: <span class="input"><input type="text" name="gui:Endpoint:<?=$i?>" class="subnet" value="<?=$wg0["Endpoint:$i"]??''?>" pattern="<?=$validText?>" title="_(IP address or FQDN)_" onchange="toLC(this);quickValidate(this);" <?=($vpn_wg0||(int)$wg0["TYPE:$i"]==2||(int)$wg0["TYPE:$i"]==3)?'placeholder="(_(mandatory)_)" required':'placeholder="(_(not used)_)"'?>>:
<input type="number" name="gui:ListenPort:<?=$i?>" class="port" min="1" max="65535" value="<?=$wg0["ListenPort:$i"]??''?>" onchange="quickValidate(this);"<?=$wg0["Endpoint:$i"]?" placeholder=\"".($wg0['ListenPort:0']?:$netport['wg0'])."\"":""?>></span>
<input type="button" class="form ping-button2-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wg0),this,'input[name=&quot;gui:Endpoint:<?=$i?>&quot;]')"<?=$wg0["Endpoint:$i"]?'':' disabled'?>>
<input type="number" name="gui:ListenPort:<?=$i?>" class="port" min="1" max="65535" value="<?=$wg0["ListenPort:$i"]??''?>" onchange="quickValidate(this);"<?=isset($wg0["Endpoint:$i"])?" placeholder=\"".($wg0['ListenPort:0']??$netport['wg0']??'')."\"":""?>></span>
<input type="button" class="form ping-button2-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wg0),this,'input[name=&quot;gui:Endpoint:<?=$i?>&quot;]')"<?=isset($wg0["Endpoint:$i"])?'':' disabled'?>>
:wg_peer_endpoint_help:
+13 -13
View File
@@ -195,38 +195,38 @@ _(Network protocol)_:
<div markdown="1" class="ipv4 wgX" style="display:none">
_(Local tunnel network pool)_:
<input type="hidden" name="Network:0" value="">
: <span class="input"><input type="text" name="gui:Network:0" class="subnet" maxlength="15" value="<?=explode('/',$wgX['Network:0'])[0]?>" onchange="setPool($(document.wgX),'wgX')" pattern="<?=$validIP4?>" title="_(IPv4 network)_" placeholder="<?=$netpool['wgX']?>">/
<input type="number" name="gui:Mask:0" class="mask" min="1" max="32" value="<?=explode('/',$wgX['Network:0'])[1]?>" onchange="if(quickValidate(this)) {setPool($(document.wgX),'wgX')}" placeholder="24"></span>
: <span class="input"><input type="text" name="gui:Network:0" class="subnet" maxlength="15" value="<?=explode('/',$wgX['Network:0']??'')[0]?>" onchange="setPool($(document.wgX),'wgX')" pattern="<?=$validIP4?>" title="_(IPv4 network)_" placeholder="<?=$netpool['wgX']?>">/
<input type="number" name="gui:Mask:0" class="mask" min="1" max="32" value="<?=my_explode('/',$wgX['Network:0'])[1]?>" onchange="if(quickValidate(this)) {setPool($(document.wgX),'wgX')}" placeholder="24"></span>
</div>
<div markdown="1" class="ipv6 wgX" style="display:none">
_(Local tunnel network pool IPv6)_:
<input type="hidden" name="Network6:0" value="">
: <span class="input"><input type="text" name="gui:Network6:0" class="subnet" maxlength="40" value="<?=explode('/',$wgX['Network6:0'])[0]?>" onchange="setPool6($(document.wgX),'wgX')" pattern="<?=$validIP6?>" title="_(IPv6 network)_" placeholder="<?=$netpool6['wgX']?>">/
<input type="number" name="gui:Mask6:0" class="mask" min="1" max="128" value="<?=explode('/',$wgX['Network6:0'])[1]?>" onchange="if(quickValidate(this)) {setPool6($(document.wgX),'wgX')}" placeholder="64"></span>
: <span class="input"><input type="text" name="gui:Network6:0" class="subnet" maxlength="40" value="<?=explode('/',$wgX['Network6:0']??'')[0]?>" onchange="setPool6($(document.wgX),'wgX')" pattern="<?=$validIP6?>" title="_(IPv6 network)_" placeholder="<?=$netpool6['wgX']?>">/
<input type="number" name="gui:Mask6:0" class="mask" min="1" max="128" value="<?=my_explode('/',$wgX['Network6:0']??'')[1]?>" onchange="if(quickValidate(this)) {setPool6($(document.wgX),'wgX')}" placeholder="64"></span>
</div>
:wg_local_tunnel_network_pool_X_help:
<div markdown="1" class="ipv4 wgX" style="display:none">
_(Local tunnel address)_:
: <span class="input"><input type="text" name="Address:0" class="subnet" maxlength="15" value="<?=$wgX['Address:0']?:long2ip($netbase['wgX']+1)?>" onchange="verifyInSubnet(this);" pattern="<?=$validIP4?>" title="_(IPv4 address)_"></span>
: <span class="input"><input type="text" name="Address:0" class="subnet" maxlength="15" value="<?=$wgX['Address:0']??long2ip($netbase['wgX']+1)?>" onchange="verifyInSubnet(this);" pattern="<?=$validIP4?>" title="_(IPv4 address)_"></span>
:wg_local_tunnel_address_help:
</div>
<div markdown="1" class="ipv6 wgX" style="display:none">
_(Local tunnel address IPv6)_:
: <span class="input"><input type="text" name="Address6:0" class="subnet" maxlength="40" value="<?=$wgX['Address6:0']?:($netbase6['wgX'].'1')?>" onchange="verifyInSubnet6(this);" pattern="<?=$validIP6?>" title="_(IPv6 address)_"></span>
: <span class="input"><input type="text" name="Address6:0" class="subnet" maxlength="40" value="<?=$wgX['Address6:0']??($netbase6['wgX'].'1')?>" onchange="verifyInSubnet6(this);" pattern="<?=$validIP6?>" title="_(IPv6 address)_"></span>
:wg_local_tunnel_address_help:
</div>
</div>
_(Local endpoint)_:
: <span class="input"><input type="text" id="endpoint-wgX" name="Endpoint:0" class="subnet" value="<?=$vpn_wgX?'':$wgX['Endpoint:0']?>" onchange="toLC(this);quickValidate(this);" pattern="<?=$validText?>" title="_(IP address or FQDN)_" placeholder="<?=$vpn_wgX?'(_(not used)_)':preg_replace('/^(www\.).+(\.unraid.net)$/','$1<hash>$2',$public)?>">:
<input type="number" name="gui:ListenPort:0" class="port" min="1" max="65535" value="<?=$vpn_wgX?'':$wgX['ListenPort:0']?>" onchange="if(quickValidate(this)) {portRemark($(document.wgX),'wgX',this.value)}" placeholder="<?=$vpn_wgX?'':$netport['wgX']?>"></span>
<span class="remark block" style="display:none">_(Remark)_: _(configure your router with port forwarding of port)_ **<span id="my-port-wgX"><?=$wgX['ListenPort:0']?:$netport['wgX']?></span>/_(UDP)_** _(to)_ **<?=$server?>:<?=$wgX['ListenPort:0']?:$netport['wgX']?>**</span><span class="upnp wgX block"></span>
: <span class="input"><input type="text" id="endpoint-wgX" name="Endpoint:0" class="subnet" value="<?=$vpn_wgX?'':$wgX['Endpoint:0']??''?>" onchange="toLC(this);quickValidate(this);" pattern="<?=$validText?>" title="_(IP address or FQDN)_" placeholder="<?=$vpn_wgX?'(_(not used)_)':preg_replace('/^(www\.).+(\.unraid.net)$/','$1<hash>$2',$public)?>">:
<input type="number" name="gui:ListenPort:0" class="port" min="1" max="65535" value="<?=$vpn_wgX?'':$wgX['ListenPort:0']??''?>" onchange="if(quickValidate(this)) {portRemark($(document.wgX),'wgX',this.value)}" placeholder="<?=$vpn_wgX?'':$netport['wgX']??''?>"></span>
<span class="remark block" style="display:none">_(Remark)_: _(configure your router with port forwarding of port)_ **<span id="my-port-wgX"><?=$wgX['ListenPort:0']??$netport['wgX']?></span>/_(UDP)_** _(to)_ **<?=$server?>:<?=$wgX['ListenPort:0']??$netport['wgX']??''?>**</span><span class="upnp wgX block"></span>
<input type="hidden" name="ListenPort:0" value=""><dl id="endpoint4-wgX" style="display:none"></dl><dl id="endpoint6-wgX" style="display:none"></dl>
:wg_local_endpoint_X_help:
@@ -334,13 +334,13 @@ _(Peer preshared key)_:
<div markdown="1" class="ipv4 wgX" style="display:none">
_(Peer tunnel address)_:
: <span class="input"><input type="text" name="Address:<?=$i?>" class="subnet" maxlength="15" value="<?=$wgX["Address:$i"]??''?>" onchange="if(verifyInSubnet(this)){setAllow($(document.wgX),this.value,<?=$i?>)}" pattern="<?=$validIP4?>" title="_(IPv4 address)_"></span>
<input type="button" class="form ping-button1-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wgX),this,'input[name=&quot;Address:<?=$i?>&quot;]')"<?=$wgX["Address:$i"]?'':' disabled'?>>
<input type="button" class="form ping-button1-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wgX),this,'input[name=&quot;Address:<?=$i?>&quot;]')"<?=isset($wgX["Address:$i"])?'':' disabled'?>>
</div>
<div markdown="1" class="ipv6 wgX" style="display:none">
_(Peer tunnel address IPv6)_:
: <span class="input"><input type="text" name="Address6:<?=$i?>" class="subnet" maxlength="40" value="<?=$wgX["Address6:$i"]??''?>" onchange="if(verifyInSubnet6(this)){setAllow6($(document.wgX),this.value,<?=$i?>)}" pattern="<?=$validIP6?>" title="_(IPv6 address)_"></span>
<input type="button" class="form ping-button6-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wgX),this,'input[name=&quot;Address6:<?=$i?>&quot;]')"<?=$wgX["Address6:$i"]?'':' disabled'?>>
<input type="button" class="form ping-button6-<?=$i?>" value="_(Ping)_" onclick="ping($(document.wgX),this,'input[name=&quot;Address6:<?=$i?>&quot;]')"<?=isset($wgX["Address6:$i"])?'':' disabled'?>>
</div>
:wg_peer_tunnel_address_help:
@@ -348,8 +348,8 @@ _(Peer tunnel address IPv6)_:
_(Peer endpoint)_:
<input type="hidden" name="Endpoint:<?=$i?>" value="">
: <span class="input"><input type="text" name="gui:Endpoint:<?=$i?>" class="subnet" value="<?=$wgX["Endpoint:$i"]??''?>" pattern="<?=$validText?>" title="_(IP address or FQDN)_" onchange="toLC(this);quickValidate(this);" <?=($vpn_wgX||(int)$wgX["TYPE:$i"]==2||(int)$wgX["TYPE:$i"]==3)?'placeholder="(_(mandatory)_)" required':'placeholder="(_(not used)_)"'?>>:
<input type="number" name="gui:ListenPort:<?=$i?>" class="port" min="1" max="65535" value="<?=$wgX["ListenPort:$i"]??''?>" onchange="quickValidate(this);"<?=$wgX["Endpoint:$i"]?" placeholder=\"".($wgX['ListenPort:0']?:$netport['wgX'])."\"":""?>></span>
<input type="button" class="form ping-button2-<?=$i?>" value="Ping" onclick="ping($(document.wgX),this,'input[name=&quot;gui:Endpoint:<?=$i?>&quot;]')"<?=$wgX["Endpoint:$i"]?'':' disabled'?>>
<input type="number" name="gui:ListenPort:<?=$i?>" class="port" min="1" max="65535" value="<?=$wgX["ListenPort:$i"]??''?>" onchange="quickValidate(this);"<?=isset($wgX["Endpoint:$i"])?" placeholder=\"".($wgX['ListenPort:0']??$netport['wgX']??'')."\"":""?>></span>
<input type="button" class="form ping-button2-<?=$i?>" value="Ping" onclick="ping($(document.wgX),this,'input[name=&quot;gui:Endpoint:<?=$i?>&quot;]')"<?=isset($wgX["Endpoint:$i"])?'':' disabled'?>>
:wg_peer_endpoint_help:
@@ -964,7 +964,7 @@ $(function() {
<?if ($safemode):?>
showNotice("<?=_('System running in')?> <b><?=('safe mode')?></b>");
<?else:?>
<?$readme = @file_get_contents("$docroot/plugins/unRAIDServer/README.md",false,null,0,20);?>
<?$readme = @file_get_contents("$docroot/plugins/unRAIDServer/README.md",false,null,0,20)??'';?>
<?if (strpos($readme,'REBOOT REQUIRED')!==false):?>
showUpgrade("<b><?=_('Reboot Now')?></b> <?=_('to upgrade Unraid OS')?>",true);
<?elseif (strpos($readme,'DOWNGRADE')!==false):?>
+1 -1
View File
@@ -45,7 +45,7 @@ function my_number($value) {
function my_time($time, $fmt=NULL) {
global $display;
if (!$fmt) $fmt = $display['date'].($display['date']!='%c' ? ", {$display['time']}" : "");
return $time ? strftime($fmt, $time) : _('unknown');
return $time ? my_date($fmt, $time) : _('unknown');
}
function my_temp($value) {
global $display;
@@ -21,7 +21,7 @@ require_once "$docroot/webGui/include/Wrappers.php";
$dynamix = parse_plugin_cfg('dynamix',true);
$filter = unscript($_GET['filter']??'');
$files = glob("{$dynamix['notify']['path']}/archive/*.notify", GLOB_NOSORT);
usort($files, create_function('$a,$b', 'return filemtime($b)-filemtime($a);'));
usort($files, function($a,$b){return filemtime($b)-filemtime($a);});
$row = 1; $empty = true;
foreach ($files as $file) {
+11 -6
View File
@@ -1,6 +1,6 @@
<?PHP
/* Copyright 2005-2021, Lime Technology
* Copyright 2012-2021, Bergware International.
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -41,7 +41,7 @@ function get_plugin_attr($attr, $file) {
function plugin_update_available($plugin, $os=false) {
$local = get_plugin_attr('version', "/var/log/plugins/$plugin.plg");
$remote = get_plugin_attr('version', "/tmp/plugins/$plugin.plg");
if (strcmp($remote,$local)>0) {
if ($remote && strcmp($remote,$local)>0) {
if ($os) return $remote;
if (!$unraid = get_plugin_attr('Unraid', "/tmp/plugins/$plugin.plg")) return $remote;
$server = get_plugin_attr('version', "/var/log/plugins/unRAIDServer.plg");
@@ -56,9 +56,9 @@ function get_value(&$object, $name, $default) {
function get_ctlr_options(&$type, &$disk) {
if (!$type) return;
$ports = [];
if (strlen($disk['smPort1'])) $ports[] = $disk['smPort1'];
if (strlen($disk['smPort2'])) $ports[] = $disk['smPort2'];
if (strlen($disk['smPort3'])) $ports[] = $disk['smPort3'];
if (isset($disk['smPort1'])) $ports[] = $disk['smPort1'];
if (isset($disk['smPort2'])) $ports[] = $disk['smPort2'];
if (isset($disk['smPort3'])) $ports[] = $disk['smPort3'];
$type .= ($ports ? ','.implode($disk['smGlue'] ?? ',',$ports) : '');
}
function port_name($port) {
@@ -83,4 +83,9 @@ function ipaddr($ethX='eth0', $prot=4) {
return $$ethX['IPADDR:0'];
}
}
// convert strftime to date format
function my_date($fmt, $time) {
$legacy = ['%c' => 'D j M Y h:i:s A T','%A' => 'l','%Y' => 'Y','%B' => 'F','%e' => 'j','%d' => 'd','%m' => 'm','%I' => 'h','%H' => 'H','%M' => 'i','%S' => 's','%p' => 'a','%R' => 'H:i'];
return date(strtr($fmt,$legacy), $time);
}
?>
+4 -4
View File
@@ -139,7 +139,7 @@ function fs_info(&$disk) {
if (empty($disk['fsStatus']) || $disk['fsStatus']=='-') {
return ($disk['type']=='Cache' && !in_array($disk['name'],$pools)) ? "<td colspan='4'>"._('Device is part of a pool')."</td><td></td>" : "<td colspan='5'></td>";
} elseif ($disk['fsStatus']=='Mounted') {
$echo[] = "<td>".vfs_type($disk['fsType'])."</td>";
$echo[] = "<td>".vfs_type($disk['fsType']??'')."</td>";
$echo[] = "<td>".my_scale(($disk['fsSize']??0)*1024,$unit,-1)." $unit</td>";
if ($display['text']%10==0) {
$echo[] = "<td>".my_scale($disk['fsUsed']*1024,$unit)." $unit</td>";
@@ -155,7 +155,7 @@ function fs_info(&$disk) {
}
$echo[] = "<td>".device_browse($disk)."</td>";
} else {
$echo[] = "<td>".vfs_type($disk['fsType'])."</td><td colspan='4' style='text-align:center'>"._($disk['fsStatus'])."</td>";
$echo[] = "<td>".vfs_type($disk['fsType']??'')."</td><td colspan='4' style='text-align:center'>"._($disk['fsStatus'])."</td>";
}
return implode($echo);
}
@@ -389,7 +389,7 @@ while (true) {
$echo[0] = "array_devices\n";
$parity = parity_filter($disks);
$data = data_filter($disks);
foreach ($data as $disk) $crypto |= $disk['luksState']!=0 || vfs_luks($disk['fsType']);
foreach ($data as $disk) $crypto |= $disk['luksState']!=0 || vfs_luks($disk['fsType']??'');
if ($var['fsState']=='Stopped') {
foreach ($parity as $disk) $echo[0] .= array_offline($disk);
$echo[0] .= "<tr class='tr_last'><td style='height:12px' colspan='11'></td></tr>";
@@ -421,7 +421,7 @@ while (true) {
$cache = cache_filter($disks); $n = 2;
foreach ($pools as $pool) {
$echo[$n] = "pool_device".($n-2)."\n";
foreach ($cache as $disk) if (prefix($disk['name'])==$pool) $crypto |= $disk['luksState']!=0 || vfs_luks($disk['fsType']);
foreach ($cache as $disk) if (prefix($disk['name'])==$pool) $crypto |= $disk['luksState']!=0 || vfs_luks($disk['fsType']??'');
if ($var['fsState']=='Stopped') {
$log = file_exists($pool_log) ? parse_ini_file($pool_log) : [];
$off = false;
+1 -1
View File
@@ -456,7 +456,7 @@ while (true) {
$echo[4] .= "\0";
if ($check) {
$frmt = $display['date'].($display['date']!='%c' ? ", {$display['time']}" : "");
$echo[4] .= sprintf(_('Next check scheduled on **%s**'),_(strftime($frmt,$time+$t),0));
$echo[4] .= sprintf(_('Next check scheduled on **%s**'),_(my_date($frmt,$time+$t),0));
$echo[4] .= "<br><i class='fa fa-fw fa-clock-o'></i> "._('Due in').": "._(my_clock(floor($t/60)),2);
} else {
$echo[4] .= _('Scheduled parity check is disabled');
+1 -1
View File
@@ -225,7 +225,7 @@ case 'get':
$output = [];
$json = [];
$files = glob("$unread/*.notify", GLOB_NOSORT);
usort($files, create_function('$a,$b', 'return filemtime($a)-filemtime($b);'));
usort($files, function($a,$b){return filemtime($a)-filemtime($b);});
$i = 0;
foreach ($files as $file) {
if (!is_readable($file)) continue;
+3 -3
View File
@@ -71,7 +71,7 @@ function my_check($time,$speed) {
}
function my_time($time) {
global $unraid;
$date = strftime($unraid['display']['date'].($unraid['display']['date']!='%c' ? ", {$unraid['display']['time']}" : ""), $time);
$date = my_date($unraid['display']['date'].($unraid['display']['date']!='%c' ? ", {$unraid['display']['time']}" : ""), $time);
$now = new DateTime("@".intval(time()/86400)*86400);
$last = new DateTime("@".intval($time/86400)*86400);
$days = date_diff($last,$now)->format('%a');
@@ -97,8 +97,8 @@ function my_clock($time) {
function my_array(&$disk) {
global $data,$unraid,$error0,$error1,$error2,$error3;
$name = $disk['name'];
$hot = strlen($disk['hotTemp']) ? $disk['hotTemp'] : $unraid['display']['hot'];
$max = strlen($disk['maxTemp']) ? $disk['maxTemp'] : $unraid['display']['max'];
$hot = $disk['hotTemp'] ?? $unraid['display']['hot'] ?? 0;
$max = $disk['maxTemp'] ?? $unraid['display']['max'] ?? 0;
if (strpos($disk['status'],'_NP')!==false) return false;
$temp = $disk['temp'];
if ($temp>=$max) {