diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index aebb3808..819ad92a 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -20,6 +20,7 @@ use App\Models\Tag; use App\Models\Torrent; use App\Models\TorrentOperationLog; use App\Models\User; +use App\Models\UserBanLog; use App\Repositories\AgentAllowRepository; use App\Repositories\AttendanceRepository; use App\Repositories\ExamRepository; @@ -89,10 +90,7 @@ class Test extends Command */ public function handle() { - $rep = new \NexusPlugin\HitAndRun\HitAndRunRepository(); - $rep->initSectionHitAndRunSetting(SearchBox::SECTION_BROWSE . "_"); - $rep->initSectionHitAndRunSetting(SearchBox::SECTION_SPECIAL . "_"); - clear_setting_cache(); + UserBanLog::clearUserBanLogDuplicate(); } diff --git a/app/Models/UserBanLog.php b/app/Models/UserBanLog.php index c6201fbc..081ed06b 100644 --- a/app/Models/UserBanLog.php +++ b/app/Models/UserBanLog.php @@ -7,4 +7,23 @@ class UserBanLog extends NexusModel protected $table = 'user_ban_logs'; protected $fillable = ['uid', 'username', 'operator', 'reason']; + + public static function clearUserBanLogDuplicate() + { + $lists = UserBanLog::query() + ->selectRaw("min(id) as id, uid, count(*) as counts") + ->groupBy('uid') + ->having("counts", ">", 1) + ->get(); + if ($lists->isEmpty()) { + do_log("sql: " . last_query() . ", no data to delete"); + return; + } + $idArr = $lists->pluck("id")->toArray(); + $uidArr = $lists->pluck('uid')->toArray(); + $result = UserBanLog::query()->whereIn("uid", $uidArr)->whereNotIn("id", $idArr)->delete(); + do_log("sql: " . last_query() . ", result: $result"); + } + + } diff --git a/include/cleanup.php b/include/cleanup.php index a9410767..6e58b676 100644 --- a/include/cleanup.php +++ b/include/cleanup.php @@ -1019,6 +1019,15 @@ function docleanup($forceAll = 0, $printProgress = false) { if ($printProgress) { printProgress($log); } + + //remove duplicate user ban logs + $log = "clear user ban log duplicate"; + \App\Models\UserBanLog::clearUserBanLogDuplicate(); + do_log($log); + if ($printProgress) { + printProgress($log); + } + $log = 'Full cleanup is done'; do_log($log); if ($printProgress) { diff --git a/include/functions.php b/include/functions.php index 4f356865..844359f9 100644 --- a/include/functions.php +++ b/include/functions.php @@ -5969,4 +5969,95 @@ JS; \Nexus\Nexus::js($js, 'footer', false); return $input; } + +function build_bonus_table(array $user, array $bonusResult = [], array $options = []) +{ + if (empty($bonusResult)) { + $bonusResult = calculate_seed_bonus($user['id']); + } + $officialTag = get_setting('bonus.official_tag'); + $officialAdditionalFactor = get_setting('bonus.official_addition', 0); + $haremFactor = get_setting('bonus.harem_addition'); + $haremAddition = calculate_harem_addition($user['id']); + $isDonor = is_donor($user); + $donortimes_bonus = get_setting('bonus.donortimes'); + $baseBonusFactor = 1; + if ($isDonor) { + $baseBonusFactor = $donortimes_bonus; + } + $baseBonus = $bonusResult['seed_bonus'] * $baseBonusFactor; + $totalBonus = number_format( $baseBonus + $haremAddition * $haremFactor + $bonusResult['official_bonus'] * $officialAdditionalFactor, 3); + + $rowSpan = 1; + $hasHaremAddition = $hasOfficialAddition = false; + if ($haremFactor > 0) { + $rowSpan++; + $hasHaremAddition = true; + } + if ($officialAdditionalFactor > 0 && $officialTag) { + $rowSpan++; + $hasOfficialAddition = true; + } + + $table = sprintf('', $options['table_style'] ?? ''); + $table .= ''; + $table .= sprintf('', nexus_trans('bonus.table_thead.reward_type')); + $table .= sprintf('', nexus_trans('bonus.table_thead.count')); + $table .= sprintf('', nexus_trans('bonus.table_thead.size')); + $table .= sprintf('', nexus_trans('bonus.table_thead.a_value')); + $table .= sprintf('', nexus_trans('bonus.table_thead.bonus_base')); + $table .= sprintf('', nexus_trans('bonus.table_thead.factor')); + $table .= sprintf('', nexus_trans('bonus.table_thead.got_bonus')); + $table .= sprintf('', nexus_trans('bonus.table_thead.total')); + $table .= ''; + + $table .= sprintf( + '', + nexus_trans('bonus.reward_types.basic'), + $bonusResult['torrent_peer_count'], + mksize($bonusResult['size']), + number_format($bonusResult['A'], 3), + number_format($bonusResult['seed_bonus'],3), + $baseBonusFactor, + number_format($baseBonus,3), + $rowSpan, + $totalBonus + ); + + if ($hasOfficialAddition) { + $table .= sprintf( + '', + nexus_trans('bonus.reward_types.official_addition'), + $bonusResult['official_torrent_peer_count'], + mksize($bonusResult['official_size']), + number_format($bonusResult['official_a'], 3), + number_format($bonusResult['official_bonus'], 3), + $officialAdditionalFactor, + number_format($bonusResult['official_bonus'] * $officialAdditionalFactor, 3) + ); + } + + if ($hasHaremAddition) { + $table .= sprintf( + '', + nexus_trans('bonus.reward_types.harem_addition'), + '--', + '--', + '--', + number_format($haremAddition, 3), + $haremFactor, + number_format($haremAddition * $haremFactor, 3) + ); + } + $table .= '
%s%s%s%s%s%s%s%s
%s%s%s%s%s%s%s%s
%s%s%s%s%s%s%s
%s%s%s%s%s%s%s
'; + + return [ + 'table' => $table, + 'has_harem_addition' => $hasHaremAddition, + 'harem_addition_factor' => $haremFactor, + 'has_official_addition' => $hasOfficialAddition, + 'official_addition_factor' => $officialAdditionalFactor, + ]; + +} ?> diff --git a/lang/chs/lang_mybonus.php b/lang/chs/lang_mybonus.php index 98999c84..21653080 100644 --- a/lang/chs/lang_mybonus.php +++ b/lang/chs/lang_mybonus.php @@ -146,7 +146,7 @@ $lang_mybonus = array 'bonus_base' => '基础魔力', 'lock_text' => '系统限制 %s 秒内只能点击交换按钮一次!', 'text_get_by_seeding_official' => '官种加成每小时将额外得到如下的魔力值', - 'official_calculate_method' => '官种奖励计算公式同上,只是仅针对官种进行计算', + 'official_calculate_method' => '官种奖励计算公式同上,只是仅针对官种进行计算,不考虑低保', 'official_tag_bonus_additional_factor' => '最终奖励为计算所得官种奖励乘以官种系数,当前官种系数为: ', 'reward_type_official_addition' => '官种加成', 'text_get_by_harem' => '后宫加成每小时将额外得到如下的魔力值', diff --git a/lang/chs/lang_userdetails.php b/lang/chs/lang_userdetails.php index d27d81cd..4546c3a2 100644 --- a/lang/chs/lang_userdetails.php +++ b/lang/chs/lang_userdetails.php @@ -155,5 +155,6 @@ $lang_userdetails = array 'row_user_props' => '道具', 'meta_key_change_username_username' => '新用户名', 'consume' => '使用', + 'text_bonus_table' => '时魔', ); ?> diff --git a/lang/cht/lang_mybonus.php b/lang/cht/lang_mybonus.php index 6fb176ba..70c265bf 100644 --- a/lang/cht/lang_mybonus.php +++ b/lang/cht/lang_mybonus.php @@ -146,7 +146,7 @@ $lang_mybonus = array 'bonus_base' => '基礎魔力', 'lock_text' => '系統限製 %s 秒內只能點擊交換按鈕一次!', 'text_get_by_seeding_official' => '官種加成每小時將額外得到如下的魔力值', - 'official_calculate_method' => '官種獎勵計算公式同上,只是僅針對官種進行計算', + 'official_calculate_method' => '官種獎勵計算公式同上,只是僅針對官種進行計算,不考慮低保', 'official_tag_bonus_additional_factor' => '最終獎勵為計算所得官種獎勵乘以官種系數,當前官種系數為: ', 'reward_type_official_addition' => '官種加成', 'text_get_by_harem' => '後宮加成每小時將額外得到如下的魔力值', diff --git a/lang/cht/lang_userdetails.php b/lang/cht/lang_userdetails.php index f9dc757d..4a3c0a98 100644 --- a/lang/cht/lang_userdetails.php +++ b/lang/cht/lang_userdetails.php @@ -155,5 +155,6 @@ $lang_userdetails = array 'row_user_props' => '道具', 'meta_key_change_username_username' => '新用戶名', 'consume' => '使用', + 'text_bonus_table' => '時魔', ); ?> diff --git a/lang/en/lang_mybonus.php b/lang/en/lang_mybonus.php index 83b6717e..70179d9f 100644 --- a/lang/en/lang_mybonus.php +++ b/lang/en/lang_mybonus.php @@ -146,7 +146,7 @@ where"); $seedBonusResult = calculate_seed_bonus($CURUSER['id']); $A = $seedBonusResult['A']; -$officialAdditionalFactor = get_setting('bonus.official_addition', 0); -$officialTag = get_setting('bonus.official_tag'); -$haremFactor = get_setting('bonus.harem_addition'); -$haremAddition = calculate_harem_addition($CURUSER['id']); -$isDonor = is_donor($CURUSER); -$baseBonusFactor = 1; -if ($isDonor) { - $baseBonusFactor = $donortimes_bonus; -} -$baseBonus = $seedBonusResult['seed_bonus'] * $baseBonusFactor; -$totalBonus = number_format( $baseBonus + $haremAddition * $haremFactor + $seedBonusResult['official_bonus'] * $officialAdditionalFactor, 3); +$bonusTableResult = build_bonus_table($CURUSER, $seedBonusResult, ['table_style' => 'width: 50%']); $percent = $seedBonusResult['seed_bonus'] * 100 / ($bzero_bonus + $perseeding_bonus * $maxseeding_bonus); print("
".$lang_mybonus['text_you_are_currently_getting'].round($seedBonusResult['seed_bonus'],3).$lang_mybonus['text_point'].add_s($seedBonusResult['seed_bonus']).$lang_mybonus['text_per_hour']." (A = ".round($A,1).")
"); @@ -450,70 +440,24 @@ else $loadpic = "loadbargreen"; $width = $percent * 4; print("\"".$percent."%\"
"); -$rowSpan = 1; -$hasHaremAddition = $hasOfficialAddition = false; -if ($haremFactor > 0) { - $rowSpan++; - $hasHaremAddition = true; -} -if ($officialAdditionalFactor > 0 && $officialTag) { - $rowSpan++; - $hasOfficialAddition = true; -} -$summaryTable = ''; -$summaryTable .= ''; -$summaryTable .= sprintf( - '', - $lang_mybonus['reward_type_basic'], - $seedBonusResult['torrent_peer_count'], - mksize($seedBonusResult['size']), - number_format($seedBonusResult['A'], 3), - number_format($seedBonusResult['seed_bonus'],3), - $baseBonusFactor, - number_format($baseBonus,3), - $rowSpan, - $totalBonus -); - -if ($hasOfficialAddition) { +if ($bonusTableResult['has_official_addition']) { print("

".$lang_mybonus['text_get_by_seeding_official']."

"); print(""); - $summaryTable .= sprintf( - '', - $lang_mybonus['reward_type_official_addition'], - $seedBonusResult['official_torrent_peer_count'], - mksize($seedBonusResult['official_size']), - number_format($seedBonusResult['official_a'], 3), - number_format($seedBonusResult['official_bonus'], 3), - $officialAdditionalFactor, - number_format($seedBonusResult['official_bonus'] * $officialAdditionalFactor, 3) - ); } -if ($hasHaremAddition) { +if ($bonusTableResult['has_harem_addition']) { print("

".$lang_mybonus['text_get_by_harem']."

"); print(""); - $summaryTable .= sprintf( - '', - $lang_mybonus['reward_type_harem_addition'], - '--', - '--', - '--', - number_format($haremAddition, 3), - $haremFactor, - number_format($haremAddition * $haremFactor, 3) - ); } -$summaryTable .= '
'.$lang_mybonus['reward_type'].''.$lang_mybonus['col_count'].''.$lang_mybonus['col_size'].''.$lang_mybonus['col_a'].''.$lang_mybonus['bonus_base'].''.$lang_mybonus['factor'].''.$lang_mybonus['got_bonus'].''.$lang_mybonus['total'].'
%s%s%s%s%s%s%s%s
%s%s%s%s%s%s%s
%s%s%s%s%s%s%s
'; print("

".$lang_mybonus['text_bonus_summary']."

"); -print '
'.$summaryTable.'
'; +print '
'.$bonusTableResult['table'].'
'; print("

".$lang_mybonus['text_other_things_get_bonus']."

"); print("