Parent Directory" : ""; } function trim_slash($url){ return preg_replace('/\/\/+/','/',$url); } function my_name($name) { return implode(', ',array_map('my_disk',explode(',',$name))); } 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 "TypeNameSizeLast ModifiedLocation"; 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 "<DIR>"; 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; $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";