Start user quota implementation
This commit is contained in:
parent
0d375201c8
commit
b2e0d683a2
5 changed files with 40 additions and 13 deletions
|
@ -24,16 +24,7 @@ class AdminController extends Controller
|
|||
$usersCount = $this->database->query('SELECT COUNT(*) AS `count` FROM `users`')->fetch()->count;
|
||||
$mediasCount = $this->database->query('SELECT COUNT(*) AS `count` FROM `uploads`')->fetch()->count;
|
||||
$orphanFilesCount = $this->database->query('SELECT COUNT(*) AS `count` FROM `uploads` WHERE `user_id` IS NULL')->fetch()->count;
|
||||
|
||||
$medias = $this->database->query('SELECT `uploads`.`storage_path` FROM `uploads`')->fetchAll();
|
||||
|
||||
$totalSize = 0;
|
||||
|
||||
$filesystem = $this->storage;
|
||||
foreach ($medias as $media) {
|
||||
$totalSize += $filesystem->getSize($media->storage_path);
|
||||
}
|
||||
|
||||
$totalSize = $this->database->query('SELECT SUM(`current_disk_quota`) AS `sum` FROM `users`')->fetch()->sum ?? 0;
|
||||
$registerEnabled = $this->database->query('SELECT `value` FROM `settings` WHERE `key` = \'register_enabled\'')->fetch()->value ?? 'off';
|
||||
$hideByDefault = $this->database->query('SELECT `value` FROM `settings` WHERE `key` = \'hide_by_default\'')->fetch()->value ?? 'off';
|
||||
$copyUrl = $this->database->query('SELECT `value` FROM `settings` WHERE `key` = \'copy_url_behavior\'')->fetch()->value ?? 'off';
|
||||
|
@ -60,7 +51,6 @@ class AdminController extends Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Response $response
|
||||
*
|
||||
* @return Response
|
||||
|
@ -105,4 +95,37 @@ class AdminController extends Controller
|
|||
|
||||
return json($response, $out);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Response $response
|
||||
* @return Response
|
||||
*/
|
||||
public function recalculateUserQuota(Response $response): Response
|
||||
{
|
||||
$uploads = $this->database->query('SELECT `id`,`user_id`, `storage_path` FROM `uploads`')->fetchAll();
|
||||
|
||||
$usersQuotas = [];
|
||||
|
||||
$filesystem = $this->storage;
|
||||
foreach ($uploads as $upload) {
|
||||
if (!array_key_exists($upload->user_id, $usersQuotas)) {
|
||||
$usersQuotas[$upload->user_id] = 0;
|
||||
}
|
||||
try {
|
||||
$usersQuotas[$upload->user_id] += $filesystem->getSize($upload->storage_path);
|
||||
} catch (FileNotFoundException $e) {
|
||||
$this->database->query('DELETE FROM `uploads` WHERE `id` = ?', $upload->id);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($usersQuotas as $userId => $quota) {
|
||||
$this->database->query('UPDATE `users` SET `current_disk_quota`=? WHERE `id` = ?', [
|
||||
$quota,
|
||||
$userId,
|
||||
]);
|
||||
}
|
||||
|
||||
$this->session->alert(lang('quota_recalculated'));
|
||||
return redirect($response, route('system'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ $app->group('', function (RouteCollectorProxy $group) {
|
|||
$group->get('/home/switchView', [DashboardController::class, 'switchView'])->setName('switchView');
|
||||
|
||||
$group->get('/system/deleteOrphanFiles', [AdminController::class, 'deleteOrphanFiles'])->setName('system.deleteOrphanFiles');
|
||||
$group->get('/system/recalculateUserQuota', [AdminController::class, 'recalculateUserQuota'])->setName('system.recalculateUserQuota');
|
||||
|
||||
$group->get('/system/themes', [AdminController::class, 'getThemes'])->setName('theme');
|
||||
|
||||
|
|
|
@ -131,4 +131,6 @@ return [
|
|||
'password_repeat' => 'Repeat Password',
|
||||
'password_match' => 'Password and repeat password must be the same.',
|
||||
'password_restored' => 'Password has been reset.',
|
||||
'recalculate_user_quota' => 'Recalculate user quota from disk',
|
||||
'quota_recalculated' => 'User quota recalculated from the disk successfully.',
|
||||
];
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<label for="username" class="sr-only">{{ lang('username') }}</label>
|
||||
<input type="text" id="username" class="form-control first" placeholder="{{ lang('username') }}" name="username" required autofocus>
|
||||
<label for="email" class="sr-only">E-Mail</label>
|
||||
<input type="email" id="email" class="form-control middle" placeholder="mail@example.com" name="email" required>
|
||||
<input type="email" id="email" class="form-control middle" placeholder="E-Mail" name="email" required>
|
||||
<label for="password" class="sr-only">{{ lang('password') }}</label>
|
||||
<input type="password" id="password" class="form-control last" placeholder="{{ lang('password') }}" name="password" required>
|
||||
</div>
|
||||
|
|
|
@ -173,7 +173,8 @@
|
|||
<div class="card shadow-sm mt-3">
|
||||
<div class="card-header"><i class="fas fa-tools fa-fw"></i> {{ lang('maintenance') }}</div>
|
||||
<div class="card-body">
|
||||
<a href="{{ route('system.deleteOrphanFiles') }}" class="btn btn-outline-dark btn-block"><i class="fas fa-broom fa-fw"></i> {{ lang('clean_orphaned_uploads') }}</a>
|
||||
<a href="{{ route('system.deleteOrphanFiles') }}" class="btn btn-outline-danger btn-block"><i class="fas fa-broom fa-fw"></i> {{ lang('clean_orphaned_uploads') }}</a>
|
||||
<a href="{{ route('system.recalculateUserQuota') }}" class="btn btn-outline-info btn-block"><i class="fas fa-calculator fa-fw"></i> {{ lang('recalculate_user_quota') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card shadow-sm mt-3">
|
||||
|
|
Loading…
Add table
Reference in a new issue