mirror of
https://github.com/unraid/webgui.git
synced 2026-05-21 05:39:37 -05:00
Merge pull request #649 from bergware/mutli-language
Show message when too many files for browsing
This commit is contained in:
@@ -14,14 +14,18 @@ Markdown="false"
|
||||
* all copies or substantial portions of the Software.
|
||||
*/
|
||||
?>
|
||||
<?
|
||||
[$root,$main,$rest] = explode('/',substr($dir,1),3);
|
||||
$user = ($root=='mnt' && ($main=='user'|| $main=='user0')) ? 1 : 0;
|
||||
?>
|
||||
<style>
|
||||
.loc{text-align:left;white-space:nowrap}
|
||||
.loc{text-align:left!important;padding-left:0!important}
|
||||
#title span.left{text-transform:none}
|
||||
</style>
|
||||
<script>
|
||||
$(function(){
|
||||
timers.browse = setTimeout(function(){$('div.spinner.fixed').show('slow');},500);
|
||||
$.get('/webGui/include/Browse.php',{dir:"<?=addslashes(urlencode($dir))?>",path:"<?=$path?>",user:<?=strpos($dir,'/mnt/user')===0?1:0?>},function(data){
|
||||
$.get('/webGui/include/Browse.php',{dir:"<?=addslashes(urlencode($dir))?>",path:"<?=$path?>",user:<?=$user?>},function(data){
|
||||
clearTimeout(timers.browse);
|
||||
var table = $('table.indexer');
|
||||
var col = $.cookie('col')||1;
|
||||
@@ -38,7 +42,7 @@ $(function(){
|
||||
});
|
||||
</script>
|
||||
<table class="indexer tablesorter shift">
|
||||
<thead><tr><th>_(Type)_</th><th class='sorter-text'>_(Name)_</th><th>_(Size)_</th><th>_(Last Modified)_</th><th>_(Location)_</th></tr></thead>
|
||||
<tbody><tr><td colspan="5"></td></tr></tbody>
|
||||
<thead><tr><th>_(Type)_</th><th class='sorter-text'>_(Name)_</th><th>_(Size)_</th><th>_(Last Modified)_</th><th style="width:200px">_(Location)_</th></tr></thead>
|
||||
<tbody><tr><td colspan="5"> </td></tr></tbody>
|
||||
</table>
|
||||
<input type="button" value="_(Done)_" onclick="done('Browse')">
|
||||
|
||||
@@ -29,7 +29,7 @@ table.divider{margin-top:20px}
|
||||
<script>
|
||||
function validate(poolname) {
|
||||
var valid = /^[a-z_]([a-z0-9_-]*[a-z_])*$/;
|
||||
var reserved = ['disk','disks','diskp','diskq','diskr','flash','parity','parity2'];
|
||||
var reserved = [<?=implode(',',array_map('escapeshellarg',explode(',',$var['reservedNames'])))?>];
|
||||
var shares = [<?=implode(',',array_map('escapeshellarg',array_filter(array_map('sharename',scandir('boot/config/shares')))))?>];
|
||||
var pools = [<?=implode(',',array_map('escapeshellarg',$pools))?>];
|
||||
if (!poolname.trim()) return false;
|
||||
|
||||
@@ -101,7 +101,7 @@ $cache_only = $encrypted = 0;
|
||||
foreach ($shares as $share) {
|
||||
$names[] = $share['name'];
|
||||
if ($share['useCache']=='only') $cache_only++;
|
||||
if ($share['luksStatus']) $encrypted++;
|
||||
if ($share['luksStatus']>0) $encrypted++;
|
||||
}
|
||||
$names = implode(',',$names);
|
||||
$passwd = $nopass = 0;
|
||||
@@ -157,7 +157,7 @@ if ($low) $memory_maximum = pow(2,ceil(log($memory_installed)/log(2)));
|
||||
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.switchbutton.css')?>">
|
||||
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.ui.css')?>">
|
||||
<style>
|
||||
div.frame{float:left;margin:14px 0 0 0}
|
||||
div.frame{float:left;margin:14px 0}
|
||||
div#iframe-popup{display:none;-webkit-overflow-scrolling:touch}
|
||||
div.last{padding-bottom:12px}
|
||||
div.left{float:left;width:66%;margin-top:-12px}
|
||||
@@ -642,14 +642,14 @@ function smartMenu(table) {
|
||||
var page = $(this).attr('name');
|
||||
var view = $(this).attr('class');
|
||||
var disk = id.substr(id.indexOf('-')+1);
|
||||
opts.push({text:'Attributes',icon:'fa-sitemap',action:function(e){e.preventDefault();attributes(page,disk);}});
|
||||
opts.push({text:'_(Attributes)_',icon:'fa-sitemap',action:function(e){e.preventDefault();attributes(page,disk);}});
|
||||
opts.push({divider:true});
|
||||
opts.push({text:'Capabilities',icon:'fa-user',action:function(e){e.preventDefault();capabilities(page,disk);}});
|
||||
opts.push({text:'_(Capabilities)_',icon:'fa-user',action:function(e){e.preventDefault();capabilities(page,disk);}});
|
||||
opts.push({divider:true});
|
||||
opts.push({text:'Identity',icon:'fa-home',action:function(e){e.preventDefault();identity(page,disk);}});
|
||||
opts.push({text:'_(Identity)_',icon:'fa-home',action:function(e){e.preventDefault();identity(page,disk);}});
|
||||
if (view.search('green-text') == -1) {
|
||||
opts.push({divider:true});
|
||||
opts.push({text:'Acknowledge',icon:'fa-check-square-o',action:function(e){e.preventDefault();acknowledge(disk);}});
|
||||
opts.push({text:'_(Acknowledge)_',icon:'fa-check-square-o',action:function(e){e.preventDefault();acknowledge(disk);}});
|
||||
}
|
||||
context.attach(id,opts);
|
||||
});
|
||||
|
||||
@@ -227,7 +227,7 @@ function updateMode(form,mode) {
|
||||
}
|
||||
function validate(poolname) {
|
||||
var valid = /^[a-z_]([a-z0-9_-]*[a-z_])*$/;
|
||||
var reserved = ['disk','disks','diskp','diskq','diskr','flash','parity','parity2'];
|
||||
var reserved = [<?=implode(',',array_map('escapeshellarg',explode(',',$var['reservedNames'])))?>];
|
||||
var shares = [<?=implode(',',array_map('escapeshellarg',array_filter(array_map('sharename',scandir('boot/config/shares')))))?>];
|
||||
var pools = [<?=implode(',',array_map('escapeshellarg',$pools))?>];
|
||||
if (!poolname.trim()) return false;
|
||||
|
||||
@@ -376,7 +376,8 @@ function prepareEdit(form) {
|
||||
swal({title:'_(Missing share name)_',text:'_(Enter a name for the share)_',type:'error',confirmButtonText:'_(Ok)_'});
|
||||
return false;
|
||||
}
|
||||
if (share.match('^(disk[0-9]+|cache[0-9]*|flash)$')) {
|
||||
var reserved = [<?=implode(',',array_map('escapeshellarg',explode(',',$var['reservedNames'])))?>];
|
||||
if (reserved.includes(share)) {
|
||||
swal({title:'_(Invalid share name)_',text:'_(Do not use reserved names)_',type:'error',confirmButtonText:'_(Ok)_'});
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -20,91 +20,91 @@ require_once "$docroot/webGui/include/Helpers.php";
|
||||
|
||||
function parent_link() {
|
||||
global $dir,$path;
|
||||
return ($dir && dirname($dir)!='/' && dirname($dir)!='/mnt' && dirname($dir)!='/mnt/user')
|
||||
? "<a href=\"/$path?dir=".htmlspecialchars(urlencode_path(dirname($dir)))."\">Parent Directory</a>" : "";
|
||||
return ($dir && dirname($dir)!='/' && dirname($dir)!='/mnt' && dirname($dir)!='/mnt/user') ? "<a href=\"/$path?dir=".htmlspecialchars(urlencode_path(dirname($dir)))."\">Parent Directory</a>" : "";
|
||||
}
|
||||
function trim_slash($url){
|
||||
return preg_replace('/\/\/+/','/',$url);
|
||||
return preg_replace('://+:','/',$url);
|
||||
}
|
||||
function my_name($name) {
|
||||
$names = [];
|
||||
foreach (array_map('my_disk',explode(',',$name)) as $fancy) $names[] = my_lang($fancy,3);
|
||||
return implode(', ',$names);
|
||||
function my_devs(&$devs) {
|
||||
global $disks;
|
||||
$text = []; $i = 0;
|
||||
foreach ($devs as $dev) {
|
||||
switch ($disks[$dev]['luksState']) {
|
||||
case 0: $text[$i] = "<a class='info' onclick='return false'><i class='lock fa fa-fw fa-unlock grey-text'></i><span>"._('Not encrypted')."</span></a>"; break;
|
||||
case 1: $text[$i] = "<a class='info' onclick='return false'><i class='lock fa fa-fw fa-unlock-alt green-text'></i><span>"._('Encrypted and unlocked')."</span></a>"; break;
|
||||
case 2: $text[$i] = "<a class='info' onclick='return false'><i class='lock fa fa-fw fa-lock red-text'></i><span>"._('Locked: missing encryption key')."</span></a>"; break;
|
||||
case 3: $text[$i] = "<a class='info' onclick='return false'><i class='lock fa fa-fw fa-lock red-text'></i><span>"._('Locked: wrong encryption key')."</span></a>"; break;
|
||||
default: $text[$i] = "<a class='info' onclick='return false'><i class='lock fa fa-fw fa-lock red-text'></i><span>"._('Locked: unknown error')."</span></a>"; break;
|
||||
}
|
||||
$text[$i++] .= compress($dev,8,0);
|
||||
}
|
||||
return implode(', ',$text);
|
||||
}
|
||||
extract(parse_plugin_cfg('dynamix',true));
|
||||
$disks = parse_ini_file('state/disks.ini',true);
|
||||
$dir = urldecode($_GET['dir']);
|
||||
$path = $_GET['path'];
|
||||
$user = $_GET['user'];
|
||||
$list = [];
|
||||
$all = $docroot.preg_replace('/([\'" &()[\]\\\\])/','\\\\$1',$dir).'/*';
|
||||
$fix = substr($dir,0,4)=='/mnt' ? explode('/',trim_slash($dir))[2] : 'flash';
|
||||
$cache = implode('|',pools_filter($disks)) ?: 'cache';
|
||||
$dir = urldecode($_GET['dir']);
|
||||
$path = $_GET['path'];
|
||||
$user = $_GET['user'];
|
||||
$all = $docroot.preg_replace('/([\'" &()[\]\\\\])/','\\\\$1',$dir).'/*';
|
||||
$fix = substr($dir,0,4)=='/mnt' ? (explode('/',trim_slash($dir))[2] ?: _('---')) : _('flash');
|
||||
$fmt = "%F {$display['time']}";
|
||||
$dirs = $files = [];
|
||||
$total = $i = 0;
|
||||
|
||||
exec("shopt -s dotglob; stat -L -c'%F|%n|%s|%Y' $all 2>/dev/null",$file);
|
||||
if ($user) {
|
||||
exec("shopt -s dotglob; getfattr --no-dereference --absolute-names --only-values -n system.LOCATIONS $all 2>/dev/null",$set);
|
||||
$set = explode("\n",str_replace(",\n",",",preg_replace("/($cache|disk)/","\n$1",$set[0]))); $i = 0;
|
||||
$tag = implode('|',array_merge(['disk'],pools_filter($disks)));
|
||||
$set = explode(';',str_replace(',;',',',preg_replace("/($tag)/",';$1',exec("shopt -s dotglob; getfattr --no-dereference --absolute-names --only-values -n system.LOCATIONS $all 2>/dev/null"))));
|
||||
}
|
||||
$stat = popen("shopt -s dotglob; stat -L -c'%F|%n|%s|%Y' $all",'r');
|
||||
while (($row = fgets($stat))!==false) {
|
||||
$row .= $user ? "|{$set[++$i]}" : "|$fix";
|
||||
if (substr($row,0,3)=='dir') $dirs[] = $row; else $files[] = $row;
|
||||
}
|
||||
pclose($stat);
|
||||
|
||||
echo "<thead><tr><th>"._('Type')."</th><th class='sorter-text'>"._('Name')."</th><th>"._('Size')."</th><th>"._('Last Modified')."</th><th>"._('Location')."</th></tr></thead>";
|
||||
echo "<thead><tr><th>"._('Type')."</th><th class='sorter-text'>"._('Name')."</th><th>"._('Size')."</th><th>"._('Last Modified')."</th><th style='width:200px'>"._('Location')."</th></tr></thead>";
|
||||
if ($link = parent_link()) echo "<tbody class='tablesorter-infoOnly'><tr><td><div><img src='/webGui/icons/folderup.png'></div></td><td>$link</td><td colspan='3'></td></tr></tbody>";
|
||||
|
||||
foreach ($file as $row) {
|
||||
$attr = explode('|',$row);
|
||||
$info = pathinfo($attr[1]);
|
||||
$disk = $user ? $set[++$i] : $fix;
|
||||
$rows = explode(',',$disk);
|
||||
$tag = preg_replace('/\d+/','',$rows[0]);
|
||||
$show = false;
|
||||
$luks = '';
|
||||
foreach ($rows as $row) $show |= strpos($disks[$tag.str_replace($tag,'',$row)]['fsType'],'luks:')!==false;
|
||||
if ($show) foreach ($rows as $row) {
|
||||
switch ($disks[$tag.str_replace($tag,'',$row)]['luksState']) {
|
||||
case 0: $luks .= "<a class='info' onclick='return false'><i class='lock fa fa-unlock grey-text'></i><span>"._('Not encrypted')."</span></a>"; break;
|
||||
case 1: $luks .= "<a class='info' onclick='return false'><i class='lock fa fa-unlock-alt green-text'></i><span>"._('Encrypted and unlocked')."</span></a>"; break;
|
||||
case 2: $luks .= "<a class='info' onclick='return false'><i class='lock fa fa-lock red-text'></i><span>"._('Locked: missing encryption key')."</span></a>"; break;
|
||||
case 3: $luks .= "<a class='info' onclick='return false'><i class='lock fa fa-lock red-text'></i><span>"._('Locked: wrong encryption key')."</span></a>"; break;
|
||||
default: $luks .= "<a class='info' onclick='return false'><i class='lock fa fa-lock red-text'></i><span>"._('Locked: unknown error')."</span></a>"; break;}
|
||||
}
|
||||
$list[] = [
|
||||
'type' => $attr[0],
|
||||
'name' => $info['basename'],
|
||||
'fext' => strtolower($info['extension']),
|
||||
'size' => $attr[2],
|
||||
'time' => $attr[3],
|
||||
'disk' => my_name($disk).$luks
|
||||
];
|
||||
}
|
||||
array_multisort(array_column($list,'type'),$list);
|
||||
|
||||
echo "<tbody>";
|
||||
$dirs=0; $files=0; $total=0;
|
||||
foreach ($list as $row) {
|
||||
if ($row['type']=='directory') {
|
||||
echo "<tr>";
|
||||
echo "<td data=''><div class='icon-dir'></div></td>";
|
||||
echo "<td><a href=\"/$path?dir=".htmlspecialchars(urlencode_path(trim_slash($dir.'/'.$row['name'])))."\">".htmlspecialchars($row['name'])."</a></td>";
|
||||
echo "<td data='0'><"._('FOLDER')."></td>";
|
||||
echo "<td data='{$row['time']}'>".my_time($row['time'],"%F {$display['time']}")."</td>";
|
||||
echo "<td class='loc'>{$row['disk']}</td>";
|
||||
echo "</tr>";
|
||||
$dirs++;
|
||||
} else {
|
||||
if ($files==0 && $dirs>0) echo "</tbody><tbody>";
|
||||
$tag = strpos($row['disk'],',')===false ? '' : 'warning';
|
||||
echo "<tr>";
|
||||
echo "<td data='{$row['fext']}'><div class='icon-file icon-{$row['fext']}'></div></td>";
|
||||
echo "<td><a href=\"".htmlspecialchars(trim_slash($dir.'/'.$row['name']))."\" download target=\"_blank\" class=\"".($tag?:'none')."\">".htmlspecialchars($row['name'])."</a></td>";
|
||||
echo "<td data='{$row['size']}' class='$tag'>".my_scale($row['size'],$unit)." $unit</td>";
|
||||
echo "<td data='{$row['time']}' class='$tag'>".my_time($row['time'],"%F {$display['time']}")."</td>";
|
||||
echo "<td class='loc $tag'>{$row['disk']}</td>";
|
||||
echo "</tr>";
|
||||
$files++;
|
||||
$total+=$row['size'];
|
||||
}
|
||||
foreach ($dirs as $row) {
|
||||
[$type,$name,$size,$time,$set] = explode('|',$row);
|
||||
$file = pathinfo($name);
|
||||
$name = $file['basename'];
|
||||
$devs = explode(',',$set);
|
||||
echo "<tr>";
|
||||
echo "<td data=''><div class='icon-dir'></div></td>";
|
||||
echo "<td><a href=\"/$path?dir=".htmlspecialchars(urlencode_path(trim_slash("$dir/$name")))."\">".htmlspecialchars($name)."</a></td>";
|
||||
echo "<td data='0'><FOLDER></td>";
|
||||
echo "<td data='$time'>".my_time($time,$fmt)."</td>";
|
||||
echo "<td class='loc'>".my_devs($devs)."</td>";
|
||||
echo "</tr>";
|
||||
}
|
||||
if (count($dirs)) echo "</tbody><tbody>";
|
||||
foreach ($files as $row) {
|
||||
[$type,$name,$size,$time,$set] = explode('|',$row);
|
||||
$file = pathinfo($name);
|
||||
$name = $file['basename'];
|
||||
$ext = strtolower($file['extension']);
|
||||
$devs = explode(',',$set);
|
||||
$tag = strpos($set,',')===false ? '' : 'warning';
|
||||
echo "<tr>";
|
||||
echo "<td data='$ext'><div class='icon-file icon-$ext'></div></td>";
|
||||
echo "<td><a href=\"".htmlspecialchars(trim_slash("$dir/$name"))."\" download target=\"_blank\" class=\"".($tag?:'none')."\">".htmlspecialchars($name)."</a></td>";
|
||||
echo "<td data='$size' class='$tag'>".my_scale($size,$unit)." $unit</td>";
|
||||
echo "<td data='$time' class='$tag'>".my_time($time,$fmt)."</td>";
|
||||
echo "<td class='loc $tag'>".my_devs($devs)."</td>";
|
||||
echo "</tr>";
|
||||
$total += $size;
|
||||
}
|
||||
echo "</tbody>";
|
||||
$objs = $dirs+$files;
|
||||
$totaltext = $files==0 ? '' : '('.my_scale($total,$unit).' '.$unit.' '._('total').')';
|
||||
echo "<tfoot><tr><td></td><td colspan='4'>$objs "._('object'.($objs==1?'':'s')).": $dirs "._('director'.($dirs==1?'y':'ies')).", $files "._('file'.($files==1?'':'s'))." $totaltext</td></tr></tfoot>";
|
||||
|
||||
$dirs = count($dirs);
|
||||
$files = count($files);
|
||||
$objs = $dirs + $files;
|
||||
if ($objs==0 && !exec("find \"$dir\" -maxdepth 0 -empty -exec echo 1 \;")) {
|
||||
echo "<tfoot><tr><td></td><td colspan='4'>"._('No listing: Too many files')."</td></tr></tfoot>";
|
||||
} else {
|
||||
$total = ' ('.my_scale($total,$unit).' '.$unit.' '._('total').')';
|
||||
echo "<tfoot><tr><td></td><td colspan='4'>$objs "._('object'.($objs==1?'':'s')).": $dirs "._('director'.($dirs==1?'y':'ies')).", $files "._('file'.($files==1?'':'s'))."$total</td></tr></tfoot>";
|
||||
}
|
||||
?>
|
||||
@@ -72,7 +72,7 @@ function device_info(&$disk,$online) {
|
||||
($disk['type']=='Data' && $disk['status']!='DISK_NP') ||
|
||||
($disk['type']=='Cache' && $disk['status']!='DISK_NP') ||
|
||||
($disk['name']=='flash') || in_array($disk['name'],$pools) ||
|
||||
$disk['type']=='New' ? "<a href=\"".htmlspecialchars("$path/$type?name=$name")."\">".compress($fancyname,15,5)."</a>" : compress($fancyname,15,5);
|
||||
$disk['type']=='New' ? "<a href=\"".htmlspecialchars("$path/$type?name=$name")."\">".compress($fancyname,12,5)."</a>" : compress($fancyname,12,5);
|
||||
if ($crypto) switch ($disk['luksState']) {
|
||||
case 0:
|
||||
if (!vfs_luks($disk['fsType']))
|
||||
@@ -101,7 +101,7 @@ function device_info(&$disk,$online) {
|
||||
function device_browse(&$disk) {
|
||||
global $path;
|
||||
$dir = $disk['name']=='flash' ? "/boot" : "/mnt/{$disk['name']}";
|
||||
return "<a href=\"".htmlspecialchars("$path/Browse?dir=$dir")."\"><img src='/webGui/images/explore.png' title='"._('Browse')." $dir'></a>";
|
||||
return "<a href=\"/$path/Browse?dir=".htmlspecialchars($dir)."\"><img src='/webGui/images/explore.png' title='"._('Browse')." $dir'></a>";
|
||||
}
|
||||
function device_desc(&$disk) {
|
||||
global $var;
|
||||
|
||||
@@ -98,7 +98,7 @@ foreach ($disks as $name => $disk) {
|
||||
echo "<td>$type</td>";
|
||||
echo "<td>".my_scale(($disk['fsSize'])*1024, $unit)." $unit</td>";
|
||||
echo "<td>".my_scale($disk['fsFree']*1024, $unit)." $unit</td>";
|
||||
echo "<td><a href='$path/Browse?dir=/mnt/$name'><img src='/webGui/images/explore.png' title='"._('Browse')." /mnt/$name'></a></td>";
|
||||
echo "<td><a href='/$path/Browse?dir=/mnt/$name'><img src='/webGui/images/explore.png' title='"._('Browse')." /mnt/$name'></a></td>";
|
||||
echo "</tr>";
|
||||
foreach ($ssz2[$name] as $sharename => $sharesize) {
|
||||
if ($sharename=='share.total') continue;
|
||||
|
||||
@@ -52,9 +52,9 @@ function my_temp($value) {
|
||||
$number = $display['number'];
|
||||
return is_numeric($value) ? (($unit=='F' ? round(9/5*$value+32) : str_replace('.', $number[0], $value))." $unit") : $value;
|
||||
}
|
||||
function my_disk($name) {
|
||||
function my_disk($name,$raw=false) {
|
||||
global $display;
|
||||
return $display['raw'] ? $name : ucfirst(preg_replace('/(\d+)$/',' $1',$name));
|
||||
return $display['raw']||$raw ? $name : ucfirst(preg_replace('/(\d+)$/',' $1',$name));
|
||||
}
|
||||
function my_disks($disk) {
|
||||
return strpos($disk['status'],'_NP')===false;
|
||||
@@ -188,8 +188,8 @@ function day_count($time) {
|
||||
function plus($val, $word, $last) {
|
||||
return $val>0 ? (($val || $last) ? ($val.' '.$word.($val!=1?'s':'').($last ?'':', ')) : '') : '';
|
||||
}
|
||||
function compress($name,$size=20,$end=6) {
|
||||
return strlen($name)<=$size ? $name : substr($name,0,$size-$end-3).'...'.substr($name,-$end);
|
||||
function compress($name,$size=18,$end=6) {
|
||||
return strlen($name)<=$size ? $name : substr($name,0,$size-($end?$end-3:0)).'...'.($end?substr($name,-$end):'');
|
||||
}
|
||||
|
||||
function read_parity_log($epoch, $busy=false) {
|
||||
|
||||
@@ -100,7 +100,7 @@ foreach ($shares as $name => $share) {
|
||||
echo "<td>$cache</td>";
|
||||
echo "<td>".my_scale($ssz1[$name]['disk.total']*1024, $unit)." $unit</td>";
|
||||
echo "<td>".my_scale($share['free']*1024, $unit)." $unit</td>";
|
||||
echo "<td><a href='$path/Browse?dir=/mnt/user/".urlencode($name)."'><img src='/webGui/images/explore.png' title='"._('Browse')." /mnt/user/".urlencode($name)."'></a></td>";
|
||||
echo "<td><a href='/$path/Browse?dir=/mnt/user/".urlencode($name)."'><img src='/webGui/images/explore.png' title='"._('Browse')." /mnt/user/".urlencode($name)."'></a></td>";
|
||||
echo "</tr>";
|
||||
foreach ($ssz1[$name] as $diskname => $disksize) {
|
||||
if ($diskname=='disk.total') continue;
|
||||
|
||||
Reference in New Issue
Block a user