aboutsummaryrefslogtreecommitdiff
path: root/lib/models/Courseware/TaskGroup.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/models/Courseware/TaskGroup.php')
-rw-r--r--lib/models/Courseware/TaskGroup.php76
1 files changed, 65 insertions, 11 deletions
diff --git a/lib/models/Courseware/TaskGroup.php b/lib/models/Courseware/TaskGroup.php
index 092edf6..6902cb3 100644
--- a/lib/models/Courseware/TaskGroup.php
+++ b/lib/models/Courseware/TaskGroup.php
@@ -2,6 +2,8 @@
namespace Courseware;
+use DBManager;
+use Statusgruppen;
use User;
/**
@@ -19,11 +21,17 @@ use User;
* @property int $task_template_id database column
* @property int $solver_may_add_blocks database column
* @property string $title database column
+ * @property int $start_date database column
+ * @property int $end_date database column
* @property int $mkdate database column
* @property int $chdate database column
* @property \SimpleORMapCollection|Task[] $tasks has_many Task
* @property \User $lecturer belongs_to \User
* @property \Course $course belongs_to \Course
+ * @property \Courseware\StructuralElement $target belongs_to Courseware\StructuralElement
+ * @property \SimpleORMapCollection $tasks has_many Courseware\Task
+ *
+ * @SuppressWarnings(PHPMD.StaticAccess)
*/
class TaskGroup extends \SimpleORMap implements \PrivacyObject
{
@@ -41,6 +49,11 @@ class TaskGroup extends \SimpleORMap implements \PrivacyObject
'foreign_key' => 'seminar_id',
];
+ $config['belongs_to']['target'] = [
+ 'class_name' => StructuralElement::class,
+ 'foreign_key' => 'target_id',
+ ];
+
$config['has_many']['tasks'] = [
'class_name' => Task::class,
'assoc_foreign_key' => 'task_group_id',
@@ -52,6 +65,22 @@ class TaskGroup extends \SimpleORMap implements \PrivacyObject
parent::configure($config);
}
+ /**
+ * Export available data of a given user into a storage object
+ * (an instance of the StoredUserData class) for that user.
+ *
+ * @param StoredUserData $storage object to store data into
+ */
+ public static function exportUserData(\StoredUserData $storage)
+ {
+ $task_groups = DBManager::get()->fetchAll('SELECT * FROM cw_task_groups WHERE lecturer_id = ?', [
+ $storage->user_id,
+ ]);
+ if ($task_groups) {
+ $storage->addTabularData(_('Courseware Aufgaben'), 'cw_task_groups', $task_groups);
+ }
+ }
+
public function getSolvers(): iterable
{
$solvers = $this->tasks->pluck('solver');
@@ -60,20 +89,45 @@ class TaskGroup extends \SimpleORMap implements \PrivacyObject
}
/**
- * Export available data of a given user into a storage object
- * (an instance of the StoredUserData class) for that user.
+ * Returns all submitters of this TaskGroup.
*
- * @param StoredUserData $storage object to store data into
+ * @returns iterable all the submitters of this TaskGroup.
*/
- public static function exportUserData(\StoredUserData $storage)
+ public function getSubmitters(): iterable
{
- $task_groups = \DBManager::get()->fetchAll(
- 'SELECT * FROM cw_task_groups WHERE lecturer_id = ?',
- [$storage->user_id]
+ return DBManager::get()->fetchAll(
+ 'SELECT solver_id, solver_type FROM cw_tasks WHERE task_group_id = ? AND submitted = 1',
+ [$this->getId()],
+ function ($row) {
+ switch ($row['solver_type']) {
+ case 'autor':
+ return \User::find($row['solver_id']);
+ case 'group':
+ return \Statusgruppen::find($row['solver_id']);
+ }
+ }
);
- if ($task_groups) {
- $storage->addTabularData(_('Courseware Aufgaben'), 'cw_task_groups', $task_groups);
- }
-
}
+
+ /**
+ * Returns the task of this TaskGroup given to $solver.
+ *
+ * @param User|Statusgruppen $solver
+ *
+ * @return Task|null
+ */
+ public function findTaskBySolver($solver)
+ {
+ $row = DBManager::get()->fetchOne(
+ 'SELECT id FROM cw_tasks WHERE task_group_id = ? AND solver_id = ? AND solver_type = ?',
+ [
+ $this->getId(),
+ $solver->getId(),
+ $solver instanceof User ? 'autor' : 'group',
+ ]
+ );
+
+ return empty($row) ? null : Task::find($row['id']);
+ }
+
}