mirror of
https://github.com/kleeja-official/kleeja.git
synced 2025-12-14 20:19:43 +01:00
Add group max storage
This commit is contained in:
15
go.php
15
go.php
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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']));
|
||||
}
|
||||
|
||||
@@ -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'))
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -103,6 +103,7 @@ return [
|
||||
'SEARCH_USERS' => 'بحث عن مستخدمين',
|
||||
'R_IMG_CTRL' => 'إدارة الصور',
|
||||
'ENABLE_USERFILE' => 'تفعيل مجلدات المستخدمين',
|
||||
'MAX_STORAGE' => 'الحد الأقصى للتخزين (بايت)',
|
||||
'R_EXTRA' => 'هيدر وفوتر إضافي',
|
||||
'EX_HEADER_N' => 'الهيدر الإضافي.. وهو ما يظهر أسفل الهيدر الأصلي ..',
|
||||
'EX_FOOTER_N' => 'الفوتر الإضافي.. وهو ما يظهر أعلى الفوتر الأصلي ..',
|
||||
|
||||
@@ -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' => 'آخر فحص للملفات الخاملة ',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@ return [
|
||||
'SEARCH_USERS' => 'جست وجو براي کاربر',
|
||||
'R_IMG_CTRL' => 'کنترل تصاوير',
|
||||
'ENABLE_USERFILE' => 'فعال سازي فايل هاي کاربران',
|
||||
'MAX_STORAGE' => 'حداکثر ذخیره سازی (بایت)',
|
||||
'R_EXTRA' => 'قالب هاي اضافي',
|
||||
'EX_HEADER_N' => 'هدر اضافي... هدري که در زير هدر اصلي نمايش داده خواهد شد.',
|
||||
'EX_FOOTER_N' => 'فوتر اضافي...فوتري که در بالاي فوتر اصلي نمايش داده خواهد شد.',
|
||||
|
||||
@@ -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' => 'آخرین عملیات چک کردن فایلهای دانلود نشده',
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
33
ucp.php
@@ -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&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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user