84 lines
2.7 KiB
PHP
84 lines
2.7 KiB
PHP
<?php
|
|
|
|
include('../include/admin-header.php');
|
|
include('../include/uploaded-file-helpers.php');
|
|
|
|
if ($db) {
|
|
|
|
if ($action == 'prune-zombie-files') {
|
|
$uploaded_file_rows = $db->select_rows('uploaded_files', 'file', array('deleted_at' => NULL));
|
|
$file_by_id = array();
|
|
foreach ($uploaded_file_rows as &$row)
|
|
$file_by_id[$row['file_id']] = &$row;
|
|
|
|
$file_name_list = scandir(config_path('uploadDirectory', ''));
|
|
foreach ($file_name_list as $file_name) {
|
|
if ($file_name == '.' || $file_name == '..')
|
|
continue;
|
|
if (!preg_match('/^(\d+)((\.[A-Za-z0-9]{1,5}){1,2})$/', $file_name, $matches)) {
|
|
echo 'Unknown file: ' . htmlspecialchars($file_name) . '<br>';
|
|
continue;
|
|
}
|
|
$file_name = $matches[0];
|
|
$file_path = config_path('uploadDirectory', $file_name);
|
|
$file_id = $matches[1];
|
|
if (!array_key_exists($file_id, $file_by_id)) {
|
|
echo "Deleting a zombie file: $file_name...";
|
|
if (file_exists($file_path) && !unlink($file_path))
|
|
echo "Failed";
|
|
else
|
|
echo "Deleted";
|
|
echo "<br>";
|
|
}
|
|
}
|
|
}
|
|
|
|
$files_per_user = $db->query_and_fetch_all('SELECT file_author AS "author", SUM(file_size) AS "usage", COUNT(file_id) AS "count"
|
|
FROM uploaded_files GROUP BY file_author');
|
|
|
|
echo <<< END
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<td>User</td>
|
|
<td>Number of Files</td>
|
|
<td>Disk Usage</td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
END;
|
|
|
|
function format_size($usage, $quota) {
|
|
$megabytes = round($usage / MEGABYTES);
|
|
$percent = round(10000 * $usage / $quota) / 100;
|
|
return "$megabytes MB ($percent%)";
|
|
}
|
|
|
|
$quota_per_user = config('uploadUserQuotaInMB');
|
|
$total_disk_usage = 0;
|
|
$total_file_count = 0;
|
|
|
|
foreach ($files_per_user as $row) {
|
|
$user_name = $row['author'] ? $row['author'] : 'anonymous';
|
|
$file_count = $row['count'];
|
|
$disk_usage = format_size($row['usage'], $quota_per_user * MEGABYTES);
|
|
echo " <tr><td>$user_name</td><td>$file_count</td><td>$disk_usage</td></tr>";
|
|
$total_disk_usage += $row['usage'];
|
|
$total_file_count += $file_count;
|
|
}
|
|
|
|
$total_disk_usage = format_size($total_disk_usage, config('uploadTotalQuotaInMB') * MEGABYTES);
|
|
echo " <tr><td>Total</td><td>$total_file_count</td><td>$total_disk_usage</td>";
|
|
|
|
echo <<< END
|
|
</tbody>
|
|
</table>
|
|
<form method="POST"><button name="action" value="prune-zombie-files" type="submit">Prune zombie files (slow)</button></form>
|
|
END;
|
|
|
|
}
|
|
|
|
include('../include/admin-footer.php');
|
|
|
|
?>
|