Add group max storage

This commit is contained in:
H.Rouatbi
2024-09-18 16:33:18 +01:00
17 changed files with 135 additions and 9 deletions

15
go.php
View File

@@ -361,7 +361,7 @@ switch ($current_go_case)
if (ig('sure') && g('sure') == 'ok')
{
$query = [
'SELECT' => 'f.id, f.name, f.folder, f.size, f.type',
'SELECT' => 'f.id, f.name, f.folder, f.size, f.type, f.user',
'FROM' => "{$dbprefix}files f",
'WHERE' => "f.code_del='" . $cd . "'",
'LIMIT' => '1',
@@ -402,6 +402,19 @@ switch ($current_go_case)
];
$SQL->build($update_query);
if ($row['user']!=-1)
{
//update user storage size
$update_query = [
'UPDATE' => "{$dbprefix}users",
'SET' => 'storage_size=storage_size-' . $row['size'],
'WHERE' => 'id=' . $row['user'],
];
$SQL->build($update_query);
}
kleeja_info($lang['DELETE_SUCCESFUL']);
}
else

View File

@@ -66,7 +66,7 @@ if (ip('submit'))
foreach ($del as $key => $id)
{
$query = [
'SELECT' => 'f.id, f.name, f.folder, f.size, f.type',
'SELECT' => 'f.id, f.name, f.folder, f.size, f.type, f.user',
'FROM' => "{$dbprefix}files f",
'WHERE' => 'f.id = ' . intval($id),
];
@@ -96,6 +96,11 @@ if (ip('submit'))
$files_num++;
}
$sizes += $row['size'];
//Subtract size from storage of the user
if ($row['user'] != -1) {
$SQL->query("UPDATE {$dbprefix}users SET storage_size=storage_size-".$row['size']." WHERE id=".$row['user']);
}
}
}
@@ -436,18 +441,18 @@ elseif ($current_smt == 'delete_by_extension')
$ext = p('selected_extnsion');
$query = [
'SELECT' => 'id, name, type, size',
'SELECT' => 'id, name, type, size, user',
'FROM' => $dbprefix . 'files',
'WHERE' => 'type = \'' . $ext . '\''
];
$SQL->build($query);
$result = $SQL->build($query);
$deleted_files = [];
$fileSizes = 0;
if ($SQL->num_rows())
{
while ($file = $SQL->fetch())
while ($file = $SQL->fetch_array($result))
{
$fileLocation = PATH . 'uploads/' . $file['name'];
$thumbFileLocation = PATH . 'uploads/thumbs/' . $file['name'];
@@ -463,6 +468,11 @@ elseif ($current_smt == 'delete_by_extension')
}
$fileSizes += $file['size'];
$deleted_files[] = $file['id'];
//Subtract size from storage of the user
if ($file['user'] != -1) {
$SQL->query("UPDATE {$dbprefix}users SET storage_size=storage_size-".$file['size']." WHERE id=".$file['user']);
}
}
if (($deletedFileCount = count($deleted_files)) <= 1)
@@ -481,6 +491,7 @@ elseif ($current_smt == 'delete_by_extension')
$SQL->query($update_stats);
}
$SQL->freeresult($result);
kleeja_admin_info($lang['ADMIN_DELETE_FILE_OK'], true, '', true, $action);
exit;

View File

@@ -71,6 +71,11 @@ if (ip('submit'))
$ids[] = $row['id'];
$num++;
$sizes += $row['size'];
//Subtract size from storage of the user
if ($row['user'] != -1) {
$SQL->query("UPDATE {$dbprefix}users SET storage_size=storage_size-".$row['size']." WHERE id=".$row['user']);
}
}
$SQL->freeresult($result);

View File

@@ -868,7 +868,8 @@ case 'group_data':
}
}
if ($req_group == 2 && in_array($row['name'], ['enable_userfile']))
$guest_disallowed_configs = ['enable_userfile', 'max_storage'];
if ($req_group == 2 && in_array($row['name'], $guest_disallowed_configs))
{
continue;
}

View File

@@ -181,6 +181,19 @@ class defaultUploader implements KleejaUploader
$SQL->build($update_query);
if ($fileInfo['currentUserId']!=-1)
{
// update user storage size
$update_query = [
'UPDATE' => "{$dbprefix}users",
'SET' => 'storage_size=storage_size+' . intval($fileInfo['fileSize']),
'WHERE' => 'id=' . $fileInfo['currentUserId'],
];
$SQL->build($update_query);
}
$this->generateOutputBox($fileInfo);
}
@@ -483,7 +496,7 @@ class defaultUploader implements KleejaUploader
*/
public function uploadTypeFile($fieldNumber, $current_uploading_folder, $current_user_id)
{
global $config, $lang;
global $config, $lang, $remaining_storage;
$fileInfo = [
'saveToFolder',
@@ -582,6 +595,10 @@ class defaultUploader implements KleejaUploader
)
);
}
elseif ($remaining_storage != -1 && $fileInfo['fileSize'] > $remaining_storage)
{
$this->addErrorMessage($lang['TOTAL_SIZE_EXCEEDED']);
}
// no errors, so upload it
else {
is_array($plugin_run_result = Plugins::getInstance()->run('defaultUploader_uploadTypeFile_2nd', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
@@ -591,6 +608,10 @@ class defaultUploader implements KleejaUploader
if ($file) {
$this->saveToDatabase($fileInfo);
if ($remaining_storage != -1)
{
$remaining_storage -= $fileInfo['fileSize'];
}
} else {
$this->addErrorMessage(sprintf($lang['CANT_UPLAOD'], $fileInfo['originalFileName']));
}

View File

@@ -62,8 +62,7 @@ if (! $uploader instanceof KleejaUploader) {
$uploader->setAllowedFileExtensions($d_groups[$userinfo['group_id']]['exts']);
$uploader->setUploadFieldsLimit($config['filesnum']);
$remaining_storage = $d_groups[$userinfo['group_id']]['configs']['max_storage']>0 ? $d_groups[$userinfo['group_id']]['configs']['max_storage']-$userinfo['storage_size'] : -1;
if (ip('submitr'))
{

View File

@@ -37,6 +37,7 @@ $config_values[] = ['user_system', '1', '<select id=\"user_system\" name=\"user_
$config_values[] = ['register', '1', '<label>{lang.YES}<input type=\"radio\" id=\"register\" name=\"register\" value=\"1\" <IF NAME=\"con.register==1\"> checked=\"checked\"</IF> /></label>\r\n <label>{lang.NO}<input type=\"radio\" id=\"register\" name=\"register\" value=\"0\" <IF NAME=\"con.register==0\"> checked=\"checked\"</IF> /></label>', 10, 'general', 0, 0];
$config_values[] = ['enable_userfile', '1', '<label>{lang.YES}<input type=\"radio\" id=\"enable_userfile\" name=\"enable_userfile\" value=\"1\" <IF NAME=\"con.enable_userfile==1\"> checked=\"checked\"</IF> /></label>\r\n <label>{lang.NO}<input type=\"radio\" id=\"enable_userfile\" name=\"enable_userfile\" value=\"0\" <IF NAME=\"con.enable_userfile==0\"> checked=\"checked\"</IF> /></label>', 11, 'groups', 0, 0];
$config_values[] = ['mod_writer', '0', '<label>{lang.YES}<input type=\"radio\" id=\"mod_writer\" name=\"mod_writer\" value=\"1\" <IF NAME=\"con.mod_writer==1\"> checked=\"checked\"</IF> /></label>\r\n <label>{lang.NO}<input type=\"radio\" id=\"mod_writer\" name=\"mod_writer\" value=\"0\" <IF NAME=\"con.mod_writer==0\"> checked=\"checked\"</IF> /></label>\r\n [ {lang.MOD_WRITER_EX} ]', 12, 'advanced', 0, 0];
$config_values[] = ['max_storage', '0', '<input type=\"text\" id=\"max_storage\" name=\"max_storage\" value=\"{con.max_storage}\" size=\"20\" style=\"direction:ltr\" />', 11, 'groups', 0, 0];
// Cookies settings
$cookie_data = get_cookies_settings();

View File

@@ -87,6 +87,7 @@ CREATE TABLE `{$dbprefix}users` (
`show_my_filecp` tinyint(1) unsigned NOT NULL default '1',
`new_password` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '',
`hash_key` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '',
`storage_size` bigint(20) NOT NULL DEFAULT '0',
KEY `clean_name` (`clean_name`(300)),
KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

View File

@@ -103,6 +103,7 @@ return [
'SEARCH_USERS' => 'بحث عن مستخدمين',
'R_IMG_CTRL' => 'إدارة الصور',
'ENABLE_USERFILE' => 'تفعيل مجلدات المستخدمين',
'MAX_STORAGE' => 'الحد الأقصى للتخزين (بايت)',
'R_EXTRA' => 'هيدر وفوتر إضافي',
'EX_HEADER_N' => 'الهيدر الإضافي.. وهو ما يظهر أسفل الهيدر الأصلي ..',
'EX_FOOTER_N' => 'الفوتر الإضافي.. وهو ما يظهر أعلى الفوتر الأصلي ..',

View File

@@ -94,6 +94,8 @@ return [
'URL' => 'الرابط',
'REASON' => 'السبب',
'NO_ID' => 'لم تحدد ملف..!',
'TOTAL_SIZE_EXCEEDED' => 'لقد تم تجاوز الحجم الإجمالي',
'STORAGE_USAGE' => '<b>%s</b> من <b>%s</b>',
'NO_ME300RES' => 'رجاءً.. حقل السبب لا يمكن ملأه بأكثر من 300 حرف!',
'THNX_REPORTED' => 'تم التبليغ.. شكراً لاهتمامك',
'RULES' => 'شروط الخدمة',
@@ -116,6 +118,7 @@ return [
'IMAGE' => 'صورة',
'USERS_ST' => 'عدد الأعضاء',
'USER' => 'عضو',
'USED_SPACE' => 'المساحة المستخدمة',
'SIZES_ST' => 'حجم جميع الملفات',
//'LSTFLE_ST' => 'آخر ملف تم رفعه',
'LSTDELST' => 'آخر فحص للملفات الخاملة ',

View File

@@ -102,6 +102,7 @@ return [
'SEARCH_USERS' => 'Search for users',
'R_IMG_CTRL' => 'Image control only',
'ENABLE_USERFILE' => 'Enable users files',
'MAX_STORAGE' => 'Maximum storage (Bytes)',
'R_EXTRA' => 'Extra Templates',
'EX_HEADER_N' => 'Extra header ... which shows at the bottom of the original header',
'EX_FOOTER_N' => 'Extra footer ... which shows at the top of the original footer',

View File

@@ -90,6 +90,8 @@ return [
'URL' => 'Link',
'REASON' => 'Reason',
'NO_ID' => 'No file selected ..!!',
'TOTAL_SIZE_EXCEEDED' => 'The total size has been exceeded',
'STORAGE_USAGE' => '<b>%s</b> of <b>%s</b>',
'NO_ME300RES' => 'The Reason field cannot be more than 300 characters!!',
'THNX_REPORTED' => 'We have received your report, Thank you.',
'RULES' => 'Terms',
@@ -111,6 +113,7 @@ return [
'IMAGE' => 'Image',
'USERS_ST' => 'Total Users',
'USER' => 'user',
'USED_SPACE' => 'Used Space',
'SIZES_ST' => 'Total size of uploaded files',
'LSTDELST' => 'Last check for un-downloaded (inactive) files',

View File

@@ -103,6 +103,7 @@ return [
'SEARCH_USERS' => 'جست وجو براي کاربر',
'R_IMG_CTRL' => 'کنترل تصاوير',
'ENABLE_USERFILE' => 'فعال سازي فايل هاي کاربران',
'MAX_STORAGE' => 'حداکثر ذخیره سازی (بایت)',
'R_EXTRA' => 'قالب هاي اضافي',
'EX_HEADER_N' => 'هدر اضافي... هدري که در زير هدر اصلي نمايش داده خواهد شد.',
'EX_FOOTER_N' => 'فوتر اضافي...فوتري که در بالاي فوتر اصلي نمايش داده خواهد شد.',

View File

@@ -94,6 +94,8 @@ return [
'URL' => 'ادرس',
'REASON' => 'دلیل (توضیحات)',
'NO_ID' => 'فایلی انتخاب نشده است..!!!',
'TOTAL_SIZE_EXCEEDED' => 'از اندازه کل فراتر رفته است',
'STORAGE_USAGE' => '<b>%s</b> از <b>%s</b>',
'NO_ME300RES' => 'توضیحات نمی تواند بیشتر از 300 کاراکتر باشند!!',
'THNX_REPORTED' => 'ما گزارش شما را دریافت کردیم ، متشکریم.',
'RULES' => 'قوانین',
@@ -116,6 +118,7 @@ return [
'IMAGE' => 'تصویر',
'USERS_ST' => 'مجموع کاربران',
'USER' => 'کاربر',
'USED_SPACE' => 'فضای مورد استفاده',
'SIZES_ST' => 'مجموع حجم فایل های اپلود شده',
//'LSTFLE_ST' => 'اخرین اپلود',
'LSTDELST' => 'آخرین عملیات چک کردن فایلهای دانلود نشده',

View File

@@ -93,6 +93,19 @@
</form>
<!-- user storage -->
<div class="card mb-3">
<div class="card-header">{lang.USED_SPACE}</div>
<div class="card-body text-center">
<span>{storage_usage_str}</span>
<IF NAME="is_limited">
<div class="progress mt-1">
<div role="progressbar" aria-valuemin="0" aria-valuemax="100" style="width: {storage_per}%" aria-valuenow="{storage_per}" class="progress-bar bg-(storage_per gte 90?danger:primary)">{storage_per}%</div>
</div>
</IF>
</div>
</div>
<!-- link user folder -->
<div class="card">
<div class="card-header copylink">{lang.COPY_AND_GET_DUD}</div>

View File

@@ -76,6 +76,7 @@ $(document).ready(function(){
$("#uploader input:file").change(function (){
if(!check_selected_file(this)){
$(this).val('');
this.dataset.previousSize = 0; // Reset previous size if file is invalid
}else{
if($(this).data('number') !== null){
var selected_text = $('#file-text' + $(this).data('number'));
@@ -96,6 +97,8 @@ $(document).ready(function(){
var allowed_exts = {js_allowed_extensions_types};
var allowed_sizes = {js_allowed_extensions_sizes};
var remaining_storage = {remaining_storage};
var totalSize = 0;
function check_selected_file(file) {
var selected_file = file.files[0];
@@ -124,6 +127,19 @@ function check_selected_file(file) {
}
}
// Subtract the previous file size and add the new file size
var previousSize = parseInt(file.dataset.previousSize || 0);
totalSize = totalSize - previousSize + file_size;
if (remaining_storage != -1 && totalSize > remaining_storage){
totalSize = totalSize - file_size + previousSize; // Revert the change
alert('{lang.TOTAL_SIZE_EXCEEDED}');
return false;
}
// Update the previous size for this file input
file.dataset.previousSize = file_size;
return true;
}
</IF>

33
ucp.php
View File

@@ -343,6 +343,21 @@ switch (g('go'))
$start = $Pager->getStartRow();
$your_fileuser = $config['siteurl'] . ($config['mod_writer'] ? 'fileuser-' . $usrcp->id() . '.html' : 'ucp.php?go=fileuser&amp;id=' . $usrcp->id());
if($user_himself)
{
$used_storage = $userinfo['storage_size'];
$max_storage = $d_groups[$usrcp->group_id()]['configs']['max_storage'];
$is_limited = $max_storage>0;
if($is_limited)
{
$storage_per = ($used_storage*100)/$max_storage;
$storage_per = round($storage_per, 2);
$storage_per = min($storage_per,100);
$max_storage = readable_size($max_storage);
}
$used_storage = readable_size($used_storage);
$storage_usage_str = sprintf($lang['STORAGE_USAGE'], $used_storage, $is_limited ? $max_storage : '∞');
}
$total_pages = $Pager->getTotalPages();
$linkgoto = $config['siteurl'] . (
$config['mod_writer']
@@ -505,6 +520,15 @@ switch (g('go'))
];
$SQL->build($update_query);
//update storage
$update_query = [
'UPDATE' => "{$dbprefix}users",
'SET' => "storage_size=storage_size-$sizes",
'WHERE' => "id=$user_id",
];
$SQL->build($update_query);
}
//delete is ok, show msg
@@ -539,6 +563,15 @@ switch (g('go'))
];
$SQL->build($update_query);
//update storage
$update_query = [
'UPDATE' => "{$dbprefix}users",
'SET' => "storage_size=storage_size-$sizes",
'WHERE' => "id=$user_id",
];
$SQL->build($update_query);
}