$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
// add translations
$_SERVER['REQUEST_URI'] = '';
require_once "$docroot/webGui/include/Translations.php";
require_once "$docroot/webGui/include/Helpers.php";
function parent_link() {
global $dir,$path;
return ($dir && dirname($dir)!='/' && dirname($dir)!='/mnt' && dirname($dir)!='/mnt/user')
? "Parent Directory" : "";
}
function trim_slash($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);
}
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';
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;
}
echo "| "._('Type')." | "._('Name')." | "._('Size')." | "._('Last Modified')." | "._('Location')." |
";
if ($link = parent_link()) echo "
| $link | |
";
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 .= ""._('Not encrypted').""; break;
case 1: $luks .= ""._('Encrypted and unlocked').""; break;
case 2: $luks .= ""._('Locked: missing encryption key').""; break;
case 3: $luks .= ""._('Locked: wrong encryption key').""; break;
default: $luks .= ""._('Locked: unknown error').""; 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 "";
$dirs=0; $files=0; $total=0;
foreach ($list as $row) {
if ($row['type']=='directory') {
echo "";
echo " | ";
echo "".htmlspecialchars($row['name'])." | ";
echo "<"._('FOLDER')."> | ";
echo "".my_time($row['time'],"%F {$display['time']}")." | ";
echo "{$row['disk']} | ";
echo "
";
$dirs++;
} else {
if ($files==0 && $dirs>0) echo "";
$tag = strpos($row['disk'],',')===false ? '' : 'warning';
echo "";
echo " | ";
echo "".htmlspecialchars($row['name'])." | ";
echo "".my_scale($row['size'],$unit)." $unit | ";
echo "".my_time($row['time'],"%F {$display['time']}")." | ";
echo "{$row['disk']} | ";
echo "
";
$files++;
$total+=$row['size'];
}
}
echo "";
$objs = $dirs+$files;
$totaltext = $files==0 ? '' : '('.my_scale($total,$unit).' '.$unit.' '._('total').')';
echo " | $objs "._('object'.($objs==1?'':'s')).": $dirs "._('director'.($dirs==1?'y':'ies')).", $files "._('file'.($files==1?'':'s'))." $totaltext |
";