mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-07-20 09:37:29 +08:00
Compare commits
2 Commits
f07e0a5013
...
5c9caa7a46
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c9caa7a46 | |||
| a712a3f1e4 |
+1
-1
@@ -1,6 +1,6 @@
|
||||
English | [中文](/)
|
||||
|
||||
Complete PT website building solution. Based on NexusPHP + Laravel + Filament.
|
||||
Complete PT website building solution. Based on NexusPHP + Laravel + FilamentPHP.
|
||||
|
||||
Welcome to participate in internationalization work, click [here](https://github.com/xiaomlove/nexusphp/discussions/193) for more information
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
中文 | [English](/README-EN.md)
|
||||
|
||||
完整的 PT 建站解决方案。基于 NexusPHP + Laravel + Filament。
|
||||
完整的 PT 建站解决方案。基于 NexusPHP + Laravel + FilamentPHP。
|
||||
|
||||
欢迎参与国际化工作,点击 [这里](https://github.com/xiaomlove/nexusphp/discussions/193) 了解详情
|
||||
|
||||
|
||||
@@ -235,6 +235,7 @@ class Exam extends NexusModel
|
||||
|
||||
public function getRecurringBegin(Carbon $time): Carbon
|
||||
{
|
||||
$time = $time->copy();
|
||||
$recurring = $this->recurring;
|
||||
if ($recurring == self::RECURRING_WEEKLY) {
|
||||
return $time->startOfWeek();
|
||||
@@ -248,6 +249,7 @@ class Exam extends NexusModel
|
||||
|
||||
public function getRecurringEnd(Carbon $time): Carbon
|
||||
{
|
||||
$time = $time->copy();
|
||||
$recurring = $this->recurring;
|
||||
if ($recurring == self::RECURRING_WEEKLY) {
|
||||
return $time->endOfWeek();
|
||||
|
||||
@@ -31,8 +31,8 @@ class ExamRepository extends BaseRepository
|
||||
|
||||
public function store(array $params)
|
||||
{
|
||||
$this->checkIndexes($params);
|
||||
$this->checkBeginEnd($params);
|
||||
$diffInHours = $this->checkBeginEnd($params);
|
||||
$this->checkIndexes($params, $diffInHours);
|
||||
$this->checkFilters($params);
|
||||
/**
|
||||
* does not limit this
|
||||
@@ -48,8 +48,8 @@ class ExamRepository extends BaseRepository
|
||||
|
||||
public function update(array $params, $id)
|
||||
{
|
||||
$this->checkIndexes($params);
|
||||
$this->checkBeginEnd($params);
|
||||
$diffInHours = $this->checkBeginEnd($params);
|
||||
$this->checkIndexes($params, $diffInHours);
|
||||
$this->checkFilters($params);
|
||||
/**
|
||||
* does not limit this
|
||||
@@ -76,7 +76,7 @@ class ExamRepository extends BaseRepository
|
||||
return $params;
|
||||
}
|
||||
|
||||
private function checkIndexes(array $params): bool
|
||||
private function checkIndexes(array $params, float $examDuration): bool
|
||||
{
|
||||
if (empty($params['indexes'])) {
|
||||
throw new \InvalidArgumentException("Require index.");
|
||||
@@ -94,6 +94,14 @@ class ExamRepository extends BaseRepository
|
||||
'Invalid require value for index: %s.', $index['index']
|
||||
));
|
||||
}
|
||||
if ($index['index'] == Exam::INDEX_SEED_TIME_AVERAGE) {
|
||||
if ($index['require_value'] > $examDuration) {
|
||||
throw new \InvalidArgumentException(nexus_trans(
|
||||
'admin.resources.exam.index_seed_time_average_require_value_invalid',
|
||||
['index_seed_time_average_require_value' => $index['require_value'], 'duration' => $examDuration]
|
||||
));
|
||||
}
|
||||
}
|
||||
$validIndex[$index['index']] = $index;
|
||||
}
|
||||
if (empty($validIndex)) {
|
||||
@@ -102,28 +110,40 @@ class ExamRepository extends BaseRepository
|
||||
return true;
|
||||
}
|
||||
|
||||
private function checkBeginEnd(array $params): bool
|
||||
/**
|
||||
* check if begin/end valid, if yes, return diff in hours, else throw InvalidArgumentException
|
||||
* @param array $params
|
||||
* @return float
|
||||
*/
|
||||
private function checkBeginEnd(array $params): float
|
||||
{
|
||||
if (
|
||||
!empty($params['begin']) && !empty($params['end'])
|
||||
&& empty($params['duration'])
|
||||
&& empty($params['recurring'])
|
||||
) {
|
||||
return true;
|
||||
$begin = Carbon::parse($params['begin']);
|
||||
$end = Carbon::parse($params['end']);
|
||||
return round($begin->diffInHours($end, true));
|
||||
}
|
||||
if (
|
||||
empty($params['begin']) && empty($params['end'])
|
||||
&& isset($params['duration']) && ctype_digit((string)$params['duration']) && $params['duration'] > 0
|
||||
&& empty($params['recurring'])
|
||||
) {
|
||||
return true;
|
||||
//unit: day
|
||||
return round(floatval($params['duration']) * 24);
|
||||
}
|
||||
if (
|
||||
empty($params['begin']) && empty($params['end'])
|
||||
&& empty($params['duration'])
|
||||
&& !empty($params['recurring'])
|
||||
) {
|
||||
return true;
|
||||
$exam = new Exam(['recurring' => $params['recurring']]);
|
||||
$now = Carbon::now();
|
||||
$begin = $exam->getRecurringBegin($now);
|
||||
$end = $exam->getRecurringEnd($now);
|
||||
return round($begin->diffInHours($end, true));
|
||||
}
|
||||
|
||||
throw new \InvalidArgumentException(nexus_trans("exam.time_condition_invalid"));
|
||||
@@ -672,8 +692,8 @@ class ExamRepository extends BaseRepository
|
||||
if ($index['index'] == Exam::INDEX_SEED_TIME_AVERAGE) {
|
||||
$torrentCountsRes = Snatch::query()
|
||||
->where('userid', $user->id)
|
||||
->where('completedat', '>=', $begin)
|
||||
->where('completedat', '<=', $end)
|
||||
->where('last_action', '>=', $begin)
|
||||
->where('last_action', '<=', $end)
|
||||
->selectRaw("count(distinct(torrentid)) as counts")
|
||||
->first();
|
||||
do_log("special index: {$index['index']}, get torrent count by: " . last_query());
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.10.0');
|
||||
defined('RELEASE_DATE') || define('RELEASE_DATE', '2026-01-31');
|
||||
defined('RELEASE_DATE') || define('RELEASE_DATE', '2026-02-01');
|
||||
defined('IN_TRACKER') || define('IN_TRACKER', false);
|
||||
defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP");
|
||||
defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org");
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Index::index duplicitní!',
|
||||
'index_seed_time_average_require_value_invalid' => 'Požadovaný průměrný čas distribuce :index_seed_time_average_require_value je větší než celková doba trvání zkoušky :duration. Prosím změňte jej!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Indeks::index dublet!',
|
||||
'index_seed_time_average_require_value_invalid' => 'Den krævede gennemsnitlige seeding tid :index_seed_time_average_require_value er større end den samlede eksamen varighed :duration. Rediger den!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Index::Index duplizieren !',
|
||||
'index_seed_time_average_require_value_invalid' => 'Die erforderliche durchschnittliche Verteilungszeit :index_seed_time_durchschnitage_require_value ist größer als die Gesamtprüfungsdauer :Dauer. Bitte ändern!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Index::index duplicate !',
|
||||
'index_seed_time_average_require_value_invalid' => 'Ο απαιτούμενος μέσος χρόνος σποράς :index_seed_time_average_require_value είναι μεγαλύτερος από τη συνολική διάρκεια εξετάσεων :duration. Παρακαλώ τροποποιήστε το!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Index::index duplicate !',
|
||||
'index_seed_time_average_require_value_invalid' => 'The required average seeding time :index_seed_time_average_require_value is greater than the total exam duration :duration. Please modify it!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Índice::índice duplicado!',
|
||||
'index_seed_time_average_require_value_invalid' => 'El tiempo de semilla requerido :index_seed_time_average_require_value es mayor que el tiempo total del examen :duración. ¡Por favor, modifícalo!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Indeksi::index kopioi !',
|
||||
'index_seed_time_average_require_value_invalid' => 'Vaadittu keskimääräinen lähetysaika :index_seed_time_average_require_value on suurempi kuin kokonaistentin kesto :duration. Muokkaa sitä!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Index::index dupliqué !',
|
||||
'index_seed_time_average_require_value_invalid' => 'Le temps moyen requis pour le seeding :index_seed_time_average_require_value est supérieur à la durée totale de l\'examen :duration. Veuillez le modifier !'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Indice::index duplicato !',
|
||||
'index_seed_time_average_require_value_invalid' => 'Il tempo medio richiesto di seeding :index_seed_time_average_require_value è maggiore della durata totale dell\'esame :duration. Modificalo!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'インデックス::index duplication!',
|
||||
'index_seed_time_average_require_value_invalid' => '必要なシード時間 :index_seed_time_average_require_value は、合計試験時間 :durationよりも大きいです。変更してください!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Indeks::index duplisert !',
|
||||
'index_seed_time_average_require_value_invalid' => 'Gjennomsnittlig gjennomsnittlig tid for seeding :index_seed_time_average_require_value er større enn total eksamens varighet :duration. Endre den!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Index::index duplicaat!',
|
||||
'index_seed_time_average_require_value_invalid' => 'De vereiste gemiddelde seeding tijd :index_seed_time_average_require_value is groter dan de totale examenduur :duur. Wijzig deze!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Indeks::index duplikat!',
|
||||
'index_seed_time_average_require_value_invalid' => 'Wymagany średni czas seedowania :index_seed_time_average_require_value jest większy niż całkowity czas trwania egzaminu :duration. Zmodyfikuj go!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Índice::index duplicado!',
|
||||
'index_seed_time_average_require_value_invalid' => 'O tempo médio de semeamento necessário :index_seed_time_average_require_value é maior do que a duração total do exame :duration. Por favor, modifique!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Index::index duplicat!',
|
||||
'index_seed_time_average_require_value_invalid' => 'Timpul mediu necesar pentru seeding :index_seed_time_average_require_value este mai mare decât durata totală de exam :duration. Vă rugăm să o modificați!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Индекс::index дубликат !',
|
||||
'index_seed_time_average_require_value_invalid' => 'Требуемое среднее время раздачи :index_seed_time_average_require_value больше, чем общая продолжительность экзамена :duration. Пожалуйста, измените его!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => 'Index::index dubblett!',
|
||||
'index_seed_time_average_require_value_invalid' => 'Den nödvändiga genomsnittliga såddtiden :index_seed_time_average_require_value är större än den totala testtiden :duration. Vänligen ändra det!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => 'Bulk pardon',
|
||||
|
||||
@@ -108,6 +108,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => '指标::index 重复!',
|
||||
'index_seed_time_average_require_value_invalid' => '指标平均做种时间的要求量::index_seed_time_average_require_value 大于整个考核时长::duration,请修改!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => '批量免罪',
|
||||
|
||||
@@ -110,6 +110,7 @@ return [
|
||||
],
|
||||
'exam' => [
|
||||
'index_duplicate' => '指標::index 重復!',
|
||||
'index_seed_time_average_require_value_invalid' => '指標平均做種時間的要求量::index_seed_time_average_require_value 大於整個考核時長::duration,請修改!'
|
||||
],
|
||||
'hit_and_run' => [
|
||||
'bulk_action_pardon' => '批量免罪',
|
||||
|
||||
Reference in New Issue
Block a user