From 41e3ba55ee8727b200de1b366c0ecdb4fdaf1bb0 Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Tue, 19 Apr 2022 19:18:52 +0800 Subject: [PATCH] add donate until --- app/Models/User.php | 2 +- app/Repositories/ExamRepository.php | 4 ++-- app/Repositories/TrackerRepository.php | 2 +- include/functions.php | 4 ++-- lang/chs/lang_userdetails.php | 2 ++ lang/cht/lang_userdetails.php | 2 ++ lang/en/lang_userdetails.php | 2 ++ public/announce.php | 4 ++-- public/modtask.php | 2 +- public/userdetails.php | 1 + 10 files changed, 16 insertions(+), 9 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index 13b3a7a7..bf4b354f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -434,7 +434,7 @@ class User extends Authenticatable public function isDonating() { - if ($this->donoruntil && $this->donoruntil >= Carbon::now()->toDateTimeString()) { + if ($this->donor == 'yes' && $this->donoruntil && $this->donoruntil->gte(Carbon::now())) { return true; } return false; diff --git a/app/Repositories/ExamRepository.php b/app/Repositories/ExamRepository.php index 71e54b5c..b3f68e99 100644 --- a/app/Repositories/ExamRepository.php +++ b/app/Repositories/ExamRepository.php @@ -800,10 +800,10 @@ class ExamRepository extends BaseRepository if (!empty($filters->$filter) && count($filters->$filter) == 1) { $donateStatus = $filters->$filter[0]; if ($donateStatus == User::DONATE_YES) { - $baseQuery->where("$userTable.donoruntil", ">=", Carbon::now()->toDateTimeString()); + $baseQuery->where('donor', 'yes')->where("$userTable.donoruntil", ">=", Carbon::now()->toDateTimeString()); } elseif ($donateStatus == User::DONATE_NO) { $baseQuery->where(function (Builder $query) use ($userTable) { - $query->whereNull("$userTable.donoruntil")->orWhere("$userTable.donoruntil", '<', Carbon::now()->toDateTimeString()); + $query->where('donor', 'no')->orWhereNull("$userTable.donoruntil")->orWhere("$userTable.donoruntil", '<', Carbon::now()->toDateTimeString()); }); } else { do_log("{$exam->id} filter $filter: $donateStatus invalid.", "error"); diff --git a/app/Repositories/TrackerRepository.php b/app/Repositories/TrackerRepository.php index 2705bad3..c46dc78c 100644 --- a/app/Repositories/TrackerRepository.php +++ b/app/Repositories/TrackerRepository.php @@ -1013,7 +1013,7 @@ class TrackerRepository extends BaseRepository if ($user->class >= \App\Models\HitAndRun::MINIMUM_IGNORE_USER_CLASS) { return; } - if ($user->donoruntil && $user->donoruntil->gte($now)) { + if ($user->isDonating()) { return; } $hrMode = Setting::get('hr.mode'); diff --git a/include/functions.php b/include/functions.php index e2bf34fe..66ed5aff 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1883,7 +1883,7 @@ function get_user_row($id) { global $Cache, $CURUSER; static $curuserRowUpdated = false; - static $neededColumns = array('id', 'noad', 'class', 'enabled', 'privacy', 'avatar', 'signature', 'uploaded', 'downloaded', 'last_access', 'username', 'donor', 'leechwarn', 'warned', 'title'); + static $neededColumns = array('id', 'noad', 'class', 'enabled', 'privacy', 'avatar', 'signature', 'uploaded', 'downloaded', 'last_access', 'username', 'donor', 'donoruntil', 'leechwarn', 'warned', 'title'); if ($CURUSER && $id == $CURUSER['id']) { $row = array(); foreach($neededColumns as $column) { @@ -3588,7 +3588,7 @@ function get_username($id, $big = false, $link = true, $bold = true, $target = f $disabledpic = "disabled"; $style = "style='margin-left: 2pt'"; } - $pics = $arr["donor"] == "yes" ? "\"Donor\"" : ""; + $pics = $arr["donor"] == "yes" && $arr['donoruntil'] !== null && $arr['donoruntil'] >= date('Y-m-d H:i:s') ? "\"Donor\"" : ""; if ($arr["enabled"] == "yes") $pics .= ($arr["leechwarn"] == "yes" ? "\"Leechwarned\"" : "") . ($arr["warned"] == "yes" ? "\"Warned\"" : ""); diff --git a/lang/chs/lang_userdetails.php b/lang/chs/lang_userdetails.php index 705e43e4..e9fd49a0 100644 --- a/lang/chs/lang_userdetails.php +++ b/lang/chs/lang_userdetails.php @@ -148,5 +148,7 @@ $lang_userdetails = array 'disable_user_migrated' => '启用或禁用用户请到管理后台操作', 'text_user_id'=> "用户ID/UID", 'row_medal' => '勋章', + 'row_donoruntil' => '捐赠状态截止时间', + 'text_donoruntil_note' => "时间格式为'年年年年-月月-日日 时时:分分:秒秒'。损赠有效需要捐赠状态为'是'且截止时间大于当前时间同时满足。", ); ?> diff --git a/lang/cht/lang_userdetails.php b/lang/cht/lang_userdetails.php index ce118821..e0233b8d 100644 --- a/lang/cht/lang_userdetails.php +++ b/lang/cht/lang_userdetails.php @@ -148,5 +148,7 @@ $lang_userdetails = array 'disable_user_migrated' => '啟用或禁用用戶請到管理後臺操作', 'text_user_id'=> "用戶ID/UID", 'row_medal' => '勛章', + 'row_donoruntil' => '捐贈狀態截止時間', + 'text_donoruntil_note' => "時間格式為'年年年年-月月-日日 時時:分分:秒秒'。損贈有效需要捐贈狀態為'是'且截止時間大於當前時間同時滿足。", ); ?> diff --git a/lang/en/lang_userdetails.php b/lang/en/lang_userdetails.php index a4582707..34e90c4e 100644 --- a/lang/en/lang_userdetails.php +++ b/lang/en/lang_userdetails.php @@ -148,5 +148,7 @@ $lang_userdetails = array 'disable_user_migrated' => 'Enable or disable use please go to the new management system.', 'text_user_id'=> "User ID", 'row_medal' => 'Medal', + 'row_donoruntil' => 'Donated until', + 'text_donoruntil_note' => "Time format is YYYY-MM-DD hh:mm:ss. To be valid, the donation status must be 'Yes' and the deadline is greater than the current time.", ); ?> diff --git a/public/announce.php b/public/announce.php index 36f56653..a500206d 100644 --- a/public/announce.php +++ b/public/announce.php @@ -92,7 +92,7 @@ $seeder = ($left == 0) ? "yes" : "no"; // check passkey if (!$az = $Cache->get_value('user_passkey_'.$passkey.'_content')){ - $res = sql_query("SELECT id, downloadpos, enabled, uploaded, downloaded, class, parked, clientselect, showclienterror, passkey, donoruntil FROM users WHERE passkey=". sqlesc($passkey)." LIMIT 1"); + $res = sql_query("SELECT id, downloadpos, enabled, uploaded, downloaded, class, parked, clientselect, showclienterror, passkey, donor, donoruntil FROM users WHERE passkey=". sqlesc($passkey)." LIMIT 1"); $az = mysql_fetch_array($res); do_log("[check passkey], currentUser: " . nexus_json_encode($az), 'error'); $Cache->cache_value('user_passkey_'.$passkey.'_content', $az, 950); @@ -452,7 +452,7 @@ elseif(isset($self)) if ( $event == 'completed' && $az['class'] < \App\Models\HitAndRun::MINIMUM_IGNORE_USER_CLASS - && (empty($az['donoruntil']) || $az['donoruntil'] === '0000-00-00 00:00:00' || $az['donoruntil'] < date("Y-m-d H:i:s")) + && ($az['donor'] == 'no' || empty($az['donoruntil']) || $az['donoruntil'] === null || $az['donoruntil'] < date("Y-m-d H:i:s")) ) { //think about H&R $hrMode = get_setting('hr.mode'); diff --git a/public/modtask.php b/public/modtask.php index 7f325910..8b9f7923 100644 --- a/public/modtask.php +++ b/public/modtask.php @@ -161,8 +161,8 @@ if ($action == "edituser") $updateset[] = "donated = " . sqlesc($donated); $updateset[] = "donated_cny = " . sqlesc($donated_cny); } - $updateset[] = "donor = " . sqlesc($donor); + $updateset[] = "donoruntil = " . sqlesc($_POST['donoruntil']); } if ($chpassword != "" AND $passagain != "") { diff --git a/public/userdetails.php b/public/userdetails.php index 68085efa..eaeb8f8b 100644 --- a/public/userdetails.php +++ b/public/userdetails.php @@ -363,6 +363,7 @@ if (get_user_class() >= $prfmanage_class && $user["class"] < get_user_class()) { tr($lang_userdetails['row_donor_status'], "".$lang_userdetails['radio_yes']." ".$lang_userdetails['radio_no'], 1); tr($lang_userdetails['row_donated'], "USD:     CNY: " . $lang_userdetails['text_transaction_memo'] . "", 1); + tr($lang_userdetails['row_donoruntil'], " ".$lang_userdetails['text_donoruntil_note'], 1); } if (get_user_class() == $prfmanage_class) $maxclass = UC_VIP;