From ca956d9e5f656c99af1d604b6297d1937b517af2 Mon Sep 17 00:00:00 2001 From: LindAndersen Date: Wed, 12 Aug 2026 15:55:29 +0200 Subject: [PATCH 1/2] Task engagement x100 y-axis Issue was wade in 2025 when grades were sorted by task but now they are sorted on groups instead - which should it be? Also ensured groups are correctly sorted --- app/Models/Course.php | 3 +- database/seeders/DatabaseSeeder.php | 1 + database/seeders/GradeSeeder.php | 43 +++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 database/seeders/GradeSeeder.php diff --git a/app/Models/Course.php b/app/Models/Course.php index cb00a3da..bcbd6603 100644 --- a/app/Models/Course.php +++ b/app/Models/Course.php @@ -208,10 +208,11 @@ public function taskEngagement(): Attribute ->leftJoin('tasks', 'grades.task_id', '=', 'tasks.id') ->select([DB::raw("count(tasks.id)/$enrolledCount as grade_count"), 'tasks.id', 'tasks.grouped_by', 'tasks.starts_at', 'tasks.name']) ->groupBy('task_id') + ->orderBy('tasks.grouped_by') ->orderBy('tasks.starts_at') ->orderBy('tasks.order') ->get() - ->mapWithKeys(fn($result) => [$result->grouped_by => round($result->grade_count, 2)]); // @phpstan-ignore-line + ->mapWithKeys(fn($result) => [$result->grouped_by => round($result->grade_count * 100, 2)]); // @phpstan-ignore-line }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a2d56084..7ef252b6 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -20,5 +20,6 @@ public function run() $this->call(TaskSeeder::class); $this->call(UserSeeder::class); $this->call(GroupSeeder::class); + $this->call(GradeSeeder::class); } } diff --git a/database/seeders/GradeSeeder.php b/database/seeders/GradeSeeder.php new file mode 100644 index 00000000..e089de18 --- /dev/null +++ b/database/seeders/GradeSeeder.php @@ -0,0 +1,43 @@ +each(function (Course $course) { + $students = $course->students()->get(); + + if ($students->isEmpty()) { + return; + } + + $tasks = $course->tasks() + ->where('grouped_by', '!=', 'sidebar') + ->get(); + + foreach ($tasks as $task) { + $engagement = rand(30, 100) / 100; + + $engagedStudents = $students + ->shuffle() + ->take((int) round($students->count() * $engagement)); + + foreach ($engagedStudents as $student) { + Grade::factory()->create([ + 'task_id' => $task->id, + 'user_id' => $student->id, + 'source_type' => Task::class, + 'source_id' => $task->id, + ]); + } + } + }); + } +} \ No newline at end of file From aea39d8008c3fbce670e6e1f8926716f942f2565 Mon Sep 17 00:00:00 2001 From: LindAndersen Date: Wed, 12 Aug 2026 16:04:40 +0200 Subject: [PATCH 2/2] php-cs-fixer --- database/seeders/GradeSeeder.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/database/seeders/GradeSeeder.php b/database/seeders/GradeSeeder.php index e089de18..5afaf4e3 100644 --- a/database/seeders/GradeSeeder.php +++ b/database/seeders/GradeSeeder.php @@ -14,7 +14,8 @@ public function run() Course::all()->each(function (Course $course) { $students = $course->students()->get(); - if ($students->isEmpty()) { + if ($students->isEmpty()) + { return; } @@ -22,19 +23,21 @@ public function run() ->where('grouped_by', '!=', 'sidebar') ->get(); - foreach ($tasks as $task) { + foreach ($tasks as $task) + { $engagement = rand(30, 100) / 100; $engagedStudents = $students ->shuffle() ->take((int) round($students->count() * $engagement)); - foreach ($engagedStudents as $student) { + foreach ($engagedStudents as $student) + { Grade::factory()->create([ - 'task_id' => $task->id, - 'user_id' => $student->id, + 'task_id' => $task->id, + 'user_id' => $student->id, 'source_type' => Task::class, - 'source_id' => $task->id, + 'source_id' => $task->id, ]); } }