diff --git a/app/Models/Setting.php b/app/Models/Setting.php index 348f19a5..37954e68 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -9,6 +9,13 @@ class Setting extends NexusModel { protected $fillable = ['name', 'value']; + /** + * get setting autoload = yes with cache + * + * @param null $name + * @param null $default + * @return array|\ArrayAccess|false|int|mixed|string|null + */ public static function get($name = null, $default = null) { $settings = NexusDB::remember("nexus_settings_in_laravel", 600, function () { @@ -20,18 +27,19 @@ class Setting extends NexusModel return Arr::get($settings, $name, $default); } - public static function getFromDb($name = null, $default = null) + /** + * get setting autoload = yes without cache + * + * @param null $name + * @param null $default + * @return mixed + */ + public static function getFromDb($name = null, $default = null): mixed { - $rows = self::query()->get(['name', 'value']); + $rows = self::query()->where('autoload', 'yes')->get(['name', 'value']); $result = []; foreach ($rows as $row) { - $value = $row->value; - if (!is_null($value)) { - $arr = json_decode($value, true); - if (is_array($arr)) { - $value = $arr; - } - } + $value = self::normalizeValue($row); Arr::set($result, $row->name, $value); } if (is_null($name)) { @@ -40,4 +48,42 @@ class Setting extends NexusModel return Arr::get($result, $name, $default); } + /** + * get from db by name, generally used for `autoload` = 'no' + * + * @param $name + * @param null $default + * @return mixed + */ + public static function getByName($name, $default = null): mixed + { + $result = self::query()->where('name', $name)->first(); + if ($result) { + return self::normalizeValue($result); + } + return $default; + } + + public static function getByWhereRaw($whereRaw): array + { + $result = []; + $list = self::query()->whereRaw($whereRaw)->get(); + foreach ($list as $value) { + Arr::set($result, $value->name, self::normalizeValue($value)); + } + return $result; + } + + public static function normalizeValue(Setting $setting) + { + $value = $setting->value; + if (!is_null($value)) { + $arr = json_decode($value, true); + if (is_array($arr)) { + $value = $arr; + } + } + return $value; + } + } diff --git a/app/Repositories/ClaimRepository.php b/app/Repositories/ClaimRepository.php index e00d3704..fb49d691 100644 --- a/app/Repositories/ClaimRepository.php +++ b/app/Repositories/ClaimRepository.php @@ -25,7 +25,7 @@ class ClaimRepository extends BaseRepository public function store($uid, $torrentId) { $isEnabled = Claim::getConfigIsEnabled(); - if ($isEnabled) { + if (!$isEnabled) { throw new \RuntimeException(nexus_trans("torrent.claim_disabled")); } $exists = Claim::query()->where('uid', $uid)->where('torrent_id', $torrentId)->exists(); diff --git a/database/migrations/2022_05_06_191830_add_autoload_to_settings_table.php b/database/migrations/2022_05_06_191830_add_autoload_to_settings_table.php new file mode 100644 index 00000000..c8e31f92 --- /dev/null +++ b/database/migrations/2022_05_06_191830_add_autoload_to_settings_table.php @@ -0,0 +1,32 @@ +enum('autoload', ['yes', 'no'])->default('yes'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('settings', function (Blueprint $table) { + $table->dropColumn('autoload'); + }); + } +}; diff --git a/include/functions.php b/include/functions.php index e3fee399..73eb9c65 100644 --- a/include/functions.php +++ b/include/functions.php @@ -4938,17 +4938,17 @@ function torrentTags($tags = 0, $type = 'checkbox') return $html; } -function saveSetting($prefix, $nameAndValue) +function saveSetting($prefix, $nameAndValue, $autoload = 'yes') { $prefix = strtolower($prefix); $datetimeNow = date('Y-m-d H:i:s'); - $sql = "insert into settings (name, value, created_at, updated_at) values "; + $sql = "insert into settings (name, value, created_at, updated_at, autoload) values "; $data = []; foreach ($nameAndValue as $name => $value) { if (is_array($value)) { $value = json_encode($value); } - $data[] = sprintf("(%s, %s, %s, %s)", sqlesc("$prefix.$name"), sqlesc($value), sqlesc($datetimeNow), sqlesc($datetimeNow)); + $data[] = sprintf("(%s, %s, %s, %s, '%s')", sqlesc("$prefix.$name"), sqlesc($value), sqlesc($datetimeNow), sqlesc($datetimeNow), $autoload); } $sql .= implode(",", $data) . " on duplicate key update value = values(value)"; sql_query($sql) or sqlerr(__FILE__, __LINE__); diff --git a/lang/chs/lang_settings.php b/lang/chs/lang_settings.php index a7543d7a..55cb79a0 100644 --- a/lang/chs/lang_settings.php +++ b/lang/chs/lang_settings.php @@ -753,6 +753,11 @@ $lang_settings = array 'claim_give_up_deduct_user_bonus' => '用户主动放弃认领扣除用户 %s 魔力。', 'claim_reach_standard' => '达标标准:每月做种时间大于等于 %s 小时, 或上传量大于等于其体积 %s 倍。', 'claim_bonus_multiplier' => '计算达标种子魔力奖励是正常魔力值的 %s 倍。', + 'row_misc_settings' => '其他设定', + 'submit_misc_settings' => '其他设定', + 'text_misc_settings_note' => '配置其他杂项。', + 'row_misc_donation_custom' => '捐赠自定义内容', + 'text_donation_custom_note' => '捐赠页自定义的内容,展示于支付宝、PayPal上面。支持 bbcode 标签', ); ?> diff --git a/lang/cht/lang_settings.php b/lang/cht/lang_settings.php index 9be3bbbc..541142f9 100644 --- a/lang/cht/lang_settings.php +++ b/lang/cht/lang_settings.php @@ -752,6 +752,11 @@ $lang_settings = array 'claim_give_up_deduct_user_bonus' => '用戶主動放棄認領扣除用戶 %s 魔力。', 'claim_reach_standard' => '達標標準:每月做種時間大於等於 %s 小時, 或上傳量大於等於其體積 %s 倍。', 'claim_bonus_multiplier' => '計算達標種子魔力獎勵是正常魔力值的 %s 倍。', + 'row_misc_settings' => '其他設定', + 'submit_misc_settings' => '其他設定', + 'text_misc_settings_note' => '配置其他雜項。', + 'row_misc_donation_custom' => '捐贈自定義內容', + 'text_donation_custom_note' => '捐贈頁自定義的內容,展示於支付寶、PayPal上面。支持 bbcode 標簽', ); ?> diff --git a/lang/en/lang_settings.php b/lang/en/lang_settings.php index 8444afde..b03c5270 100644 --- a/lang/en/lang_settings.php +++ b/lang/en/lang_settings.php @@ -752,6 +752,11 @@ $lang_settings = array 'claim_give_up_deduct_user_bonus' => 'User actively gives up claiming deduct user %s bonus.', 'claim_reach_standard' => 'Standard: Monthly seeding time greater than or equal to %s of hours, or uploaded greater than or equal to %s times its size.', 'claim_bonus_multiplier' => 'Calculate %s times the normal bonus value of the attained seed bonus.', + 'row_misc_settings' => 'Misc settings', + 'submit_misc_settings' => 'Misc settings', + 'text_misc_settings_note' => 'Misc settings', + 'row_misc_donation_custom' => 'Donation custom', + 'text_donation_custom_note' => 'Donation page custom content, displayed above Alipay, PayPal. Support bbcode tag', ); ?> diff --git a/public/donate.php b/public/donate.php index 2ee32dd8..462d1d83 100644 --- a/public/donate.php +++ b/public/donate.php @@ -10,8 +10,9 @@ $do = $_GET['do'] ?? ''; if ($do == 'thanks') { stderr($lang_donate['std_success'], $lang_donate['std_donation_success_note_one']."".$lang_donate['std_here']."".$lang_donate['std_donation_success_note_two'], false); } -else +else { + $custom = trim(\App\Models\Setting::getByName('misc.donation_custom')); $paypal = safe_email($PAYPALACCOUNT); if ($paypal && check_email($paypal)) $showpaypal = true; @@ -27,14 +28,19 @@ else $tdattr = "width=\"50%\""; elseif ($showpaypal || $showalipay) $tdattr = "colspan=\"2\" width=\"100%\""; - else - stderr($lang_donate['std_error'], $lang_donate['std_no_donation_account_available'], false); + + if (!$showpaypal && !$showalipay && !$custom) { + stderr($lang_donate['std_error'], $lang_donate['std_no_donation_account_available'], false); + } stdhead($lang_donate['head_donation']); begin_main_frame(); print("

".$lang_donate['text_donate']."

"); - print(""); - print(""); + print("
".$lang_donate['text_donation_note']."
"); + print(""); + if ($custom) { + echo sprintf('', format_comment($custom)); + } print(""); if ($showpaypal){ ?> diff --git a/public/settings.php b/public/settings.php index 4d129967..36410f2b 100644 --- a/public/settings.php +++ b/public/settings.php @@ -23,7 +23,7 @@ function yesorno($title, $name, $value, $note="") } $action = isset($_POST['action']) ? $_POST['action'] : 'showmenu'; -$allowed_actions = array('basicsettings','mainsettings','smtpsettings','securitysettings','authoritysettings','tweaksettings', 'botsettings','codesettings','bonussettings','accountsettings','torrentsettings', 'attachmentsettings', 'advertisementsettings', 'savesettings_basic', 'savesettings_main','savesettings_smtp','savesettings_security','savesettings_authority','savesettings_tweak','savesettings_bot','savesettings_code','savesettings_bonus', 'savesettings_account','savesettings_torrent', 'savesettings_attachment', 'savesettings_advertisement', 'showmenu'); +$allowed_actions = array('basicsettings','mainsettings','smtpsettings','securitysettings','authoritysettings','tweaksettings', 'botsettings','codesettings','bonussettings','accountsettings','torrentsettings', 'attachmentsettings', 'advertisementsettings', 'savesettings_basic', 'savesettings_main','savesettings_smtp','savesettings_security','savesettings_authority','savesettings_tweak','savesettings_bot','savesettings_code','savesettings_bonus', 'savesettings_account','savesettings_torrent', 'savesettings_attachment', 'savesettings_advertisement', 'showmenu', 'miscsettings', 'savesettings_misc'); if (!in_array($action, $allowed_actions)) $action = 'showmenu'; $notice = "

".$lang_settings['text_website_settings']."

".$lang_donate['text_donation_note']."
%s
@@ -267,6 +267,20 @@ elseif ($action == 'savesettings_advertisement') // save advertisement write_log("Tracker ADVERTISEMENT settings updated by {$CURUSER['username']}. $actiontime",'mod'); go_back(); } +elseif ($action == 'savesettings_misc') +{ + stdhead($lang_settings['row_misc_settings']); + $validConfig = array('donation_custom', ); + GetVar($validConfig); + $data = []; + foreach($validConfig as $config) { + $data[$config] = $$config ?? null; + } + saveSetting('misc', $data, 'no'); + $actiontime = date("F j, Y, g:i a"); + write_log("Misc settings updated by {$CURUSER['username']}. $actiontime",'mod'); + go_back(); +} elseif ($action == 'tweaksettings') // tweak settings { $TWEAK = get_setting_from_db('tweak'); @@ -817,6 +831,17 @@ JS; tr($lang_settings['row_save_settings'],"", 1); print (""); } +elseif ($action == 'miscsettings') +{ + $result = \App\Models\Setting::getByWhereRaw("name like 'misc.%'"); + $misc = $result['misc'] ?? []; + stdhead($lang_settings['head_torrent_settings']); + print ($notice); + print ("
"); + tr($lang_settings['row_misc_donation_custom'],"
".$lang_settings['text_donation_custom_note'], 1); + tr($lang_settings['row_save_settings'],"", 1); + print ("
"); +} elseif ($action == 'showmenu') // settings main page { stdhead($lang_settings['head_website_settings']); @@ -832,6 +857,7 @@ elseif ($action == 'showmenu') // settings main page tr($lang_settings['row_torrents_settings'], "
".$lang_settings['text_torrents_settings_note']."
", 1); tr($lang_settings['row_attachment_settings'], "
".$lang_settings['text_attachment_settings_note']."
", 1); tr($lang_settings['row_advertisement_settings'], "
".$lang_settings['text_advertisement_settings_note']."
", 1); + tr($lang_settings['row_misc_settings'], "
".$lang_settings['text_misc_settings_note']."
", 1); // tr($lang_settings['row_code_settings'], "
".$lang_settings['text_code_settings_note']."
", 1); } print("
");