$docroot = $docroot ?: $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
require_once "$docroot/webGui/include/Helpers.php";
function parent_link() {
global $dir,$path;
if ($dir=='/' || $dir=='/boot' || dirname($dir)=='/mnt' || dirname($dir)=='/mnt/user') return "";
$parent = urlencode_path(dirname($dir));
return "Parent Directory...";
}
extract(parse_plugin_cfg('dynamix',true));
$disks = parse_ini_file('state/disks.ini',true);
$dir = $_GET['dir'];
$path = $_GET['path'];
$user = $_GET['user'];
$list = [];
$all = $docroot.preg_replace('/([\'" &()[\]\\\\])/','\\\\$1',$dir).'/*';
$set = explode('/',str_replace('//','/',$dir))[2];
exec("shopt -s dotglob; stat -L -c'%F|%n|%s|%Y' $all 2>/dev/null",$item);
if ($user) {
exec("shopt -s dotglob; getfattr --no-dereference --absolute-names --only-values -n system.LOCATIONS $all 2>/dev/null",$loc);
$loc = explode("\n",preg_replace("/(disk|cache)/","\n$1",$loc[0])); $i = 0;
}
echo "| Type | Name | Size | Last Modified | Location |
";
if ($link = parent_link()) echo "
| $link | |
";
echo "";
foreach ($item as $entry) {
$attr = explode('|',$entry);
$info = pathinfo($attr[1]);
$disk = $set;
$luks = '';
if ($user) {
$disk = $loc[++$i];
$devs = explode(',',$disk);
$type = preg_replace('/\d+/','',$devs[0]);
$show = false;
foreach ($devs as $dev) $show |= strpos($disks[$type.str_replace($type,'',$dev)]['fsType'],'luks:')!==false;
if ($show) foreach ($devs as $dev) {
switch ($disks[$type.str_replace($type,'',$dev)]['luksState']) {
case 0: $luks .= ""; break;
case 1: $luks .= ""; break;
case 2: $luks .= ""; break;
case 3: $luks .= ""; break;
default: $luks .= ""; break;}
}
}
$list[] = [
'type' => $attr[0],
'name' => $info['basename'],
'fext' => strtolower($info['extension']),
'size' => $attr[2],
'time' => $attr[3],
'disk' => my_disk($disk).$luks];
}
$dirs=0; $files=0; $total=0;
foreach ($list as $entry) {
echo "";
if ($entry['type']=='directory') {
$dirs++;
echo " | ";
echo "".htmlspecialchars($entry['name'])." | ";
echo "<DIR> | ";
echo "".my_time($entry['time'],"%F {$display['time']}")." | ";
echo "{$entry['disk']} | ";
} else {
$files++;
$total+=$entry['size'];
$type = strpos(',',$entry['disk'])===false ? '' : 'warning';
echo " | ";
echo "".htmlspecialchars($entry['name'])." | ";
echo "".my_scale($entry['size'],$unit)." $unit | ";
echo "".my_time($entry['time'],"%F {$display['time']}")." | ";
echo "{$entry['disk']} | ";
}
echo "
";
}
echo "";
$objs = $dirs+$files;
$objtext = "$objs object".($objs==1?'':'s');
$dirtext = "$dirs director".($dirs==1?'y':'ies');
$filetext = "$files file".($files==1?'':'s');
$totaltext = $files==0 ? '':'('.my_scale($total,$unit).' '.$unit.' total)';
echo " | $objtext: $dirtext, $filetext $totaltext |
";